Язык программирования Паскаль.
Паскаль
считается одним из самых популярных и удобных языков программирования. Он был
создан в 1971 году швейцарским профессором Никлаусом Виртом и назван в честь Блеза
Паскаля – французского ученого.
Это
универсальный язык программирования, так как с помощью его можно решать задачи
вычислительного характера, работать с графикой, звуком, текстом.
Структура
программы на Паскаль.
Программа на
языке Паскаль состоит из трёх основных частей:
1.
Заголовок программы;
2.
Раздел описаний;
3.
Исполняемая программа.
Рассмотрим правила записи.
1.
Заголовок
программы.
program
<имя>
где <имя> - это имя программы: слово (возможно
группа слов, соединённых знаком подчеркивания), записанное буквами латинского
алфавита (нельзя использовать русские буквы, знаки препинания, пробелы между
словами, начинать имя с цифры).
Например:
program Iwanov_10а правильно
program 10a-Иванов Петр неправильно (допущено 4 ошибки)
Программу можно оставить и без заголовка.
2.
Раздел описаний.
Сюда входят подразделы:
1)
Подключение стандартных
модулей.
Этот раздел начинается со служебного слова uses,
за которым следует имя модуля (например, uses crt; uses graph); если необходимо подключить несколько
модулей, их имена перечисляются через запятую.
2)
Описание меток.
Раздел начинается служебным словом label
(эти метки необходимы для работы оператора безусловного перехода); например, label 1,2,3
3)
Описание констант.
Здесь описываются величины, значения которых
не будут изменяться при исполнении программы; например, const a=10;
b=8; c=a+b
4)
Описание переменных.
Этот подраздел является самым главным, так как
в отличие от других подразделов он обязательно должен присутствовать в
программе. Он начинается со служебного слова var, за которым следуют
имена переменных с указанием их типа, например, var
а:integer; b,c,d:real;
3.
Исполняемая
программа.
Начинается служебным словом begin
и завершается служебным словом end, после которого ставится точка. Между этими
словами пишутся операторы, процедуры и другие элементы, управляющие работой
программы.
Каждая строка заканчивается точкой с запятой «;».
Описание данных.
Каждая величина имеет тип, имя и значение.
В Паскале имеются следующие типы данных: целые,
вещественные (действительные), символьные, логические.
Имя величины может быть длинной до 127 символов (цифр или букв). Нельзя начинать
имя величины с цифры и использовать русские буквы (также недопустимы символы: +
- / \ = и т. д., то есть символы, не относящиеся к буквам, кроме знака
подчеркивания).
Описание типа величин.
1)
Целые числа:
·
Integer –
целые числа от –32768 до 32767;
·
Longint - целые числа от – 2147483648 до 2147483647;
·
Byte - целые числа от 0 до 255;
·
Word - целые числа от 0 до 65535;
·
Shorting - целые числа от –128 до 127.
Например: var a:integer; b:byte;
2)
Вещественные числа:
·
Real – от 2.9 10-39 до 1.7*1038;
·
Single – от 1.5*10-45 до 3.4*1038.
Например: var a:real; b:single;
3)
Символьные величины:
Значением
может быть только один символ. Значение констант такого типа записывается в
апострофах. Для описания величины данного типа используют служебное слово Char.
Например, Var d:Char (для переменной)
d=’f’ (для константы).
4)
Строковые величины:
Значением может быть набор символов
заключенный в апострофы. Максимальное количество символов в строке 255. Для
описания величины данного типа используют служебное слово String.
Например: var s:string;
5)
Логические:
Данные такого типа могут принимать только два
значения: истина (True) и ложь (False). Для описания величины данного типа
используют служебное слово Boolean. Например, Var w: Boolean.
Так как язык
Паскаль строг в отношении типов величин, то действия с переменными разных типов
в одном и том же выражении невозможны. Исключение составляют переменные типа Integer – они могут
использоваться в выражениях типа Real. Если хотя бы одна из переменных,
используемых в операциях умножения, сложения, вычитания, относится к типу Real, результат операции будет типа Real.
Результат
деления может быть присвоен только переменной вещественного типа.
Форма записи некоторых операции в языке
Паскаль.
операция
|
Значение операции
|
пример
|
+
|
сложение
|
b:=а+с
|
-
|
вычитание
|
b:=а-с
|
*
|
умножение
|
b:=a*c
|
/
|
деление
|
b:=а/с
|
div
|
деление без остатка
|
b:=a div c
|
mod
|
остаток от деления
|
b:=a mod c
|
=
|
равно
|
b=c
|
<>
|
не равно
|
b<>c
|
<=
|
меньше или равно
|
b<=c
|
>=
|
больше или равно
|
b>=c
|
Стандартные
математические функции.
Функция
|
Значение функции
|
Пример
|
Abs(x)
|
Абсолютное значение х (модуль)
|
b:=Abs(x)
|
cos (x)
|
Косинус х (х в радианах)
|
b:=cos (x)
|
sin(x)
|
Синус х (х в радианах)
|
b:=sin(x)
|
Arctan(x)
|
Арктангенс х
|
b:=Arctan(x)
|
Ln(x)
|
Натуральный логорифм х
|
b:=Ln(x)
|
Exp(x)
|
ex
|
b:=exp(x)
|
Exp(ln(a)*n)
|
В Паскале нет функции возведения
в степень, но ее можно заменить этим (an)
|
b:=Exp(ln(a)*n)
|
Sqr(x)
|
Квадрат х
|
b:=Sqr(x)
|
Sqrt(x)
|
Корень квадратный из х
|
b:=Sqrt(x)
|
Random(x)
|
Случайное число из диапозона
0<=..<=x (если х неуказан, то 0<=..<=1)
|
b:=Random(x)
|
Pi
|
Число пи
|
b:=Pi
|
Odd(x)
|
Значение функции True (истина), если х нечетен, и False-если
х четен
|
b:= Odd(x)
|
Int(x)
|
Целая часть х
|
b:= Int(x)
|
Frac(x)
|
Дробная часть х
|
b:= Frac(x)
|
Trunk(x)
|
Перевод из вещественного типа в
тип Longint
|
B:=trunk(x)
|
Формула перевода из градусной меры угла в
радианы: p:= х*Pi/180 ,
где х - угол в градусах.
1 mod 2 = 1; 4 mod 7=4 и
т.д.
2 div 3=0; 7 div 10=0 и т.д.
Задания:
1.
Определите, какие из
приведённых ниже имён нельзя использовать в заголовке программы:
а) Seleznev_Petr_11Б; б) F7_1f2
; в) Dog-Cat; г) Petr Iwanov
10d; д) 10b_Iwanov_Petr; e) Alfa; ж) Alfa/beta;
з) Wr12.23.
2.
Правильно ли записаны
значения переменных?
5; -2; 3,7; 56.8; 2Е2; 8.7Е-3;
345.; 3.6 Е8
3.
Определите результаты
операций:
а) х:=3 mod 5; б) х:=7 div 3+7 mod 3 ; в)
x:=27 div 3 div 3; г) х:=27 mod 5+3
4.
Определите результат
вычислений:
а)
y:=sqrt(sqr(3)+sqr(4));
б)
y:=sqr(sin(0.5))+sqr(cos(0.5));
в)
y:=abs(cos(Pi)-sin(Pi/2)).
5.
Запишите по правилам языка
Паскаль:
а) +x2; б) tgx +1A; в) 3х2 +2х2+1; г)
25
Ввод данных в Паскале.
Ввод данных
осуществляется с помощью процедур read, readln.
Формат записи:
Read (имена переменных);
Например: read (а,b,c);
При использовании
данной процедуры, после ввода значений переменных, курсор остаётся в той же
строке, то есть следующий ввод или вывод начнётся в той же строке.
При использовании
процедуры readln, после ввода
данных, курсор переходит на новую строку и следующий ввод или вывод будет
осуществляться с новой строки.
Вывод данных в Паскале.
Осуществляется с
помощью процедур – write или writeln.
Формат записи:
write ('текст', имена переменных);
или
writeln ('текст', имена
переменных);
Например: write (‘сумма элементов равна’,а)
Отличаются эти две
процедуры так же, как и процедуры ввода (read и readln).
Рассмотрим
пример:
Найти сумму и
произведение 2 целых чисел.й процедуры, после ввода
значений переменных, курсор остаётся в той же строке,
Program summa;
Var a,b:integer;
s,p:integer;
Begin
Write
(‘введите 2 целых числа’);
Readln(a,b);
S:=a+b;
P:=a*b;
Writeln(‘сумма=’,s);
Writeln(‘произведение=’,p);
End.
После того, как
набрана программа, необходимо запустить ее: меню «Run», «Run» (Ctrl + F9) – программа
выполняется.
После того, как
набрана программа, необходимо запустить ее: меню «Run», «Run» (Ctrl + F9) – программа
выполняется.
Возможен
форматированный вывод данных. При этом для выводимого значения указывается
ширина поля вывода (количество знакомест). Если мы выводим вещественное
(дробное) число, то вторым числом через двоеточие указывается количество знаков
после запятой. Например: a:=2.34567; write(a:0:3); На экране выйдет
число 2,346.
Вообще, Паскаль
может работать в двух режимах:
1. режим редактора (синий экран) – здесь набирается и редактируется текст
программы;
2. режим «экран пользователя» (обычно черный экран) – здесь показывается результат
выполнения программы.
Переключение на
экран пользователя: меню «Debug», «Output» или «User Screen» (Alt+F5).
Задачи:
1. Найти стоимость заданного количества ткани. Цена и количество вводятся
с клавиатуры.
2. Составить программу определения скорости движения предмета. Расстояние
и время вводятся с клавиатуры.
3. Написать программу, которая поменяет местами, введенные с клавиатуры
значения двух переменных.
4. Составить программу вывода на экран значение числа пи.
5. Написать программу определения суммы цифр, составляющие вводимое с
клавиатуры трехзначное число.
Организация ветвлений на языке Паскаль.
В Паскале имеются специальные
операторы, которые позволяют реализовать команды ветвления и выбора. Это
операторы условного перехода и выбора.
Операторы
условного перехода:
Формат записи:
If логическое выражение then оператор else оператор;
Например:
If а>0
then s:=s+d else s:=s-d;
Эти операторы
переводятся так: If – если,
then – то, else
– иначе.
Неполная форма
оператора:
If логическое выражение then оператор;
Например:
If a<>b then a:=a-b;
If (х<=10) and
(x>=0) then y:=sqr(x);
Задача:
Найти наибольшее из двух введенных с
клавиатуры, чисел.
Program MAKS;
Var a,b,m:integer;
Begin
Write(‘Введите
значения чисел a,b');
readln(a,b);
if a>b then m:=a else m:=b;
writeIn('Haи6oльшee
из введенных чисел =', m);
end.
Задачи:
1.
Найти наибольшее из трёх введенных с клавиатуры,
чисел.
2. Вычислить значения у при заданном значении х:
a) Х2 при х>=0
У=
при х<0
c)
Х2
при х>0
y= cos
x при х=0
|X| при х<0
3. Составить программу определения четности числа.
Var a:longint;
Begin
Write (‘Введите целое число’);
Readln (a);
If a mod 2 = 0 then Write(‘четное’) else Write(‘нечетное’);
End.
После then
и else можно записать только один
оператор. Для записи нескольких операторов применяется так называемый составной
оператор:
Begin
Операторы
End;
Например:
If a<c then
begin
a:=с-a;
k:=k+l;
end
else
begin
c:=a-c;
I:=I+1;
end;
Перед else
никогда не ставится точка с запятой.
Пример: программа решения квадратного
уравнения.
Program urav;
Var a,b,c,d:integer; x1,x2:real;
Begin
Writeln(‘Решение
квадратного уравнения a*x*x+b*x+c=0’);
Writeln(‘Сообщите
значения a,b,c’);
Readln(a,b,c);
D:=b*b-4*a*c;
If d<0 then Writeln(‘Решений нет’);
If d=0 then
begin
X1:=-b/(2*a);
Writeln(‘x=’,x1);
end;
If d>0 then
begin
X1:=(-b+sqrt(d))/(2*a);
X2:=(-b-sqrt(d))/(2*a);
Writeln(‘x1=’,x1);
Writeln(‘x2=’,x2);
End;
End.
Задача: Составить
программу определения високосности года.
Пояснения:
1. Годы обозначающие столетия (например 1800, 1900) являются високосными,
если первые два числа делятся на 4;
2. Все другие года являются високосными, если цифра года делится без
остатка на 4.
Program Yers;
Var a,b,c:integer;
Begin
Write (‘Введите год’);
Readln (a);
b:=a mod 100;
If b=0 then
begin
c:=a div100;
If c mod 4 = 0 then writeln(‘год високосный’) else
writeln (‘год не високосный’);
end
else
if a mod 4 = 0 then writeln(‘високосный’) else writeln(‘не високосный’);
End.
Оператор
выбора.
А) Полная форма:
Case ключ of
Знач. 1: выражение1 (оператор1);
Знач. 2: выражение 2: (оператор 2);
Знач. N: выражение n (оператор n);
Else выражение (оператор);
End;
Б) Неполная форма
Саsе ключ of
Знач. 1: выражение1 (оператор 1);
Знач. 2: выражение 2 (оператор 2);
Знач. n: выражение n (оператор n);
End;
В качестве ключа
может быть имя переменной. Знач. – константа, тип которой должен совпадать с
типом ключа.
Пример:
Составить программу,
в которой при вводе номера дня недели, выводится его название (ввод - 1, вывод
– понедельник; ввод – 5, вывод – пятница).
Program week;
Var a:integer;
Begin
Writeln(‘введите
день недели’);
Readln(a);
Case a of
1:write(‘понедельник’);
2:write(‘вторник’);
3:write(‘среда’);
4:write(‘четверг’);
5:write(‘пятница’);
6:write(‘суббота’);
7:write(‘воскресенье’);
end;
end.
Задачи:
1
Дано двухзначное число. Определить:
a) Какая из его цифр больше, первая или вторая;
b) Является ли сумма его цифр двухзначным числом;
c) Больше ли числа а сумма его цифр;
d) Кратна ли трем сумма его цифр;
e) Кратна ли сумма его цифр числу а.
2
Дано трехзначное число. Выяснить, является ли оно
палиндромом («перевертышем»), т. е. таким числом, запись которого читается
одинаково слева направо и справа налево.
3
Определить, является ли число а делителем
числа b? А наоборот?
4
Вычислить значения у при заданном значении х:
а)
Х2
при х>=0
y=
|X| при х<0
b)
sin Х2 при х>0
y = cos
x при х=0
Х2+X
при х<0
5
Определить, является ли треугольник со сторонами а,
b, c равнобедренным.
6
Определить, является ли треугольник со сторонами а,
b, c равносторонним.
Организация циклов в Паскале.
В языке Паскаль реализованы команды повторения в виде операторов
цикла. В Паскале реализованы три типа операторов цикла.
1.
Циклы с
предусловием (цикл пока).
Цикл с предусловием имеет вид
Формат:
While
логическое условие do оператор;
Использованные здесь ключевые слова While и do имеют
смысл «пока» и «выполнять» соответственно.
Оператор находящиеся после ключевого слова do
выполняется до тех пор, пока значение логического условия true
(истина), то есть условие выполняется. В случае ложности условия,
осуществляется выход из цикла.
Представление цикла в виде блок-схемы:
Цикл может не выполниться ни разу, если значение условия сразу же оказывается false (ложно).
В качестве оператора может быть составной оператор. Тогда
используются операторные скобки begin …end.
Пример: Составить программу определения суммы целых
чисел от 1 до 100
Var n,s:integer;
begin
n:=0;
s:=0;
while n<=100 do
begin
s:=s+n; тело цикла
n:=n+1;
end;
writeln(‘сумма=’,s);
end.
Задачи:
1.
Составить программу
определения наибольшего общего делителя (НОД) для двух целых чисел (по
алгоритму Евклида).
Решение:
Program NOD;
Var a,b:integer;
begin
writeln (‘введите
два числа’);
read(a,b);
while a<>b do
if a>b then a:=a-b else b:=b-a;
writeln(‘НОД=’,a);
end.
2.
Дано целое число.
Определить:
a)
количество цифр в нем;
b)
сумму его цифр;
c)
произведение его цифр.
3.
В некоторой стране используется
денежные купюры достоинством в 1, 2, 4, 8, 16, 32, 64.Дано натуральное число n. Как,
наименьшим количеством таких денежных купюр можно выплатить сумму n(указать
количество каждой из используемых для выплаты купюр)?
2.
Цикл с
послеусловием (цикл до).
Формат:
Repeat
Тело цикла;
Until условие;
Использованные здесь зарезервированные слова Repeat и Until имеют
смысл «повторять» и «пока не» соответственно.
Сначала выполняются операторы, находящиеся в теле цикла, затем
проверяется условие и в случае его ложности, тело цикла
выполняется снова, и так до тех пор, пока условие не станет истинным. В
случае истинности условия, осуществляется выход из цикла.
Представление цикла в виде блок-схемы:
В таком цикле один раз операторы или выражения, находящиеся в теле
цикла будут выполнены в любом случае.
Пример: Составить программу определения суммы целых
чисел от 1 до 100
Var n,s:integer;
begin
n:=0;
s:=0
repeat
s:=s+n; тело цикла
n:=n+1
until
n>100
writeln(‘сумма=’,s)
end.
Здесь, если тело цикла состоит из нескольких операторов, нет
необходимости применять составной оператор begin…end,
то есть между ключевыми словами repeat и
until можно
ввести любое количество операторов. После последнего оператора тела цикла, не
ставится точка с запятой (смотри пример выше).
Задачи:
1.
Дано натуральное число.
Выяснить, является ли оно простым (простым называется натуральное число,
большее 1, не имеющее других делителей, кроме единицы и самого себя).
2.
Составить программу
определения значения y=cos x , где х принадлежит [0;1], шаг 0,1.
3.
Дано натуральное число.
Выяснить, является ли оно палиндромом («перевертышем»), т.е. числом, запись
которого читается одинаково слева направо и справа налево.
Как первый, так и второй тип цикла не позволяют явно задать количество
повторений. Такой возможностью обладает третий тип – цикл с параметром.
3.
Циклы с параметром
(цикл для).
Цикл с параметром применяется в тех случаях, когда количество
повторений выполнения команд заранее известно.
Имеются две формы этого цикла.
I. For i:=a to b do оператор;
i –
переменная(параметр цикла);
a - нач.
значение переменной i;
b - кон. значение переменной i.
a<b
Использованные здесь зарезервированные слова For, to и do
имеют смысл «для», «до» и «выполнять» соответственно.
В этих операторах нет шага изменения значений переменной. Он в данной форме
записи постоянен и равен 1.
Как работает этот цикл:
Сначала сравниваются значения a и b. Если равенства нет, выполняется оператор, следующий после зарезервированного слова do;
затем переменная i увеличивается на единицу. Далее, все эти
действия повторяются до тех пор пока не наступает равенства a и b.
Когда они равны, цикл заканчивается.
Если начальное значение i превышает или равно конечному значению с
самого начала (a>=b),
оператор, следующий после зарезервированного слова do,
не выполнится ни разу.
Примеры:
1.
begin
For k:=1 to 10 do
p:=p*k;
writeln(‘значение р=’,p);
end.
Если операторов в цикле несколько, то используются операторные скобки begin …end.
2.
begin
for k:=1 to 10 do
Begin
p:=p*k;
writeln(‘значение р=’,p);
end;
end.
Определите, как будет
отличаться результат выполнения этих программ.
II. Вторая форма
цикла для.
For i:=a downto
b do оператор;
i –
переменная(параметр цикла);
a - нач.
значение переменной i;
b - кон. значение переменной i.
a>b
downto – задает уменьшение значения переменной
I на 1. В данном случае шаг цикла равен -1.
Как работает этот цикл:
Сначала сравниваются значения a и b. Если равенства нет, выполняется оператор, следующий после зарезервированного слова do;
затем переменная i уменьшается на единицу. Далее, все эти
действия повторяются до тех пор пока не наступает равенства a и b.
Когда они равны, цикл заканчивается.
Если начальное значение i меньше или равно конечному значению с самого
начала (a<=b),
оператор, следующий после зарезервированного слова do,
не выполнится ни разу.
Пример:
For
I:=640 downto 10 do х:=х+1;
Как и в предыдущих случаях, в качестве оператора может выступать
составной оператор, заключенный в операторные скобки (begin…end).
Пример: Составить программу определения суммы
целых чисел от 1 до 100
Var n,s:integer;
begin
s:=0;
for
n:=1 to 100 do
s:=s+n;
writeln(‘сумма=’,s);
end.
Вы обратили внимание, что мы записали эту программу тремя разными
способами. Сравните их:
|
|
|
|
|
|
|
Цикл пока:
Var n,s:integer;
begin
n:=0; s:=0
while n<=100 do
begin
s:=s+n;
n:=n+1;
end;
writeln(‘сумма=’,s)
end.
|
|
|
|
Цикл до:
Var n,s:integer;
begin
n:=0; s:=0
repeat
s:=s+n;
n:=n+1;
until n>100
writeln(‘сумма=’,s)
end.
|
|
|
Цикл для:
Var n,s:integer;
begin
s:=0
for n:=1 to 100 do
s:=s+n;
writeln(‘сумма=’,s)
end.
|
|
|
Задачи.
Цикл с параметром (цикл для).
- Напечатать ряд из повторяющихся чисел 20 в виде:
20 20 20
20 20 20 20 20 20 20
- Составить программу определения квадрата целых
чисел от 1 до 10.
- Составить программу определения суммы квадратов
целых чисел от 1 до 8.
- Составить программу определения факториала 6.
- Составить программу определения факториала n.
- У гусей и кроликов вместе 64 лапы. Сколько могло
быть кроликов и гусей (указать все сочетания, которые возможны)?
Рекуррентные последовательности.
Формулы, выражающие очередной член последовательности через один или
несколько предыдущих членов, называются рекуррентными. Например,
в арифметической последовательности, каждый следующий член последовательности
равен предыдущему, увеличенному на разность прогрессии.
Задачи:
1.
Последовательность
Фибоначчи образуется так: первый и второй члены последовательности равны 1,
каждый следующий равен сумме двух предыдущих (1, 1, 2, 3, 5, 8, 13, …). Найти:
a)
Первое число в
последовательности Фибоначчи, большее n (значение n вводится с клавиатуры; n>1);
b)
Сумму всех чисел в
последовательности Фибоначчи. Которые не превосходят 1000.
2.
Дано натуральное число.
Определить, является ли оно членом последовательности Фибоначчи.
Вложенные циклы.
Вложенные циклы подразумевают, что существует внешний цикл и один или
несколько внутренних циклов. Каждое повторение внешнего цикла означает
завершение всех внутренних циклов; при этом всем выражениям, которые управляют
внутренними циклами, вновь присваивается начальные значения.
Примеры:
1.
Составить программу вывода
на экран цифры 5 в такой последовательности:
а)
5 5
5 5 5
5 5
5 5 5
5 5
5 5 5
5 5
5 5 5
5 5
5 5 5
var x,y:integer;
begin
for x:=1 to 5 do
begin
for y:=1 to 5 do
write(‘5’);
writeln;
end;
end.
В этой задачи внешний цикл с параметром х
задаёт номер столбца, а внутренний цикл с параметром у –
номер строки, где будет выводиться очередная «пятёрка».
б)
5
5 5
5 5
5
5 5
5 5
5 5
5 5 5
var x,y:integer;
begin
for y:=1 to 5 do
begin
for x:=1 to y do
write(‘5’);
writeln;
end;
end.
в)
5 5 5 5 5
5 5 5 5
5 5 5
5 5
5
2.
Вывести на экран полную
таблицу умножения в виде:
1*1=1 1*2=2 …. 1*9=9
2*1=2 2*2=4 …. 2*9=18
…. …. …. ….
9*1=9 9*2=18 …. 9*9=81
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.