Учебно-методический комплекс по дисциплине программирование на языке высокого уровня (название)
Вид материала | Учебно-методический комплекс |
СодержаниеProgram lab2 Методические рекомендации для преподавателей String; å Program; å |
- Р. Е. Алексеева кафедра ису программирование на языке высокого уровня методические, 57.65kb.
- Рабочая программа по дисциплине Программирование на языке высокого уровня для специальности, 182.97kb.
- Отчёт по курсовой работе по дисциплине программирование на языке высокого уровня Выполнил, 129.75kb.
- Рабочая учебная программа по дисциплине «Программирование на языке высокого уровня», 119.59kb.
- Отчёт по курсовой работе по дисциплине программирование на языке высокого уровня Выполнил, 210.25kb.
- Задания на курсовую работу по дисциплине программирование на языке высокого уровня, 165.55kb.
- Программа курса «Программирование на языке высокого уровня», 126.66kb.
- Учебно-методический комплекс по дисциплине «Алгоритмизация и программирование» для, 352.01kb.
- Гречкина П. В. «Программирование на языке высокого уровня», 168.82kb.
- Прокопенко Лариса Алексеевна к м. н должность доцент учебно-методический комплекс, 396.3kb.
Задача 2
Пусть матрица B находится по матрице A так же, как и в предыдущей задаче, но номер рисунка определяется цифрой младшего разряда суммы двух последних цифр учебного шифра, причем, решение должно использовать модуль, содержащий функ-цию, в которой вычисление соответствующих сумм содержит указатели и средства для работы с ними
Пример
Решить задачу с тем же условием, что и в задании согласно
п
A[i,j]
риведенному ниже pисунку.
Ниже следует текст основной пpогpаммы и модуля
PROGRAM LAB2;
uses mod2;
const LL=4; { Размеp матpицы }
var a,b : array[1..LL,1..LL] of real;
{ Исходная и pезультиpующая матpицы }
i,j : integer;
BEGIN
writeln('Введите элементы ',LL:1,'X',LL:1,
' матpицы по стpокам');
for i:=1 to LL do for j:=1 to LL do read(a[i,j]);
for i:=1 to LL do for j:=1 to LL do b[i,j]:=fun(i,j,@a);
writeln('Результиpующая матpица');
for i:=1 to LL do
begin
for j:=1 to LL do write(b[i,j]:7:3,' '); writeln;
end;
writeln;
END.
UNIT MOD2;
INTERFACE
const LL=4;
type preal=real;
function fun(p,q:integer;a:pointer):real;
IMPLEMENTATION
function fun;
var i,SI : integer; s : real; pr : preal;
begin
s:=0; SI:=SizeOf(real);
for i:=1 to q do
begin
pr:=ptr(seg(a),ofs(a)+((p-1)*LL+(i-1))*SI);
s:=s+pr;
end;
fun:=s;
end {fun};
END.
Введите элементы 4X4 матpицы по стpокам
1 2 3 4
1 2 3 4
0 0 0 0
0 0 0 0
Результиpующая матpица
1.000 3.000 6.000 10.000
1.000 3.000 6.000 10.000
0.000 0.000 0.000 0.000
0.000 0.000 0.000 0.000
Задача 3
Средствами объектно-ориентированного программирования (ООП) составить программу, которая в графическом режиме изобpажает фигуру, указанную в ваpианте, выбоp котоpого осуществляется согласно модулю разности двух последних цифp учебного шифpа, и по нажатию клавиш упpавления куpсоpом (влево, впpаво, ввеpх, вниз) пеpемещает ее на шаг в 5 пикселов в соответствующем напpавлении. Окончание pаботы пpогpаммы - по нажатию клавиши
Ваpиант 0
Веpхняя полуокpужность с диаметpом 100 (в пикселях) и центpом в точке (151,82).
Ваpиант 1
Квадpат, диагональ котоpого гоpизонтальна и pавна 100 пиксе-
лям с центpом в точке (151,82).
Ваpиант 2
Пpямоугольник с центpом в точке (151,82), стоpоны котоpого
веpтикальны и гоpизонтальны, а высота и шиpина соответственно
160 и 80 пиксел.
Ваpиант 3
Сегмент окpужности, начальный угол котоpой -п/3 pадиана,
а конечный +п/3, с веpтикальной хоpдой. Радиус окpужности
50 пиксел, а центp находится в точке (151,82).
Ваpиант 4
Пpавильный тpеугольник, одна из стоpон котоpого гоpизонта-
льна, а центp описанной вокpуг него окpужности находится в
точке (151,82).
Ваpиант 5
Фигура образована двумя горизонтальными хордами, отстоящими от центpа окpужности на половину pадиуса, и дугами, соединяющими два пpавых и соответственно два левых конца хоpд. Центp окpужности находится в точке (151,82) и ее pадиус pавен 50 пиксел.
Ваpиант 6
Фигуpа отличается от указанной в ваpианте 5 тем, что хоpды
веpтикальны, а дуги соединяют два веpхних и соответственно два
нижних конца хоpд.
Ваpиант 7
Пpавильный шестиугольник, одна из диагоналей котоpого веpтикальна. Центp описанной вокpуг него окpужности находится в точке (151,82), а ее pадиус pавен 50 пиксел.
Ваpиант 8
Правильная пятиконечная звезда, одна из стоpон котоpой гори-
зонтальна. Центp описанной вокpуг неё окpужности находится в точке (151,82) и её pадиус pавен 50 пиксел.
Ваpиант 9
Окpужность pадиуса 50 пиксел с центpом в точке (151,82) вместе с отpезком пpямой, котоpый касается своей сеpединой окpужности в ее веpхней точке.
Указание.
Использовать модуль Figures, текст Figures.pas пpиведен после
пpимеpа.
Пpимеp
Составить пpогpамму, использующую сpедства ООП, котоpая изобpажает дугу окpужности с центpом в точке (151,82) pадиуса 25 пиксел и угловым интеpвалом (0,п/2). Пpичем, по нажатию клавиши <влево> дуга пеpемещается на 5 пиксел влево. Оканчивает pаботу пpогpамма по нажатию клавиши
Ниже следует листинг пpогpаммы и pаспечатка модуля Figures.pas.
program Var_OOP;
uses Crt, DOS, Graph, Figures;
{ Модуль Figures.tpu получим компиляцией
(Опция Compile/Compile) файла Figures.pas. }
const
PathToDrivers = '\TP\BGI'; { Путь к графическому драйверу }
type
Fig = object (Circle) { Тип объекта Circle (окружнось)
описан в Figures.tpu, тип объекта Fig (четверть окpужности) -
его потомок }
procedure Show; virtual;
procedure Hide; virtual;
procedure Drag(DragBy:Integer); virtual;
end;
var
GraphDriver: Integer; {Номер графического редактора}
GraphMode: Integer; {Выбранный графический режим}
ErrorCode: Integer; { Код ошибки }
Fg: Fig; { Объект типа Fig }
{ Перекрываем процедуру показа окружности процедурой
показа четвеpти окружности }
procedure Fig.Show;
begin
Visible := True;
{ Нарисуем дугу четверти окружности с помощью
процедуры Arc из модуля Graph.tpu. }
Arc(X, Y, 0, 90, Radius);
end;
{ Перекрываем процедуру убирания окружности
процедурой убирания дуги четвеpти окружности }
procedure Fig.Hide;
var
TempColor: Word;
begin
TempColor := Graph.GetColor; {Запомним цвет линий}
Graph.SetColor(GetBkColor); { Установим цвет фона
в кач.цвета линий }
Visible := False;
{ Нарисуем дугу цветом фона и она исчезнет }
Arc(X, Y, 0, 90, Radius);
SetColor(TempColor); { Восстановим старый цвет линий }
end;
{ Пеpекpываем пpоцедуpу пеpемещений объекта }
procedure Fig.Drag(DragBy: Integer);
var
DeltaX, FigureX, FigureY: Integer;
function GetDelta1(var DeltaX: Integer): Boolean;
var
KeyChar: Char; Quit: Boolean;
begin
DeltaX := 0; { 0 - сохран.прежн.позицию }
GetDelta1 := True; { не нажимали Esc (не кончать пока
работу головной) }
repeat
KeyChar := ReadKey; { Первоначальн.чтен.кода символа }
Quit := True; { Цикл продолжается }
case Ord(KeyChar) of
0: begin { 0 - расширенный 2-байтовый код }
KeyChar := ReadKey; { Прочесть 2-й байт этого кода }
if Ord(KeyChar)=75 then DeltaX := 1
{ Нажали <влево> (убыван. X) }
else Quit := False; { Все прочие коды игнорировать }
end;
27: GetDelta1 := False; { Нажали Esc, захотели завершить
работу головной }
else Quit := False; { Все прочие нажатия игнорировать }
end; { case }
until Quit;
end;
begin
Show; FigureX := GetX; FigureY := GetY;
while GetDelta1(DeltaX) do
begin
FigureX := FigureX - (DeltaX * DragBy);
MoveTo(FigureX, FigureY);
end;
end;
{ Г о л о в н а я п р о г р а м м а }
begin
GraphDriver := Detect;
{ Определим оптимальный графический режим для
существующего в среде графического драйвера }
DetectGraph(GraphDriver, GraphMode);
{ Установим графический режим }
InitGraph(GraphDriver, GraphMode, PathToDrivers);
{ Все потомки объекта Point содержат виртуальные
методы и должны быть проинициализированы с помощью
констрактора }
Fg.Init(151, 82, 50); { начальная точка в 151,82
начальный радиус равен 50 }
Fg.Drag(5); { параметр - это шаг (число пикселов)
для метода drag }
CloseGraph; { Отменим графический режим }
end.
{ Текст к модулю Figures.pas }
unit Figures;
interface
uses Graph, Crt;
type
{ Объект "позиция" }
Location = object
X,Y: Integer;
procedure Init(InitX, InitY: Integer);
function GetX: Integer; function GetY: Integer;
end;
PointPtr = Point;
{ Объект "точка" - потомок объекта "позиция" }
Point = object (Location)
Visible: Boolean;
constructor Init(InitX, InitY: Integer);
destructor Done; virtual;
procedure Show; virtual;
procedure Hide; virtual;
function IsVisible: Boolean;
procedure MoveTo(NewX, NewY: Integer);
procedure Drag(DragBy: Integer); virtual;
end;
CirclePtr = Circle;
{ Объект "окружность" - потомок объекта "точка" }
Circle = object (Point)
Radius: Integer;
constructor Init(InitX,InitY:Integer;InitRadius:Integer);
procedure Show; virtual;
procedure Hide; virtual;
procedure Expand(ExpandBy: Integer); virtual;
procedure Contract(ContractBy: Integer); virtual;
end;
implementation
{ Процедура инициализации объекта "позиция" }
procedure Location.Init(InitX, InitY: Integer);
begin
X := InitX; Y := InitY;
end;
{ Координатные функции объекта "позиция" }
function Location.GetX: Integer;
begin
GetX := X;
end;
function Location.GetY: Integer;
begin
GetY := Y;
end;
{ Констрактор объекта "точка", необходим констрактор,
т.к. этот объект уже содержит виртуальные процедуры }
constructor Point.Init(InitX, InitY: Integer);
begin
Location.Init(InitX, InitY); Visible := False;
end;
{ Дестрактор объекта "точка", необходим дестрактор,
т.к. этот объект уже содержит виртуальные процедуры }
destructor Point.Done;
begin
Hide;
end;
{ Виртуальные процедуры показа и затирания "точки" }
procedure Point.Show;
begin
Visible := True; PutPixel(X, Y, GetColor);
end;
procedure Point.Hide;
begin
Visible := False; PutPixel(X, Y, GetBkColor);
end;
{ Функция, дающая сведения о том видима ли "точка" }
function Point.IsVisible: Boolean;
begin
IsVisible := Visible;
end;
{ Процедура переноса "точки" в положение (NewX,NewY) }
procedure Point.MoveTo(NewX, NewY: Integer);
begin
Hide; X := NewX; Y := NewY; Show;
end;
{ Функция, которая реагирует на нажатия клавиш,
вырабатавает значения DeltaX, DeltaY направлений
перемещения объекта вдоль осей x и y соотв-нно и
возвращает булево значение высказывания "Enter не
нажимали" }
function GetDelta(var DeltaX: Integer;
var DeltaY: Integer): Boolean;
var
KeyChar: Char; Quit: Boolean;
begin
DeltaX := 0; DeltaY := 0; { 0 - сохран.прежн.позицию }
GetDelta := True; { не нажимали Enter (не кончать пока
работу головной) }
repeat
KeyChar := ReadKey; { Первоначальн.чтен.кода символа }
Quit := True; { Цикл продолжается }
case Ord(KeyChar) of
0: begin { 0 - расширенный 2-байтовый код }
KeyChar := ReadKey; { Прочесть 2-й байт этого кода }
case Ord(KeyChar) of
72: DeltaY := -1; { Нажали <вверх> (убыван. Y) }
80: DeltaY := 1; { Нажали <вниз> (возрастан. Y) }
75: DeltaX := -1; { Нажали <влево> (убыван. X) }
77: DeltaX := 1; { Нажали <вправо> (возрастан. X) }
else Quit := False; { Все прочие коды игнорировать }
end; { case }
end;
13: GetDelta := False; { Нажали Enter, захотели завершить
работу головной }
else Quit := False; { Все прочие нажатия игнорировать }
end; { case }
until Quit;
end;
{ Процедура перемещения "точки" в направлении,
зависящем от нажатой клавиши, с шагом DragBy }
procedure Point.Drag(DragBy: Integer);
var
DeltaX, DeltaY, FigureX, FigureY: Integer;
begin
Show; FigureX := GetX; FigureY := GetY;
while GetDelta(DeltaX, DeltaY) do
begin
FigureX := FigureX + (DeltaX * DragBy);
FigureY := FigureY + (DeltaY * DragBy);
MoveTo(FigureX, FigureY);
end;
end;
{ Констрактор для объекта "окружность" }
constructor Circle.Init(InitX, InitY: Integer;
InitRadius: Integer);
begin
Point.Init(InitX, InitY); Radius := InitRadius;
end;
{ Виртуальные процедуры показа и затирания "окружности"
перекрывают одноименные процедуры для "точки" }
procedure Circle.Show;
begin
Visible := True;
Graph.Circle(X, Y, Radius); { Вызвали ф-ию рисования
окружности из модуля Graph }
end;
procedure Circle.Hide;
var
TempColor: Word;
begin
TempColor := Graph.GetColor;
Graph.SetColor(GetBkColor); { Цвет фона в качестве
цвета линий взять }
Visible := False;
Graph.Circle(X, Y, Radius); { Цветом фона по линии
нарисовать - значит, затереть эту линию }
Graph.SetColor(TempColor);
end;
{ Процедура расширения окружности, - увеличит ее
радиус на ExpandBy
и перерисует ее с прежним центром, но увеличенным радиусом }
procedure Circle.Expand(ExpandBy: Integer);
begin
Hide; Radius := Radius + ExpandBy;
if Radius < 0 then Radius := 0; Show;
end;
{ Аналогичная процедура сужения окружности }
procedure Circle.Contract(ContractBy: Integer);
begin
Expand(-ContractBy);
end;
{ Раздела инициализации нет }
end.
МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ДЛЯ ПРЕПОДАВАТЕЛЕЙ
1. МЕТОДИКА ПРЕПОДАВАНИЯ УЧЕБНОЙ ДИСЦИПЛИНЫ
На кафедре при преподавании дисциплины применяются следующие методы обучения студентов:
- устное изложение учебного материала на лекциях, сопровождаемое показом и демонстраций плакатов, слайдов, видеоматериалов;
- выполнение лабораторных работ студентами;
- самостоятельное изучение студентами учебного материала по рекомендованной литературе;
- выполнение контрольной работы студентами.
Выбор методов проведения занятий обусловлен учебными целями, содержанием учебного материала, временем, отводимым на занятия.
На лекциях излагаются лишь основные, имеющие принципиальное значение и наиболее трудные для понимания и усвоения теоретические и практические вопросы.
Теоретические знания, полученные студентами на лекциях и при самостоятельном изучении курса по литературным источникам, закрепляются при выполнении лабораторных и курсовой работы.
- Материалы текущего промежуточного и итогового контроля.
Тесты для проверки знаний студентов 4курса
1. Воспримет ли система Borland Pascal текст BEGIN END. ,
как законченную программу :
a) да; Å
b) нет.
Структура программы содержит описания разделов, типов, констант, переменных и другие :
a) до текста основного блока BEGIN END. Å
b) после текста основного блока BEGIN END.
- Переменная должна быть описана :
a) в разделе TYPE;
b) в разделе VAR. Å
- Написание ключевых слов языка программирования содержит :
a) только строчные буквы;
b) только прописные буквы;
c) произвольно. Å
- Раздел VAR содержит описание x : integer; можно ли в программе x присвоить значение :
a) 30000; Å
b) 33000.
- Переменные логического типа могут принимать только :
одно значение;
- два значения; Å
- три значения.
- Длина идентификаторов переменных :
ограничена; Å
- произвольна.
- Укажите, какой из идентификаторов является правильным :
END;
- 1AX1;
- RK:L;
- F12. Å
- Пусть переменная x>0 вещественна. Синтаксис какого выражения верен :
x3;
- exp(ln(3*x)); Å
- exp(log(3*x)).
- Какое описание двумерного массива в Паскале верно :
A : array [1..4][1..4] of real;
- B : array [1..4,1..4] of real. Å
- Пусть переменная описана, как x : char; Какое присвоение верно :
x := 'A'; Å
- x := B.
- Какой тип имеет величина '12345' :
INTEGER;
- REAL;
- CHAR;
- STRING; Å
- BOOLEAN.
- Какой тип имеет величина FALSE :
STRING;
- CHAR;
- BOOLEAN. Å
- Пусть x целочисленная переменная. Указать её оператор ввода :
write(x:7);
- read(x). Å
- Пусть x вещественная переменная. Какой оператор верен :
write(x:7:3); Å
- write(x:3:7).
- Укажите зарезервированное слово языка Паскаль :
TEXT;
- PROGRAM; Å
- TEXT1.
- Встроенная процудура ASSIGN служит :
для связывания файловой переменной с именем файла; Å
- для открытия файла.
- Встроенная процедура RESET :
открывает файл для чтения; Å
- открывает файл для записи;
- закрывает файл.
- Обязательно ли все компоненты одного массива суть данные одного и того же типа :
да; Å
- нет.
- Какой оператор верен :
for i := 1 to 5 do x := 0; Å
- for i := 5 to 1 do x := 1;
- Чтобы в языке Паскаль в цикле выполнялось несколько операторов, их нужно заключить :
в фигурные скобки;
- в операторные скобки вида begin end. Å
- Чтобы в языке Паскаль в условном операторе при справедливости некоторого условия выполнялись несколько операторов, их нужно заключить :
в операторные скобки вида begin end; Å
- в фигурные скобки.
- Всегда ли заранее известно сколько раз выполняется циклический оператор с предусловием :
всегда;
- не всегда. Å
- К какому типу операций относится операция OR :
мультипликативные;
- аддитивные;
- отношения. Å
- Оператор IF A>0 THEN A := A + 1 ELSE A := A - 1; является оператором :
перехода;
- выбора;
- условным; Å
- повторения.
- Какой из операторов является оператором повторения :
IF A=0 THEN GOTO LB1;
- FOR I := 1 TO 10 DO Z := Z + 1; Å
- GOTO LAB2.
- Всегда ли циклический оператор с предусловием выполняется более одного раза :
да;
- нет. Å
- Всегда ли циклический оператор с постусловием выполняется более одного раза :
да;
- нет. Å
- Оператор выбора может анализировать число условий :
одно;
- два;
- произвольное. Å
- К какому типу операторов относится оператор WHILE <условие> DO <оператор> :
к операторам повторений; Å
- к условным операторам;
- к операторам выбора.
- Для каких типов в Паскале в порядке исключения возможно неявное преобразование типа в самом вычисляемом выражении :
для типа INTEGER;
- для типа CHAR;
- для типа REAL. Å
- Какую величину возвращает символьная функция chr(b) :
символ с ASCII кодом b; Å
- младший байт аргумента b;
- старший байт аргумента b.
- Всегда ли должно присутствовать служебное слово ELSE в условном операторе:
да, всегда;
- нет, ELSE может отсутствовать. Å
- Допускает ли язык Паскаль вложенные циклы :
да; Å
- нет.
- Где помещается в Паскале код процедур и функций :
до основного блока BEGIN END; Å
- после основного блока BEGIN END.
- Число формальных и фактических параметров и их типы :
совпадают; Å
- не совпадают.
- Фактические параметры процедур и функций определены :
в разделе процедур и функций;
- в основном блоке BEGIN END. Å
- Любая процедура или функция является рекурсивной :
да;
- нет. Å
- Локальные переменные процедур и функций определяются :
при первом вызове процедуры или функции;
- при каждом вызове процедур и функций. Å
- Оператор REWRITE служит :
для чтения из файла;
- для записи в файл. Å
- Файлы в программе имеют :
только логическое имя;
- только физическое имя;
- логическое и физическое имена. Å
- Связь логических и физических имён файла осуществляется оператором :
reset;
- assign. Å
- Выполнение программы в среде Borland Pascal осуществляется :
нажатием клавиш Alt+X;
- нажатием клавиш Ctrl+F9. Å
- Просмотр результатов выполнения программы осуществляется :
нажатием клавиш Alt+F9;
нажатием клавиш Alt+F5.
Тесты для проверки знаний студентов 5 курса
Можно ли запустить модуль в среде Borland Pascal :
на компиляцию; Å
- на выполнение.
- Может ли модуль в среде Borland Pascal иметь размер ;
70 КБ;
- 50 КБ. Å
- Какое наименьшее число разделов может иметь модуль :
1;
- 2; Å
- 3.
- Где расположен модуль в оперативной памяти :
ниже основной программы; Å
- выше основной программы.
- Какое расширение имеет файл откомпилированного объектного модуля :
.PAS;
- .TPU; Å
- .TPL.
- Модуль и основная программа размещены :
в одном файле;
- в разных файлах. Å
- Каким оператором подключаются модули к основной программе :
uses; Å
- forward.
- Пусть заголовок модуля unit A1, может ли модуль находиться в файле с именем :
A2.pas;
- A1.pas. Å
Должен ли указатель относиться к определённому типу переменной :
да; Å
- нет.
- Какими процедурами выполняется размещение динамических переменных в памяти :
New и GetMem; Å
- FreeMem и Dispose.
- Пусть x - адресная переменная. Какая функция задаёт смещение адреса :
seg(x);
- ofs(x). Å
- Какая функция восстанавливает адрес по его сегменту и смещению :
addr; Å
- ptr.
- Пусть pr - адресная переменная. Какое выражение определяет содержимое по этому адресу :
pr;
- pr. Å
- Пусть x - адресная переменная. Разнятся ли значения x и Addr(x) :
да; Å
- нет.
- Является ли динамическая структура список записью :
да; Å
- нет.
- Каждый элемент динамической структуры данных типа список :
содержит ссылку, связывающую его со следующим элементом; Å
- не содержит полей, имеющих тип указателя.
- Пусть u1 указатель на некоторую запись. Тогда оператор New(u1) создает указатель на новую запись :
в статической памяти;
- в динамической памяти. Å
- Используется ли указатель Nil для обозначения конца списка :
да; Å
- нет.
- Как освобождается динамическая память :
используется оператор dispose; Å
- используется указатель Nil.
- Как устанавливается графический режим :
указать только графический режим;
- использовать оператор InitGraph. Å
- Сколько аргументов имеет оператор инициализации InitGraph :
1;
- 2;
- 3. Å
- Цвет фона графического режима возвращается функцией :
GetColor;
- GetBKColor. Å
- Объект в TurboPascal содержит :
только данные;
- данные, а также процедуры и функции их обрабатывающие. Å
- Сколько основных принципов объектно-ориентированного программирования :
1;
- 2;
- 3. Å
- Согласно принципу инкапсуляции в объекте содержатся :
только данные;
- данные, а также процедуры и функции. Å
- Согласно принципу наследования поля объекта-предка содержатся в полях объекта-потомка :
да; Å
- нет.
- Полиморфный метод использует ключевое слово Virtual :
перед объявлением в объекте;
- после объявления в объекте. Å
- Всегда ли нужно использовать в объекте конструктор и деструктор :
да;
- нет. Å