Всем Привет! Есть просьба огромная! Не могу дописать программу,а сдавать уже завтра надо. Буду очень признателен за любую помощь. В поисковике вроде смотрел и 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:=1to n-1dofor j:=i+1to n doif a[i].godr.d > a[j].godr.d thenbegin
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;
beginif d_1.y <> d_2.y then compare := (d_1.y - d_2.y) div abs(d_1.y - d_2.y)
elsebeginif d_1.m <> d_2.m then compare := (d_1.m - d_2.m) div abs(d_1.m - d_2.m)
elsebeginif 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;
endendend;
Begin
clrscr;
write ('Vvod n:'); readln (n);
for i:=1to n dowith a[i] dobegin
write ('FIO:'); readln (fio);
write ('Nomer telephona:'); readln (tel);
write ('birthday:');
with godr do readln (d,m,y);
end;
{ !!! }for i:=1to n-1dofor j:=i+1to n doif compare(a[i].godr, a[j].godr) = 1thenbegin
T := a[i]; a[i] := a[j]; a[j] := T;
end;
{ !!! }for i:=1to n dowith 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) doif (a[i].tel = s) then found := true { <--- S - это строка с телефоном, введенная пользователем }else inc(i)
if found then{ элемент a[i] содержит нужный номер телефона, можно печатать информацию}else{ введенного номера в базе нет - ошибка ввода }
Phoenix
14.02.2006 20:39
ага... Понял ) Выручил! Спасибо Вам за помощь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.