Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на список
Форум «Всё о Паскале» > 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.

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