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

Оператор n

end.

Операторы можно разделить на пустые, простые и сложные. Пустой оператор («;») не содержит никаких символов и не обозначает никаких действий. Простые операторы не содержат внутри себя других операторов. К простым операторам относятся следующие операторы: присваивания, перехода, пустой оператор, операторы ввода и вывода. К сложным операторам относятся: составной оператор (состоящий из других операторов), оператор условного перехода, операторы цикла, оператор выбора, оператор присоединения в записях.

   Составной оператор, строго говоря, оператором не является. Дело в том, что также как арифметические действия иногда бывает необходимо заключать в скобки, последовательности команд (операторов) тоже иногда требуют объединения. Это позволяют сделать так называемые операторные скобки. Формат (общий вид) составного оператора таков:

begin <оператор 1>; <оператор 2>; ...... <оператор N> end;

 

     Возможно, такая структура напоминает основную структуру программы. Действительно, отличие только в том, что после end в конце составного оператора ставится точка с запятой, а в конце программы - точка. По своей сути вся программа представляет собой большой составной оператор.

     Обратите внимание на то, что точка с запятой перед end может не ставиться.

     Составной оператор предоставляет возможность выполнить произвольное количество команд там, где подразумевается использование только одного оператора. Как вы узнаете потом, такая необходимость встречается довольно часто.

При записи инструкций необходимо соблюдать правила расстановки символов точки с запятой:

  • Точка с запятой не ставится в разделах описаний после зарезервированных слов unit, uses, label, type, const, var и ставится после завершения каждого описания.

  • Точка с запятой не ставится после слова begin и перед словом end, так как эти слова являются операторными скобками, а не инструкциями.

  • Точка с запятой является разграничителем инструкций, и её отсутствие вызывает ошибку компиляции.

  • В инструкциях цикла точка с запятой не ставится после слов while, repeat, do и until.

  • В условных инструкциях точка с запятой не ставится после слова then и перед словом else.

Данные и выражения Турбо – Паскаля

Типы данных

Тип данных – это множество значений, которые могут иметь переменные, множество операций над этим множеством значений, а также объём памяти, выделяемый под переменные.

Все типы данных можно разделить на простые (скалярные), структурированные (составные) и указатели. Скалярные типы в свою очередь подразделяются на стандартные и типы, определяемые пользователем.

Стандартные типы предлагаются разработчиками Турбо – Паскаля. К ним относятся: целочисленные и вещественные типы, символьный (литерный) тип, логический (булевский) тип и указатели. Структурированные типы имеют в своей основе скалярные типы данных. К структурированным типам относятся: строки, массивы, множества, записи и файлы. Целочисленные типы, символьный, логический и пользовательские типы образуют группу так называемых порядковых типов, имеющих большое значение.

Простые стандартные типы

Целые и вещественные типы предназначены для представления числовых данных. В математике рассматривается бесконечное множество целых чисел. Целый тип в Турбо – Паскале – это интервал целых чисел. Операции над целыми числами определены лишь тогда, когда исходные данные и результат лежат в этом интервале. Иначе возникает ситуация, называемая переполнением. За исключением переполнения все операции над аргументами целого типа выполняются точно. В Турбо – Паскале определены следующие целые типы.

Целочисленный тип (integer). К этому типу относятся все целые числа, которые ограничиваются диапазоном от –32768 до +32767 и занимают в памяти 2 байта.

Байтовый тип (byte). Он является подмножеством типа integer и включает целые числа от 0 до 255, которые занимают в памяти 1 байт.

Целочисленный короткий тип или короткий целый (shortint). Это подмножество типа integer, включающее целые числа от –128 до +127, которые занимают в памяти 1 байт.

Целочисленный тип длиною в слово (word) . К этому типу относятся целые числа от 0 до 65535, занимающие 2 байта памяти.

Целочисленный длинный тип или длинный целый (longint). Он включает целые числа, занимающие диапазон от –2147483648 до+2147483647, соответствующий 4 байтам памяти.

В математике вещественные числа – это бесконечное непрерывное множество чисел. В вычислительной технике вещественные числа представляются конечным множеством значений. В Турбо – Паскале определены следующие вещественные типы.

Тип с одинарной точностью (single). К этому типу относятся вещественные числа от 1.5*10-45 до 3.4*1038, при записи которых в экспоненциальном стандартном виде мантисса имеет 7- 8 значащих цифр. Этот тип занимает в памяти 4 байта.

Вещественный тип (real). Диапазон значений этого типа охватывает подмножество вещественных чисел от 2.9*10-39 до 1.7*1038. Занимает в памяти 6 байт. Вещественные числа, представленные в стандартном виде с плавающей точкой, имеют мантиссу с 11-12 значащими цифрами. Например, 8.2546578931Е+03 – это соответствует представлению вещественного числа с фиксированной точкой: 8254.6578931.

Тип с двойной точностью (double). Этот тип определяется в диапазоне вещественных чисел от 5.0*10-324 до 1.7*10308, имеющих в мантиссе 15-16 значащих цифр и занимающих в памяти 8 байтов.

Тип с повышенной точностью (extended). Диапазон значений этого типа от 3.4*10-4932 до 1.1*104932 . Числа этого типа имеют 19-20 значащих цифр мантиссы и занимают 10 байт оперативной памяти.

Сложный тип (comp). Диапазон значений этого типа от –2*10 63+1 до 2*10 63 -1.Числа этого типа имеют 19-20 значащих цифр и занимают 10 байт оперативной памяти.

Вещественные числа могут записываться двумя способами – с фиксированной точкой и с плавающей точкой. При записи числа с фиксированной точкой целая часть числа отделяется от дробной части точкой. Если точка отсутствует, число считается целым. Запись числа с плавающей точкой (в экспоненциальной форме) использует степень десяти и удобна для записи очень больших и очень маленьких чисел. При этом число изображается так: пишется мантисса, знак умножения опускается, вместо основания 10 пишется буква E , а следом указывается порядок (показатель степени). Буква E , предшествующая порядку читается как « умножить на 10 в степени». Например, 24.5 с фиксированной точкой, 5.17Е+02 – с плавающей точкой.

Логический (булевский) тип (boolean). Он определяет диапазон логических значений, который содержит два элемента true (истина) и false (ложь). При этом указанный диапазон логических значений упорядочен так, что false<true. В памяти этот тип занимает 1 байт.

Символьный (литерный) тип (char). Значениями этого типа являются элементы из набора символов, определяемого Американским стандартным кодом обмена информацией (ASCII). Символы упорядочены по возрастанию значений кодов ASCII. Например, A’<’B’<’C’<…Данные типа char занимают в памяти 1 байт.

Пример описания простых переменных с простыми стандартными типами:

var i, j, k: integer;

x, y, z: real;

a, b, c: byte;

x1: longint;

n, k: boolen;

v: char;

Простые типы, определяемые пользователем

Перечисляемый тип. Определение любого перечисляемого типа описывает упорядоченное множество значений, задаваемых идентификатором в круглых скобках. Этот тип используется для «красивого» представления данных типа byte.

Например, type day=(mon, tue, wed, thu, fri, sat, sun);

Значение mon равнозначно числу 0, а sun – числу 6, причём mon<tue<wed<thu<fri<sat<sun.

Тип – диапазон. Этот тип получается путём введения ограничения на уже определённый некоторый простой тип, Ограничение определяется заданием диапазона – минимального и максимального значений констант в этом диапазоне. Тип, из которого выбирается диапазон (отрезок), называется базовым типом. Диапазоны для вещественных чисел любого типа не допускаются.

Пример:

type a=30..100;

day=(mon, tue, wed, thu, fri, sat, sun);

workdays=mon..fri;

weekend=sat..sun;

Выражения

Выражения состоят из операндов (констант, переменных, функций), знаков операций и круглых скобок.

В зависимости от типов операндов и вида операций выражения могут быть арифметические, логические, строковые и множественные (выражения над множествами).

Арифметические выражения

Операндами арифметического выражения являются константы, переменные (простые, с индексами, поля записей) и функции типа real или integer. Над этими операндами определены следующие арифметические операции:

+ - сложение;

- - вычитание;

* - умножение;

/ - деление (оба операнда – вещественного или целого типа, результат – вещественного типа);

div – целочисленное деление (оба операнда – целого типа, результат – целого типа);

mod – остаток от целочисленного деления ( оба операнда – целого типа, результат – целого типа).

При вычислении арифметических выражений приняты следующие правила:

  • Наивысший приоритет имеет операция присвоения унарного минуса «-».

  • Операции *, /, div и mod имеют более высокий приоритет, чем операции + и -.

  • Если приоритет операций одинаков, то операция, стоящая левее выполняется раньше.

  • Выражение, заключённое в скобки трактуется как один операнд. Скобки могут быть вложены друг в друга: a/(b*(x-y)).

  • Необходимо соблюдать правило парности скобок: число открывающих и число закрывающихся скобок должно быть равным.

  • Выражения записываются в строчку. Двухэтажные выражения, верхние и нижние индексы не допускаются. Выражение на языке Паскаль записывается так: (al*xl+a2*x2)/(xl-x2).

  • Нельзя записывать подряд два знака операций.

  • Большие и сложные выражения нужно разбивать на несколько простых выражений, а повторяющиеся действия вычислять отдельно.

Логические выражения

Логические выражения включают логические операнды, логические операции и отношения. Логическими операндами являются логические константы, логические переменные и логические функции. В Турбо – Паскале логические выражения могут быть операндами четырёх логических операций:

not (не) – отрицание;

and (и) – логическое умножение;

or (или) – логическое сложение;

xor ( исключающее или) – сложение по модулю 2.

Значения логических выражений приведены в таблице:

p

q

not p

p and q

p or q

p xor q

false

false

true

false

false

false

false

true

true

false

true

true

true

false

false

false

true

true

true

true

false

true

true

false

Отношением называется конструкция, представляющая собой два выражения, объединённые операцией отношения:

= (равно), <> (не равно),

< (меньше), <= (меньше или равно),

> (больше), >= (больше или равно).

Все операции отношения дают результат типа boolean (true или false). Например, 2<=2 {true}, 5>7 {false}.

Строковые выражения

Строкой называют ограниченную апострофами последовательность любых символов. Строковые выражения могут содержать строковые константы, строковые переменные, строковые функции и операцию «+», осуществляющую сцепление операндов строкового типа. Например,TURBO’+’- ‘+’PASCAL’ {‘TURBO-PASCAL’}. Сравнение двух строк выполняется операциями отношения посимвольно слева направо с учётом их кодов в ASCII. Например,b’<’c’ {true}, ‘A’>’B’ {false}.

Если строки имеют различную длину, но совпадают друг с другом, включая последний символ более короткой строки, то более короткая строка считается меньше более длинной. Например, ‘Pascal’<’Pascal ‘ {true}.

Приоритет выполнения операций в выражениях

Если выражение не содержит скобок, то операции выполняются в следующем порядке:

  1. вычисление функций;

  2. присвоение унарного минуса;

  3. not;

  4. *, /, div, mod, and, shl, shr;

  5. +, -, or, xor;

  6. =, <>, >,>=, <, <=, in.

  7. Операции одинакового старшинства выполняются слева направо, а с помощью скобок можно задавать любой желаемый порядок вычислений.

Стандартные функции и процедуры

Для выполнения часто встречающихся вычислительных операций и преобразования данных, относящихся к разным типам, в языке Турбо – Паскаль имеются не требующие отдельного описания (стандартные) функции:

  • арифметические

  • преобразования и упорядочения типов

  • логические

  • строковые

  • файловые

  • адресные

Арифметические функции

abs(x) - вычисляет абсолютное значение x, оно имеет тот же тип, что и х.

arctan(x) – вычисляет арктангенс x; тип аргумента – вещественный, результат в радианах.

cos(x) – вычисляет косинус x; х задаётся в радианах, тип результата – вещественный.

exp(x) – возводит число е в в степень х; тип аргумента – вещественный, тип результата – вещественный.

ln(x) – вычисляет натуральный логарифм х; тип аргумента - вещественный (x>0), тип результата – вещественный.

sin(x) - вычисляет синус x; х задаётся в радианах, тип результата – вещественный.

sqr(x) – возводит х в квадрат; тип аргумента – вещественный или целый, тип результата – вещественный или целый.

sqrt(x) – вычисляет квадратный корень из х; тип аргумента – вещественный или целый, тип результата – вещественный.

random – генерирует случайное число с равномерным законом распределения в диапазоне от 0 до 1; тип аргумента отсутствует, тип результата – вещественный.

random(x) – генерирует случайное число с равномерным законом распределения в диапазоне от 0 до х; тип аргумента – вещественный или целый, тип результата – вещественный или целый.

Примечание: для того, чтобы избежать постоянно повторяющихся случайных чисел, функциям random и random(x) должна предшествовать процедура randomize, которая инициализирует генератор случайных чисел.

Функции преобразования и упорядочения типов

frac(x) вычисляет дробную часть числа x; аргумент и результат вещественного типа. Например, frac(125.56) {результат: 0.56}, frac(-23.56) {результат: -0.56}.

int(x), trunc(x) - возвращают ближайшее целое число, меньшее или равное вещественному х, для х 0, и больше или равно х для х 0 ( от truncate, усекать). Таким образом выполняется отбрасывание десятичных знаков после точки. Аргумент – вещественный тип, результат – целый тип для trunc и вещественный для int.

Например, trunc(365.765) { результат: 365 }, trunc(-365.765) { результат: -365 }.

round(x) – вычисляет округлённую целую часть ( от round – круглый); аргумент – вещественный тип, результат – целый тип.

chr(x) – по числовому коду определяет символ в ASCII; тип аргумента – целый, тип результата – символьный. Например, chr(65) {‘A’}.

ord(x) – вычисляет порядковый номер символа в упорядоченном множестве символов (порядковый номер начинается с нуля); тип аргумента – символьный, тип результата - целый. Например,

program primer1;

type d=(mo, tu, we, th, fr, sa,su);

uses crt;

var x: d; n: byte;

begin

clrscr;

x:=fr;

n:=ord(x);

writeln( n);

readln

end.

Результат – {4}.

succ даёт значение, следующее за х (если оно существует); тип аргумента – любой простой тип, кроме вещественного.

pred(x)- даёт значение, предшествующее x (если оно существует); x – значение любого простого типа, кроме вещественного.

Логические функции

odd(x) – даёт значение true, если достигнут конец файла, и false в противном случае.

eof(f) - даёт значение true, если x – нечётное число, и false в противном случае.

eoln(f) - функция принимает значение true, Если при чтении файла с файловой переменной f достигнут конец теку щей строки, и false в противном случае.

Переменные. Операция присваивания

Переменная является основным элементом языка. Она характеризуется идентификатором (именем), значением и типом. Переменная – это именованный участок памяти для хранения данных определенного типа. Значение переменной (информация в соответствующих ячейках памяти) в ходе выполнения программы может быть изменено.

Все используемые в программе переменные должны быть описаны в разделе описания переменных var в формате:

список переменных : тип;

сисок переменных : тип;

и т.д.

Здесь список переменных — перечисленные через запятую имена переменных.

Оператор присваивания переменной какого-либо значения имеет следующий формат:

имя переменной:=значение;

В качестве значения могут быть константы, переменные или выражения. Например, x:=10.5; a:=b; d:=sqrt(b*b-4*a*c);. Здесь sqrt — функция вычисления квадратного корня. Для переменной b логического типа допустимо, например, такое присваивание: b:=(x>y).

Вывод на экран

Для вывода информации на экран служит процедура Write.

Write('Сообщ1','Сообщ2',

имя перем1, выражение1,...);

Существует модификация процедуры Write — процедура WriteLn

WriteLn('Сообщ1','Сообщ2',

имя перем1,выражение1,...);

Она отличается от Write тем, что после вывода на экран всех своих аргументов переводит курсор на следующую строку, и следующий вывод на экран будет осуществлён с начала следующей строки.

В списке вывода процедур Write и WriteLn могут встречаться сообщения, заключенные в апострофы (выводятся на экран без изменения), имена переменных (выводится значение переменной), выражения (выводятся значения выражений). Для

Например:

WriteLn('Дискриминант квадратного уравнения равен',b*b-4*a*c);

WriteLn('x1=',x1,' x2=',x2);

Допускается использование WriteLn без аргументов. Тогда вывода на экран не происходит, а курсор переводится на следующую строку.

Ввод с клавиатуры

Для ввода значений переменных с клавиатуры служит процедура Read и её модификация ReadLn.

Read(Список имён вводимых переменных);

Например,

Read(a,b,c,d);

Если имеется суффикс Ln, то курсор после ввода значений всех переменных переводится на новую строку. Допускается использование ReadLn без аргументов для остановки работы программы до нажатия пользователем клавиши Enter.

Линейные программы

По структуре все алгоритмы можно разделить на 3 основные группы: линейные, разветвляющиеся и циклические.

Линейным называется вычислительный процесс (алгоритм), в котором действия выполняются в линейной последовательности, одно за другим, и каждое действие выполняется единственный раз. В основном такие алгоритмы состоят из команд присваивания.

Пример. Рассмотрим процесс создания программы с линейным алгоритмом на примере следующей задачи.

Написать программу вычисления дохода по вкладу. Процентная ставка (в процентах годовых) и время хранения (в днях) задаются во время работы программы.

Текст программы:

program Vklad;

uses crt;

var sum : real; {сумма вклада}

srok : real; {срок вклада}

stavka : real; {процентная ставка}

dohod : real; {доход по вкладу}

begin

clrscr;

writeln(‘Практическая работа N1, вариант N1’);

writeln('студент Иванов И.И., группа Э –08’);

writeLn(‘Вычисление дохода по вкладу’);

writeLn(‘Введите исходные данные:’);

write(‘Величина вклада (руб) ->’);

readLn(sum);

write(‘Срок вклада (дней) ->’);

readln(srok);

writeln(‘Процентная ставка ->’);

readln(stavka);

dohod:=(sum*stavka/100)/365*srok

sum:=sum+dohod;

writeln;

writeln(‘-------------------------’);

writeln(‘Доход-’,dohod:9:2,’руб’);

writeln(‘Сумма окончания срока вклада-’,Sum:9:2,’руб’);

readkey

end.

Ветвления

Выполнение разветвляющегося алгоритма происходит по одной из нескольких заранее запланированных ветвей в зависимости от выполнения или невыполнения некоторого условия. Например, алгоритм решения квадратного уравнения зависит от знака дискриминанта.

Для записи разветвляющихся алгоритмов в языке Паскаль предусмотрены два оператора ветвления if и case.

Оператор if осуществляет ветвление по двум направлениям и в общем виде выглядит так:

if логическое выражение then

оператор1

else

оператор2;

При выполнении оператора if сначала вычисляется значение логического выражения. Если оно приняло значение true выполняется Оператор1, в противном случае — оператор2.

Допускается сокращенный вариант оператора if:

if логическое выражение then

оператор;

Тогда при истинности логического выражения выполняется оператор1, в противном случае выполняется следующий после if оператор.

Если по смыслу задачи вместо первого или второго оператора необходима последовательность из нескольких операторов, то их заключают в так называемые операторные скобки:

begin

оператор11;

оператор12;

оператор1N

end;

Полученная конструкция называется составным оператором.

В отличие от оператора условного перехода в операторе выбора (варианта) может быть не две, а произвольное число ветвей. Оператор варианта имеет вид:

а) полная форма:

case переключатель (селектор) of

список 1: оператор 1;

список 2: оператор 2;

………………………

список n: оператор n

else

оператор

end;

б) неполная форма:

case переключатель (селектор) of

список 1: оператор 1;

список 2: оператор 2;

………………………

список n: оператор n

end;

Здесь переключатель (селектор) представляет собой некоторое выражение. В качестве переключателя может имя переменной любого порядкового типа, кроме вещественного и строкового, или выражение (арифметическое с целым значением или логическое). Тип параметра «список» должен совпадать с типом селектора. При этом параметр «список» - список констант, разделённых запятыми или диапазон констант.

Выполняется инструкция case следующим образом:

  1. Вычисляется значение выражения, следующего за словом case.

  2. Полученные значения последовательно сравниваются с константами из списков констант перед двоеточием. После этого возможен один из следующих вариантов действий:

    • если значение выражения совпадает с константой из списка, то выполняется соответствующая этому списку последовательность инструкций и выполнение инструкции case завершается;

    • если значение выражения не совпадает ни с одной константой из всех списков, то выполняется последовательность инструкций, следующая за словом else, и выполнение оператора выбора завершается;

    • если блока else в инструкции case нет, то её выполнение завершается.

Пример 1.

Даны длины трёх сторон треугольника. Если такой треугольник существует, вычислить его площадь.

Программа:

program Treug;

uses crt;

var a,b,c,p,s : Real;

Begin

clrscr;

writeLn(‘Введите длины сторон треугольника:’);

readLn(a,b,c);

p:=(a+b+c)/2;

s:= (p-a)*(p-b)*(p-c);

If s<=0 then

writeLn(‘Такого треугольника не существует’)

else

begin

s:=p*s;

s:=sqrt(s)

writeln(‘Площадь треугольника равна ’,s:6:2)

end;

readkey

end.

Пример 2.

В старояпонском календаре принят шестидесятилетний цикл, который состоит из пяти двенадцатилетних подциклов. Подциклы обозначаются названием цвета: зелёный, красный, жёлтый, белый, чёрный. Внутри двенадцатилетнего подцикла годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. Составить программу, которая читает год и выводит название этого года по старояпонскому календарю.