программирование на языке turbo-pascal. организация циклов

advertisement
Программирование на языке
Turbo Pascal
Материалы к урокам
ТЕМА
№5:
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ TURBO-PASCAL. ОРГАНИЗАЦИЯ ЦИКЛОВ.
ОПЕРАТОРЫ
ЦИКЛОВ.
СОСТАВЛЕНИЕ
ПРОГРАММ
С
ИСПОЛЬЗОВАНИЕ
ОПЕРАТОРОВ ЦИКЛА.
ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
ЦЕЛИ И ЗАДАЧИ: Знакомство с операторами цикла языка Turbo-Pascal. Выработка навыков работы в
Turbo-Pascal. Решение практических задач с использованием операторов цикла.
ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
Учащиеся должны знать:
 Что такое цикл;
 Три разновидности операторов цикла;
 В чем отличия операторов цикла с предварительным и последующим условием;
 Какой тип должна имеет переменная цикла с параметром;
 Когда в операторах цикла и ветвления используются операторные скобки;
 Принцип организации движения графических фигур.
Учащиеся должны уметь:
 Использовать циклы при составлении программ;
 Правильно составлять и использовать условия в циклах WHILE или REPEAT;
 Составлять программы с использование операторов цикла.
ПЛАН-СОДЕРЖАНИЕ УРОКА
1. Цикл
Цикл – команда исполнителю повторить многократно указанную последовательность команд
алгоритмического языка или, другими словами, многократно повторяющаяся часть программы.
Существует три разновидности оператора цикла.
2. Оператор цикла с параметром.
Используется, когда известно, сколько раз выполняется циклическая часть программы.
for <параметр цикла>:=<начало> to/downto <конец> do <оператор>;
для
до
делать
параметр цикла - числовая переменная типа integer
начало, конец - арифметическое выражение
to - используется когда начало меньше конца
downto - используется когда начало больше конца
оператор - тело цикла, любой оператор, в том числе и составной
Принцип работы:
 Параметру присваивается значение начало
 Выполняется оператор - тело цикла.
 Затем параметр сравнивается с концом.
 Если параметр больше/меньше конца, то начинает работать следующий оператор за оператором цикла, в
противном случае к параметру прибавляется/отнимается единица.
 Снова выполняется оператор.
 Так продолжается пока параметр не станет больше/меньше конца.
3. Цикл с предварительным условием
while <условие> do <оператор>;
пока
делать
условие - логическое выражение
оператор - любой оператор, в том числе и составной.
Принцип работы:
 Проверяется истинность условия
 Если условие истинно выполняется оператор
 Цикл работает, пока условие не станет ложным.
4. Цикл с последующим условием
repeat <операторы> until <условие>
повторять
до тех пор пока
условие - логическое выражение
операторы - любое количество любых операторов, в том числе и составной.
2
Принцип работы:
 Выполняются все операторы между repeat и until
 Проверяется ложность условия
 Цикл работает, пока условие не станет истинным.
5.





Особенности и отличия операторов цикла
Вход в цикл возможен только через его начало
Переменные оператора должны быть определены до входа в цикл
Необходимо предусмотреть выход из цикла, чтобы он не повторялся бесконечно.
Оператор while repeat может ни разу не выполнится
оператор repeat обязательно выполниться хотя бы раз
6. Примеры программ
Проверить, является ли целое число
простым.
Uses crt;
Var n{введенное число},i:integer;
Begin
Readln(n);
For i:=2 to n-1 do
If n mod i =0 then begin writeln(n,’не простое’);readkey; halt;end;
writeln (n, ‘простое’);
readkey;
end.
Написать программу, которая выводит Uses crt;
на экран табл. умножения, например Var m,n,p:integer;
на 7.
Begin
For i:=1 to 10 do
Writeln(7,’*’,I:2,’=’,7*I:2);
Readkey; end.
Написать программу, которая выводит uses crt;
табличные значения функции у=x+2. var x,y:real;
Диапазон изменения аргумента от – 4 begin;
clrscr;
до 4, приращение аргумента - 0.5
writeln('y':20,' : ','x':5);
writeln('
--------------');
x:=-4;
repeat
y:=abs(x)+2;
writeln(y:20:1,' : ',x:5:1);
x:=x+0.5;
until x>4;
readkey;
end.
Написать программу, которая
определяет максимальное число из
введенной последовательности
положительных чисел. Завершение
ввода – 0.
Uses crt;
Var a{очередное число},
m{макс.число}:integer;
Begin M:=0;
Repeat
Writeln(‘введи число’);Readln(a);
If a>m then m:=a;
Until a=0;
Writeln(‘max=’,m);
Readkey; end.
uses crt;
Имеются или не имеются среди чисел
label 1;
cos(i3)sin(in), i=1,…,n, числа меньше
var i,n:integer;
0,0001. Если имеются, то выводить
begin
clrscr;
«есть», если нет – «нет»
writeln ('Введите n'); readln (n);
for i:=1 to n do
if cos(i*i*i)*sin(i*n)<0.0001 then begin
writeln ('есть');goto 1;
end;
writeln ('нет');
1:readkey;end.
3
Написать программу, которая
позволяет найти наибольший общий
делитель двух целых чисел
Написать программу, которая
позволяет найти наименьшее общее
кратное двух целых чисел
program nod;
uses crt;
var n1,n2,nod: integer;
begin clrscr;
writeln ('Введите два целых числа');
readln (n1,n2);
while n1<>n2 do
if n1>n2 then n1:=n1-n2 else n2:=n2-n1;
nod:=n1;
writeln 'Наибольший общий делитель -',nod);
readkey;end.
program nok1;
uses crt;
var nok,n1,n2:byte;i:word;
begin
clrscr;
writeln('введите два числа'); readln(n1,n2);
nok:=1;
for i:=n1*n2 downto 2 do
if (n1 mod i=0) and (n2 mod i=0) then nok:=i;
write('NOK -',nok);
readkey;end.
7. По тексту готовой программы составить условие задачи:
1) program pt1;
2) program pt1;
uses crt;
uses crt;
var a,i,j:integer;
var a,i,j:integer;
begin
begin
clrscr;
clrscr;
randomize;
randomize;
for i:=1 to 15 do
for j:=1 to 10 do
begin
begin
a:=trunc((random(7))*5)-10;
a:=trunc((random(9))*5)-20;
write(a:4);
write(a:4);
end;
end;
readln;
readln;
end.
end.
3) program pt1;
4) program pt1;
uses crt;
uses crt;
var a,i,j:integer;
var a,i,j:integer;
begin
begin
clrscr;
clrscr;
randomize;
randomize;
for i:=1 to 15 do
for i:=1 to 4 do
begin
begin
a:=trunc((random(11))*5)-20;
for j:=1 to 5 do
write(a:4);
begin
end;
a:=trunc((random(7))*5)-10;
readln;
write(a:4);
end._
end;
writeln;
end;
readln;
end._
4
5) program pt1;
uses crt;
var a,i,j:integer;
begin
clrscr; randomize;
for i:=1 to 5 do begin
for j:=1 to 5 do begin
a:=trunc((random(9))*5)-20; write(a:4);
end;
writeln;
end;
readln; end.
8. Ответить на вопросы
 Сколько раз будут выполнены инструкции между Begin и End?
For i:=j to j+1 do
Begin
…
end;
 Чему будет равен x после выполнения инструкций?
X:=0;
For i:= -5 to 0 do
N:=i*i;
X:=X+N;
 Что будет выведено на экран в результате выполнения инструкций?
N:=5;
X:=0;
For i:=1 to N do X:=i;
Writeln(X);
 Сколько звездочек будет выведено на экран в результате выполнения инструкций?
For i:=1 to 5 do
For j:=1 to 5 write (‘*’);
ТЕМА
№6:
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ TURBO-PASCAL. ПРОЦЕДУРЫ. ФУНКЦИИ.
СОСТАВЛЕНИЕ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР И ФУНКЦИЙ. РЕКУРСИЯ.
ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
ЦЕЛИ И ЗАДАЧИ: Дать основные понятия подпрограмм (процедур и функций). Познакомить с видами
формальных параметров: параметры-значения, параметры-переменные. Научить различать фактические и
формальные параметры. Знакомство с понятием рекурсии. Выработка навыков составления программ с
использованием процедур и функций.
ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
Учащиеся должны знать:
 Что такое подпрограмма;
 Что такое процедура;
 Для чего используются процедуры;
 Что такое формальные и фактические параметры;
 Чем отличается задание параметров-значений от параметров-переменных;
 В каком месте программы ставится описание процедур;
 Как вызывается процедура;
 Структуру процедуры.
 Что такое функция;
 Чем отличаются процедуры от функций,
 Для чего используются функции;
 Чем отличается заголовочная строка функции от заголовочной строки процедуры;
 В каком месте программы ставится описание функции;
 Как вызывается функция;
 Структуру функции;
5
 Что такое рекурсия;
 Для чего и как используется опережающее описание подпрограммы.
Учащиеся должны уметь:
 Правильно описывать процедуры и функции;
 Правильно вызывать процедуры и функции;
 Различать формальные и фактические параметры;
 Правильно описывать параметры-значения и параметры
 Различать формальные и фактические параметры;
 Использовать простейшие рекурсии при составлении программ
ПЛАН-СОДЕРЖАНИЕ УРОКА
Подпрограммы.
Автономная часть программы, с помощью которой можно производить одни и те же вычисления, с разными
исходными данными и в различных местах программы, многократно, называется подпрограммой. Виды
подпрограмм: процедуры и функции.
Процедуры.
Процедура (подпрограмма) – многократно повторяющаяся часть программы, оформленная отдельно от
основной программы. Место расположения процедур в программах - Раздел описаний, за описание
переменных.
Преимущества использования процедур - уменьшение объем программы, сокращение времени на отладку.
Принцип работы процедуры:
Выполнение программы начинается с выполнения основной части программы. Как только появляется
необходимость в выполнении процедуры, она вызывается по имени с передачей входных данных. После
выполнения процедура передает в основную часть программы выходных данных (результатов), в то место,
откуда была вызвана процедура.
Затем продолжается выполнение основной части программы.
Процедура оформляется подобно основной программе:
Раздел описаний основной программы
Заголовок процедуры
Описываются
формальные
Procedure имя
параметры
(список параметров);
Раздел описаний
label …;
Var …;
Раздел операторов процедуры Begin
…
end;
Описание функций
Раздел операторов основной программы
Procedure имя (формальные параметры);
Раздел описаний
Begin
Раздел операторов
End;
Все переменные, представленные в разделе описаний основной программы называются глобальными. Они
действуют как в разделе операторов основной программы, так и в любой подпрограмме.
Параметры (переменные), определяемые при описании процедуры называются формальными.
Параметры (переменные), задаваемые при вызове процедуры называются фактическими.
Формальные параметры (переменные, описываемые в процедуре) делятся на параметры - значения и
параметры - переменные
Параметры-значения – передают информацию только в процедуру (входные), описываются как переменные
с указанием типа (без зарезервированного слова Var).
Параметры-переменные – передают информацию, как в процедуру, так и обратно (выходные), их описание
начинается со слова Var, затем следует список переменных с указанием типа.
Пример:
Procedure sterline (len: integer); - параметры-значения.
Procedure stl (l: integer, Var n integer); - параметры-значения и параметры – переменные.
Формальные параметра описываются только в заголовке процедуры. Формальные параметры никогда не
описываются в разделе описаний процедуры. Если в процедуре используются переменные, отличные от
формальных параметров, их необходимо обязательно описать в разделе описания процедуры.
6
Вызов процедуры подобно специальным операторам происходит по имени с указанием фактических
параметров, например:
stl (а, n);
Имена фактических параметров могут не совпадать с именами формальных параметров, но они должны
соответствовать друг другу по типу. Формальные параметры описываются в разделе описания основной
программы и до вызова процедуры должны получить значения.
Пример использования процедур:
Написать программу, которая выводит на экран строку, состоящую из заданного числа
звездочек. Использовать процедуру.
Uses crt;
Var n: integer;
Procedure sterline (var len: integer);
Var i:integer;
Begin
For i:=1 to len do
Write (‘*’);
End;
Begin
Write(‘Введите количество звездочек’); Readln(n);
Sterline (n);
Readln; End.
Функции.
Функция, как и процедура, может содержать несколько операторов, несколько входных (и только)
параметров, но результат получается только один. Этот единственный результат обозначается именем
функции и передается в основную программу.
В общем виде функция записывается в разделе описания основной программы следующим образом:
Function имя (формальные параметры):тип;
Раздел описаний
Begin
Операторы
Имя:= …
End;
Поскольку результат обозначается именем функции, то после формальных параметров указывается тип
функции, который должен совпадать с типом результата вычислений. В конце описания функции имени
функции обязательно присваивается какое-то значение. Вызывается функция по ее имени с указанием
фактических параметров. Функция может использоваться в операторах присваивания, условных операторах
и т.п. Например, Res:=Compare(x1,x2);
Пример использования функций:
Написать программу, которая с помощью функции сравнивает два целых числа и выводит
результат сравнения в виде одного из знаков: >,<,=
Uses crt;
Var x1,x2:real; res:char;
Function Compare (a,b: real):char;
Begin
If a>b then Compare:=’>’ else if a<b then Compare:=’<’ else Compare:=’=’;
End;
Begin
Writeln (‘Введите числа’);
Readln(x1,x2);
Res:=Compare(x1,x2);
Writeln(x1:6:2, res,x2:6:2);
Readln; end.
Рекурсия.
Рекурсия – это вывоз подпрограммой
(процедурой или функцией) самой себя.
Рассмотрим построение рекурсивной функции на примере вычисления N!. При правильно организованной
рекурсивной подпрограммы осуществляется многократный переход от некоторого текущего уровня
7
организации алгоритма к низшему уровню последовательно до тех пор, пока не будет получено тривиальное
решение поставленной задачи.
PROGRAM DEMO1;
USES CRT;
VAR M:BYTE;
FUNCTION FAKT(N:BYTE):LONGINT;
BEGIN
IF N=1 THEN FAKT:=1
ELSE FAKT:=FAKT(N-1)*N;
END;
BEGIN
CLRSCR;
WRITE('N-');READLN(M);
WRITELN('N!=',FAKT(M));
READKEY;
END.
В нашем примере происходит так: в операторе печати вызывается функция FAKT с параметрам N, которая в
свою очередь вызывает функцию FAKT с параметрам N-1, и так далее, пока не вызывается FAKT(1). Тогда
это процесс останавливается, затем происходить извлечение результата в обратном порядке.
Это хорошо видно на следующем примере программы:
Текст программы:
PROGRAM DEMO2;
USES CRT;
VAR CH: WORD;
PROCEDURE WRITEA;
BEGIN
CH:=CH+1;
WRITELN('НАЧАЛО',CH);
IF CH<4 THEN WRITEA;
WRITELN(' КОНЕЦ',CH);
CH:=CH-1;
END;
BEGIN
CLRSCR;
CH:=0;
WRITEA;
READKEY;
END.
Результат работы программы:
НАЧАЛО
НАЧАЛО
НАЧАЛО
НАЧАЛО
КОНЕЦ
КОНЕЦ
КОНЕЦ
КОНЕЦ
1
2
3
4
4
3
2
1
Рекурсивная форма организации алгоритма обычно выглядит изящнее итерационной и дает более компактный текст программы, но при выполнении, как правили, медленнее и может вызвать переполнение
стека.
Стек – это специальная область памяти (конечное число ячеек), где сохраняется адреса возврата (адрес
вызывающей программы, используется для передачи управления вызывающей программе). Стеки
используются так же для передачи параметров в процедуры (для обычных параметров в стек заносятся их
значения, для параметров-переменных – их адреса), размер стек ограничен. Стек можно представить в виде
стопки книг. Если стопка достигла максимального размера, то при добавлении новой книги сверху – нижняя
книга должна быть убрана.
Нужно обязательно отслеживать в программе наполнение стека, то есть не допускать зацикливания
рекурсии.
Рекурсивный вызов может быть косвенным. В этом случае программа обращается к себе опосредованно,
путем вызова другой программы, в которой содержится обращение к первой. При использовании такого
подхода нужно использовать опережающее описание. Опережающее описание заключается в том, что
объявляется лишь заголовок процедуры, а ее тело заменяется директивой FORWARD. После этого можно в
другой процедуре использовать обращение к ней – ведь компилятор уже может правильным образом
организовать ее вызов. Обратите внимание: тело второй процедуры описывается после первой и начинается
заголовком, в котором уже не указываются описанные ранее формальные параметры.
Пример:
PROCEDURE B( J:BYTE);FORWARD; {тело процедуры заменено директивой FORWARD }
PROCUDURE A( I:BYTE);
BEGIN
…
B(I);
…
END;
PROCEDURE B;
8
BEGIN
…
A(J);
…
END;
Примеры программ с процедурами и функциями:
При составлении программ обязательно использовать процедуры или функцию.
 Найти разность двух факториалов F=m! – k!, используя функцию.
Uses crt;
Fact:=P;
Var F,m,k:integer;
End;
Function Fact(n:integer):integer;
Begin
Var P,i:integer;
Read (M,K);
Begin
F:=Fact(m) – Fact(K);
P;=1;
Writeln (‘F=’,F:5);
For i:=2 to n do
repeat until keypressed
P;=P*i;
End.
 Написать программу «Бегущие огни» с использованием процедуры рисования окружности.
uses crt,graph;
circle(x,200,15);
var gd,gm,x:integer;
setfillstyle(1,3);
begin
floodfill(x,200,0);
gd:=detect;
x:=x+40;
initgraph(gd,gm,'');
until x>600;
x:=20;
repeat
repeat
setcolor(4);
repeat
circle(x,200,15);
setcolor(4);
delay(8000);
circle(x,200,15);
setcolor(0);
setfillstyle(1,3);
circle(x,200,15);
floodfill(x,200,4);
x:=x-40;
delay(8000);
until x<20;
setcolor(0);
repeat until keypressed; end.
Примеры программ с использованием рекурсий:
Вычислить Xn:
Подсчитать сумму N чисел Фибоначчи (1,1,2,3,5,8,13,..):
PROGRAM DEMO3;
USES CRT;
VAR X1,X2:
WORD;I,M:BYTE;S:LONGINT;
FUNCTION XN(X,N:BYTE):LONGINT;
BEGIN
IF N=0 THEN XN:=1
ELSE XN:=XN(X,N-1)*X;
END;
BEGIN
CLRSCR;
WRITE('X,N-');READLN(X1,M);
WRITELN('XN-',XN(X1,M));
READKEY;
END.
PROGRAM DEMO4;
USES CRT;
VAR X1,X2: WORD;I,M:BYTE;S:LONGINT;
FUNCTION FIB(N:BYTE):LONGINT;
BEGIN
IF N=1 THEN FIB:=1;
IF N=2 THEN FIB:=1;
IF N>=3 THEN FIB:=FIB(N-1)+FIB(N-2);
END;
BEGIN CLRSCR;
WRITE('N-');READLN(M); S:=0;
FOR I:=1 TO M DO
S:=S+FIB(I);
WRITELN('S-',S);
READKEY;
END.
Написать рекурсивную функцию вычисления суммы 1+2+3+4+5+…+N:
PROGRAM DEMO5;
USES CRT;
VAR M:WORD;
FUNNCTION SUM(N:WORD):LONGINT;
BEGIN
IF N=1 THEN SUM:=1 ELSE SUM:=SUM(N-1)+N;
END;
BEGIN
WRITE(‘N-‘);READLN(M);
WRITELN(‘СУММА -’,SUM(M));
READKEY;END.
9
Используя рекурсивную функцию получить подобную фигуру:
1 вариант (простая
рекурсивная форма)
PROGRAM DEMO6;
USES CRT,GRAPH;
VAR X,Y: WORD;I,K,M,N:BYTE;
GD,GM:INTEGER;
PROCEDURE LINT(X,Y,N,M:WORD);
BEGIN
LINETO(X+N,Y);
LINETO(X+N,Y+N);
LINETO(X+M,Y+N);
LINETO(X+M,Y+M);
X:=X+M;Y:=Y+M;
N:=N-2*M;
K:=K+1;
IF K<5 THEN LINT(X,Y,N,M);
END;
BEGIN
GD:=DETECT;
INITGRAPH(GD,GM,'');
LINT(0,0,100,10);
READKEY;
END.
2 вариант (рекурсивная форма с
опережающим описанием)
PROGRAM DEMO7;
USES CRT,GRAPH;
VAR X,Y:
WORD;I,K,M,N:BYTE;
GD,GM:INTEGER;
PROCEDURE
LNT(X,Y,N,M:WORD); forward;
PROCEDURE
LINT(X,Y,N,M:WORD);
BEGIN
for k:=1 to 5 do begin
lnt(x,y,n,m);
X:=X+M;Y:=Y+M;
N:=N-2*M;
end;
END;
procedure lnt;
begin
LINETO(X+N,Y);
LINETO(X+N,Y+N);
LINETO(X+M,Y+N);
LINETO(X+M,Y+M);
end;
BEGIN
GD:=DETECT;
INITGRAPH(GD,GM,'');
LINT(0,0,100,10);
READKEY;
ТЕМА №7: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ TURBO-PASCAL. ОСНОВНЫЕ ГРАФИЧЕСКИЕ
ОПЕРАЦИИ ЯЗЫКА TURBO PASCAL. СОСТАВЛЕНИЕ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ
ОПЕРАТОРОВ ГРАФИКИ.
ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
ЦЕЛИ И ЗАДАЧИ: Знакомство с операторами графики языка Turbo-Pascal. Выработка навыков работы в
Turbo-Pascal. Решение практических задач с использованием операторов графики.
ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
Учащиеся должны знать:
 Что такое графический режим;
 Систему координат графического языка Turbo-Pascal;
 Какие модули содержат графические процедуры (нестандартные операторы);
 Основные операторы графики;
 Как инициализировать и закрывать графический режим.
Учащиеся должны уметь:
 Задавать координаты точек на экране монитора;
 Грамотно инициализировать графический режим;
 Правильно использовать операторы графики;
 Составлять программы с использование операторов графики;
ПЛАН-СОДЕРЖАНИЕ УРОКА
Модули Turbo Pascal. Модуль crt. Модуль graph.
В языке Turbo Pascal основная часть процедур и функций находится в так называемых модулях:

Модуль crt, содержащий процедуры и функции, организующие связь с консолью компьютера.
Консолью компьютера называется его монитор и клавиатура.

Модуль graph, в котором находятся процедуры и функции, организующие работу в графическом
режиме.
Работа Turbo Pascal может быть организована в двух режимах (экранах).

Текстовой экран, в котором могут отображаться только символы (25 строк по 80 символов в
каждой).
10

Графический экран, в котором изображение представляется в виде точек, именуемых пикселями.
Размер этого экрана зависит от типа монитора, чаще всего 640х480 пикселов. Нулевая точка системы
координат находится в верхнем левом углу экрана. Это связано с тем, что в процессе создания
изображения на экране, электронный луч в кинескопе движется так же, как мы читаем текст – из верхнего
левого угла слева направо, и сверху вниз. Координаты точек могут принимать только целые значения.
Инициализация графического режима.
Для инициализации графического режима необходимо подключение модуля graph, кроме того объявить
две целочисленные переменные gd, gm, которы используются при инициализации режима. Собственно
инициализация происходит при записи в первую из переменных номер драйвера, соответствующий
автоматически определенному типу монитора (gd:=detect;). А так же при выполнении процедуры
initgraph(gd,gm,'');. При этом в переменную gm записывается номер графического режима, а ''
обозначает, что поиск графического драйвера надо проводить в текущем каталоге. Пример
инициализации графического режима:
uses crt, graph; {подключение модулей}
var gd,gm:integer;
begin
clrscr;
gd:=detect; initgraph(gd,gm,'');
..................
При использовании графического режима, процедуры ввода/вывода текстового режима (write, writeln и
read, readln) не работают. Перед их использование сначала производится закрытие графического режима с
помощью процедуры closegraph.
Кроме того, для задания графического режима можно использовать технические характеристики, которые
можно самим определить. Для определения типа вашего монитора (функция getdrivername),
максимальных значений его координат по осям x (функция getmaxx) и y (функция getmaxy), а также
максимального номера цвета (функция getmaxcolor) можно использовать следующую программу:
program monitor;
uses crt, graph; {подключение модулей}
var gd,gm,xmax,ymax,maxcolor:integer;
begin
clrscr;
gd:=detect; initgraph(gd,gm,'');
{автоматическое определение типа монитора и запись номера драйвера в переменную gd;
переменной gm присваивается номер соответствующего графического режима, а два
апострофа означают, что поиск графического драйвера надо производить в текущем
каталоге}
xmax:=getmaxx; ymax:=getmaxy; maxcolor:=getmaxcolor;
closegraph; {Закрытие графического экрана}
writeln ('xmax=',xmax,' ymax=',ymax,' maxcolor=',maxcolor,' ',getdrivername);
repeat until keypressed; end.
Для монитора типа SVGA программа выдаст строку:
xmax=639 ymax=479 maxcolor=15 EGAVGA
Графические процедуры.
 Процедура setcolor (c) производит установку текущего цвета, процедура setbkcolor (c) производит
установку цвета фона. c – номер или наименование цвета.
0 – black
4 – red
8 – darkgray
12 – lightred
1 – blue
5 – magenta
9 – lightblue
13 – lightmagenta
2 – green
6 – brown
10 – lightgreen
14 – yellow
3 – cyan
7 – lightgray
11 – lightcyan
15 – white
 Процедура setfillstyle (n, c) устанавливает тип заливки для замкнутой фигуры. n – номер или
наименование шаблона заполнения, c – цвет заполнения.
11













Процедура floodfill (x, y, c) после установления типа заливки производит заполнение замкнутой
фигуры. x, y – координаты какой-либо точки внутри этой фигуры, c – цвет границы заполняемой
фигуры.
0
emptyfill
сплошная заливка текущим цветом фона
1
solidfill
сплошная заливка текущим цветом вывода
2
linefill
штриховка горизонтальными линиями --------
3
ltslashfill
штриховка линиями вида ////
4
slashfill
штриховка утолщёнными линиями вида ////
5
bkslashfill
штриховка линиями вида \\\\
6
ltbkslashfill
штриховка утолщёнными линиями вида \\\\
7
hatchfill
заливка узором вида ++++++
8
xhatchfill
заливка узором вида ххххххх
9
interleavefill
частые пересекающиеся штрихи
10
widedotfill
заливка узором – редкие точки
11
closedotfill
заливка узором – частые точки
12
userfill
шаблон пользователя
Процедура setlinestyle (s, p, t) позволяет изменить стиль линии. S – номер или наименование стиля,
p – задаёт шаблон линии только в том случае, если параметр s=4, в остальных случаях p=0, t – задаёт
толщину линии и может иметь следующие значения: normwidth=1 (нормальная толщина – установлена
по умолчанию); thickwidth=3 (утолщённая линия).
0
solidln
сплошная линия – установлена по умолчанию
1
dottedln
точечная линия
2
centerln
штрих-пунктирная линия
3
dashedln
пунктирная линия
4
userbitln
Линия, заданная пользователем
Процедура line (x1, y1, x2,y2) проводит текущим цветом отрезок прямой между точками с
координатами x1, y1 и x2, y2.
Процедура putpixel (x, y, c) рисует точку (пиксель) с координатами x, y цвета c.
Процедура getpixel (x, y) позволяет определить цвет точки с координатами x, y.
Процедура circle (x, y, r) рисует текущим цветом окружность с центром в точке имеющей координаты
x, y и радиусом r.
Процедура arc (x, y, nangl, kangl, r) рисует дугу окружности с радиусом r, с центром в точке
имеющей координаты x, y, начальный угол дуги nangl, заданный в градусах, конечный угол дуги kangl,
заданный в градусах (с отсчётом против часовой стрелки!!!).
Процедура pieslice (x, y, nangl, kangl, r) используя те же параметры, что и процедура arc рисует
текущим цветом сектор круга, закрашенный в текущем стиле. Чувствительна к масштабированию по
осям.
Процедура ellipse (x, y, nangl, kangl, rx, ry) рисует текущим цветом дугу эллипса, с центром в
точке имеющей координаты x, y. Начальный угол дуги - nangl, заданный в градусах, конечный угол
дуги - kangl, заданный в градусах, rx радиус эллипса по оси x, ry радиус - по оси y (если nangl=0, а
kangl=360, рисуется эллипс).
Процедура sector (x, y, nangl, kangl, rx, ry) используя те же параметры, что и процедура ellipse
рисует текущим цветом сектор эллипса, закрашенный в текущем стиле.
Процедура rectangle (x1, y1, x2, y2) рисует текущим цветом прямоугольник с координатами
верхнего левого угла x1, y1 и координатами правого нижнего угла x2, y2, при этом x1<=x2 и y1<=y2.
Процедура bar (x1, y1, x2, y2) рисует текущим цветом прямоугольник, закрашенным в текущем
стиле.
Процедура bar3d (x1, y1, x2, y2, d, v) рисует текущим цветом параллелепипед, закрашенный в
текущем стиле. Координаты задают левый верхний и правый нижний углы передней грани. Ширина
боковой d грани исчисляется числом пикселей по горизонтали. Если задают выражение v=true, верхняя
12
грань «видна», иначе она не вычерчивается (случай, когда параллелепипед «накрыт» другим
изображением).
 Процедура lineto (x, y) проводит текущим цветом линию из текущей позиции в точку с заданными
координатами, перемещая в неё и текущую позицию.
 Процедура moveto (x, y) устанавливает новые координаты текущей позиции.
 Процедуры getx и gety выдают текущее положение курсора по координатам x и y соответственно.
 Процедура linerel (dx, dy) изменяя на величину dx и dy координату x и y текущей позиции, проводит
текущим цветом линию между старой и новой позицией.
 Процедура moverel (dx, dy) изменяет координаты x и y текущей позиции на величину dx и dy
соответственно.
 Процедура outtextxy (x, y, ‘text’) для вывода текста в графическом режиме, процедура перемещает
текущую позицию в точку с координатами x, y и выводит строку text, кроме того, можно вместо
текстовойконстанты использовать строковую переменную.
 Процедура settextstyle (sh, n, r) позволяет манипулировать стилем текста. Sh (шрифт) - имеет
значения 0..4 (0 – матричный шрифт; 1 – триплекс; 2 – мелкий; 3 – прямой; 4 – готический, 1 – 4 для
кириллицы не поставляются!!!). N (направление) - имеет значение 0 – текст идёт слева направо и 1 –
текст идёт снизу вверх, по вертикали, символы «положены на бок». R (размер шрифта) - коэффициент
увеличения 1..10.
 Задержка изображения на экране на доли секунды delay(5000);
 Очистка графического экрана Cleardevice;
Примеры операторов графики:
- Линия - line(200,200,400,400);
- Круг - circle(500,300,50);
- Прямоугольник rectangle - (100,100,600,400)
- Квадрат - bar(50,50,200,100);
- Куб - bar3d(200,200,250,300,40,topon);
- Эллипс - ellipse(500,100,0,360,10,30);
- Изменение цвета фона - setbkcolor(0);
- Изменение цвета переднего плана - setcolor(5);
- Точка - putpixel(100,100,14);
- Текст в графическом режиме - outtextxy(300,300,'ura');
- Заливка замкнутого контура:
setfillstyle(1,14);
floodfill(500,300,15);
Принципы организации движения графических фигур:
Можно оживить изображение на экране, если воспользоваться принципами анимации: нарисовать, стереть
(нарисовать цветом фона), нарисовать в новом месте и т.д.
Примеры программ:
 Составить программу Абстракция, которая выводит на экран всевозможные графические фигуры.
program graphsb;
uses graph, crt;
var gd,gm,c:integer;
begin
gd:=detect;
initgraph (gd,gm,'');
setbkcolor (1); {Устанавливает цвет фона (1 - blue)}
setcolor (14); {Устанавливает текущий цвет (14 - yellow)}
circle (100,120,50); {Рисует окружность}
putpixel (100,120,14); {Рисует точку}
c:=getpixel (100,120); {Узнаёт цвет пикселя, в указанной координате}
setcolor (14);
line (100,150,200,200); {Рисует отрезок}
setcolor (1);
rectangle (250,100,350,70); {Рисует прямоугольник}
13
setfillstyle (5,14); floodfill (270,75,1); {Заливка прямоугольника по шаблону}
bar (400,400,500,350); {Рисует прямоугольник, закрашенный в текущем стиле}
setcolor (10); setlinestyle (0,0,3);
bar3d (100,300,200,250,15,true); {Рисует параллелепипед, закрашенный в текущем стиле}
setcolor (10); setlinestyle (1,0,3);
line (150,100,320,170); {Рисует утолщённую точечную линию}
setcolor (10); setlinestyle (0,0,3);
arc (300,350,0,175,70); {Рисует дугу окружности. Линия утолщённая.}
setcolor (9); setlinestyle (0,0,0);
ellipse (490,200,0,360,50,100); {Рисует эллипс. Нормальная толщина линии}
setfillstyle (7,14); floodfill (490,200,9);{Заливка эллипса по шаблону}
setcolor (12); setlinestyle (0,0,3);
ellipse (380,200,25,150,50,100); {Рисует дугу эллипса. Линия утолщённая}
sector (330,190,220,340,100,30); {Рисует закрашенный сектор эллипса}
setcolor (9);
pieslice (300,450,30,170,50); {Рисует круговой сектор}
setfillstyle (3,14); floodfill (300,445,9); {Заливка сектора}
setcolor (10);
lineto (550,450); {Проводит отрезок из текущей позиции в точку с координатами 550,450}
moveto (120,400); {Устанавливает курсор в точку с координатами 120,400}
setcolor (12);
lineto (350,250);
setcolor (14); settextstyle (4,0,4); {Стиль текста}
outtextxy (250,25,'Abstraction'); {Вывод текста}
repeat until keypressed;
closegraph; {Закрытие графического экрана}
clrscr; window (5,5,70,100); {Создание текстового окна}
textbackground (9); textcolor (15);
clrscr; writeln ('Цвет пикселя -',c);
writeln ('До свидания! Для завершения работы нажмите Enter.');
readln; end.
 Составить программу, позволяющую текст, набранный обычным шрифтом, спроецировать в центр
экрана и заменить каждый пиксель кругом
program graphtext;
uses crt,graph;
var gd,gm,i,j:integer;
begin
gd:=detect;
initgraph (gd,gm,''); {Инициализирует графическую систему}
outtextxy (1,1,'Mama'); {Выводит строку с позиции, имеющей координаты 1,1}
for i:=1 to 100 do
for j:=1 to 100 do
begin
if getpixel (i,j)=15 then
begin
setcolor (10);
circle (100+i*12,100+j*12,5);
setfillstyle (9,9); floodfill (100+i*12,100+j*12,10);
delay (700);
end;
end;
14
repeat until keypressed;
closegraph; {Закрытие графического экрана}
end.
Дополнительная информация.
Вывод на экран ломаной линии или закрашенного контура
DrawPoly(<количество точек>,<массив координат точек>); - выводит не экран в графическом режиме
ломаную, соединяющую заданные координатами точки.
FillPoly(<количество точек>,<массив координат точек>); - выводит на экран закрашенный многоугольник,
координаты вершин которого задаются в массиве.
Массив координат точек – одномерный массив типа Integer, где нечетные элементы содержат
горизонтальные элементы (Х), а четные – вертикальные (У).
Количество точек определяет, сколько пар элементов массива необходимо использовать при выводе
ломаной линии (многоугольника).
Чтобы оператором DrawPoly вывести многоугольник требуется за точку начала и конца ломаной линии
принять определенную точку, координаты которой повторить в начале и конце массива. При этом
количество точек должно равняться количеству вершин многоугольника плюс один.
Пример использования операторов:
Uses crt,graph;
const a:array[1..6]of integer=(100,100,300,200,400,400);{задание координат массива как констант}
var gd,gm,i:integer;{описание переменных для объявления графического режима и параметра цикла}
begin
gd:=detect;
{объявления графического режима }
initgraph(gd,gm,'');
setcolor(5); {задание цвета линий}
setfillstyle(1,2);
fillpoly(3,a);{рисование закрашенного треугольника}
for i:=1 to 6 do{цикл для изменения массива с координатами точек}
if i mod 2 =0 then a[i]:=a[i]-80 else a[i]:=a[i]+100;
drawpoly(3,a);{рисование угла}
repeat until keypressed;
end.
ТЕМА №8: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ TURBO-PASCAL. МАССИВЫ, ОДНОМЕРНЫЕ И
ВДУХМЕРНЫЕ. СОСТАВЛЕНИЕ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ МАССИВОВ.
ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
ЦЕЛИ И ЗАДАЧИ: Знакомство с понятием массив и способами их обработки. Познакомиться с базовыми
алгоритмами работы с массивами. Выработка навыков составления программ с использованием массивов.
ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
Учащиеся должны знать:
 Что такое массив;
 Какие бывают массивы;
 Чем отличаются одномерные и двухмерные массивы;
 Как описываются массивы в программе;
 Как обратиться к заданному элементу массива;
15
 Алгоритм нахождения максимума или минимума среди элементов массива;
 Простейший алгоритм сортировки элементов одномерного массива.
Учащиеся должны уметь:
 Заполнять массивы с клавиатуры или случайными числами, произвольным или заданным образом;
 Распечатывать одномерные массивы в виде строки;
 Распечатывать двухмерные массивы в виде таблиц;
 Находить заданные элементы массива;
 Заменять заданные элементы массива или производить с ними арифметические операции;
 Менять местами элементы массива;
 Находить сумму, произведение или экстремальные элементы в массиве;
 Сортировать одномерные массивы;
 Составлять программы с использованием массивов.
ПЛАН-СОДЕРЖАНИЕ УРОКА
Основные понятия
В Паскале, кроме простых типов данных (integer, real, char и т.д.), имеются и сложные типы. К ним
относятся массивы.
Массив (array, от французского – сплошной) – это область памяти, в которой размещается совокупность
конечного числа данных одного типа с одним именем. Каждый элемент такой совокупности обозначается
именем массива с индексом (номером элемента в массиве).
Элемент массива – отдельная переменная, входящая в массив;
Индекс (index) – это числовая константа или целочисленное арифметическое выражение (частный случай целочисленная переменная), которым снабжаются элементы массива, чтобы отличать их друг от друга.
Индекс элемента массива – номер элемента в массиве.
Особенность массивов заключается в том, что все элементы массива являются данными одного типа
(возможно и структурированного). При назначении массиву имени соблюдаются те же требования, какие
предъявляются к именам переменных простых типов.
В зависимости от количества используемых индексов, массивы могут быть одномерные (строка),
двухмерные (таблица), трехмерные и т.д.
a11 a12 …
a1n
а1
а2
а3 ... аn
Одномерный массив
a21
a22
…
a2n
…
…
…
…
am1
am2
…
amn
Двухмерный массив
В одномерном массиве для указания местоположения элемента достаточно одного индекса,
В двухмерном массиве – два индекса, для строк и граф.
Размерность массива определяется количеством индексов.
Размер массива – диапазон изменения индексов массива.
Размер одномерного массива – количество элементов, которое содержит массив.
Размер двухмерного массива - количество элементов в сроках и графах таблицы и т.д.
Описание массивов:
Тип массива
Описание массива
1 способ
2 способ
одномерный: Type t=array[1..n] of тип;
Var a: array[1..n] of тип;
Var a:t;
двухмерный
Type р=array[1..n,1..m] of тип; Var Var а=array[1..n,1..m] of тип;
a:р;
трехмерный
Type р=array[1..n,1..m,1..k] of тип; Var a=array[1..n,1..m,1..k] of
Var a:р;
Пример описания одномерного массива размерностью 20:
type mas=array[1..20] of mas – имя типа,
integer;
a – имя переменной типа массив.
Границы изменения индексов - от 1 до 20, т.к. размерность 20
var a : mas;
элементов
Массив, объявленный как константа, т.е. совмещается объявление
const mas : array [1..7]
массива и занесение в него констант.
16
of
byte=(31,–
7,4,3,25,–3,2);
Следует помнить, что значением переменной a является весь массив!
Элемент массива обозначается указанием имени массива, за которым в квадратных скобках следует
индекс массива. Например, a[1] – первый элемент одномерного массива; с[5] – пятый элемент одномерного
массива; a[i] – i-тый элемент одномерного массива или для двухмерных массивов: с[1,5] – пятый элемент
первой строки массива; a[i,j] – j-тый элемент i-й строки двухмерного массива.
В двухмерном массиве первый индекс - номер строки, второй - номер столбца.
Двухмерные массивы иногда называют матрицами. Двухмерные массивы могут быть
прямоугольными (количество строк и столбцов разное) или квадратными (одинаковое количество строк и
столбцов).
В двухмерных массивах элементы, у которых номер строки совпадает с номером столбца,
называются диагональными или элементами главной диагонали. Главная диагональ начинается с первой с
роки первого столбца и заканчивается на последней строке последней графы. Кроме главной диагонали
существует побочная диагональ - с последней графе первой строки до первой графы последней строки.
Базовые алгоритмы работы с одномерными массивами
Будем считать, что объявили массив из 10 элементов, тип элементов в данном случае значение не имеет:
1. заполнение одномерного массива:

заполнение с клавиатуры:
for i:=1 to 10 do
begin
writeln (‘Введите значение элемента’);
readln(a[i]);
end;

заполнение случайным образом:
for i:=1 to 10 do
a[i]:=random(n); {n должно быть задано заранее}
 заполнение натуральными числами:
for i:=1 to 10 do
a[i]:=i;

поменять местами два заданных элемента массива:
c:=a[i]; a[i]:= a[j]; a[j]:=c;

заполнение по формуле (например, ai=sin i):
for i:=1 to 10 do
a[i]:=sin(i);
2. вывод массива на экран:
for i:=1 to 10 do
writeln (‘элемент ’, i, ‘ массива ’,a[i]);
3. нахождение суммы элементов одномерного массива:
s:=0;
for i:=1 to 10 do
s:=s+a[i];
4. подсчёт количества элементов, удовлетворяющих заданному условию (например,
положительных элементов):
k:=0;
for i:=1 to 10 do
if a[i]>0 then k:=k+1;
5. поиск максимального элемента одномерного массива и его номера:
max:=a[1];
n:=1;
for i:=2 to 10 do
if a[i]>max then begin max:=a[i]; n:=i; end;
17
Задача MaxMin. Программа для поиска максимального и минимального элемента массива, с указанием их
номеров (maxmin.pas).
program maxmin;
uses crt;
var a: array[1..5] of integer; i,max,nmax,min,nmin:integer;
begin
clrscr;
for i:=1 to 5 do { ввод данных }
begin writeln ('Введите значение элемента');
readln (a[i]);
end;
for i:=1 to 5 do { выдача массива на экран }
writeln (a[i]:7);
nmax:=1; { задание начальных значений }
max:=a[1];
nmin:=1;
min:=a[1];
for i:=1 to 5 do{ нахождение минимума и максимума}
if a[i]>max then begin max:=a[i]; nmax:=i; end;
if a[i]<min then begin min:=a[i]; nmin:=i; end;
end;
writeln ('Максимальный элемент=',max);
writeln ('Номер максимального элемента=',nmax);
writeln ('Минимальный элемент=',min);
writeln ('Номер минимального элемента=',nmin);
repeat until keypressed; end.
Сортировка массивов
Сортировка массива – это упорядочение по возрастанию/убыванию значений его элементов.
Сортировка методом «пузырька»
Сущность метода: Начиная с 1-го или последнего элемента, производится попарное сравнение элементов и,
если предыдущий больше последнего, то они меняются местами. Фрагмент.
for i:=1 to n-1 do
for j:=i+1 to n do
if f[j]<f[i] then
begin
a:=f[i];
f[i]:=f[j];
f[j]:=a;
end;
Сортировка методом выбора
Сущность метода: Находится минимальный элемент, затем 1-ый и минимальный меняются местами, затем
ищется минимальный со 2-го по последний и 2-ой с минимальным меняются местами и т.д.
Задача: Сдвинуть элементы массива влево на одну позицию.
uses crt;
const n=10;
var a: array[1..n] of integer;i, c:integer;
begin
for i:=1 to n do { заполнение массива и его вы вод на экран}
begin
a[i]:=random(50); write (a[i]:5);
end;
c:=a[1];
18
for i:=1 to n-1 do a[i]:=a[i+1];
a[n]:=c; writeln;
for i:=1 to n do write(a[i]:5);
repeat until keypressed; end.
Поиск элемента в упорядоченном массиве
Поиск – нахождение индекса элемента массива, равного заданной величине. Наиболее простой способ –
это простой перебор (последовательно сравниваются элементы массива с образцом до тех пор, пока не будет
найден нужный элемент).
Поиск ведется методом дихотомии.
Алгоритм:
1. Находится округлённое значение полусуммы начальных и конечных индексов массива, т.е. индекс
среднего элемента.
2. Вводится искомая величина (m) и сравнивается со средним элементом. Если a[i]>m, то заданный элемент
– в левой половине и поэтому индекс k правой границы устанавливается =i, иначе искомый элемент в
правой половине и сдвигается начальный индекс p и p:=i.
3. Процесс повторяется пока (k-p)<=1, т.е. пока p и k не сдвинутся вплотную. При этом величина искомого
индекса =p.
Примеры программ:
Задача. Из массива a составить массив b, который содержит только чётные элементы массива a.
program massiv1;
uses crt;
type mas=array[1..5] of integer;
var a,b:mas;
i,k,nmin:integer; min:integer;
begin
clrscr;
textcolor (15);
for i:=1 to 5 do {Блок заполнения массива}
begin
writeln ('Введите значение элемента');
readln (a[i]);
end;
k:=0;
for i:=1 to 5 do if a[i] mod 2=0 then {Поиск чётного элемента}
begin k:=k+1; b[k]:=a[i]; end; {Формирование нового массива}
if k=0 then
begin textcolor (12); writeln ('Чётных элементов нет.'); writeln ('Формирование нового
массива невозможно!');
end
else begin nmin:=1; min:=b[1]; {Поиск минимального в новом массиве}
for k:=1 to k do if b[k]<min then
begin min:=b[k]; nmin:=k; end;
for i:=1 to 5 do {Вывод элементов массива а}
begin textcolor (14); writeln ('Элемент ',i, ' массива a ',a[i]);
end;
for i:=1 to k do {Вывод элементов массива b}
begin
textcolor (9); writeln ('Элемент ',i, ' массива b ',b[i]);
end;
textcolor (10);
writeln ('Минимальный элемент среди чётных элементов массива=',min);
19
writeln ('Номер этого элемента=',nmin);
end;
repeat until keypressed; end.
Базовые алгоритмы работы с двухмерными массивами
Перемещение по массиву:
Про матрицу, имеющую m строк и n столбцов, говорят, что она имеет размер m*n
Перемещаясь по таблице, мы можем, двигаясь по строке, в этом случае индекс строки изменяется
медленнее, чем индекс столбца, и, соответственно, по столбцу (индекс столбца будет изменяться медленнее,
чем индекс строки). При решении задач с использованием двумерных массивов во всех случаях (кроме
некоторых частных) организуются вложенные циклы.
Перемещение по строке:
for i:=1 to m do {внешний цикл, изменяется номер строки}
…
for j:=1 to n do {внутренний цикл, изменяется номер столбца}
Перемещение по столбцу:
for j:=1 to n do {внешний цикл, изменяется номер столбца}
…
for i:=1 to m do {внутренний цикл, изменяется номер строки}
Заполнение массива
 Случайными числами в заданном промежутке (n,m) с заданным интервалом k
for i:=1 to 10 do
for j:=1 to 10 do
a[i,j]:=random((n-m+1)/k)*k+n; {n,m k должны быть задано заранее}
 Все строки заполнить одинаково, натуральными числами начиная с 1.
for i:=1 to 10 do
for j:=1 to 10 do
a[i,j]:=j;
 Все графы заполнить одинаково, натуральными числами начиная с 1.
for j:=1 to 10 do
for i:=1 to 10 do
a[i,j]:=1;
 По строкам, змейкой. Например, первая строка - 1 2 3 4 5, вторая -10 9 8 7 6,
третья - 11 12 13 14 15 и т.д.
K:=1
for i:=1 to 10 do
begin
for j:=1 to 10 do begin
a[i,j]:=k; k:=k+1; end;
i:=i+1;
for j:=10 downto 1 do begin
a[i,j]:=k; k:=k+1;
end;
end;
Поиск в массиве
 Найти максимальный (минимальный) элемент
max:=a[1];
n:=1;m:=1;
for i:=1 to 10 do
for j:=1 to 10 do
if a[I,j]>max then begin max:=a[I,j]; n:=i;m:=j; end;
20
 Найти максимум главной диагонали
max:=a[1];
n:=1;
for i:=1 to 10 do
if a[i,i]>max then begin max:= a[i,i];n:=i; end;
 Найти минимум побочной диагонали (размерность массива 10Х 10)
min:=a[1];
n:=1;
for i:=1 to 10 do
if a[i,11-i]>min then begin min:= a[i,11-i];n:=i; end;
Преобразование массивов
Заменить все элементы, отвечающие данному условию (>a), на заданную величину (c).
for i:=1 to 10 do
for j:=1 to 10 do
if a[i,j]>a then begin a[I,j]:=c; end;
 Найти сумму каждой строки матрицы и записать в отдельный одномерный массив.
program mas4;
uses crt;
const n=4; m=4;
type t=array[1..n,1..m] of integer; w=array[1..4] of integer;
var a:t;i,j,b,s,d:integer; c:w;
begin
clrscr;
for i:=1 to n do
begin
writeln ('Введите строку элементов матрицы (4 элемента)');
for j:=1 to m do read(a[i,j]);
writeln;
end;
for i:=1 to n do
begin for j:=1 to m do begin textcolor (14); write(a[i,j]:3); end;
writeln;
end;
writeln; {Расчёт суммы}
for i:=1 to n do
begin s:=0; for j:=1 to m do
begin s:=s+ a[i,j]; end;
c[i]:=s;
textcolor (10);
write(c[i]:6);
end;
repeat until keypressed;
end.
 Выполнить транспонирование матрицы. Транспонированная матрица это матрица, получающаяся
из данной (прямоугольной или квадратной) матрицы после замены строк соответствующими столбцами.
program mas2;
uses crt;
const n=8; m=8;
type t=array[1..n,1..m] of integer;
var a:t;
21
i,j:integer;
begin
clrscr;
textcolor (9);
for i:=1 to n do begin
for j:=1 to m do
begin a[i,j]:=random (10);
writeln;
end;
writeln;
textcolor (14);
for i:=1 to n do begin
for j:=1 to m do
begin write (a[j,i]:3); end;
writeln;
end;
repeat until keypressed; end.
write (a[i,j]:3); end;
 Рисование многоугольников Двумерные массивы в графике.
 Процедура drawpoly (<число вершин> + 1, <двумерный массив координат вершин>) прямое
назначение процедуры – вычерчивание ломаной!!! Поэтому отправную вершину надо ещё раз указать в
последней строке массива.
 Процедура fillpoly позволяет рисовать закрашенные многоугольники.
program graphsb;
uses graph, crt;
const t:array [1..5, 1..2] {Массив с координатами вершин пятиугольника}
of integer = ((50,50),(125,25),(200,50),(150,150),(50,200));
f:array [1..4, 1..2] {Массив с координатами вершин треугольника}
of integer=((250,50),(350,25),(400,150),(250,50));
var gd,gm,c:integer;
begin
gd:=detect;
initgraph (gd,gm,'');
setcolor (14); setbkcolor (1);
setfillstyle (8,10); {Тип заливки}
fillpoly (5,t); {Закрашенный пятиугольник}
drawpoly (4,f); {Контурный треугольник}
repeat until keypressed;
end.

Примеры программ:
Дана матрица b, состоящая из целых. Получить матрицу r, значения которой равны
удвоенным значениям матрицы b
program mas5;
uses crt;
const n=4; m=4;
type t=array[1..n,1..m] of integer;
var r,b:t;i,j:integer;
begin
clrscr;
textcolor (15);
for i:=1 to n do
begin
writeln ('Введите строку матрицы (4 элемента)');
22
for j:=1 to m do
begin
read (b[i,j]);
end; writeln;
end;
for i:=1 to n do
for j:=1 to m do
r[i,j]:=b[i,j]*2;
writeln;
for i:=1 to n do
begin
for j:=1 to m do
begin
textcolor (10);
write (r[i,j]:3);
end;
writeln;
end;
repeat until keypressed;
end.
 Одномерный массив из 10 элементов заполнить произвольными числами от 0 до 9
и выдать его на экран.
program pt1;
uses crt;
type t=array[1..10] of integer;
var a:t;i:integer;
begin
clrscr;
randomize;
for i:=1 to 10 do
begin
a[i]:=trunc(random(10));
write(a[i]:4);
end;
readln;
end._
 Двумерный массив размерностью 4 х 5 заполнить целыми двузначными числами и
выдать его на экран.
program pt2;
begin
uses crt;
for j:=1 to 5 do
type t=array[1..4,1..5] of integer;
begin
var a:t;i,j:integer;
a[i,j]:=trunc(random(90))+10;
begin
write(a[i,j]:4);
clrscr;
end;
randomize;
writeln;
for i:=1 to 4 do
end;
readln;
end._
 Двумерный массив размерностью 4 х 5 заполнить целыми числами в интервале от –10
до 20 с шагом 5 и выдать его на экран.
program pt3;
begin
uses crt;
for j:=1 to 5 do
type t=array[1..4,1..5] of integer;
begin
var a:t;i,j:integer;
a[i,j]:=trunc((random(7))*5)-10;
begin
write(a[i,j]:4);
clrscr;
end;
randomize;
writeln;
23
for i:=1 to 4 do
end;
readln;
end._
 Двумерный массив размерностью 4 х 5 заполнить целыми числами в интервале от –10
до 20 с шагом 5 и выдать его на экран. Найти максимальный элемент массива и его
координаты.
for j:=1 to 5 do
begin
program pt4;
a[i,j]:=trunc((random(7))*5)-10;
uses crt;
write(a[i,j]:4);
type t=array[1..4,1..5] of integer;
if ms<a[i,j] then begin; ms:=a[i,j];
var a:t;i,j,j1,i1,ms:integer;
i1:=i; j1:=j; end;
begin
end;
clrscr;
writeln;
randomize;
end;
ms:=-10;
writeln('MS=',ms:4,i1:4,j1:4);
for i:=1 to 4 do
readln;
begin
end._
 Заполнить одномерный массив размерностью М (М ввести с клавиатуры) целыми
числами от –30 до 39 и выдать на экран. Все отрицательные элементы массива
заменить на 0 и выдать массив на экран. Поменять местами 2-й и предпоследний
элемент массива, выдать массив на экран.
program pt5;
write(a[i]:4);
uses crt;
if a[i]<0 then a[i]:=0;
const n=100;
end;
type t=array[1..n] of integer;
writeln;
var a:t;i,r,m:integer;
for i:=1 to m do
begin
begin
clrscr;
write(a[i]:4);
randomize;
end;
writeln('vvedite N');
r:=a[2]; a[2]:=a[m-1];a[m-1]:=r;
readln(m);
writeln;
for i:=1 to m do
for i:=1 to m do
begin
write(a[i]:4);
a[i]:=trunc(random(70))-30;
readln;
end._
Заполнить одномерный массив размерностью М (М ввести с клавиатуры) целыми
числами от –30 до 39 и выдать на экран. Отсортировать массив по убыванию и
выдать на экран.
program pt6;
end;
uses crt;
writeln;
const n=100;
for i:=1 to m-1 do
type t=array[1..n] of integer;
begin
var a:t;i,j,k,r,m:integer;
for j:=i to m do
begin
begin
clrscr;
if a[i]<a[j] then begin r:=a[i];
randomize;
a[i]:=a[j];a[j]:=r; end;
writeln('vvedite N');
end;
readln(m);
end;
for i:=1 to m do
writeln;
begin
for k:=1 to m do
a[i]:=trunc(random(70))-30;
write(a[k]:4);
write(a[i]:4);
readln;
end._

ТЕМА №9: ДАННЫЕ ТИПА STRING.
ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. ТР5.
ЦЕЛИ И ЗАДАЧИ: приобретение навыков составления программ с использованием данных типа STRING
ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
24
Учащиеся должны знать:
- Что такое данные типа STRING;
- Как описываются строковые данные;
- Для чего используются строковые данные;
- Сколько бай занимают строковые данные;
- Для чего используется нулевой элемент строковой переменной,
- Как обозначается элемент строковой переменной;
- С какой цифры начинается отсчет номера элемента строкой переменной;
- Какой функцией определяется длина строковой переменной;
- Как склеить две строковые переменные;
- Как вырезать часть строковой переменной;
- Как вставить одну строковую переменную в другую;
- Как удалить часть строковой переменной;
- Как можно преобразовать числовую переменную в строковую;
- Как определить входить ли одна строковая переменная в состав другой.
Учащиеся должны уметь:
- Правильно задавать строковые переменные;
- Правильно использовать строковые переменные;
- Правильно использовать процедуры и функции обработки строковых переменных;
- Вводить строковые переменные;
- Составлять программы, используя строковые переменные.
ПЛАН-СОДЕРЖАНИЕ УРОКА
Основные понятия
Данные типа String или строковые данные (Строка) – это особая форма одномерного массива символов.
Отличие строки от массива в том, что массив имеет фиксированную длину (количество элементов), которая
определяется при описании.
Строковые данные описываются следующим образом:
Var S: string[n]; SS: string; где
n – число символов в строковой переменной, изменяется от 1 до 255.
Длина описанной переменной S - n+1 байт.
Максимально возможная длина строковой переменной – 255 символов.
S[i] – общий вид элемента строковой переменной
Строка имеет две разновидности длины:
- общую длину строки (n), которая характеризует размер памяти, выделяемый строке при описании.
- Текущую длину строки (p) (p<=n), которая показывает количество смысловых символов в каждый
конкретный момент времени. При выдаче на экран значения нулевого символа (Write(ord (s[0]));),
получим величину р. Например:
0
1
2
3
4
5
6
7
8
9
10
B
O
R
L
A
N
D
Символ, код которого =7
р=7
n=10
var s:string[10]
Когда в описании длина не указывается, то она по умолчанию берется 255 символов.
Заполняются строковые данные с помощью оператора присваивания (:=) или оператора ввода (read).
Примеры: SS:=’Информатика’; read(s);
Сравнение строковых переменных идет слева направо в соответствии с ASCII кодами символов. При
сравнении длин строк используются операции =, >=, <=, <>, <, >. Если длина переменных одинакова – больше
то, у которого больше код. Если длины разные – более короткая величина меньше. Считается, что
отсутствующие символы в более короткой строке имеют код, меньше кода любого действительного символа.
Например, ‘AB’ больше, чем ‘A’.
Строковые переменные можно склеить (знак +), что равноценно дозаписи символов второй переменной к
символам первой. Если длина новой строки превысит допустимую (255) длину, то «лишние» символы
отбрасываются. Пример, если а:=’К’; b:=’O’;с:= ‘Т’; х:=а+b+с;d:=a+c+b; – то в х поместится 'КОТ', а в d –
‘КТО’
Для обработки строковых переменных имеется набор специальных процедур и функций.
Процедуры обработки строк:
INSERT(S,T,N);
Вставка подстроки (S) в строковую переменную (T) с
символа N
25
DELETE(S,M,N);
STR(V,S);
VAL(S,V,N);
Удаление части (N символов) строковой переменной (S),
начиная с символа M
Преобразование числовой переменной в строковую
Преобразование строковой переменной в числовую. S строка, V - числовая переменная, N - значение первого
содержащего ошибку символа.
Функции обработки строковых переменных:
LENGTH(S)
Определение количества символов
строковой переменной S
POS(S,T);
Определение первого одинакового
левого символа двух строк (строка S и
подстрока T)
CONCAT(S1,S2,…,SN);
Склеивание строк
COPY(S, M, N);
Вырезка подстроки (N символов)
начиная с M-го символа из строковой
переменной S
ORD(X)
Определение кода символа. X
CHR(X)
Определение символа по его коду
SUCC(X)
Нахождение следующего элемента
PRED(X)
Нахождение предыдущего элемента
Примеры программ:
 Перевернуть введенное с клавиатуры слово
Uses crt;
Var s,s1:string; n,i:integer;
Begin
Read(s); S1:=’’;
N:=length(s);
For i:=1 downto 1 do S1:=s1+s[i];
Writeln(s1);
Repeat until keypressed; End.

Разработать функцию удаления символов из
строки.
Uses crt;
Var m,n,l:integer; s,w:string;
Function ddd(s:string; m,n:integer):string;
Var g1,g2,w:string; l,k:integer;
Begin
L:=length(s); G1:=’’;
For k:=1 to m-1 do g1:=g1+s[k];
Writeln(g1);
G2:=’’;
For k:=m+n to l do g2:=g2+g2+s[k];
Writeln(g2);
W:=g1+g2; Writeln(w);
Ddd:=w;
End;
Begin
Readln(s); Writeln(s);
Readln(m,n); W:=ddd(s,m,n); Writeln(w);
Repeat until keypressed;
end.
String
Integer
String, String
Integer
String, …, String
String, Integer,
Integer
String
String
Char
Integer
Integer, Char
Перечисляемый
Integer
Char
Integer, Char
Перечисляемый

Подсчитать кол-во предложений. Конец
предложения - ., !, ?
User crt;
Var s:string; n,i,sum:integer; m:char;
Begin
Read(s); Sum:=1; N:=lenght(s); M:=’ ‘;
For i:=1 to n do Begin
If s[i]=m then sum:=sum+1;
End;
Writeln(sum); Repeat until keypressed; end.
 Зашифровать текст, где каждый символ
заменяется на символ, отстоящий по таблице
ASCI – кодов дальше на 3 символа
Uses crt;
Var s,r:string; n,i:integer;
Begin
R:=’’;
Readln(s);
For i:=1 to n do
Begin
N:=ord(s[i]);
R:=r+chr(n+3);
End;
Writeln(s);
Writeln®;
Repeat until keypressed;
end.
ТЕМА №8: ФАЙЛЫ. ТИПИЗИРОВАННЫЕ ФАЙЛЫ. ТЕКСТОВЫЕ ФАЙЛЫ.
ПРОГРАММНО - ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. ТР5.
ЦЕЛИ И ЗАДАЧИ: Дать представление о файлах и средствах их обработки с помощью ТР5. Приобретение
навыков составления программ с использованием файлов различного типа
26
ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
Учащиеся должны знать:
- Что такое файл;
- Какие бывают файлы;
- Что такое файловая переменная;
- Как описываются типизированные файлы;
- Процедуры и функции работы с файлами;
- Процедуры и функции работы с типизированными и текстовыми файлами;
- Как описываются текстовые файлы.
Учащиеся должны уметь:
- Правильно описывать типизированные и текстовые файлы;
- Правильно пользоваться файловой переменной;
- Составлять программы с использованием типизированных и текстовых файлов;
- Составлять простейшие программы с использованием процедур и функций работы с типизированными и
текстовыми файлами.
ПЛАН-СОДЕРЖАНИЕ УРОКА
Основные понятия
Мы все время рассматривали задачи, в которых данные поступают с клавиатуры, а результаты выводятся на
экран. Ни исходные данные, ни результаты не сохраняются. А если данных слишком много? Как записать их
на диск? Для этого необходимо исходные данные и результаты оформить в виде файлов, которые хранятся
на диске.
Файлы – это поименованная структура данных на техническом носителе, представляющая собой
последовательность элементов (записей) одного типа или - это массив переменной длины неограниченного
размера.
Файл может быть компонентом другой структуры, но не должен входить в другой файл.
Отличие файла от массива: размещение на внешнем носителе, длина файла не задается, место элемента не
определяется индексом.
Файлы бывают:
- типизированные
- нетипизированные
- текстовые
Файл объявляется в разделе описания переменных с указанием типа элементов файла.
Например:
Var F1: file of integer; F2: file of char; F3: text; F4: file;
Типизированными файлами называются файлы, в описании которых присутствует указание типа.
Типизированные файлы – это файлы с прямым доступом к компонентам (записям).
Нетипизированный файл – это просто последовательность байтов, без конкретизации структуры.
Файл, компонентами которого являются данные символьного типа, называется текстовым. Отличие
текстовых файлов от типизированных - наличие строковой структуры. В текстовые файлы можно записывать
любую информацию, в том числе числа. При этом они (числа) автоматически преобразуются в строковые
величины, а при считывании из файла – обратное преобразование в числа.
Описание файлов:
Тип файла
Описание файла
Типизированный
Var F1: file of integer;
F2: file of char;
Нетипизированный
Var F3: file;
Текстовый
Var F: text;
Файл на техническом носителе определяется полным именем (<путь>\<собственно имя>.<расширение>).
Для обозначения файла и работе с ним в программе используется файловая переменная.
Файловая переменная - это переменная, используемая в программах для обозначения файла и обращения
к нему. Она не может использоваться как обычная переменная (слева от знака присваивания, в логических и
арифметических выражениях).
Особенности файловой переменной:
1. Ей нельзя присваивать какие-либо значения
2. Она не может участвовать в логических операциях
3. Она не может входить в математические выражения
27
При работе с файлом используется понятие указателя или индекса файла, т.е. положение магнитной головки
в определенном месте файла. Перед началом работы файл должен быть создан или открыт, по окончании
работы – закрыт.
При работе с файловыми переменными, используются специальные процедуры и функции:
Процедура
Назначение
Замечание
Assign(f, ‘name’)
Связывает файловую переменную с конкретным Можно
имя файла ’name’
файлом (привязывает переменную к имени файла). задавать через строковую
Ставится перед первым использованием файловой переменную (S): Assign(f, S)
переменной.
Reset(f)
Открывает существующий файл и устанавливает Для любых файлов
указатель на начало записи.
Rewrite(f)
Создает новый пустой файл, устанавливает Для любых файлов
указатель
- на начало файла. Если файл существовал, то его содержимое уничтожается.
Close(f)
Закрывает открытый файл
Для любых файлов
Erase(f)
Стирает предварительно закрытый файл
Для любых файлов
Rename(f, f1)
Переименовывает файл f в файл f1. Файл f должен Для любых файлов
быть предварительно закрыт
EOF(f)
Получение сведений о конце файла True, если Логическая функция.
указатель указывает на метку конца файла, иначе False
Read(f,v1,…vn)
Считывает записи из файла f в переменные v1, …vn
Для
типизированных
и
нетипизированных файлов
Write(f,v1,…vn)
Записывает в файл f значения переменных v1,…vn
Для
типизированных
и
нетипизированных файлов
Readln(f,v1,…vn)
Считывает записи из файла f в переменные v1, …vn
в типизированных файлах
недопустимо
Writeln(f,v1,…vn)
Записывает в файл f значения переменных v1,…vn
в типизированных файлах
недопустимо
N:=filesize(F);
Определение количества записей в файле
Функция
Eoln(f)
True, если указатель на метке конца строки, иначе - Логическая функция. Для
False
текстовых файлов
Append(f)
Открывает файл и устанавливает указатель на метку Применяется для добавления
конца файла
записей
N:=filepos(f)
Выдает номер записи, на которую указывает Функция
указатель записи. Первая запись имеет номер 0.
seek(f,n)
Устанавливает указатель на запись с номером n
truncate(f)
Отсекает все записи, находящиеся после указателя и
в этой позиции записывает метку конца файла.
Пимеры программ:
 Пример записи типизированных файлов:
var f: filt of integer;
assign(f, ‘file’); … rewrite(f); …write(f, v1,v2,…, vn); clos(f);
 Пример считывания типизированных файлов:
var f: filt of integer;
assign(f, ‘file’); … reset(f); … read(f, v1,v2,…, vn); clos(f);
 Пример записи в текстовый файл:
uses crt;
var f:text; r,i:integer;
rr:string;
begin
clrscr;
rr:='Dautova';
assign(f,'dddddd');
rewrite(f);
writeln(f,rr);
for i:=1 to 20 do begin
r:=random(10);
writeln(f,r);
end;
close(f);
end._
28
 Считывание из текстового файла (см программу выше):
uses crt;
var f:text; r,i:integer; rr:string;
begin
clrscr;
assign(f,'dddddd');
reset(f);
readln(f,rr);
writeln(rr);
for i:=1 to 20 do begin
readln(f,r);
writeln(r);
end;
close(f);
end._
 Написать программу, вычисляющую корни квадратного уравнения и вывести результаты в файл.
Uses crt;
Var a,b,c,x1,x2, d: real; f:text;
Begin
Assign(f,’result.txt);
Rewrite(f);
Readln(a,b,c);
D:=b*b-4*a*c;
If d>=0 then
Begin
X1:=-b+sqrt(d)/(2*a);
X2:=-b-sqrt(d)/(2*a);
End;
Writeln(‘решени квадратного ур-я’);
Writeln(f,'a=',a:6:3,'b=', b:6:3,'c=',c:6:3);
If d<0 then writeln(f,’у урав-я нет корней’) else writeln(f, ‘корни: x1=’,
x1:6:3,’x2=’, x2:6:3);
Close(f);
Writeln(‘рез-ты работы программы в файле result.txt’);
Repeat until keypressed; end.
 На диске имеется файл с именем Karl.txt, в котором записана скороговорка:
"Карл у Клары украл кораллы, Клара у Карла украла кларнет."
Требуется подсчитать кол-во букв «К»
Uses crt;
Var f:text; s:integer; a:char;
Begin
Assign(f,’Karl.txt’); Reset(f);
S:=0;
While not eof(f) do Begin
While not eoln(f) do Begin
Read(f,a); If a=’k’ then s:=s+1;
End;
Readln(f);
End;
Close(f); Writeln(s);
Repeat until keypressed; end.
 Ввести текст в текстовый файл f1. Переписать файл f1 в f2 – первую половину файла в прямом, а вторую
– в обратном порядке следования символов.
Uses crt;
Var f1,f2:text; s,s1,sa,sb:string; a:char; n,y,i:integer;
Begin
Clrscr;
Assign(f1,’file1’); Assign(f2,’file2’);
Rewrite(f1);
Readln(s); Writeln(f1,s); Close(f1);
Reset(f1); Rewrite(f2); Read(f1,s1);
N:=lenght(s1); Y:=n div 2; Writeln(y);
29
Sa:=’’; sb:=’’;
For i:=n downto y+1 do Sa:=sa+s1[i];
Writeln(sa);
For i:=1 to y do Sb:=sb+s1[i];
Writeln(sb);
S1:=sb+sa;
Writeln(s1); Write(f2,s1);
Close(f1); Close(f2); Repeat until keypressed; end.
30
Приложение 1. Структура типов данных
Типы
данных
простые
порядковые
целые
вещественные
логические
структурированные
массивы
символьный
указатели
записи
перечисляемый
строки
множества
Тип-диапазон
процедурные
файлы
объекты
Приложение 2. Таблица кодов ASCII
Управляющие символы
Код Клавиши
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Ctrl - @
Ctrl – A
Ctrl – B
Ctrl – C
Ctrl – D
Ctrl – E
Ctrl – F
Ctrl – G
Ctrl – H
Ctrl – I
Ctrl – J
Ctrl – K
Ctrl – L
Ctrl – M
Ctrl – N
Ctrl – O
Ctrl – P
Ctrl – Q
Ctrl – R
Ctrl – S
Ctrl – T
Ctrl – U
Ctrl – V
Ctrl – W
Ctrl – X
Ctrl – Y
Ctrl – Z
Ctrl – [
Ctrl - \
Ctrl - ]
Ctrl - ^
Ctrl - _
Печатаемые символы
Обозначение
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC 1
DC 2
DC 3
DC 4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
Десятичный код - символ
32
33 !
34 «
35 #
36 $
37 %
38 &
39 ‘
40 (
41 )
42 *
43 +
44 ,
45 46 .
47 /
48 0
49 1
50 2
51 3
52 4
53 5
54 6
55 7
56 8
57 9
58 :
59 ;
60 <
61 =
62 >
63 ?
31
64 @
65 A
66 B
67 C
68 D
69 E
70 F
71 G
72 H
73 I
74 J
75 K
76 L
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z
91 [
92 \
93 ]
94 ^
95 _
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
‘
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
¦
}
~
.
Назначение некоторых кодов ASCII
0 Нулевой оператор
7 Звуковой сигнал
8 Клавиша Backspace
9 Клавиша Tab
10 Перевод строки
13 Клавиша Enter
27 Клавиша ESC
32 Клавиша Space
Приложение 3. Расширенные ASCII –коды клавиш
Код
Клавиша
Код
Клавиша
42
43
45
82
83
59-68
85
86
Prtsc
+(gray)
-(gray)
Ins(gray)
Del(gray)
F1-F10
F11
F12
71
72
75
77
80
79
81
73
Home
Up
Left
Right
Down
End
PgDn
PgUp
Примечание: В компьютере «Корвет» клавиши стрелок «Вправо», «Влево», «Вверх», «Вниз» имеют коды 28,
29, 30 и 31, соответственно.
Приложение 4. Кодировка символов по модифицированной альтернативной кодировке символов
госта (десятичный код-символ)
128 а
144 р
160 а
176 ░
192 └
208 ╨
224 р
240 ë
129 б
145 с
161 б
177 ▒
193 ┴
209 ╤
225 с
241 ё
130 в
146 т
162 в
178 ▓
194 ┬
210 ╥
226 т
242 є
131 г
147 у
163 г
179 |
195 ├
211 ╙
227 у
243 є
132 д
148 ф
164 д
180 ┤
196 ─
212 ╘
228 ф
244 ї
133 е
149 х
165 е
181 ╡
197 ┼
213 ╒
229 х
245 ї
134 ж
150 ц
166 ж
182 ╢
198 ╞
214 ╓
230 ц
246 ў
135 з
151 ч
167 з
183 ╖
199 ╟
215 ╫
231 ч
247 ў
136 и
152 ш
168 и
184 ╕
200 ╚
216 ╪
232 ш
248 ˚
137 й
153 щ
169 й
185 ╣
201 ╔
217 ┘
233 щ
249 ●
138 к
154 ъ
170 к
186 ║
202 ╩
218 ┌
234 ъ
250
139 л
155 ы
171 л
187 ╗
203 ╦
219 █
235 ы
251 √
140 м
156 ь
172 м
188 ╝
204 ╠
220 ▄
236 ь
252 №
141 н
157 э
173 н
189 ╜
205 ═
221 ▌
237 э
253 ¤
142 о
158 ю
174 о
190 ╛
206 ╬
222 ▐
238 ю
254 ■
143 п
159 я
175 п
191 ┐
207 ╧
223 ▀
239 я
255
32
·
Download