IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Записи, списки
Phoenix
сообщение 14.02.2006 14:35
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  1  +


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


Гость






Цитата
Не могу дописать программу
Значит, начал? Приведи то, что уже сделано...
 К началу страницы 
+ Ответить 
Phoenix
сообщение 14.02.2006 15:37
Сообщение #3





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  1  +


Код
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.02.2006 15:49
Сообщение #4


Гость






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
Сообщение #5





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  1  +


По полной дате.
Еще один вопрос, если не затруднит Вас ответить на него: в задании 2-2 не могу понять что исполльзовать.
Спасибо за помощь. Весьма благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.02.2006 16:34
Сообщение #6


Гость






Если по полной дате, то придется писать функцию сравнения дат... Вот так будет выглядеть программа:
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
Сообщение #7





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  1  +


ага... Понял )
Выручил! Спасибо Вам за помощь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 19:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"