Помощь - Поиск - Пользователи - Календарь
Полная версия: Записи, списки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Phoenix
Всем Привет!
Есть просьба огромная! Не могу дописать программу,а сдавать уже завтра надо. Буду очень признателен за любую помощь. В поисковике вроде смотрел и FAQ тоже, возможно что-то упустил. (Прошу прощения за такую простенькую прогу). Первую часть ее сделал, со второй немного проблематично.
1.Описать запись с именем NOTE, содержащую следующие поля:
- фамилия, имя;
- номер телефона;
- год рождения.
2.Написать программу, выполняющую следующие действия:
- ввод данных с клавиатуры в массив, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по датам дней рождения;
- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры; если такого нет, вывести на экран соответствующее сообщение;
- запись массива в файл под заданным с клавиатуры именем.
Еще раз за раннее спасибо!
volvo
Цитата
Не могу дописать программу
Значит, начал? Приведи то, что уже сделано...
Phoenix
Код
Program Note1;
uses crt;
type note=record
     fio:string;
     tel:string [14];
     godr:record
          d:1..31;
          m:1..12;
          y:integer;
     end;
     end;
     mas=array [1..8] of note;
var  a:mas;
     i,j,n,r:integer;

Begin
     clrscr;
     write ('Vvod n:');
     readln (n);
     for i:=1 to n do
         with a[i] do
         begin
          write ('FIO:');
          readln (fio);
          write ('Nomer telephona:');
          readln (tel);
          write ('birthday:');
          with godr do
          readln (d,m,y);
         end;

{ !!! }
      for i:=1 to n-1 do
         for j:=i+1 to n do
             if a[i].godr.d>a[j].godr.d then
             begin
                  r:=a[i].godr.d;
                  a[i].godr.d:=a[j].godr.d;
                  a[j].godr.d:=r;
             end;
{ !!! }
        
for i:=1 to n do
         with a[i],godr do
         writeln (fio,':',' ','tel ',tel,',birthday ',d,'-',m,'-',y);
     readkey;
End.
volvo
Var T: note;
...
{ !!! }
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if a[i].godr.d > a[j].godr.d then begin
        T := a[i]; a[i] := a[j]; a[j] := T; { <--- Меняешь местами НЕ дни рождения, а записи !!! }
      end;
{ !!! }
Кстати, должно сортироваться только по числу, или по полной дате? Или по числу/месяцу?
Phoenix
По полной дате.
Еще один вопрос, если не затруднит Вас ответить на него: в задании 2-2 не могу понять что исполльзовать.
Спасибо за помощь. Весьма благодарен.
volvo
Если по полной дате, то придется писать функцию сравнения дат... Вот так будет выглядеть программа:
Program Note1;
uses crt;

type
  datatype = record
    d: 1..31;
    m: 1..12;
    y: integer;
  end;

type
  note=record
    fio: string;
    tel: string [14];
    godr: datatype; { <--- Выделяем это в отдельный тип... }
  end;
  mas = array [1..8] of note;

var
  a: mas;
  i, j, n, r: integer;
  T: note;

function compare(d_1, d_2: datatype): integer;

begin
  if d_1.y <> d_2.y then compare := (d_1.y - d_2.y) div abs(d_1.y - d_2.y)
  else begin

    if d_1.m <> d_2.m then compare := (d_1.m - d_2.m) div abs(d_1.m - d_2.m)
    else begin

      if d_1.d <> d_2.d then compare := (d_1.d - d_2.d) div abs(d_1.d - d_2.d)
      else compare := 0;

    end

  end
end;

Begin
  clrscr;
  write ('Vvod n:'); readln (n);
  for i:=1 to n do
    with a[i] do begin
      write ('FIO:'); readln (fio);
      write ('Nomer telephona:'); readln (tel);
      write ('birthday:');
      with godr do readln (d,m,y);
    end;

  { !!! }
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if compare(a[i].godr, a[j].godr) = 1 then begin
        T := a[i]; a[i] := a[j]; a[j] := T;
      end;
  { !!! }

  for i:=1 to n do
    with a[i],godr do
      writeln (fio,':',' ','tel ',tel,',birthday ',d,'-',m,'-',y);
  readkey;
End.

Задание 2-2 это:
Цитата
- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры; если такого нет, вывести на экран соответствующее сообщение;
?
Тогда последовательный просмотр всех элементов массива (пока не переберем полностью все элементы или не найдем, что нужно) :
i := 1; found := false;

while (i <= n) and (not found) do
  if (a[i].tel = s) then found := true { <--- S - это строка с телефоном, введенная пользователем }
  else inc(i)

if found then { элемент a[i] содержит нужный номер телефона, можно печатать информацию}
else { введенного номера в базе нет - ошибка ввода }
Phoenix
ага... Понял )
Выручил! Спасибо Вам за помощь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.