Учебно-методический комплекс по дисциплине программирование на языке высокого уровня (название)

Вид материалаУчебно-методический комплекс

Содержание


Program lab2
Методические рекомендации для преподавателей
String; å
Program; å
Подобный материал:
1   2   3

Задача 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. МЕТОДИКА ПРЕПОДАВАНИЯ УЧЕБНОЙ ДИСЦИПЛИНЫ


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

Выбор методов проведения занятий обусловлен учебными целями, содержанием учебного материала, временем, отводимым на занятия.

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

Теоретические знания, полученные студентами на лекциях и при самостоятельном изучении курса по литературным источникам, закрепляются при выполнении лабораторных и курсовой работы.


  1. Материалы текущего промежуточного и итогового контроля.


Тесты для проверки знаний студентов 4курса


1. Воспримет ли система Borland Pascal текст BEGIN END. ,

как законченную программу :

  1. a) да; Å

b) нет.

  1. Структура программы содержит описания разделов, типов, констант, переменных и другие :

a) до текста основного блока BEGIN END. Å

b) после текста основного блока BEGIN END.
  1. Переменная должна быть описана :

a) в разделе TYPE;

b) в разделе VAR. Å
  1. Написание ключевых слов языка программирования содержит :

a) только строчные буквы;

b) только прописные буквы;

c) произвольно. Å
  1. Раздел VAR содержит описание x : integer; можно ли в программе x присвоить значение :

a) 30000; Å

b) 33000.
  1. Переменные логического типа могут принимать только :

  1. одно значение;
  2. два значения; Å
  3. три значения.
  1. Длина идентификаторов переменных :

  1. ограничена; Å
  2. произвольна.
  1. Укажите, какой из идентификаторов является правильным :

  1. END;
  2. 1AX1;
  3. RK:L;
  4. F12. Å
  1. Пусть переменная x>0 вещественна. Синтаксис какого выражения верен :

  1. x3;
  2. exp(ln(3*x)); Å
  3. exp(log(3*x)).
  1. Какое описание двумерного массива в Паскале верно :

  1. A : array [1..4][1..4] of real;
  2. B : array [1..4,1..4] of real. Å
  1. Пусть переменная описана, как x : char; Какое присвоение верно :

  1. x := 'A'; Å
  2. x := B.
  1. Какой тип имеет величина '12345' :

  1. INTEGER;
  2. REAL;
  3. CHAR;
  4. STRING; Å
  5. BOOLEAN.
  1. Какой тип имеет величина FALSE :

  1. STRING;
  2. CHAR;
  3. BOOLEAN. Å
  1. Пусть x целочисленная переменная. Указать её оператор ввода :

  1. write(x:7);
  2. read(x). Å
  1. Пусть x вещественная переменная. Какой оператор верен :

  1. write(x:7:3); Å
  2. write(x:3:7).
  1. Укажите зарезервированное слово языка Паскаль :

  1. TEXT;
  2. PROGRAM; Å
  3. TEXT1.
  1. Встроенная процудура ASSIGN служит :

  1. для связывания файловой переменной с именем файла; Å
  2. для открытия файла.
  1. Встроенная процедура RESET :

  1. открывает файл для чтения; Å
  2. открывает файл для записи;
  3. закрывает файл.
  1. Обязательно ли все компоненты одного массива суть данные одного и того же типа :

  1. да; Å
  2. нет.
  1. Какой оператор верен :

  1. for i := 1 to 5 do x := 0; Å
  2. for i := 5 to 1 do x := 1;
  1. Чтобы в языке Паскаль в цикле выполнялось несколько операторов, их нужно заключить :

  1. в фигурные скобки;
  2. в операторные скобки вида begin end. Å
  1. Чтобы в языке Паскаль в условном операторе при справедливости некоторого условия выполнялись несколько операторов, их нужно заключить :

  1. в операторные скобки вида begin end; Å
  2. в фигурные скобки.
  1. Всегда ли заранее известно сколько раз выполняется циклический оператор с предусловием :

  1. всегда;
  2. не всегда. Å
  1. К какому типу операций относится операция OR :

  1. мультипликативные;
  2. аддитивные;
  3. отношения. Å
  1. Оператор IF A>0 THEN A := A + 1 ELSE A := A - 1; является оператором :

  1. перехода;
  2. выбора;
  3. условным; Å
  4. повторения.
  1. Какой из операторов является оператором повторения :

  1. IF A=0 THEN GOTO LB1;
  2. FOR I := 1 TO 10 DO Z := Z + 1; Å
  3. GOTO LAB2.
  1. Всегда ли циклический оператор с предусловием выполняется более одного раза :

  1. да;
  2. нет. Å
  1. Всегда ли циклический оператор с постусловием выполняется более одного раза :

  1. да;
  2. нет. Å
  1. Оператор выбора может анализировать число условий :

  1. одно;
  2. два;
  3. произвольное. Å
  1. К какому типу операторов относится оператор WHILE <условие> DO <оператор> :

  1. к операторам повторений; Å
  2. к условным операторам;
  3. к операторам выбора.
  1. Для каких типов в Паскале в порядке исключения возможно неявное преобразование типа в самом вычисляемом выражении :

  1. для типа INTEGER;
  2. для типа CHAR;
  3. для типа REAL. Å
  1. Какую величину возвращает символьная функция chr(b) :

  1. символ с ASCII кодом b; Å
  2. младший байт аргумента b;
  3. старший байт аргумента b.
  1. Всегда ли должно присутствовать служебное слово ELSE в условном операторе:

  1. да, всегда;
  2. нет, ELSE может отсутствовать. Å
  1. Допускает ли язык Паскаль вложенные циклы :

  1. да; Å
  2. нет.
  1. Где помещается в Паскале код процедур и функций :

  1. до основного блока BEGIN END; Å
  2. после основного блока BEGIN END.
  1. Число формальных и фактических параметров и их типы :

  1. совпадают; Å
  2. не совпадают.
  1. Фактические параметры процедур и функций определены :

  1. в разделе процедур и функций;
  2. в основном блоке BEGIN END. Å
  1. Любая процедура или функция является рекурсивной :

  1. да;
  2. нет. Å
  1. Локальные переменные процедур и функций определяются :

  1. при первом вызове процедуры или функции;
  2. при каждом вызове процедур и функций. Å
  1. Оператор REWRITE служит :

  1. для чтения из файла;
  2. для записи в файл. Å
  1. Файлы в программе имеют :

  1. только логическое имя;
  2. только физическое имя;
  3. логическое и физическое имена. Å
  1. Связь логических и физических имён файла осуществляется оператором :

  1. reset;
  2. assign. Å
  1. Выполнение программы в среде Borland Pascal осуществляется :

  1. нажатием клавиш Alt+X;
  2. нажатием клавиш Ctrl+F9. Å
  1. Просмотр результатов выполнения программы осуществляется :

  1. нажатием клавиш Alt+F9;

нажатием клавиш Alt+F5.


Тесты для проверки знаний студентов 5 курса



  1. Можно ли запустить модуль в среде Borland Pascal :

  1. на компиляцию; Å
  2. на выполнение.
  1. Может ли модуль в среде Borland Pascal иметь размер ;

  1. 70 КБ;
  2. 50 КБ. Å
  1. Какое наименьшее число разделов может иметь модуль :

  1. 1;
  2. 2; Å
  3. 3.
  1. Где расположен модуль в оперативной памяти :

  1. ниже основной программы; Å
  2. выше основной программы.
  1. Какое расширение имеет файл откомпилированного объектного модуля :

  1. .PAS;
  2. .TPU; Å
  3. .TPL.
  1. Модуль и основная программа размещены :

  1. в одном файле;
  2. в разных файлах. Å
  1. Каким оператором подключаются модули к основной программе :

  1. uses; Å
  2. forward.
  1. Пусть заголовок модуля unit A1, может ли модуль находиться в файле с именем :

  1. A2.pas;
  2. A1.pas. Å

  1. Должен ли указатель относиться к определённому типу переменной :

  1. да; Å
  2. нет.
  1. Какими процедурами выполняется размещение динамических переменных в памяти :

  1. New и GetMem; Å
  2. FreeMem и Dispose.
  1. Пусть x - адресная переменная. Какая функция задаёт смещение адреса :

  1. seg(x);
  2. ofs(x). Å
  1. Какая функция восстанавливает адрес по его сегменту и смещению :

  1. addr; Å
  2. ptr.
  1. Пусть pr - адресная переменная. Какое выражение определяет содержимое по этому адресу :

  1. pr;
  2. pr. Å
  1. Пусть x - адресная переменная. Разнятся ли значения x и Addr(x) :

  1. да; Å
  2. нет.
  1. Является ли динамическая структура список записью :

  1. да; Å
  2. нет.
  1. Каждый элемент динамической структуры данных типа список :

  1. содержит ссылку, связывающую его со следующим элементом; Å
  2. не содержит полей, имеющих тип указателя.
  1. Пусть u1 указатель на некоторую запись. Тогда оператор New(u1) создает указатель на новую запись :

  1. в статической памяти;
  2. в динамической памяти. Å
  1. Используется ли указатель Nil для обозначения конца списка :

  1. да; Å
  2. нет.
  1. Как освобождается динамическая память :

  1. используется оператор dispose; Å
  2. используется указатель Nil.
  1. Как устанавливается графический режим :

  1. указать только графический режим;
  2. использовать оператор InitGraph. Å
  1. Сколько аргументов имеет оператор инициализации InitGraph :

  1. 1;
  2. 2;
  3. 3. Å
  1. Цвет фона графического режима возвращается функцией :

  1. GetColor;
  2. GetBKColor. Å
  1. Объект в TurboPascal содержит :

  1. только данные;
  2. данные, а также процедуры и функции их обрабатывающие. Å
  1. Сколько основных принципов объектно-ориентированного программирования :

  1. 1;
  2. 2;
  3. 3. Å
  1. Согласно принципу инкапсуляции в объекте содержатся :

  1. только данные;
  2. данные, а также процедуры и функции. Å
  1. Согласно принципу наследования поля объекта-предка содержатся в полях объекта-потомка :

  1. да; Å
  2. нет.
  1. Полиморфный метод использует ключевое слово Virtual :

  1. перед объявлением в объекте;
  2. после объявления в объекте. Å
  1. Всегда ли нужно использовать в объекте конструктор и деструктор :

  1. да;
  2. нет. Å