Всем Привет! Есть просьба огромная! Не могу дописать программу,а сдавать уже завтра надо. Буду очень признателен за любую помощь. В поисковике вроде смотрел и FAQ тоже, возможно что-то упустил. (Прошу прощения за такую простенькую прогу). Первую часть ее сделал, со второй немного проблематично. 1.Описать запись с именем NOTE, содержащую следующие поля: - фамилия, имя; - номер телефона; - год рождения. 2.Написать программу, выполняющую следующие действия: - ввод данных с клавиатуры в массив, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по датам дней рождения; - вывод на экран информации о человеке, номер телефона которого введен с клавиатуры; если такого нет, вывести на экран соответствующее сообщение; - запись массива в файл под заданным с клавиатуры именем. Еще раз за раннее спасибо!
volvo
14.02.2006 15:21
Цитата
Не могу дописать программу
Значит, начал? Приведи то, что уже сделано...
Phoenix
14.02.2006 15: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 15: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 16:13
По полной дате. Еще один вопрос, если не затруднит Вас ответить на него: в задании 2-2 не могу понять что исполльзовать. Спасибо за помощь. Весьма благодарен.
volvo
14.02.2006 16: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 16:39
ага... Понял ) Выручил! Спасибо Вам за помощь.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.