Базовые элементы и структура языка PASCAL.
Введение
В методических указаниях описываются базовые понятия языка программирования TURDO PASCAL.
PASCAL (Паскаль) лучше других языков подходит для обучения программированию. Он был разработан в 1968-1971гг. Н. Виртом в Цюрихском институте информатики (Швейцария). Первоначальная цель разработки языка PASCAL - необходимость инструмента для обучения программированию.
С момента создания языка различные фирмы создали большое количество компиляторов. Компилятор – программа, обеспечивающая перевод программ с языка высокого уровня(приближенного к человеку) на язык более низкого уровня (близкий к ЭВМ), или машинно-зависимый язык. Одной из наиболее удачных версий стала разработка фирмы Borland, в которой были объединены редактор текстов и высокоэффективный компилятор. Созданная среда стала называться TURDO PASCAL, а язык получил название TURDO PASCAL. Язык обладает расширенными возможностями по сравнению со стандартным языком PASCAL.
Среда программирования PASCAL позволяет создавать тексты программ, компилировать их, находить и исправлять ошибки, компоновать программу из отдельных модулей, отлаживать и выполнять программу.
Методические указания представляют собой вводный курс в язык программирования TURBO PASCAL.
Базовые элементы и структура языка PASCAL.
Алфавит и словарь языка.
Символы языка – элементарные знаки, используемые для составления текстов. Они составляют алфавит языка. Программа на PASCAL формируется с помощью конечного набора знаков, образующих алфавит языка, и состоит из букв, десятичных цифр и специальных символов.
В качестве букв используются прописные и строчные буквы латинского алфавита, знак подчеркивания. Также при написании программ используются специальные символы + - * / = < > [ ] { } ( ) @ . , : ; # $ ^
Неделимые последовательности знаков алфавита образуют слова, отделенные друг от друга разделителями и несущие определенный смысл в программе. Разделителем может служить пробел, символ конца строки, комментарий. Слова подразделяются на зарезервированные, стандартные идентификаторы и идентификаторы пользователя.
Зарезервированное или служебное слово – это слово, которое в языке программирования имеет определенное смысловое значение.
Идентификатором является последовательность букв, цифр и знаков подчёркивания, которая начинается с буквы или символа подчёркивания и не содержит пробелов. Идентификатор может иметь любую длину, но значимыми являются только первые 63 символа.
Стандартные идентификаторы (имена) служат для обозначения заранее определенных разработчиками языка типов данных, констант, процедур и функций.
Идентификаторы пользователя (имена) применяются для обозначения меток, констант, переменных, процедур и функций, определенных самим программистом.
При написании идентификатора можно использовать прописные и строчные буквы латинского алфавита, знак подчеркивания.
Структура программы.
Программа, написанная на языке PASCAL, имеет следующие разделы
1. заголовок программы.
PROGRAM_ имя программы;
Имя программы не должно содержать пробелов, должно начинаться с буквы и состоять только из латинских букв, цифр и символа _ (подчеркивание).
2. программный блок.
2.1. список имен подключаемых библиотечных модулей – экрана (CRT), графики (GRAPH).
USES_имя1[,имя2, …];
2.2. раздел описания меток – имена меток перечисляются через запятую после зарезервированного слова. В программе после метки ставится двоеточие. Метка позволяет выполнить переход на оператор, следующий за ней, из любого места программы с помощью оператора перехода GOTO.
LABEL_имя1[,имя2,…];
2.3. раздел описания констант. Выражения присваивания значений константам отделяются друг от друга точкой с запятой.
CONST_идентификатор1=значение1[; идентификатор2= значение2;…];
2.4. раздел описания типов данных. За служебным словом TYPE следуют одно или несколько определений типов, разделенных точкой с запятой. Тип данных может быть описан и непосредственно в разделе описания переменных.
TYPE_имя типа = значение типа;
2.5. раздел описания переменных. Имена переменных перечисляются через запятую и далее, через двоеточие, следует их тип и точка с запятой, после которой аналогично описываются другие переменные.
VAR_идентификатор1, идентификатор2,…:тип переменных;
2.6. раздел описания подпрограмм (процедур) и функций. В этом разделе размещаются тела подпрограмм, роль которых в Паскале выполняют процедуры и функции.
PROCEDURE_имя(формальные параметры : тип);
BEGIN
Тело процедуры
END;
FUNCTION_имя(формальные параметры : тип):тип результата;
BEGIN
Тело функции
END;
3. раздел операторов, т.е. сама программа. Операторы выполняются в том порядке, в котором они записаны, в соответствии с синтаксисом и правилами пунктуации языка PASCAL. Слова BEGIN и END являются аналогами открывающейся и закрывающейся скобок в обычных арифметических выражениях. В конце программы после оператора END ставится точка.
BEGIN
Операторы программы через ;
END.
Комментарийзаписывается в программе в любом месте, где разрешен пробел, в фигурных скобках {комментарий} или скобках со звездочкой (*комментарий*). В тексте комментария не должны находиться знаки его ограничения { и (*. Ограничители комментария удобно использовать в процессе отладки программы, временно исключая выполнение какой-либо части программы.
Любой раздел, кроме раздела операторов, может отсутствовать. Разделы описаний (кроме USES, который всегда расположен после заголовка программы) могут встречаться в программе любое количество раз, но все описания объектов программы (переменных, функций, меток, констант, процедур) должны быть сделаны до того, как эти объекты будут использованы.
Пример 1: Программа расчета объема шара.
PROGRAM share; заголовок программы}
USES crt; {подключение модулей}
CONST p=3.14; {описание констант}
VAR rad: integer; v: real;{описание переменных}
BEGIN {раздел операторов}
clrscr; {очистка экрана}
rad:=4; {задание значения радиуса шара}
v:=3*p*rad*rad*rad/4; {вычисление объема шара}
write (‘ объем шара - ’,v); end.{вывод результата}
Простые типы данных.
В PASCAL можно выделить следующие группы типов данных: простые, структурированные, указатели, процедурные типы, объекты. Среди типов данных, используемых в языке, есть стандартные и определяемые программистом. К стандартным типам, не требующим предварительного определения, относятся целые типы, вещественные типы, логические типы, символьный тип, тип-строка, текстовый файл, указатель.
Целый и вещественный тип. В PASCAL имеется пять стандартных типов целых данных (см табл. 1) и пять типов вещественных данных (см табл.2). Они различаются диапазоном, наличием знака и размером занимаемой памяти.
Значение вещественного типа может быть представлено в двух видах: числом с фиксированной точкой и плавающей точкой. Число с фиксированной точкой изображается десятичным числом с дробной частью, которая отделяется от целой части точкой. Например: 15.5, 12.00, -321.897, 0.33.
Таблица 1. Целые типы данных
Тип | Название | Диапазон значений | Память байт | Формат |
Byte Shortint Integer Word Longint | Байт Короткое цел. Целое Слово Длин. целое | 0..255 -128..127 -32768..32767 0…65535 -2147483648.. | Без знака Знаковый Знаковый Без знака Знаковый |
Таблица 2. Вещественные типы данных.
Тип | Название | Диапазон значений | Память байт | Число значащих цифр |
Real Single Double Extended Comp | Вещественный Одинарн. точности Двойной точности Расширенный Большое целое | 2.9*10-39-1.7*1038 1.5*10-45-3.4*1038 5*10-324-1.7*10308 3.4*10-4932 - 1.1*104932 -9.2*1018-9.2*1018 | 11-12 7-8 15-16 19-20 19-20 |
Число с плавающей точкой имеет вид mEp, где m - мантисса, p – порядок числа. В качестве m могут быть целые и действительные числа с фиксированной точкой, в качестве p – только целые числа. Мантисса и порядок могут содержать знаки +, -.
Математическая запись | Запись с плавающей точкой |
0,000002 | 2E-6 |
0,34*104 | 0.34E+4; |
-20,5*1012 | -20.5E12; |
12*10-5 | 12E-5 |
Вывод данных вещественного типа возможен с форматом и без него. Если при выводе данных вещественного типа не указан формат, то число выводится с плавающей точкой. При этом на изображение числа 17 позиций, в целой части мантиссы присутствует хотя бы одна значащая цифра.
Математическая запись | Вывод без указания формата |
2.0000000000E+00 | |
0,5 | 5.0000000000E-01 |
0,0064 | 6.4000000000E-03 |
236,2 | 2.3620000000E+02 |
Изменить стандартную форму вывода можно, используя формат в операторе write:
write(a:m:n), где a – выводимое данное вещественного типа, m – общее поле выводимого числа (включая знак числа, целую часть, точку и дробную часть), n – поле дробной части. В качестве m и n могут использоваться целые константы, переменные, выражения. При задании формата вывода необходимо учитывать, что точка и знак – (минус) в случае отрицательного значения переменной занимают по одной позиции в записи переменной.
Например: используя формат вывода write(a:8:5) для вывода числа 7.567895135 получим на экране монитора 7.56789.
Логический (булевский) тип (boolean) представлен двумя значениями True (истина) и False (ложь) и используется в логических выражениях и выражениях отношения. Занимает этот тип 8 бит.
Символьный тип (Char) – это тип данных, элементами которого являются буквы, цифры, знаки препинания и специальные символы. Каждому символу алфавита соответствует числовой код от 0 до 255, который занимает в памяти 1байт. Система кодирования символов в PASCAL– ASCII.
Перечисляемый тип. Этот тип не является стандартным и задаётся перечислением значений. Эти значения образуют упорядоченное множество.
Например, если в программе записан оператор:
Type day=(sat, sun, mon, tue, wed, thu, fri);
Тогда тип day будет включать в себя значения sat, sun, mon, tue, wed, thu, fri.
Как перечисляемые типы данных можно рассматривать и стандартные типы: integer, boolean, char. Имена значений, перечисленные в описании типа, являются константами этого типа.
Ограниченный тип. Ограниченный тип данных представляет интервал значений порядкового типа. В описании типа задают наибольшее и наименьшее значения, разделенные двумя точками, входящие в интервал.
Например, Type chislo=1..25; Ch=’a’..’z’;
Константы.
Константами называются элементы данных, значения которых установлены в описательной части программы и в процессе выполнения программы не изменяются. Для определения значений констант служит зарезервированное слово CONST:
CONST_идентификатор=значение константы;
Например, CONST а=-0.5; s=3; symbol= ’k’;
Стандартные функции.
Функция возвращает в программу значение (результат своей работы. Обращение к функции осуществляется по имени с указанием в скобках аргумента или списка аргументов через запятые.
Арифметические и тригонометрические функцииможно использовать только с аргументами целого и вещественного типа (см табл. 3).
Таблица 3. Стандартные функции.
Функция | Назначение | Тип результата |
ABS(X) | абсолютное значение аргумента | совпадает с типом аргумента |
SQR(X) | квадрат аргумента | совпадает с типом аргумента |
SQRT(X) | квадратный корень из аргумента | вещественный |
COS(X) | косинус аргумента | вещественный |
SIN(X) | синус аргумента | вещественный |
ARСTAN(X) | арктангенс угла | вещественный |
EXP(X) | еХ | вещественный |
LN(X) | натуральный логарифм | вещественный |
Int(x) | целая часть числа | вещественный |
Frac(x) | дробная часть числа | вещественный |
PI | возвращает значение числа p | вещественный |
RANDOM(N) | генерирует значение случайного числа в диапазоне от 0 до N | целочисленный |
RANDOM | генерирует значение случайного числа в диапазоне от 0 до 0,99 | вещественный |
Функции преобразования типов. Эти функции предназначены для преобразования типов величин, например, символа в целое число, вещественного числа в целое и т.д. Такими функциями являются, например, функции ord(х), которая возвращает порядковый номер аргумента и, таким образом, преобразует величину порядкового типа в величину целого типа, функция round(х), которая округляет вещественное число до ближайшего целого, trunc(х) - выдает целую часть вещественного числа, отбрасывая дробную.
Процедуры ввода-вывода.
Для выполнения операций ввода-вывода служат четыре процедуры: READ, READLN, WRITE, WRITELN. Очистка экрана осуществляется командой CLRSCR.
Процедура чтения READ обеспечивает ввод числовых данных, символов, строк и т.д. для последующей их обработки программой и имеет формат:
READ(переменная1, переменная2,…переменнаяN);
Здесь переменные – переменные допустимых типов данных, значения этих переменных набираются минимум через один пробел на клавиатуре и высвечиваются на экране. Набираемые значения должны соответствовать типам переменных. После набора данных для процедуры READ нажимается клавиша ENTER. Число переменных в списке может быть любым, разделяются переменные запятыми.
Процедура чтения READLN аналогична процедуре READ, имеет такой же формат, но после считывания последнего в списке значения для одной процедуры READLN данные для следующей процедуры будут считываться с начала новой строки.
Например, при выполнении приведенных ниже операторов, после набора на клавиатуре значений А и В курсор автоматически перейдет на новую строку, где набирают значение переменной NOMER.
READLN(A,B);
READLN(NOMER);
Процедура записи WRITE производит вывод числовых данных, символов, строк и булевских значений и имеет формат:
WRITE(переменная1, переменная2,…переменнаяN);
Процедура записи WRITELN производит вывод данных, но после последнего в списке значения для текущей процедуры WRITELN происходит перевод курсора к началу следующей строки. Процедура имеет формат аналогичный формату процедуры WRITE. Процедура WRITELN, записанная без параметров, вызывает перевод строки.
В процедурах WRITE и WRITELN, как было показано в разделе 1.3, имеется возможность записи выражения, определяющего ширину поля вывода.
Знаки операций.
Все операции в Рascal можно разбить на три группы.
1) Арифметические операции.Эти операции (см табл. 4) применимы только к величинам целых и вещественных типов.
При использовании в качестве знака операции служебных слов div и mod, они должны быть отделены от операндов хотя бы одним пробелом. Например,13 div 3 (результат 4), 17 mod 2 (ответ 1).
Таблица 4. Арифметические операции.
Знак | Операция | Типы операндов | Тип результата |
+ | сложение | целые | целый |
хотя бы один вещественный | вещественный | ||
- | вычитание | целые | целый |
хотя бы один вещественный | вещественный | ||
* | умножение | целые | целый |
хотя бы один вещественный | вещественный | ||
/ | деление | целые или вещественные | вещественный |
div | целая часть от деления целых чисел | целые | целый |
mod | остаток от деления целых чисел | целые | целый |
2) Операции отношения предназначены для сравнения двух величин. Результат сравнения имеет логический тип.
= - равно < - меньше <= - меньше или равно
<> - неравно > - больше >= - больше или равно.
3) Логические операции применяются к величинам логического типа, результат операции - тоже логического типа. Имеется одна унарная логическая операция not (отрицание) и три бинарные операции and (и), or (или), xor (исключающее или). Результаты выполнения логических операций приведены в таблице 5.
Пример: переменные имеют следующие значения а=7, b= -5, c=True. Тогда значением выражения (а>0) and (а<10) and (b>-10) будет True.
Таблица 5. Логические операции.
Значение операнда | Значение операции | ||||
X | Y | not Х | Х and Y | Х or Y | X xor Y |
False | False | True | False | False | False |
False | True | True | False | True | True |
True | False | False | False | True | True |
True | True | False | True | True | False |
Порядок вычисления выражений. Вычисление значений выражений выполняется в определенном порядке. В первую очередь вычисляются выражения, заключенные в круглые скобки. Для любых вложенных друг в друга пар круглых скобок вычисляется сначала внутреннее выражение, а затем внешнее. Далее вычисляются значения входящих в выражение функций и т.д. Приоритеты выполняемых действий таковы:
- Вычисления в круглых скобках.
- Вычисления значений функций.
- Унарные операции.
- Операции *, /, div, mod, and.
- Операции +, -, or, xor.
- Операции отношения.
1.8. Совместимость и преобразование типов данных.
Совместимость типов учитывается при вычислении выражений и выполнении операторов присваивания. Несовместимость типов определяется на этапе компиляции программы; при этом выдается сообщение об ошибке. Если типы операндов выражения не одинаковы, но совместимы, производится преобразование типов для приведения их к одному допустимому типу. Во время вычисления выражений два типа операндов совместимы если:
- оба они одного типа;
- один операнд вещественный, другой - целый;
- один операнд является диапазоном типа второго операнда;
- оба операнда - диапазоны одного и того же базового типа;
- оба операнда - строки;
- один операнд типа строка, другой - символ.
Примеры программ.
1. Написать программу, которая находит частное двух целых чисел.
Program example1;
Var a,b:integer;
c:real;
begin
writeln(‘введите два числа ’);
readln(a,b);
c:=a/b;
writeln(‘c=’,c) end.
2. Написать программу, которая для заданного х вычисляет значение выражения:
Program example2;
Var x,y: real;
begin
writeln(‘введите число ’);
readln(x)
y=sqr(sqr(x))+(x*sqr(x)+12*x)/2+sqrt(sqr(x)*x+10)+sin(x)/cos(x)
writeln(‘y=’,y);
end.
Для вывода вещественного результата можно использовать формат, как это было описано выше. Так, если мы хотим, чтобы результат выводился с точностью до двух знаков после запятой, нужно использовать следующий формат вывода: y:5:2. Тогда оператор вывода будет выглядеть следующим образом: writeln(‘y=’, y:5:2);
3. Найти остаток от деления двух целых чисел.
Program example3;
Var a,b,c:integer;
begin
writeln(‘введите два числа ’);
readln(a,b);
c:=a mod b;
writeln(‘c=’,c)
end.
Переменная c является переменной целого типа, так как тип результата операции mod – целый.
Упражнения.
I. Написать программу, вычисляющую значение выражения
1) 2)
3) 4)
5) 6).
7) 8)
II. Написать программу, которая подсчитывает:
1) периметр квадрата, площадь которого равна а;
2) площадь равностороннего треугольника, периметр которого равен p;
3) среднее арифметическое кубов двух данных чисел;
4) среднее геометрическое модулей двух данных чисел;
5) гипотенузу прямоугольного треугольника по двум данным катетам а, b;
6) площадь прямоугольного треугольника по двум катетам а, b;
7) периметр прямоугольного треугольника по двум катетам а, b;
8) периметр треугольника, заданного координатами вершин (х1, у1), (х2, у2), (х3,y3);
9) длину окружности и площадь круга с радиусом R;
10) площадь кольца с внутренним радиусом R1 и внешним R2.
Операторы ветвления.
Условный оператор IF.
Оператор IF относится к операторам разветвления процесса обработки данных. Он позволяет выбрать для выполнения один из простых или составных операторов или не выбрать ни одного в зависимости от условия разветвления. Условный оператор IF может иметь одну из форм: полную или сокращенную.
1. IF_условие_THEN_оператор1_ELSE_оператор2;
2. IF_условие_THEN_оператор;
Условие – выражение булевского типа, при его записи могут использоваться все возможные операции отношения. Если значение выражения истинно, то выполняется оператор1, если ложно – оператор2. Во втором варианте оператора IF, если выражение ложно, то выполняется оператор, следующий в программе сразу за оператором IF. Один оператор IF может входить в состав другого оператора IF, т.е. этот оператор может быть вложенным. При вложенности операторов каждое ELSE соответствует тому THEN, которое ему непосредственно предшествует.
Если необходимо выполнить более одного оператора после ключевого слова then или else, то надо записать составной оператор begin …end:
if условие then begin
группа операторов1
end
else begin
группа операторов2
end;
Рисунок 2.1. Блок-схема полной формы условного оператора.
Рисунок 2.2. Блок-схема сокращенной формы условного оператора.
Оператор выбора.
Оператор выбора позволяет сделать выбор из произвольного числа имеющихся вариантов и имеет формат:
CASE_выражение-селектор OF
константа_1 : оператор1;
константа_2 : оператор2;
……………………………
Константа_ N : операторN
ELSE операторE
END;
Сначала вычисляется значение выражения-селектора, затем обеспечивается реализация того оператора, константа выбора которого равна вычисленному значению селектора. Если ни одна из констант не равна текущему значению селектора, то выполняется оператор, стоящий после ELSE.
Примеры программ.
1. Найти максимальное из двух чисел a и b
Program example1;
Var a,b,max:real;
begin
writeln(‘введите два числа ’);
readln(a,b);
if a>b then max:=a
else max:=b;
writeln(‘максимальное значение=’,max:5:2)
end.
2. Для произвольных значений аргумента вычислить значение функции, заданной выражением
В данной задче вся числовая прямая разбивается на три интервала: [0;0], [- ;0], [0; + ]. Заданная точка х может попасть в один из них. Сначала проверяется, попадает ли точка в первый интервал. Если попадает, то функцию вычисляем по первому выражению. Если нет, то точка может принадлежать второму или третьему интервалу. Поэтому проверяем принадлежность точки второму интервалу. Если точка принадлежит интервалу, то вычисляем функцию по второму выражению. Если нет, то можно без проверки принадлежности точки третьему интервалу вычислять функцию по третьему выражению.
Program example2;
Var x,y:real;
begin
writeln(‘введите x ’);
readln(x);
if x=0 then y:=0
else if x<0 then y:=x+1
else y:=sqr(x)-1;
writeln(‘y(‘,x,’)=’,y:5:2)
end.
3. Дана точка с координатами x,y. Определить принадлежит ли эта точка заданной заштрихованной области.
Program example3;
Var x,y:real;
begin
writeln(‘введите координаты точки ’);
readln(x,y);
if (abs(x)<4) and (abs(y)<2) then writeln(‘точка внутри области’)
else if (abs(x)>4) or (abs(y)>2 then writeln(‘точка вне области’)
else writeln(‘точка на границе области’)
end.
4. Определить диапазон, в котором находится вводимое с клавиатуры число.
Program example4;
Var i:integer;
begin
READ(I);
CASE I OF
1..10: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 1 до 10’);
11..20: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 11 до 20’);
21..30: WRITELN(‘число I=’,I:3,’лежит в диапазоне от 21 до 30’);
ELSE WRITELN(‘число I=’,I:3,’находится вне диапазона 1 - 30’);
end; end.
Упражнения.
Для произвольных значений аргумента вычислить значение функции
1.
2..
3.
4. Вычислить .
5. Для произвольных значений аргументов вычислить функцию, заданную следующим образом:
а) ; б) ; в)
6. Найти минимальное число из x1, x2, x3. Расположить эти три числа в порядке возрастания, убывания.
7. Дана точка на плоскости М (х, у ). Составить программу, которая дает ответ на вопрос: «Принадлежит ли точка заданной области: окружности с радиусом=2, кольцу с внешним радиусом 10 и внутренним радиусом 2, полукольцу?»
8. Дана точка с координатами x, y. Определить принадлежит ли эта точка заданной области:
9. Дано действительное число а. Для функций у = f(х), графики которых представлены на рисунке, вычислить f(a).
Операторы цикла.
Цикл - это повторяющаяся последовательность операторов. Операторы, которые выполняются в ходе цикла, называются телом цикла. В Pascal имеется три типа циклов: while –цикл с предусловием, repeat – цикл с постусловием, for- цикл с параметром. Все операторы цикла могут быть вложенными.
Цикл While.
Оператор while организует выполнение оператора или группы операторов неизвестное заранее число раз. Выход из цикла осуществляется, если условие завершения цикла окажется ложным. Формат оператора:
WHILE_условие_DO_тело цикла;
Условие – булевское выражение, тело цикла – простой или составной оператор. Перед каждым выполнением тела цикла вычисляется условие, если условие выполняется, то тело цикла выполняется и снова вычисляется значение условия. Если условие не выполняется, то происходит выход из цикла и переход к первому после WHILE оператору. В этом операторе цикла программист сам должен заботиться об изменении переменных, определяющих выход из цикла. Если необходимо выполнить более одного оператора после ключевого слова do, то надо записать составной оператор begin ... end. Блок-схема рассмотренного оператора показана на рис. 3.1.
Рис. 3.1. Блок-схема цикла WHILE.
Цикл Repeat.
Оператор repeat имеет следующие характерные особенности: тело цикла выполняется, по крайней мере, один раз. Формат оператора:
REPEAT
тело цикла;
UNTIL_условие;
Условие – выражение булевского типа, при его написании допустимы булевские операции и операции отношения. Тело цикла – простой или составной оператор. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Если условие не выполняется, то операторы тела цикла выполняются еще раз, если выполняется – происходит выход из цикла (см рис. 3.2).
Рис. 3.2. Блок-схема цикла Repeat.
Цикл FOR.
Оператор повтора FOR может иметь два формата:
1. FOR_параметр-цикла:=S1_TO_S2_DO_оператор;
2.FOR_параметр-цикла:=S1_DOWNTO_S2_DO_оператор;
где S1 и S2 – выражения, определяющие начальное и конечное значение параметра цикла. FOR…DO – заголовок цикла, оператор – тело цикла. Тело цикла может быть простым или составным оператором. Оператор FOR обеспечивает выполнение тела цикла с увеличением параметра цикла (TO) или с уменьшением параметра цикла (DOWNTO) на единицу.
В операторе повтора FOR Паскаль не допускает изменения параметра цикла на величину, отличную от единицы. В составе оператора запрещены операторы, меняющие значение параметра цикла. Если необходимо выполнить более одного оператора после ключевого слова do, то надо записать составной оператор begin … end;
Примеры программ.
1. Найти все натуральные числа от 1 до n, используя оператор цикла while.
Program example1;
Var i,n:integer;
begin
writeln(‘введите количество натуральных чисел ’);
readln(n);
i:=1;
while i<=n do
begin writel(‘ ’,i);
i:=i+1
end
end.
2. Найти все натуральные числа от 1 до n, используя оператор цикла repeat.
Program example2;
Var i, n: integer;
begin
writeln(‘введите количество натуральных чисел ’);
readln (n);
i:=1;
repeat write(‘ ’,i);
i:=i+1;
until i>n
end.
3. Написать программу приближённого вычисления суммы
с точностью
По условию задачи считается, что нужное приближение получено, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое по модулю меньше, чем данное малое положительное число - это и все последующие слагаемые уже не надо учитывать. В таких задачах следует вычислять каждый член последовательности из предыдущего с помощью рекуррентного соотношения. В данном примере, если уже получено значение выражения xi-1/(i-1)!, то для получения xi/i! достаточно умножить значение предыдущего выражения на x/i.
Program example3;
Var i:integer;
x, eps, a,s:real; {а - очередной член ряда}
begin
writeln(‘введите x ’);
readln(x);
writeln(‘введите eps ’);
readln(eps);
i:=0; s:=0; a:=1;
while abs(a)>=eps do
begin
s:=s+a;
i:=i+1;
a:=a*x/i
end;
write(‘s=’,s) end.
4. Написать программу для вычисления суммы
Знак в формуле означает суммирование слагаемых, каждый из которых имеет вид , где n принимает значения от 1 до k.
Program example4;
Var i,n:integer;
x, s, a :real; {а - очередной член ряда}
begin
writeln(‘введите n’);
readln(n);
writeln(‘введите x ’);
readln(x);
s:=0; a:=-1;
for i:=1 to n do begin
begin
a:=-a*x/i
s:=s+a;
end;
write(‘s=’,s)
end.
Упражнения.
1. Даны числа а, b (а>b). Получить все члены последовательности a, a2,a3… меньшие числа b
2.Найти все положительные числа из диапазона от А до В с шагом H.
3. Найти сумму чисел из диапазона А до В(A<=B) с шагом H.
4. Вычислить бесконечную сумму ряда с заданной точностью =0,001:
а)
б)
в)
г)
8. Даны действительные числа а1, а2 … аn. Найти:
9. Составить программу нахождения количества делителей заданного натурального числа n (n=1000) Число k является делителем, если при делении n на k остаток от деления равен 0. Поэтому надо перебрать все числа от 1 до n и проверить являются ли они его делителями.
10. Найти факториал числа n.
11. Вычислить y= ,если хi изменяется от 0 с шагом 0,1 одновременно с i.
Одномерные массивы.
Примеры.
1. Вычисление суммы элементов массива.
Program example1;
Var a:array[1..100] of real;
i,n:integer;
s:real;
begin
writeln(‘введите число элементов массива’);
readln(n);
s:=0;
for i:=1 to n do
Begin
Writeln(‘a[‘,i,’]=’);
Readln(a[i])
End;
for i:=1 to n do
S:=s+a[i];
writeln(‘s=’,s:5:2)
end.
2. Поиск минимального (максимального) элемента массива.
Program example2;
Var a:array[1..100] of integer;
i, n, min, nmin:integer;
begin
writeln(‘введите число элементов массива’);
readln(n);
for i:=1 to n do
Begin
Writeln(‘a[‘,i,’]=’);
Readln(a[i])
End;
Min:=a[1]; {в качестве минимального элемента полагаем первый элемент массива}
Nmin:=1; {номер минимального элемента}
for i:=2 to n do
if a[i]<min {проверяем, если очередной элемент меньше минимального}
then begin
min:=a[i]; {тогда его полагаем минимальным}
nmin:=i; {запоминаем номер этого элемента}
end;
writeln(‘минимальный элемент a[’,nmin,’]=’,min);
writeln(‘номер минимального элемента=’, nmin);
end.
3. Программа, подсчитывающая количество пар равных соседних элементов в массиве целых чисел.
Program example3;
Var a:array[1..100] of integer;
i,n,k: integer;
real;
begin
writeln(‘введите число элементов массива’);
readln(n);
for i:=1 to n do
Begin
Writeln(‘a[‘,i,’]=’);
Readln(a[i])
End;
k:=0;
for i:=1 to n-1 do begin
if a[i]=a[i+1] {если соседние элементы равны}
then k:=k+1 {количество равных соседних элементов увеличиваем на единицу}
end;
Writeln(‘k=’, k)
end.
4. Сортировка массива по убыванию методом поплавка.
Program example4;
uses crt;
const n=15;
var a:array [1..n] of integer;
i,j,b:integer;
begin
clrscr;
writeln(' ввод массива');
for i:=1 to n do begin
a[i]:=random(50);
write(a[i]:4)
end;
writeln;
{ сортировка по убыванию}
for i:=1 to n-1 do begin
for j:=1 to n-i do begin
if a[j]<a[j+1] then{сравнение рядом стоящих элементов}
begin b:=a[j]; {перестановка элементов}
a[j]:=a[j+1];
a[j+1]:=b
end
end;
end;
writeln('массив после сортировки');
for i:=1 to n do write(a[i]:4);
end.
Упражнения.
1. В массиве A(20) подсчитать среднее арифметическое отрицательных элементов, сумму квадратов четных элементов.
2. Вычислить сумму где, - параметры, меняющиеся одновременно с номером элемента массива: - от 0,2 с шагом 0,5; - от 1 с шагом 0,25.
3. Вычислить сумму где: - параметр, меняющийся одновременно с номером элемента массива от 0 с шагом 0,05.
4. В массиве В(100) подсчитать сумму каждого десятка элементов. Из найденных элементов сформировать отдельный массив.
5. В массиве В(20) найти элементы, кратные трем, их порядковые номера, количество и сумму. Из найденных элементов сформировать отдельный массив.
6. В массиве А(20) найти максимальное и минимальное значения среди элементов и их среднее арифметическое. Значения элементов массива задаются формулой: При делении на 0 значение элемента массива принять равным 1.
7. Для вектора (х1, х2,…………., х20), имеющего положительные и отрицательные элементы. Вычислить среднее арифметическое положительных элементов массива и сумму элементов, стоящих на четных местах.
8. Составить программу для упорядочивания элементов вектора (х1, х2,…………., х100), расположив их в порядке возрастания в том же массиве.
9. Дан вектор М(20). Расположить элементы вектора по увыбанию.
10. В массиве С(100) найти количество элементов, лежащих в диапазоне от А до В, где А и В – з