Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Стандарты для C++
Уроки по C#
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Задание значений переменных датчиком случайных чисел

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

Зададим этим способом цвет экрана.
Вместо второго блока в программе поставим вызов датчика случайных чисел Random(X). Но перед этим обязательно нужно выполнить процедуру инициализации датчика, иначе он будет выдавать нам неслучайные числа:

Randomize; { Инициализация датчика случайных чисел проводится один раз в программе }
C11: =Random(16); { В результате переменной С11 присваивается целое случайное число из диапазона 0..15. Результат функции Random(N) - случайное число из диапазона 0..N-1 }

 

ЗАМЕЧАНИЕ
На самом деле настоящий программный датчик случайных чисел создать невозможно. Функция Random выдает псевдослучайные числа. Это значит, что числа, выдаваемые функцией, порождаются по определенной закономерности. Эта закономерность придумана так, чтобы казалось, что числа получаются случайными. Однако если не использовать процедуру randomize, каждый раз при запуске программы последовательность чисел будет одинаковой. Процедура randomize «встряхивает» начальное значение последовательности. После этого порождаемая последовательность чисел становится почти уникальной.

 

Рассмотрим еще несколько примеров использования функции Random.
Пусть нам необходимо получить случайное двузначное число, то есть число от 10 до 99. Логика проста: нам нужно одно случайное число из 90 (именно столько двузначных чисел). Значит, будем использовать функцию Random, которая выдаст одно число из 90, то есть Random(90). Но результат тогда будет лежать в диапазоне 0..89, а нам требуется 10..99! Значит, нужно сдвинуть полученный диапазон вправо на 10. Это делает операция +10. В итоге получаем следующее: Random(90)+10.

 

Задание 2.12. Напишите программу, которая выдает сообщение в текстовое окно. Координаты окна и координаты для сообщения должны вводиться с клавиатуры.
Цвет экрана и цвет символов задайте с помощью датчика случайных чисел.

Задание 2.13. Напишите программу, которая выдает сообщение на полный экран (без текстового окна). Координаты сообщения, цвет экрана и цвет символов задайте с помощью датчика случайных чисел.

 

ЗАПОМНИТЕ!
Заливка экрана или текстового окна выполняется вызовом двух процедур: установка цвета экрана — процедурой TextBackGround(...), а очистка экрана — процедурой ClrScr.

 

Зачем нужны константы в программе?

Бывают случаи, когда некоторые величины не меняются по ходу выполнения программы. Для удобства работы с такими величинами в Паскале предусмотрена отдельная категория — константы. Для начала простой пример:

Пример 2.10. Расчет скорости тела при падении с башни
Program Piza;
var
G.V.H: real;
begin
G:=9.8; { Эта переменная всегда имеет одно значение и не изменяет его по ходу выполнения программы }
write('Введите высоту башни:');
readln(Н); V:=Sqrt(2*G*H);
writeln( 'Скорость падения':20,V:7:3);
{ На выводимый текст выделяется 20 позиций }
readln
end.

 

Для наглядности в формуле вычисления скорости падения мы использовали переменную G, которая, однако, в действительности не менялась. И это неудивительно: она представляет ускорение свободного падения, которое, как известно, есть величина постоянная.

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

 

Пример 2.11. Программа при использовании констант — более логична и читабельна
Program Piza;
const { Это раздел описания констант. Он находится перед разделом var }
G=9.8; { Тип константы определяется автоматически, по форме записи числа. В данном случае из-за наличия десятичной точки это тип real }
var V.Н: real;
begin
write('Введите высоту башни:');
readln(H); V:=Sqrt(2*G*H);
writeln{ 'Скорость падения ’,V:6:3); { Чтобы текст и число не "слиплись", после текста внутри апострофов добавлен пробел }
readln
end.

.
Использование констант выполняет еще две функции.
Во-первых, описывая величину в разделе констант мы подстраховываем сами себя, чтобы случайно не изменить ее в программе. (Вам, наверное, это замечание кажется глупым: как можно так ошибиться! Но при написании больших, многостраничных программ это становится актуальным)
Во-вторых, константы оказываются нужны при объявлении новых типов данных — массивов.

 

Задание 2.14. Вычислите длину окружности и площадь круга. Радиус должен вводиться с клавиатуры.

 

Выводы

1. Данные, с которыми работает программа, хранятся в ячейках. Каждая ячейка имеет имя и тип данных. Изменяемые ячейки называются переменными, неизменяемые — постоянными.
2. Ячейки, используемые в программе, описываются в разделах const и var.
3. Для хранения целых чисел используется тип данных integer, а для хранения вещественных — real.
4. Каждый тип данных имеет свои операции и функции. Особенно это важно для типа integer, который имеет две операции деления — div и mod.
5. Для преобразования значений типа real к типу integer используются специальные функции — trim с и round.
6. При записи арифметических выражений нужно помнить о приоритете операций и о типе данных, который получается в результате.
7. Начальные значения переменных можно задавать путем ввода с клавиатуры или с помощью датчика случайных чисел.

 

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

1. Где хранятся все данные, с которыми работает программа?
2. Чем различаются понятия имя ячейки, адрес ячейки и значение ячейки?
3. Какой тип данных используется для хранения целых чисел? А для дробных?
4. Что следует сделать, если в программе используется величина, не изменяющаяся за все время работы программы?
5. В чем отличие между операциями mod, div и /?
6. Зачем нужны функции trunc и round? В чем между ними разница?
7. Какое максимальное значение может принимать переменная типа integer? Что делать, если необходимо сохранить целое число, в 10 раз большее этого значения?
8. Как записать на Паскале «2,5 в степени 16,7»?
9. Что означает запись «1Е5», «ЗЕ-4», «.2Е7»?
10. Что нужно использовать, чтобы изменить приоритет выполнения математических операций?
11. Чему равно и какой тип данных имеет выражение trunc(sqrt(2+52 div 8))-sqr(15 mod 4/3)?




 

Комментарии:

2011-07-08 ответил Андрей

Очень просто и доступно описано, хорошая статья!!



2012-07-02 ответил Ваня

Украина



2013-05-06 ответил Димон

У меня в 11 задании получилась единица. Правильно? 52 div 8 = 6; 2 + 6 = 8; sqr(8) = 2.828.....; trunc (2.828.....) = 2; 15 mod 4 = 3; 3 / 3 = 1; sqr(1) = 1; 2 - 1 = 1.




Добавить свой комментарий:


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru