- •Структура программы
- •Раздел var;
- •Типы величин
- •Ввод / вывод в Паскале.
- •Лабораторная работа№1
- •5. Ветвление. Формат оператора.
- •6.Применение ветвлений при решении задач Неполная форма ветвления
- •Составной оператор
- •Оператор выбора
- •Цикл c предусловием.
- •Цикл с постусловием
- •10 Решение задач на циклы.
- •11. Цикл с параметром.
- •12. Накопление суммы, произведения, количества.
- •13. Сочетание циклов и разветвлений.
- •14. Вычисление рекуррентных последовательностей
- •14. Задачи на поиск.
- •15. Поиск минимального/ максимального элемента.
Структура программы
Программа состоит из заголовка программы и тела программы (блока), за которым следует точка — признак конца программы. В свою очередь, блок содержит разделы описаний и раздел операторов.
Program <имя программы>;
Label <раздел меток>;
Const <раздел констант>;
Туре <раздел типов>;
Var <раздел переменных>;
Procedure (Function) <раздел подпрограмм>;
Begin
<раздел операторов>
End.
Раздел операторов имеется в любой программе и является основным. Предшествующие разделы носят характер описаний и не все обязательно присутствуют в каждой программе.
Заголовок программы начинается со слова Program (программа), за которым следует произвольное имя, придуманное программистом.
Раздел описания переменных начинается со слова Var (variables — переменные), за которым следует список переменных. Тип указывается после двоеточия.
Начало и конец раздела операторов программы отмечаются словами Begin (начало) и End (конец). В конце программы обязательно ставится точка. Например:
Program Division;
Var a,b,c,d,m,n: Integer;
Begin
ReadLn(a,b,с,d);
m:=a*d;
n:=b*c;
WriteLn(m,n);
End.
Необходимо строгое соблюдение правил правописания (синтаксиса) программы. В частности, в Паскале однозначно определено назначение знаков пунктуации. Точка с запятой (;) ставится в конце заголовка программы, в конце раздела описания переменных, после каждого оператора. Перед словом End точку с запятой можно не ставить. Запятая (,) является разделителем элементов во всевозможных списках: списке переменных в разделе описания, списке вводимых и выводимых величин
Комментарии. Следующие конструкции представляют собой комментарии и поэтому игнорируются компилятором:
{любой текст, не содержащий символ «}» };
(* любой текст, не содержащий символы «*)»*);
// любой текст, идущий после символов «//» до конца строки.
Буквы русского алфавита употребляются только в комментариях, в литерных и текстовых константах.
Упражнения
Какой из перечисленных разделов обязателен в программе:
Раздел var;
раздел const;
раздел type;
раздел begin .. end;
раздел label?
Какие заголовки программ правильны:
Program Zarplata;
Program Сумма;
Program Summa Nalogov?
Каков результат выполнения программы:
Program Tutor;
Begin
Writeln(5*6);
Writeln(‘ Привет’);
End.
Измените программу, чтобы результат равнялся 35.
Какие из комментариев правильны:
{Программа вычисляет логарифм введенного числа};
(* Это тоже комментарий*);
{{ Комментарий в комментарии }};
(*{ И это тоже комментарий }*);
(*(* Самый последний вариант*)*)?
Типы величин
Для хранения и обработки данных в программах используются константы и переменные. Переменные и константы (величины) имеют три основных свойства: имя, значение и тип.
Имя переменной (константы) уникально, выбирается программистом в соответствии со след. правилами:
Имя начинается с буквы;
Содержит буквы латинского алфавита, цифры и символ подчеркивания;
Количество символов не более 255 (не более 40);
Нельзя использовать служебные слова в качестве идентификатора.
Тип величины определяет форму внутреннего представления величины, множество допустимых значений величины, множество действий (операций), которые можно выполнять с этой величиной. Среди типов данных различают стандартные (предопределенные разработчиками языка) и пользовательские (определяемые программистом в своей программе). Существуют следующие стандартные типы: целые числа (Byte, Integer), вещественные числа (Real), символьный (Char) , строковый (String), логический (Boolean) типы. Программист может описать свой тип на основе этих базовых в разделе описания типов.
Таблица 1. Типы переменных и констант
Идентификатор |
Длина, байт |
Диапазон (множество) значений |
Целые типы |
||
Integer |
2 |
-32768 ...32767 |
Byte |
1 |
0...255 |
Word |
2 |
0... 65535 |
Shortint |
1 |
-128... 127 |
Longint |
4 |
-2147483648 ...2147483647 |
Вещественные типы |
||
Real |
6 |
2,9*10-39... 1,7-1038 (11 - 12) |
Single |
4 |
1,5*10-45...3,4-1038 (7-8) |
Double |
8 |
5*10-324... 1,7-10308 (15-16) |
Extended |
10 |
3,4*10-4932... 1,1*104932 (19-20) |
Логический тип |
||
Boolean |
1 |
true, false |
Символьный тип |
||
Char |
1 |
все символы кода ASCII |
Тип переменной определяется типом данных, которые могут быть значениями переменных.
Упражнения
Что в списке можно рассматривать как идентификаторы:
FIO, ФИО, 222, X, Y, >=, &, $< Summa, _Rezult
Какие из следующих утверждений неправильны:
для диапазона 1 .. 260 подходит тип byte;
для диапазона 0 .. 75000 подходит тип word;
для диапазона ‘a’ .. ‘z’ подходит тип char;
для вещественных переменных обычно применяют тип real;
значение 32000 входит в тип integer.
Какой идентификатор описывает самый широкий диапазон данных
Определить типы величин:
Число столов в кабинете;
Вес Снегурочки;
Количество самолетов в аэропорту;
Скорость ракеты;
Ответ на вопрос: есть ли у Вас собака?
Текст телеграммы;
Сколько звезд в галактике?
Расстояние до Альдебарана.
В задаче про корабль и драгоценности определить для каждой величины имя, тип, значение.
Величина |
имя |
тип |
примерное значение |
диаметр |
d |
real |
75.2 |
Объявление переменных. Перед первым использованием переменную следует объявить, т.е. указать СП имя переменной и ее тип (размер ячейки). Это делается в разделе переменных программы
Пример раздела переменных программы:
Var m,n,k: Integer;
x,y,z: Real;
Symbol: Char;
Константы. В отличие от переменных константы не могут изменять своего значения в ходе выполнения программы. Константы объявляются командой Const.
Пример:
Const
Мах=1000;
G=9.81;
Тип константы определяется по контексту, т.е. по форме ее записи в программе. Например: 125- целое десятичное число, $1FF – целое шестнадцатеричное число? 124.67 - вещественное число, -12.9 – отрицательное вещественное число.
Вещественные десятичные числа в форме с плавающей точкой записываются в экспоненциальном виде:m*E+p. Например:
5.18E+02=5.18*102=518
10E-03=10*10-3=0.01
Существуют встроенные константы, например, для вычисления значения числа π3,14 в Pascal используется стандартная функция с идентификатором PI.
Кроме стандартных типов, имеются скалярные типы, определенные самим пользователем: перечисляемый и интервальный типы (не более 256 элементов). Перечисляемый тип – тип данных, заданный списком значений, например:
Type
Gaz=(Ge, C, O, N)
Metall=(Na, K, Li, Cu, Zn);
Var
G1,G2,G3: Gaz;
M1,M2:Metall;
Season:(Winter, Spring, Summer, Autumn);
Интервальный тип позволяет задавать диапазон значений для данной переменной, например:
Type
Days=1 .. 31;
Var
RabDay: Days;
Упражнения
Какие утверждения неправильны:
144 – целое число;
125 – шестнадцатеричное число;
124.98 – вещественное число;
$1FF - шестнадцатеричное число;
‘Адрес’ – целочисленная константа;
-12.3 – отрицательное вещественное число;
‘Сумма’ – строковое значение?
Какие числа представлены в форме с плавающей точкой:
165, 10.3Е+02, 1234.678, 3789, 5.7Е0.2, 63, 9Е-04
В задаче про корабль и драгоценности объявить все величины.
Основные операторы.
Присваивание. Один из способов записи в переменную значения. Формат оператора.
имя := выражение
где имя – имя переменной,
выражение – арифметическое, строковое или логическое выражение, которое будет вычислено и его значение переписано в соответствующую ячейку.
Например:
x:=2
x:=10*x
x:=-x
В левой части оператора может стоять переменная любого типа, но при этом тип переменной и выражения должны совпадать.
Упражнения
увеличить значение переменной а на 2;
удвоить значение переменной t;
изменить знак x на противоположный;
произвести обмен значениями x и y.
Выражение – это запись, определяющая последовательность действий над величинами. Выражение может содержать константы, переменные, функции, знаки операций.
Операции подразделяются на несколько групп:
• арифметические операции;
• операции отношения;
• логические операции;
• операции с битами информации.
Каждой группе операций соответствуют определенные типы переменных и констант.
При записи выражения необходимо учитывать следующее:
Формула записывается в строку без подстрочных и надстрочных знаков.
Для указания порядка действий используют круглые скобки. Внутри скобок действия выполняются слева направо в соответствии со старшинством (приоритетом) операций. Операции одного приоритета выполняются последовательно слева направо.
Два знака операций нельзя ставить рядом.
Операции с более высоким приоритетом выполняются раньше операций с меньшим приоритетом. Порядок убывания приоритетов:
• вычисление функции;
• унарная операция смены знака (-);
• *, /, div, mod;
• +, -•
Несколько записанных подряд операций одинакового приоритета выполняются последовательно слева направо.
Часть выражения, заключенная в скобки, вычисляется в первую очередь. (Например, (А+В) * (С—D) — умножение производится после сложения и вычитания.)
Не следует записывать выражений, не имеющих математического смысла. Например, деление на нуль, логарифм отрицательного числа и т. п.
Арифметические операции.
Арифметические операции могут применяться только к операндам целых и вещественных типов.
К арифметическим операциям относятся: :
+ (сложение),
- (вычитание),
* (умножение),
/ (деление),
div (целочисленное деление), например, 11 div 4=2,
mod (остаток от целочисленного деления), например, 11 mod 4=3,
В качестве операндов арифметических операций могут выступать стандартные арифметические (или тригонометрические) функции, т. е. функции с результатом целого или вещественного типа, аргументами которых являются выражения целого или вещественного типа.
Примеры записи арифметических выражений:
Записать на языке Паскаль:
(x+y)/(x+1)-(x*y-12)/(34+x)
Определить первые цифры двухразрядного числа х и трехразрядного у.
x div 10
y div 100
Определить последнюю цифру произвольного числа b.
b mod 10
Результатом вычисления любого арифметического выражения является число;
Д/З : Упражнения.
Для следующих формул записать соответствующие арифметические выражения на Паскале:
а) а + b x + c y z ; б) [(ах - b)x + c]x-d;
Записать математические формулы, соответствующие следующим выражениям на Паскале:
а) ( p + q ) / ( r + s ) - p * q / ( r * s );
б) lE3+beta/(x-gamma*delta);
в) a / b * ( c + d ) - ( a - b ) / b / с + 1Е-8.
Поменять местами значения целых переменных х и у, не используя дополнительные переменные. Найдя такой алгоритм, определить, в чем его недостаток по сравнению с методом обмена через третью переменную. Можно ли его применять для вещественных чисел?
логические операции:
Операции отношения осуществляют сравнение двух операндов и определяют, истинно или ложно соответствующее отношение между ними.
x > 5; y+3 =< 7; z*z <> 0.
Логические операции выполняются над операндами булева типа. Имеются четыре логические операции:
Not — отрицание;
And — логическое умножение (конъюнкция);
Or — логическое сложение (дизъюнкция).
Xor - операция — исключающее ИЛИ
Операции перечислены в порядке убывания приоритетов. Операции отношения имеют самый низкий приоритет и поэтому записываются в скобках:
(1<=Х) And (X<=50)
Примеры логических операторов присваивания:
1) d:=true;
2) b:=(x>y) and (k<>0);
3) c:=d or b and not(odd(k) and d), (см.Таблица 2. Стандартные арифметические функции.)
Вычислить значения логических выражений:
а) К mod 7= K div 5-1 при К=15;
б) odd(trunc(10*P)) при Р=0.182;
в) not odd(n)при n=0;
г) t and (P mod 3=0) при t=true, P=1010l;
д) (х*у<>0) and (у>х) при x=2, y=l;
е) a or not b при a=false, b=true.
Написать оператор присваивания, в результате выполнения которого логическая переменная t получит значение true , если высказывание истинно, и значение false — в противном случае, для следующих высказываний:
а) х — положительное число;
б) р делится нацело на d;
в) каждое из чисел х, у, z положительно;
г) только одно из чисел х, у, z положительно;
д) целое число а является четным двузначным числом;
е) цифра 5 входит в десятичную запись трехзначного целого числа k;
ж) все цифры данного трехзначного числа различны.
Строковые выражения
Строковый тип данных. Строковые выражения.
Строковый тип относится к данным структурированного типа. Строка – это последовательность символов ASCII. Строковое значение заключается в апострофы(‘’). Для определения данных строкового типа используется идентификатор string, например:
Var
Address: String[20];
В квадратных скобках указывается максимальная длина строки, если не указать, длина строки по умолчанию принимается равной 255 байт.
Для хранения строки из n символов отводится n+1 байт( 0-й байт используется для значения текущей длины строки).
К любому символу в строке можно обратиться по его номеру.
Операция сцепления (+) применяется для соединения нескольких строк в одну результирующую строку. Сцеплять можно как строковые константы, так и переменные. Результатом вычисления строкового выражения является строка символов.
Пример: 'ЭВМ' + IВМ' + ' РС’ .
В результате получится строка:
'ЭВМ IBM PC’ .
Длина результирующей строки не должна превышать 255 символов.
Операции отношения =, <, >, <=, >=, <> производят сравнение двух строк, в результате чего получается логическая величина (true или false). Операция отношения имеет более низкий приоритет, чем операция сцепления.
Сравнение строк производится слева направо до первого несовпадающего символа, и больше считается та строка, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.
Пример:
Выражение Результат
'cosm1 ' < ' cosm2 ' True
'pascal'>’PASCAL’ True
'Ключ_'>'Ключ' True
'MS DOS'='MS DOS' True
Функции
Функция выступает как операнд в выражении. Функция – вспомогательная программа (процедура). Функция вызывается на выполнение из выражения указанием ее имени. Аргументы называются фактическими параметрами и являются в общем случае выражениями арифметического типа. Аргументы записываются в круглых скобках. Функция возвращает в точку вызова (один) результат вычисления функции — величину соответствующего типа.
Функции бывают:
стандартные, т.е. встроенные в систему программирования;
пользовательские. (объявляются с помощью оператора Function.)
Таблица 2. Стандартные арифметические функции.
Pi |
Число = 3.1415926536Е + 00 |
Abs(x) |
Модуль аргумента х |
Arctan(x) |
Арктангенс х (радианы) |
Cos(x) |
Косинус х (х в радианах) |
Ехр(х) |
ех — экспонента |
Frac(x) |
Дробная часть х |
Int(х) |
Целая часть х |
Ln (x) |
Натуральный логарифм х |
Random |
Псевдослучайное число винтервале [0, 1) |
Random(x) |
Псевдослучайное число винтервале [0, х) |
Round(x) |
Округление до ближайшего |
Sin(x) |
Синус х (х в радианах) |
Sqr(x) |
Квадрат х |
Sqrt(x) |
Корень квадратный из х целого |
Trunc(x) |
Ближайшее целое, не превышающее х по модулю |
Например, следующее выражение:
запишется на Паскале следующим образом:
(2* a + Sqrt ( 0.5 * Sin (x+ у))) / (0.2 * С - Ln (х- у))
В Паскале нет операции или стандартной функции возведения числа в произвольную степень. Для вычисления xy рекомендуется поступать следующим образом:
• если у — целое значение, то степень вычисляется через умножение; например, х3 запишется х * х * х; большие степени следует вычислять умножением в цикле;
• если у — вещественное значение, то используется следующая математическая формула:
На Паскале это будет выглядеть так: Exp(y * Ln (x))
Очевидно, что при вещественном у не допускается нулевое или отрицательное значение х. Для целого у такого ограничения нет.
Например,
На
Паскале это будет так: Exp (l/3 * Ln ( a + l))
Записать выражения:
(sin(x)+cos(y))/(cos(x)-sin(y))*tan(x*y)
Ln(abs((y-sqrt(abs(x)))*(x-y/(x+sqr(x)/4))))
Cos2x –sin x2 sqr(cos(x))-sin(sqr(x))
+16x
cos(x y)-2 cos(x)/(pi-2*x)+16*x*cos(x*y)-2
Округлить число t с точностью до второго знака после запятой.
Round(t*100)/100
Вычислить дробную часть числа x.
x- Trunc(x)
. Вычислить среднюю цифру трехразрядного числа t.
Присвоить целой переменной h значение цифры, стоящей в разряде сотен в записи положительного целого числа к (например, если к = 28796, то h = 7).
Целой переменной S присвоить значение суммы цифр трехзначного целого числа к.
Д/З Упражнения
Почему в Паскале аргумент функции всегда записывают в скобках (например, пишут ln(5), а не ln5)?
Для следующих формул записать соответствующие арифметические выражения на Паскале:
Вычислить выражения
а) trunc(6.9) ; д) round(6.9);
б) trunc(6.2); e) round(6.2);
в) 20 div 6; ж) 20 mod 6;
г) 2 div 5; з) 2 mod 5;
и) 3*7 div 2 mod 7 / 3 - trunc(sin (1)).
Определить тип выражения:
а) 1+0.0; б) 20/4; в) sqr(4);
г) sqrt(16); д) sin(0) ; e)trunc(-3.14).
Если у — вещественная переменная, а n — целая, то какие из следующих операторов присваивания правильные, а какие нет:
а) y:=n+l; д) у=n div 2;
б) n : = y - l ; e) у=у div 2;
в) n:=4 . 0; ж) n=n/2;
г) y : = trunc(у); з) n=sqr(sqrt(n))?
Таблица 3 Стандартные строковые функции
Имя функции |
Значение, возвращаемое функцией |
Length (S) |
определяет текущую длину строки S. Результат — значение целого типа. |
Concat (SI, S2, . . ., SN) |
выполняет сцепление (конкатенацию) строк S1, . . . , SN в одну строку. |
Copy (S, Poz, N) |
выделяет из строки s подстроку длиной в N символов, начиная с позиции Poz |
Pos ( S1 , S2) |
обнаруживает первое появление в строке S2 подстроки S1 . Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1 |
Процедура Delete (S, Poz, N) |
выполняет удаление N символов из строки s, начиная с позиции Poz. |
Процедура insert (SI, S2, Poz) |
выполняет вставку строки SI в строку S2, начиная с позиции Poz. |
Str(IBR,St) |
преобразует числового значения величины IBR и помещает результата в строку St |
UpCase(Ch) |
преобразует строчную букву в прописную. |
Пример:
Значение S Выражение Результат
'ABCDEFG' Copy(S,2,3) 'BCD'
'ABCDEFG' Copy(S, 4,4) 'DEFG'
Concat ( 'АА' , 'XX' , 'Y' ) 'AAXXY'
' test - 5 ' Length (S) 6
‘(А+В) *С’ Length (S) 7
' abcdef’ Pos (' c d ' , S2) 3
'abcdcdef’ Pos('cd',S) 3
' abcdef’ Pos('k',S2) 0
'abcdefg' Delete (S,3,2) 'abefg'
'abcdefg' Delete(S,2,6) 'a'
'ЭВМ PC Insert('IBM-',S,5) 'ЭВМ IBM-PC
‘Рис. 2’ Insert('N',S,6) 'Рис.N2'
Из слова «железнодорожник» получить слова: «жезл», «колено», «крокодил».
a:=’ железнодорожник’
b:= Copy(a,1,2)+ Copy(a,5,1)+ Copy(a, 3,1)
…
В переменных x,y,z хранятся фамилия, имя и отчество. Записать в переменную а инициалы.
В переменной а хранится фамилия, имя и отчество. Получить в переменную x фамилию, в y – имя, и z – отчество.
Получить слова «правило» из слова «операция», используя процедуры Delete, Insert.
В данном слове произвести обмен первого и последнего символов.
К данному слову присоединить столько «!», сколько в нем имеется букв, например, из строки «УРА» получить «УРА!!!»).
Таблица 4 Функции, связывающие различные типы данных
Функции ord, pred и succ применимы только к порядковым типам. Из простых типов это все, кроме вещественного. Функция ord, применяемая к целому числу, дает его собственное значение. Например,
ord (-35) = - 35 ;
ord(128)=128
Если аргумент целый, то, например, оператор y:=pred(x) эквивалентен у:=х-1, a y:=succ(x) эквивалентен у:=х+1.
Для символьного типа аргумента эти функции дают соответственно предыдущий и следующий символ в таблице внутренней кодировки.
pred (' b ') = ' a ' , a succ (' b ') = ' с'
To же относится и к цифровым литерам:
pred (' 5 ') = ' 4 ' ; succ(' 5 ') = ' 6'
Функция chr(x) является обратной к функции ord(x), если х — символьная величина: chr(ord(x))= х , ord (' a ') = 97 ; chr(97) = ' a '
В некоторых случаях возникает задача преобразования символьного представления числа в числовой тип. Например, нужно получить из литеры ' 5' целое число 5. Это делается так:
N : = o r d (' 5 ') - o r d (' 0 ') ,
где N — целая переменная. Здесь использован тот факт, что код литеры ' 5 ' на пять единиц больше кода ' 0 '.
Булевский тип также является порядковым. Порядок расположения двух его значений таков: false , true. Отсюда справедливы следующие отношения:
ord(false)=0, succ(false)=true,
ord(true)=l, pred(true)=false
Упражнения
Если a=true и х=1, то какое значение получит логическая переменная d после выполнения оператора присваивания:
a) d:=x<2;
б) d:=not a or odd(x);
в) d:=ord(a)<>x
Пусть х, у, z — вещественные переменные. Как вы думаете, какую задачу решает следующий оператор:
z:=x*ord(х>=у)+y*ord(y>x)
Ответ такой: z — max(x, у).
Строка представляет собой запись целого числа. Перевести ее в соответствующую величину целого типа.
