pascal - Record (Структура)
Работа со структурой и запись её в файл:
program struct01; type TBook = record author: string[40];{ автор, строка } title: string[80]; { название, строка} count: integer { количество, целое } end; const N = 100; var B: TBook; { одна структура } Books: array[1..N] of TBook; { массив } F: file of TBook; i: integer; begin writeln('Размер типа TBook = ', sizeof(TBook)); { 24 } Assign(F, 'books.dat'); Rewrite(F); B.author := 'Пушкин А.С.'; B.title := 'Полтава'; B.count := 1; write(F, B); B.author := 'Тургенев И.С.'; B.title := 'Муму'; B.count := 2; write(F, B); Close(F); Assign(F, 'books.dat'); Reset(F); i := 0; while not Eof(F) do begin { до конца файла } i := i + 1; Read(F, Books[i]) end; writeln(B.author, ', ', B.title, ', ', B.count); writeln( 'i=', i); if i > 0 then writeln(Books[1].author, ', ', Books[1].title, ', ', Books[1].count); Close(F); end.
Сортировка массива структур:
program struct02; type TBook = record author: string[40];{ автор, строка } title: string[80]; { название, строка} count: integer { количество, целое } end; const N = 3; var B: TBook; { одна структура } Books: array[1..N] of TBook; { массив } i, j: integer; begin B.author := 'Пушкин А.С.'; B.title := 'Полтава'; B.count := 1; Books[1] := B; B.author := 'Тургенев И.С.'; B.title := 'Муму'; B.count := 2; Books[2] := B; B.author := 'Булгаков М.А.'; B.title := 'Мастер и Маргарита'; B.count := 5; Books[3] := B; for i:=1 to N do writeln(Books[i].author, '; ', Books[i].title, '; ', Books[i].count); writeln('--- Сортировка ---'); for i:=1 to N-1 do for j:=N-1 downto i do if Books[j].author > Books[j+1].author then begin B := Books[j]; Books[j] := Books[j+1]; Books[j+1] := B end; for i:=1 to N do writeln(Books[i].author, '; ', Books[i].title, '; ', Books[i].count); end.
Сортировка указателей массива структур:
program struct03; type TBook = record author: string[40];{ автор, строка } title: string[80]; { название, строка} count: integer { количество, целое } end; PBook = ^TBook; const N = 4; var B: TBook; { одна структура } Books: array[1..N] of TBook; { массив } p1: PBook; p: array[1..N] of PBook; { массив указателей типа PBook } i, j: integer; begin B.author := 'Пушкин А.С.'; B.title := 'Полтава'; B.count := 1; Books[1] := B; B.author := 'Тургенев И.С.'; B.title := 'Муму'; B.count := 2; Books[2] := B; B.author := 'Булгаков М.А.'; B.title := 'Мастер и Маргарита'; B.count := 5; Books[3] := B; B.author := 'Пелевин В.'; B.title := 'Generation П'; B.count := 4; Books[4] := B; for i := 1 to N do writeln(Books[i].author, ', ', Books[i].title, ', ', Books[i].count); { Часть 2 } writeln('---=== Часть 2 ===---'); for i:=1 to N do p[i]:= @Books[i]; for i:=1 to N do writeln(p[i]^.author, '; ', p[i]^.title, '; ', p[i]^.count); writeln('---=== Сортировка Указателей ===---'); for i:= 1 to N-1 do for j:= N-1 downto i do if p[j]^.author > p[j+1]^.author then begin p1 := p[j]; p[j] := p[j+1]; p[j+1] := p1 end; for i:=1 to N do writeln(p[i]^.author, '; ', p[i]^.title, '; ', p[i]^.count); writeln('---=== Реально оставшееся состояние массива ===---'); for i:=1 to N do writeln(Books[i].author, '; ', Books[i].title, '; ', Books[i].count); end.