Помощь - Поиск - Пользователи - Календарь
Полная версия: RECORD
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Nagato
Надо создать программу, если Дано:
type Data = record
Ziua: 1..31;
Luna: 1..12;
Anul: integer; end;
Persoana = record
NumePrenume: string;
DataNasterii: Data;
end;
ListaPersoane = array[1..50] of Persoana;


Пояснения:
ListaPersoane -список лиц
Persoana-человек
Datanasterii-дата рождения
Ziua-день
anul-год
NumePrenume-имя и фамилия
Dati datele persoanei - введите даты
Data nasterii -день рождения
Ziua cautata - день который ищем
Ну уже комментарии там для себя делал, думаю не надо переводить)

Сделать программу которая будет читать с клавиатуры данные n человек(n< или равно 50) и выводить на экран:
a. людей рожденных в день z месяца;
b. людей рожденных в месяц l года;
c. людей рожденных в год a;
d. Людей рожденных z.l.a числа;
e. Самый старый человек
f. Самый молодой
g. Возраст каждого человека в годах, месяцах, днях
h. Список людей которые имеют больше v лет
i. Список людей в алфавитном порядке
j. Список людей упорядоченный в соответствии с датой рождения
k. Список людей такого же возраста (рожденных в том же году)
Понимаю что много, но помогите если сможете)...только не нужно использовать "сложные" термины, то есть надо на уровне 11 класса, но надо обязательно решить, все не могу..
Вот сколько я смог сделать:...

Program spisok;
type Data = record
Ziua: 1..31;
Luna: 1..12;
Anul: integer; end;
Persoana = record
NumePrenume: string;
DataNasterii: Data;
end;
ListaPersoane = array[1..50] of Persoana;
var a:ListaPersoane; n,i,z,l,an:integer; max,min: persoana;
begin
{Introducerea datelor in tablou}
writeln('Dati numarul de persoane'); readln(n);
For i:=1 to n do
begin
writeln('Dati datele persoanei ',i);
writeln('Numele si Prenumele '); readln(a[i].NumePrenume);
Writeln('Data nasterii '); readln(a[i].DataNasterii.ziua);
Writeln('Luna nasterii '); readln(a[i].DataNasterii.luna);
Writeln('Anul nasterii '); readln(a[i].DataNasterii.anul);
end;
{Introducerea datelor in tablou}

{Afisarea datelor din tablou}
For i:=1 to n do
begin
writeln('Datele persoanei ',i);
writeln('Numele si Prenumele ',a[i].NumePrenume);
Writeln('Data nasterii ',a[i].DataNasterii.ziua);
Writeln('Luna nasterii ',a[i].DataNasterii.luna);
Writeln('Anul nasterii ',a[i].DataNasterii.anul);
end;
{Afisarea datelor din tablou}

{Punctul a}
writeln('Ziua cautata'); readln(z);
For i:=1 to n do
if a[i].DataNasterii.ziua = z then writeln(a[i].NumePrenume);
{Punctul a}

{Punctul b}
writeln('Luna cautata'); readln(l);
For i:=1 to n do
if a[i].DataNasterii.luna = l then writeln(a[i].NumePrenume);
{Punctul b}

{Punctul c}
writeln('Anul cautat'); readln(an);
For i:=1 to n do
if a[i].DataNasterii.anul = an then writeln(a[i].NumePrenume);
{Punctul c}

{Punctul d}
For i:=1 to n do
if (a[i].DataNasterii.ziua = z) and ( a[i].DataNasterii.luna = l) and
( a[i].DataNasterii.luna = l ) then writeln(a[i].NumePrenume);
{Punctul d}
end.


Ещё вроде должны были получиться рабочими пункты e и f, но ничего не делают.., если добавить следующую часть кода перед end.
{Punctul e}
max.DataNasterii.anul := 0;
For i:=1 to n do
if a[i].DataNasterii.anul < max.DataNasterii.anul then max:=a[i];
writeln('samyy molodoy chelovek' ,max.NumePrenume);
{Punctul e}

{Punctul f}
min.DataNasterii.anul := 0;
For i:=1 to n do
if a[i].DataNasterii.anul > min.DataNasterii.anul then max:=a[i];
writeln('samyy staryy chelovek ' ,min.NumePrenume);
{Punctul f}
IUnknown
Цитата
Ещё вроде должны были получиться рабочими пункты e и f, но ничего не делают.., если добавить следующую часть кода перед end.
Не работают они по твоей собственной невнимательности:

1) когда ищешь самого молодого, надо в min.DataNasterii.anul (логичнее, правда, когда ищешь минимальный возраст - то и используй переменную Min) занести MaxInt - максимально возможное значение для Integer, и потом уже запускать цикл. Если занесёшь 0 - то у тебя условие никогда не выполнится, вряд ли Anul (я, конечно, не знаю, что это такое, но догадываюсь) бывает отрицательным...
{ Пункт e }
min.DataNasterii.anul := MaxInt;
For i:=1 to n do
if a[i].DataNasterii.anul < min.DataNasterii.anul then min:=a[i];
writeln('samyy molodoy chelovek' ,min.NumePrenume);
{Punctul e}

2) когда ищешь самого старого - то у тебя было почти правильно, только в цикле изменялся max, а результат выводился из неизменённого min. Вот так попробуй:

{ Пункт f }
max.DataNasterii.anul := 0; { <--- max, а не min. В следующей строке - тоже }
For i:=1 to n do
if a[i].DataNasterii.anul > max.DataNasterii.anul then max:=a[i];
writeln('samyy staryy chelovek ' ,max.NumePrenume);
{ Пункт f }
Nagato
IUnknown Спасибо за помощь, хоть с этими двумя разобрался, только тут пункт е искал самого молодого а не старого, ну я поменял местами и все работает)
An это год ,в пояснениях написал)..
......а вот пункт G не получается вовсе)..а со списками обращаться не получается...
Nagato
Сделал ещё одну) Помогите пожалуйста кто разбирается, осталось ещё 4:
h. Список людей которые имеют больше v лет
i. Список людей в алфавитном порядке
j. Список людей упорядоченный в соответствии с датой рождения
k. Список людей такого же возраста (рожденных в том же году)

{Puctul g}
For i:=1 to n do
begin
writeln('Vozvrast ',i);
writeln('Numele si Prenumele: ',a[i].NumePrenume);
Writeln('Data nasterii: ',a[i].DataNasterii.ziua);
Writeln('Luna nasterii: ',a[i].DataNasterii.luna);
Writeln('Anul nasterii: ',a[i].DataNasterii.anul);
end;
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.