Файл: Основы программирования на языке Pascal (Теоретическая часть. Изучение возможностей записей в языке Паскаль)).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 04.04.2023

Просмотров: 121

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

type

RecType = Record

x,y: Word;

ch: Char;

dim: Array[1..3] of Byte

end;

const

Rec: RecType = ( x: 127;

y: 255;

ch: 'A';

dim: (2, 4, 8) );

ГЛАВА 2.

ПРАКТИЧЕСКАЯ ЧАСТЬ ИЗУЧЕНИЯ ЗАПИСЕЙ

2.1 Комплексные числа

Одним из простейших примеров использования записи является работа с комплексными числами. Комплексные числа, числа вида х + iy, где х и у — действительные числа, а i — так называемая мнимая единица (число, квадрат которого равен -1). х называют действительной частью, а у — мнимой частью комплексного числа. z = х +iy (обозначают х =Rez, у=Imz).

Как известно в Паскале нет комплексных чисел. Но, используя запись можно сделать новый тип, и с помощью процедур определить основные операции над комплексными числами, такие как:

- инициализация,

- сложение,

-вычитание,

- умножение.

- деление,

- вывод на экран.

Итак, прежде всего определяем новый тип данных:

Type complex= record {определяем тип complex как запись}

re,im:real; { поля записи - вещественная часть и мнимая часть}

end;

Следующая процедура нужна для инициализации комплексного числа. Создается комплексное число, заданное первым параметром. Его действительной части присваивается значение второго параметра, а мнимой – третьего.

procedure initc(var c:complex;r,i:real); {создание комплексного числа}

begin

c.re:=r;c.im:=i

end;

Далее описываются процедуры, определяющие действия над комплексными числами. Сложение, вычитание, умножение, деление. Как известно, чтобы сложить два комплексных числа нужно сложить их действительные части и мнимые части. Аналогично и для вычитания комплексных чисел.

procedure addc(c1,c2:complex;var r:complex); {сложение}

begin

r.re:=c1.re+c2.re;

r.im:=c1.im+c2.im

end;

procedure subtrc(c1,c2:complex;var r:complex); {вычитание}

begin

r.re:=c1.re-c2.re;

r.im:=c1.im-c2.im

end;

Немного сложнее производится умножение комплексных чисел. Если у нас есть два комплексных числа и то

procedure multc(c1,c2:complex;var r:complex); {умножение}

begin

r.re:=c1.re*c2.re-c1.im*c2.im;

r.im:=c1.re*c2.im+c1.im*c2.re

end;

И, наконец, – деление комплексных чисел. Если у нас есть два комплексных числа и , то

Разумеется операция деления определена, если .

procedure divc(c1,c2:complex;var r:complex); {деление}

begin

if (c2.re=0) and (c2.im=0) then writeln('Деление невозможно') else

begin

r.re:=(c1.re*c2.re+c1.im*c2.im)/(c2.re*c2.re+c2.im*c2.im);


r.im:=(c2.re*c1.im-c1.re*c2.im)/(c2.re*c2.re+c2.im*c2.im);

end;

end;

Чтобы выводить на экран комплексные числа также нужна процедура.

procedure writec(c:complex); {вывод на экран комплексного числа}

var s:char;

begin

if c.im>0 then s:='+' else s:=' ';

writeln('z=',c.re:8:3,' ',s,c.im:8:3,' i');

end;

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

1+2i и 3+4i.

var c1,c2,c3:complex;

begin

initc(c1,1,2);

writec(c1);

initc(c2,3,4);

writec(c2);

addc(c1,c2,c3);

writec(c3);

subtrc(c1,c2,c3);

writec(c3);

multc(c1,c2,c3);

writec(c3);

divc(c1,c2,c3);

writec(c3);

end.

После запуска программы получаем результат:

Рис.7. Результат работы программы

Тип complex, вместе с указанными выше процедурами, можно оформить в виде модуля в Turbo Pascal (unit). Затем транслировать отдельно. После этого такой модуль можно включать, также как и любой стандартный модуль, с помощью оператора Uses в любую программу, где требуется работа с комплексными числами.

2.2 Работа с персональными данными.

В качестве другого примера работы с записями рассмотрим следующий. В файле хранится информация о персональных данных большой группы людей. Нам необходимо обработать ее и выдать на экран в виде таблицы. При этом следует произвести упорядочение по одному из признаков. В качестве такого признака возьмем год рождения человека.

Обычно анкетные данные о каждой персоне могут быть обширны и иметь много полей. Мы ограничимся всего 4 полями. Но одно из них – дата рождения будет составным, и, в свою очередь состоять из трех полей – число, месяц и год рождения.

type

date =record {Создаем тип дата (запись)}

year:integer;

month:1..12;

day:1..31;

end;

Для работы создаем новый тип данных, который называем Chel

chel = {тип человек - (запись)}

record

nam:string[30];

d:date;

pol:char;

rost:integer;

end;

В поле nam храним фамилию, имя и отчество, в поле d – дату рождения, далее – пол и рост. Разумеется, если есть необходимость, можно создать и многие другие поля записи chel.

Данные обо всех людях записываем в текстовый файл. Для простоты данные для каждого поля записываются в отдельную строку. Фрагмент этого файла приводится ниже.

Иванов Иван Петрович

1959

12

11

М

1975

Аналогичным образом записываются данные обо всех персонах, которые мы храним в этом файле.

Для работы со всей информацией мы создаем новый тип и описываем переменную данного типа.


type narod=array[1..100] of chel; {тип народ }

var s:narod;

Опишем теперь работу программы. Листинг ее приводится в приложении.

В начале запрашивается имя файла и делается открытие файла. Разумеется, если имя введено неверно, то выдается сообщение об ошибке и программа заканчивает работу.

Затем данные считываются из файла, пока они не закончатся, и размещаются в нужные поля текущего элемента массива информации о людях. При этом мы воспользовались оператором With, чтобы не писать каждый раз один и тот же префикс для каждого поля.

Каждая запись при этом выводится на экран. Параллельно ведется подсчет введенных записей.

После ввода всех записей, которые хранятся в файле, осуществляется их сортировка. Сортировка производится по полю -год рождения. Она реализована в виде процедуры sort. Используется не самый эффективный, но, пожалуй, наиболее простой метод – метод Пузырька.

Разумеется, если есть необходимость, то сортировку можно производить по любому из полей нашей записи.

Затем результаты – отсортированный массив информации, выводится на экран в виде таблицы. На рис. 8 приводится результат работы программы:

Рис. 8 Результат работы программы

ЗАКЛЮЧЕНИЕ

Рассмотренные выше примеры показывают простоту и удобство работы с записями как в простейших случаях, (пример с комплексными числами), так и в более сложные случаях (пример с обработкой персональных данных). Следует отметить также удобство использования оператора With. Что касается возможностей работы с записями типа вариант, то на практике данной возможностью пользуются сравнительно редко.

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

Более того, дальнейшее развитие самого Паскаля и его объектно-ориентированной версии, просто невозможно без понятия записи. Новое понятие объект, которое было введено в язык, фактически является обобщением понятия запись.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

  1. Йенсен К., Вирт Н., Паскаль: руководство для пользователя. М., 1989.,256 с.
  2. Фаронов В.В.,Turbo Pascal 7.0. Начальный курс. - Нолидж, 1998. -620 с.
  3. Грызлов В.И., Грызлова Т.П., Турбо Паскаль 7.0. - М.: "ДМК", 2000. - 416 с.
  4. Прайс Д., Программирование на языке Паскаль. - М., "Мир", 1987. -232с.
  5. Эрбс Х.-Э., Штольц О., Введение в программирование на языке Паскаль. - М., "Мир", 1989. -300с.
  6. Джонс Ж., Харроу К.,Решение задач в системе Турбо-Паскаль. - М., 1991.
  7. Зуев Е.А. ,Программирование на языке Turbo Pascal 6.0, 7.0. - М., Радио и связь, 1993. -380с.
  8. Зубов В.С. Программирование на языке TURBO PASCAL. Версии 6.0 и 7.0. - М., "Филинъ", 1997. -320с.
  9. Лукин С.Н. TURBO PASCAL 7.0. Самоучитель для начинающих. - М., "Диалог-МИФИ", 1999. -400с
  10. Марченко А.И., Марченко Л.М., Программирование в среде Turbo Pascal 7.0. - Киев, "Век+", 1999. -506с.