Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Лекции по Turbo Pascal [12].pdf
Скачиваний:
108
Добавлен:
02.05.2014
Размер:
1.06 Mб
Скачать

Одесский колледж компьютерных технологий “СЕРВЕР”

 

 

While ... do

Если вы хотите проверять условие до входа в цикл

 

Если цикл должен выполниться по крайней мере один раз

Repeat ...

until

перед проверкой условия

Случайные числа.

В процессе вычислений Вы получаете числа и эти числа заранее Вам известны – Вы их можете заранее просчитать. Но существует возможность получать такие числа, значения которых нельзя предугадать. Необходимость случайных чисел возникает при статистических вычислениях, научных экспериментов, в игровых программах. В математике последовательности случайных чисел на промежутке от 0 до 1 получают таким образом:

1.Задаётся начальное число, например 0,12456;

2.задаётся число-делитель, например 103;

3.из первого числа выбираются две цифры из определенных позиций, например 24 и делятся на делитель, образуя новое число;

4.это число является первым числом в последовательности случайных чисел;

5.выбираются снова две цифры из тех же разрядов и полученное число делится на делитель 103, образуя новое случайное число 0,23301, из которого выбираются снова две цифры из тех же разрядов и так далее. В результате получается ряд случайных чисел, приведенный ниже. Просчитайте эти числа сами.

0,12456

0,23301

0,32038

0,19417

0,91262

0,11650

0,15534

0,53398

В Pascal существует возможность получить случайное число в интервале от 0 до n ,где n – целое положительное число. Для этого воспользуйтесь функцией

RANDOM (n+1 ),

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

FOR I:=1 TO 10 DO

writeln( ‘Число’,I,’ равно’,random(10))

и получите последовательность. Если Вы запустите ещё один раз эту программку, то получится такая же последовательность.

В Pascal для того, чтобы получать разные последовательности используют команду

34

Одесский колледж компьютерных технологий “СЕРВЕР”

RANDOMIZE;

Для получения числа, попадающего в промежуток [A,B], укажем вы-

ражение RANDOM*(A+B+1)-A.

Блок-схемы.

Ранее Вы встречали слово «алгоритм» для того, чтобы описать возможные Ваши действия при написании программы. Под алгоритмом понимается последовательность действий (команд, функций), которая определяет ход выполнения программы. Алгоритмы составляются при написании сложных программ для того, чтобы облегчить и систематизировать задачу программиста. Существует очень удобный способ отображения алгоритмов – в виде блок-схемы. Некоторые часто встречающиеся блоки приведены в Приложении 4. Блок-схемы состоят из блоков и линий, которые соединяют блоки. Обычно, вход в блок – сверху, а выход – снизу. Правила составления блок-схем алгоритмов такие:

Любая программа начинается и заканчивается блоком 1 (см. Приложение 4);

Такие действия, как операторы присваивания, вычисления отображаются блоком 2 (см. Приложение 4), внутри которого записывается действие;

Ввод данных в программу (например, с помощью readln) или вывод данных на дисплей (например, с помощью writeln) отображается блоком 3 (см. Приложение 4);

Условный оператор IF…THEN…ELSE отображается блоком 5 (см. Приложение 4). Входная линия – в верхний угол ромба, а выходные могут быть, например, из левого и правого углов ромба;

Оператор FOR…TO…DO удобно отображать блоком 6 (см. Приложение 4), но его можно отобразить и с помощью условного оператора также, как и любой цикл в программе, возможно организовать с помощью оператора

IF.

Тип данных char.

Переменные, предназначенные для хранения одиночных символов, называются символьными переменными. В языке Turbo Pascal для них определён тип данных CHAR. В переменную этого типа может быть помещён любой из 256 символов расширенной ASCII - таблицы.

Значения для переменных типа "CHAR" задаются в апострофах. Например, если в программе есть описания

u, v: char

35

Одесский колледж компьютерных технологий “СЕРВЕР”

то возможны операторы присваивания u:='a'; v:=u; v:='+’ и т.д. Выполнение операторов

u:='b'; write(u)

приводит к высвечиванию на экране символа b.

Кроме того, имеется возможность задавать значения указанием непосредственно числового значения ASCII-кода. В этом случае Вы должны перед числом, обозначающим код символа ASCII, поставить знак "#"

u:=#97

Пример. Дана последовательность символов заканчивающаяся символом ".". Необходимо подсчитать количество восклицательных знаков в данной последовательности.

Program example1;

 

var

 

c: char;

{организация символьной переменной}

n: integer;

{переменная для хранения количества "!"}

begin

 

read(c);

{чтение первого символа с клавиатуры}

n:=0;

{обнуление счетчика "!"}

while c<>'.' do

 

begin

{окончание работы - ввод символа '.' }

if c='!'

 

then n:=n+1;{подсчёт символов "!"}

read(c);

{чтение следующего символа}

end;

 

end.

Обратите внимание: в таблице ASCII большие латинские буквы и малые латинские буквы расположены подряд по алфавиту. Такая упорядоченность открывает возможность использования в программах операторов цикла с параметром, имеющим тип CHAR. Параметр цикла пробегает последовательность символов в указанных границах. Выполнение оператора цикла

for c:='a' to 'z' do write(c)

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

abcdefghhijklmnopqrstuvwxyz

Выполнение оператора цикла for c:='z' downto 'a' do write(c)

приведёт к выводу этих же букв в обратном порядке.

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

Функции, работающие с символьными переменными.

36

Одесский колледж компьютерных технологий “СЕРВЕР”

CHR(x): char; Преобразует целое число, имеющее тип BYTE, в один символ ASCII-кода. Например, chr(83)=’S’. Следующая программа иллюстрирует возможности функции CHR. Она выдаёт все символы кода ASCII на экран. При этом некоторые символы ASCII-кода (например 7, 13, 27) при обычных условиях не имеют изображения, а используются для реализации специальных функций (7 - звук, 13 - enter, 27 - esc). Благодаря использованию. в операторе Write формата: Write(x [: w])

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

Program example2; var

i: byte; begin

for i:=0 to 255 do write(chr(i):2); end.

В этом примере символы отделяются одним пробелом.

ORD(c): byte; Функция Ord выполняет действие, обратное функции Chr, т.е. возвращает порядковый номер символа параметра в таблице

ASCII. Например, ord(‘>’)=62.

UpCase(c): char; Осуществляет преобразование символов английского алфавита из строчных символов в прописные. Все остальные символы при применении этой функции остаются непреобразованными. Напри-

мер, UpCase(‘a’)=’A’.

Порядковые типы. Типы пользователя.

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

Множество значений порядкового типа упорядочено и каждый элемент его имеет номер, который представляется целым числом. Первое значение порядкового типа имеет номер 0, следующее значение имеет номер 1 и так далее. Исключение составляют порядковые типы Integer, Shortint и Longint. Порядковым номером значений этих типов является само значение.

К любому значению порядкового типа можно применить функцию Ord, возвращающую номер этого значения:

Ord(x)

Например, Ord(‘c’)=099, Ord(‘f’)=102.

К любому значению порядкового типа можно применить функцию Succ, возвращающую значение, предшествующее этому значению:

Succ(x)

Например, Succ(‘m’)=’n’.

К любому значению порядкового типа можно применить функцию Pred, возвращающую значение, предшествующее этому значению:

Pred(x)

37