- •Отладка программ пользователя в 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;
- •Из чисел в строки
Задание №1
Условие задания:
Написать программу, выводящую в столбик десять строк, в каждой печатая цифры от 0 до 9, то есть в таком виде:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
...................
0 1 2 3 4 5 6 7 8 9
Начинаем решать
Итак, давайте разберемся, что же нам надо, чтобы без проблем вывести столбик цифр? Здесь больше всего подойдут циклы, причем использовать мы будем изветсный нам цикл FOR. Мы его запустим 10 раз, каждый раз будем выводить 10 цифр, которые также будут выводиться циклом, причем после этого нужно будет перенести курсор на новую строку, чтобы получался столбик. Сразу же решаем, какой тип мы будем использовать в циклах. Подойдет тип Byte, не так ли? Ведь значения у нас не будут переваливать через 255 (границу Byte). Итак, текст программы:
|
Program N1; |
var |
I,J: Byte; |
Begin |
For I := 1 to 10 do |
Begin |
For J := 0 to 9 do |
Write(J, ' '); |
Writeln; |
end; |
Readln; |
end. |
Запустите эту программу. Ну как? Она делает именно то, что и предполагалось по условию. Заметьте, здесь, в принципе, можно вместо второго цикла, печатающего строку цифр, можно использовать процедуру Write:
Write('0 1 2 3 4 5 6 7 8 9 ');
Но тем не менее я этого не делаю, для того, чтобы продемонстрировать вложенность циклов. Следующий пример будет являться усовершенствованным этой задачи.
Задание №2
Условие задания:
Написать программу, распечатывающую таблицу умножения. (По типу известной всем Таблицы Пифагора). Программа должна выводить следующий экран:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
.........................
10 20 30 40 50 60 70 80 90 100
Начинаем решать
Сразу давайте определимся с алгоритмом. Как реализуется такой вывод? Мы с вами будем использовать как и в прошлой программе, два цикла - один будет вложен в другой. Только нужно соотнести значения циклов так, чтобы выводимый результат был в требуемом виде, то есть на пересечении строки и столбца должно быть произведение соответсвующих чисел. Как поступить? Все просто. Здесь я вам покажу крайне простой и оптимизированный алгоритм, который распечатывает таблицу умножения.
Что представляет из себя таблица умножения? Это произведение строки на столбец. Зная это, мы решаем поставленную перед нами задачу: первый цикл у нас будет считать строки, так ведь? (Вспомните предыдущую программу), а второй (вложенный цикл) считает символы в строке, или столбцы. То есть чтобы получить произведения строки на столбец, нужно просто умножать значения циклов друг на друга! Вот и все, если не понятно, дальше разберетесь.
Текст программы:
|
Program N2; |
var |
I,J: Byte; |
Begin |
For I := 1 to 10 do |
Begin |
For J := 1 to 10 do |
If I*J < 10 then Write(I*J, ' ') |
else Write(I*J, ' '); |
Writeln; |
end; |
Readln; |
end. |
Видите, мы всего лишь умножаем индексы циклов друг на друга, вот и все! Запомните этот алгоритм, а главное, попытайтесь его "ощутить", понять до конца.
Теперь внимательно смотрите на обе процедуры Write.
В первой из них два пробела - Write(I*J,' . . ');
Во второй один - Write(I*J,' . ');
(Здесь не очень хорошо видно, поэтому я выделил их точками).
Как вы думаете, зачем я так поступаю? Всмотритесь в текст программы, на проверку if...then...else. Не догадались? А вы подумайте. Вот это первый вопрос до следующего выпуска. Постарайтесь понять! Наберите программу, здесь все очень просто.