Страница 1 из 1

не могу понять

Добавлено: 01 апр 2014, 19:21
sisaw
Распечатать список учеников, фамилии которых начинаются на букву В, с указанием даты их рождения(у меня программа не проверяет фамилии начинающие на букву "в" сказали что надо вырезать этот фрагмент и сделать проверку но я даже не представляю каким оператором можно это сделать)

Код: Выделить всё

program b;
type anketa=record
f:string;
i:string;
o:string;
dat_r:string;
end;
var
s:array[1..4] of anketa;
i,k:integer;
begin
for i:=1 to 4 do
begin 
writeln('введите ФИО');
readln(s[i].f);
readln(s[i].i);
readln(s[i].o);
writeln('ввод закончен');
end;
k:=0;
for i:=1 to 4 do 
if s[1].f='в' then
begin
writeln('фамилии студентов',s[i].f,s[i].dat_r);
end
else
k:=k+1;
if k=4 then
writeln('нет');
end. 

Re: не могу понять

Добавлено: 01 апр 2014, 19:28
somewhere
if s[1].f='в' - проверяет всю строку на равенство "в", а нужен именно 1 символ (в самом простом случае): if s.f[1]='в'
Нужно предусмотреть, что фамилия может начинаться с пробела или быть пустой, а так же предусмотреть заглавные и строчные буквы

Re: не могу понять

Добавлено: 01 апр 2014, 19:46
sisaw
somewhere писал(а):if s[1].f='в' - проверяет всю строку на равенство "в", а нужен именно 1 символ (в самом простом случае): if s.f[1]='в'
Нужно предусмотреть, что фамилия может начинаться с пробела или быть пустой, а так же предусмотреть заглавные и строчные буквы


А как сделать что бы он проверял и заглавную букву

Re: не могу понять

Добавлено: 01 апр 2014, 20:09
Duncon
if s[1].f='В'

Re: не могу понять

Добавлено: 01 апр 2014, 21:27
sisaw
Duncon писал(а):if s[1].f='В'

да это понятно просто я не понимаю как его в цикл записать там надо еще раз for открывать или нет?

Re: не могу понять

Добавлено: 01 апр 2014, 22:57
Duncon
if (s[1].f='в') or (s[1].f='В') then

Re: не могу понять

Добавлено: 04 апр 2014, 11:15
Сионист
Нет. Зачем первый элемент в цикле проверять?

Код: Выделить всё

if (s[i].f='в') or (s[i].f='В') then 

Re: не могу понять

Добавлено: 04 апр 2014, 11:19
Сионист
А если надо отбросить стартовые пробелы, то

Код: Выделить всё

function CutStartSpaces(s:string):string;
var i,l:integer;
    c:char;
    r:string;
    f:boolean;
begin
     r:='';
     l:=length(s);
     f:=false;
     for i:=1 to l do
     begin
          c:=s[i];
          if c<>' ' then f:=true;
          if f then r:=r+c;
     end;
     CutStartSpaces:=r;
end;
и тогда

Код: Выделить всё

if (CutStartSpaces(s[i].f)='в') or (CutStartSpaces(s[i].f)='В') then

Re: не могу понять

Добавлено: 04 апр 2014, 11:21
Сионист
Но вообще то помощь тебе не нужна, иначе дал бы теме осмысленное название.