- •Отладка программ пользователя в turbo pascal.
- •Ваша первая программа на Паскале.
- •Синтаксис выражений.
- •Тестирование программы.
- •Что теперь?
- •Использование программы 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;
- •Из чисел в строки
Повторить действие? (y/n):
Здесь видно, что ввести нужно всего лишь одну букву - Y или N. Заводить для этого целую строку нецелесообразно, хотя и можно. Но при этом программа получается более громоздкой - целая строка используется для хранения всего лишь одного символа. При этом мы теряем память, засоряя ее; работа несколько замедляется, так как строки долго обрабатываются. В общем, здесь встает вопрос оптимизации, который волнует абсолютно всех программистов на свете.
Именно для таких целей - оптимизации - существует один тип, тоже символьный, он более простой, чем строки. Это тип Char.
Char - Переменная этого типа способна хранить всего лишь один символ. Это как бы строка, но с максимальной длиной, равной единице. Он очень удобен для некоторых случаев: невероятно экономит память, ускоряет работу и позволяет легче состалять программу.
Вот примеры присваивания значений переменной типа Char:
|
Program UseCHAR; |
var |
C: Char; |
begin |
C := 'Y'; |
Write(C); |
C := ':'; |
Write(C); |
Readln(C); |
If C <> 'Y' Then Write('C не является буквой Y!'); |
Readln; |
end. |
Посмотрите внимательно на пример. Он очень простой, введите его в Паскале и посмотрите, что он делает. При его работе выводиться: Y: после чего программа ждет ввода. Если введенный символ не буква Y, то об этом сообщается пользователю. Необходимые пояснения к типу Char.
Переменной типа Char можно прямо в программе присвоить значение. Это делается посредством знака присваивания: ":=", после которого должен находиться символ, заключенный в одиночные кавычки (апострофы): 'A'.
Переменную можно с успехом использовать в конструкциях сравнения;
Ее можно читать с клавиатуры. При этом если мы введем строку, состоящую из нескольких символов, то значением переменной Char станет только 1-й символ.
Его можно прибавлять к строке:
Program UseCHAR;
var
C: Char;
S: String;
begin
Write('Введите строку: ');
Readln(S);
Write('Введите символ: ');
Readln(C);
S := S + C;
Write('Если это сложить, получиться: ',S);
Readln;
end.
Но вычитать нельзя!!! Запомните это.
Переменная типа Char может хранить совершенно любой символ, в том числе и букву русского языка (знак кириллицы).
Ну а теперь, напоследок, напишем программу, которая будет очень хорошо демонстрировать использование строк, символов, сравнения и goto.
Программа будет читать символы с клавиатуры, пока не прочитает символ "!" - восклицательный знак. Он будет служить сигналом окончания ввода. Все читаемые символы будут записываться в строку, которая по окончанию действия выведстя на экран. Начнем?
Для начала, как всегда, запишем алгоритм программы, то есть определимся, что она будет делать и расскажем это простым человеческим языком. Условимся, что мы имеем две переменных
- S: String; - в нее будут записываться все вводимые символы;
- C: Char; - этот символ будет постоянно читаться с клавиатуры.
А теперь алгоритм:
Читаем символ с клавиатуры;
Проверяем - если это не "!", то:
Добавляем введенный символ в строку (прибавляем его к строке);
Переходим у вводу символа - пункту 1.
Иначе (символ = !):
Выводим составленную строку на экран;
Ставим Readln; тем самым затормаживая программу;
Завершаем программу;
Вот вроде и все. Теперь текст программы:
|
Program Primer; |
label |
A; |
var |
C: Char; |
S: String; |
begin |
A; |
Write('Введите символ: '); |
Readln(С); |
If C <> '!' Then |
begin |
S := S + C; |
Goto A; |
end |
else |
Write('Вы ввели эти символы: ',S); |
Readln; |
end. |
Введите эту программу и запустите. Как вам ее работа? Она делает все то, что и планировалось, помещает вводимые символы в строку и выводит ее на экран. Объяснять эту программу по шагам я не буду, разбирайтесь сами, это будет очень полезно. Советую написать что-нибудь самостоятельно в этом роде; придумайте условие и реализуйте его.
А пока на сегодня про Паскаль все, осталась небольшая практика.