Глава 44, задачи б, в.

Книга адресована школьникам средних и старших классов, желающим испытать себя в «олимпийских схватках». Может быть полезна студентам-первокурсникам и преподавателям информатики.

Модераторы: Oleg_D, Модераторы

Глава 44, задачи б, в.

Сообщение Ariman » 08.10.2015 19:28:33

Есть код из ответов:
Код: Выделить всё
const { типизированные константы для русских букв }
HighChars: string = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
LowChars : string = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
function High(arg: char): char;
var i: integer;
begin
High:= arg;
if arg in ['a'..'z']
then High:= Upcase(arg)
else for i := 1 to Length(LowChars) do
if arg= LowChars[i] then begin
High:= HighChars[i];
break;
end
end;
function Low(arg: char): char;
var i: integer;
begin
Low:= arg;
if arg in ['A'..'Z']
then Low:= Char( Ord(arg) + Ord('z') - Ord('Z') )
else for i := 1 to Length(LowChars) do
if arg= HighChars[i] then begin
Low:= LowChars[i];
break;
end
end;
function HighStr(const arg: string): string;
var i: integer; s: string;
begin
s:='';
for i := 1 to Length(arg) do s:= s+ High(arg[i]);
HighStr:= s;
end;
function LowStr(const arg: string): string;
var i: integer; s: string;
begin
s:='';
for i := 1 to Length(arg) do s:= s+ Low(arg[i]);
LowStr:= s;
end;
begin
Writeln(HighStr('Pascal Паскаль 123'));
Writeln(LowStr('Pascal Паскаль 123'));
Readln;
end.

Получаю вот такой результат работы программы:
Код: Выделить всё
PASCAL ПАСКАЛЬ 123
pascal паёкаль 123

В чем подвох?

P.S. Linux Mint, fpc-2.6.2
Ariman
незнакомец
 
Сообщения: 9
Зарегистрирован: 04.05.2014 09:07:40

Re: Глава 44, задачи б, в.

Сообщение Oleg_D » 11.10.2015 11:35:05

Ariman писал(а):В чем подвох?

Под виндой проверил, всё ОК, ждём подмоги от линуксоидов.
А в текстовый файл вывод направить пробовали?
Oleg_D
постоялец
 
Сообщения: 390
Зарегистрирован: 09.05.2011 11:28:36

Re: Глава 44, задачи б, в.

Сообщение Ariman » 11.10.2015 13:28:31

Oleg_D писал(а):А в текстовый файл вывод направить пробовали?

Попробовал. Результат тот же.
Ariman
незнакомец
 
Сообщения: 9
Зарегистрирован: 04.05.2014 09:07:40

Re: Глава 44, задачи б, в.

Сообщение bormant » 12.10.2015 00:02:17

Ariman писал(а):В чем подвох?

P.S. Linux Mint, fpc-2.6.2


Ваш исходник в UTF-8, в ней пуковки кодируются так:
#$d0#$a1 - "С",
#$d1#$81 - "с",
#$d0#$81 - "ё".

Вы просматриваете строку не по символам, а побайтно; заменяете #$a1 на #$81, из #$d0#$a1 получаете #$d0#$81 вместо #$d1#$81.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Глава 44, задачи б, в.

Сообщение Ariman » 13.10.2015 20:51:42

Объясните, пожалуйста, неразумному, как прочитать посимвольно, а не побайтно? И какой тип использовать. Ведь char в Free Pascal исключительно 1 байт. Для строки есть UTF8String, а для символа?
Ariman
незнакомец
 
Сообщения: 9
Зарегистрирован: 04.05.2014 09:07:40

Re: Глава 44, задачи б, в.

Сообщение vk_barnaul » 14.10.2015 07:36:06

Ariman писал(а):Объясните, пожалуйста, неразумному, как прочитать посимвольно, а не побайтно? И какой тип использовать. Ведь char в Free Pascal исключительно 1 байт. Для строки есть UTF8String, а для символа?

http://wiki.freepascal.org/LCL_Unicode_Support/ru
а если коротко UTF8Copy(твоя_строка,номер_нужного_символа,1)
vk_barnaul
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.09.2015 04:48:21


Вернуться в Книга "Песни о Паскале"

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru