Pascal (для 9-х классов)

advertisement
1
Настоящее пособие подготовлено в помощь учащимся и учителю ОИВТ по
изучению темы "Алгоритмы и исполнители".
При объяснении принципов построения алгоритмов использован алгоритмический язык. Основным языком программирования в пособии считается язык PASCAL.
Литература:
(PASCAL)
Методическое пособие для учащихся
9 общеобразовательных классов.
Составила учитель ОИВТ
Школы №73
Богданова О.А.
2007 г.
Воронеж
1. Л.З. Шауцукова Информатика. Учебное пособие для 1011 классов общеобразовательных учреждений. Москва «Просвещение» 2003 г.
2
§1. Понятие алгоритма, свойства алгоритма
Человек ежедневно встречается с необходимостью следовать тем или иным
правилам, выполнять различные инструкции и указания. В математике для решения типовых задач мы используем определенные правила, описывающие последовательности действий. Для решения задачи надо знать, что дано, что следует получить и какие действия и в каком порядке следует для этого выполнить. Предписание, определяющее порядок выполнения действий над данными с целью получения искомых результатов, и есть алгоритм.
алгоритм — заранее заданное понятное и точное предписание возможному исполнителю совершить определенную последовательность действий
для получения решения задачи за конечное число шагов.
Основные свойства алгоритмов следующие:
1. Понятность для исполнителя — исполнитель алгоритма должен понимать, как его выполнять. Иными словами, имея алгоритм и произвольный вариант исходных данных, исполнитель должен знать, как надо действовать для выполнения этого алгоритма.
2. дискретность (прерывность, раздельность) — алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или
ранее определенных) шагов (этапов).
3. определенность — каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
4. результативность (или конечность) состоит в том, что за конечное число
шагов алгоритм либо должен приводить к решению задачи, либо после конечного числа шагов останавливаться из-за невозможности получить решение с
выдачей соответствующего сообщения, либо неограниченно продолжаться в
течение времени, отведенного для исполнения алгоритма, с выдачей промежуточных результатов.
5. Массовость означает, что алгоритм решения задачи разрабатывается в
общем виде, т.е. он должен быть применим для некоторого класса задач, различающихся лишь исходными данными. при этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма.
§2. Способы записи алгоритмов.
На практике наиболее распространены следующие формы представления алгоритмов:
словесная (запись на естественном языке);
графическая (изображения из графических символов);
псевдокоды (полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирова-
ния, так и фразы естественного языка, общепринятые математические обозначения и др.);
программная (тексты на языках программирования).
2.1 Словесный способ записи алгоритмов.
Словесный способ записи алгоритмов представляет собой описание последовательных этапов обработки данных. Алгоритм задается в произвольном изложении на естественном языке.
Например. Записать алгоритм нахождения наибольшего общего делителя
(НОД) двух натуральных чисел (алгоритм Евклида).
Алгоритм может быть следующим:
1. задать два числа;
2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма;
3. определить большее из чисел;
4. заменить большее из чисел разностью большего и меньшего из чисел;
5. повторить алгоритм с шага 2.
2.2. Графический способ записи алгоритмов.
При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый
из которых соответствует выполнению одного или нескольких действий.
Такое графическое представление называется схемой алгоритма или блоксхемой. В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т.п.) соответствует геометрическая фигура, представленная в виде блочного символа. Блочные символы соединяются линиями
переходов, определяющими очередность выполнения действий. В таблице приведены наиболее часто употребляемые символы.
Название символа
Процесс
Обозначение и пример
заполнения
Пояснение
Вычислительное действие
или последовательность
действий
Решение
Проверка условий
Модификация
Начало цикла
3
Предопределенный процесс
Ввод-вывод
Вычисления по подпрограмме, стандартной подпрограмме
если—то;
если—то—иначе;
выбор;
выбор—иначе.
Ввод-вывод в общем виде
Школьный алгоритмический
Пуск-останов
Начало, конец алгоритма,
вход и выход в подпрограмму
Документ
Вывод результатов на печать
2.3. Псевдокод.
Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов.
В псевдокоде не приняты строгие синтаксические правила для записи
команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор
команд, рассчитанный на абстрактного исполнителя. Примером псевдокода является школьный алгоритмический язык.
§3. Основные алгоритмические конструкции: следование, ветвление, повторение
.Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных базовых (т.е. основных) элементов.
Логическая структура любого алгоритма может быть представлена
комбинацией трех базовых структур: следование, ветвление, цикл.
Характерной особенностью базовых структур является наличие в них одного
входа и одного выхода.
1. Базовая структура "следование". Образуется последовательностью действий, следующих одно за другим:
действие 1
действие 2
.........
действие n
2. Базовая структура "ветвление". Обеспечивает в зависимости от результата проверки условия (да или нет) выбор одного из альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу, так что работа алгоритма будет продолжаться независимо от того, какой путь будет выбран. Структура ветвление существует в четырех основных вариантах:
язык
1. если—то
если условие
то действия
все
2. если—то—иначе
если условие
то действия 1
иначе действия 2
все
3. выбор
выбор
при условие 1: действия 1
при условие 2: действия 2
............
при условие N: действия N
все
4. выбор—иначе
Язык блок-схем
4
Цикл типа повторять до.
Предписывает выполнять тело цикла пока не выполнится условие, записанное после слова до.
выбор
при условие 1: действия 1
при условие 2: действия 2
............
при условие N: действия N
иначе действия N+1
все
повторять
тело цикла
(последовательность действий)
до условие
3. Базовая структура "цикл". Обеспечивает многократное выполнение
некоторой совокупности действий, которая называется телом цикла. Основные разновидности циклов представлены в таблице:
Школьный алгоритмический язык
Язык блок-схем
Цикл типа пока.
Предписывает выполнять тело цикла до тех пор,
пока выполняется условие, записанное после слова пока.
нц пока условие
тело цикла
(последовательность действий)
кц
Цикл типа для.
Предписывает выполнять тело цикла для всех значений
некоторой переменной (параметра цикла) в заданном диапазоне.
нц для i от i1 до i2
тело цикла
(последовательность действий)
кц
§4. Формальные исполнители алгоритмов, система команд исполнителя.
Компьютер как формальный исполнитель алгоритмов.
Обычно исполнитель ничего не знает о цели алгоритма. Он выполняет все
полученные команды, не задавая вопросов "почему" и "зачем".
Исполнитель алгоритма — это некоторая абстрактная или реальная
(техническая, биологическая или биотехническая) система, способная выполнить действия, предписываемые алгоритмом.
Исполнителя характеризуют:
среда;
элементарные действия;
система команд;
отказы.
среда (или обстановка) — это "место обитания" исполнителя.
Система команд. Каждый исполнитель может выполнять команды только
из некоторого строго заданного списка — системы команд исполнителя. Для
каждой команды должны быть заданы условия применимости (в каких состояниях среды может быть выполнена команда) и описаны результаты выполнения команды. После вызова команды исполнитель совершает соответствующее
элементарное действие.
Отказы исполнителя возникают, если команда вызывается пpи недопустимом для нее состоянии среды.
Обычно исполнитель ничего не знает о цели алгоритма. Он выполняет все полученные команды, не задавая вопросов "почему" и "зачем".
В информатике универсальным исполнителем алгоритмов является компьютер.
5
то a:=a-b
иначе b:=b-a
все
кц
вывод "делитель = ", a
кон
Основные служебные слова школьного алгоритмического языка:
алг (алгоритм)
арг (аргумент)
рез (результат)
нач (начало)
кон (конец)
цел (целый)
вещ (вещественный)
сим (символьный)
лит (литерный)
лог (логический)
таб(таблица)
нц (начало цикла)
кц (конец цикла)
длин (длина)
если
то
иначе
все
пока
для
от
до
да
повторять нет
до
при
знач
выбор
и
ввод
или
вывод
не
утв
Общий вид алгоритма:
алг название алгоритма (аргументы и результаты с их типами)
арг условия применимости алгоритма
рез цель выполнения алгоритма
нач описание промежуточных величин
| последовательность команд (тело алгоритма)
кон
Часть алгоритма от слова алг до слова нач называется заголовком, а часть,
заключенная между словами нач и кон — телом алгоритма.
В предложении алг после названия алгоритма в круглых скобках указываются имена и тип значения (цел, вещ, сим, лит или лог) всех входных (аргументы) и выходных (результаты) переменных. При описании массивов (таблиц)
используется служебное слово таб, дополненное граничными парами по каждому индексу элементов массива.
Команды школьного АЯ
Команда присваивания. Служит для вычисления выражений и присваивания
их значений переменным. Общий вид: А:= В, где знак ":=" означает команду
заменить прежнее значение переменной, стоящей в левой части, на вычисленное значение выражения, стоящего в правой части.
Например, a:=(b+c)*sin(Pi/4); i:=i+1.
Команды ввода и вывода.
ввод имена переменных
вывод имена переменных, выражения, тексты.
Команды если и выбор. Применяют для организации ветвлений.
Команды для, повторять и пока. Применяют для организации циклов.
Пример записи алгоритма на школьном АЯ
алг Алгоритм Евклида (цел a,b,n)
арг a,b
рез a
нач цел m
ввод a,b
пока a<>b
нц
если a>b
Название
Сложение
Вычитание
Умножение
Деление
§5. Арифметические выражения.
Pascal
Школьный АЯ
+
*
/
+
*
/
Операции выполняются в порядке старшинства: сначала вычисление функций, затем возведение в степень, потом умножение и деление и в последнюю
очередь — сложение и вычитание.
Для изменения порядка выполнения действий можно использовать круглые
скобки.
Арифметические выражения должны быть записаны в линейном виде согласно следующим правилам:
1. Выражение должно быть записано в виде линейной цепочки символов:
X1 -> X1; A2 ->A^2; V0 -> V0;
2. Нельзя опускать знаки операций: 4a -> 4*a
3. Аргументы используемых математических функций записываются в круглых скобках.
Наиболее распространенные ошибки.
Выражение
Не правильная заЯз. Бейсик,
пись
Алгоритмический яз.
1
ab
1/a+b
1/(a+b)
УПРАЖНЕНИЯ:
1. Переведите из линейной записи в обычную:
а) sqr(tan(a+b))/sqr(tan(a-b))
б) 1/2*a*b*sin(c)
в) sqrt(b*b+c^2+2*a*c*cos(a))/2
г) 2*b*c*cos(a/2)/(b+c)
д) sqrt(p*(p-a)*(p-b)*(p-c))
е) 4*r*sin(a/2)*sin(b/2)*sin(c/2)
ж) sqrt(a*x*x+b*x+c)
и) 2*sin((a+b)/2)*cos((a-b)/2)
2. Запишите в линейном виде:
a)
x12  x22
i) 2R
6
b)
x1 x2  x1 x3  x2 x3
c)
v0 t 
d)
e)
f)
at 2
2
mv 2
 mgh
2
1 1

r1 r2
mgCosa
j) b  4ac
2
k) 
m1m2
r2
l) |x|+|x+1|
2
m) J R
n) abSinc
1
g)
1  sin 2 x
o)
h)
x 1  x 1
2 x
p) |1-|x||
ax 2  bx  c
§6. Алгоритмы работы с логическими данными. Основные логические
операции (ИЛИ, И, НЕ) и правила их выполнения
В записи логических выражений помимо арифметических операций сложения, вычитания, умножения, деления и возведения в степень используются операции отношения < (меньше), <= (меньше или равно), > (больше), >= (больше
или равно), = (равно), <> (не равно), а также логические операции и, или, не.
Результатом проверки любого условия является либо ДА (если условие соблюдается ), либо НЕТ (если условие не соблюдается). Условие вида "А или В" соблюдается (равно ДА) ,если соблюдается либо А, либо В, либо они оба. Условие
вида "А и В" соблюдается (равно ДА) ,если соблюдаются оба условия и А и В.
Примеры записи логических выражений, истинных при выполнении указанных условий.
Условие
Запись на школьном алгоритмическом
языке
Дробная часть вещественого числа a
int(a) = 0
равна нулю
Целое число a — четное
mod(a, 2) = 0
Целое число a — нечетное
Целое число k кратно семи
Каждое из чисел a, b положительно
(a>0) и (b>0)
Только одно из чисел a, b положитель- ((a>0) и (b<=0)) или
но
((a<=0) и (b>0))
Хотя бы одно из чисел a, b, c является
отрицательным
Число x удовлетворяет условию a < x
<b
Число x имеет значение в промежутке
[1, 3]
Точка с координатами (x, y) лежит в
(x-a)**2 + (y-b)**2 < r*r
круге радиуса rс центром в точке (a, b)
Уравнение ax^2 + bx + c = 0 не имеет
действительных корней
Точка (x, y) принадлежит первой или
третьей четверти
Целые числа a и b являются взаимноa = -b
противоположными
Число a больше среднего арифметического чисел b, c, d
Задание 1. Задайте с помощью команд если или выбор вычисления по
формулам:
Ответ:
если x <= -100
то y:=sign(x)*abs(x)**(1/7)
иначе если x < 100
то y:=sign(x)*abs(x)**(1/3)
иначе y:=sqrt(x)
все
все
Задание 2. Задайте с помощью команд если или выбор вычисления по
формулам:
 X, если X < 2;
Y =  X + 3, если 2 < X < 3;
 1, если X > 3.
Задание 3. Задайте с помощью команд если или выбор вычисления по
формулам:
7
Ответ:
выбор
при с=0 : z:=1
при с=1 : z:=x
при с=2 : z:=3*x*x - 1/2
при с=3 : z:=x*x*x - 3*x/2
иначе z:=2*x**4 - 3*x/2
все
Задание 3. Задайте с помощью команд если или выбор вычисления по
формулам:
 x 2 , если x  5

 6, если x  3
y
 x  2, если 5  x  10
 x 3 , все остальные
§7. Выделение в задаче подзадач, вспомогательные алгоритмы. Передача
данных через параметры.
Циклов и развилок вполне достаточно, чтобы записать любой алгоритм. Поэтому вспомогательный алгоритм использовать совсем необязательно.
Для того чтобы понять, что это такое, рассмотрим следующий пример:
Нужно нарисовать дом.
Детали:
1. Большой прямоугольник желтого цвета - сам дом.
2. Голубой прямоугольник - окно.
3. Черный прямоугольник - дверь.
4. Красный прямоугольник - крыша.
Можно построить программу следующим образом:
1. 1-я часть рисует крышу.
2. 2-я часть рисует сам дом.
3. 3-я часть рисует окно.
4. 4-я часть рисует дверь.
Во всех четырех частях программы рисуются прямоугольники.
Чем отличаются друг от друга эти прямоугольники?
Цветом, размером и положением на экране.
Для рисования любого прямоугольника нам достаточно знать:
- координаты одной вершины X0,Y0 (привязываем его к определенному
месту на экране);
- координаты противоположной вершины X1,Y1;
- номер цвета прямоугольника.
Назовем последовательность действий, рисующих прямоугольник, алгоритм
"Прямоугольник". После этого наша программа примет следующий вид:
- 1-я часть Выполнить алгоритм "Прямоугольник".
- 2-я часть Выполнить алгоритм "Прямоугольник".
- 3-я часть Выполнить алгоритм "Прямоугольник".
- 4-я часть Выполнить алгоритм "Прямоугольник".
Использование команды Выполнить алгоритм позволило нам в 3 раза сократить нашу программу.
Вспомогательным алгоритмом называется набор действий, выделяемый в качестве самостоятельного алгоритма.
Для его вызова всегда есть специальная команда.
Вызывая алгоритм "Прямоугольник" мы должны задать значения переменным X0, Y0, Х1, Y1, C.
Переменные, которые являются аргументами и результатами во вспомогательном алгоритме называются параметрами.
Для решения квадратного уравнения
ax2+bx+c=0
можно составить вспомогательный алгоритм КВУР. Параметрами будут коэффициенты а,b,c и корни x1,x2.
При вызове вспомогательного алгоритма важен порядок передачи и
приема параметров.
КВУР(a,b,c,x1,x2)
Различается два типа вспомогательных алгоритмов: Процедуры (на языке
Бейсик Подпрограммы) и Функции. Основное различие между ними состоит в
том, что функция возвращает значение величины и может использоваться в выражениях, например:
X:=SIN(A);
8
§8. Языки программирования как средство записи алгоритмов для их
исполнения компьютером. Операторы языка программирования. Режимы
компиляции и интерпретации.
Программа, написанная на любом языке программирования, представляет собой некий набор инструкций, описывающий процесс выполнения алгоритма
решения задачи. Инструкции записываются по определенным правилам, предусмотренным требованиями языка и соглашениями конкретного транслятора, и
оформляются в виде текстового файла.
Транслятор переводит написанную программу с языка программирования на
машинный язык. Перевод может осуществляться двумя способами. В режиме
интерпретации программа читается построчно, строчка переводится и сразу выполняется. Перевод нигде не запоминается. В цикле одна и та же серия команд
сколько раз повторяется столько раз и переводится. В таком режиме работает
транслятор языков BASIC. В режиме компиляции программа переводится сразу
вся, перевод запоминается в виде исполняемого файла с расширением .EXE и
затем выполняется. Исполняемый файл можно сохранить отдельно и в любое
время выполнить. В этом режиме работают практически все трансляторы.
Текстовый файл называют исходным текстом программы. Специальная
программа просматривает исходный текст и, если в нем нет синтаксических
ошибок, исполняет инструкцию немедленно.
В нашем курсе каждую инструкцию PASCAL мы будем называть командой.
ПРАВИЛА НАБОРА СТРОК ПРОГРАММЫ:
1. Набор каждой строки заканчивается нажатием на клавишу ENTER.
2. Для вставки пропущенной строки, текст программы можно раздвинуть.
3. При удалении ненужной строки текст программы автоматически сдвигается.
4. Каждая команда заканчивается точкой с запятой.
5. После команды END, заканчивающей программу, ставится точка.
6. Имя программы не должно превышать 8 символов.
7. Паскаль не различает большие и маленькие латинские буквы.
На языке Паскаль наш алгоритм будет записан так:
{Фамилия инициалы, имя файла, чч:мм:гг}
program имя;
label ;
раздел меток
const ;
раздел констант
type ;
раздел типов
var ;
раздел переменных
procedure, function раздел процедур и функций
begin
раздел операторов
readln;
end.
Begin и end- операторские скобки
ПРИМЕР1:
{Милютин СА, MILSE1, 26:10:98}
program kat;
uses crt;
const
k=100; t=50;
var m:real;
begin
clrscr; textcolor(2);
writeln(‘Программу составил Милютин С.А.’);
writeln(‘Определяет количество мышек сьеденных 100 кошками’);
m:=1/1.5*k*t;
writeln(‘100 кошек сьели за 50 часов’, m:9:3,’мышек’);
readln;
end.
ПРИМЕР 2: Определить сумму двух чисел
program sym;
const A=5; B=4;
var C:integer;
begin
C:=A+B;
writeln(C);
readln;
end.
Номер
Цвет (по русски)
Цвет (по аннглийски)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Черный
Голубой
Зеленый
Бирюзовый
Красный
Сиреневый
Коричневый
Белый
Серый
Ярко-голубой
Ярко-зеленый
Светло-бирюзовый
Ярко-красный
Ярко-розовый
Желтый
Ярко-белый
Black
Blue
Green
Cyan
Red
Magenta
Brown
White
Gray
Light blue
Light green
Light cyan
Light red
Light magenta
Yellow
High-intensity white
9
§ 9.Работа в среде TURBO PASCAL.
Обьектом обработки СП PASCAL является текстовый файл, который содержит
исходный текст программы на языке PASCAL. После загрузки PASCAL на
экране появляется окно текстового редактора системы, показанное на рис.1. В
этом окне вы проводите все операции с программой – набираете и редактируете
текст, сохраняете текст в файле, отлаживаете и выполняете программу и т.д.
Файлу можно присвоить произвольное имя с произвольным расширением, но
рекомендуется использовать расширение PAS. С помощью пунктов меню FILE,
Edit, Compile вы работаете с исходным текстом программы, с помощью пункта
Run- выполняете, а с помощью пункта Debug- отлаживаете программу.
Верхняя строка будет содержать меню основных режимов работы интегрированной среды. Нижняя строка коротко описывает основные “горячие” клавиши.
Для того, чтобы войти в главное меню среды, достаточно нажать клавишу
F10
При этом в одном из пунктов меню в верхней строке появится подсвеченный
прямоугольник, который можно передвигать, нажимая на клавиши «влево» и
«вправо».
FILE-OPEN – загрузить файл для редактирования ( «горячая» клавиша
F3).
При выборе этого пункта меню на экране появится диалоговое окно, в котором можно указать имя файла, который должен быть загружен для работы.
FILE-SAVE – сохранить редактируемый файл («горячая» клавиша F2).
Редактируемый файл из памяти редактора записывается на диск. Если редактируемый файл имеет стандартное имя NONAMEXX.PAS, то при сохранении
будет дана возможность переименовать файл.
FILE-SAVE as – сохранить редактируемый файл под другим именем.
File-NEW – начать набор новой программы. Файлу присваивается стандартное имя NONAMEXX.PAS. Это имя нужно заменить на нужное при
сохраненении.
*** ПРИМЕЧАНИЕ. При работе в сети работать с именем
NONAMEXX.PAS нельзя. Можно потерять набираемый текст.
FILE-EXIT – окончание работы в интегрированной среде ( «горячие» клавиши Alt+X ).
COMPILE-COMPILE – компилировать программу («горячая» клавиша
F9).
RUN-RUN – скомпилировать программу и выполнить («горячая» клавиша
CTRL+F9).
ОСНОВНЫЕ КЛАВИШИ ДЛЯ РАБОТЫ С РЕДАКТОРОМ:
ENTER – вставить строку, начиная от курсора.
DELETE- удалить символ над курсором.
BACKSPACE- удалить символ перед курсором.
INSERT- включить/отменить режим вставки.
PAGE UP- передвинуть курсор на страницу выше.
PAGE DOWN- передвинуть курсор на страницу ниже.
CTRL+PAGE UP – передвинуть курсор в начало текста.
CTRL+PAGE DOWN- передвинуть курсор в конец текста.
CTRL+Y – удалить строку. На которой находится курсор.
Работа с блоками текста:
CTRL+”K” “ B”- отметить начало блока.
CTRL+”K” “ K”- отметить конец блока.
CTRL+”K” “ Y”- удалить отмеченный блок.
CTRL+”K” “ C”- копия отмеченного блока вставляется после курсора.
CTRL+”K” “ V”- отмеченный блок передвигается и помещается после курсора.
CTRL+”K” “ Н”- снять пометку.
.§10 Команда ввода данных с клавиатуры.
Для ввода данных с клавиатуры в Паскале используется операторы
READ(рид) или READLN(ридлн). В общем виде они записываются так:
READ(пер1,пер2,...,перN);
READLN(пер1,пер2,...,перN);
Использование комментария в этой команде запрещено. Значения данных
при вводе разделяются пробелом или клавишей "ВВОД".
Приставка LN сигнализирует машине, что после работы этой команды необходимо закрыть буфер обмена информацией, причем следующая команда вывода будет работать с начала следующей строки. Если используется команда в
виде READ(пер1,пер2,...,перN); , то следующая команда READLN просто закроет буфер и не введет данные, а команда вывода напечатает текст сразу после
введенного последнего символа.
Возможно использование оператора в виде READLN;
В этом случае программа остановится и будет ждать нажатия на клавишу
«ввод». Если этот оператор поставлен после команды
READ(пер1,пер2,...,перN); то произойдет закрытие буфера обмена.
§ 11 Команда вывода данных на экран.
Для вывода данных на экран монитора в Паскале используется операторы
WRITE(райт) или WRITELN(райтлн). В общем виде они записываются так:
WRITE(‘комментарий’,пер1,пер2,пер3); - без перехода курсора на следующею строку.
10
WRITELN(‘комментарий’,пер1,пер2,пер3); - с переходом курсора на следующею строку.
Комментарий заключается в апострофы.
Для ввода данных используется пара операторов:
WRITE ('Введи скорость(м/сек)-');
READLN(v);
write('Задай размеры(м) А,B,C -');
readln(A,B,C);
§12 Описание данных, типы данных. Простые данные и структуры
(числовые массивы, цепочки символов).
Основными понятиями в алгоритмических языках обычно являются следующие.
1. Имена (идентификаторы) — употpебляются для обозначения объектов пpогpаммы (пеpеменных, массивов, функций и дp.).
2. Опеpации. Типы операций:
 аpифметические опеpации + , — , * , / и дp. ;
 логические опеpации и , или , не ;
 опеpации отношения < , > , <= , >= , = , <> ;
 опеpация сцепки (иначе, "присоединения", "конкатенации" ) символьных значений дpуг с другом с образованием одной длинной строки;
изображается знаком "+".
3. Данные — величины, обpабатываемые пpогpаммой. Имеется тpи
основных вида данных: константы, пеpеменные и массивы.
 Константы — это данные, которые зафиксированы в тексте программы
и не изменяются в процессе ее выполнения.
Пpимеpы констант:
o числовые 7.5 , 12 ;
o логические да (истина), нет (ложь);
o символьные (содержат ровно один символ) "А" , "+" ;
o литеpные (содержат произвольное количество символов) "a0",
"Мир", "" (пустая строка).
 Пеpеменные обозначаются именами и могут изменять свои значения в
ходе выполнения пpогpаммы. Пеpеменные бывают целые, вещественные, логические, символьные и литерные.
 Массивы — последовательности однотипных элементов, число которых фиксировано и которым присвоено одно имя. Положение
элемента в массиве однозначно определяется его индексами (одним, в
случае одномерного массива, или несколькими, если массив многомерный). Иногда массивы называют таблицами.
4. Выpажения — пpедназначаются для выполнения необходимых вычислений, состоят из констант, пеpеменных, указателей функций (напpимеp,
sin(x)), объединенных знаками опеpаций.
Выражения записываются в виде линейных последовательностей символов (без подстрочных и надстрочных символов, "многоэтажных" дробей и
т.д.), что позволяет вводить их в компьютер, последовательно нажимая на соответствующие клавиши клавиатуры.
Различают выражения арифметические, логические и строковые.
 Арифметические выражения служат для определения одного числового значения. Например, (1+sin(x))/2. Значение этого выражения при
x=0 равно 0.5, а при x=p/2 — единице.
 Логические выражения описывают некоторые условия, которые могут
удовлетворяться или не удовлетворяться. Таким образом, логическое
выражение может принимать только два значения — "истина" или
"ложь" (да или нет). Рассмотрим в качестве примера логическое выражение x*x + y*y < r*r , определяющее принадлежность точки с координатами (x, y) внутренней области круга радиусом r c центром в начале
координат. При x=1, y=1, r=2 значение этого выражения — "истина", а
при x=2, y=2, r=1 — "ложь".
 Cтроковые (литерные) выражения, значениями которых являются
текcты. В строковые выражения могут входить литерные и строковые
константы, литерные и строковые переменные, литерные функции, разделенные знаками операции сцепки. Например, А + В означает присоединение строки В к концу строки А. Если А = "куст ", а В = "зеленый", то значение выражения А + В есть "куст зеленый".
5. Операторы (команды). Оператор — это наиболее крупное и содержательное понятие языка: каждый оператор представляет собой законченную
фразу языка и определяет некоторый вполне законченный этап обработки
данных. В состав опеpатоpов входят:
 ключевые слова;
 данные;
 выpажения и т.д.
Операторы подpазделяются на исполняемые и неисполняемые. Неисполняемые опеpатоpы пpедназначены для описания данных и стpуктуpы пpогpаммы, а исполняемые — для выполнения pазличных действий (напpимеp,
опеpатоp пpисваивания, опеpатоpы ввода и вывода, условный оператор, операторы цикла, оператор процедуры и дp.).
§ 13. Алгоритмы линейной структуры..
Линейным алгоритмом называется алгоритм, команды в котором выполняются последовательно, т.е.в том порядке, в каком они В КАКОМ ОНИ
ЗАПИСАНЫ.
ЗАДАЧА 13.1: Cнаряд выпущен вертикально вверх с начальной скоростью
v0=60 m/c. Определить на какой высоте будет снаряд через t=5 cекунд.
11
H  V0 t 
2
gt
2
Формула:
Переменные v0,t -аргументы (они должны быть даны, иначе мы не сможем
решить задачу). Тип этих величин – вещественный.
Переменная H - результат. Тип этой величины - вещественный.
Переменная g =9.81 m/c2 константа. Тип этой величины - вещественный.
Переменным -аргументам значения присваиваются во время работы программы с помощью оператора ввода данных с клавиатуры - INPUT.
Переменная-результат печатается на экран с помощью оператора PRINT.
Переменным -константам значения назначаются в тексте программы командой присвоить.
Pascal
program task;
uses crt;
const g=9.81;
var v0,t,h :real;
begin
ClrScr;
write('Введи скорость(м/сек),время(сек)-'); readln(v0,t);
h:=v0*t-g*t*t/2;
writeln('Через ',t,'cекунд снаряд будет находится на высоте ',h,' метров');
end.
Школьный АЯ
АЛГ задача (вещ v0,t,h)
АРГ v0,t
РЕЗ h
НАЧ вещ g
g:=9.81
h:=v0*t+g*t**2/2
КОН
Задача 13.2: Пловец, спрыгнув с пятиметровой вышки, погрузился в воду на
глубину 2 метра. С каким ускорением он двигался в воде.
H1 = 5 m
H2 = 2 m
Формулы:
V0  2H 1 g
2
V
A 0
2H 2
Аргументы - H1,H2
Результат - A
Константа - g
Переменная V0 не является аргументом и не является результатом, но для вычислений она нам нужна.
Такая переменная называется вспомогательной или промежуточной.
На алгоритмическом языке она описывается в строке НАЧ.
Примеры составленных программ:
Pascal
PROGRAM TASK;
USES CRT;
CONST G=9.81;
VAR H1,H2,V0,A :REAL;
BEGIN
ClrScr;
WRITELN('ПРОГРАММА ВЫЧИСЛЕНИЯ УСКОРЕНИЯ');
WRITELN('ПРОГРАММУ СОСТАВИЛА ИВАНОВА');
WRITE('ВВЕДИ ВЫСОТУ ВЫШКИ (м)-');
READLN(H1);
WRITE('ВВЕДИ ГЛУБИНУ (м)-); READLN(H2);
V0:=SQRT(2*H1*G);
A:=V0*V0/(2*H2);
WRITELN('УСКОРЕНИЕ РАВНО ',A,' м/сек^2');
END.
Школьный АЯ
АЛГ ЗАДАЧА( ВЕЩ H1,H2,A);
АРГ H1,H2
РЕЗ А
НАЧ ВЕЩ G,V0
G:=9.81
V0:=SQR(2*H1*G)
A:=V0**2/(2*H2)
КОН
Задания для самостоятельной работы.
Задача 13.3: Определить первую и вторую космические скорости на планете
радиусом 8200 км, если ускорение свободного падения g=11.9 м/сек2.
Формулы:
V1  gR , V2  2V1
Задача 13.4: Из орудия под углом =40 к горизонту
вылетает снаряд со скоростью V0=1000 м/c. Определить дальность полета L.
12
V sin 2
Формула: L 
g
2
0
Замечание: Градусы необходимо в программе перевести в радианы.
Задача 13.5: Определить массу планеты, если ее радиус равен 8400 км, ускорение свободного падения g=10,2 m/c2 и гравитационная постоянная G равна
6,6710-11 м3/(кгс2).
M
Формула:
gR 2
G
§ 14 Операторы ветвления. Использование логических выражений в
условных операторах.
IF условие THEN команда ;
IF условие THEN команда ELSE команда ;
Задача 14.1: Найти большее из 2-х чисел.
Школьный АЯ
АЛГ ЗАДАЧА( ЦЕЛ A,B,MAX);
АРГ A,B
РЕЗ MAX
НАЧ
ЕСЛИ A>B
ТО
MAX:=A
ИНАЧЕ
MAX:=B
ВСЕ
КОН
Pascal
Program BID;
Uses crt;
Var A,B,C:real;
Begin
CLRSCR; TEXTCOLOR(1);
WRITELN(‘ОПРЕДЕЛЕНИЕ БОЛЬШЕГО ИЗ ДВУХ ЧИСЕЛ.’);
WRITELN(‘ПРОГРАММУ СОСТАВИЛА ИВАНОВА СВЕТА.’);
WRITE(‘ВВЕДИТЕ ДВА ЧИСЛА: ’); READLN(A,B);
IF A>B THEN C:=A ELSE C:=B;
WRITELN(‘БОЛШЕЕ ЧИСЛО РАВНО ’,C:5:3);
End.
Задача 14.2: Составить алгоритм нахождения корней квадратного уравнения.
Уравнение в общем виде записывается так:
Ax2 + Bx + C = 0
Дискриминант равен: D=B2-4AC
Корни вычисляются по формулам:
B D
B D
2A
2A
X1=
; X2=
Аргументы - A, B, C;
результаты -X1, X2;
промежуточная переменная - D.
Школьный АЯ
АЛГ ЗАДАЧА( ВЕЩ A,B,C,X1,X2);
АРГ A,B,C
РЕЗ X1,X2
НАЧ ВЕЩ D
D:=B**2-4*A*C
ЕСЛИ D>=0
ТО X1:=(-B+SQRT(D)/(2*A)
X2:=(-B-SQRT(D)/(2*A)
ИНАЧЕ ПЕЧАТЬ “КОРНЕЙ НЕТ.”
ВСЕ
КОН
Задача 14.3: Распечатать название дня недели в зависимости от его номера:
VAR N:INTEGER;
BEGIN
WRITE(‘ВВЕДИТЕ НОМЕР ДНЯ НЕДЕЛИ=’);
READLN(N);
CASE N OF
1:WRITELN(‘ПОНЕДЕЛЬНИК’);
2:WRITELN(‘ВТОРНИК’);
3:WRITELN(‘СРЕДА’);
4:WRITELN(‘ЧЕТВЕРГ’);
5:WRITELN(‘ПЯТНИЦА’);
6:WRITELN(‘СУББОТА’);
7:WRITELN(‘ВОСКРЕСЕНЬЕ’);
ELSE BEGIN
TEXTCOLOR(4);WRITELN(‘НЕТ ТАКОГО’);
END;
END; {КОНЕЦ ВЫБОРА}
Задача 14.4: Составить алгоритм отвечающий на вопрос: «Являются ли введенные числа углами равнобедренного треугольника».
Pascal
Program TASK:
Uses crt;
13
Var A,B,C:real;
Begin
CLRSCR; TEXTCOLOR(1);
WRITELN(‘РАВНОБЕДРЕННЫЙ ТРЕУГОЛЬНИК.’);
WRITELN(‘ПРОГРАММУ СОСТАВИЛА ИВАНОВА СВЕТА.’);
WRITE(‘ВВЕДИТЕ ТРИ УГЛА(ГРАД): ’);
READLN(A,B,C);
IF (A+B+C=180) AND ((A=B) OR (A=C) OR (B=C))
THEN WRITELN(‘Углы равнобедренного треугольника’)
ELSE WRITELN(‘Нет.’);
End.
§ 15 Операторы цикла «пока», «повторять» и «для».
Иногда требуется выполнять некоторую последовательность действий несколько раз.
Например. Робот красит забор.
Пока забор не кончился повторять:
обмакнуть кисть;
покрасить доску;
сместится к следующей доске.
Условие «забор не кончился» ограничивает повторение и завершает работу робота. Повторяющейся набор действий называется телом цикла.
Цикл типа «пока» предписывает выполнять тело цикла до тех пор, пока выполнено условие, записанное после слова «пока».
На языке Pascalc команда "ПОКА" записывается следующим образом:
WHILE условие вхождения в цикл DO команда;
Задача 15.1. Дана правильная дробь А/В. Составить программу сокращения
дроби.
Даны два числа А – числитель и В - знаменатель. Используя алгоритм Евклида
найдем наибольший общий делитель и на это число сократим дробь. Чтобы не
испортить исходные данные при поиске наибольшего делителя, запомним их
значения в в переменных M и N. Для выполнения операции сокращения на языке программирования Pascal используем операцию целочисленного деления
«div».
Pascal
N:=A
PROGRAM task;
USES CRT;
M:=B
VAR A,B,M,N: INTEGER;
пока M <> N
BEGIN
нц
CLRSCT; TEXTCOLOR(1);
если M > N
WRITE(‘ВВЕДИ ЧИСЛИТЕЛЬ И ЗНАМЕНАТЕЛЬ:’);
READLN(A,B); N:=A; M:=B;
то M = M - N
WHILE M<>N DO
иначе N = N - M
IF M > N THEN M = M – N ELSE N = N – M;
все
WRITELN (‘Наибольший Общий Делитель =’;M);
кц
A=A DIV M; B=B DIV M;
WRITELN(‘Сокращенная дробь =’,A,’/’,B);
END.
A:=A/M
B:=B/M
Цикл «Повторять» или «До» предписывает выполнять тело цикла до тех пор
пока не выполнится условие, записанное после слова «До».
На языке Pascal команда "Повторять" записывается следующим образом:
REPEAT
команды цикла
UNTIL УСЛОВИЕ ВЫХОДА ИЗ ЦИКЛА
Задача 15.2. Найти сумму двузначных чисел кратных 7.
S:=0
A:=14
ПОВТОРЯТЬ
S:=S+A
A:=A+7
ДО A>99
Вывод S
Pascal
Program sum;
uses Crt;
var i,S:integer;
Begin
ClrScr; TextColor(2);
writeln('Вычисляем Сумму чисел');
writeln('Составил Васечкин');
S:=0; I:=11;
Repeat
S:=S+I; I:=I+2;
Until I>99;
Writeln('Сумма равна ',S);
End.
Цикл типа «ДЛЯ» предписывает выполнять тело цикла для всех значений некоторой переменной (параметр цикла) в заданном диапазоне.
На языке PASCAL команда "Для" записывается следующим образом:
FOR I=N TO M DO команда ;
Шаг цикла может принимать только 1.
FOR I=N DOUNTO M DO команда ;
Шаг цикла может принимать только -1.
Задача 15.2. Распечатать все значения функции sin(x)+cos(x), если X[-1;3] и
x=0.3.
Pascal
Program TAB;
Uses crt;
Var A,B,X,Y,P:real;
14
Begin
CLRSCR; TEXTCOLOR(1);
Writeln(‘Вычисляем значения функции.’); Writeln(‘Составил Васечкин.’);
Write(‘Введите границы (A,B) и шаг ’);readln(A,B,P);
X:=А;
WHILE X<=B DO
BEGIN
Y:=SIN(X)+COS(X);
Writeln(‘ПРИ Х=’,X,’ Y=’,Y);
X:=X+P;
END;
Readln; End.
Школьный АЯ
X:=-1
ПОКА x<3
Нц
Y:=SIN(X)+COS(X)
X:=X+0.3
ВЫВОД “ПРИ Х=”;X ;“ Y=”;Y
Кц
§ 16 Общая структура вспомогательных алгоритмов на языке Pascal.
Структура вспомогательного алгоритма почти буквально повторяет структуру
всей PASCAL-программы. Заголовок процедуры или функции начинаются со
служебного слова, обозначающегося вид вспомогательного алгоритма, вслед за
которым идет имя. Далее следует список формальных параметров (он может
отсутствовать). Для функций необходимо указать тип возвращаемого значения,
который задается после списка параметров и отделяется от него двоеточием.
Общий вид процедуры:
procedure имя (параметры);
var
объявление переменных;
procedure and function;
begin
¦
¦ тело процедуры
¦
end;
Общий вид функции:
Function имя(параметры):тип данных;
Var
объявление переменных;
procedure and function;
Begin
¦
¦тело функции
¦
end;
Процедуры и функции могут иметь свои собственные переменные, и даже
свои процедуры и функции. Но все это может быть использовано только в тех
процедурах и функциях, в которых они объявлены.
Процедуры и функции могут использовать переменные, обьявленные в заголовке основной программы. Такие переменные, называются глобальными.
Переменные описанные в заголовке вспомогательного алгоритма называются
локальными и работать с ними можно только в пределах этого алгоритма.
Есть два способа задания формальных параметров. Они отражают два различных способа передачи параметров: первый способ называется передачей параметров по значению, второй способ – передачей параметров по ссылке.
Наиболее распространенный и самый простой способ передачи параметров –
передача параметров по значению. В данном случае параметр считается обычной переменной, которая действует только в пределах вспомогательного алгоритма. По окончании вспомогательного алгоритма она будет уничтожена и ее
значение будет потеряно. При вызове вспомогательного алгоритма этому параметру устанавливается начальное значение равное значению соответствующего
фактического параметра.
Для того, чтобы изменение в теле процедуры значения формального параметра приводило к аналогичному изменению состветствующего фактического
параметра, необходимо использовать передачу параметра по ссылке.
Параметры, передаваемые по ссылке (параметры - переменные), указываются
заданием служебного слова VAR перед их идентификатором в списке параметров. Этот способ используется в тех случаях, когда необходимо вернуть из процедуры некоторое значение.
Задача 16.1. Сколько раз функция F(x)=5*x^2+sin(x/2) на интервале [-5;+3] принимала отрицательные значения и просуммируйте все положительные значения.
Шаг по X равен 0.2.
Pascal
Program task161;
Uses crt;
Var x,y,s:real;
K:integer;
Function fff(x:real):real;
Begin
fff:=5*x*x+sin(x/2);
End;
Begin
15
CLRSCR; TEXTCOLOR(1);
Writeln(‘Вычисляем сумму положит. и кол-во отр. Значений’);
Writeln(‘Составил программу Васечкин’);
S:=0; K:=0; X:=-5;
REPEAT
Y:=Fff(X);
IF Y<0 THEN K=K+1 ELSE S=S+Y;
X:=X+0.2;
UNTIL X>3;
WRITELN(‘Сумма положительных значений функции=’,S:5:3);
WRITELN(‘Кол-во отрицательных значений =’,K);
READLN; END.
Задача 16.2: Перевод чисел из десятичной системы счисление в любую другую
меньшую 10.
PROGRAM TASK;
USES CRT;
VAR R,N,S:INTEGER;
PROCEDURE PEREVOD(R:INTEGER);
VAR C,O:INTEGER;
BEGIN
C:=R DIV S;
O:=R MOD S;
IF C>=S THEN PEREVOD(C) ELSE WRITE(C);
WRITE(O);
END;
BEGIN
CLRSCR;
WRITE('ВВЕДИТЕ ЧИСЛО В ДЕСЯТИЧНОЙ СИСТЕМЕ :');READLN(N);
WRITE('ВВЕДИТЕ ОСНОВАНИЕ НОВОЙ СИСТЕМЫ ');READLN(S);
WRITELN('ЧИСЛО В НОВОЙ СИСТЕМЕ СЧИСЛЕНИЯ :');
PEREVOD(N); WRITELN; READLN;
END.
Задача 16.3: Печать введенного текста наоборот.
PROGRAM RECURSI;
USES CRT;
PROCEDURE FFF;
VAR A:CHAR;
BEGIN
READ(A);
IF A<>'.' THEN FFF;
WRITE(A);
END;
BEGIN
CLRSCR;
WRITELN('ВВОДИТЕ СИМВОЛЫ :');
FFF;
WRITELN; READLN;
END.
§ 17 Основные алгоритмы работы с одномерными массивами
Задача 17.1: Вычислить сумму элементов числового массива.
Тест
Данные
N=5
Результат
A=(3, 5, -2, 6, 3)
S=15.0
Исполнение алгоритма
алг Сумма (цел N, вещ таб A[1:N], вещ S)
арг N>0, А
рез S
нач цел i
S:=0
нц для i от 1 до N
S := S + A[i]
кц
кон
i
S
0
1 0 + a1 = 0+3 = 5
2 a1 + a2 = 3+5 = 8
3 a1+a2+a3 = 8-2 = 6
4 a1+a2+a3+a4 = 6+6 = 12
5 a1+a2+a3+a4+a5 = 12+3=15
Задача 17.2. Найти наибольший элемент числового
массива
A = (a1, a2 , ..., aN ) и его номер.
Тест
Данные
N=4
A=(3, -1, 10, 1)
Результаты
Amax=10
алг МаксЭлемент (цел N, вещ таб A[1:N],
вещ Amax, цел k)
арг N, A
рез Amax, k
нач цел i
Amax := A[1]; k := 1
нц для i от 2 до N
если A[i] > Amax
то Amax:=A[i]; k := i
все
кц
кон
K=3
16
Pascal
Program MaxElem;
Uses Crt;
Type Mas = Array [1..20] of Real;
Var A : Mas;
i, N, k : Integer;
Amax : Real;
BEGIN
СlrScr;
Write('Введите N = ');
ReadLn(N);
For i := 1 to N do {Ввод значений элементов массива А}
begin
Write('A [ ', i, ' ] = '); ReadLn(A[i])
end;
Amax := A[1]; k:=1; {Поиск максимального элемента}
For i := 2 to N do
If A[i] > Amax then
begin
Amax := A[i]; k := i
end;
WriteLn; WriteLn('Наибольший элемент' , k , '-й');
WriteLn('Его значение ', Amax : 5 : 1); ReadLn
END.
Задача 17.3. Элементы заданного числового массива a1, a2, ..., aN упорядочить по возрастанию.
Тест
Данные
N=4
A=(5, 2, 7, 1)
алг Возрастание(цел N, вещ таб A[1:N])
нач цел i, j, вещ Tmp
нц для i от 1 до N-1
нц для j от i+1 до N
ecли A[i] > A[j]
то Tmp:=A[i]; A[i]:=A[j]; A[j]:=Tmp
все
кц
кц
кон
Pascal
Program Regulation;
Результат
A=(1, 2, 5, 7)
Uses Crt;
Type Mas = Array [1..10] of Real;
Var A
: Mas;
i, j, N : Integer;
Tmp : Real;
Procedure Input; {описание процедуры ввода массива }
Begin
ClrScr;
Write('Введите N = '); ReadLn(N);
WriteLn('Введите элементы массива: ');
For i := 1 to N do
begin Write('A [ ' , i , ' ] = ');
ReadLn(A[i])
end;
End; {of Input}
Procedure Regulate; {описание процедуры упорядочения по возрастанию}
Begin
For i := 1 to N-1 do
For j := i+1 to N do
If A[i] > A[j] then
begin Tmp:=A[i]; A[i]:=A[j]; A[j]:=Tmp
end;
End; {of Regulate}
Procedure Output; {описание процедуры вывода результата}
Begin
WriteLn('Упорядоченный массив :');
For i:=1 to N do Write( A[i] : 6 : 1);
WriteLn; ReadLn
End; {of Output}
BEGIN
Input; {вызов процедуры ввода массива }
Regulate; {вызов процедуры упорядочения по возрастанию}
Output {вызов процедуры вывода результата}
END.
§ 18 Основные алгоритмы работы с цепочками символов.
Символьная информация — это информация, отображаемая
с помощью символов (букв, цифр, знаков операций и др.).
IBM-совместимые компьютеры обрабатывают 256 различных символов, каждый
из которых кодируется одним байтом. Соответствие символов и байтов задается
таблицей кодировки, в которой для каждого символа указывается соответствующий байт.
17
Символьная информация в алгоритмах и программах описывается данными
двух типов: символьным и литерным. Они отличаются друг от друга тем, что
значением символьной переменной является один символ, а литерной —
строка символов.
Язык
Школьный
АЯ
Hfscal
Тип, ключевое слово
Примеры использования
Символьный
сим
a := "f " ; b := "+" ; c :=
"5"
If a = " " then k := k + 1
Литерный
лит
t := "Литерная величина"
s := "" (пустая строка)
Литерный
t := ‘Литерная величина’
f := ‘’ (пустая строка)
Для данных символьного и литерного типов применимы операции сцепки (соединения, конкатенации) и сравнения (<, >, <=, >=, =, <>).
Сравнивать можно строки разной длины. Сравнение осуществляется слева
направо в соответствии с ASCII-кодами соответствующих символов. Так, строка "стол" меньше строки "стул", строка "teacher" больше строки "pupil" , а
строка "пар" меньше строки "парад".
Процедуры
Delete ( Var S : String; N, M : Integer ) Удаляет M символов из строки S, начиная с позиции N.
Insert ( SubS : String; Var S : String; N : Integer ) Вставляет подстроку SubS в
строку S, начиная с позиции N.
Str ( X : Integer; Var S : String ) Возвращает представление числа X в его символьной форме S.
Val ( S : String; Var X, Code : Integer ) Возвращает представление символов
строки S в ее числовой форме X. Параметр Code содержит признак ошибки
преобразования (если Code = 0, ошибки нет).
Функции
Chr ( X : Byte ) : Char Возвращает символ с заданным порядковым номером X.
Сoncat ( S1 [ , S2 , ... , SN ] ): String Выполняет сцепку (конкатенацию) последовательности строк.
Copy ( S : String; N , M : Integer ) : String Возвращает подстроку из строки S,
начиная с позиции N и длиной M символов.
Length ( S : String ) : Byte Возвращает количество символов в строке S.
Ord ( X : Char ) : LongInt Возвращает порядковый номер символа X в таблице
кодов символов.
Pos ( SubS , S : String ) : Byte Возвращает номер позиции, начиная с которой в
строке S располагается подстрока SubS (если значение функции равно нулю, то
S не содержит SubS).
Задача 18.1. Определить количество слов в заданном тексте.
Если слова в тексте разделены одним пробелом, то задача сводится к подсчету
числа пробелов. Количество слов при этом равно числу пробелов плюс 1. Если
же число пробелов между соседними словами произвольное, как обычно и
бывает, то алгоритм усложняется. Рассмотрим оба варианта решения этой задачи.
Вариант 1. Слова в тексте разделены одним пробелом.
Тест
Данные
Результат
"Кот на крыше"
N=3
алг Число слов (лит Text, цел N)
арг | В непустом тексте Text слова
| разделены одним пробелом
рез | N — количество слов
нач цел i
N:=1
нц для i от 1 до длин(Text)
| цикл по буквам текста
если Text[i] = " "
то N:=N+1
все
кц
кон
Вариант 2. Слова в тексте разделены произвольным количеством пробелов.
Тест
Данные
Результат
"Кот на крыше"
N=3
Школьный АЯ
алг Число слов (лит Text, цел N)
арг | В тексте Text слова могут быть разделены произвольным количеством
пробелов
рез | N — количество слов в тексте Text
нач цел i, лог Flag
N:=0; Flag:=да
нц для i от 1 до длин(Text) | цикл по буквам текста
18
если (Text[i]<>" ") и (Flag=да) | это условие выполняется только
то N:=N+1
| для первой буквы каждого слова
все
Flag := (Text[i]=" ") | Flag=да, если очередная буква — пробел,
кц
| в противном случае Flag = нет
кон
Pascal
Program Probel;
Uses Crt;
Var Text
: String; {заданный непустой текст}
i, Number : Integer; {Number — количество слов в тексте}
Letter : Char; {текущая буква }
BEGIN ClrScr;
WriteLn('Введите текст :'); ReadLn(Text);
Number:=1;
For i:=1 to Length(Text) do {цикл по буквам текста}
begin
Letter:=Text[i];
If (Letter = ' ' ) then Number:=Number+1;
end;
WriteLn('О т в е т : количество слов в тексте равно ', Number);
END.
Задача 18.2. Определить, является ли заданное слово "перевёртышем"
(слово называется "перевёртышем", если совпадает с собой после переворачивания).
Система тестов
N теста
Данные
Результат
1
Slovo = ''казак''
Otvet = ''Перевертыш''
2
Slovo = ''коза''
Otvet = ''Не перевертыш''
Школьный АЯ
алг Перевертыш (лит Slovo, лит Otvet)
арг | Otvet = "Перевертыш", если Slovo совпадает с собой
| после переворачивания
рез Otvet
нач цел Dlina, i, лог Flag
Dlina:=длин(Slovo)
i:=1; Flag:=да
нц пока (i<=Dlina/2) и Flag
| цикл пока с прерыванием до
Flag:=(Slovo[i]=Slovo[Dlina-i+1]) | первой несовпавшей пары букв,
i:=i+1
| если такая имеется в слове
кц
если Flag
то Otvet:="Перевертыш"
иначе Otvet:="Не перевертыш"
все
кон
Turbo Pascal
Program TurnOver;
Uses Crt;
Var Slovo : String;
Dlina, i : Integer;
Flag : Boolean;
BEGIN
ClrScr;
Write('Введите слово : '); ReadLn(Slovo);
Dlina:= Length(Slovo);
{Сравниваются пары букв: первая буква с последней, }
{вторая буква с предпоследней и т.д. }
i:=1; Flag := TRUE;
While (i <= Dlina/2) and Flag do
{цикл до первой несовпавшей }
begin
{пары букв (если такая есть)}
Flag := (Slovo[i]=Slovo[Dlina-i+1]);
i := i+1
end;
WriteLn; Write( 'О т в е т : слово ', Slovo);
If Flag then WriteLn(' — перевертыш. ')
else WriteLn(' — не перевертыш');
ReadLn
END.
Задача 18.3. B заданном тексте одно заданное слово везде заменить на
другое заданное слово такой же длины.
Тест
Данные
Текст
Слово1
Слово2
''2sinx+siny''
''sin''
''cos''
Школьный АЯ
алг Замена (лит Текст, лит Слово1, Слово2)
арг | длины Слово1 и Слово2 совпадают
Результат
''2cosx+cosy''
19
рез | в строке Текст подстрока Слово1 везде
| заменена на подстроку Слово2
нач цел i, DS
DS:=длин(Слово1)
нц для i от 1 до длин(Текст)-DS+1
если Текст[i : i+DS-1] = Слово1 | если вырезка равна Слово1,
то Текст[i : i+DS-1] :=Слово2 | то вырезке присваиваем Слово2
i:=i+DS
| и продвигаемся на длину слова
все
кц
кон
(эта программа, использующая стандартную функцию Pos , не требует, чтобы
длины заменяемого и вставляемого слов были одинаковыми)
Program Replace;
Uses Crt;
Var Text, Slovo1, Slovo2 : String;
i, DlinaSlova, P : Integer;
BEGIN ClrScr;
Write('Введите строку : '); ReadLn(Text);
Write('Какое слово заменить ? '); ReadLn(Slovo1);
Write('На какое слово заменить ? '); ReadLn(Slovo2);
WriteLn; WriteLn('О т в е т : ');
WriteLn('Исходный текст: ', Text); DlinaSlova:=Length(Slovo1);
DlinaSlova:=Length(Slovo1);
P:=Pos(Slovo1,Text); {номер позиции, с которой в строке Text }
{в первый раз встречается подстрока Slovo1 }
While P>0 do
{цикл продолжается до тех пор,пока подстрока}
{Slovo1 встречается в строке Text
}
begin
Delete(Text, P, DlinaSlova); {удаление подстроки Slovo1, начинаю-}
{щейся с позиции P, из строки Text }
Insert(Slovo2, Text, P); {вставка подстроки Slovo2 }
{ в строку Text с позиции Р}
P:=Pos(Slovo1, Text); {номер позиции, с которой подстрока Slovo1}
{встречается в строке Text в очередной раз}
end;
WriteLn('Новый текст: ', Text);
ReadLn
END.
§19. Этапы разработки программы: анализ- алгоритмизациякодирование- отладка- тестирование
Решение задач с помощью компьютера включает в себя следующие основные этапы, часть из которых осуществляется без участия компьютера.
1.
2.
3.
4.
5.
6.
7.
Постановка задачи:
 сбоp инфоpмации о задаче;
 фоpмулиpовка условия задачи;
 опpеделение конечных целей pешения задачи;
 определение формы выдачи результатов;
 описание данных (их типов, диапазонов величин, структуры и
т.п.).
Анализ и исследование задачи, модели:
 анализ существующих аналогов;
 анализ технических и программных средств;
 pазpаботка математической модели;
 разработка структур данных.
Разработка алгоритма:
 выбор метода проектирования алгоритма;
 выбор формы записи алгоритма (блок-схемы, псевдокод и др.);
 выбоp тестов и метода тестиpования;
 проектирование алгоритма.
Пpогpаммиpование:
 выбор языка программирования;
 уточнение способов организации данных;
 запись алгоpитма на выбpанном языке пpогpаммиpования.
Тестиpование и отладка:
 синтаксическая отладка;
 отладка семантики и логической стpуктуpы;
 тестовые pасчеты и анализ pезультатов тестиpования;
 совершенствование пpогpаммы.
Анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2 — 5.
Сопровождение программы:
 доработка программы для решения конкретных задач;
 составление документации к pешенной задаче, к математической модели, к алгоpитму, к пpогpамме, к набору тестов, к использованию.
20
§1. Понятие алгоритма, свойства алгоритма .................................. 2
§2. Способы записи алгоритмов. ......................................................... 2
2.1 Словесный способ записи алгоритмов.................................. 2
2.2. Графический способ записи алгоритмов. ............................ 2
2.3. Псевдокод. .............................................................................. 3
§3. Основные алгоритмические конструкции: следование,
ветвление, повторение ......................................................................... 3
§4. Формальные исполнители алгоритмов, система команд
исполнителя. Компьютер как формальный исполнитель
алгоритмов. ........................................................................................... 4
§5. Арифметические выражения. ....................................................... 5
§6. Алгоритмы работы с логическими данными. Основные
логические операции (ИЛИ, И, НЕ) и правила их выполнения .......... 6
§7. Выделение в задаче подзадач, вспомогательные алгоритмы.
Передача данных через параметры. ................................................... 7
§8. Языки программирования как средство записи алгоритмов для
их исполнения компьютером. Операторы языка
программирования. Режимы компиляции и интерпретации. .......... 8
§ 9.Работа в среде TURBO PASCAL. ................................................. 9
.§10 Команда ввода данных с клавиатуры. ........................................ 9
§ 11 Команда вывода данных на экран. .............................................. 9
§12 Описание данных, типы данных. Простые данные и
структуры (числовые массивы, цепочки символов). ....................... 10
§ 13. Алгоритмы линейной структуры............................................. 10
§ 14 Операторы ветвления. Использование логических выражений
в условных операторах. ...................................................................... 12
§ 15 Операторы цикла «пока», «повторять» и «для». ................... 13
§ 16 Общая структура вспомогательных алгоритмов на языке
Pascal. ................................................................................................... 14
§ 17 Основные алгоритмы работы с одномерными массивами .... 15
§ 18 Основные алгоритмы работы с цепочками символов. ........... 16
§19. Этапы разработки программы: анализ- алгоритмизациякодирование- отладка- тестирование ............................................. 19
Download