- •Для школьников,студентовИ начинающих 1999 с,н.Лукин __________________________________________________________ Все права защищены ©
- •Оглавление
- •Часть I. Необходимые сведения о компьютере и программе 8
- •Часть II. Программирование на Паскале – первый уровень 29
- •Часть III. Программирование на Паскале – второй уровень 102
- •Часть IV. Работа в Паскале на компьютере 158
- •От автора
- •Предисловие
- •Кому нужна эта книга?
- •Почему Паскаль?
- •Какой из Паскалей?
- •Краткое содержание с рекомендациями
- •Часть III.Программирование на Паскале – второй уровень. Цели этой части:
- •Часть I. Необходимые сведения о компьютере ипрограмме
- •Первое представление о компьютере и программе
- •Что умеет делать компьютер
- •Что такое компьютер. Первое представление о программе.
- •Как человек общается с компьютером
- •Программа и программирование
- •Список команд. Командный и программный режимы
- •Последовательность работы человека с роботом
- •Что важно знать о программе
- •Понятие о процедуре. Может ли робот поумнеть?
- •Программа для компьютера на машинном языке
- •Языки программирования
- •Пример настоящей программы для компьютера на языке Лого
- •А теперь напишем программу:
- •Последовательность работы программиста на компьютере
- •Основные приемы программирования
- •Устройство и работа компьютера
- •Как устроен и работает компьютер
- •Порядок обмена информацией между устройствами компьютера
- •Устройство и размеры оперативной памяти
- •Взаимодействие программ в памяти
- •Внешние устройства компьютера
- •Устройства ввода
- •Устройства вывода
- •Внешняя память
- •Кодирование информации в компьютере
- •Часть II. Программирование на Паскале – первый уровень
- •Простые (линейные) программы. Операторы ввода-вывода. Переменные величины
- •Процедура вывода Write
- •8 'Котят' 3*3 'щенят'
- •Первая программа на Паскале
- •Выполняем первую программу на компьютере
- •Процедура вывода WriteLn. Курсор
- •Переменные величины. Оператор присваивания
- •Описания переменных (var)
- •Что делает оператор присваивания с памятью
- •Оператор присваивания меняет значение переменной величины
- •Имена переменных
- •Математика. Запись арифметических выражений
- •Вещественные числа в Паскале
- •Три совета
- •5. Теперь нужно задать компьютеру действия, которые нужно проделать с исходными данными, чтобы получить результат.
- •Операторы ввода данных ReadLn и Read.
- •Интерфейс пользователя
- •Строковые переменные
- •Диалог с компьютером
- •Константы
- •Разветвляющиеся программы
- •Условный оператор if или как компьютер делает выбор
- •Правила записи оператора if
- •Составной оператор
- •Ступенчатая запись программы
- •Вложенные операторыif. Сложное условие в операторе if. Логические операции
- •Символьный тип данных Char
- •Оператор варианта case
- •Циклические программы
- •Оператор перехода goto. Цикл. Метки
- •Выход из цикла с помощьюif
- •Оператор циклаrepeat
- •Оператор цикла while
- •Отличия операторов repeat и while
- •Оператор цикла for
- •Типичные маленькие программы
- •Вычислительная циклическая программа
- •Роль ошибок
- •Счетчики
- •Сумматоры
- •Вложение циклов в разветвления и наоборот
- •Вложенные циклы
- •Поиск максимального из чисел
- •Процедуры
- •Компьютер звучит
- •Простейшие процедуры
- •Программа 1
- •Программа 2
- •Программа 3
- •Процедуры и операторы
- •Стандартные процедуры Halt и Exit
- •Графика
- •Стандартные модули
- •Стандартный модуль Graph, текстовый и графический режимы
- •Текстовый и графический режимы
- •Переключение между текстовым и графическим режимами
- •Рисуем простейшие фигуры
- •Работа с цветом. Заливка. Стиль линий и заливки
- •Используем в рисовании переменные величины
- •Использование случайных величин при рисовании
- •Движение картинок по экрану
- •Создаем первую большую программу
- •Постановка задачи
- •Программирование по методу “сверху-вниз”
- •Сначала – работа над структурой программы
- •Зачем переменные вместо чисел
- •Записываем программу целиком
- •Порядок описания переменных, процедур и других конструкций Паскаля
- •Управление компьютером с клавиатуры. Функции ReadKey и KeyPressed
- •Буфер клавиатуры
- •Гетерархия. Задание на игру “Торпедная атака”
- •Часть III. Программирование на Паскале – второй уровень
- •Алфавит и ключевые словаПаскаля
- •Алфавит
- •Ключевые слова
- •Использование пробела
- •Работа с разными типами данных Паскаля
- •Список типов
- •Комментарии к списку типов
- •Числовые типы
- •Массивы
- •Переменные с индексами
- •Одномерные массивы
- •Двумерные массивы
- •Какие бывают массивы
- •Определения констант
- •Типизированные константы
- •Придумываем типы данных
- •Логический тип Boolean
- •Перечислимые типы
- •Ограниченный тип (диапазон)
- •Действия над порядковыми типами
- •Символьный тип Char. Работа с символами
- •Строковый тип String. Работа со строками
- •Множества
- •Расположение информации в оперативной памяти. Адреса
- •Процедуры и функции с параметрами
- •Процедуры с параметрами
- •Функции
- •Подпрограммы. Локальные и глобальные переменные
- •Массивы как параметры
- •Параметры-значения и параметры-переменные
- •Индукция. Рекурсия. Стек
- •Сортировка
- •Строгости Паскаля
- •Структура программы
- •Структура процедур и функций
- •Выражения
- •Совместимость типов
- •Форматы вывода данных
- •Переполнение ячеек памяти
- •Дерево типов
- •Синтаксисические диаграммы Паскаля
- •Другие возможности Паскаля
- •Работа с файлами данных
- •Вставка в программу фрагментов из других программных файлов
- •Модули программиста
- •Дополнительные процедуры и функции модуля Graph
- •Копирование и движение областей экрана
- •Вывод текста в графическом режиме
- •Управление цветом в текстовом режиме (модульCrt)
- •Работа с датами и временем (модульDos)
- •Нерассмотренные возможности Паскаля
- •Миг между прошлым и будущим
- •Часть IV. Работа в Паскале на компьютере
- •Что нужно знать и уметь к моменту выполнения первой программы?
- •Порядок работы в Паскале
- •(1) Запуск Паскаля
- •(2) Начало работы. Ввод программы. Выход из Паскаля
- •(3) Сохранение программы на диске. Загрузка программы с диска
- •(4) Выполнение программы
- •(5) Исправление ошибок. Отладка программы.
- •Пошаговый режим
- •Работа с окнами пользователя и отладчика
- •Отладка больших программ
- •Работа с несколькими окнами.
- •Копирование и перемещение фрагментов текста
- •Обзор популярных команд меню
- •Создание исполнимых файлов (exe)
- •Приложения. Справочный материал п1. Как вводить программу в компьютер или работа с текстом в текстовом редакторе
- •Работа с одной строкой текста
- •Работа с несколькими строками
- •Собственно работа с несколькими строками.
- •П2. Файловая система магнитного диска
- •Имена файлов и каталогов
- •Пример структуры каталогов на диске
- •Логические диски. Путь (дорожка) к файлу
- •П3. Список некоторых операций, процедур и функций Паскаля
- •Математика
- •Модуль crt
- •Модуль Graph
- •Модуль dos
- •П5. Решения заданий
- •П6. Список литературы
- •П7. Предметный указатель
Процедура вывода WriteLn. Курсор
Оператор WriteLn - читается "райт 'лайн" , переводится - ПИШИ СТРОКУ. Правила его записи и выполнения те же, что и у Write, с одним исключением - после выполнения оператора Write следующий оператор Write или WriteLn печатает свою информацию в той же строке, а после выполнения оператора WriteLn - с начала следующей. Примеры:
ПРОГРАММА |
ЧТО ВИДИМ НА ЭКРАНЕ |
BEGIN Write ( 'Ама' ); Write ( 'зонка' ) END. |
Амазонка |
BEGIN Write ( 'Ама' ); WriteLn( 'зонка' ) END. |
Амазонка |
BEGIN WriteLn( 'Ама' ); Write ( 'зонка' ) END. |
Ама зонка |
BEGIN WriteLn( 'Ама' ); WriteLn( 'зонка' ) END. |
Ама зонка |
Все вышесказанное можно более точно описать с помощью понятия курсора. Если вы когда-нибудь вводили текст в компьютер с клавиатуры, то знаете, что вводимый вами текст для вашего удобства автоматически появляется на экране монитора. Вы также, вероятно, обратили внимание на короткую светлую черточку или прямоугольное пятнышко, которое "бежит" на экране перед вводимым текстом. Так, если вы вводите с клавиатуры слово BEGIN, то:
после нажатия на клавишу B на экране вы увидите B_
после нажатия на клавишу E на экране вы увидите BE_
после нажатия на клавишу G на экране вы увидите BEG_ и т.д.
Курсор предназначен для того, чтобы показывать пользователю, где на экране появится следующий символ,который он введет с клавиатуры. Курсор точно так же бежит по экрану впереди текста и тогда, когда информация появляется на мониторе не при вводе с клавиатуры, а во время исполнения программы в результате выполнения операторов Write или WriteLn,
Так вот. Разница между процедурами Write и WriteLn в том, что после выполнения Write курсор остается в той же строке, а после выполнения WriteLn курсор прыгает в начало следующей строки, а значит и все следующие символы волей-неволей будут выводиться в следующей строке.
Оператор WriteLn можно использовать просто для перевода курсора в начало следующей строки. Для этого достаточно написать одно слово WriteLn без скобок.
Задание 3:Определите без компьютера и изобразите на листке бумаги в клетку (один символ – одна клетка), что напечатает программа:
BEGIN Write (1992); WriteLn ( ' Mы начинаем!' ); WriteLn (6*8); WriteLn; WriteLn ('Шестью шесть ' , 6*6, '. Арифметика:' , (6+4)*3)END.
Пояснение: Значок * обозначает умножение. Выполнив задание на бумаге, выполните программу на компьютере и сверьте результаты. Совпадает ли число пробелов между символами? Если не совпадает, еще раз прочтите материал, чтобы понять, почему. Измените число пробелов в разных местах последнего WriteLn. Как изменилась картинка на экране? Почему? Добавте рядом с пустым WriteLn еще один. Что изменилось? Почему?
Переменные величины. Оператор присваивания
Понятие переменной величины вам известно из школьной математики. Пусть несколько лет назад ваш рост равнялся 130 см. Обозначим этот факт так: r=130. Теперь он равен 140 см, то естьr=140. Получается, что величинаr изменилась.Поэтому она называется переменной величиной. Числа 130 и 140 называютсязначениямипеременной величины r.
Любой язык программирования умеет обращаться с переменными величинами. Без них он был бы очень слаб и смог бы извлечь из компьютера только возможности карманного калькулятора. Точно так же алгебра без переменной величины превратилась бы в арифметику. Однако, преимущества применения переменных величин нам откроются позже, а пока наша задача - к ним привыкнуть.
Что же мы можем делать с переменными величинами, программируя на Паскале? Прежде всего, мы можем задавать компьютеру значение той или иной переменной величины. Это мы можем сделать при помощи нового оператора, который называется оператором присваивания. Так, если мы хотим сказать, чтоаимеет значение6, то должны записатьа := 6. Как видите, вместо значка = употребляется значок:=. Он называетсязнаком присваивания, а сама записьа:=6называется оператором присваивания. Говорят, что величинеаприсваивается значение6. С момента выполнения оператораа:=6компьютер будет помнить, чтоаравно шести.
Справа от значка :=в операторе присваивания можно писать не только числа, но и переменные величины, и выражения. Выражение пока будем понимать так, как его понимает школьная математика. Например, после выполнения следующего фрагмента программы: . . . .a:=2*3+4; b:=a; y:=a+b+1. . . . компьютер будет знать, чтоaравно 10,bравно 10,yравно 21. Еще несколько примеров:
ФРАГМЕНТ ПРОГРАММЫ |
ЧТО ЗАПОМНИТ КОМПЬЮТЕР |
v := -2+10; h := 10*v; s := v+h |
v=8 h=80 s=88 |
t := 0; n := 2*t+40; z := -n |
t=0 n=40 z= -40 |
Необходимо помнить, что компьютер выполняет оператор присваивания "в уме", то есть результат его выполнения не отображается на экране. Если мы хотим видеть результат выполнения оператора присваивания, используем WriteLn. Примеры:
ФРАГМЕНТ ПРОГРАММЫ |
ЧТО ВИДИМ НА ЭКРАНЕ |
v := -2+10; h := 10*v; s := v+h; WriteLn (s) |
88 |
v := -2+10; h := 10*v; s := v+h; WriteLn ( 's' ) |
s |
v := -2+10; h := 10*v; WriteLn (v+h) |
88 |
v := -2+10; WriteLn (v+10*v) |
88 |
v := -2+10; h := 10*v; s := v+h; WriteLn (v, ' ' ,h, ' ' ,s) |
8 80 88 |
v := -2+10; h := 10*v; s := v+h; WriteLn (v+1000, ' ' ,10*h, ' ' ,s) |
1008 800 88 |
Нужно иметь в виду, что слева от знака :=может стоять только переменная величина, но не число и не выражение. Можно писатьс:=34, но нельзя писать34:=с. Можно писатьz:=f-v+990, но нельзя писатьf-v+990:=z. Правило это принято потому, что оператор присваивания сначала смотрит или вычисляет, какое значение имеет правая часть, а затем присваивает это значение переменной, стоящей в левой части. Нет смысла присваивать значение числу или выражению.
Обратите внимание на один важный момент. Когда школьник видит выражение (например, d+2d), он не обязательно его вычисляет. Он может его преобразовать или, скажем, упростить (получив3d). Компьютер же, видя выражение, сначала его, может быть, и упростит, но затем обязательно вычислит. А для этого он должен знать численные значения входящих в него величин (в нашем случае это величинаd). Таким образом, вычисляя правую часть оператора присваивания (например,y:=a+b+1), компьютер должен обязательно заранее знать, чему равны переменные, из которых эта правая часть состоит (в нашем случае этоaиb). Ответственность за это знание лежит полностью на программисте. Пусть забывчивый программист записал такой фрагмент: . . .а:=10; y:=a+b+1. . . , нигде в программе не придав b никакого значения. Естественно, при вычислении выраженияa+b+1компьютер не будет знать, чему равноb. В такой ситуации разные языки программирования поступают по-разному. Некоторые просто отказываются вычислять выражения, некоторые подставляют вместоbнуль, Паскаль же иногда может поступить довольно вредно: вместоbон подставит, что бог на душу положит, и получит сногсшибательный результат, например, игрек становится равным -8904 .
Подведем предварительные итоги обсуждения очень важного оператора присваивания:
Оператор присваивания состоит из знака присваивания := , слева от которого пишется переменная, а справа - число, переменная или выражение. При выполнении оператора присваивания компьютер "в уме" (то есть ничего не показывая на мониторе) вычисляет правую часть и присваивает вычисленное значение переменной, стоящей в левой части.
Задание 4:Какое значение будет присвоено переменнойtпосле выполнения фрагмента: k:=1+2; s:=2*k; t:=6-s?