Программа практических занятий по курсу: "Информатика" (Pascal) ГГФ

Учебник по информатике: http://dssp.karelia.ru/web/tutorials.shtml

Занятие N1

Введение в язык программирования Pascal

1. Запуск Pascal (сделать поиск файла: turbo.exe) или Free Pascal из Пуск/Программы, создание окна с новой программой: F10, а затем File\NEW.

2. Структура языка Pascal - по примеру ниже.

3. Основные типы переменных в Pascal: Integer (целый), Real (дробный, с плавающей точкой), Boolean ( True (Истина), False (Ложь) ), String (строковый - набор символов). Описание констант, новых типов, переменных - по примеру, ниже. Объявление массива: Var Ar:Array[3..86] of Real; или двумерного массива: Var Array[0..10,4..8] Of Real;

4. Как начинается и заканчивается основная программа: Begin ... End.

5. Присваивание: X:=40, ввод с клавиатуры: read(x) или readln(x), вывод на экран: write(x) или writeln(x) - с переходом на следующую строку.

6. Несколько операторов помещаются внутрь следующей конструкции: Begin ... End (логические скобки в Pascal), операторы отделяются ";".

7. Как и зачем подключаются модули. Часто используемые модули Crt и Graph.

      ClrScr - очистка экрана {модуль CRT}.

8. Условия в Pascal: If условие Then ... Else ...

      условия можно объединять с помощью логических конструкций - OR ("ИЛИ") или AND ("И").

      Пример:

If (a>b) AND (x>10) Then WriteLn('a>b и x>10')
                    Else WriteLn('a<=b или x<=10');

9. Цикл FOR:

For...To, For...DownTo (зарезервированные слова)

Оператор For вызывает оператор, находящийся после слова Do, по одному разу для каждого значения в диапазоне от начального до конечного значений.

For переменная:=начальное To (или DownTo для уменьшения) конечное Do оператор

10. {Комментарий внутри этих скобок}

11. Правила оформления программ - смотреть на: zed.karelia.ru (/Студентам/Оформление программ/Правила)

      http://zed.karelia.ru/go.to/for.students/coding.rules/rules

12. Работа в оболочке Turbo (Borland) Pascal / Free Pascal:

   F10 - выход в Menu

   Ctrl+F1 - помощь по текущей команде (Help - русский)
   Ctrl+F9 - компиляция и запуск программы
   Ctrl+BreakBorland и Turbo Pascal) или Ctrl+C (во Free Pascal) - прервать программу
   Alt+F5 - посмотреть окно вывода
   Редактирование такое же, как и в Бейсике.

   Для копирования из внешних программ и обратно во Free Pascal использовать:
   Edit\Paste from Windows или Edit\Copy to Windows

13. Отличие языка Pascal от QBasic:

ОперацииPascalQBasic
Присвоение значения к переменнойA:=15; X:='Hello!';A=15: X$="Hello!"
Объявление массиваVar Arr:Array[0..99] of Real;DIM ARR(100)
Присвоение значения к элементу массиваArr[3]:=5;ARR(3)=5
Вывод на экранWriteLn('Hello!',X);PRINT "Hello!",X
Ввод с клавиатурыReadLn(n);INPUT N
Цикл For (10 повторений)For I:=1 To 10 Do операторFOR I=1 TO 10 оператор NEXT I
Очистка экранаClrScr;CLS
Вывод текста в указанную позициюGotoXY(X,Y); Write('Hello!');LOCATE Y,X: PRINT "Hello!"
Получить символ нажатой клавишиIf KeyPressed Then Ch:=ReadKey Else Ch:='' CH=INKEY$

Примеры:

Program Ex1_WriteLn_ReadLn;
Uses Crt, Graph;
Type MAS=Array[1..100] Of Integer;
Const X=40; Y=14; St='Hello!';
Var A,I:Integer;
    R:Real;
    MS:MAS;
    Ar1:Array[0..10,4..8] Of Real;
Begin
ClrScr;
WriteLn('Hello Student! ',St);
Write(Y,';');WriteLn(X);
ReadLn(A);
Write(A);
End.

For...To, For...DownTo (зарезервированные слова)

Оператор For вызывает оператор, находящийся после слова Do, по одному разу для каждого значения в диапазоне от начального до конечного значений.

For переменная:=начальное To (или DownTo для уменьшения) конечное Do оператор

Program Ex1_For;
Var I:Integer;
    MS:Array[1..100] Of Integer;
Begin
WriteLn('Vvedite chisla:');
For I:=1 To 5 Do ReadLn(MS[I]);
WriteLn('Chisla:');
For I:=1 To 5 Do WriteLn(MS[I]);
ReadLn
End.

Задание N1:

Подсчитать корни квадратного уравнения, с проверкой на существование корней и на существование только одного корня, соответственно вывести результат.

Задание N2:

Произвести сортировку чисел в массиве, расставив их по возрастанию. Результат вывести на экран.


Занятие N2

Трассировка программ:

   Меню Debug:

   Add breakpoint... - добавить точку останова программы (Breakpoint во Free Pascal)
   Breakpoints - выдает список установленных точек останова (Breakpoint List во Free Pascal)

   Evaluate/Modify... - Ctrl+F4 - вычислить/изменить значения (можно наблюдать за значениями
      переменных, изменять их значения и вычислять выражения с несколькими переменными)
   Add watch... - Ctrl+F7 - добавление переменных для наблюдения в отдельном окне наблюдений


   Горячие клавиши для трассировки:
   F7 - Trace - трассировка со входом в функции и процедуры
   F8 - Step - трассировка с пропуском функций и процедур
   Ctrl+F2 - сброс трассировки


Вывод в заданные координаты

GotoXY(X,Y); - помещение курсора в заданные координаты {модуль CRT}

GotoXY(X,Y); Write('Hello!'); - вывод текста в заданные координаты

Delay(1000); - задержка в ms {модуль CRT}

Пример:

Program Ex2_Helix;
Uses Crt;
Const X=40;Y=14;
Var I:Integer;
Begin
ClrScr;
For I:=0 To 200 Do
 Begin
   GotoXY(X+Round(Cos(I/9)*I/9),Y-Round(Sin(I/9)*I/15));
   Write('*');
   Delay(100);
 End;
ReadLn
End.

Задание N3:

Используя GotoXY(X,Y) для вывода текста в заданные координаты и с использованием циклов, нарисовать цифру, соответствующую номеру компьютера из "*", в заданных координатах.

Задание N4:

Используя еще один цикл заставить фигуру из задания N3 двигаться.

 

Занятие N3

Операторы цикла

For...To, For...DownTo (зарезервированные слова)

Оператор For вызывает оператор, находящийся после слова Do, по одному разу для каждого значения в диапазоне от начального до конечного значений.

For переменная:=начальное To (или DownTo для уменьшения) конечное Do оператор

 

While условие выполнения цикла Do оператор

Оператор после Do будет выполняться до тех пор, пока булево выражением является истинным (True).

 

Repeat
операторы
...
Until условие выхода из цикла

Операторы между словами Repeat и Until повторяются до тех пор, пока булево выражение является Истинным (True).


ReadKey - функция приостанавливает выполнение программы, ожидая нажатия клавиши, читает символ из буфера клавиатуры, соответствующий нажатой клавише {модуль Crt}

KeyPressed - функция определяет, была ли нажата клавиша на клавиатуре (True - нажата, False - нет) {модуль Crt}

If KeyPressed Then Ch:=ReadKey - позволяет проверять на нажатую клавишу только в случае нажатия клавиши, иначе продолжается выполнение программы.


Примеры:

Program Ex3_While;
Uses Crt;
Var Ch:Char;
Begin
Ch:=Chr(0);
While Ch<>'j' Do
 Begin
   Ch:=ReadKey;
   Write(Ch);
 End
End.


Program Ex3_Repeat;
Uses Crt;
Var Ch:Char;
Begin
Repeat
  Ch:=ReadKey;
  Write(Ch);
Until Ch='j'
End.

Задание N5:

Организовать движение фигуры из задания N3 по кругу с помощью циклов While или Repeat ... Until до нажатия клавиши, соответствующей номеру компьютера - при нажатии этой клавиши, должен происходить выход из программы. Для вычисления координат точки на окружности - использовать тригонометрические функции: Xi=R*COS(Ai), Yi=R*SIN(Ai) (где Ai это угол i-ой позиции точки, выраженный в радианах, а Xi,Yi, координаты этой точки).

 

Занятие N4

Работа со строками

Строки в Pascal имеют тип String и представляют из себя массив символов типа char, доступ к каждому из символов строки так же, как и к элементу массива, через [ ].

Пример:

Ch:=S[2]; {если S:='Hello!', то Ch='e'}

Str(X[:Width[:Decimals]]; var S:string) - Преобразовывает числовое значение X (Real, Integer) в строковое представление этого числа S. (Width - количество символов в результирующей строке, Decimals - количество знаков после запятой).

Пример:

Str(X:3:2,S);

 

Val(S; Var V; Var Er:Integer) - Преобразовывает строковое значение S, в его числовое представление V.

S - переменная строкового типа. Должна представлять последовательность символов, формирующих число. V - результат - переменная типа Real или Integer. Er - код ошибки - переменная типа Integer.

Пример:

Val(S,V,Er);

 

Pos(Substr:String; S:String) - Ищет подстроку в строке.

Параметры Substr и S - строковые выражения. Pos ищет первое вхождение строки Substr в строку S и возвращает целочисленное значение, которое является индексом первого символа Substr внутри S. Если строка Substr не найдена, то Pos возвращает нуль.

Пример:

n:=Pos(SubStr,S); {если SubStr:='e', а S:='Hello!', то n=2}

 

Delete(Var S:String; Index:Integer; Count:Integer) - Удаляет из строки ее часть.

Параметр S - переменная со строковым типом. Index и Count - целочисленные выражения. Delete удаляет Count символов из строки S, начиная с позиции Index. Если значение Index больше, чем длина S, то никакие символы не удаляются. Если Count определяет большее количество символов, чем остается в строке с позиции Index до конца строки, то удаляется остаток строки.

Пример:

Delete(S,3,2); {если S:='Hello!', то в результате выполнения этой команды S='Heo!'}


Insert(SubStr:String; Var S:String; Index:Integer) - Вставляет подстроку SubStr в строку S.

Параметр S - исходная строка, SubStr - подстрока, вставляемая в строку S. Index - позиция, с которой подстрока SubStr вставляется в строку S. Если в результате строка длиннее 255-и символов, то она усекается до 255 символов.

Пример:

Insert('Student',S,4); {если S:='Hello!', то в результате выполнения команды S='HelStudentlo!'}



Copy(S:String; Index:Integer; Count:Integer) - Возвращает подстроку строки (копирует часть строки).

S - исходная строка, Index - позиция, с которой начинается копирование, Count - количество копируемых символов.

Пример:

S2:=Copy(S,2,4); {если S:='Student', то в результате выполнения команды S2='tude'}


Length(S : String) - Возвращает динамическую длину строки (количество символов в строке).

Пример:

n:=Length(S); {если S:='Hello!', то в результате выполнения команды n='6'}

 

GetTime(Var Hour, Minute, Second, Sec100 : Word) - возвращает текущее время, установленное в операционной системе (Unit DOS)

Пример:

GetTime(HH, MM, SS, S100); {параметры: HH, MM, SS, S100 - типа Word}


Объединение строк:
Пример:

S:=S1+' Student '+S2; {если S1:='Hello', а S2:='PetrSU!', то S='Hello Student PetrSU!'}

Задание N6:

Заменить все символы "," на ";" в заданной с клавиатуры строке. Результат вывести на экран.

Задание N7:

Используя операторы работы со строками, преобразовать время, полученное с помощью процедуры GetTime (Unit DOS) в строковую переменную в формате: "Текущее время: HH-часов, MM-минут, SS-секунд" и вывести значение этой переменной в заданные координаты на экран.

 

Занятие N5

Задание N8:

Используя операторы работы со строками и вывода на экран текста в заданные координаты с помощью GotoXY, написать программу "бегущая строка". Строка вводится с клавиатуры и должна циклически двигаться справа налево.


Занятие N6

Подпрограммы. Процедуры и функции.


Procedure идентификатор(параметры);
Var описание локальных переменных;
Begin

End;

Function идентификатор(параметры):тип;
Var описание локальных переменных;
Begin
  идентификатор:=результат;
End;

Пример:

Program Ex6_Procedure_Function;
Uses Crt;
Var R:Real;
    n,X1,Y1:Integer;

Procedure WriteXY(Var X,Y:Integer;M:Real);
Begin
 GotoXY(X,Y); Write(M);
 X:=WhereX;
 Y:=WhereY;
End;

Function XStepN(X:Real;N:Integer):Real;
Var I:Integer;
      Y:Real;
Begin
Y:=1;
 For I:=1 To N Do Y:=Y*X;
 XStepN:=Y;
End;

Begin
 X1:=1; Y1:=5;
 R:=XStepN(3,4); WriteXY(X1,Y1,R);
 R:=XStepN(2,3); WriteXY(X1,Y1,R);
End.

Задание N9:

Переделать задание N8 так, чтобы вращение "бегущей строки" (сдвиг на один символ) осуществлялось в процедуре. Пример вызова процедуры: ShiftStr(S) .

Задание N10:

Организовать процедуры рисующие цифры от '0' до '9' в заданных координатах (левый верхний угол цифры), в текстовом режиме (подобно заданию N3) и выполнить их вызов в основной программе так, чтобы получилось какое-то число. Пример вызова процедуры: Number0(X,Y); Number9(X,Y); .


Занятие N7

Оператор выбора Case

Оператор выбора Case состоит из выражения (селектора) и списка операторов, каждый из которых выполнится в определенном случае.

Case выражение Of
  вариант: оператор;
  ...
  вариант: оператор;
Else оператор
End

Часть "Else" является необязательной.

"вариант" состоит из одной или большего количества констант или диапазонов, разделенных запятыми.

Примеры:

Program Ex7_Case1;
Uses Crt;
Var Ch:Char;
Begin
Repeat
 Ch:=ReadKey;
 Case Ch Of
   'A'..'Z', 'a'..'z': WriteLn('Letter');
   '0'..'9'          : WriteLn('Numeric');
   '+', '-', '*', '/': WriteLn('Operator');
  Else WriteLn('Special symbol')
 End;
Until Ch='q'
End.

Program Ex7_Case2;
Uses Crt;
Var Ch:Char;
Begin
Repeat
  Ch:=ReadKey;
  Case Ord(Ch) Of
    72:WriteLn('Up');
    77:WriteLn('Right');
    80:WriteLn('Down');
    75:WriteLn('Left');
  End;
Until Ord(Ch)=27
End.


Задание N11:

Организовать процедуру, которой в качестве параметров подаются координаты вывода и строка, состоящая из цифр, которые нужно вывести. С помощью этой процедуры, используя оператор выбора Case, необходимо сделать вывод этой строки цифр, цифрами из задания N10. Пример вызова процедуры: BigNumb(X,Y,'60627943158'); .

 

Занятие N8

Генератор случайных чисел

Random(Range) - возвращает случайное число.

Если параметр Range не определен, то результатом будет случайное число типа Real в диапазоне 0 <= X < 1.

Если параметр Range определен, то результатом будет случайное число в диапазоне 0 <= X < Range.

Пример:

Write(Random);

Write(Random(100));

Randomize - Инициализирует встроенный генератор случайных чисел с произвольным значением (полученным из системных часов).

Задание N12:

Написать программу "Хранитель экрана". Организовать вывод текущего времени числами из задания N11, при этом необходимо добавить процедуру, выводящую разделитель часов, минут и секунд ":". Время должно периодически выводиться в произвольные координаты экрана. Выход из программы должен происходить при нажатии на любую клавишу.

Задание N12a:

Сделать презентацию по программе N12 в MS PowerPoint (при создании презентации руководствоваться следующим описанием Lab_N03.doc). Для подготовки презентации нужно выслать себе на почту текст программы N12, а также скриншоты работы этой программы. На слайдах презентации должны быть представлены:
- части текста программы, выполняющие определенные функции (отдельные процедуры, части основной программы);
- диаграмма, отображающая в качестве столбцов - количество строк в каждой процедуре программы;
- с помощью автофигур нарисованная блок-схема программы;
- эффекты анимации;
- навигация по слайдам.
Подготовить презентацию к следующему занятию (выслать себе на почту, чтобы можно было скачать и продемонстрировать ее на занятии).


Занятие N9

Работа с файлами

Assign(Fil, FileName); - процедура, назначает файловой переменной имя внешнего файла.

Параметр Fil - переменная файлового типа - File (например: File of Integer) или Text. Параметр FileName - тип String, состоит из пути и имени файла: Примеры имен файла: 'FileName.txt' или 'C:\BP\FileName.txt'.

Close(Fil); - закрывает ранее открытый файл.

 

Procedure Reset(Var Fil :File [; Recsize :Word]); - открывает существующий файл.

Параметр Fil - файловая переменная любого файлового типа - File (например: File of Integer) или Text.

Параметр RecSize - необязательный параметр, который может быть определен только, если Fil - нетипизированный файл. В этом случае, RecSize определяет размер блока, который нужно использовать при передаче данных. Если RecSize опущен, принят заданный по умолчанию размер блока в 128 байт.

Пример:

Reset(Fil); {открывает существующий файл (для чтения из него) }

 

Procedure ReWrite(Var Fil :File [; Recsize :Word]); - создает и открывает новый файл.

Пример:

ReWrite(Fil); {создает и открывает новый файл (для записи в него) }

Append(Fil); - процедура, открывает существующий файл для продолжения записи в файл.


Пример считывания и записи данных в файл:

ReadLn(Fil,s); {считывает из файла строку в переменную s}
WriteLn(Fil,s); {записывает в файл содержимое строки s}



EOF(Fil) - возвращает True если достигнут конец файла и False в противном случае.

Not - операция отрицания или инверсия.

В режиме {$I-} функция IOResult вернет 0, если операция была успешна, иначе, она возвращает отличный от нуля код ошибки.


Пример:
перед запуском примера, необходимо создать простой текстовый файл, состоящий из нескольких строк, английскими буквами (например: фамилии или имена на английском), имя файла должно быть до 8 символов на английском и без использования специальных символов, расширение у файла должно быть .txt
Program Ex9_File_SortString;
Var Fil:Text;
Nam:String;
SA:Array [0..100] of String[60];
I,N:Integer;
Begin
N:=0;
ReadLn(Nam); Assign(Fil,Nam); Reset(Fil);
While Not EOF(Fil) Do
  Begin ReadLn(Fil,SA[N]); N:=N+1 End;
Close(Fil);
For I:=0 To N-1 Do WriteLn(SA[I]);
Assign(Fil,'namesort.txt'); ReWrite(Fil);
For I:=N-1 DownTo 0 Do WriteLn(Fil,SA[I]);
Close(Fil)
End.

Задание N13

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

Задание N14

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

 

Занятие N10

Работа с графикой
(для работы с графикой в Pascal под Windows 7 и под Remote Desktop использовать Free Pascal или DOSBox)
Архиватор RAR

При использовании операторов ввода с клавиатуры в графическом окне во Free Pascal, вместо модуля CRT необходимо использовать WinCRT.

для установки DOSBox, сначала:
- скачайте DOSBox и архиватор RAR, нажав на соответствующее имя в заголовке этого занятия,
- затем откройте папку с закаченными файлами (DOSBox-0.65.rar и rar.exe) и скорпируйте их в свою домашнюю папку,
- затем запустите Far Manager, перейдите в свою домашнюю папку и откроете ее так, чтобы она была на обоих панелях Far Manager,
- зайдите внутрь архива - DOSBox-0.65.rar (для этого поместите на него курсор и нажмите Enter) и скопируйте папку DOSBox-0.65 на противоположную панель (используя F5)
- зайдите внутрь этой РАЗАРХИВИРОВАННОЙ папки и скопируйте из нее папку VC на диск C:\ (в корень диска),
- скопируйте с сайта пример работы с графикой (тот, что ниже по тексту после "Пример:")
- используя Far Manager создайте в своей домашней папке новый файл (Shift + F4) с именем gr10.pas ,
- запустите эмулятор DOS - (DOSBox.exe) из разархивированной папки - DOSBox-0.65 (при этом должен запуститься и VC - аналог Far Manager), по умолчанию в DOSBox сочетание Ctrl + F9 используется для выхода из DOSBox - удалите это сочетание клавиш и сохраните!
- запустите из DOSBox - Pascal (C:\BP\BIN\turbo.exe)
- установите настройки пути для модуля graph.tpu , для этого зайдите в Options/Directories и там, где Unit directories установите путь к модулям (C:\BP\UNITS),
- откройте сохраненный пример gr10.pas и запустите его (если на экране появятся различные графические фигуры, значит настройки сделаны верно!),
- закройте все окна - так чтобы осталось только одно чистое окно для написания программы (для закрытия окон щелкните мышкой, на зеленом квадратике в левом - верхнем углу окна с программой или другом каком-то окне, которое необходимо закрыть; для создания нового окна выберете File/New),
- для сохранения установленных путей и настроек Pascal с чистым окном зайдите в Options и выберете Save.

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

Модуль Graph:

Uses Graph - подключение графического модуля

InitGraph(GD,GM,Pat) - Инициализирует графическую систему и переводит видеокарту в графический режим, соответствующий параметрам GD-"графический драйвер" и GM-"графический режим", информация по этим параметрам - в разделе "Помощь" по модулю Graph - "Константы и типы GRAPH.TPU".

CloseGraph - Закрывает графическую систему.

SetColor(Color) - Устанавливает текущий цвет, используя палитру.

SetBkColor(Color) - Устанавливает текущий цвет фона.

Line(X1,Y1,X2,Y2) - Рисует линию от точки с координатами (X1, Y1) до точки с координатами (X2, Y2).

MoveTo(150,150) - Перемещает текущий указатель (CP) в точку с координатами (X, Y).

LineTo(X,Y) - Рисует линию от текущего указателя (CP) до (X,Y).

Rectangle(X1,Y1,X2,Y2) - Рисует прямоугольник, используя текущий тип и цвет линии.

Circle(X,Y,R) - Рисует окружность текущим цветом, используя точку (X, Y) как центр.

SetFillPattern(Pattern,10) - Устанавливает определяемый пользователем шаблон закраски.

SetFillStyle(Pattern,13) - Устанавливает цвет и стиль закраски.

Bar(110,80,150,95) - Рисует закрашенный прямоугольник, используя текущие стиль и цвет закраски.

Bar3D(80,30,120,60,10,TopOn) - Рисует параллелепипед, используя текущий стиль и цвет закраски.

OutTextXY(X,Y,TextString) - Отображает TextString в координатах (X, Y), текущим цветом.

PutPixel(X,Y,Color) - Ставит точку в координатах (X, Y), цветом Color.

GetMaxX и GetMaxY - Возвращают текущее разрешение по горизонтали: GetMaxX и вертикали: GetMaxY.

ClearDevice - Очищает графический экран, используя цвет фона, установленный SetBkColor.

 

Пример:

Program Ex10_Graph;
Uses Crt, Dos, Graph;
Const Pat='C:\BP\BGI';
      Patt:FillPatternType=(128,64,32,16,8,4,2,1);
Var GD,GM:Integer;
Begin
GD:=VGA; GM:=VGAHi; {For VGALo}
InitGraph(GD,GM,Pat);
SetColor(Green); Line(0,0,150,150);
MoveTo(150,150); LineTo(170,90);
SetColor(Red); Circle(50,50,20);
SetColor(Yellow); Rectangle(40,20,70,70);
SetFillPattern(Patt,10);	{SetFillStyle(1,13);}
Bar(110,80,150,95);
Bar3D(80,30,120,60,10,TopOn);	{TopOff}
ReadLn;
CloseGraph
End.

Задание N15

Написать процедуру рисования машинки в заданных координатах, с помощью линий, кружков и прямоугольников. Пример вызова процедуры: CarNissanPatrol(10,10) .

Задание N16

Заставить двигаться машинку из задания N15 от края, до края экрана. При достижении края экрана, заставить ее двигаться в обратном направлении, выход из программы по нажатию клавиши "q".

Задание N17

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

 

Занятие N11

Генерация звуковых сигналов

Пример:

Program Ex11_Sound;
Uses Crt;
Var I:Integer;
Begin
For I:=0 To 80 Do
 Begin
   Sound(200);	{Звук с частотой 200 Гц}
   Delay(1000);	{На 200 миллисекунд}
   NoSound;	{Выключаем динамик}
 End;
End.


Задание N18

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



Отображение графиков функций

Задание N19

Отобразить график функции: y=a*x*x+b*x+c (в заданном диапазоне значений [X1,X2] и с заданным шагом dX), где a, b, c, константы, заданные произвольно с клавиатуры. Начало диапазона X1 должно соответствовать левому краю экрана, в конец диапазона X2 правому краю экрана. Отдельные точки графика должны быть соединены линиями. Перед рисованием графика отобразить и подписать оси X и Y.

 

Занятие N12

Работа с записями

Пример:

Program Ex12_Record;
Uses Crt;
Type
  rec = record
         FirstName:String;
         LastName :String;
         Age      :Byte;
  end;
Var
  Baza: Array[0..100] Of rec;
  I: Integer;
begin
For I:=0 To 4 Do
Begin
  Write('FirstName='); ReadLn(Baza[I].FirstName);
  Write('LastName='); ReadLn(Baza[I].LastName);
  Write('Age='); ReadLn(Baza[I].Age);
End;
WriteLn('FirstName LastName Age');
For I:=0 To 4 Do
  WriteLn(Baza[I].FirstName,' ',Baza[I].LastName,' ',Baza[I].Age);
End.

Задание N20

Написать программу для воспроизведения рисунка, записанного в специальном формате в файле с расширением "vec". Рисунок поместить в центр экрана. Под рисунком вывести имя файла, включая путь.

Графическое изображение представляет собой набор графических примитивов: точек, отрезков, прямоугольников и эллипсов различных цветов. Прямоугольники и эллипсы могут иметь заливку. Изображение имеет 16 цветов (коды цветов 0-15).

Файл содержит записи, каждая из которых состоит из фиксированного набора полей, описывающих графический примитив. Все координаты указываются в пикселях относительно левого верхнего угла изображения, имеющего координаты (0,0). Оси направлены: 0X - вправо, 0Y - вниз. Графические примитивы отображаются относительно текущей позиции курсора, которая может быть изменена специальной командой.

Формат записи:

  1. Поле Operation типа Byte. Содержит код операции в соответствии с Табл.1.
  2. Поле X типа Integer. Содержит значение координаты по оси X.
  3. Поле Y типа Integer. Содержит значение координаты по оси Y.
  4. Поле Color типа Byte. Поле содержит цвет графического примитива. Это битовое поле, т.е. в нем имеют значение отдельные биты и группы битов. Обычно биты нумеруются с нуля (младший бит). Бит считается установленным, если содержит 1, и сброшенным (не установленным), если содержит 0. Для выделения нужной группы битов используют битовые маски и операцию логического умножения AND, а также операции логического сдвига вправо (SHR) и влево (SHL).

Таблица 1. Содержимое поля Operation.

Код операции Вид операции
0

Запись содержит указание размера рисунка в пикселях (в полях X и Y). Если 7 бит поля Color установлен, то рисунок имеет заливку фона, код цвета которого указан в битах 0-3.

1

Указание позиции курсора (X,Y) относительно левого верхнего угла рисунка. Поле Color не несет полезной информации.

2

Рисование пикселя в позиции (X,Y). Цвет пикселя задан в младших 4-х битах (0-3) поля Color.

3

Рисование отрезка из текущей позиции курсора в точку (X,Y). Цвет задан в битах 0-3 поля Color. Позиция курсора изменяется на (X,Y).

4

Рисование прямоугольника, два диагональных угла которого заданы текущей позицией курсора и точкой (X,Y). Цвет задан в битах (0-3) поля Color. Признак заливки - бит 7 установлен в 1.

5

Рисование эллипса с центром в текущей позиции курсора, и радиусами, заданными в полях X и Y. Цвет задан в битах (0-3) поля Color. Признак заливки - бит 7 установлен в 1.

6

Заливка области, ограниченной контуром, начиная с точки (X,Y). Цвет контура задан в битах 0-3, а цвет заливки - в битах 4-7 поля Color.

Примечания:

1. Запись с кодом 0 является первой и единственной в файле.

2. Позиция курсора изменяется на (X,Y) только в операциях с кодами 1 и 3.

Кодировка цвета:

Цвет Код
Black0
Blue1
Green2
Cyan3
Red4
Magenta5
Brown6
LightGray7
DarkGray8
LightBlue9
LightGreen10
LightCyan11
LightRed12
LightMagenta13
Yellow14
White15

 

Литература

1. Учебные и методические пособия [Электронный ресурс] - Режим доступа: http://dssp.karelia.ru/web/tutorials.shtml
2. С.В. Мациевский, С.А. Ишанов, С.В. Клевцур, ИНФОРМАТИКА / Учебное пособие / Издательство: Калининградского государственного университета.- 2003г.