- •Федеральное агентство по образованию
- •1. Понятие программы
- •2. Синтаксис
- •3. Структура программы
- •3.1. Идентификаторы
- •3.2. Алфавит языка
- •4. Стандартные типы данных
- •4.1. Целые типы
- •4.2. Вещественные типы
- •4.3. Символьный тип char
- •4.4. Логический тип boolean
- •Контрольные вопросы
- •Задание 1
- •5. Константы
- •6. Переменные
- •7. Операции и выражения
- •7.1. Арифметические операции
- •7.2. Символьные операции
- •7.3. Операции сравнения
- •7.4. Логические операции
- •7.5. Стандартные функции
- •Контрольные вопросы
- •Задание 2
- •8. Оператор присваивания
- •Контрольные вопросы
- •Задание 3
- •9. Процедуры ввода-вывода
- •Контрольные вопросы
- •Задание 4
- •Библиографический список
- •Программирование на языке паскаль: структура программы, линейные алгоритмы
- •260500 (Специальность 260501) дневной формы обучения
- •394000, Воронеж, пр. Революции, 19
Контрольные вопросы
Можно ли в процессе работы программы изменять значение констант?
Для чего используется указание типа переменной?
Как делятся операции по количеству операндов?
Каков приоритет выполнения арифметических операций?
Какие примеры унарной логической операции и унарной арифметической операции Вы можете привести?
Чем отличается деление / от деления div?
Чему равен остаток от целочисленного деления, если делимое меньше делителя?
К каким типам применимы операции div и mod?
Для какого типа данных определены операции and и or?
Какой тип результата имеют операции отношения?
С помощью каких функций можно преобразовать вещественный аргумент в целый?
С помощью какой функции можно определить значение числа e?
Каковы стандартные тригонометрические функции, определенные в Паскале?
Каким образом можно записать на Паскале следующую операцию отношения: -10<x<10?
Задание 2
Запишите на языке Паскаль:
Определите тип следующих выражений:
1+sqrt(4)+sin(0)+0.0
sqr(2.0)+sqrt(121)-3
3.1415-trunc(3.1415)
sin(sqr(2)-1)+2*abs(-2)/cos(6.0)
16 div 5 -4/5
4*arctan(1)-1+4 mod 5
ord(`z`)-round(56.7/34)*frac(3)
x>0 and (b-1)<>3 or false
x-1=3 and 4<=6
8. Оператор присваивания
Оператор присваивания позволяет поместить в переменную значение выражения. Оператор работает следующим образом: вычисляется значение выражения и помещается в переменную. Прежнее значение переменной утрачивается.
Например, x:=x+3 означает увеличение на 3 содержимого переменной х. Выполнится этот оператор следующим образом: будет извлечено значение переменной х, к нему будет добавлено число 3, полученный результат будет помещен в переменную х.
Переменная и выражение должны иметь идентичный (или совместимый) тип. Исключение: переменная может быть вещественного типа, а значение выражения – целого.
Оператор присваивания:
Пример:
var i,j:integer; x,y:real; a,b:char; p,q:boolean;
Верно: p:= i<5; a:= ’+’; x:= i+ j div 7; q:= i mod 5 = 0; j:= round(x/2); y:= 275; x:= 13.56; |
Не верно: i:= 3.678; b:= ’false’; a:= 4;
|
Контрольные вопросы
Можно ли в левой части оператора присваивания использовать выражение?
Может ли правая часть оператора присваивания быть пустой?
Могут ли левая и правая части оператора присваивания иметь разные типы?
Задание 3
Заданы описания:
var a,b:boolean; c:char;
i,j:integer; x,y:real;
Какие из нижеследующих операторов содержат ошибки?
x:=i*y; i:=j/2;
x:=y mod 4; j:=i+c;
c:=c+j; b:=((x-y)<2)=a;
a:=c+’w’; j:=i or 100;
y:= j mod 2 + 4; i:= j+ 10 mod 5;
b:= (x<y) and (3<x); b:= a or (i<x);
x:= i+j*3-y; j:= 10 div (5*x);
9. Процедуры ввода-вывода
Для ввода с клавиатуры и вывода на экран используются стандартные процедуры ввода и вывода. Для вызова таких процедур надо указать имя процедуры и в скобках перечислить параметры, разделяемые запятой. В случае отсутствия параметров надо указать только имя процедуры.
Оператор вызова процедуры ввода:
Параметрами для процедур Read и Readln должны быть переменные целого, вещественного и символьного типов.
Процедура Read считывает то, что пользователь вводит с клавиатуры, помещает в переменную, указанную в качестве параметра, и оставляет курсор в той же строке.
Процедура Readln считывает то, что пользователь вводит с клавиатуры, помещает в переменную, указанную в качестве параметра, и переводит курсор на начало следующей строки. Процедура Readln может не иметь параметров, тогда ее действие – ожидание нажатия пользователем клавиши <Enter>.
Пример 1
var i,j:integer; x,y:real; a,b:char; p,q:boolean; begin read(x); readln(i); readln; readln(x,y); readln(a); readln(p) end. |
в x будет помещено число 123.4 в i будет помещено число 12 ожидается нажатие клавиши <Enter> в x будет помещено число 12.5, в y - 3.4 в a будет помещен символ w ОШИБКА!!! |
Экран:
1
ENTER
ENTER
1
ENTER
ENTER
w
t
ENTER
Для данного описания переменных
верно: p:= i<5; a:= ’+’; x:= i+ j div 7; q:= i mod 5 = 0; j:= round(x/2); y:= 275; x:= 13.56; |
не верно: i:= 3.678; b:= ’false’; a:= 4; |
Пример 2
В
13
-23
12 5.7e-2
-3.5
# 7
var a,b,c:char;
i,j:integer;
x,y,z:real;
begin
read(i); (* i будет равно 13*)
readln(j); (* j будет равно -23*)
read(x); (* x будет равно 12.0*)
read(y); (* y будет равно 0.057*)
readln(z); (* z будет равно -3.5*)
read(a); (* a будет равно '#'*)
read(b); (* b будет равно пробелу*)
readln(c); (* c будет равно ’7’*)
end.
Оператор вызова процедуры вывода:
Параметрами для процедур Write и Writeln могут быть строковые значения (текст в одинарных кавычках) и переменные целого, вещественного, символьного и булевского типов.
Процедура Write выводит на экран указанные параметры и оставляет курсор в той же строке.
Процедура Writeln выводит на экран указанные параметры и переводит курсор на начало следующей строки. Процедура Writeln может не иметь параметров, тогда ее действие – перевод курсора на новую строку.
Пример 3
var i,j:integer;
begin
i:=11;
j:=5*i-10;
writeln(’i = ’, i, ’, j = ’,j);
writeln;
writeln(’*****’, ’Hello, world!’);
writeln(’------’);
writeln;
write(’First,’);
write(’ Second,’);
write(’Third ’);
writeln(’ – words!’);
writeln;
writeln;
writeln(’*****’);
end.
Экран:
i
= 11, j = 45
*****Hello,
world!
------
First,
Second,Third – words!
*****
Для параметров процедуры вывода можно задать формат вывода, указав минимальное количество позиций вывода. Для целых значений надо задать количество позиций вывода, например, write(i:3). Вещественные числа по умолчанию выводятся в плавающем формате. Для вещественных значений следует задать общее количество позиций вывода и количество знаков после десятичной точки, например, write(x:8:2).
Пример 4
var b:boolean; c:char;
i:integer; x:real;
begin
i:=12345;
x:=-123.1234567;
c:=’A’;
b:=True;
writeln(’Печать без форматирования’);
writeln(i,b,c,x);
writeln;
writeln(’Форматированная печать’);
writeln(i:10,b:10,c:10,x:10:3);
writeln;
writeln(’Печать веществ.чисел в фиксированном формате’);
writeln(x:3:0);
writeln(x:5:3);
writeln(x:15:3);
writeln(x:11:9);
writeln(x:15:8);
end.
Э
Печать
без форматирования
12345TRUEA-1.2312345670E+02
Форматированная
печать
12345
TRUE
A
-123.123
Печать
веществ.чисел в фиксированном формате
-123
-123.123
-123.123
-123.123456700
-123.12345670
Пример 5
Пользователь вводит некоторую сумму в долларах. Подсчитать и вывести на экран сумму в рублях.
Решение:
const kurs_dollara=28.8;
var doll, rub:real;
begin
write(’Введите сумму в долларах: ’);
readln(doll);
rub:=dollar*kurs_dollara;
writeln;
writeln(’Сумма в руб. составит ’, rub, ’ руб.’);
end.
или (в отличие от предыдущего варианта курс доллара вводится пользователем, а не определяется как конкретное значение – программа становится универсальнее):
var kurs_dollara, doll, rub:real;
begin
writeln(’Введите курс доллара:’);
readln(kurs_dollara);
writeln(’Введите сумму в долларах:’);
readln(doll);
rub:=dollar*kurs_dollara;
writeln(’Сумма в руб. составит ’, rub, ’ руб.’);
end.
Пример 6
Подсчитать и вывести на экран 1/6 площади круга с радиусом 10.5.
Решение:
var radius, S:real;
begin
radius:=10.5;
S:=sqr(radius)*pi/6;
writeln(’Искомая площадь = ’, S:10:2);
end.
Пример 7
Определить число, полученное выписыванием в обратном порядке цифр заданного целого положительного трехзначного числа.
Решение:
var num, new_num:integer; ed, des, sot: byte;
begin
write(’Введите положит. трехзначное число: ’);
readln(num);
(* будем считать, что пользователь введет действительно трехзначное число, но оно может оказаться отрицательным, поэтому поместим в переменную num модуль этого числа *)
num:=abs(num);
(* получим количество единиц числа *)
ed:=num mod 10;
(* получим количество единиц числа *)
sot:=num div 100;
(* кол-во десятков можно получить 2 способами *)
(* способ 1 – например, из 123 получить 12 и взять последнюю цифру *)
des:=num div 10 mod 10;
(* способ 2 – например, из 123 получить 23 и взять первую цифру *)
des:=num mod 100 div 10;
(* соберем новое число *)
new_num:= ed*100+des*10+sot;
writeln(’Получилось новое число ’, new_num);
end.