Алфавит языка
1. Символы, используемые в идентификаторах
• латинские буквы (AZ)
заглавные и строчные буквы не различаются
• цифры
имя не может начинаться с цифры
• знак подчеркивания _
2. Разделители
• любой управляющий символ (коды от 0 до 31)
• пробел
• Комментарий – { }; * *
3. Специальные символы
• знаки пунктуации [ ],( ), { }, * *, :=, .. , #, $
• знаки операций: буквенные (not, div, or, mod) и
небуквенные (+, =, *, /, <, >, <>, <=, >=)
• зарезервированные слова (begin, end)
4. Неиспользуемые символы (буквы рус. алфавита, %, &)
Оператор цикла WHILE
while <условие> do begin
{тело цикла}
end;
Особенности:
• можно использовать сложные условия:
while (a
Цикл с условием
Особенности:
• условие пересчитывается каждый раз при входе в
цикл
• если условие на входе в цикл ложно, цикл не
выполняется ни разу
a := 4; b := 6;
while a > b do
a := a – b;
• если условие никогда не станет ложным, программа
зацикливается
a := 4; b := 6;
while a < b do
d := a + b;
Сколько раз выполняется цикл?
a := 4; b := 6;
while a < b do a := a + 1;
a := 4; b := 6;
while a < b do a := a + b;
a := 4; b := 6;
while a > b do a := a + 1;
a := 4; b := 6;
while a < b do b := a - b;
a := 4; b := 6;
while a < b do a := a - 1;
2 раза
a = 6
1 раз
a = 10
0 раз
a = 4
1 раз
b = -2
зацикливание
Цикл WHILE
Задача: Ввести целое число (<2000000) и определить число
цифр в нем.
Идея решения: Отсекаем последовательно последнюю
цифру, увеличиваем счетчик.
n
123
12
1
0
count
0
1
2
3
Проблема: Неизвестно, сколько шагов надо сделать.
Решение: Надо остановиться, когда n = 0, т.е. надо делать
"пока n <> 0".
Алгоритм
начало
ввод n
count := 0;
обнулить счетчик цифр
выполнять
"пока n <> 0"
n <> 0?
нет
да
count := count + 1;
n := n div 10;
count
конец
Программа
n1 := n;
, n1: integer;
uses crt;
var n, count: integer;
Begin
clrscr;
writeln('Введите целое число');
read(n);
count := 0;
while n <> 0 do begin
count := count + 1;
n := n div 10;
end;
writeln('В числе ', n, ' нашли ',
count, ' цифр');
readkey;
end.
выполнять
"пока n <> 0"
n1,
?
Какая ошибка?
Замена for на while и наоборот
for i:=1 to 10 do begin
{тело цикла}
end;
for i:=a downto b do
begin
{тело цикла}
end;
i := 1;
while i <= 10 do begin
{тело цикла}
i := i + 1;
end;
i := a;
while i >= b do begin
{тело цикла}
i := i - 1;
end;
Замена цикла for на while возможна всегда.
Замена while на for возможна только тогда, когда
можно заранее рассчитать число шагов цикла.
Задания для самостоятельной работы
1. Найти сумму чисел от 1 до 10
2. Напечатать таблицу умножения на
введенное с клавиатуры число,
например ввели 7
7х1=7
7х2=14
…….
7х9=63
Цикл с постусловием (цикл REPEAT)
Цикл с постусловием – это цикл, в котором проверка
условия выполняется в конце цикла.
Особенность: Один раз тело цикла надо
сделать в любом случае => проверку условия
цикла надо делать в конце цикла (цикл с
постусловием).
Цикл с постусловием – это цикл, в котором проверка условия выполняется в конце цикла.
Цикл с постусловием: алгоритм
нет
начало
ввод n
n > 0?
да
основной
алгоритм
конец
тело цикла
условие ВЫХОДА
блок "типовой
процесс"
Программа
program qq;
var n: integer;
begin
repeat
writeln('Введите положительное число');
read(n);
until n > 0;
until n > 0;
... { основной алгоритм }
end.
Особенности:
условие ВЫХОДА
• тело цикла всегда выполняется хотя бы один раз
• после слова until ("до тех пор, пока не…")
ставится условие ВЫХОДА из цикла
Задания для самостоятельной работы
1. Составить программу , запрашивающую числа до тех пор, пока не ввели числа
большего 50.
2. Составить программу, печатающую слово «Привет» и запрашивающую
«Повторить Д/Н?». Программа завершает выполнение в случае нажатия Н,
если Д, то повторяет.
Оператор выбора CASE
Особенности:
• после case может быть имя переменной или
арифметическое выражение целого типа (integer)
case i+3 of
1: begin a := b; end;
2: begin a := c; end;
end;
или символьного типа (char)
var c: char;
...
case c of
'а': writeln('Антилопа');
'б': writeln('Барсук');
else writeln('Не знаю');
end;
Оператор выбора
Особенности:
• если нужно выполнить только один оператор,
слова begin и end можно не писать
case i+3 of
1: a := b;
2: a := c;
end;
• нельзя ставить два одинаковых значения
case i+3 of
1: a := b;
1: a := c;
end;
Оператор выбора
Особенности:
• значения, при которых выполняются одинаковые
действия, можно группировать
перечисление
диапазон
смесь
case i of
1: a := b;
2,4,6: a := c;
10..15: a := d;
20,21,25..30: a := e;
else writeln('Ошибка');
end;
Оператор выбора CASE
Задача: Ввести номер месяца и вывести количество
дней в этом месяце.
Решение: Число дней по месяцам:
28 дней – 2 (февраль)
30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11
(ноябрь)
31 день – 1 (январь), 3 (март), 5 (май), 7 (июль),
8 (август), 10 (октябрь), 12 (декабрь)
Особенность: Выбор не из двух, а из нескольких
вариантов в зависимости от номера месяца.
Алгоритм
ни один
вариант не
подошел
да
да
D := 31;
D := 28;
да
D := 31;
начало
ввод M
M = 1?
нет
M = 2?
нет
M = 12?
нет
ошибка
конец
вывод D
оператор выбора
Программа
uses crt;
var M, D: integer;
begin
clrscr;
writeln('Введите номер месяца:');
read ( M );
case M of
2: begin D := 28; end;
4,6,9,11: begin D := 30; end;
1,3,5,7,8,10,12: D := 31;
else D := -1;
end;
if D > 0 then
writeln('В этом месяце ', D, ' дней.')
else
writeln('Неверный номер месяца');
readkey;
end.
ни один вариант
не подошел
Задания для самостоятельной работы
1. По введенному номеру от 1 до 7 определить день недели например 1 –
Понедельник и т.д.
2. Ставить программу , запрашивающую
возраст и при введении до 15 включительно
говорит «Привет», от 16 до 20 говорит
«друг», и говорит «Пока» в противном
случае.
Процедуры
Процедура – это вспомогательный алгоритм, который
предназначен для выполнения какойто законченной
последовательности действий.
• Для
исполнения
процедуры
необходимо сначала описать ее, а потом к ней
обращаться
подпрограммы
• Описание процедуры включает заголовок (имя) и
тело процедуры
• Заголовок состоит из зарезервированного слова
procedure, имени процедуры и заключенных в
скобки
с
указанием типа
списка формальных
параметров
Процедуры
Особенности:
• в процедуре можно объявлять дополнительные
локальные переменные, остальные процедуры не
имеют к ним доступа
локальные
переменные
program qq;
procedure A(x, y: integer);
var a, b: real;
begin
a := (x + y)/6;
...
end;
begin
...
end.
Процедуры
Задача: найти наибольшее из 4х чисел, используя
подпрограмму нахождения наибольшего из 2х чисел
program max;
uses crt;
var a,b,c,d,p,q,m: integer;
procedure bid(x,y: real; var z: real);
begin
if x>y then z:=x else z:=y
end;
begin
clrscr;
write(‘введите 4 числа:’);
readln (a,b,c,d);
bid (a,b,p);
bid (c,d,q);
bid (p,q,m);
writeln(‘наибольшее из 4-х чисел’; m);
readkey;
end.
Функции
–
это
вспомогательный
Функция
алгоритм
(подпрограмма), результатом работы которого
является некоторое значение.
Примеры:
x
sin
x
• вычисление , ,
• расчет значений по сложным формулам
• ответ на вопрос (простое число или нет?)
cos
x
Отличия
• в заголовке
• в теле функции: хотя бы раз имени функции должно
быть присвоено значение
Функции
Особенности:
• заголовок начинается словом function
Max (a, b: integer): integer;
function
• формальные параметры описываются так же, как и для
процедур
function qq( a, b: integer; x: real ): real;
a, b: integer; x: real
• в конце заголовка через двоеточие указывается тип
результата
function Max (a, b: integer): ;
integer
• функции располагаются ВЫШЕ основной программы
Функции
Особенности:
• можно объявлять и использовать локальные
переменные
function qq (a, b: integer): float;
var x, y: float;
begin
...
end;
• значение, которое является результатом, записывается в
переменную, имя которой совпадает с названием
функции; объявлять ее НЕ НАДО:
function Max (a, b: integer): integer;
begin
...
end;
Max := a;
Функции
Задача: найти наибольшее из 4х чисел, используя
подпрограмму нахождения наибольшего из 2х чисел
program max;
uses crt;
var a,b,c,d,p,q,m: integer;
function bid(x,y: real): real;
begin
if x>y then bid:=x else bid:=y
end;
begin
clrscr;
write(‘введите 4 числа:’);
readln(a,b,c,d);
p:=bid(a,b);
q:=bid(c,d);
m:=bid(p,q);
writeln(‘наибольшее из 4-х чисел’;m);
readkey;
end.
Массивы
Массив – это группа однотипных элементов,
имеющих общее имя и расположенных в памяти
рядом.
Особенности:
• все элементы имеют один тип
• весь массив имеет одно имя
• все элементы расположены в памяти рядом
Примеры:
список учеников в классе
•
• квартиры в доме
• школы в городе
• данные о температуре воздуха за год
Объявление массивов
• определить имя массива
• определить тип массива
• определить число элементов
• выделить место в памяти
Массив целых чисел:
имя
начальный
индекс
конечный
индекс
тип
элементов
var A : array[ 1 .. 5 ] of integer ;
Размер через константу:
const N=5;
var A: array[1.. ] of integer;
N
Массивы
Объявление:
const N = 5;
var a: array[1..N] of integer;
i: integer;
Ввод с клавиатуры:
for i:=1 to N do begin
write('a[', i, ']=');
read ( a[i] );
end;
Поэлементные операции:
for i:=1 to N do a[i]:=a[i]*2;
Массивы
Задача: Заполнить массив из 5 элементов с клавиатуры и вывести
на экран сумму 2 и 5 элементов
uses crt;
var i,sum: integer; a: array[1..5] of integer;
begin
clrscr;
for i:=1 to 5 do
begin
write(‘Введите’, i, ‘элемент’); read (a[i]);
end;
sum:=a[2]+a[5];
write(‘Сумма 2 и 5 равна’, sum);
readkey;
end.
Задания для самостоятельной работы
1. Заполнить массив из 5 элементов и
вывести на печать сначала все, ниже
третий.
2. Заполнить массив из 5 элементов
с клавиатуры и найти их среднее
арифметическое.
Строковые величины
Строка – это последовательность символов
кодовой таблице.
Длина строки (количества символов) может лежать
в диапазоне 0..255
Для определения длины данных строкового типа
используется идентификатор string, за которым
следует максимальное значение длины строки
данного типа.
В программе значения переменных и констант типа
char (символьный) заключается в апострофы.
Например, st:=’река’
var s: string[20];
Символьные строки
Задача: ввести строку с клавиатуры и заменить все
буквы "а" на буквы "б".
program qq;
var s: string;
i: integer;
begin
writeln('Введите строку');
readln(s);
readln(s);
for i:=1 to Length(s) do
if s[i] = 'а' then s[i] := 'б';
writeln(s);
end.
writeln(s);
вывод строки
ввод строки
длина строки
Length(s)
Операции со строками
var s, s1, s2: string;
Запись нового значения:
s := 'Вася';
Объединение: добавить одну строку в конец
другой.
s1 := 'Привет';
s2 := 'Вася';
s := s1 + ', ' + s2 + '!';
'Привет, Вася!'
Подстрока: выделить часть строки в другую строку.
s := '123456789';
с 3его символа
s1 := Copy ( s, 3, 6 );
s2 := Copy ( s1, 2, 3 );
6 штук
'345678'
'456'
Удаление и вставка
Удаление части строки:
s := '123456789';
Delete ( s, 3, 6 );
6 штук
'123456789'
'129'
строка
меняется!
с 3его символа
Вставка в строку:
начиная с 3его символа
s := '123456789';
Insert ( 'ABC', s, 3 );
'12ABC3456789'
что
вставляем
куда
вставляем
Insert ( 'Q', s, 5 );
'12ABQC3456789'
Задания для самостоятельной работы
1. Ввели слово, определить его длину и
вывести 3 символ, а так же вывести
вырезку с 2 символа , длинной 5
символов.
2. Из слова «вирус» путем замены
букв получите слово «фокус».