Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите решить ошибку в программе

Рафаил Аубакиров Знаток (386), на голосовании 12 лет назад
Вот задача, которую мне надо решить на языке Pascal:

Однажды Вася очень долго просидел на оста¬новке, прежде чем дождался своего автобуса. Чтобы как-то занять время, он решил записывать на лис¬точке государственные регистрационные номера проходящих мимо автобусов, следующих по друго¬му маршруту. При этом производилась запись лишь основного номера, без учета региональной принад-лежности. В итоге Васе удалось записать N таких номеров.
Основная часть государственного регистраци¬онного номера состоит из шести символов: трех букв и трех цифр. Сначала идет буква, затем — три цифры, и еще две буквы заканчивают запись. В ка¬честве цифр могут использоваться любые цифры от 0 до 9, а в качестве букв — только прописные буквы, обозначения которых присутствуют как в английском, так и в русском алфавитах, т. е. толь¬ко следующие символы: А, В, С, Е, Н, К, М, О, Р, Т, X, Y. Например, «Р204ВТ» — правильный но¬мер, a «X182YZ» и «АВС216» — нет.
Ваша задача заключается в проверке правиль¬ности проделанной Васей работы. А именно: нужно определить, какие из номеров соответствуют при¬нятому стандарту, а какие — нет.
Входные данные.
Первая строка входного файла input.txt содержит единственное натуральное число N — количество записанных Васей номеров (N < 50). Далее следует N строк с записями номеров автобусов. Длины строк не превышают 300 и содержат только символы с кодами ASCII от 33 до 127 (не содержат пробелов, специальных и русских символов).
Выходные данные.
В выходной файл output.txt выведите N строк, в i-Й строке должно содержаться «Yes», если соответ¬ствующая i-я запись номера верна, и «No» — в про¬тивном случае.

Вот программа, которой я пытался решить

var
s:string;
n,i,i1,a1,c:integer;
f,f1:text;
function LTR (a:char):boolean;
begin
result:= a in ['A', 'B', 'C','E','H','K','M','O','P','T','X','Y'];
end;
function LTN (b:integer):boolean;
begin
result:= b in [0..9];
end;
begin
assign(F,'C:\input.txt');
reset(f);
readln(f,n);
assign(F1,'C:\output.txt');
rewrite(f1);
for i:=1 to n do begin
c:=0;
readln(f,s);
if LTR(s[1]) then c:=c+1;
if LTN(s[2]) then c:=c+1;
if LTN(s[3]) then c:=c+1;
if LTN(s[4]) then c:=c+1;
if LTR(s[5]) then c:=c+1;
if LTR(s[6]) then c:=c+1;
if c=6 then writeln(f1,'Yes') else writeln(f1,'No');
end;
close(f1);
close(f);
end.

в программа, где "if LTN" пишет ошибку "Нельзя преобразовать тип Char к Integer". Подскажите пожалуйста, как можно по другому решить или что дописать в программе, чтоб решалось всё, а то уже голова пухнет от этой задачи.
Дополнен 12 лет назад
Сергей Печеный, попробовал как ты сказал - спасибо, программа проходит, но ответ выводит неверный, программа не может понять буквы, не знаю почему.
Дополнен 12 лет назад
точнее сравнивает их и не понимает что есть подходящие буквы, просто считает что не подходит
Дополнен 12 лет назад
Всё, понял в чем причина, на виндовс севен буквы другой кодировки, вот и не выходил верный ответ. А вот на ХР всё верно. Спасибо за помощь!
Голосование за лучший ответ
Сергей Печеный Знаток (481) 12 лет назад
напиши функцию так:

функтион ЛТН (б: чар): булеан;
бегин
ресулт: =б ин ['0'..'9'];
энд;

ЗЫ Мне запрещено писать англ буквы, поэтому пишу транслитом...
Похожие вопросы