Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_pascal01.doc
Скачиваний:
17
Добавлен:
02.04.2015
Размер:
386.56 Кб
Скачать

Контрольные вопросы

  1. Можно ли в процессе работы программы изменять значение констант?

  2. Для чего используется указание типа переменной?

  3. Как делятся операции по количеству операндов?

  4. Каков приоритет выполнения арифметических операций?

  5. Какие примеры унарной логической операции и унарной арифметической операции Вы можете привести?

  6. Чем отличается деление / от деления div?

  7. Чему равен остаток от целочисленного деления, если делимое меньше делителя?

  8. К каким типам применимы операции div и mod?

  9. Для какого типа данных определены операции and и or?

  10. Какой тип результата имеют операции отношения?

  11. С помощью каких функций можно преобразовать вещественный аргумент в целый?

  12. С помощью какой функции можно определить значение числа e?

  13. Каковы стандартные тригонометрические функции, определенные в Паскале?

  14. Каким образом можно записать на Паскале следующую операцию отношения: -10<x<10?

Задание 2

  1. Запишите на языке Паскаль:

  1. Определите тип следующих выражений:

  1. 1+sqrt(4)+sin(0)+0.0

  2. sqr(2.0)+sqrt(121)-3

  3. 3.1415-trunc(3.1415)

  4. sin(sqr(2)-1)+2*abs(-2)/cos(6.0)

  5. 16 div 5 -4/5

  6. 4*arctan(1)-1+4 mod 5

  7. ord(`z`)-round(56.7/34)*frac(3)

  8. x>0 and (b-1)<>3 or false

  9. 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;

Контрольные вопросы

  1. Можно ли в левой части оператора присваивания использовать выражение?

  2. Может ли правая часть оператора присваивания быть пустой?

  3. Могут ли левая и правая части оператора присваивания иметь разные типы?

Задание 3

  1. Заданы описания:

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

23.4 12

ENTER

1

ENTER

ENTER

2.5 3.4

w

t

ENTER

rue

Для данного описания переменных

верно:

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.