- •Для школьников,Студентови начинающих 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. Предметный указатель
 
Описания переменных (var)
В 0.5 я писал фрагменты программ, содержащих переменные величины. А теперь пришло время писать такие программы целиком. Но для этого я должен написать кое-что выше begin, чего раньше не делал. Вот пример программы:
VAR a,b : Integer; BEGIN a:=100; b:=20; WriteLn (a + b) END.
Очевидно, эта программа напечатает число 120. В программе новостью для нас является только первая строка. Называется она описанием переменных величинаиb. Я пока не буду излагать правила составления описаний переменных. Скажу только, что описание начинается со служебного словаvar(читается ВАР, это сокращение от английского variable - переменная). После него записываются имена всех переменных, встречающихся в программе с указанием через двоеточие типа значений, которые каждая переменная имеет право принимать. В нашем случае я записал имена переменныхаиb, так как только они встречаются между BEGIN и END. Слово Integer (читается " 'интеджер", переводится ЦЕЛЫЙ) указывает, чтоаиbимеют право быть целыми числами, а не дробными. Смысл подобного ограничения в том, что Паскаль по-разному работает с целыми и дробными числами, а поскольку он язык строгий, то требует, чтобы программист точно указал, к какому из этих двух типов относятся числа.
Зачем нужно описание? Для понимания этого сначала нужно вспомнить, для чего нужна компьютеру память и как она устроена (см.2.2), а также порядок работы человека на компьютере (см.1.7).
После того, как программист ввел программу в память, он приказывает компьютеру ее исполнить. Но компьютер при этом не сразу принимается выполнять программу, а сначала совершает компиляцию, то есть перевод программы с Паскаля на собственный машинный язык. (Часто вместо термина «компиляция» употребляют более общий термин «трансляция»). Во время компиляции компьютер производит некоторые подготовительные действия, одним из которых является отведение в памяти места под переменные величины, упомянутые в программе. При этом компьютер "рассуждает" так: Раз в программе упомянута переменная величина, значит она в каждый момент времени будет иметь какое-то значение, которое, хочешь не хочешь, надо помнить. Лучше, чтобы не спутаться, заранее отвести в памяти определенное место для запоминания текущего значения каждой переменной величины и только потом уже выполнять программу. Будем называть место, отведенное в памяти под данную переменную,ячейкой.
Теперь нам понятно, зачем в паскалевской программе нужно описание - чтобы перечислить компьютеру переменные, под которые он должен отвести ячейки в памяти. Если мы забудем упомянуть в описании какую-нибудь переменную, то под нее в памяти не будет отведена ячейка и компьютер не сможет ее запомнить, а значит и вообще не сможет с ней работать. Паскаль строг к программисту, он заставляет его самого перечислять в описании все переменные, встречающиеся в программе. Бэйсик более добр - если программист поленился написать описание, Бэйсик сам просматривает программу и выискивает переменные величины, чтобы отвести для них место. Однако, не всегда доброта лучше строгости . . .
Итак, при решении задачи в памяти компьютера находится программа решения задачи, а в другом месте памяти - значения переменных, описанных в программе. Кстати, вы можете узнать, сколько байтов в памяти займет текст программы, если посчитаете, сколько в ней букв и других символов (включая пробелы).
Вы можете сказать: Зачем хранить значения 100 и 20 в каком-то другом месте, если они содержатся прямо в тексте программы, которая и без того хранится в памяти? Получается, что эти числа хранятся в двух разных местах памяти. Ответ на этот вопрос выходит за рамки книги.
Integer и LongInt
Итак, в Паскале принято правило, что если человек описал переменную, как Integer, то он разрешает ей принимать значения только целого числа. Число типа Integerзанимает в памяти два байта. Значит, под переменныеаиbкомпьютер отводит в памяти ячейки по два байта каждая. Два байта - это маленький объем памяти и уместиться в него может лишь небольшое целое число, а именно - число в диапазоне от -32768 до 32767. Если бы в предыдущем примере вам понадобилось взять а=40000, то Паскаль получил бы неправильную сумму.
Для того, чтобы переменная имела право принимать значения больших целых чисел, она должна быть описана не как Integer, а какLongInt(сокращение от Long Integer - Длинное Целое, читается “лонг’инт”). Под переменную типа LongInt компьютер отводит в памяти 4 байта и она может принимать значения в диапазоне от ‑2147483648 до 2147483647.
Задание 5:Население Москвы равняется а=9000000 жителей. Население Нью-Васюков равняетсяb=1000 жителей. Напишите программу, которая определяет разницу в числе жителей между двумя городами. Используйте переменные величины.
Задание 6:Попробуйте ввести ошибку. Опишите переменные величины не как LongInt, а как Integer. Какова реакция Паскаля?
