Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
PAGE 27
Кафедра: «Информационные системы»
О.В. Амелина
ИНФОРМАЦИОННЫЕ СИСТЕМЫ:
ПОДСИСТЕМА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
(программирование на языке паскаль)
Методические указания по выполнению лабораторных работ
Дисциплина - «Информатика и программирование»
Специальности: - 080801 «Прикладная информатика (в экономике)»,
- 080800.62 «Прикладная информатика
(бакалавры)»,
- 080801ю «Прикладная информатика
(в юриспруденции).
Печатается по решению редакционно-издательского совета ОрелГТУ
ОРЕЛ 2010
Автор: канд. экон. наук, доцент кафедры «Информационные системы» О.В. Амелина
Рецензент: канд. техн. наук, доцент кафедры «Информационные системы» А.П. Гордиенко
Настоящие методические указания предназначены для выполнения лабораторных работ по дисциплине «Информатика и программирование» студентов очной формы обучения для специальностей: 080801 «Прикладная информатика (в экономике)», 080800.62 «Прикладная информатика (бакалавры)», 080801ю «Прикладная информатика в юриспруденции».
Редактор
Технический редактор
Орловский государственный технический университет
Лицензия ИД 00670 от 5.01.2000
АНО «ОрелГТУ-РЦФИО»
Подписано к печати Формат 6084 1\16
Печать офсетная Усл. печ. л. . Тираж экз.
Заказ №
Отпечатано с готового оригинал-макета
на полиграфической базе ОрелГТУ,
302030, г. Орел, ул. Московская, 65
© ОрелГТУ, 2010
© АНО «ОрелГТУ-РЦФИО»
© Амелина О.В., 2010
СОДЕРЖАНИЕ
[1] [2] 2 ПОДГОТОВКА К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ [3] 3 ОСНОВНЫЕ ОПЕРАТОРЫ ЯЗЫКА ПАСКАЛЬ [4] 3.1 СРЕДА TURBO PASCAL [5] 3.2 ОПЕРАТОРЫ TURBO pascal [5.0.1] 3.2.1 УСЛОВНЫЙ ОПЕРАТОР [5.0.2] 3.2.2 ОПЕРАТОР ВАРИАНТА [5.0.3] 3.2.3 ОПЕРАТОРЫ ЦИКЛА [5.0.3.1] 3.2.3.1 Оператор цикла с параметром [5.0.3.2] 3.2.3.2 Оператор цикла с предусловием [5.0.3.3] 3.2.3.3 Оператор цикла с постусловием [6] 4 ОСНОВНЫЕ ПРОЦЕДУРЫ ГРАФИЧЕСКОГО МОДУЛЯ [7] 5 ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ МОДЕЛЬ TURBO PASCAL [8] 5.1 ОСНОВНЫЕ КОНЦЕПЦИИ ООП [8.0.1] 5.1.1 АБСТРАКТНЫЕ ТИПЫ ДАННЫХ. ИНКАПСУЛЯЦИЯ [8.0.2] 5.1.2 КЛАССЫ [8.0.3] 5.1.3 НАСЛЕДОВАНИЕ [8.0.4] 5.1.4 ПОЛИМОРФИЗМ. РАННЕЕ И ПОЗДНЕЕ СВЯЗЫВАНИЕ [9] 5.2 ДИНАМИЧЕСКИЕ ОБЪЕКТЫ
[10] [11] 7 КОНТРОЛЬНЫЕ ВОПРОСЫ [12] 8 СОДЕРЖАНИЕ ОТЧЕТА [13] 9 СПИСОК ЛИТЕРАТУРЫ |
Целью проведения лабораторных работ является:
Лабораторные работы рассчитаны на студентов, имеющих минимальный опыт работы на языке паскаль или на другом языке программирования высокого уровня. Студент должен уметь работать в любом текстовом редакторе и c проводником. Основной же целью выполнения лабораторной работы является приобретение практических навыков программирования на языке паскаль.
При подготовке к лабораторной работе студент должен повторить лекционный материал, относящийся к изучаемому вопросу, а также ознакомиться с материалом, приведенным в соответствующем разделе данного методического указания. При этом необходимо обращать особое внимание на разобранные примеры и фрагменты программ. Выполнение большинства работ основывается на материале, освоенном в предыдущих работах.
Готовность студента к работе определяется преподавателем путем проведения собеседования. Основным материалом для собеседования являются контрольные вопросы, приведенные в разделе 7.
Защита лабораторной работы производится после написания студентом программы и оформления отчета.
Среда Turbo Pascal объединяет редактор, компилятор, компоновщик и отладчик для создания, отладки и запуска Pascal-программ.
Основные компоненты: меню вверху, рабочий стол и строка состояния.
Команды из меню можно выбирать при помощи клавиатуры или при помощи мыши.
Работа в данной среде интуитивно понятна даже неподготовленному пользователю, и элементы управления аналогичны применяемым в любой интегрированной среде.
Все операторы делятся на простые и структурные.
К простым операторам относят операторы присваивания, операторы процедуры и оператор goto.
Оператор присваивания изменяет текущее значение переменной на значение выражения, стоящего после знака присваивания «:=».
Пример.
X:=Y+Z;
Done:=( I >- 1 ) and ( I < 100 );
К структурным операторам относят составные, условные, операторы цикла, оператор присоединения (см. далее).
Составной оператор последовательность операторов между словами begin и end. Символ «;» применяется для того, чтобы отделить друг от друга два оператора . Так как этот символ не является частью оператора, а только разделяет операторы, то между последним оператором и словом end он может отсутствовать.
Пример.
…
begin
Z:=X;
X:=Y;
Y:=Z
end;
…
В языке Pascal условный оператор начинается с ключевого слова if (если) и в общем виде выглядит так:
Выражение должно иметь стандартный тип boolean. Если выражение имеет значение True, то выполняется оператор, следующий за словом then. Если же выражение имеет значение False и часть else присутствует, выполняется оператор, следующий за словом else. Если часть else отсутствует, выполняется оператор, следующий за оператором if.
Пример.
…
if X<1.5 then
Z:=X+Y
else
Z:=1.5;
…
Обратите внимание! Перед else нет знака «;».
Синтаксическая двусмысленность возникает в конструкции
if e1 then if e2 then s1 else s2 , так как часть else s2 может трактоваться как принадлежащая «внешнему» оператору if e1 или вложенному оператору if e2 then.
Эта двусмысленность разрешается путем следующей интерпретации данной конструкции:
if e1 then
begin
if e2 then
s1
else
s2
end;
Правило: служебное слово else всегда ассоциируется с ближайшим по тексту служебным словом if, которое еще не связано со служебным словом else.
Данный оператор является обобщением условного оператора для случая произвольного числа альтернатив. Он сопоставляет различным значениям некоторого выражения соответствующие им операторы.
Пример.
…
case CurColor of
Red: X:=X+2;
Yellow: X:=Y-2;
Green: X:=Y
end;
…
CurColor в примере это переменная перечислимого типа. Сначала вычисляется текущее значение переменной CurColor. Затем это значение сопоставляется (сравнивается) с константами, записанными перед операторами. При совпадении значения переменной с одной из констант будет выполнен оператор, помеченный данной константой. На этом выполнение оператора будет завершено. Если значение переменной CurColor не совпадает ни с одной из констант, то данный оператор не выполняет никаких действий. Для того, чтобы задать некоторые действия для случая такого несовпадения, можно использовать альтернативу else:
Пример.
…
case (K+1)*2 of
2: Add(A,B);
4: Multiply(A,B);
0: Subtract(A,B)
else
writeln(ошибка!)
end;
…
Кроме одиночных констант в альтернативах оператора варианта могут быть заданы списки и/или диапазоны значений, которые в этом случае разделяются символом «,».
Пример.
…
case Switch of
1..2: begin Proc1; Proc2; Proc3 end;
3,4,10..20: Proc4;
5,6: Proc5;
else
Proc6;
Proc7;
end;
…
При использовании оператора варианта должны выполняться следующие правила:
1. Значения выражения-«переключателя», записанного после служебного слова case, должно принадлежать упорядоченному типу и иметь размер 1 байт или 1 слово.
2. Все константы, предшествующие операторам альтернатив, должны иметь тип, совместимый с типом выражения.
3. Все константы в альтернативах должны быть уникальны в пределах оператора варианта (то есть повторения констант в альтернативах не допускается); диапазоны не должны пересекаться и не должны содержать констант, указанных в данной или других альтернативах.
При необходимости задания нескольких операторов для каких-либо из альтернатив, следует сгруппировать их в составной оператор, в то время как ветвь else допускает последовательность операторов, разделенных символом «;».
Задают повторяющееся выполнение некоторых операторов.
3.2.3.1 Оператор цикла с параметром
Предусматривает повторное выполнение некоторого оператора с одновременным автоматическим изменением значения, присваиваемого управляющей переменной (параметру) этого цикла. Управляющая переменная должна быть упорядоченного типа и начальное и конечное ее значения должны быть совместимы с упорядоченным типом. Начальное и конечное значения вычисляются один раз (это выражения), и параметр цикла не должен изменяться внутри цикла с параметром. Если при спецификации to (downto) начальное значение больше (меньше) конечного значения, то цикл не выполняется. При нормальном выходе из цикла с параметром значение параметра остается неопределенным.
Пример {вычисление h(n)=1+1/2+1/3+…+1/n}
Program exfor;
var n,i: integer;
H: real;
begin
read(n); write(n);
h:=0;
for i:=n downto 1 do
h:=h+1/i; n:=n-1;
writeln(h)
end.
3.2.3.2 Оператор цикла с предусловием
Выражение, контролирующее повторения, должно быть булевским. Оно вычисляется перед выполнением последовательности операторов. Эта последовательность выполняется до тех пор, пока выражение имеет значение True. Если выражение имеет значение False в самом начале, то последовательность операторов не выполнится ни разу.
Пример {вычисление h(n)=1+1/2+1/3+…+1/n}
Program exwhile;
var n: integer;
H: real;
begin
read(n); write(n);
h:=0;
while n>0 do
begin
h:=h+1/n; n:=n-1
end;
writeln(h)
end.
3.2.3.3 Оператор цикла с постусловием
Оператор содержит булевское выражение, которое управляет повторяющимся выполнением последовательности операторов внутри оператора repeat. Эта последовательность выполняется, пока выражение не станет истинным (пока не истина). Последовательность операторов выполняется, по крайней мере, один раз, так как выражение вычисляется после выполнения этой последовательности.
Пример {вычисление h(n)=1+1/2+1/3+…+1/n}
Program exrepeat;
var n: integer;
h: real;
begin
read(n); write(n);
h:=0;
repeat
h:=h+1/n; n:=n-1;
until n=0;
writeln(h)
end.
Приведенная программа выполняется при всех n>0.
Что произойдет при n<=0?
Для выполнения лабораторных работ, связанных с графикой, необходимо использовать графическим модулем Graph. В таблице 1 приведены некоторые его процедуры, которые могут пригодиться в первую очередь, остальные можно найти в справочной литературе.
Таблица 1.
Процедура (функция) |
Назначение |
Пример вызова |
detect |
Определить тип графического драйвера |
d := detect |
initgraph(d, m, PathToDr) |
Инициализировать графический режим экрана |
initgraph(d, m,c:\bgi) |
cleardevice |
Очистить экран |
cleardevice |
setcolor(color) |
Установить цвет |
setcolor(magenta) |
setbkcolor(color) |
Установить цвет фона |
setbkcolor(0) |
putpixel(x,y,color) |
Закрасить пиксель (x,y) |
putpixel(5, 5, red) |
line(x1,y1,x2,y2) |
Нарисовать линию по двум точкам (x1,y1)-(x2,y2) |
line(10,10,20,200) |
lineto(x,y) |
Нарисовать линию из текущей позиции луча в (x,y) |
lineto(100,200) |
moveto(x,y) |
Переместить луч в (x,y) |
moveto(nx, ny) |
circle(x,y,radius) |
Нарисовать окружность (x,y,r) |
circle(x, y, 20) |
arc(x,y,ang1,ang2,radius) |
Дуга окружности (x,y,r) от угла1 до угла2 (радиан) |
arc(10,10,0,pi,5) |
setfillstyle(s,color) |
Установить стиль и цвет заливки |
setfillstyle(1,green) |
floodfill(x,y,coor) |
Залить область с границей (color) цветом заливки |
floodfill(p,q, 10) |
rectangle(x1,y1,x2,y2) |
Прямоугольник (x1,y1)-(x2,y2) |
rectangle(2,2,5,10) |
bar(x1,y1,x2,y2) |
Прямоугольник (x1,y1)-(x2,y2) с заливкой цвета |
bar(2, 2, m, n) |
getmaxx |
макс. граница для x для vga 0..639 |
mx := getmaxx |
getmaxy |
макс. граница для y (для vga 0..479 |
my := getmaxy |
closegraph |
Закрыть графический режим экрана |
closegraph |
ООП это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса, а классы образуют иерархию на принципах наследования.
Одной из основных особенностей ООП является поддержка абстрактных типов данных (АТД), которые определяют множество подобных объектов и связанные с ними наборы операторов.
Инкапсуляция есть объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы объектными методами.
Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения. Она существенно повышает надежность разрабатываемых программ, так как локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшими объемами данных, причём количество и тип этих данных обычно тщательно контролируются. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечёт за собой плохо прослеживаемых последствий для программы в целом (в целях повышения защищённости программ в ООП почти не используются глобальные переменные).
Языковыми конструкциями для определения АТД в большинстве языков программирования являются классы.
В то время как объект определяет конкретную сущность, определённую во времени и пространстве, класс определяет лишь абстракцию (выжимку из объекта).
В общеупотребительных терминах «класс» это группа, множество, вид с общими свойствами (свойством), разновидностями по качеству, возможностям, условиям. С точки зрения ООП класс это множество объектов, связанных общностью свойств, структуры и поведения.
Наследование есть свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.
Полиморфизм это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В рамках ООП поведенческие свойства объекта определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т.е. объявить в потомке одноимённый метод и реализовать в нём нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноимённых метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.
В Turbo Pascal полиморфизм достигается не только описанным выше механизмом наследования и перекрытием методов родителя, но и их виртуализацией, позволяющей родительским методам обращаться к методам потомков.
Одним из преимуществ объектно-ориентированного стиля программирования является возможность использования динамического связывания (позднего). Все методы, которые рассматривались до этого статические. Компилятор размещает их и решает все ссылки на них во время компиляции (раннее связывание). Позднее связывание означает, что ссылки на методы решаются во время выполнения. В Turbo Pascal методы, подразумевающие позднее связывание, объявляются виртуальными.
Все типы объектов, имеющие виртуальные методы, должны иметь конструктор (особый вид процедуры, которая выполняет некоторую установочную работу). Конструктор устанавливает связь между экземпляром, вызывающим этот конструктор, и таблицей виртуальных методов данного типа объектов. Она содержит размер типа объектов и для каждого из его виртуальных методов указатель на код, реализующий этот метод.
Для динамических объектов есть специальная форма процедуры new, с двумя параметрами, которая одновременно выделяет место объекту в куче и инициализирует его.
Объект может содержать указатели на динамические структуры или объекты, которые необходимо освободить или стереть в определённом порядке. Обычно для методов освобождения и стирания используют идентификатор done. Деструкторы особые методы, предназначенные для освобождения динамически распределённых объектов. Их задача осуществлять поиск размера этого типа экземпляра в таблице виртуальных методов и передавать этот размер процедуре dispose. Деструкторы применяются, когда полиморфные объекты должны быть очищены и освобождено их место в динамической памяти.
Рассмотрим программу, которая:
Для создания связанного списка динамических объектов создадим новый тип объекта LIST, его предназначение возглавлять список других объектов (PointPtr указатель на суперкласс графических объектов)
NodePtr=^Node;
Node=record
Item : PointPtr;
Next : NodePtr;
end;
ListPtr=^List;
List=object
Nodes : NodePtr;
Constructor Init;
Destructor Done; virtual;
Procedure Add (Item ; PointPtr);
Procedure View;
end;
…
Constructor List.Init;
begin
Nodes:=nil;
end;
Destructor List.Done;
var T: NodePtr;
begin
while Nodes <> nil do
begin
T:=Nodes;
dispose (T^.Item, Done);
Nodes:=T^.Next;
dispose (T);
end;
end;
Procedure List.ADD (Item : PointPtr);
var T ; NodePtr;
begin
new(T);
T^.item:=Item;
n^.Next:=Nodes;
Nodes:=T;
end;
Procedure List.View;
var curr : nodePtr;
begin
curr;=Nodes;
while cur <> nil do
begin
curr^.Item^.Show;
curr:=curr^.Next;
end;
end;
Лабораторная работа №1.(сдал) Тема условные операторы - if, вложенные операторы if, оператор case.
Напишите программу, которая вводит с клавиатуры символ, определяющий площадь какой фигуры необходимо вычислить. «R» определяет прямоугольник, «T» треугольник, «С» круг. Выдать результат на экран, в случае ввода неправильного символа выдать сообщение об ошибке. Программа должна обеспечить возможность вычислять площади фигур, пока пользователь не решит из нее выйти (использовать оператор цикла). Программу представить в двух вариантах:
1) с использованием вложенных операторов if;
2) с использованием оператора варианта.
Лабораторная работа №2.(сдал) Тема вложенные операторы case.
Напишите программу перевода римских чисел в десятичные. Алгоритм перевода представлен в следующей таблице:
символ состоян. |
'X' |
'V' |
'I' |
1 |
n:=10; state:=2 |
n:=5; state:=3 |
n:=1; state:=6 |
2 |
n:=n+10; state:=2 |
n:=n+5; state:=3 |
n:=n+1; state:=6 |
3 |
ok:=false |
ok:=false |
n:=n+1; state:=4 |
4 |
ok:=false |
ok:=false |
n:=n+1; state:=5 |
5 |
ok:=false |
ok:=false |
n:=n+1; state:=7 |
6 |
n:=n+8; state:=7 |
n:=n+3; state:=7 |
n:=n+1; state:=5 |
7 |
ok:=false |
ok:=false |
ok:=false |
Программа выполняет перевод чисел, пока пользователь не решит из нее выйти (использовать оператор цикла).
Программа должна обрабатывать следующие типы ошибок пользователя:
1) введен неверный символ (отсутствует в алфавите программы);
2) символы введены в неправильном порядке.
Лабораторная работа №3.(сдал) Тема работа с массивами.
Напишите следующие программы работы с массивами:
1) Найти сумму элементов одномерного массива;
2) Найти произведение элементов одномерного массива;
3) Найти сумму элементов матрицы, расположенных на главной диагонали;
4) Найти сумму элементов матрицы, расположенных ниже главной диагонали;
5) Найти сумму элементов матрицы, расположенных выше главной диагонали;
6) Найти произведение элементов матрицы, расположенных на побочной диагонали;
7) Найти произведение двух матриц.
Лабораторная работа №4. Тема работа с графикой, с мышью, использование перечислимых типов.
Напишите программу, при запуске которой рисуется графическое меню, имеющее следующие команды: окружность, треугольник, отрезок, выход. При выборе мышкой команды, на экране рисуется соответствующая фигура или производится выход из программы. Замечание: при определении команд в программе использовать перечислимый тип.
Лабораторная работа №5. Тема работа с записями, с массивами записей, с графикой.
В программе определить массив записей. Каждая запись описывает графический маркер (координаты, цвет, тип маркера (например - крест, косой крест, окружность, звездочка), размер (например - малый, средний, большой). Массив заполнить при помощи генератора случайных чисел. На экране нарисовать прямоугольную область. Затем визуализировать маркеры и посчитать, сколько маркеров, например, красного цвета, попало вовнутрь прямоугольной области.
Лабораторная работа №6.(сдал) Тема работа с массивами записей.
В программе определить массив записей. Каждая запись хранит информацию о работнике фирмы: табельный номер, ФИО, оклад, должность, пол. Заполнить массив с клавиатуры. Затем программа должна уметь ответить на следующие вопросы: 1) посчитать фонд зарплаты фирмы; 2) посчитать количество женщин и количество мужчин, работающих в фирме; 3) посчитать фонд зарплаты отдельно для мужчин и отдельно для женщин.
Лабораторная работа №7.(сдал) Тема работа с записями с вариантами, графикой.
В программе определить массив записей с вариантами. Каждая запись определяет геометрическую фигуру: окружность, треугольник, прямоугольник. Общие поля координаты точки привязки фигуры, цвет. Заполнить массив с клавиатуры или при помощи генератора случайных чисел, и нарисовать фигуры на экране.
Лабораторная работа №8.(сдал) Тема работа с множествами, со строками.
Написать программу для распознавания лексем. Задача - преобразовать последовательность символов, вводимых с клавиатуры в последовательность лексем языка программирования. В языке имеется следующие лексемы:
1) Идентификатор последовательность букв и цифр, начинающаяся с буквы;
2) Число последовательность цифр;
3) Лексемы больше-равно, меньше-равно, присвоить ( >=, <=, := ).
Результатом работы программы является массив записей, где каждая запись хранит саму лексему, а также ее название. Выдать его содержимое на экран. Обрабатывать ошибки в случае неправильного ввода.
Лабораторная работа №9.(сдал) Тема Работа с текстовыми файлами.
Текстовая информация вводится с клавиатуры и заносится в текстовый файл. Признаком окончания ввода служит ввод пустой строки. Файл закрыть, затем открыть его для чтения и отредактировать: в каждой строке текста проверить правильность расстановки запятых. Правила следующие в начале строки не должно быть запятой, не может идти подряд две и более запятых, перед запятой не может быть пробела, после запятой должен быть хотя бы один пробел. Отредактированный текст записать в промежуточный файл. Затем старый файл удалить, а новый переименовать дать ему старое имя. Содержимое отредактированного файла выдать на экран.
Лабораторная работа №10(сдал). Тема работа с типизированными файлами, процедуры и функции.
Программу из лабораторной работы № 6 переделать информацию о работнике фирмы хранить не в массиве, а в типизированном файле. Функциональность программы не изменилась. Для реализации запросов к информации файла использовать процедуры и функции. При написании процедур и функций продемонстрировать все способы передачи параметров параметры переменные, параметры значения и параметры константы.
Лабораторная работа №11. Тема работа с типизированными файлами
На экране нарисовать несколько заполненных областей. Информацию о каждой области цвет, количество вершин, координаты вершин, тип заливки записать в нетипизированный файл. Каждая запись файла имеет фиксированный размер. Так как количество полигонов, и число их вершин произвольны, то каждый раз запись хранит информацию о разном числе полигонов, при чем информация об одном полигоне может попасть в разные записи. Сохранить файл на диске. Восстановить содержимое экрана из файла.
Лабораторная работа №12. Тема Нетипизированные параметры
Написать процедуру рисования полигона. Параметры: 1) адрес массива координат полигона (так как количество вершин каждый раз разное параметр нетипизирован); 2) количество вершин полигона. В процедуре привести нетипизированный параметр к удобному для программиста типу и нарисовать полигон. Из основной программы обратиться к данной процедуре 3 раза, в качестве фактического параметра использовать различные структуры данных, хранящие координаты полигонов (например, массив записей, двумерный массив, одномерный массив).
Лабораторная работа №13. Тема создание модулей.
Создать модуль, в который включить несколько процедур и функций для работы с массивами, например, процедура поиска наименьших элементов нечетных столбцов, процедура поиска наибольших элементов четных строк, функция нахождения суммы элементов побочной диагонали. В основной программе заполнить исходный массив, и затем вызвать имеющиеся процедуры и функции. Обосновать выбор способов передачи параметров.
Лабораторная работа №14. Тема работа с процедурным типом.
Написать программу, в которой определить массив графических маркеров (координаты X, Y, цвет), заполнить его данными при помощи генератора случайных чисел. Для рисования маркеров определить 3 процедуры (например, звездочка, крестик, кружок). Указанные процедуры использовать следующим образом:
1-й вариант: Написать процедуру визуализации, в которую передать в качестве параметров: 1) массив маркеров; 2) процедуру для рисования маркера (использовать параметр процедурного типа);
2-й вариант: В массив маркеров в записи добавить поле процедурного типа. При инициализации ему присваивать значение одной из процедур рисования маркеров. В процедуру визуализации передавать только один параметр массив маркеров.
Лабораторная работа №15. Тема рекурсия, косвенная рекурсия.
Лабораторная работа №16. Тема тестирование алгоритмов поиска.
Создать модуль, в который включить все изученные алгоритмы поиска. В модуле в процедурах поиска использовать открытый параметр массив. Измерить время работы каждого алгоритма в различных условиях искомый элемент находится в начале, в конце, в середине массива. Результаты представить при помощи диаграмм в программе Excel.
Лабораторная работа №17. Тема тестирование алгоритмов сортировки.
Создать модуль, в который включить все изученные алгоритмы сортировки. Измерить время работы каждого алгоритма в различных условиях 1) сортируемый массив имеет сравнительно небольшие размеры и 2) сравнительно большие размеры. Для каждого варианта проанализировать еще три ситуации: 1) массив почти упорядочен; 2) массив почти упорядочен в обратном порядке; 3) массив заполнен случайными значениями. Результаты представить при помощи диаграмм в программе Excel.
Лабораторная работа №18. Тема работа со связанными списками.
Написать программу графический редактор, рисующий маркеры. При запуске программы на экране появляется главное меню, его команды:
1) создать маркер;
2) удалить маркер;
3) переместить маркер;
4) перерисовать все;
5) удалить все маркеры;
6) выход.
Кроме того, на экране появляется меню для выбора типа маркера (*, +, о), а также меню для выбора цвета палитра. Активный пункт каждого меню выделяется красным цветом. Каждый маркер при создании помещается в связанный список. Выполнение каждой команды сопровождается соответствующей операцией со списком.
Лабораторная работа №19. Тема работа с двусвязанными кольцами.
Написать программу графический редактор, рисующий ломаные линии. При запуске программы на экране появляется главное меню, его команды:
1) создать ломаную линию;
2) удалить ломаную линию;
3) добавить точку в ломаную линию;
4) переместить точку в ломаной линии;
5) удалить точку в ломаной линии;
6) перерисовать все;
7) удалить все ломаные линии;
8) выход.
Кроме того, на экране появляется меню для выбора цвета палитра. Активный пункт каждого меню выделяется красным цветом. Каждая ломаная при создании помещается в двусвязаное кольцо. Информация о ломаной включает цвет и указатель на список точек, принадлежащих данной ломаной. Выполнение каждой команды сопровождается соответствующей операцией с кольцом или со списком точек.
Лабораторная работа №20. Тема работа с двоичными деревьями поиска.
Лабораторная работа №21. Тема создание объектно-ориентированных программ
Написать программу, в которой определить массив указателей на динамические объекты. Объекты снежинки мерцающие и снежинки падающие. Они являются наследниками класса «снежинка». После инициализации визуализировать массив для каждого его элемента вызвать виртуальный метод «проявить визуальный эффект».
Отчет должен содержать следующую информацию:
1*. Грогоно П., Программирование на языке Паскаль/ Пер. с англ. СП. Забродина, А. В. Шалащова. M.: Мир, 1982, С.
2. Вирт Н. Алгоритмы и структуры данных, Невский Диалект, 2005.
3. Зуев Е.А., Язык программирования Turbo Pascal 7.0, М.: Унитех , 1997.
4. Фаронов В.В. Turbo Pascal, BHV, 2007.
5. Грис Д., Наука программирования. М: Мир , 1984., 416 с.
6. Гудман С, Хиндетниеми С., Введение в разработку и анализ алгоритмов, М.: Мир, 1981.,368 с.
7. Райли Д., Абстракция и структуры данных. Вводный курс, М.: Мир, 1993.
10. Града Буч, Объектно-ориентированное программирование с примерами применения. / Пер. с англ., М.: Конкорд, 1992.
11*. Turbo Pasacl with Objects Version 7.0 Borland International, 1992.
12. Ахо А.В., Ульман Дж., Хопкрофт Дж., Структуры данных и алгоритмы, Вильямс, 2010.
13. К. Зиглер, Методы проектирования программных систем, М.: Мир, 1985., 328 с.
* Данная книга отсутствует в библиотеке
PAGE 18