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

Ответить
sisaw
Сообщения: 3
Зарегистрирован: 01 апр 2014, 19:12

01 апр 2014, 19:21

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

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

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. 
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

01 апр 2014, 19:28

if s[1].f='в' - проверяет всю строку на равенство "в", а нужен именно 1 символ (в самом простом случае): if s.f[1]='в'
Нужно предусмотреть, что фамилия может начинаться с пробела или быть пустой, а так же предусмотреть заглавные и строчные буквы
It's a long way to the top if you wanna rock'n'roll
sisaw
Сообщения: 3
Зарегистрирован: 01 апр 2014, 19:12

01 апр 2014, 19:46

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


А как сделать что бы он проверял и заглавную букву
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

01 апр 2014, 20:09

if s[1].f='В'
[syntax=Delphi] [/syntax]
sisaw
Сообщения: 3
Зарегистрирован: 01 апр 2014, 19:12

01 апр 2014, 21:27

Duncon писал(а):if s[1].f='В'

да это понятно просто я не понимаю как его в цикл записать там надо еще раз for открывать или нет?
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

01 апр 2014, 22:57

if (s[1].f='в') or (s[1].f='В') then
[syntax=Delphi] [/syntax]
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

04 апр 2014, 11:15

Нет. Зачем первый элемент в цикле проверять?

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

if (s[i].f='в') or (s[i].f='В') then 
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

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
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

04 апр 2014, 11:21

Но вообще то помощь тебе не нужна, иначе дал бы теме осмысленное название.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить