Написать программу, которая создает типизированный файл и записывает в него MxN значений. Имя для файла создается по маске .dat.. Лаб.раб.№2. Лабораторная работа 2 по дисциплине Инфоратика2 Вариант 6 студент гр з148П111 Капустин Леонид Сергеевич
Скачать 135.32 Kb.
|
Министерство науки и высшего образования Российской Федерации ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР) Кафедра радиоэлектроники и систем связи (РСС) ЛАБОРАТОРНАЯ РАБОТА №2 по дисциплине «Инфоратика-2» Вариант №6 студент гр. з-148П11-1 Капустин Леонид Сергеевич «28»сентября 2020г. ТОМСК 2014 Задание № 1. Написать программу, которая создает типизированный файл и записывает в него MxN значений. Имя для файла создается по маске <login>.dat. Решение: Решим задачу с использованием типизированных файлов. Описание структуры программы: Для работы программы введем две константы M = 15 иN = 16 согласно варианту. Также введем файловую переменнуюf типа Byte. Создадим файл xx182kls.dat и откроем его для записи. В цикле запишем в него M*N значений, сгенерированных случайным образом Закроем файл. Кодпрограммы: program lab2_1; uses crt; const M = 15; N = 16; var f: file of Byte; i: Integer; b: byte; begin ClrScr; Assign(f,'xx182kls.dat'); Rewrite(f); Randomize; for i := 1 to M * N do begin b := Random (256); Write(f, b); end; Close(f); end. Результаты работы программы: Задание № 2. Написать программу, которая создает массив A[M,N] и заполняет его значениями из файла, созданного первой программой. Вывести на экран массив в виде матрицы MxN. Решение: Решим задачу с использованием двумерных массивов и типизированных файлов. Описание структуры программы: Для работы программы введем две константы M = 15 иN = 16 согласно варианту. Также введем файловую переменнуюf типа Byte и двумерный массив B типа Byte. Откроем файл xx182kls.dat для чтения. В цикле считаем из него M*N значений в заранее определенный массив B Выведем на экран полученный массив B в матричном виде. Кодпрограммы: program lab2_2; uses crt; const M = 15; N = 16; var f: file of Byte; i, j: Integer; B: array [1..M + 1, 1..N + 1] of byte; begin ClrScr; Assign(f,'xx182kls.dat'); Reset(f); i := 0; j := 0; while not eof (f) do begin if j mod N = 0 then begin j := 1; i := i + 1; end; read (f, B[i,j]); j := j + 1; end; Close(f); for i := 1 to M do for j := 1 to N do begin write (B[i,j],' '); if j mod N = 0 then writeln; end; end. Результаты работы программы: Запустим программу и получим на экране содержимое файла в виде матрицы. Задание № 3. Описать запись Homme, которая используется для описания человека (поля: Имя, Отчество, Фамилия, дата рождения, пол). Создать файл типа Homme с именем <login>.note и записать в него не менее 10 записей. Первая запись должна описывать студента, выполняющего работу. Решение: Решим задачу с помощью структурных типов данных и типизированных фалов. Описание структуры программы: Для решения задачи опишем в программе запись типа Homme, которая состоит из 5-ти полей строкового типа. Причем поля «имя», «фамилия» и «отчество» (name, suname и fname) имеют длину 64 байт, поле «дата рождения» (dateB) имеет длину 16 байт и поле «пол» (gen) имеет длину 1 байт. Опишем переменную структуры MAN и файловую переменную fтипа Homme. Создадим файл согласно шаблону с именем xx182kls.note и откроем его для записи. Последовательно введем 10 записей. Закроем файл. Код программы: program lab2_3; uses crt; type Homme = record name, suname, fname: string[64]; dateB: string[16]; gen: string[1]; end; var MAN: Homme; f: file of Homme; i: Integer; begin ClrScr; Assign(f,'xx182kls.note'); Rewrite(f); for i := 1 to 10 do begin with MAN do begin Write('Name: '); ReadLn(name); Write('SurName: '); ReadLn(suname); Write('FName: '); ReadLn(fname); Write('Birth date: '); ReadLn(dateB); Write('Gender (W/M): '); ReadLn(gen); end; Write(f, MAN); end; Close(f); end. Результаты работы программы: Запустим программу и введем 10 произвольных записей. Задание № 4. Написать программу, которая считывает из файла <login>.note все данные и выводит на экран в виде таблицы. Решение: Решим задачу с помощью структурных типов данных и типизированных фалов. Описание структуры программы: Для решения задачи опишем в программе запись типа Homme, которая состоит из 5-ти полей строкового типа. Причем поля «имя», «фамилия» и «отчество» (name, suname и fname) имеют длину 64 байт, поле «дата рождения» (dateB) имеет длину 16 байт и поле «пол» (gen) имеет длину 1 байт. Опишем функцию CalcAge (date1, date2: String), которая будет принимать на вход два строковых параметра (введенную дату с клавиатуры date1 и дату рождения из базы date2). Данная функция будет подсчитывать возраст на дату, введенную с клавиатуры. При этом будет учитываться, что день рождения еще не наступил и что человек вовсе не родился. Опишем переменную структуры MAN и файловую переменную fтипа Homme. Откроем файл с именем xx182kls.note, созданный в предыдущей задаче. Считаем все записи из файла и выведем их на экран в виде таблицы. Закроем файл. Кодпрограммы: program lab2_4; uses crt; type Homme = record name, suname, fname: string[64]; dateB: string[16]; gen: string[1]; end; function CalcAge (date1, date2: String): String; var D1, M1, Y1, D2, M2, Y2: Integer; age: Integer; begin Y1 := StrToInt (Copy (date1, 7, 4)); M1 := StrToInt (Copy (date1, 4, 2)); D1 := StrToInt (Copy (date1, 1, 2)); Y2 := StrToInt (Copy (date2, 7, 4)); M2 := StrToInt (Copy (date2, 4, 2)); D2 := StrToInt (Copy (date2, 1, 2)); if Y1 < Y2 then begin CalcAge := 'Not born'; end else if Y1 = Y2 then begin if M1 < M2 then begin CalcAge := 'Not born'; end else if M1 = M2 then begin if D1 < D2 then begin CalcAge := 'Not born'; end else begin CalcAge := '0'; end; end; end else begin age := Y1 - Y2; if M2 > M1 then age := age - 1 else if M2 = M1 then if D2 > D1 then age := age - 1; CalcAge := IntToStr (age); end; end; var MAN: Homme; f: file of Homme; i: Integer; d: String; begin ClrScr; write ('Input some date (dd.mm.yyyy): '); readln (d); Assign(f,'xx182kls.note'); Reset(f); writeln ('Name ------------ SurName ------------- Fname ------------- Birth Date ---------- Age on input date ------------ Gender'); writeln; while not eof (f) do begin {пока не достигнут конец файла} read (f, MAN); writeln (MAN.name:11,' ----- ',MAN.suname:11,' ------ ',MAN.fname:11,' ------ ',MAN.dateB:11,' ---------------------- ',CalcAge (d, MAN.dateB),' ------------------ ',MAN.gen:11); end; writeln ('-------------------------------------------------------------------------------------------'); Close(f); end. Результаты работы программы: Запустим программу и увидим на экране содержимое файла xx182kls.note в виде таблицы. Введем также дату, например 15.06.2001, и посчитаем возраст всех людей на эту дату. |