Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Записи, списки

Автор: Phoenix 14.02.2006 18:35

Всем Привет!
Есть просьба огромная! Не могу дописать программу,а сдавать уже завтра надо. Буду очень признателен за любую помощь. В поисковике вроде смотрел и FAQ тоже, возможно что-то упустил. (Прошу прощения за такую простенькую прогу). Первую часть ее сделал, со второй немного проблематично.
1.Описать запись с именем NOTE, содержащую следующие поля:
- фамилия, имя;
- номер телефона;
- год рождения.
2.Написать программу, выполняющую следующие действия:
- ввод данных с клавиатуры в массив, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по датам дней рождения;
- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры; если такого нет, вывести на экран соответствующее сообщение;
- запись массива в файл под заданным с клавиатуры именем.
Еще раз за раннее спасибо!

Автор: volvo 14.02.2006 19:21

Цитата
Не могу дописать программу
Значит, начал? Приведи то, что уже сделано...

Автор: Phoenix 14.02.2006 19:37

Код
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 14.02.2006 19:49

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 14.02.2006 20:13

По полной дате.
Еще один вопрос, если не затруднит Вас ответить на него: в задании 2-2 не могу понять что исполльзовать.
Спасибо за помощь. Весьма благодарен.

Автор: volvo 14.02.2006 20:34

Если по полной дате, то придется писать функцию сравнения дат... Вот так будет выглядеть программа:

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 14.02.2006 20:39

ага... Понял )
Выручил! Спасибо Вам за помощь.