- •Язык pascal программирование для начинающих Содержание
- •1.Начала программирования
- •2.Процедуры и функции
- •1.Начала программирования Понятия программирования
- •История и особенности языка программирования Паскаль (Pascal)
- •Словарь языка Pascal
- •Компиляция
- •Структура программы на языке Паскаль
- •Пунктуация в программах на Паскале
- •Операторы
- •Оператор присваивания
- •Составной оператор
- •Выражения
- •Ввод и вывод данных
- •Переменные и константы
- •Длина переменных
- •Типы данных
- •Целые типы
- •Вещественные типы
- •Использование константы pi
- •Символьный тип (Char)
- •Перечисляемый тип
- •Ограниченный тип (интервал)
- •Булевы типы. Логические выражения и логические операции
- •Битовая арифметика и операции над битами
- •Условные операторы
- •Оператор case
- •Вложенные конструкции if-else
- •Циклы в Паскале
- •Операторы goto, break и continue Оператор безусловного перехода goto
- •Операторы break и continue
- •Генератор псевдослучайных чисел
- •Эквивалентность и совместимость типов
- •Совместимость типов
- •Функция sizeof
- •2.Процедуры и функции Структурное программирование
- •Стандартные функции языка Pascal
- •Арифметические функции
- •Тригонометрические функции
- •Функции преобразования из вещественного в целый тип
- •Логические функции
- •Функции над дискретными типами Функция ord
- •Функция chr
- •Функции succ и pred
- •Процедуры и функции
- •Формальные параметры
- •Параметры-значения
- •Параметры-переменные
- •Побочные эффекты
- •Процедуры и функции в качестве параметров
- •Локальные и глобальные переменные
- •Рекурсивные функции
- •3.Массивы в Pascal Общее представление о массивах
- •Одномерные массивы
- •Двумерные массивы
- •Открытые массивы
- •4.Графика и псевдографика Модуль Crt
- •Модуль Graph
- •Процедура Line. “Звезды на экране”
- •Процедура Circle. “Разноцветные окружности”
- •Прямоугольники. Процедуры Rectangle, Bar и Setfillstyle
- •5.Строки Строковый тип данных в Паскале
- •Процедуры и функции для работы со строками
- •Строки и массивы символов
- •6.Работа с файлами Работа с файлами в Паскале. Общие сведения
- •Создание файла и запись данных в него
- •Чтение данных
- •Функция ioResult
- •Редактирование файла
- •7.Записи в Pascal Записи (Record)
- •Сравнение записей с массивами
- •Оператор With
- •Запись с вариантами
- •8.Множества Множества (Set)
- •Данные типа set
- •Операции над множествами
- •9.Динамические структуры данных Указатели, или ссылки (Pointer)
- •Ссылочные и динамические переменные
- •Процедура New
- •Операции над указателями
- •Процедура Dispose
- •Стек ("магазин")
- •Очередь
- •Запись новых компонент
- •Нелинейные структуры
- •Решение Задач Содержание
- •1.Линейные алгоритмы
- •2.Условные операторы
- •3.Циклы
- •4.Графика и псевдографика
- •5.Процедуры, функции, рекурсии
- •6.Массивы
- •7.Строки
- •1.Линейные алгоритмы Вычисление площади поверхности цилиндра
- •"Заем". Арифметические выражения, возведение в степень
- •2.Условные операторы Извлечение цифр числа
- •Поразрядное сравнение чисел
- •Перевод шестнадцатеричного числа в десятичное число
- •Перевод десятичного числа в шестнадцатеричное
- •Определение принадлежности даты диапазону времени
- •Программа, определяющая количество дней в месяце
- •Фильтрация данных
- •Поиск максимального элемента среди минимальных элементов столбцов
- •Удаление элементов одномерного массива
- •Выбор элементов массива
- •Процедура вычисления корней квадратного уравнения
- •Программа "Угадай число"
- •Перевод римских чисел в арабские. Пример автоматного распознавателя
- •Определить возможность существования треугольника по сторонам
- •Определение четверти на координатной плоскости
- •Оператор case в задаче выбора
- •Найти максимальное число из трех
- •Вычисление площадей геометрических фигур
- •Вычисление значения функции
- •3.Циклы Определить количество элементов массива, значение которых больше соседних элементов
- •Определить количество простых чисел
- •Сумма элементов различных рядов
- •Поменять слова местами
- •Определение различных цифр, входящих в число
- •Извлечение цифр числа
- •Поразрядное сравнение чисел
- •Использование повторяющихся изображений для создания орнаментов
- •Перенос и анимация геометрических фигур
- •Сумма и произведение цифр числа
- •Окна в crt. Программа для угадывания числа
- •Вычисление средних арифметических массивов
- •Удаление последнего слова в строке
- •Как избавиться от goto
- •Вывод квадратов натуральных чисел
- •Числа Фибоначчи
- •Запись табличных данных в файл и их чтение оттуда
- •Фильтрация данных
- •Поиск максимального элемента среди минимальных элементов столбцов
- •Умножение матриц
- •Удаление элементов одномерного массива
- •Выбор элементов массива
- •Сумма элементов двумерного массива
- •Поиск максимального элемента в массиве
- •Функция, вычисляющая наибольший общий делитель
- •Фильтр строки
- •Заполнение массива и вычисление суммы элементов
- •Возведение числа в степень
- •Вывод на экран таблицы ascii
- •Вычисление суммы ряда чисел
- •Программа "Угадай число"
- •Перевод римских чисел в арабские. Пример автоматного распознавателя Задача:
- •4.Графика и псевдографика Масштабирование фигуры
- •Использование повторяющихся изображений для создания орнаментов
- •Перенос и анимация геометрических фигур
- •Окна в crt. Программа для угадывания числа
- •Вывод строки по диагонали
- •5.Процедуры, функции, рекурсии Вычисление средних арифметических массивов
- •Перевод шестнадцатеричного числа в десятичное число
- •Перевод десятичного числа в шестнадцатеричное
- •Перевод десятичного числа в двоичную или восьмеричную систему счисления.
- •Перевод двоичного числа в десятичное
- •Пример, иллюстрирующий использование интервального типа и манипуляции над множествами
- •Псевдослучайные числа. Функция, возвращающая значение и меняющая параметр
- •Программа решения задачи о ханойской башне
- •Заполнение массива и его вывод на экран
- •Рекурсия. Процедура перевода чисел из десятичной системы счисления в другие
- •Процедура вычисления корней квадратного уравнения
- •Нахождение нод (наибольшего общего делителя) с помощью рекурсивной функции
- •Функция, вычисляющая наибольший общий делитель
- •Функция, вычисляющая наибольший общий делитель
- •Обмен значений переменных
- •Функции вычисления площади геометрических фигур
- •Вычисление площади поверхности цилиндра
- •"Заем". Арифметические выражения, возведение в степень
- •6.Массивы Определить количество элементов массива, значение которых больше соседних элементов
- •Определение различных цифр, входящих в число
- •Поразрядное сравнение чисел
- •Вычисление средних арифметических массивов
- •Использование динамических массивов
- •Копирование данных в обратном порядке
- •Поиск самой длинной заданной последовательности в массиве
- •Поиск максимального элемента среди минимальных элементов столбцов
- •Умножение матриц
- •Алгоритм шифрования данных
- •Выделение слов из строки
- •Сортировка выбором
- •Длина последовательности
- •Слияние двух упорядоченных массивов
- •Удаление элементов одномерного массива
- •Сортировка методом пузырька
- •Исключение одинаковых элементов массива
- •Выбор элементов массива
- •Вставка элемента в массив
- •Сумма элементов двумерного массива
- •Поиск максимального элемента в массиве
- •Сумма и произведение элементов одномерного массива
- •Заполнение массива и его вывод на экран
- •Фильтр строки
- •Заполнение массива и вычисление суммы элементов
- •7.Строки Поменять слова местами
- •Сортировка данных строки
- •Удаление из строки слов заданной длины
- •Удаление последнего слова в строке
- •Добавление пробелов в строку
- •Удаление одинаковых символов
- •Удаление лишних пробелов
- •Вывод строки по диагонали
- •Частота встречаемости символа в строке
- •Палиндром
- •Переворот строки
- •Замена подстроки в строке
- •Вставка подстроки
- •Удаление подстроки
- •Копирование части строки
- •Определение длины строки
- •Замена последовательности символов в строке
- •Перевод двоичного числа в десятичное
- •Выделение слов из строки
- •Фильтр строки
- •8.Файлы Запись данных в бестиповой файл
- •Проверка файла с данными на наличие записи
- •Замена последовательности символов в строке
- •Запись табличных данных в файл и их чтение оттуда
- •Копирование нетипизированного файла
- •Копирование данных в обратном порядке
- •Копирование текстовых файлов
- •Фильтрация данных
- •Запись в типизированный и текстовый файлы
- •9.Записи Пример использования записи с вариантами
- •Фильтрация записей по значению поля
- •Проверка файла с данными на наличие записи
- •Преобразование даты в числовой формат
- •Определение принадлежности даты диапазону времени
- •Программа, определяющая количество дней в месяце
- •10. Множества и интервалы Пример, иллюстрирующий использование интервального типа и манипуляции над множествами
- •11. Динамические структуры Использование динамических массивов
- •Процедуры для работы с динамической структурой спискового типа
- •Процедуры, обслуживающие стек
- •Вставка динамической переменной
- •Примечания:
Процедуры, обслуживающие стек
Задача:
Создать процедуры для добавления элемента в стек (add), удаления элемента из стека (del), вывода содержимого стека на экран (wstack).
Описание переменных:
top – указатель на конец стека;
p – указатель на обслуживаемую в текущий момент область памяти.
Алгоритм решения задачи:
В теле основной ветки программы переменной top присваивается значение nil, т.е. стек еще не заполнен.
Добавление элемента в стек
Процедура add принимает в качестве фактического параметра число x, которое будет записано в содержательную часть элемента стека.
Выделяется память под указатель p, в содержательную часть которого записывается x, а в указатель – адрес, хранимый в top. Переменная top, в свою очередь, начинает ссылаться на выделенную под p область памяти.
Удаление элемента из стека
В процедуре del в переменную p записывается адрес предпоследнего элемента стека. Последний элемент, ссылка на который хранится в top, удаляется. Далее top присваивается адрес элемента, на участок памяти, который указан p. К этому времени он стал уже не предпоследним, а последним элементом.
Удаление не происходит, если стек пустой (top указывает на nil).
Вывод стека на экран
Сначала p указывает на последний элемент. Выражения цикла while будут выполняться до тех пор, пока в p не запишется nil; это будет означать то, что перед этим был обработан первый элемент стека (который обрабатывается последним). В цикле сначала на экран выводится содержательная часть динамической переменной, на которую указывает p. Затем значение p меняется: переменная начинает указывать на следующий элемент.
Программа на языке Паскаль:
type
pitem = ^item;
item = record
data: integer;
prev: pitem
end;
var
top, p: pitem;
n, k: integer;
procedure add(x:integer);
begin
new(p);
p^.data := x;
p^.prev := top;
top := p
end;
procedure del;
begin
if top<>nil then begin
p := top^.prev;
dispose(top);
top := p
end;
end;
procedure wstack;
begin
writeln('Содержимое стека: ');
p := top;
while p <> nil do begin
write(p^.data, ' ');
p := p^.prev;
end;
writeln;
end;
begin
top := nil;
for k := 1 to 10 do
add(k);
wstack;
writeln('Введите добавляемое в стек значение: ');
readln(n);
add(n);
wstack;
writeln('Количество элементов стека для удаления? ');
readln(n);
for k:=1 to n do
del;
wstack;
readln
end.
Примечания:
Основная ветка программы может быть любой. В приведенной выше программе сначала стек заполняется числами от 1 до 10 (процедура add вызывается 10 раз), затем они выводятся на экран. Пользователь вводит число, оно добавляется в стек. В конце программы указывается количество удаляемых элементов, после чего в цикле удаляется именно это количество элементов стека.
Вставка динамической переменной
Задача:
Построить цепочку динамическую структуру (стек), содержащую целые числа.
Затем между 4-й и 5-й динамической переменной вставить еще одну.
Описание переменных:
ir – указатель на конец структуры;
ip – указатель на текущую резервируемую память;
insert4 – указатель на 4-ю переменную стека;
insert5 – указатель на 5-ю переменную стека;
inserti – указатель на динамическую переменную, вставляемую между 4-м и 5-м элементами стека;
k – счетчик;
l – записываемое или считываемое из стека число.
Алгоритм решения задачи:
Сначала ir присваивается nil, т.е. указатель не указывает ни на какой участок памяти.
В цикле for происходит заполнение стека по следующему алгоритму. У пользователя запрашивается число, которое записывается в обычную переменную l. Резервируется участок памяти под указатель ip. В захваченный участок памяти записывается значение l и значение указателя ir (первый раз ir указывает на nil). Т.е. теперь ip указывает на nil. Переменная ir, в свою очередь, связывается с участком памяти, в который сейчас производилась запись. В итоге, после первой итерации получается структура, где первый элемент имеет указатель на nil, а переменная ir указывает на этот элемент. По окончании работы цикла for получается линейная динамическая структура данных стекового типа, где первый элемент указывает на nil, а последний элемент помечен (указан) переменной ir.
В цикле for помимо прочего, происходит связывание указателей insert4 и insert5 с четвертым и пятым элементами структуры соответственно. Когда происходит пятая итерация цикла (k = 5), то указатель-переменная ip хранит адрес пятого элемента, поэтому ее значение присваивается insert5. В следующей итерации цикла ip изменится, а в указателе insert5 сохранится адрес пятого элемента. В пятом элементе хранится адрес на четвертый элемент, который записывается в переменную insert4.
Вставка нового элемента структуры между 4-й и 5-й динамическими переменными происходит так. У пользователя запрашивается число, которое записывается в переменную l. Резервируется участок памяти, адрес которого помещается в указатель inserti. В содержательную часть этой области записывается значение l. Далее, в указывающую часть этой области записывается ссылка на четвертый элемент структуры (его адрес хранится в переменной insert4). Пятый элемент стека, уже не должен ссылаться на четвертый, он должен указывать на элемент, который указан переменной inserti.
Для вывода элементов стека на экран также используется цикл for. Обход стека возможен только с его конца. На конец стека указывает переменная ir, значение которой присваивается ip. Далее из этого участка памяти извлекается число, записывается в l и выводится на экран. Указателю ir присваивается значение указывающей части ip, т.е. ir теперь указывает на следующий элемент (правильней сказать, предыдущий элемент стека).
Программа на языке Паскаль:
type
intp = ^intrec;
intrec = record
i: integer;
p: intp
end;
var
ip, ir, inserti, insert4, insert5: intp;
k, l: integer;
begin
ir := nil;
writeln('Введите 10 чисел.');
for k := 1 to 10 do begin
readln(l);
new(ip);
ip^.i := l;
ip^.p := ir;
ir := ip;
if k = 5 then begin
insert5 := ip;
insert4 := ip^.p
end
end;
writeln;
writeln('Введите еще одно число.');
readln(l);
new(inserti);
inserti^.i := l;
inserti^.p := insert4;
insert5^.p := inserti;
for k := 1 to 11 do begin
ip := ir;
l := ip^.i;
write(' ',l);
ir := ip^.p;
dispose(ip)
end;
readln
end.