Материал: ЛР №2

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Министерство науки и высшего образования Российской Федерации ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра телекоммуникаций и основ радиотехники (ТОР)

Лабораторная работа № 2

по дисциплине «Информатика-2»

Вариант № 10

Выполнил студент

направления подготовки 11.03.02

15.03.2021г.

(дата)

Томск — 2021

Оглавление

Задание № 1

Написать программу, которая создает типизированный файл Type = Boolean и записывает в него 19 x 17 значений. Имя для файла kn202mnn .dan.

Описание:

В программе объявляются все необходимые переменные целого и булевого типов, типизированный файл f: file of boolean; ассоциируется с файлом assign (f, 'kn202mnn.dan'); в том же каталоге, что и программа, открывается на запись командой rewrite (f);.

Получение M x N значений булевого типа организовано с помощью 2 циклов для удобства решения задания 2. Тоже самое можно было сделать и в одном цикле: от 1 до M x N. Затем файл закрывается close (f);.

Сами булевы значения получены с помощью вычисления остатка от деления целого числа в диапазоне от 0 до 999 на 2: если число делится без остатка, то присваиваем True, иначе – False. Можно было бы написать, просто random, так как это не тема лабораторной работы.

Код программы:

program z_01;

var

f: file of boolean;

M, N: integer;

c: boolean;

begin

M := 19;

N := 17;

assign(f, 'kn202mnn.dan');

rewrite(f);

randomize;

for var i:= 1 to M do

for var j := 1 to N do

begin

if (random(1000) mod 2) = 0 then c := true else c := false;

write(f, c);

end;

close(f);

end.

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

Результат работы программы представлен на рисунке 1.

  1. Результат работы программы по заданию 1

Выводы:

Значения логического типа Boolean занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными константами True (истина) и False (ложь). 19 x 17 = 323 значения, 323 байта.

  1. Размер файла kn202mnn.Dan Задание № 2

Написать программу, которая создает массив A[19, 17] и заполняет его значениями из файла, созданного первой программой. Вывести на экран массив в виде матрицы 19 x 17.

Описание:

В программе объявляются все необходимые переменные целого и булевого типов, типизированный файл f: file of boolean; ассоциируется с файлом assign (f, 'kn202mnn.dan'); в том же каталоге, что и программа, открывается на чтение командой reset (f);.

Заполнение двумерного массива А[19, 17] значений булевого типа организовано с помощью 2 циклов, в которых происходит одновременно заполнение массива read(f, A[i,j]); и вывод его на экран write(A[i,j]:6); с параметрами форматирования. Команда writeln(); отвечает за создание новой строки. Затем файл закрывается close(f);.

Код программы:

program z_02;

var

f: file of boolean;

M, N: integer;

A: array [1..19, 1..17] of boolean;

begin

M := 19;

N := 17;

assign(f, 'kn202mnn.dan');

reset(f);

for var i := 1 to M do

begin

for var j := 1 to N do

begin

read(f, A[i,j]);

write(A[i,j]:6);

end;

writeln();

end;

close(f);

end.

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

  1. Результат работы программы по заданию 2

Выводы:

На экран вывелся массив в виде матрицы 19 х 17 из случайных значений True и False, созданных предыдущей программой.

Задание № 3

В следующей программе описать запись Homme, которая используется для описания человека (поля: Имя, Отчество, Фамилия, дата рождения, пол). Создать файл типа Homme с именем kn202mnn.note и записать в него не менее 10 записей. Первая запись должна описывать студента, выполняющего работу.

Описание:

В программе описана запись Homme type Homme = record , а также вспомогательная запись date type date = record для хранения дня рождения студента и подсчета его возраста в четвертом задании.

В программе объявляются все необходимые переменные целого типа, массив note типа Homme, типизированный файл f: file of Homme; ассоциируется с файлом assign (f, 'kn202mnn.note'); в том же каталоге, что и программа, открывается на запись командой rewrite(f);.

Для добавления записи Homme одной строкой создана процедура addHomme, которая принимает следующие параметры:

  • id – типа integer (целый тип) для номера записи;

  • fam, nam, otch – типа string[20] строковый тип фиксированного размера для фамилии, имени и отчества студента;

  • d, m, y – целые типы для даты (день, месяц, год);

  • s – типа char (один символ) для пола.

Запись в файл организована с помощью 1 цикла. Затем файл закрывается close (f);.

Код программы:

program z_03;

type

date = record

month: 1..12;

day: 1..31;

year: smallint

end;

type

Homme = record

Familiya: string[20];

Name: string[20];

Otchestvo: string[20];

Birthday: date;

sex: char;

end;

var

L: shortint;

note: array [1..10] of Homme;

f: file of Homme;

procedure addHomme(id: shortint; fam, nam, otch: string[20]; d, m: shortint; y: smallint; s: char);

begin

note[id].Familiya := fam;

note[id].Name := nam;

note[id].Otchestvo := otch;

note[id].sex := s;

note[id].Birthday.day := d;

note[id].Birthday.month := m;

note[id].Birthday.year := y;

end;

begin

L := 10;

addHomme(1, 'Михайлов', 'Николай', 'Николаевич', 6, 12, 1981, 'М');

addHomme(2, 'Иванов', 'Иван', 'Иванович', 3, 12, 1986, 'М');

addHomme(3, 'Шашков', 'Илларион', 'Олегович', 2, 7, 2000, 'М');

addHomme(4, 'Кулаков', 'Юлий', 'Проклович', 29, 7, 2001, 'М');

addHomme(5, 'Одинцова', 'Ульна', 'Константиновна', 17, 1, 2000, 'Ж');

addHomme(6, 'Лапина', 'Капитолина', 'Иосифовна', 15, 3, 2001, 'Ж');

addHomme(7, 'Юдина', 'Данута', 'Кимовна', 25, 12, 2001, 'Ж');

addHomme(8, 'Кузьмина', 'Веста', 'Антоновна', 19, 1, 2000, 'Ж');

addHomme(9, 'Никитина', 'Доминика', 'Игнатьевна', 11, 6, 2000, 'Ж');

addHomme(10, 'Орехова', 'Архелия', 'Альвиановна', 2, 9, 2001, 'Ж');

assign(f, 'kn202mnn.note');

rewrite(f);

for var j := 1 to L do

write(f, note[j]);

close(f);

end.

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

  1. Результат работы программы по заданию 3

Выводы:

Файл содержит как читаемые символы, так и NULL – дополнение до фиксированной длины в 20 символов.

Задание № 4

Написать программу, которая считывает из файла kn202mnn .note все данные и выводит на экран в виде таблицы, выполненной по образцу таблицы 1.

Таблица 1. – Образец таблицы для четвертого пункта задания

Фамилия

Имя

Отчество

Пол

Возраст

Гураков

Алексей

Валерьевич

М

39

Мещеряков

Павел

Сергеевич

М

35

Описание:

В программе описана запись Homme type Homme = record, а также вспомогательная запись date type date = record для хранения дня рождения студента и подсчета его возраста в четвертом задании.

В программе объявляются все необходимые переменные, типизированный файл f: file of Homme; ассоциируется с файлом assign (f, 'kn202mnn.note'); в том же каталоге, что и программа, открывается на чтение командой reset (f);.

Чтение из файла организовано с помощью цикла while not eof (f) do, в котором происходит также вычисление возраста студента по формуле 2021 - Birthday.year

Перед циклом выводится отформатированный заголовок. Остальное форматирование производится непосредственно на месте вывода записи на экран.

Затем файл закрывается close (f);.

Код программы:

type

date = record

month: 1..12;

day: 1..31;

year: smallint

end;

type

Homme = record

Familiya: string[20];

Name: string[20];

Otchestvo: string[20];

Birthday: date;

sex: char;

end;

var

note: Homme;

f: file of Homme;

age: integer;

currentdate: date;

begin

write('Введите текущий год в формате ГГГГ : ');

readln(currentdate.year);

write('Введите текущий месяц: ');

readln(currentdate.month);

write('Введите текущий день: ');

readln(currentdate.day);

assign(f, 'kn202mnn.note');

reset(f);

writeln('----------------------------------------------------------------');

writeln('| ', 'Фамилия':10, '| ':7,'Имя':10,'| ':7, 'Отчество':9,'|':7, 'Пол', '|','Возраст','|');

writeln('----------------------------------------------------------------');

while not eof (f) do

begin

read(f, note);

age:= currentdate.year - note.Birthday.year;

if ((note.Birthday.month > currentdate.month) or ((note.Birthday.month = currentdate.month) and (note.Birthday.day > currentdate.day))) then