Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2011, 20:46   #1
BaronVik
Пользователь
 
Регистрация: 21.04.2010
Сообщений: 36
Вопрос Сравнение записи и строки

Здравствуйте уважаемые программисты. У меня вопрос по поводу задачи.
Задание: по фамилии имени отчества отца найти самого младшего ребёнка в семье. Таблица должна иметь такой вид
--------------------------------------------------------------
...Отец.........!....Мать.......!.. .Ребенок !............! Ребенок !
--------------------------------------------------------------
Ф.И.О.!даты..!Ф.И.О.!даты..! Имя!даты !............! Имя !даты !
.........!рожд.!..........!рожд.!.. ....!рожд.!.......... ! .......!рожд. !


Код:
Program Lab_2_1;
const n=100;
Type
Anketa=record
   Father:record
      FIO:string[80];
      DataRozdenia:record
         Year:Integer;
         Month:1..12;
         Day:1..31;
      end;
   end;
   Mather:record
      FIO:string[80];
      DataRozdenia:record
         Year:Integer;
         Month:1..12;
         Day:1..31;
      end;
   end;
   Deti:array[1..5] of record
      Name:string[20];
      DataRozdenia:record
         Year:Integer;
         Month:1..12;
         Day:1..31;
      end;
   end;
end;
var i,j,detey,roditeley:byte;
    Family: array [1..n] of Anketa;
    otec:string[80];
Begin
writeln('Programma naidet Samogo mladshego rebenka y otca,Fio kotorogo vi vvedete');
repeat
   write('Vvedite kol-vo semey ne bolee 100: ');
   readln(roditeley);
   if not (roditeley in [1..100]) then
      writeln('Osibka');
until (n in [1..10]);

write('Vvedite kol-vo semey ne bolee 100: ');
readln(roditeley);
for i:=1 to roditeley do
with Family[i] do
   Begin
      with Father do
         begin
            write('Vvedite Familiy.I.O. ',i,'-go otca: ');
            readln(FIO);
               with DataRozdenia do
                   begin
                      write('Vvedite god rozdenia ',i,'-go otca: ');
                      readln(Year);
                      repeat
                         writeln('Vvedite mesyac rozdenia ',i,'-go otca: ');
                         readln(Month);
                         if not (Month in [1..12]) then
                            writeln('Osibka');
                      until (Month in [1..12]);
                      repeat
                         writeln('Vvedite den rozdenia ',i,'-go otca: ');
                         readln(Day);
                         if not (Day in [1..31]) then
                            writeln('Osibka');
                      until (Day in [1..31]);
                   end;
         end;
      with Mather do
         begin
            write('Vvedite Familiy.I.O. ',i,'-oy materi: ');
            readln(FIO);
               with DataRozdenia do
                   begin
                      write('Vvedite god rozdenia ',i,'-oy materi: ');
                      readln(Year);
                      repeat
                         writeln('Vvedite mesyac rozdenia ',i,'-oy materi: ');
                         readln(Month);
                         if not (Month in [1..12]) then
                            writeln('Osibka');
                      until (Month in [1..12]);
                      repeat
                         writeln('Vvedite den rozdenia ',i,'-oy materi: ');
                         readln(Day);
                         if not (Day in [1..31]) then
                            writeln('Osibka');
                      until (Day in [1..31]);
                   end;
         end;
      repeat
         writeln('Vvedite kol-vo detei(ne bolee 5)');
         readln(detey);
         if not (detey in [1..5]) then
            writeln('Osibka');
      until (detey in [1..5]);
      for j:=1 to detey do
      with Deti[j] do
         begin
            write('Vvedite im9 ',j,'-go rebenka');
            readln(Name);
               with DataRozdenia do
                   begin
                      write('Vvedite god rozdenia ',j,'-go rebenka');
                      readln(Year);
                      repeat
                         writeln('Vvedite mesyac rozdenia',j,'-go rebenka');
                         readln(Month);
                         if not (Month in [1..12]) then
                            writeln('Osibka');
                      until (Month in [1..12]);
                      repeat
                         writeln('Vvedite den rozdenia',j,'-go rebenka');
                         readln(Day);
                         if not (Day in [1..31]) then
                            writeln('Osibka');
                      until (Day in [1..31]);
                   end;
         end;
   end;
После ввода этой требухи я прошу ввести ФИО отца,а после сравнить "отца"-строку и "Family[1].Father.FIO"-запись
Код:
writeln('Vvedite Family I.O. otca');
readln(otec);
for i:=1 to roditeley do
if Family[1].Father.FIO=otec then
Паскаль пишет неверное выражение.
Прошу объясните что с этим сделать чтобы сравнилось.

Код нужно оформлять тегом [CODE]..[/СODE]Модератор.

Последний раз редактировалось Serge_Bliznykov; 06.02.2011 в 22:00.
BaronVik вне форума Ответить с цитированием
Старый 06.02.2011, 22:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

жуть... внутрь программы, признаюсь честно, не смотрел..

1) самый же первый цикл БЕСКОНЕЧНЫЙ
ибо вводите readln(roditeley);
а цикл крутите по n:
until (n in [1..10]);
измените на
Код:
until (roditeley in [1..10]);
да и не совпадают границы - всё таки от 1 до 10 надо или 1 до 100 ?!

2)
Код:
writeln('Vvedite Family I.O. otca');
readln(otec);
for i:=1 to roditeley do
  if Family[i].Father.FIO=otec then WriteLn(i);
не понимаю, где именно Вам Паскаль пишет про неверное утверждение. Данная конструкция компилируется нормально.
Для работы только замените Family[1] на Family[i]
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.02.2011, 22:23   #3
BaronVik
Пользователь
 
Регистрация: 21.04.2010
Сообщений: 36
По умолчанию

Код:
until (roditeley in [1..10]);
Да сейчас над этим колупался минут 5 почему бесконечно спрашивает,допёрло до самого)
А не компилировалось на паскале ABC,на турбо всё заработало.
Спасибо.

Ещё вопрос
Как сделать по короче чтобы ребёнка находили по дням,мясецам и годам.
Я сделал только по годам. В общем подскажите алгоритм.

А и ещё убрал лишнее

Код:
Program Lab_2_1;
const n=100;
Type
Anketa=record
   Father:record
      FIO:string[80];
   end;
   Mather:record
      FIO:string[80];
   end;
   Deti:array[1..5] of record
      Name:string[20];
      DataRozdenia:record
         Year:Integer;
         Month:1..12;
         Day:1..31;
      end;
   end;
end;
var i,j,detey,roditeley,mesyac,den,nomer_reb,nomer_otca:byte;
    Family: array [1..n] of Anketa;
    otec:string[80];
    God:integer;
    alf:set of char;
Begin

repeat
   write('Vvedite kol-vo semey ne bolee 100: ');
   readln(roditeley);
   if not (roditeley in [1..100]) then
      writeln('Osibka');
until (roditeley in [1..100]);
for i:=1 to roditeley do
with Family[i] do
   Begin
      with Father do
         begin
            write ('Vvedite Familiy.I.O. ',i,'-go otca: ');
            readln(FIO);
   end;
   Deti:array[1..5] of record
      Name:string[20];
      DataRozdenia:record
         Year:Integer;
         Month:1..12;
         Day:1..31;
      end;
   end;
end;
var i,j,detey,roditeley,mesyac,den,nomer_reb,nomer_otca:byte;
    Family: array [1..n] of Anketa;
    otec:string[80];
    God:integer;
    alf:set of char;
Begin

repeat
   write('Vvedite kol-vo semey ne bolee 100: ');
   readln(roditeley);
   if not (roditeley in [1..100]) then
      writeln('Osibka');
until (roditeley in [1..100]);
for i:=1 to roditeley do
with Family[i] do
   Begin
      with Father do
         begin
            write ('Vvedite Familiy.I.O. ',i,'-go otca: ');
            readln(FIO);
         end;
      repeat
         write('Vvedite kol-vo detei(ne bolee 5)');
         readln(detey);
         if not (detey in [1..5]) then
            writeln('Osibka');
      until (detey in [1..5]);
      for j:=1 to detey do
      with Deti[j] do
         begin
            write('Vvedite im9 ',j,'-go rebenka: ');
            readln(Name);
               with DataRozdenia do
                   begin
                      write('Vvedite god rozdenia ',j,'-go rebenka: ');
                      readln(Year);
                      repeat
                         write('Vvedite mesyac rozdenia',j,'-go rebenka');
                         readln(Month);
                         if not (Month in [1..12]) then
                            writeln('Osibka');
                      until (Month in [1..12]);
                      repeat
                         write('Vvedite den rozdenia',j,'-go rebenka');
                         readln(Day);
                         if not (Day in [1..31]) then
                            writeln('Osibka');
                      until (Day in [1..31]);
                   end;
         end;
   end;
write('Vvedite Family I.O. otca dl9 sravnenia');
readln(otec);

for i:=1 to roditeley do
   if family[i].Father.FIO=otec then
      God:=Family[i].Deti[1].DataRozdenia.Year;
   for j:=2 to detey-1 do
   begin
      if Family[i].Deti[j].DataRozdenia.Year<God then
      begin
         God:=Family[i].Deti[j].DataRozdenia.Year;
         nomer_reb:=j;
         nomer_otca:=i;
      end
      else
         nomer_reb:=j;
         nomer_otca:=i;
   end;
writeln('Samii mladsii rebenok ',Family[nomer_otca].Deti[nomer_reb].Name);
end.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Но ни в коем случае не тегом PHP, как Вы пытаетесь!
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.02.2011 в 18:21.
BaronVik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки, сравнение, чтение из файла Matfeya Общие вопросы C/C++ 5 25.01.2011 16:53
Сравнение строки Lifefine Помощь студентам 3 07.03.2010 01:37
Сравнение строки обратно с STD - бага AQSW Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 07.07.2009 21:40
записи и строки perojenko Помощь студентам 2 23.03.2009 19:20
сравнение и пометка строки с записями kayman БД в Delphi 2 24.10.2007 00:06