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

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

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

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





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

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


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


Гость






Цитата
Не могу дописать программу
Значит, начал? Приведи то, что уже сделано...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
{ !!! }
Кстати, должно сортироваться только по числу, или по полной дате? Или по числу/месяцу?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


По полной дате.
Еще один вопрос, если не затруднит Вас ответить на него: в задании 2-2 не могу понять что исполльзовать.
Спасибо за помощь. Весьма благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 { введенного номера в базе нет - ошибка ввода }
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





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

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


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

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

 





- Текстовая версия 26.04.2024 23:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name