- •Р.К. Ахмадулин технология программирования
- •Оглавление
- •§1. Основные понятия
- •Основные символы языка Паскаль
- •Элементарные конструкции языка Паскаль
- •Примеры записи чисел и выражений на языке Паскаль
- •Вопросы для самопроверки
- •§2. Типы данных
- •Целые типы
- •Вещественные типы
- •Символьный тип
- •Логический тип
- •Скалярные типы, определяемые пользователем
- •Вопросы для самопроверки
- •§3. Операции и выражения
- •Приоритет операций и отношений в выражениях
- •Стандартные (встроенные) функции
- •Вопросы для самопроверки
- •§4. Структура программы
- •Комментарии
- •Директивы компилятора
- •Оформление исходного текста
- •Вопросы для самопроверки
- •§5. Переменные и константы. Оператор присваивания
- •Понятие константы
- •Понятие переменной
- •Оператор присваивания
- •Совместимость типов данных
- •Понятие типизированной константы
- •Вопросы для самопроверки
- •§6. Процедуры ввода и вывода
- •Процедуры вывода
- •Форматированный вывод
- •Процедуры ввода
- •Вопросы для самопроверки
- •§7. Условный оператор и оператор выбора. Оператор перехода
- •Условный оператор if
- •Понятие составного оператора
- •Оператор выбора
- •Оператор перехода
- •Вопросы для самопроверки
- •§8. Операторы цикла
- •Циклы с заданным числом итераций
- •Циклы с предусловием
- •Циклы с постусловием
- •Вопросы для самопроверки
- •§9. Пример использования циклов
- •Вычисление факториала
- •Вычисление суммы по заданной формуле
- •Вычисление суммы по формуле с заданной точностью
- •Вычисление максимального элемента последовательности
- •Вычисление длины последовательности элементов
- •Вопросы для самопроверки
- •§10. Массивы
- •Описание массива
- •Обращение к элементам массива
- •Многомерные массивы
- •Допустимые операции с массивами
- •Инициализация массива
- •Вопросы для самопроверки
- •§11. Алгоритмы сортировки
- •Сортировка выбором
- •Сортировка вставкой
- •Пузырьковая сортировка
- •Улучшенные сортировки
- •Вопросы для самопроверки
- •§12. Строковый тип
- •Описание строковых переменных
- •Операции над строками
- •Процедуры и функции для работы со строками
- •Вопросы для самопроверки
- •§13. Записи
- •Объявление записи
- •Обращение к записям
- •Оператор присоединения with
- •Записи с вариантами
- •Инициализация записи
- •Вопросы для самопроверки
- •§14. Множества
- •Описание множеств
- •Операции над множествами
- •Пример использования множеств
- •Множества как типизированная константы
- •Вопросы для самопроверки
- •§15. Процедуры и функции
- •Понятие процедуры и функции
- •Структура процедуры
- •Структура функции
- •Формальные параметры
- •Глобальные и локальные объекты
- •Вопросы для самопроверки
- •§16. Модули
- •Понятие модуля
- •Стандартные модули в Турбо Паскаль
- •Подключение модулей
- •Структура модуля
- •Вопросы для самопроверки
- •§17. Файлы
- •Понятие файла
- •Процедуры и функции для работы с файлами
- •Понятие буфера ввода-вывода
- •Вопросы для самопроверки
- •§18. Типизированные файлы
- •Описание типизированных файлов
- •Операции над типизированными файлами
- •Последовательный и прямой доступ
- •Вопросы для самопроверки
- •§20. Текстовые файлы
- •Описание типизированных файлов
- •Чтение и запись
- •Конец строки и конец файла
- •Дополнительные процедуры для работы с текстовыми файлами
- •Файлы Input и Output
- •Вопросы для самопроверки
- •§21. Ссылки и указатели
- •Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Выделение и освобождение динамической памяти
- •Вопросы для самопроверки
- •Рекомендуемая литература
- •Технология программирования
- •625000, Тюмень, ул. Володарского, 38
- •625039, Тюмень, ул. Киевская, 52
Вычисление максимального элемента последовательности
Пользователь вводит 100 чисел. Найти максимальный элемент последовательности.
Первое, что может прийти в голову, – описать 100 переменных. Это неправильно.
Нам не нужно запоминать все 100 чисел. Достаточно помнить только наибольшее среди них. Последовательность действий будет примерно такой: считываем новое число, проверяем его на максимум и далее переходим к следующему числу. Следовательно, достаточно завести две переменные: в одной из них будем хранить текущее значение, в другой – максимальное. Для реализации воспользуемся циклом for.
Пример:
var
x: integer; {текущее число, которое вводит пользователь}
Max: integer; {максимальное число в последовательности}
i: integer; {счетчик для цикла}
begin
for i:=1 to 100 do
begin
writeln(‘Введите очередное число:’);
readln(x); {считываем очередное число последовательности}
if (i=1) or (x>Max) then Max:=x;
{если это первое число, или если оно больше, чем текущий
максимум, то это – максимальное число}
end;
writeln(‘Максимальное число – ’, Max); {печатаем результат}
end.
Как видно из кода, все 100 чисел хранятся поочередно в одной переменной x. Текущее число будет максимальным, если оно больше, чем текущий максимум или если оно вообще первое (единственное) в последовательности.
Основное отличие данной программы от приведенных ранее – здесь ввод данных организуется внутри цикла.
Вычисление длины последовательности элементов
Пользователь вводит последовательность чисел, заканчивающуюся нулем. Найти максимальную длину последовательности одинаковых чисел (например, в последовательности 1 2 1 1 7 7 7 9 – три семерки).
Как и в предыдущем примере, ввод здесь организуется внутри цикла. Только на этот раз нам заранее неизвестно, сколько элементов будет содержать последовательность – нам лишь известно, что она заканчивается цифрой 0. Поэтому воспользуемся циклом while с условием «пока очередной элемент не равен 0».
Чтобы определить максимальную длину последовательности, нам потребуется знать не только текущее число, вводимое пользователем, но и предыдущее, а также текущую максимальную длину последовательности и длину текущей последовательности.
Пример:
var
x: integer; {текущее число, которое вводит пользователь}
xpred: integer; {предыдущее число }
MaxCount: integer; {максимальная длина последовательности}
Count: integer; {текущая длина последовательности}
begin
writeln(‘Введите первое число:’);
readln(x); {считываем первое число }
Count:=1 {инициализируем текущую длину – пока 1 элемент};
MaxCount:=1; { инициализируем максимальную длину – пока 1}
while x<>0 do {пока не ввели 0}
begin
xpred:=x; {последнее число становится предпоследним}
writeln(‘Введите очередное число:’);
readln(x); {считываем очередное число }
if x=xpred then {если последнее число равно предпоследнему}
begin
inc(count); {увеличиваем на единицу длину
текущей последовательности}
if Count>MaxCount then MaxCount:=Count;
{сравниваем длину текущей последовательности с
максимальной длиной}
end
else Count:=1; {если последнее число не совпадает с
предпоследним, то это 1-ый элемент в новой
последовательности}
end;
writeln(‘Максимальное число – ’, Max); {печатаем результат}
end.
Представленный выше исходный текст позволит найти нам решение поставленной задачи. Обратите внимание: здесь нам не потребовался счетчик.