Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет.docx
Скачиваний:
99
Добавлен:
13.03.2016
Размер:
852.36 Кб
Скачать

Задача 5.2.2.

Условие

Разработать программу, составив для каждого задания свою таблицу, подобную заданию 5.2.1. Выбор типа исходных и выходных данных зависит от языка программирования, программы обучения и желания обучаемого.

О каждой книге имеются следующие сведения: фамилия и инициалы автора, название, год издания и количество запросов за последние три года. Вывести фамилии авторов и названия книг, изданных до 1980 года, по которым нет запросов.

Листинг

program project1;

uses

SysUtils, Classes, dateutils;

type

TBook = record

Author: string; //Ф.И.О. Автора

Name: string; //Название книги

PublYear: integer; //Год издания

Requests: integer; //Запросы за последние три года

end;

TBooksList = array of TBook;

function Book(Author, Name: string; PublYear, Requests: integer): TBook;

var

s: TBook;

begin

s.Author := Author;

s.Name := Name;

s.PublYear := PublYear;

s.Requests := Requests;

Result := s;

end;

function LoadBooks(): TBooksList;

var

SFile: TStringList;

i: integer;

BList: TBooksList;

begin

SFile := TStringList.Create();

SFile.LoadFromFile('Books.csv');

with TStringList.Create() do

begin

Delimiter := ':';

QuoteChar := '"';

StrictDelimiter := True;

for i:=0 to SFile.Count-1 do

begin

DelimitedText := SFile.Strings[i];

SetLength(BList, length(BList) + 1);

BList[High(BList)] := Book(Strings[0], Strings[1], StrToInt(Strings[2]),

StrToInt(Strings[3]));

end;

end;

Result := BList;

end;

procedure PrintBooks(const a: TBooksList);

var

i: integer;

begin

for i:=Low(a) to High(a) do

begin

writeln(' ', a[i].Author + ' "', a[i].Name + '"');

end;

end;

procedure PrintSpecificStudents(const a: TBooksList);

var

sl: TBooksList;

i: integer;

begin

//Найдём студентов моложе 16-ти лет

for i:=Low(a) to High(a) do

begin

if a[i].PublYear < 1980 then

begin

SetLength(sl, length(sl)+1);

sl[High(sl)] := a[i];

end;

end;

if length(sl) > 0 then

begin

writeln('Список книг, изданных раньше 1980-го, по которым не было запросов'#13#10'за последние 3 года:');

PrintBooks(sl);

end

else

writeln('В таблице нету книг без запросов, изданных раньше 1980-го года.')

end;

var

Students: TBooksList;

begin

Students := LoadBooks();

PrintSpecificStudents(Students);

readln();

end.

Результаты работы программы

Переменные

Класс

Имя

Тип

Структура

Назначение

Блок-схема