- •Министерство образования и науки российской федерации
- •Начальный курс программирования на основе алгоритмического языка Паскаль
- •Введение
- •Часть. Основы программирования на Паскале
- •1.1. Структура простейшей Паскаль-программы
- •1.2. Данные и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных
- •1.2.3. Правила записи констант
- •1.2.4. Описание переменных и именованных констант в Паскале
- •1.2.5. Выражения
- •1.3. Операторы преобразования данных
- •1.3.1. Оператор присваивания
- •1.3.2. Понятие ввода и вывода
- •1.3.3. Оператор вывода
- •1.3.4. Оператор ввода
- •1.4. Разработка простейших программ
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Паскале
- •1. Следование
- •2. Ветвление (развилка)
- •If условие then
- •If условие then
- •3. Цикл
- •1.4.5. Примеры разработки программ
- •1.5. Массивы
- •1.5.1. Понятие массива. Основные правила работы с массивами в Паскале
- •1.5.2. Примеры программ с массивами
- •1.614. Структура паскаль-программы
- •Часть.Подпрограммы
- •2.1. Общие сведения о подпрограммах
- •2.2. Процедуры в Паскале
- •2.2.1.Описание процедур
- •2.2.2. Обращение к процедуре
- •2.3. Функции Паскаля
- •2.3.1. Описание функций
- •2.3.2. Обращение к функции
- •2.4. Глобальные и локальные имена
- •2.5. Использование подпрограммы в качестве параметра другой подпрограммы
- •2.6. Модули
- •2.6.1. Общие сведения
- •2.6.2. Структура модуля
- •2.6.3. Использование модулей
- •2.6.4. Модули как средство программирования
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации
- •3.1.1. Символьный тип
- •3.1.2.Строковые типы
- •3.1.3. Подпрограммы, работающие со строками
- •Функции
- •Процедуры
- •3.2. Тип запись
- •3.3. Файлы
- •3.3.1. Общие понятия
- •3.3.2. Файлы в Турбо Паскале
- •3.3.3. Текстовые файлы
- •Пример 1
- •Пример 2
- •3.3.4. Типизированные файлы
- •3.3.5. Нетипизированные файлы
- •Часть IV. Работа с динамическими массивами
- •О статическом и динамическом распределении памяти
- •Указатели в Паскале
- •Динамические массивы
- •Формальные параметры-массивы без указания границ
- •Приложение 1. Краткая инструкция по работе в среде Turbo (Borland) Pascal.
- •Режимы компиляции программы, использующей модули
- •Приложение 2. Краткая инструкция по работе в режиме консольного приложения средыDelphi. Создание консольного приложения
- •Сохранение консольного приложения.
- •Отладка программы
- •Контрольные вопросы
- •Заключение
- •Библиографические ссылки
- •Содержание
- •Часть IV. Работа с динамическими массивами 98
1.3.4. Оператор ввода
Оператор
READ(V1,V2,...,VN)
означает ввод значений переменныхV1,V2,..., VN. Переменные могут иметь индексы. Константы и выражения в списке ввода недопустимы, так как не подлежат изменению.
Встретив оператор ввода, компьютер приостанавливает выполнение программы до окончания задания значений исходных данных пользователем (в профессиональной терминологии программистов - организуется прерывание для ввода). Вводимые значения могут разделяться пробелами (одним или несколькими) или переводом строки (нажатием клавиши Enter); допустимы в качестве разделителей значений исходных данных и некоторые другие символы. Обратите внимание, чтопосле последнего введенного значения надо обязательно нажать Enter.До нажатия клавиши Enter вводимые значения накапливаются в буфере ввода, нажатие этой клавиши служит командой для передачи этих значений в память.
Приведенный выше оператор эквивалентен последовательности операторов:
READ(V1);READ(V2);...;READ(VN)
Оператор READLN предусматривает пропуск вводимых символов до нажатия клавиши Enter, т. е. до ввода символа конца строки (END OF LINE).
Оператор READLN(V1,V2,...,VN) эквивалентен двум операторам
READ(V1,V2,...,VN); READLN
или последовательности операторов
READ(V1);READ(V2);...;READ(VN);READLN
Оператор ввода с клавиатуры всегда предваряется выводом фразы, приглашающей к вводу. Иначе пользователь может только догадываться, по какой причине программа находится в состоянии ожидания; такая ситуация является необъяснимым остановом и может интерпретироваться как “зависание” компьютера.
Пример.
Var i:integer; a:real;
begin
writeln(‘Введитеiиa’); { вывод приглашения к вводу }
readln(i,a);...{оператор ввода}
Форма ввода:
Введите iиa
В фигурные скобки принято заключать альтернативные фрагменты формы ввода или вывода. В данном примере значения iиaможно располагать на одной строке экрана, разделяя их пробелами, а можно на разных строках, разделяя их нажатием клавишиEnter.
1.4. Разработка простейших программ
1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
Качество современного программного обеспечения характеризуется, прежде всего, такими критериями, как удобство использования, надежность, ясность структуры и текста программы. Технические характеристики программы: - объем занимаемой памяти, быстродействие - отошли на второй план.
Удобство использования программы, т. е. удобство общения с ней, определяется организацией ввода и вывода. Схема общения с программой часто называетсяинтерфейсом(внешними связями) программы. В современных языках программирования существуют специальные средства для эффективного программирования интерфейса, удовлетворяющего некоторым стандартам, например, стандартам операционной системыWindows. В настоящем пособии эти средства не рассматриваются, а для организации простейшего диалога между пользователем и программой используются стандартные подпрограммы ввода и вывода (ReadиWrite).
Надежность программыозначает отсутствие при ее работе остановов, сообщение о причине которых не выводится, т. е. зацикливаний, зависаний и др.
На получение качественных программ направлены положения структурного программирования, которые в основном сводятся к следующим моментам:
Использование точно обозначенных управляющих структур алгоритмов, имеющих один вход и один выход. Такие структуры называются базовыми(см. п.1.4.4).
Разработка алгоритма методом нисходящего проектирования. Этот метод состоит в разбиении алгоритма на части (подалгоритмы) и установлении между ними связей. Каждый подалгоритм должен иметь один вход и один выход, связь между подалгоритмами устанавливается посредством базовых алгоритмических структур. Каждый подалгоритм в свою очередь разбивается на части, и процесс повторяется. Таким образом, получаемиерархическую последовательную разработку алгоритма от сложного к простому.
Независимость подалгоритмов друг от друга на каждом этапе нисходящего проектирования. Следствием этого требования является ограниченное использование глобальных переменных подпрограммами.
Использование системы обозначений, соответствующих содержанию задачи и облегчающих понимание программы.
Грамотное проектирование качественных программ состоит из следующих этапов:
Анализ задачи и разработка внешней спецификации программы. Во внешнюю спецификацию входит описание входных и выходных данных программы, форм ввода и вывода (см. п.1.3), а также описание методов решения задачи, способов апробации программы, сведения о разработчике программы.
Проектирование структур данных и алгоритма.
Написание (кодирование) программы на алгоритмическом языке.
Отладка программы.
Под отладкойподразумевается выявление и исправление ошибок. Ошибки могут обнаруживатьсяавтоматическисистемой программирования и операционной системой при компиляции, редактировании связей, загрузке и выполнении программы. Могут существоватьошибки в логике программы, которые автоматически не обнаруживаются. Такие ошибки можно выявить дополнительным визуальным анализом программы или с помощьютестов, т. е. наборов значений исходных данных, по которым известен результат. Испытание программы с помощью тестов называетсятестированием.
Проектирование тестов часто представляет собой самостоятельную задачу. На этапе 1 разрабатываются функциональные тесты, для получения которых используются идеи, отличные от используемых в алгоритме (но они реализуют ту жефункцию). При функциональном тестировании алгоритм рассматривается как черный ящик, его внутренняя структура не учитывается.Структурные тестыопираются на структуру программы; например, кроме прогона алгоритма на компьютере, осуществляется вычисление вручную. В идеале структурных тестов должно быть столько, сколько возможных путей выполнения алгоритма.
Лучшим способом уменьшения числа ошибок является тщательное выполнение этапов 1 и 2.
Грамотный и аккуратный программист каждый из рассмотренных этапов документирует.