Программирование на языке Turbo Pascal

Цикл

Цикл – команда исполнителю повторить многократно указанную последовательность команд алгоритмического языка или, другими словами, многократно повторяющаяся часть программы.
Существует три разновидности  оператора цикла.
2. Оператор цикла с параметром.
Используется, когда известно, сколько раз выполняется циклическая часть программы.
for <параметр цикла>:=<начало> to/downto <конец> do <оператор>;
                     для                                                       до                         делать
параметр цикла - числовая переменная типа integer
начало, конец - арифметическое выражение
to - используется когда начало меньше конца
downto - используется когда начало больше конца
оператор - тело цикла, любой оператор, в том числе и составной
Принцип работы:
§ Параметру присваивается значение начало
§ Выполняется оператор - тело цикла.
§ Затем параметр сравнивается с концом.
§ Если параметр больше/меньше конца, то начинает работать следующий оператор за оператором цикла, в противном случае к параметру прибавляется/отнимается единица.
§ Снова выполняется оператор.
§ Так продолжается пока параметр не станет больше/меньше конца.
3. Цикл с предварительным условием
while <условие> do <оператор>;
                                                              пока                         делать
условие
- логическое выражение
оператор
- любой оператор, в том числе и составной.
Принцип работы:
§ Проверяется истинность условия
§ Если условие истинно выполняется оператор

§ Цикл работает, пока условие не станет ложным.
4. Цикл с последующим условием
repeat <операторы> until <условие>
                                                   повторять                           до тех пор пока
условие
- логическое выражение
операторы
- любое количество любых операторов, в том числе и составной.
Принцип работы:
§ Выполняются все операторы между 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.
Написать программу, которая выводит на экран табл. умножения, например на 7.
Uses crt;
Var m,n,p:integer;
Begin 
For i:=1 to 10 do 
Writeln(7,’*’,I:2,’=’,7*I:2);
Readkey; end.
Написать программу, которая выводит табличные значения функции у=|x|+2. Диапазон изменения аргумента  от – 4 до 4, приращение аргумента  - 0.5
uses crt;
var x,y:real;
begin;
clrscr;
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.
Имеются или не имеются среди чисел cos(i3)sin(in), i=1,…,n, числа меньше 0,0001. Если имеются, то выводить «есть», если нет – «нет»
 uses crt;
 label 1;
 var i,n:integer;
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.
Написать программу, которая позволяет найти наибольший общий делитель двух целых чисел
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;
uses crt;
var a,i,j:integer;
begin
clrscr;
randomize;
for i:=1 to 15 do
begin
a:=trunc((random(7))*5)-10;
write(a:4);
end;
     readln;
     end.
2) program pt1;
uses crt;
var a,i,j:integer;
begin
clrscr;
randomize;
for j:=1 to 10 do
begin
a:=trunc((random(9))*5)-20;
write(a:4);
end;
     readln;
     end.
3) program pt1;
uses crt;
var a,i,j:integer;
begin
clrscr;
randomize;
for i:=1 to 15 do
begin
a:=trunc((random(11))*5)-20;
write(a:4);
end;
     readln;
     end._
4) program pt1;
uses crt;
var a,i,j:integer;
begin
clrscr;
randomize;
for i:=1 to 4 do
begin
for j:=1 to 5 do
begin
a:=trunc((random(7))*5)-10;
write(a:4);
end;
writeln;
end;
     readln;
     end._
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 (‘*’);

Порядковые типы переменных (дополнительные сведения)

Кроме числовых переменных возможно использование символьных, логических и простых типов переменных, определяемых программистом, перечисляемых и интервальных (тип – диапазон).
Символьные переменные описываются как  CHAR и представляют собой тип данных, предназначенный для хранения одного символа (буква, знак, код). Переменная типа CHAR занимает один байт.
Логические переменные (тип Boolean) – это переменные, которые могут принимать только два значения истина - true (1) или ложь - false (0). Используются такие переменные для  хранения результатов логических вычислений. Для булевых переменных разрешены только операции сравнения:

Логическая операция
Наименование
=
Равно
<>
Неравно
And
Логическое И (логическое умножение, конъюнкция)
Or
Логическое ИЛИ (логическое сложение, дизъюнкция)
Xor
Логическое исключающее ИЛИ (результат тогда 1, когда на входе все нули)
Not
Логическое НЕ


Целочисленный

CHAR
Low(х)
возвращают минимальное значание указанного диапозона переменной Х

Тип-диапозан
Логический
High(х)
возвращают максимальное значание указанного диапозона переменной Х
Пример использования различных порядковых типов переменных:

Текст программы:
Результат работы программы:
uses crt;
type d=(x,y,z,k,l,m,n);
    d2=k..n;
var a:d;
    b:x..z;
    c:d2;
    f,f1:20..500;
    i:integer;
    i1:word;
    i2:byte;
    i3:longint;
    i4:boolean;
    ch:char;
begin
 clrscr;
  a:=d(2);
  b:=z;
c:=d(5);
c:=pred(c);
if a=z then writeln('Z');
if a=b then writeln('EYS');
if c=l then writeln('L');
c:=succ(c);
if c=m then writeln('M');
i:=ord(c);  write(i);
writeln(low(i),'   ',high(i));
writeln(low(i1),'   ',high(i1));
writeln(low(i2),'   ',high(i2));
writeln(low(i3),'   ',high(i3));
writeln(low(i4),'   ',high(i4));
f1:=low(f);
writeln(f1,'   ',high(f));
readkey;
end.
Z
EYS
L
M
5
-32768       32767
0    65535
0    255
-2147483648     2147483647
False         True
20      500

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

Целый тип

Byte
0…255
1 байт без знака
Word
0 ... 65535
2 байт без знака
ShortInt
-128…127
1 байт со знаком
Integer
-32768 ...32767
2 байт со знаком
Longint
-2147483648  ... 2147483647
4байт со знаком


Clrscr;

Оператор требует подключения (Uses crt;)  модуля crt, например:
Uses crt;
Begin
Clrscr;  …  End.
§ Нестандартный  оператор перемещения текстового курсора в заданный символ x строки y: gotoxy(x,y);
§ Нестандартные оператор изменения фона экрана (цвет фона):
Textbackground(...);
Чтобы очистился весь экран, после оператора textbackground должен следовать оператор clrscr. В противном случае фон меняется только под текущей строкой.
§ Нестандартные оператор изменения цвета переднего плана (цвет букв):
Textcolor(...);
 Например,
Uses crt;
Begin
Textbackground (yellow); clrscr; … Textcolor(blue); … End.
7. Операторы ВВОДА данных в переменные с клавиатуры:
Read (<список переменных>);
Readln (<список переменных>);
Операторы являются нестандартными, находятся в модуле Sistem, не требующем специального подключения.
При переходе к выполнению этих операторов программа ожидает ввода данных и нажатия клавиши Enter.
Данные, вводимые в разные переменные, разделяются пробелом. Отличия операторов заключаются в том, что второй оператор после ввода информации (выполнения оператора) переводит курсор на следующую строку, а первый оператор - нет.
Пример записи оператора - Readln(k,t,e);
Оператор Readln; без списка переменных используется для задержки информации на экране до нажатия на клавишу Enter и ставится в конце программы.
8. Операторы ВЫВОДА  текстовой информации на  экран :
Write(<список переменных, констант и арифметических выражений>);
Writeln(<список переменных, констант и арифметических выражений>);
Операторы являются нестандартными, находятся в модуле Sistem, не требующем специального подключения.
Например, Write(2+У, Х);Writeln (‘A=’, а);Write(а, с);
Отличия операторов заключаются в том, что второй оператор после вывода информации переводит курсор на следующую строку, а первый оператор - нет.

Переменные типа Real рекомендуется выводить в форматированном виде.

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

Например: Write(а:5:2,с:6:3); - под а

отводится 5 символов, включая точку, знак числа и два десятичных знака величины числа. Знак «+» перед числом при выводе будет опущен. Если в а находится число 2,5678, то выведется на экран: _2.56

 

9. Оператор ожидания нажатия на клавишу.

  Readkey;

Используется для задержки изображения на экране до нажатия на клавишу (Enter). Можно ставить в конце программы, перед end.

10. Целочисленные арифметические операции:

Операция

Назначение



Пример записи

Тип используемых переменных

Тип результата

div

Вычисление частного при делении a на b

C:=a div b;

целый

целый

mod

Вычисление  остатка от деления a на b

D:=a mod b;

целый

целый

Например, Y := 25 div 3; (переменной Y присваивается 8),  Y := - 25 div 4; (переменной Y присваивается -6),

Y := 13 mod 3; (переменной Y присваивается 1), Y := 13 mod 4; (переменной У присваивается 1).

10. Функции, преобразования числовых переменных:

Функция

Назначение

Тип аргумента

Тип функции

trunc(x)

Нахождение целой части x (дробная часть числа отбрасывается)

вещественный

целый

целый

int(x)

Округление вещественного числа x по направлению к нулю

вещественный

вещественный

round(x)

Округление x в сторону ближайшего целого по математическим правилам

вещественный целый

целый

целый

Frac(x)

Вычисление дробной части числа Х

вещественный

вещественный

Примеры:

Y := trunc(13.999); (переменной Y присваивается 13), Y := trunc(13.111); (переменной Y присваивается 13),

Y := round(3.145); (переменной Y присваивается 3), Y := round(23.5); (переменной Y присваивается 24), Y := round(-12.5); (переменной Y присваивается -13).


Y := int(2.7) (переменной Y присваивается 2),  Y := int(-32.3) (переменной Y присваивается -32).

11. Получение случайных чисел.

- Random – получение (генерация) случайных чисел в диапазоне от 0 до 1. Например, Y := random; (переменной Y присваивается значение равное числу из промежутка от 0 до 1, возможно 0.45678).

- Random(X) - Получение случайных целых чисел в диапазоне от 0 до (Х-1). Аргумент Х - целое. Например, Y :=Random(39); (переменной Y присваивается значение равное числу из промежутка от 0 до 38).

- Randomize - Формирование базы случайных чисел, на основе временного таймера ПК. Обеспечивает генерацию неповторяющихся последовательностей случайных чисел. Используется, чтобы получать разные случайные числа при каждом запуске программы. Должен стоять в программе до первого использования функции Random.

Генерация случайных чисел (А)

Что требуется получить

Дано

Оператор

Результат (А)

Любое число от 0 до 90

Аргумент - 91

А : = Random(91);

Любое число  от 0 до 90, например 62.

Двухзначные целые положительные числа

Числа от 10 до 99, всего: 99-10+1=90 (числа).

А : = Random(90)+10;

Любое число  от 10 до 99, например 12.

Двухзначные целые положительные четные числа

Числа 10, 12, 14, … до 98, всего чисел

(98-10)/2+1=88/2+1=45.

А : = Random(45)*2+10;

Получаются число от 0 до 44, умножаются на 2 и увеличиваются на 10.

Например, 56

Числа в заданном промежутке с заданным шагом.

N - начало промежутка, M - конец промежутка, шаг - К.

А : = Random

(((N–M) div K)+1)*К+N;

Сгенерируем случайное число в промежутке от 0 до  (N – M) div k. Умножаем на К и прибавляем N.

Примеры программ:

Объявите переменные, необходимых для вычисления значения функции y=x2.

Var x:real, y:real;

Объявите переменные, необходимые для вычисления площади кольца.

Var r1,r2,s:real;

Запишите на языке Паскаль

Y=-2,7x3+0,23x2-1,4

Y:=-2.7*x*x*x+0.23*x*x-1.4

Написать программу, которая выводит на желтом фоне синими буквами:

Буря мглою небо кроет



То заплачет, как дитя.

                                                А.С.Пушкин

Ответ:

Uses crt;

Begin

Textbackground (yellow); Textcolor(blue); Clrscr;

Writeln(‘Буря….’);  … Writeln;

Writeln(‘                              ‘ А.С.Пушкин’);

Readkey; End.

Написать программу вывода значений переменных a,b,c. Значение каждой переменной – на отдельной строке и начинается с имени переменной, затем знак =, затем значение.

Uses crt;

Var a,b,c:integer;

Begin

A:=5; b:=6; c:=7;

Writeln(‘a=’,a); Writeln(‘b=’,b); Writeln(‘c=’,c);

Readkey; end.

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

Uses crt;

Var koltet, sttet, kolkar,stkar,obst:integer;

Begin

Writeln(‘Введите колтетрадей’);

Readln(koltet); …  obst:=koltet*sttet+kolkar*stkar; writeln(‘obst=’, obst);

Readkey; end.

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

Uses crt;

Var sum,srok,stavka,dohod:real;

Begin

Readln(sum);

Readln(stavka);

Readln(srok);

Dohod:=((sum*(stavka/100))/36)*srok;

Sum:=sum+dohod;

Writeln(sum:9:2,’руб’);

Readkey;   end.

Написать программу вычисления величины стоимости поездки на дачу. Расстояние, расход бензина на 100 км. и цена бензина может задаваться с клавиатуры или задаваться случайными числами.

Uses crt;

Var …

Begin  Clrscr;

Writeln(’ … ’); Readln( … );   …

Readkey;  end.

Найти остаток от деления и округленный результат деления двух целых чисел, заданных с клавиатуры

Uses crt;

Var a,b,c,d:integer;

Begin Clrscr;

Writeln(‘Введите два целых числа’); Readln(a,b);

с:= a div b; d:= a mod b;

Writeln(‘округленный результат - ’, c ); Writeln(‘остаток от деления - ’,d);

Readln; end.

Преобразовать вещественное число в денежный формат. Пример, 24.5 – 24 тенге 50 тиын

Uses crt;

Var a: real; b,c: integer;

Begin Clrscr;

Writeln(‘Введите вещественное число’); Readln(a);

b:= trunc(a); c:= round((a-b)*100);

Writeln;

Writeln(b:4,'  тенге', c:6,’тиын’);

Readkey; end.

Сгенерировать случайные числа:

1) целое в интервале от 0 до 67;

2) целое двухзначное;

3) вещественное с двумя целыми знаками; 4) целое из ряда 60, 70, 80, 90, …, 150;

5) вещественное из ряда -1.5, -1.3, -1.1, …, 0.7, 0.9.

Uses crt;

Var a…

Begin Clrscr;

Randomize;

a:=random(68-); Writeln(‘1  -’, a);

a:=random(90)+10; Writeln(‘2 -’, a);

a:=random; b:=b*100; Writeln(‘3 -’, b);

a:=random(10)*10+60; Writeln(‘4 -’, a);

a:=random(round((0.9-(-1.5))/0.2+1))*0.2-1.5;

  …

Readkey; end.


Десятичный код - символ

   0          Ctrl - @            NUL
   1          Ctrl – A            SOH
   2          Ctrl – B            STX
   3          Ctrl – C            ETX
   4          Ctrl – D            EOT
   5          Ctrl – E            ENQ
   6          Ctrl – F            ACK
   7          Ctrl – G           BEL
   8          Ctrl – H           BS
   9          Ctrl – I             HT
  10         Ctrl – J             LF
  11        Ctrl – K            VT
  12        Ctrl – L            FF
  13        Ctrl – M           CR
  14        Ctrl – N            SO
  15        Ctrl – O            SI
  16        Ctrl – P            DLE
  17        Ctrl – Q           DC 1
  18        Ctrl – R           DC 2
  19        Ctrl – S            DC 3
  20        Ctrl – T            DC 4
  21        Ctrl – U           NAK
  22        Ctrl – V           SYN
  23        Ctrl – W          ETB
  24        Ctrl – X           CAN
  25        Ctrl – Y           EM
  26        Ctrl – Z           SUB
  27        Ctrl – [            ESC
  28        Ctrl - \             FS
  29        Ctrl - ]             GS
  30        Ctrl - ^             RS
  31        Ctrl - _             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 ?
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 Нулевой оператор                   10 Перевод строки
                                         7 Звуковой сигнал                      13 Клавиша Enter
                                         8 Клавиша  Backspace                27 Клавиша ESC
                                         9 Клавиша Tab                            32 Клавиша Space

If A=True then y:=1 else y:=1/x;

Пример использования логических переменных:

Составить программу, которая выдает на экран True, если заданная своими координатами точка лежит внутри  выделенной области:
Результат работы программы:
If A=True then y:=1 else y:=1/x;
Uses crt;
Var x,y:integer; L:Boolean;
Begin
Write(‘введите Х и У ->’);
Readln(x,y);
L:=((x<=0) and (Sqr(x)+Sqr(y)<=9) and (y>=-x-3)) or ((Sqr(x)+Sqr(y)<=25) and (x>0));
Writeln(‘Точка лежит в задвнной области? - ’,L);
readkey;
end.
введите Х и У ->1 1
Точка лежит в задвнной области? - True

Перечисляемый тип – это описание упорядоченного множества значений, задаваемых идентификаторами в круглых скобках. Переменные перечисляемого типа могут использоваться в логических выражениях или операторах присваивания и не могут использоваться в операторах ввода или вывода. Например, программа определения дня недели может выглядеть так:
PROGRAM DEMO1;
USES CRT;
   TYPE WEEK=(MONDAY, TEUSDAY, WEDNESDAY, THURSDAY, FRIDAY, SATYRDAY, SUNDAY);
    VAR DAY: WEEK;
BEGIN
   DAY:=THURSDAY;
   IF (DAY=SUNDAY) OR (DAY=SATYRDAY) THEN WRITELN(‘УИКЕНД’)
                                                                                   ELSE WRITELN(‘РАБОЧИЕ ДНИ’);
{или - IF (DAY READLN;
END.
Применение перечисляемых типовделает программы нагляднее.
Тип – диапазон (интервальный тип) – этот тип получается путем введения ограничения на уже определенный некоторый простой тип. Ограничения определяются заданием диапазона – минимального и максимального значений констант в этом диапазоне. Тип, из которого выбирается диапазон (отрезок), называется  базовым типом. Левая граница диапозона на должна превышать правую. Диапазоны для вещественных типов не допускаются. Например, рассмотрим  типы:
TYPE    A=10..100;
WEEK=(MONDAY, TEUSDAY, WEDNESDAY, THURSDAY, FRIDAY, SATYRDAY, SUNDAY);
WORKDAY=MONDAY..FRIDAY;

WEEKEND= SATYRDAY.. SUNDAY;

Базовый тип для диапазона А – тип INTEGER; для диапазонов WORKDAY и WEEKEND – перечисляемый тип WEEK.

Использование диапазонов позволяет более экономично распределять память, особенно в случае данных типа INTEGER. Декларация интервального типа указывает компилятору, что для переменных возможны только значения в заданном интервале, тем самым в программе автоматически организуется проверка корректности операций присвоения (см. приложение 1, СТРУКТУРА ТИПОВ ДАННЫХ).

2. Функции, используемые для работы с порядковыми переменными.

Название функция

Назначение

Тип аргумента

Тип функции

Readkey

Ввод данных без «Эхо», т.е. программа передает значение нажатого символа без нажатия на клавишу Enter и вывода на экран вводимого символа.

Пример записи: A:=readkey;

Нет

CHAR

Pred(x)

Определение предшественника взятого символа х

Порядковый

Порядковый

Succ(x)

Определение последующего символа за  взятым символом х

Порядковый

Порядковый

Ord(x)

определяет код символа. Например, Ord(‘A’) - 65

Порядковый

Целочисленный

Chr(x)

определяет символ по коду. Например, Chr(65) - ’A’


Элементы блок-схемы



Начало или конец алгоритма 
Элементы блок-схемы
Обработка данных
Элементы блок-схемы
Ввод/вывод данных
Элементы блок-схемы
Проверка условий
Элементы блок-схемы
Начало цикла
Элементы блок-схемы
Указание перехода от блока к блоку, если схема разбита на части
Элементы блок-схемыЭлементы блок-схемыЭлементы блок-схемыЭлементы блок-схемы
Линии потока и изменение направлений
Элементы блок-схемыЭлементы блок-схемы
Слияние линий потока
Элементы блок-схемы

Пример составления алгоритма:
Составим алгоритм нахождения НОД двух чисел по алгоритму Евклида.

Элементы блок-схемы

Элементы блок-схемы




Ввод m, n
         

Элементы блок-схемы


Оператор 1, оператор 2 – какой

Часть конструкции, заключенная в квадратные скобки может отсутствовать.
Принцип работы оператора:
¨ проверяется условие
¨ если условие истинно (верно), то выполняется оператор 1
¨ если условие ложно (неверно), то выполняется оператор 2
¨ если  else <оператор 2> отсутствует, то, при ложности условия, выполняется следующий за if оператор.

Например, из двух чисел a и b вывести на экран значение большего числа.
if a > b then writeln (‘большее число a - ’, a)
else writeln (‘большее число b - ’, b);

Внимание! Перед словом else нельзя ставить точку с запятой. Обратите внимание на запись служебных слов и операторов. Каждое слово else под своим, словом if. Для большей наглядности и «читаемости» текста программы операторы, следующие за словами then и else можно писать на следующей строке.

Поиск элемента в упорядоченном массиве

Поиск – нахождение индекса элемента массива, равного заданной величине. Наиболее простой способ – это простой перебор (последовательно сравниваются элементы массива с образцом до тех пор, пока не будет найден нужный элемент).
Поиск ведется методом дихотомии.
Алгоритм:
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]                                                   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);

    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;

  • Найти максимум главной диагонали



  • 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;

         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);    write (a[i,j]:3);   end;

                                             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.


  • Рисование многоугольников  Двумерные массивы в графике.


  • ² Процедура 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 элемента)');

         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;

    uses crt;

    type t=array[1..4,1..5] of integer;

    var a:t;i,j:integer;

    begin

    clrscr;

    randomize;

    for i:=1 to 4 do

    begin

    for j:=1 to 5 do

    begin

    a[i,j]:=trunc(random(90))+10;

    write(a[i,j]:4);

    end;

    writeln;

    end;

         readln;

         end._

  • Двумерный массив размерностью 4 х 5 заполнить целыми числами в интервале от –10 до 20 с шагом 5 и выдать его на экран.


  • program pt3;

    uses crt;

    type t=array[1..4,1..5] of integer;

    var a:t;i,j:integer;

    begin

    clrscr;

    randomize;

    for i:=1 to 4 do

    begin

    for j:=1 to 5 do

    begin

    a[i,j]:=trunc((random(7))*5)-10;

    write(a[i,j]:4);

    end;

    writeln;

    end;

         readln;

         end._

  • Двумерный массив размерностью 4 х 5 заполнить целыми числами в интервале от –10 до 20 с шагом 5 и выдать его на экран. Найти максимальный элемент массива и его координаты.


  • program pt4;

    uses crt;

    type t=array[1..4,1..5] of integer;

    var a:t;i,j,j1,i1,ms:integer;

    begin

    clrscr;

    randomize;

    ms:=-10;

    for i:=1 to 4 do

    begin

    for j:=1 to 5 do

    begin

    a[i,j]:=trunc((random(7))*5)-10;

    write(a[i,j]:4);

    if ms
    end;

    writeln;

    end;

    writeln('MS=',ms:4,i1:4,j1:4);

         readln;

         end._

  • Заполнить одномерный массив размерностью М (М ввести с клавиатуры) целыми числами от –30  до 39 и выдать на экран. Все отрицательные элементы массива заменить на 0 и выдать массив на экран.  Поменять местами 2-й и предпоследний элемент массива, выдать массив на экран.


  • program pt5;

    uses crt;

    const n=100;

    type t=array[1..n] of integer;

    var a:t;i,r,m:integer;

    begin

    clrscr;

    randomize;

    writeln('vvedite N');

    readln(m);

    for i:=1 to m do

    begin

    a[i]:=trunc(random(70))-30;

    write(a[i]:4);

    if a[i]<0 then a[i]:=0;

    end;

    writeln;

    for i:=1 to m do

    begin

    write(a[i]:4);

    end;

    r:=a[2]; a[2]:=a[m-1];a[m-1]:=r;

    writeln;

    for i:=1 to m do

    write(a[i]:4);

     readln;  end._

    <


  • Заполнить одномерный массив размерностью М (М ввести с клавиатуры) целыми числами от –30  до 39 и выдать на экран. Отсортировать массив по убыванию и  выдать  на экран.


  • program pt6;

    uses crt;

    const n=100;

    type t=array[1..n] of integer;

    var a:t;i,j,k,r,m:integer;

    begin

    clrscr;

    randomize;

    writeln('vvedite N');

    readln(m);

    for i:=1 to m do

    begin

    a[i]:=trunc(random(70))-30;

    write(a[i]:4);

    end;

    writeln;

    for i:=1 to m-1 do

    begin

    for j:=i to m do

    begin

    if a[i]
    end;

    end;

    writeln;

    for k:=1 to m do

    write(a[k]:4);

    readln;   end._


    Структура типов данных


    Типы данных
    простые
    порядковые
    целые
    вещественные
    логические
    структурированные
    массивы
    символьный
    указатели
    записи
    перечисляемый
    строки
    множества
    Тип-диапазон
    процедурные
    файлы
    объекты


    Расширенные 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, соответственно.

    Пример составного выражения - (X>2) and (X<=10)

    Используются в операторах присваивания, ветвления и цикла.


    § Пример записи в текстовый файл:

    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._
    § Считывание из текстового файла (см программу выше):
    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);
    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.




    Сортировка массивов

    Сортировка массива – это упорядочение по возрастанию/убыванию значений его элементов.

    Сортировка методом «пузырька»

    Сущность метода: Начиная с 1-го или последнего элемента, производится попарное сравнение элементов и, если предыдущий больше последнего, то они меняются местами. Фрагмент.
    for i:=1 to n-1 do
        for j:=i+1 to n do
    if f[j] 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];
    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.

    § Составить программу Абстракция, которая выводит на экран всевозможные графические фигуры.

    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); {Рисует прямоугольник}
     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;

    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.

                                                            § Составить программу Абстракция, которая выводит на экран всевозможные графические фигуры.

    Свойства алгоритма

    К алгоритму решения задач предъявляются высокие требования. Он должен обладать дискретностью, массовостью, компактностью, детерминированностью и результативностью.
    Дискретность алгоритма определяет то, всякий алгоритм имеет прерывистый, дискретный характер, т.е. представляет собой последовательность выполненных один за другим отдельно законченных шагов.
    Массовостью
    алгоритма называется его способность быть пригодным для решения широкого класса задач данного типа.
    Компактностью
    алгоритма называется его краткость, свойство минимальности инструкций. Наиболее удачно составленным алгоритмом считается алгоритм, обладающий компактностью и минимальностью количества вычислений при обязательной массовости алгоритма.
    Детерминированностью (определенность) алгоритма  - это  строгая определенность (однозначность предписываемых действий в каждой инструкции алгоритма), конкретность, чтобы в его записи не оставалось место двусмысленности и произвольному толкованию.
    Результативностью алгоритма называется свойство обеспечения  нужного результата за конечное число шагов, если данные принадлежат области исходных данных, которыми определена массовость алгоритма.
    Понятность алгоритма – это обязательность составления алгоритма учетом системы команд исполнителя, т.е. алгоритм должен быть зафиксирован в той форме, которая будет понятна исполнителю.
    Алгоритмы можно разделить на следующие виды:
    § Вычислительные (задающие процессы вычислений на PC)
    § Диалоговые (алгоритмы ведения диалога с PC)
    § Графические (алгоритмы построения графических изображений на дисплеях PC)
    § Обработки данных
    § Управления роботами, станками и т.д.
    Алгоритмы бывают 3 типов (типы вычислительных процессов): линейные, разветвляющиеся, циклические.
    Линейный алгоритм – это алгоритм, в котором последовательность операций при исполнении совпадает с порядком их следования в записи алгоритма и не зависит от конкретных значений входных данных (выполняются сверху вниз).

    Разветвляющийся алгоритм – это алгоритм, в котором последовательность операций определяется проверкой условия.
    Циклический алгоритм – это алгоритм, в котором неоднократно повторяются одни и те же предписания.
    Способы записи алгоритмов
    Существует несколько способов записи алгоритмов, отличающихся друг от друга наглядностью, компактностью, степенью формализации и другими показателями. Наибольшее распространение получили способы: графический, словесный, на  алгоритмическом языке,  в виде программ для ЭВМ.
    Графический – в виде блок-схем.
    Словесный – на естественном языке.
    На алгоритмическом языке – то есть на специальном языке. Алгоритмический язык – это система обозначений и правил для единообразной и точной записи алгоритмов и их исполнения.
    В виде программ для ЭВМ – значит на любом алгоритмическом языке программирования (Бейсик, Паскаль,Си++ т.д.), когда исполнителем является компьютер.
     Блок-схема - самый распространенный и понятный способ записи алгоритмов.
    Блок-схема – последовательность блоков, соединенных линиями передачи.

    ТЕМА №1: ЭТАПЫ РЕШЕНИЯ ЗАДАЧ НА ЭВМ. АЛГОРИТМИЗАЦИЯ. ОСНОВНЫЕ ПОНЯТИЯ. БЛОК-СХЕМЫ.

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5. Обучающие программы. Тесты.
    ЦЕЛИ И ЗАДАЧИ: Знакомство с основными понятиями: алгоритм, его виды и свойства, способы записи алгоритма.  Выработка навыков составления блок-схем.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Основные понятия алгоритмизации;
    - Способы записи алгоритмов;
    - Какие существуют виды алгоритмов;
    - Элементы, используемые в блок-схемах.
    Учащиеся должны уметь:
    - Давать определения понятия «алгоритм»;
    - Приводить примеры линейных, разветвляющихся и циклических алгоритмов;
    - Называть свойства алгоритма;
    - Составлять блок-схемы решения задач.
    ПЛАН-СОДЕРЖАНИЕ УРОКА
    Этапы решения задач на ЭВМ:
    - Чёткая формулировка задачи;
    - Постановка задачи;
    - Разработка сценария;
    - Разработка алгоритма решения задачи;
    - Программирование;
    - Тестирование и отладка программы;
    Постановка задачи  включает в себя определение входных и выходных данных, выбор метода решения и языка программирования, подготовка контрольного примера для проверки правильности работы программы.
    Сценарий – это описание интерфейса между пользователем программного продукта и персональным компьютером.
    Алгоритм – это последовательность действий, приводящих к решению поставленной задачи за конечное число шагов.
    Программирование – это перевод алгоритма на выбранный язык программирования, создание текстового файла, который при запуске через соответствующий транслятор выдает решение задачи;

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

    Алгоритмизация.

    Алгоритм - это и есть совокупность строгих предписаний-приказов для исполнителя, выполняя которые он (исполнитель) можно достичь цели, в частности решить задачу, составив программу на языке Паскаль (Исполнитель - это объект, который может выполнять какое-то действия, выполняя заданный алгоритм).

    Каждое такое предписание называется командой. Порядок команд в алгоритме очень важен.

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

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

    ТЕМА №2: РАБОТА В СРЕДЕ TURBO-PASCAL

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
    ЦЕЛИ И ЗАДАЧИ: Знакомство с порядковыми транслятор, компилятор, интерпретатор; со средой Turbo-Pascal; правилами набора и корректировки текста; с порядком выполнения и отладки программы.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Что такое транслятор, компилятор, интерпретатор;
    - Какие загрузить Turbo-Pascal;
    - Элементы главного меню редактора Turbo-Pascal;
    - Правила набора и корректировки текста программы;
    - Что такое пошаговое выполнение программы и ее трассировка;
    - Как сохранять и вызывать программу, а так же запускать на выполнение.
    Учащиеся должны уметь:
    - Работать в среде Turbo-Pascal;
    - Набирать, корректировать и отлаживать программы;
    - Работать одновременно с несколькими окнами;
    - Пользоваться «горячими» клавишами;
    - Пользоваться справочной системой Turbo-Pascal.
    ПЛАН-СОДЕРЖАНИЕ УРОКА

    Транслятор, компилятор, интерпретатор.
    Программы, написанные на языке программирования, в компьютере должны обязательно проходить процесс преобразования или трансляции. Осуществляется это с помощью специальных программ (трансляторов).
    Транслятор (англ, translator — переводчик) - это программа-переводчик. Она преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд.
    Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.
    Компилятор (англ, compiler — составитель, собиратель) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется (файл с расширением ЕХЕ).

    Интерпретатор (англ, interpreter — истолкователь, устный переводчик) переводит и выполняет программу строка за строкой.

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

    Turbo Pascal ориентирован либо на компиляцию, либо на интерпретацию. Для разработки и тестирования программы можно воспользоваться интерпретатором, а затем откомпилировать отлаженную программу, чтобы повысить скорость ее выполнения.

    Среда Turbo Pascal

    Чтобы с большей эффективностью разрабатывать программы, нужно хорошо знать среду Turbo Pascal и уметь в ней работать. Программы пишутся и отлаживаются в редакторе, который вызывается из файла Тurbo.exe. Тurbo.exe находится в подкаталоге BIN каталога Pascal.

    После загрузки  редактора Тurbo.exe можно в рабочем поле набирать программу или корректировать ее с помощью  клавиатуры или пунктов меню. Строка главного меню расположена в верхней части экрана:

    Кнопка, закрывающая окно программы.                                  Стрелка для увеличения размера окна

    ТЕМА №2: РАБОТА В СРЕДЕ TURBO-PASCAL ТЕМА №2: РАБОТА В СРЕДЕ TURBO-PASCAL
    ТЕМА №2: РАБОТА В СРЕДЕ TURBO-PASCAL 



    Турбо-среда предоставляет удобные средства работы с программой: ее хранение, запуск на счет, отладку и т. д. Доступ к этим средствам осуществляется через главное меню, которое состоит из следующих опций:

    File

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

    Edit

    Позволяет выполнять все основные операции редактирования текста (копировать, восстанавливать, удалять фрагменты текста, а так же восстанавливать первоначальный вариант редактируемого текста).

    Search

    Позволяет осуществлять поиск фрагментов текста и при необходимости производить замену найденного фрагмента новым.

    Run

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

    Compile

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

    Debug

    Содержит команды, облегчающие процесс поиска ошибок в программе (Breakpoints —точки остановки, окно отладки Watch, окно используемых подпрограмм, окно регистров, окно выходных результатов и некоторые другие).

    Tools

    Позволяет выполнять некоторые программы, не выходя из Среды Турбо Паскаля.

    Options

    Позволяет установить необходимые для работы параметры компилятора и самой среды.

    Windows

    Позволяет выполнять все основные операции с окнами (открывать, закрывать, перемещать, изменять размер).

    Help

    Позволяет получить имеющуюся в системе справочную информацию. Необходимое подчиненное меню активизируется (открывается).

    <


    Войти в выбранное меню можно при помощи комбинации клавиш [Alt+клавиша первой буквы имени подчиненного меню], а также путем последовательной активизации клавиш [F10] и клавиши первой буквы имени подчиненного меню. Выйти из подчиненного меню можно, нажав клавишу [ESC].

    Выход из Турбо-среды осуществляется нажатием Alt—X.

    Удобным способом создания новых программ является модификация ранее созданных. Основной формой хранения текста программы являются файлы — поименованная область внешней памяти. Для этого необходимо научиться записывать программы в файлы, читать из файлов и т. д. Для этого необходимо пользоваться опциями подменю File:

     

    New

    Новый файл

    Очищает память редактора и переводит его в режим создания нового файла. Вновь создаваемому файлу присваивается имя NONAME.PAS, которое можно изменить при записи файла на диск.

    Open

    F3 Читать файл

    На экране появится окно со списком файлов. В нем можно выбрать необходимый файл, который загружается в память редактора Турбо-Паскаль и таким образом делает его доступным для возможных изменений, а также прогона или отладки программы.

    Save

    F2 Сохранить файл

    Переписывает файл из памяти редактора на диск. Файл записывается под своим именем, однако, если к этому моменту имя файла было NONAME.PAS, среда запросит, хотите ли Вы его переименовать. Опцию можно вызвать из режима редактирования с помощью клавиши F2.

    Save as

    Сохранить с новым именем

    Переименовывает редактируемый файл и записывает его на диск под новым именем.

    Save all

    Сохранить все в окнах

    Записывает содержимое всех окон редактора в соответствующие дисковые файлы.

    Change dir

    Смена каталога

    Позволяет изменить установленный по умолчанию диск и/или каталог.

    (см. рис. ниже)

    Print/Print setup...

    Печать файла

    Позволяет напечатать файл на принтере.

    DOS shell

    Выход в DOS

    Позволяет временно выйти из Турбо-Паскаля без выгрузки его из памяти. После такого выхода вы получаете доступ ко всем командам операционной системы DOS. Для возврата в Турбо-Паскаль достаточно ввести команду EXIT, и экран тотчас же окажется в том состоянии, которое было перед вызовом этой опции.

    Exit

    Alt-X Выход

    Осуществляет выход из Турбо-Паскаля и выгрузку его из памяти. Эту опцию можно вызвать непосредственно из режима редактирования с помощью комбинации ALT-X.

    <


    ТЕМА №2: РАБОТА В СРЕДЕ TURBO-PASCAL







    Набор текста программы

    Перед началом набора программ в редакторе Турбо Паскаль необходимо провести установку (или проверку) опций конфигурации редактора:

    - войти в меню Option;

    - открыть дополнительное меню Environment;

    - проверить установки в окне Preferences:



                  ТЕМА №2: РАБОТА В СРЕДЕ TURBO-PASCAL



    Для набора текста программы требуется открыть рабочее окно (новое или с уже набранной программой).

    Максимальная длина строки редактора составляет 249 символов. Вы получите сигнал, если попытаетесь печатать больше. Однако компилятор будет обнаруживать только до 126 символов. Ширина окна редактора-77 колонок. Если вы напечатали последнюю 77 колонку, то введённый Вами ранее текст по мере печати будет сдвигаться влево.

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

    Набор каждой строки программы завершается нажатием клавиши Enter.



    При наборе текста программы полезно пользоваться следующими «горячими» клавишами:



    Ins (Ctrl+V)

    изменение режима «Вставка/Замена»

    Del

    удаление символа над курсором

    BackSpase

    удаление символа перед курсором

    Home/ End

    перенос курсора в начало/конец текущей строки

    PgUp/PgDn (Ctrl+R/C)

    перенос курсора на предыдущую/следующую страницу файла (программы)

    Ctrl+PgUp/PgDn

    перенос курсора в начало/конец файла

    Ctrl+ Home/ End

    перенос курсора в начало/конец экрана

    Left/ Right

    перенос курсора на один символ влево/вправо

    Ctrl+ Left/ Right

    перенос курсора на одно слово влево/вправо

    Ctrl+W/Z

    экран сдвигается вверх/вниз по тексту (при этом курсор неподвижен)

    Shift+Left/ Right

    выделение символов слева/справа от текущего символа

    Shift +Up/Dn

    выделение строк вниз/вверх от текущей строки

    Ctrl+Y

    удаление текущей строки

    Alt+ BackSpase

    восстановление удаленной информации

    Ctrl+T

    удаление слова справа от курсора

    Ctrl+Q+Y

    удаление части строки от курсора до конца строки

    Ctrl+N

    вставка строки

    Ctrl+Ins

    копирование выделенного блока в буфер обмена

    Shift+Ins

    вставка информации из буфера обмена

    Shift+ Del

    перенос выделенного блока в буфер обмена (удаление с сохранением в памяти)

    Ctrl+ Del

    полное удаление выделенного блока

    F5/F6

    перемещение по открытым окнам с программами

    Alt+ F3

    закрытие текущего окна

    F5

    развернуть окно на весь экран

    Ctrl-F2

    удаление голубой полосы

    Ctrl+F8

    удаление красной полосы

    <




    Выполнение программы

    Турбо- Паскаль позволяет выводить на экран несколько окон с программами одновременно. Выполнять можно программу, которая находится в активном (текущем) окне. Признак активного окна — двойная рамка вокруг него.

    Для выполнения программы надо выйти в меню и в пункте Run выполнить команду Run (или одновременно нажать клавиши Ctrl + F9), при этом опция  Destination из меню Options/Compiler должна быть Memory. Система сначала запускает транслятор (интерпретатор), который переводит программу с Паскаля на язык машинных кодов и ищет синтаксические ошибки в программе. Если ошибки найдены, то программа не будет выполняться, произойдет возврат в редактор. Поверх текста программы появляется красная строка с сообщением об ошибке. После нажатия Esc окно исчезает, курсор устанавливается в строку с ошибкой. Для получения информации об ошибке надо нажать Ctrl+F1.

    Когда все ошибки исправлены, программа начинает выполняться. Просмотреть результаты работы можно, нажав Alt+F5 (выводится окно пользователя). Возврат обратно в окно редактора – нажатие любой клавиши.

    Прерывание работы «зацикленной» программы - Ctrl +Break.



    Отлаженную программу компилируют следующим образом:

    - Зайти в меню Compiler;

    - Установить в области Destination значение Dick;

    - Компиляция без запуска программы  - Alt+F9;

    - Компиляция с одновременным запуском программы на выполнение - Ctrl + F9.

    Работа со справочной системой Турбо-Среды

     Если Вы забыли, как точно пишется имя процедуры и какие аргументы ей требуются, то справочная система может Вам помочь. Ее можно  вызвать, нажав клавишу F1. Эта справка   является контекстно-зависимой, то есть можно получать информацию о текущем объекте.  Передвигая курсор по тексту справки, выбирая те или иные отмеченные элементы и нажимая затем клавишу Enter, можно получить более подробную информацию.


    Если курсор не находится на зарезервированном слове и транслятор ошибок не обнаружил, то нажатие комбинации клавиш Ctrl+Fl приводит к выдаче предметного указателя справок (зарезервированных слов, операторов и функций, и т.д.).

    Двойное нажатие на Fl приводит к вызову меню доступных справок. Это меню построено по иерархическому принципу. Передвижение по нему вверх производится клавишами Alt+F1.                                        

    В Турбо Паскале имеется возможность переноса текста из справки в редактируемый текст:

    - выделяем фрагмент справки стрелками, удерживая клавишу Shift;

    -  отмеченный фрагмент комбинацией Ctrl+Ins;

    - переходим в редактор клавишами Alt+l (номер окна);

    - копируем фрагмент на место - Shift+Ins.



    Справочная система разбита на несколько подразделов, список которых можно увидеть в меню  Help:

    Contents

    вызывает экран содержимого справочника Borland Pascal Help

    Index

    выводит список ключевых слов, по которым имеется информация в справочной системе (Shift+F1)

    Topic search

    выводит справочную информацию о термине, на котором расположен курсор (Ctrl+F1)

    Previous topic

    выводит содержимое предыдущего окна информационной помощи (Alt+F1)

    Using help

    выводит справочные сведения о системе контекстной помощи

    Files…

    позволяет подключить к системе Help другие справочные файлы

    Compiler directives

    выводит список директив компилятора

    Reserved words

    выводит список зарезервированных слов

    Standart units

    выводит список стандартных модулей

    Turbo Pascal language

    выводит список основных элементов ТП 7.0

    Error message

    выводит справочную информацию об ошибках

    About…

    выводит справочную информацию о самом пакете ТП 7.0.

    <


    Отладка программы

    Турбо- Паскаль может обнаружить ошибки на этапе компиляции и при выполнении программы. В первом случае это синтаксические ошибки типа пропущенной точки с запятой, скобки или написанного с ошибкой служебного слова. На стадии выполнения обнаруживаются такие ошибки, как попытка деления на 0 или извлечения квадратного корня из отрицательного числа. Однако вы можете допустить ошибки, которые Турбо-Паскаль не обнаружит. (Например, если при вычислении y=X2, было написано y:=sqrt(x)).

    Каждое из окон, с которыми вы работаете, занимает всю площадь экрана. Часто бывает полезно уменьшить размеры окон и вывести их на экран одновременно. Изменение размера окна производится мышью. Указатель мыши устанавливаете на правый нижний угол окна, нажимаете левую клавишу и, не отпуская клавишу, перетаскиваете угол окна в нужное положение. Все окно целиком можно переместить по экрану, перетаскивая его таким же образом за верхнюю строку. В любой момент вы сможете развернуть окно на весь экран, нажав клавишу F5, и таким же образом придать ему первоначальный размер. Прокручивать текст в окне можно при помощи полос прокрутки на правой и нижней стороне окна. Удаляется окно клавишами Alt+F3 или щелчком мыши по кнопке в левом верхнем углу окна.

    Перейти из одного окна в другое можно, щелкнув мышью в нужном окне или нажав на клавишу F6.

    Для отладки программ Турбо-Паскаль предлагает ряд средств: пошаговый режим выполнения программы (меню Run-Step Over или клавиша F8),  трассировка программы (меню Run-Trace into или клавиша F7). После компиляции программы Турбо-Паскаль остановится перед началом выполнения программы, а строку BEGIN выделит голубой полосой. Для следующего шага вновь нажмите на F8/ F7. Каждый раз выполняется очередная строка программы и выделяется строка, которая будет исполняться далее.

    Отличие этих режимов в том, что при пошаговом выполнение, подпрограммы выполняются как один оператор, а при трассировке – подпрограммы так же выполняются по шагам.


    В любой момент пошагового выполнения программы вы можете вместо F8/ F7 выбрать Run-Run (клавиши Ctrl+F9) и программа продолжит выполняться в обычном режиме. Чтобы прервать пошаговый режим (убрать голубую закраску строки), выберите Run-Program reset (клавиши Ctrl-F2).

    При пошаговом выполнении программы возникает необходимость следить, как изменяются в процессе выполнения программы значения тех или иных переменных. Для этого Турбо-Паскаль предлагает окна — окно наблюдений (меню Debug-Watch) и окно пользователя (меню Debug-Output). Чтобы было удобно работать, лучше измените размеры окон и расположить их все на экране.

    В  окне наблюдений можно задать имена тех переменных, за изменением которыми требуется проследить (меню Debug-Add watch или клавиши Ctrl-F7). В диалоговом окне вводится имя переменной, если переменных несколько, процедура повторяется.

    При отладке в пошаговом режиме удобно пользоваться точками прерывания (Breakpoints). До этой точки (строки программы) можно выполнять программу в обычном режиме (через Ctrl-F9), а дальше в пошаговом (через F7). Устанавливаются точки прерывания нажатием Ctrl+F8, когда курсор стоит на выбранной строке (строка заливается красным цветом). Убираются они так же через Ctrl+F8.

    Еще один способ указать Турбо-Паскалю место прерывания выполнения программы — Run-Go to cursor (Иди до курсора). Нужно установить курсор в нужную строку и нажать F4. Программа будет выполняться до этой строки. Можно комбинировать различные способы выполнения программы — Ctrl-F9, F7 и F4.

    Кроме того, можно использовать для отладки не системные средства, а включают в программу дополнительные операторы Write и ReadLn. Когда программа будет отлажена, эти дополнительные операторы убирают.

    ЗАМЕЧАНИЕ. Прежде чем проводить пошаговую отладку программы или  трассировку, необходимо убедиться, что опция Options/Debugger/Integrated активизирована

    ТЕМА№3:ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
    ЦЕЛИ И ЗАДАЧИ: Знакомство с основными понятиями языка Turbo-Pascal.  Выработка навыков работы  в Turbo-Pascal. Решение практических задач с использованием операторов ввода-вывода.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Основные понятия языка Turbo-Pascal;
    - Структура программы Turbo-Pascal;
    - Операторы ввода-вывода:
    - Дополнительные арифметические операции и функции, преобразования числовых переменных;
    - Как генерировать случайные числа.
    Учащиеся должны уметь:
    - Составлять простейшие программы с использование операторов присваивания, ввода и вывода;
    - Составлять простейшие программы с использованием дополнительных арифметических операций и функций;
    - Сохранять, загружать и корректировать программы;
    - Преобразовывать числовые переменные;
    - Работать в редакторе Turbo-Pascal;
    - Выбирать случайные числа из заданного промежутка и манипулировать с ними.
    ПЛАН-СОДЕРЖАНИЕ УРОКА
    1. Основные понятия:
    Язык Т. Паскаль разработан в 1968 – 71 гг. Никлаусом Виртом, профессором швейцарского университета.
    алфавит Turbo Pascal:
    ü латинские буквы от A до Z
    ü арабские цифры 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    ü знаки препинания . , :  ; ..
    ü знаки арифметических операций + – * /
    ü знаки логических операций  >  <  =  >= <=  <>

    ü специальные символы (   ) {   } [   ] ' := (*   *)

    - основные элементы Паскаля:

    Идентификатор – последовательность латинских букв, арабских цифр, знаков подчёркивания. Начинается с латинской буквы. Длина до 127 символов. Используется в качестве имён переменных, меток, программ и подпрограмм. Нельзя в качестве идентификаторов использовать зарезервированные слова.

    Зарезервированные слова – слова, используемые в операторах, названиях операций, функций и т. п. Всего их около 80. Например, begin, sin, while.

    Константы – постоянные величины. Встречаются числовые (например, 2345, -67, 34.77) и текстовые константы (например, 'const', 'константа'). В числовых константах вместо запятой используется точка. В текстовых константах возможно использование кириллицы. Текстовые константы заключаются в апострофы.

    Переменные – это идентификаторы (имена), используемые для обозначения исходных данных и результатов вычислений. Переменные в ходе выполнения программы могут менять значения (например, A, A1, X21,Z).

    Выражение – последовательность переменных и числовых констант, объединённых знаками арифметических (арифметическое выражение, например, Pi*r+1/2.5,  Х/5 + 2.5 0) или арифметических и логических операций (логические выражения, например, Х + 2.5 = 0,  x+1>=12). Выражения всегда записываются в строчку, указывая все арифметические операции, включая знак умножения (например, математическое выражениеТЕМА№3:ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ записывается – (X+Y)/2.5-3*Sqrt(X*X-Y*Y)). Математическое  уравнение y= –3x3 + 0,475x – 45,5 записывается  –  y:=–3*x*x*x+0.475*x–45.5;)

    Комментарии – это пояснения, вставляемые в текст программы. Комментарий -  любой текст, заключённый в {   } или (*   *). Комментарии не выполняются программой.

    Оператор – это инструкция, которую должен выполнить Turbo Pascal. Программа состоит из последовательности операторов.

    Операторы. Исполняемые операторы должны заканчиваться – ; Существует несколько типов операторов:


    Оператор присваивания – это последовательность из переменной, знака присваивания ( := ) и арифметического выражения. Например, x:=x+1;

    Структурный оператор – это оператор, состоящий из нескольких зарезервированных слов и логических проверок. К ним относятся операторы циклов и условные операторы.

    Нестандартные операторы – это подпрограммы, оформленные стандартным образом и записанные в библиотеки (модули). Вызываются при указании имени и параметров.

    Составной оператор – это группа операторов, заключённая между begin … end;

    Begin

    Оператор 1; Оператор 2; … Оператор n;

    End;

    Пустой оператор – оператор Begin End;, не выполняющий никакого действия.

    3. Встроенные стандартные математические функции, используемые в Turbo Pascal.

    Используются в арифметических выражениях.

    Функция

    Назначение

    Тип

    аргумента

    Тип функции

    Abs(x)

    Вычисление абсолютного значения x

    вещественный

    целый

    вещественный

    целый

    sqr(x)

    Вычисление квадрата x

    вещественный

    целый

    вещественный

    целый

    sqrt(x)

    Вычисление квадратного корня из x

    вещественный

    целый

    вещественный

    вещественный

    sin(x)

    Вычисление синуса x

    вещественный

    целый

    вещественный

     ТЕМА №4: ПРОГРАММИРОВАНИЕ НА

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
    ЦЕЛИ И ЗАДАЧИ: Знакомство с порядковыми типами данных и основными операторами ветвления языка Turbo-Pascal.  Выработка навыков работы  в Turbo-Pascal. Решение практических задач с использованием операторов ветвления.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Какие существуют типы данных;
    - Что такое порядковые типы переменных;
    - Какие типы переменных может задавать программист;
    - Операторы условного и безусловного перехода;
    - Что такое метка и в каком месте программы описываются метки,
    - Как составить программы, использующие алгоритм ветвления, и какие операторы при этом использовать;
    - Когда в операторах ветвления используются операторные скобки;
    - Принцип организации движения графических фигур.
    Учащиеся должны уметь:
    - Задавать и уметь использовать перечисляемые и порядковые типы данных;
    - Использовать операторы ветвления при составлении программ;
    - Составлять программы с операторами goto и halt;
    - Уметь пользоваться функцией readkey;
    - Составлять программы с использование операторов условного и безусловного перехода.
    ПЛАН-СОДЕРЖАНИЕ УРОКА

    ТЕМА №5: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
    ЦЕЛИ И ЗАДАЧИ: Знакомство с операторами цикла языка Turbo-Pascal.  Выработка навыков работы  в Turbo-Pascal. Решение практических задач с использованием операторов цикла.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Что такое цикл;
    - Три разновидности операторов цикла;
    - В чем отличия операторов цикла с предварительным и последующим условием;
    - Какой тип должна имеет переменная цикла с параметром;
    - Когда в операторах цикла и ветвления используются операторные скобки;
    - Принцип организации движения графических фигур.
    Учащиеся должны уметь:
    - Использовать циклы при составлении программ;
    - Правильно составлять и использовать условия в циклах WHILE или REPEAT;
    - Составлять программы с использование операторов цикла.
    ПЛАН-СОДЕРЖАНИЕ УРОКА

    ТЕМА №6: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
    ЦЕЛИ И ЗАДАЧИ: Дать основные понятия подпрограмм (процедур и функций). Познакомить с видами формальных параметров: параметры-значения, параметры-переменные. Научить различать фактические и формальные параметры. Знакомство с понятием рекурсии. Выработка навыков составления программ с использованием процедур и функций.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Что такое подпрограмма;
    - Что такое процедура;
    - Для чего используются процедуры;
    - Что такое формальные  и фактические параметры;
    - Чем отличается задание параметров-значений от параметров-переменных;
    - В каком месте программы ставится описание процедур;
    - Как вызывается процедура;
    - Структуру процедуры.
    - Что такое функция;
    - Чем отличаются процедуры от функций,
    - Для чего используются функции;
    - Чем отличается заголовочная строка функции от заголовочной строки процедуры;
    - В каком месте программы ставится описание функции;
    - Как вызывается функция;
    - Структуру функции;
    - Что такое рекурсия;
    - Для чего и как используется опережающее описание подпрограммы.
    Учащиеся должны уметь:
    - Правильно описывать процедуры и функции;
    - Правильно вызывать процедуры и функции;

    - Различать формальные и фактические параметры;

    - Правильно описывать параметры-значения и параметры

    - Различать формальные и фактические параметры;

    - Использовать простейшие рекурсии при составлении программ

    ПЛАН-СОДЕРЖАНИЕ УРОКА

    Подпрограммы.

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

    Процедуры.

    Процедура (подпрограмма)

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

    Преимущества использования процедур - уменьшение объем программы, сокращение времени на отладку.

    Принцип работы процедуры:

    Выполнение программы начинается с выполнения основной части программы. Как только появляется необходимость  в выполнении процедуры, она вызывается по имени с передачей  входных данных. После выполнения процедура передает в основную часть программы выходных данных (результатов), в то место, откуда была вызвана процедура.

    Затем продолжается выполнение основной части  программы.

    Процедура оформляется подобно основной программе:

    Раздел описаний основной программы

    Заголовок процедуры

    Procedure имя

    (список параметров);

    Описываются формальные параметры

    Раздел описаний

    label …;

    Var …;

    Раздел операторов процедуры

    Begin



    end;

    Описание функций

    Раздел операторов основной программы

    Procedure имя (формальные параметры);

    Раздел описаний

    Begin

    Раздел операторов

    End;

    Все переменные, представленные в разделе описаний основной программы называются глобальными. Они действуют как в разделе операторов основной программы, так и в любой подпрограмме.


    Параметры (переменные), определяемые при описании процедуры называются формальными.

    Параметры (переменные), задаваемые при вызове процедуры называются фактическими.

    Формальные параметры (переменные, описываемые в процедуре) делятся на параметры - значения и параметры - переменные

    Параметры-значения  – передают информацию только в процедуру (входные), описываются как переменные с указанием типа (без зарезервированного слова Var).

    Параметры-переменные – передают информацию, как в процедуру, так и обратно (выходные), их описание начинается со слова Var, затем следует список переменных с указанием типа.

    Пример:

    Procedure sterline (len: integer); - параметры-значения.

    Procedure stl (l: integer, Var n integer); - параметры-значения и параметры – переменные.

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

    Вызов процедуры подобно специальным операторам происходит по имени с указанием фактических параметров, например:

    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
    End;

    Begin

    Writeln (‘Введите числа’);

    Readln(x1,x2);

    Res:=Compare(x1,x2);

    Writeln(x1:6:2, res,x2:6:2);

    Readln; end.





    Рекурсия.

    Рекурсия – это вывоз подпрограммой

     (процедурой или функцией) самой себя.

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

    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;

    BEGIN



    A(J);



    END;

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

    При составлении программ обязательно использовать процедуры или функцию.

  • Найти разность двух факториалов F=m! – k!, используя функцию.


  • Uses crt;

    Var F,m,k:integer;

    Function Fact(n:integer):integer;

    Var P,i:integer;

    Begin

    P;=1;

    For i:=2 to n do

    P;=P*i;

    Fact:=P;

    End;

    Begin

    Read (M,K);

    F:=Fact(m) – Fact(K);

    Writeln (‘F=’,F:5);

    repeat until keypressed

    End.

  • Написать программу «Бегущие огни» с использованием процедуры рисования окружности.


  • uses crt,graph;

    var gd,gm,x:integer;

    begin

    gd:=detect;

    initgraph(gd,gm,'');

    x:=20;

    repeat

    repeat

    setcolor(4);

    circle(x,200,15);

    setfillstyle(1,3);

    floodfill(x,200,4);

    delay(8000);

    setcolor(0);

    circle(x,200,15);

    setfillstyle(1,3);

    floodfill(x,200,0);

    x:=x+40;

    until x>600;

    repeat

    setcolor(4);

    circle(x,200,15);

    delay(8000);

    setcolor(0);

    circle(x,200,15);

    x:=x-40;

    until x<20;

    repeat until keypressed;  end.

    Примеры программ с использованием рекурсий:

    Вычислить Xn:

    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.

    Подсчитать сумму N чисел Фибоначчи (1,1,2,3,5,8,13,..):

    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.

    Используя рекурсивную функцию получить подобную фигуру:

    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: ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
    ЦЕЛИ И ЗАДАЧИ: Знакомство с операторами графики языка Turbo-Pascal.  Выработка навыков работы  в Turbo-Pascal. Решение практических задач с использованием операторов графики.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Что такое графический режим;
    - Систему координат графического языка Turbo-Pascal;
    - Какие модули содержат графические процедуры (нестандартные операторы);
    - Основные операторы графики;
    - Как инициализировать и закрывать графический режим.
    Учащиеся должны уметь:
    - Задавать координаты  точек на экране монитора;
    - Грамотно инициализировать графический режим;
    - Правильно использовать операторы графики;
    - Составлять программы с использование операторов графики;
    ПЛАН-СОДЕРЖАНИЕ УРОКА
    Модули Turbo Pascal. Модуль crt. Модуль graph.
    В языке Turbo Pascal основная часть процедур и функций находится в так называемых модулях:
  • Модуль crt, содержащий процедуры и функции, организующие связь с консолью компьютера. Консолью компьютера называется его монитор и клавиатура.

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

  • Работа Turbo Pascal может быть организована в двух режимах (экранах).
  • Текстовой экран, в котором могут отображаться только символы (25 строк по 80 символов в каждой).

  • Графический экран, в котором изображение представляется в виде точек, именуемых пикселями. Размер этого экрана зависит от типа монитора, чаще всего 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 – цвет заполнения.

    - Процедура 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, верхняя грань «видна», иначе она не вычерчивается (случай, когда параллелепипед «накрыт» другим изображением).

    - Процедура 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);

    Принципы организации движения графических фигур:

    Можно оживить изображение на экране, если воспользоваться принципами анимации: нарисовать, стереть (нарисовать цветом фона),  нарисовать в новом месте и т.д.

    ТЕМА №8: ФАЙЛЫ. ТИПИЗИРОВАННЫЕ ФАЙЛЫ. ТЕКСТОВЫЕ ФАЙЛЫ.

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. ТР5.
    ЦЕЛИ И ЗАДАЧИ: Дать представление о файлах и средствах их обработки с помощью ТР5. Приобретение навыков составления программ с использованием файлов различного типа
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Что такое файл;
    - Какие бывают файлы;
    - Что такое файловая переменная;
    - Как описываются типизированные файлы;
    - Процедуры и функции работы с файлами;
    - Процедуры и функции работы с типизированными  и текстовыми файлами;
    - Как описываются текстовые файлы.
    Учащиеся должны уметь:
    - Правильно описывать типизированные и текстовые файлы;
    - Правильно пользоваться файловой переменной;
    - Составлять программы с использованием типизированных  и текстовых файлов;
    - Составлять простейшие программы с использованием процедур и функций работы с типизированными  и текстовыми файлами.
    ПЛАН-СОДЕРЖАНИЕ УРОКА
    Основные понятия
    Мы все время рассматривали задачи, в которых данные поступают с клавиатуры, а результаты выводятся на экран. Ни исходные данные, ни результаты не сохраняются. А если данных слишком много? Как записать их на диск? Для этого необходимо исходные данные и результаты оформить в виде файлов, которые хранятся на диске.
    Файлы –  это поименованная структура данных на техническом носителе, представляющая собой последовательность элементов (записей) одного типа или - это массив переменной длины неограниченного размера.

    Файл может быть компонентом другой структуры, но не должен входить в другой файл.

    Отличие файла от массива: размещение на внешнем носителе, длина файла не задается, место элемента не определяется индексом.

    Файлы бывают:

    - типизированные

    - нетипизированные

    - текстовые

    Файл объявляется в разделе описания переменных с указанием типа элементов файла.

    Например:

    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. Она не может входить в математические выражения

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

    При работе с файловыми переменными, используются специальные процедуры и функции:

    Процедура

    Назначение

    Замечание

    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);

     ТЕМА №8: ПРОГРАММИРОВАНИЕ НА

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. Turbo-Pascal 5.
    ЦЕЛИ И ЗАДАЧИ: Знакомство с понятием массив и способами их обработки. Познакомиться с базовыми алгоритмами работы с массивами. Выработка навыков составления программ с использованием массивов.
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Что такое массив;
    - Какие бывают массивы;
    - Чем отличаются одномерные и двухмерные массивы;
    - Как описываются массивы в программе;
    - Как обратиться к заданному элементу массива;
    - Алгоритм нахождения максимума или минимума  среди элементов массива;
    - Простейший алгоритм сортировки элементов одномерного массива.
    Учащиеся должны уметь:
    - Заполнять массивы с клавиатуры или случайными числами,  произвольным или заданным образом;
    - Распечатывать одномерные массивы в виде строки;
    - Распечатывать двухмерные массивы в виде таблиц;
    - Находить заданные элементы массива;
    - Заменять заданные элементы массива или производить с ними арифметические операции;
    - Менять местами элементы массива;
    - Находить сумму, произведение или экстремальные  элементы в массиве;
    - Сортировать одномерные массивы;
    - Составлять программы с использованием массивов.
    ПЛАН-СОДЕРЖАНИЕ УРОКА

    Основные понятия
    В Паскале, кроме простых типов данных (integer, real, char и т.д.), имеются и сложные типы. К ним относятся массивы.

    Массив (array, от французского – сплошной) – это область памяти, в которой размещается совокупность конечного числа данных одного типа с одним именем. Каждый элемент такой совокупности обозначается именем массива с индексом (номером элемента в массиве).

    Элемент массива – отдельная переменная, входящая в массив;

    Индекс (index) – это числовая константа или целочисленное арифметическое выражение (частный случай - целочисленная переменная), которым снабжаются элементы массива, чтобы отличать их друг от друга.

    Индекс элемента массива – номер элемента в массиве.

    Особенность массивов заключается в том, что все элементы массива являются данными одного типа (возможно и структурированного). При назначении массиву имени соблюдаются те же требования, какие предъявляются к именам переменных простых типов.

    a11

    a12



    a1n

    a21

    a22



    a2n









    am1

    am2



    amn

    В зависимости от количества используемых индексов, массивы могут быть одномерные (строка), двухмерные (таблица), трехмерные и т.д.

     ТЕМА №8: ПРОГРАММИРОВАНИЕ НА
    Двухмерный массив







    В одномерном массиве  для указания местоположения элемента достаточно одного индекса,

    В двухмерном  массиве – два индекса, для строк и граф. 

    Размерность

    массива определяется количеством индексов.

    Размер массива – диапазон изменения индексов массива.

    Размер одномерного массива – количество элементов, которое содержит массив.

    Размер двухмерного массива - количество элементов в сроках и графах таблицы и т.д.

    Описание массивов:


    ТЕМА №9: ДАННЫЕ ТИПА STRUNG.

    ПРОГРАММНО -  ДИДАКТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ: ЭВМ типа IBM. ТР5.
    ЦЕЛИ И ЗАДАЧИ: приобретение навыков составления программ с использованием данных типа STRING
    ТРЕБОВАНИЯ К ЗНАНИЯМ И УМЕНИЯМ:
    Учащиеся должны знать:
    - Что такое данные типа 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

    ТЕМА №9: ДАННЫЕ ТИПА STRUNG.

    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

    DELETE(S,M,N);

    Удаление части (N символов) строковой переменной  (S), начиная с символа M

    STR(V,S);

    Преобразование числовой переменной в строковую

    VAL(S,V,N);

    Преобразование строковой переменной в числовую. S - строка, V - числовая переменная, N - значение первого содержащего ошибку символа.

    Функции обработки строковых переменных:

    LENGTH(S)

    Определение количества символов строковой переменной S

    String

    Integer

    POS(S,T);

    Определение первого одинакового левого символа двух строк (строка S и подстрока T)

    String, String

    Integer

    CONCAT(S1,S2,…,SN);

    Склеивание строк

    String, …, String

    String

    COPY(S, M, N);

    Вырезка подстроки  (N символов) начиная с M-го символа из строковой переменной S

    String, Integer, Integer

    String

    ORD(X)

    Определение кода символа. X

    Char

    Integer

    CHR(X)

    Определение символа по его коду

    Integer

    Char

    SUCC(X)

    Нахождение следующего элемента

    Integer, Char

    Integer, Char

    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.

  • Подсчитать кол-во предложений. Конец предложения - ., !, ?


  • 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.

  • Разработать функцию удаления символов из строки.


  • 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.

  • Зашифровать текст, где каждый символ заменяется на символ, отстоящий по таблице 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.


    Тип массива

    Описание  массива
    1 способ
    2 способ
    одномерный:
    Type t=array[1..n] of тип;
     Var a:t;
    Var a: array[1..n] of тип;
    двухмерный
    Type р=array[1..n,1..m] of тип; Var a:р;
    Var а=array[1..n,1..m] of тип;
    трехмерный
    Type р=array[1..n,1..m,1..k] of тип; Var a:р;
    Var a=array[1..n,1..m,1..k] of
    Пример описания одномерного массива размерностью 20:

    type mas=array[1..20] of integer;
    var a : mas;
    mas – имя типа,
    a – имя переменной типа массив.
    Границы изменения индексов - от 1 до 20,  т.к. размерность 20 элементов
    const mas : array [1..7]
             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;

    Вещественный тип

    Single
    7-8 значащих цифр      -1.5·10-45  ...    3.4·10-48
    4 байт
    Real
    11-12 значащих цифр  -2.9·10-39  ...    2.9·10-38
    6 байт
    Double
    15-16 значащих цифр  -5.0·10-324  ... 1.7·10-308
    8 байт
    Extended
    19-20 значащих цифр  -1.9·10-4951  ... 1.9·10-4932
    10 байт
    6. Простейшие операторы работы в текстовом режиме.
    Имеется два режима работы - графический и символьный. При работе в символьном режиме экран содержит 24 строки по 80 символов. Начало отсчета - левый верхний угол экрана. Возможно использовать различные цвета, задаваемые названием цвета (например, blue, red) или цифрами от 0 до 15. Цвета от 0 до 7 - основные, следующие весемь цветов - аналогичны предыдущим, но с большей интенсивностью (яркостью):

    Номер-Цвет
    Константа модуля Crt
    Номер-Цвет
    Константа модуля Crt
    0 – чёрный
    Black
    8 – темно-серый
    DarkGray
    1 – синий
    Blue
    9 – светло-синий
    LightBlue
    2 – зелёный
    Green
    10 – светло-зелёный
    LightGreen
    3 – морской волны
    Cyan
    11 – светлый морской волны
    LightCyan
    4 – красный
    Red
    12 – светло-красный
    LightRed
    5 – фиолетовый
    Magenta
    13 – светло-фиолетовый
    LightMagenta
    6 – коричневый
    Brown
    14 – жёлтый
    Yellow
    7 – светло-серый
    LightGray
    15 – белый
    White


    Вещественный

    cos(x)
    Вычисление косинуса x
    вещественный
    целый
    вещественный
    вещественный
    arctan(x)
    Вычисление арктангенса x
    вещественный
    целый
    вещественный
    вещественный
    exp(x)
    Вычисление экспоненты (числа e=2,71828…) в степени x
    вещественный
    целый
    вещественный
    вещественный
    ln(x)
    Вычисление натурального логарифма x
    вещественный
    целый
    вещественный
    вещественный
    log(x)
    Вычисление десятичного логарифма x
    вещественный
    целый
    вещественный
    вещественный
    Pi
    Число p
    нет
    вещественный
    4. Структура программы:

    Заголовок программы (необязателен)
    Program <имя>;
    Раздел  описаний
    Список используемых модулей
    Uses ...;
    Метки
    Label ...;
    Константы
    Const ...;
    Типы
    Type ...;
    Переменные
    Var ...;
    Процедуры
    Procedure  ...;
    Функции
    Function  ...;
    Раздел операторов
    Begin
    <Операторы программы>
    End.

    5. Переменные. Описание переменных.
    Все переменные должны быть описаны с указанием типа:

    Возможная форма оператора: if <условие> then

    <оператор 1>;

    Пример использования оператора:
    Вычислите значение функции f(x) в зависимости от значения аргумента x.
    if x<0 then y=x;
    if x=0 then y=0;
    if x<0 then y=sqr(x);

    Вложенные операторы if
    Возможно использовать в качестве оператор1 или оператор2 других условных операторов:
    if <условие1> then if <условие2> then <оператор1> else <оператор2>;
    Вложенность операторов if неограниченна.
    4. Ветвление на несколько направлений (оператор – переключатель, или оператор выбора или оператор варианта):
    Позволяет выбрать из любого числа возможностей.
    case <переменная или выражение> of
                           <список значений выбора1>:<оператор1>;
                           <список значений выбора2>:<оператор2>;
                                              . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .               
                             <список значений выбора N>:<оператор N>;
                                     [else <оператор>]
                 end;
    Переменная
    может быть любого порядкового типа, кроме longint (word, boolean, integer, char… или перечисляемый тип). (см.приложение 1, СТРУКТУРА ТИПОВ ДАННЫХ)

    Список значений выбора - это значения, которые могут принимать переменная или выражение, перечисленные через запятую или, если значения принадлежат какому-либо интервалу, с использованием лексемы " . . " (1..7 или 'а' ..'м')
    Оператор - любой оператор, в том числе составной.
    Принцип работы оператора:
    ¨ Значение переменной или выражения сравнивается с предложенными списками значений
    ¨ Если найдено нужное значение, выполняется соответствующий оператор
    ¨ Если нужное значение не найдено в перечисленных списках, выполняется оператор после  else
    ¨ Если else отсутствует, то, когда нужное значение не найдено, выполняется следующий за case оператор.

    Практические задания:

    1. Отработка навыков использования операторов ветвления

    Составить программу движения символа * под управлением клавиш  2,4,6,8. Q – выход из программы.

    uses crt;

      label 1;

      var x,y:word;q:char;

    begin

      clrscr;

      x:=40;y:=12;

    1:textcolor(14);gotoxy(x,y);write('*');

      q:=readkey;

      textcolor(0);gotoxy(x,y);write('*');

        if q='2' then y:=y+1;

        if q='8' then y:=y-1;

        if q='4' then x:=x-1;

        if q='6' then x:=x+1;

        if (q='q') or (q=’Q’) then halt;

      goto 1;

    readkey;end.

    Составить программу подсчета суммы введенных с клавиатуры чисел. Признак конца ввода – число 0.

    program pt1;

     uses crt;

     label 1;

     var x,z:integer;t:char;

    begin   clrscr;

    writeln ('ПРОГРАММА ПОДСЧЕТА СУММЫ ВВЕДЕНЫХ ЧИСЕЛ.');

    gotoxy(50,22);writeln ('Выход из программы - число 0');

    1: write('Введите число'); read(x);

    if х=0 then goto 2 else begin z:=z+x; goto 1;end;                        

    2: writeln('сумма введенных чисел - ',z);

    readkey;end.

    Написать программу, которая проверяет, является ли четным введенное с клавиатуры число

    Uses crt;

     Var n:integer;

    Begin

     Readln(n);

     Write(‘число’, n,’-‘);

     If n mod 2=0 then writeln(‘четное’)

                  else writeln(‘нечетное’);

    readkey; End.

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

    Uses crt;

     Var month: integer;

    Begin

     Writeln (‘Введите номер месяца от 1 – 12);

     Readln(month);

       Case month of

         1,2,12: writeln(‘Зима’);

         3..5: writeln(‘Весна’);

         6..8: writeln(‘Лето’);

         9..11: writeln(‘Осень’);

       else writeln(‘число д.б. от 1 до 12’);

       end;

    readkey;end.

    2. Задача. Развивая предельно возможную скорость своего движения, жираф пробегает за 23 с 335,8 м. Заяц пробегает за 55 с 918,5 м. Кому из этих животных вы присвоите звание чемпиона, сопоставляя их скорости?

    Возможная форма оператора: if <условие> thenАлгоритм решения задачи в виде блок-схемы приведен ниже. Программу составить самостоятельно.





    Все имеющиеся символы имеют коды (таблица кодов ASCII).

    Есть функции работы с символьными переменными и их кодами.


    Задача MaxMin. Программа для поиска

    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] end;
        writeln ('Максимальный элемент=',max);
        writeln ('Номер максимального элемента=',nmax);
        writeln ('Минимальный элемент=',min);
        writeln ('Номер минимального элемента=',nmin);
     repeat until keypressed;  end.

    

        Программирование: Языки - Технологии - Разработка