- •Язык 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. Динамические структуры Использование динамических массивов
- •Процедуры для работы с динамической структурой спискового типа
- •Процедуры, обслуживающие стек
- •Вставка динамической переменной
- •Примечания:
Алгоритм шифрования данных
Задача:
Допустим, требуется зашифровать сообщения, состоящие из определенных символов. Например, исходный текст состоит из цифры от 0 до 9 (представленных в программе в виде символов) и других знаков и имеет длину в 15 символов. В шифровке на место цифр подставляются соответствующие им знаки, на место всех остальных символов дополнительный 11-й знак.
Описание переменных:
В программе имеется 4 массива. Два – в разделе констант, и два – в разделе описания переменных. Первые служат для хранения соответствия цифр символам кодирования, вторые – для хранения данных, введенных пользователем, и результата их шифрования.
Алгоритм решения задачи:
Сначала данные записываются в массив mytext. Затем требуется просмотреть каждый элемент массива и найти ему соответствие в массиве atext. Когда обнаруживается соответствие, цикл while останавливается и в mycode записывается соответствующий символ-код из массива acode. Если символ не описан в массиве atext, то он заменяется последним элементом массива acode.
Программа на языке Паскаль:
const
n = 15;
atext: array[1..10] of char = ('0','1','2','3','4','5','6','7','8','9');
acode: array[1..11] of char = ('&','+','/','.','^','@','"','!','%','#','$');
var
mytext: array[1..n] of char;
mycode: array[1..n] of char;
i, j: integer;
begin
writeln('Введите данные: ');
for i := 1 to n do
read(mytext[i]);
for i := 1 to n do begin
j := 1;
while (j <= 10) and (mytext[i] <> atext[j]) do
j := j + 1;
if j <= 10 then
mycode[i] := acode[j]
else
mycode[i] := acode[11];
end;
write('Результат: ');
for i := 1 to n do
write(mycode[i]);
readln;
end.
Выделение слов из строки
Задача:
Пользователь вводит набор слов (предложений). Необходимо сформировать из встречающихся в предложении слов их массив. При этом повторяющиеся слова не должны входить в массив дважды.
Например:
Предложение: «I am going at home. They are going at home too.»
Массив строк: [‘i’, ‘am’, ‘going’, ‘at’, ‘home’, ‘they’, ‘are’, ‘too’]
Алгоритм решения задачи:
-
Пусть предложение(я) вводит пользователь, и то, что он ввел, хранится в строковой переменной u (как бы сокращение от слова user). При вводе предложений следует иметь в виду, что в языке программирования Паскаль длина строки не может превысить 255 символов.
u: string;
-
Назовем массив, в котором будут сохраняться отдельные слова, ws (сокращение от слова words). Какую задать длину этого массива? Точно сказать трудно, но можно придти к определенному значению рассуждением. Если в том, что ввел пользователь, вообще не будет пробелов и знаков препинания, то массив будет состоять из одного элемента. Если пользователь будет вводить слова в среднем по 40 символов, то массив будет состоять где-то из 6 элементов. Если же пользователь будет каждую букву отделять от другой пробелом или каким-либо знаком, то получится 128 элементов и 127 всего остального, которое не учитывается. Конечно, трудно представить словарь из 128 различных элементов. А вот если слова будут состоять из двух букв, то получится 85 слов (256 / 3, т.к. две буквы + иной знак). Все! Не будем гадать. Пусть будет так:
ws: array[1..100] of string;
-
Понадобится переменная, в которой будет храниться текущее слово, перед его занесением в массив.
w: string;
-
Предстоит проанализировать каждый символ предложения, введенного пользователем. Поэтому требуется узнать, какова его длина. Для этого можно использовать встроенную функцию Паскаля length. Она определит количество символов в строке, что можно будет присвоить какой-нибудь целочисленной переменной.
len: integer;
-
Понадобится три счетчика: для просмотра исходной строки (предложения пользователя), просмотра массива с целью исключения записи в него одинаковых слов и счетчик текущего количества этих слов.
i, j, q: byte;
-
С данными разобрались. Теперь сам алгоритм решения задачи. Сначала нужно данные считать и измерить их длину.
writeln('Введите текст: ');
read(u);
len := length(u);
-
Основной цикл, анализирующий каждый введенный символ пользовательской строки:
i := 1;
while i <= len do
-
Символ должен быть проверен на то, что он является символом буквы. В данном случае буквами считаются только английские строчные буквы, хотя это условие можно и расширить. Также извлекаемый из пользовательской строки знак должен быть преобразован в символьный тип данных с помощью функции lowercase. Обычно эта функция применяется для преобразования прописных букв в строчные.
if (lowercase(u[i]) >= 'a') and (lowercase(u[i]) <= 'z') then begin
-
Если символ все-таки буква, то она должна быть записана в переменную w, и сформировать начало слова. Счетчик должен быть увеличен на единицу с тем, чтобы далее рассматривать следующий символ.
w := lowercase(u[i]);
i := i + 1;
-
Далее продолжается анализ каждого символа внутри внешнего цикла while. Если символ удовлетворяет условию буквы, и счетчик еще не показал конец пользовательской строки, то буквы будут последовательно записываться за первой, формируя слово.
while (i <= len) and
((lowercase(u[i]) >= 'a') and
(lowercase(u[i]) <= 'z')) do begin
w := w + lowercase(u[i]);
i := i + 1;
end;
-
Как только попадется «небуква» предыдущий цикл прерывается. Далее следует проверить, нет ли только что сформированного слова в массиве. Если нет, то следует его туда записать.
j := 1;
while (j <= q) and (w<>ws[j]) do
j := j + 1;
if j > q then begin
q := q + 1;
ws[q] := w;
end;
-
Если первый или два и больше последующих за словом символов «небуквы», то требуется лишь перейти к следующему символу.
else
i := i + 1;
-
Ну и в конце неплохо бы вывести слова на экран.
for i := 1 to q do
writeln(ws[i]);
Программа на языке Паскаль:
Полностью программа выделения слов из строки выглядит так:
Var u: string;
ws: array[1..100] of string;
w: string;
len: integer;
i, j, q: integer;
begin writeln('Введите текст: ');
read(u);
len := length(u);
i := 1;
while i <= len do
if (lowercase(u[i]) >= 'a') and (lowercase(u[i]) <= 'z') then begin
w := lowercase(u[i]);
i := i + 1;
while (i <= len) and
((lowercase(u[i]) >= 'a') and
(lowercase(u[i]) <= 'z')) do begin
w := w + lowercase(u[i]);
i := i + 1;
end;
j := 1;
while (j <= q) and (w<>ws[j]) do
j := j + 1;
if j > q then begin
q := q + 1;
ws[q] := w;
end;
end
else
i := i + 1;
for i := 1 to q do
writeln(ws[i]);
end.