- •Использование программы Turbo Pascal 7.0
- •Проверка на ошибки - "компиляция".
- •Запуск программы - "выполнение".
- •Программирование на Паскале
- •Целые типы
- •Пишем программу
- •Домашнее задание по Паскалю
- •Арифметические процедуры
- •Вопросы - ответы
- •Структура программы
- •Новые типы данных
- •If…then…else - Важная конструкция языка
- •Вопросы - ответы
- •Процедура goto
- •Повторить действие? (y/n):
- •Практика
- •Вопросы - ответы
- •Цикл for
- •Задание №1
- •Задание №2
- •Задание №3 (обширное)
- •2.По теме "строки": напишите программу, присваивающую переменной Char последний символ введенной строки.
- •Вопрос 3. Может ли Паскаль считывать данные до нажатия "Ввода" (Например, как в Windows: нажмите Esc для отмены)?
- •Вопрос 4. Можно ли сделать ввод данных скрытым звёздочками (***), например, как при вводе пароля?
- •Вопрос 5. Есть ли в Паскале функция, с помощью которой внутренний динамик может "бипнуть" (Примерно, как при загрузке компьютера)?
- •Звездное небо (аналог экранной заставки Norton Commander)
- •Обработка строк
- •А можно и так:
- •Вопрос 1. Программа подсчитывает дискриминант! в конце запрос: "Вы хотите еще найти дискриминант? y/n" Как сделать чтобы при нажатии на "y" программа начаналась сначала, а при нажатии на "n" выходила?
- •Вопрос 4. У меня вот такой вопрос- как в программе описать массив X, если заранее неизвестна его размерность (т.Е. Кол- во элементов, как я понимаю) ?
- •Вопрос 5. Как можно запустить программу?
- •Вопрос 7. При запуске Паскаля всё время появляется старая программа и приходится закрывать окно с этим текстом и открывать свежее. Как от этого избавится?
- •Вопрос 8. В рассылке n11 Вы рассказывали про форматный вывод .Чтобы реализовать это, мы приписывали к переменной, стоящей в процедуре два числа, разделив их двоеточием: Write('Real: ', a:5:2);
- •Список_переменных: тип
- •Оформление процедуры
- •Write(Add(n1, n2)); - печатаем значение, возвращаемое функцией Add;
- •Из чисел в строки
Структура программы
Вспоним, в программе есть несколько основных вещей - переменные и разного рода операторы, процедуры, выражения. Операторы и процедуры представляют собой непосредственно текст программы, так наз. тело программы.
Эти разные части оформляются в различных разделах отдельно друг то друга. То есть переменные находяться отдельно, тело программы - отдельно. Я думаю, Вы это знаете. Заметьте, я не говорю, что это все части, есть и другие, но об этом будем говорить позже. Итак, решили мы писать программу. Она будет использовать какие-нибудь данные, так ведь? Складывать числа, выводить строки. Для этого заводим переменные, чтобы хранить все эти значения.
Все переменные должны быть в разделе var, который всегда идет до раздела begin. Запомните это.
Все поцедуры, выражения, структуры и почее что взбредет в голову программисту - только в разделе begin, который соответсвенно заканчивается словом end. (с точкой на конце).
Продолжаем уточнения про разделы. Все слова, означающие названия разделов не имеют никаких символов после себя - ни ";", ни ":" ничего другого.
Итак, схема программы на Паскале:
|
|
|
Program Program_name; |
|
var |
|
- |
|
- |
|
описание_переменных |
|
- |
|
- |
|
begin |
|
- |
|
- |
|
тело_программы |
|
- |
|
- |
|
end. |
Вот, собственно и все. Я на этом теперь точно закончу эту тему, а то скоро большинству подписчиков надоест рассылка со своими разговорами об одном и том же. Если Вам непонятно что-то, разбирайтесь, читайте прошлые выпуски.
А нам пора двигаться дальше...
Новые типы данных
Помните, мы с вами разговаривали о типах переменных? О том, как присвоить какой-либо тип и зачем это делается? Тогда мы с вами обсуждали всего лишь типы-числа, причем целые числа, дробные значения им присвоить нальзя. Основные из тех типов были Integer, Byte, Word и LongInt, имеющие замый разный диапазон значений (не пишите мне, что вам не ясно, см. выпуск #3), в которых вам нужно научиться ориентироваться.
Здесь я еще сделаю немаловажный комментарий - типы, схожие друг с другом можно вычитать, складывать, умножать и делить. То есть можно писать так:
|
|
|
|
Program_name; |
|
|
var |
|
|
A: Integer; |
|
|
B: Word; |
|
|
C: Byte; |
|
|
begin |
|
|
A := B - C; |
|
|
B := C + A; |
|
|
C := B * A; |
|
|
end. |
|
|
|
* Обращайте внимание на синтаксис! Не забывайте! |
Видите, как все происходит? Конечно, это примитивный пример, но он замечательно демонстрирует использование совместимости типов. Если начинаете сейчас путаться, не пугайтесь. Здесь нет абсолютно ничего сложного. Разберем.
Вот, смотрите: Если имеем два числа, A: Integer; B: Word;.
Определимся, что они могут?
Переменная А - может хранить значения от -32000 до +32000 (я примерно пишу)
Переменная В - может хранить значания от 0 до 65500 (тоже не точно, см. зеленую таблицу в 3)
А теперь представьте, число А = 12, а число В = 15. Ну как, мы разве не сможем их сложить? Еще как. А вычесть? Тоже. А умножить? И это у нас выйдет.
Теперь такая ситуация - если результат помещается в переменную В (тип Word), но он отрицательный? (Следите за ходом моих мыслей). Что выйдет? Ведь тип Word не может хранить отрицательные числа, а я только что вел разговор о совместимости.
Выйдет то, что значение числа B будет испорчено. Совместимость есть, Паскаль ошибки не выдаст. Но значение будет потеряно. Поэтому лучше использовать совершенно одинаковые типы, с этим будет меньше проблем, либо точно знать, что за результат будет (по крайней мере его диапазон). Если вы здесь не разобрались, ничего. Дальше все станет ясно, и если что, будете знать где это найти. В общем, информация в копилку.
Нормально напомнил, вспомнили?
Как бы там ни было, все эти типы позволяют хранить только числа. Считывая переменную процедурой Readln мы может прочитать в такую переменную только число. Но этого очень мало и в программе никак не обойтись без других данных. Кроме этих типов существуют еще числовые, но позволяющие хранить дробные числа. Правда, о этой группе типов отдельный разговор, их мы будем обсуждать после, пока они нам не нужны.
Гораздо более интересными сейчас будут другие, которые позволяют хранить строки и символы. Тем более, их всего два и они очень простые и понятные.
Итак, зачем же нам иметь переменные, позволяющие хранить символы?
Давайте вспомним приводимый мной как-то пример программы, выводящей Hello, world!, написанной для демонстрации работы процедуры Write. Помните? Она печатала строку, которая как бы слита с программой и не может быть изменена во время ее работы. Давайте перестроим эту программу и напишем ее модифицированный вариант. Действовать будем так (напоминаю, последовательность действий называется алгоритм):
Выведем на экран строку "Введите Ваше имя: "
Прочитаем имя с клавиатуры
Выведем на экран строку "Привет, ИМЯ!"
Начинаем писать программу и как всегда определимся, что нам нужно.
Для того, чтобы вывести строки будем просто использовать Write.
А вот для того, чтобы прочитат, сохранить и вывести имя, используем переменную, которой зададим тип-строку.
Тип "строка" изображается так: String.
И, следовательно для того, чтобы завести такую переменную, запишем в разделе var:
|
|
|
var |
|
Name: String; |
Ну а теперь вроде все разобрали, все понятно и можно писать программу. Ее текст будет выглядеть так:
|
|
|
Program Ask_name; |
|
var |
|
Name: String; |
|
begin |
|
Write('Введите Ваше имя: '); |
|
Readln(Name); |
|
Write('Привет, ',Name,'!'); |
|
Readln; |
|
end. |
Откройте Турбо Паскаль и напечатайте эту программу. Запустите ее и посмотрите, как она работает. Все нормально? Действительно, она выводит имя, введенное при запросе. Это вам конкретный пример использвания типа String. На самом деле возможности использования строк невероятно высоки, вы это дальше поймете.
Не думаю, что стоит разбираться в этой программе по шагам. Если вам не понятно что-то - используемые процедуры или проблемы с синтаксисом (вы только подписались) - то скачивате архив с сайта рассылки и изучите предыдущие уроки Паскаля.
Но хоть разбирать каждую строку и я не буду, все же один прием требует комментариев:
Write('Привет, ',Name,'!');
Эта строка выводит именно "Привет, ИМЯ!". Заметили, восклицательный знак находиться после переменной? То есть переменная получается как бы внутри выводимой строки. Именно для того, чтобы это сделать я использовал несколько параметров процедуры Write; - т.е. чередовал символы с переменной. Так можно напечатать любой текст, содержащий где угодно в себе переменные. Запомните этот прием, а то некоторые ломают голову над этим - используют несколько процедур Write для вывода всех частей строки отдельно и т.д.
В общем, про этот раздел все. Здесь нет ничего сложного или особо непонятного, разбирайтесь. Советую написать несколько программ, использующих тип String - здесь я предоставляю вам полное творчество и очень советую им воспользоваться.
Но приведу несколько примеров возможных модификаций - например, запрашивайте несколько больше данных и выводите их все как результат выполнения; выводите запросы на ввод тоже как строки (придавайте им значение прямо в программе).
В общем, занимайтесь! Типам нужно уделять много внимания, Паскаль того требует. Вообще, это язык который славиться своей жесткостью по отношению к типам. Но вы это и сами скоро поймете, точно вам говорю.
