Сформировать массив записей(не менее 5)б содержащий данные по студентам: Фамилия Имя Группа Год рождения(ГР) и средний рейтинг (СР)(данные можно считывать из предварительно набранного текстового файла). Осуществить сортировку массива по имени сортировкой выбором — Pascal(Паскаль)

Program Lab_9;
uses crt;
const name='data.txt';
      header='result.txt';
type student=record
     fam,name,group:string[20];
     year:integer;
     sr:real;
     end;
ar=array[1..100]of student;
procedure input_from_file(var f:text;var a:ar;var n:integer);
var st:string;
    kod:integer;
begin
assign(f,name);
reset(f);
n:=0;
while not eof(f) do
 begin
  n:=n+1;
  readln(f,st);
  with a[n] do
   begin
    fam:=copy(st,1,pos(' ',st)-1);
    delete(st,1,pos(' ',st));
    name:=copy(st,1,pos(' ',st)-1);
    delete(st,1,pos(' ',st));
    group:=copy(st,1,pos(' ',st)-1);
    delete(st,1,pos(' ',st));
    val(copy(st,1,pos(' ',st)-1), year, kod);
    delete(st,1,pos(' ',st));
    val(st,sr,kod);
   end;
  end;
close(f);
End;
 
procedure output_to_file(var f:text;st:string;a:ar;n:integer);
var i:integer;
begin
assign(f,header);
{$I-}append(f);{$I+}
if IOResult<>0 then rewrite(f);
writeln(f);
writeln(f,st);
writeln(f,'|---------------------------------------');
writeln(f,'| Familia |Imya | Gruppa | G.R. | S.P. |');
writeln(f,'|---------------------------------------');
for i:=1 to n do
with a[i] do
 begin
  writeln(f,'|', fam:11,'|',name:9,'|',group:10,'|',year:6,'|',sr:6:1,'|');
  writeln(f,'|-------------------------------------');
  writeln(f);
 end;
close(f);
end;
 
procedure obmen(var a,b:student);
var r:student;
begin
r:=a; a:=b; b:=r;
End;
 
procedure sort_choice(var m:ar;n:integer);
var k,i,j:integer;
begin
for i:=1 to n-1 do
 begin
  k:=i;
  for j:=i+1 to n do
  if m[k].name>m[j].name then k:=j;
  obmen(m[k],m[i]);
 end;
end;
var a:ar;
    i,n:integer;
    f,g:text;
begin
clrscr;
input_from_file(f,a,n);
output_to_file(g,'Ishodnyj massiv:',a,n);
sort_choice(a,n);
output_to_file(g,'Posle sortirovki vyborom:',a,n);
writeln('Данные записаны в файл ',header);
readkey;
end.

Файл данных

Vasilev Gena EK-09-1 1992 74.9
Andropov Ivan EK-09-1 1992 86.6
Andov Anton EK-09-1 1992 86.6
Andeev Victor EK-09-1 1992 86.6
Andropo Andrey EK-09-1 1992 86.6

Leave a Comment

60 − 50 =