Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на список
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Инкогнито
Здраствуйте, почти все долги сдал, но есть проблемы с задачей на списки, вот задание:
*Создать программу формирования данных о школьниках: фамилия, имя, год рождения, класс. Организовать выбор по возрасту(сравнивая, от 2007 отнимать написанный), упорядочить выдаваемый список по годам рождения.* Моя сегодняшняя программа такова:

program Spisok2;
uses crt;
const N=10;
var
k,j:byte;
t:array[1..N] of record
f:string[15];
i:string[10];
o:string[15];
o1:byte;
end;
begin
clrScr;
writeln('Введите количество школьников');
readln(k);
clrScr;
for j:=1 to k do
begin
writeln('Фамилия');readln(t[j].f);
writeln('Имя');readln(t[j].i);
writeln('Год рождения');readln(t[j].o);
writeln('Класс');readln(t[j].o1);
end;
clrScr;
writeln('Фамилия Имя Год рождения Класс');
for j:=1 to k do
begin
Gotoxy(1,j+1);writeln(t[j].f);
Gotoxy(16,j+1);writeln(t[j].i);
Gotoxy(32,j+1);writeln(t[j].o);
Gotoxy(46,j+1);writeln(t[j].o1);
end;
readln;
end.


Не пойму, как организовать выбор по возрасту( *хотя если по логике нужно от 2007 отнимать написанный, но не знаю как это в программе описать*) и как упорядочить по годам рождения, помогите пожалста!
volvo
Вот тут был пример сортировки массива записей: Как упорядочить данные по возрастанию? (меняешь функцию Compare так, чтобы она сравнивала не поля Age, а года рождения (не надо ничего ниоткуда отнимать, сейчас-то еще 2007 год, а через 2 недели?), и меняешь сортировку на "по убыванию") - тогда массив будет упорядочен "по возрастанию" возрастов ( smile.gif ) - сначала младшие, у которых год рождения больше, потом - старшие...
Инкогнито
Цитата(volvo @ 24.12.2007 17:31) *

Вот тут был пример сортировки массива записей: Как упорядочить данные по возрастанию? (меняешь функцию Compare так, чтобы она сравнивала не поля Age, а года рождения (не надо ничего ниоткуда отнимать, сейчас-то еще 2007 год, а через 2 недели?), и меняешь сортировку на "по убыванию") - тогда массив будет упорядочен "по возрастанию" возрастов ( smile.gif ) - сначала младшие, у которых год рождения больше, потом - старшие...

Извини, может код напишешь? я посмотрел там, фигня какая т, пытался подстроить под свои данные, инфига не вышло...
Ozzя
Цитата
пытался подстроить под свои данные, инфига не вышло...

Свои попытки ... в студию! (С)
Инкогнито
Ну вот, попытался совместить с тем примером, вроде сортирует, проверьте, если что не так

uses crt;
const N = 4;
type
TInfo = record
Age: integer;
Name: string [20];
end;
List = array [1..N] of TInfo;
function Compare (T1,T2: TInfo): integer;
begin
if T1.Age > T2.Age then Compare := 1
else if T1.Age = T2.Age then Compare := 0
else Compare := -1
end;
procedure QuickSort (var A: List; Lo, Hi: Integer);
var
i,j: integer;
x, y: TInfo;
procedure Sort (l, r: Integer);
begin
repeat
x := A[(l+r) shr 1];
i := l; j := r;
repeat
while Compare( A[i], x ) < 0 do inc(i);
while Compare( A[j], x ) > 0 do dec(j);
if i <= j then
begin
y := A[i]; A[i] := A[j]; A[j] := y;
inc(i); dec(j);
end;
until i > j;
if l < j then Sort (l, j);
l := i;
until l >= r;
end;
begin
Sort (Lo,Hi);
end; {QuickSort}
var
Data: List;
I,k,j: Integer;
t:array[1..N] of record
f:string[15];
i:string[10];
o:string[15];
o1:byte;
end;
begin { Main }
clrScr;
writeln('Введите количество школьников');
readln(k);
clrScr;
for j:=1 to k do
begin
writeln('Фамилия');readln(t[j].f);
writeln('Имя');readln(t[j].i);
writeln('Год рождения');readln(t[j].o);
writeln('Класс');readln(t[j].o1);
end;
QuickSort (Data, 1, N);
clrScr;
writeln('Фамилия Имя Год рождения Класс');
for j:=1 to k do
begin
Gotoxy(1,j+1);writeln(t[j].f);
Gotoxy(16,j+1);writeln(t[j].i);
Gotoxy(32,j+1);writeln(t[j].o);
Gotoxy(46,j+1);writeln(t[j].o1);
end;
readln;
end.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.