- •Указания по выполнения практических и лабораторных работ
- •Лабораторная работа № 1 Блок-схемы как графическое представление алгоритмов. Основные блоки, используемые в блок- схемах алгоритмов
- •Краткие теоретические сведения Основные этапы решения задач на компьютере
- •Языки программирования
- •Трансляторы
- •Язык программирования Паскаль
- •Использование среды программирования турбо паскаль
- •Порядок выполнения работы
- •Типы вычислительных процессов
- •Блок-схемы алгоритмов
- •Примеры составления блок-схемы алгоритма
- •Основные файлы пакета Турбо Паскаль
- •Запуск интегрированной среды программирования Турбо Паскаль
- •Работа с меню ис
- •Меню File
- •Меню Run
- •Меню Compile
- •Меню Debug
- •Меню Tools
- •Меню Options
- •Меню Window
- •Меню Help
- •Порядок выполнения работы
- •Процедуры ввода-вывода
- •Порядок выполнения работы
- •Оператор записи WriteLn аналогичен процедуре Write, но после вывода последнего в списке значения для текущей процедуры WriteLn происходит перевод курсора к началу следующей строки.
- •Пример программы с использованием процедур ввода-вывода данных с различными форматами выводимых данных
- •Порядок выполнения работы
- •Операторы языка Паскаль
- •Оператор присваивания
- •Оператор безусловного перехода (go to)
- •Порядок выполнения работы
- •Оператор выбора case
- •Порядок выполнения работы
- •Оператор повтора for
- •Примеры программ с использованием оператора for
- •Оператор повтора Repeat
- •Пример программы с использованием оператора repeat
- •Пример программы с использованием операторов присваивания, повтора и выбора
- •Порядок выполнения работы
- •Пример программы с использованием оператора повтора while
- •Порядок выполнения работы
- •Примеры описания одномерных и двумерных массивов
- •Действия над массивами
- •Действия над элементами массива
- •Ввод-вывод элементов массива
- •Пример программы ввода-вывода одномерного массива
- •Пример программы ввода-вывода двумерного массива
- •Порядок выполнения работы
- •Пример программы нахождения в одномерном массиве максимального элемента
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Основные логические структуры:
- •Функции в Паскале
- •Встроенные функции и процедуры
- •Арифметические процедуры и функции
- •Скалярные процедуры и функции
- •Функции преобразования типов
- •Процедуры управления программой
- •Специальные процедуры и функции
- •Вызов стандартной процедуры или функции
- •Порядок выполнения работы
- •Пример программы с использованием функции, определенной пользователем
- •Порядок выполнения работы
- •Пример программы с использованием процедуры, определенной пользователем
- •Механизм передачи параметров
- •Порядок выполнения работы
- •Нетрадиционное использование подпрограмм. Косвенная рекурсия
- •Порядок выполнения работы
- •Линейный поиск
- •Линейный поиск в упорядоченном массиве данных
- •Бинарный (двоичный) поиск
- •Пример программы с использованием алгоритма бинарного поиска
- •Порядок выполнения работы
- •Методы внутренней сортировки
- •Сортировки включением
- •Сортировка выбором
- •Порядок выполнения работы
- •Шейкерная сортировка
- •Пирамидальная сортировка
- •Обменная сортировка разделением
- •Порядок выполнения работы
- •Естественное слияние
- •Многопутевое слияние
- •Порядок выполнения работы
- •Пример разработки собственного модуля
- •Порядок выполнения работы
- •Скалярные процедуры и функции
- •Функции преобразования типов
- •Процедуры управления программой
- •Специальные процедуры и функции
- •Вызов стандартной процедуры или функции
- •Порядок выполнения работы
- •Формат описания строкового типа
- •Фрагмент описания строковых данных
- •Стандартные строковые процедуры и функции
- •Пример программы работы со стандартными строковыми процедурами и функциями
- •Примеры программ работы со строковыми переменными
- •Порядок выполнения работы
- •Пример программы работы с записями
- •Порядок выполнения работы
- •Пример программы работы с записями
- •Порядок выполнения работы
- •Операции над множествами
- •Объединение Пересечение Разность
- •Порядок выполнения работы
- •Формат описания файлового типа
- •Средства обработки файлов
- •Текстовые файлы
- •Пример программы работы с текстовым файлом
- •Порядок выполнения работы
- •Средства работы с типизированными файлами
- •Пример программы работы с типизированным файлом
- •Порядок выполнения работы
- •Средства работы с нетипизированными файлами
- •Пример программы для работы с типизированными файлами
- •Порядок выполнения работы
- •Распределение памяти при выполнении программы
- •Пример программы распределения памяти и получения доступа к полям psp.
- •Порядок выполнения работы
- •Статические и динамические переменные
- •Указатели
- •Типизированные указатели
- •Нетипизированный указатель (pointer)
- •Доступ к переменной по указателю
- •Управление динамической памятью
- •Процедуры динамического распределения
- •Пример программы с использованием динамической памяти
- •Порядок выполнения работы
- •Пример программы создания и использования связанного списка
- •Порядок выполнения работы
- •Параметр процедурного типа
- •Порядок выполнения работы
- •Контрольные вопросы
- •Литература
- •Содержание
Примеры программ работы со строковыми переменными
Программа 1. Пусть требуется разработать программу, которая во введенном слове подсчитывает число букв "а" и заменяет их буквами "б".
В реализации данной программы разработаем процедуру ChangeChar, в которой будем просматривать строку с целью поиска позиции буквы "а". Это можно организовать с помощью цикла, используя while и стандартную функцию Pos('a', S). Как только функция Pos обнаруживает первое появление в строке S подстроки "а", она возвращает результат — номер позиции буквы "а". Счетчик найденных букв "а" увеличивается на единицу, а в эту позицию вписывается буква "б" и т. д., пока в строке есть буквы "а".
Текст программы может выглядеть следующим образом:
program Change_Letter; {Подсчет и замена букв "а" на "б"}
Var
S: String;
procedure ChangeChar(var S: string); {Процедура замены буквы "а" на "б"}
Var
N : byte;
begin
N:=0; {Обнуление числа букв "а"}
While PoS('a', S) > 0 do {Если найдена буква "а", то}
begin
N:=N+1; {Увеличить счетчик букв "а" на 1}
S[Pos('a', S)] := 'б'; {Записать в позицию буквы "а" букву "б"}
end;
Writeln ('В слове было ',N, ' букв "а" ');
end ;
begin {Основная программа}
Write('Введите исходную строку: ');
Readin (S);
ChangeChar(S); {Вызов процедуры замены "а" на "б"}
Writeln('Получилась строка ', S);
end.
Программа 2. Составить программу, которая запрашивает две строки по четыре символа, состоящие из цифр. Если в строках введены не цифры, выдать сообщение и прервать работу программы.
Программа склеивает введенные строки, затем преобразует исходные строки в числа, подсчитывает их сумму, преобразует результат в строку и печатает строки, полученные в результате склеивания и преобразования суммы чисел в строку.
Действие программы можно представить в виде трех самостоятельных фрагментов: ввод первой и второй строк и преобразование их в число, вывод на экран результата склеивания строк и суммирования чисел. Вывод на экран результатов организуем с помощью стандартных процедур вывода Writeln, а для ввода строк и преобразования их в числа создадим процедуру Inp_Str.
Для передачи данных между процедурой и основной программой введем формальные параметры-переменные S типа String и Х типа Integer. Для преобразования введенной строки в число применим стандартную функцию Val, а для анализа операции преобразования строки в число введем локальную переменную Cod целого типа. После преобразования строки в число проверим значение переменной Cod, если оно не равно 0, то в строке не все символы являются цифрами. Значение Cod укажет позицию первого символа в строке, не являющегося цифрой. В этом случае напечатаем на экране сообщение об ошибке и. укажем позицию неверно введенного символа в строке, после чего прервем работу программы, используя стандартную процедуру Halt.
Получим следующий текст программы:
program Demo_Val_Str;
Var
Sl, S2 : String;
X1, X2 : Integer;
(Процедура ввода строки цифр и преобразования строки в число}
procedure Inp_Str (var S: string; var X:integer);
Var
Cod: Integer; {Результат преобразования строки в число}
begin
Write('Введите строку цифр');
Readln(S) ;
Val(S, X, Cod) ;{Преобразование строки S в целое число X}
if Cod <> 0 then {Если не все символы в строке являются цифрами}
begin
WriteLn('Ошибка! В позиции',Cod,'введенной строки не цифра');
Halt(1); {Прерывание программы}
end ;
end ;
Begin {Начало основной программы}
Inp_Str(Sl,Xl); {Вызов процедуры ввода строки с фактическими параметрами-переменными S1,X1}
Inp_Str(S2,X2); {Вызов процедуры ввода строки с фактическими параметрами-переменными S2,X2}
Writeln('Результат склеивания строк -> ', Concat(Sl,S2));
Writeln('Сумма введенных чисел= ',Х1+Х2) ;
end.
Программа 3. Составить программу, определяющую, является ли введенное слово перевертышем. Перевертышем называется слово, которое одинаково читается как сначала, так и с конца, например: шалаш, казак.
Как видно из определения, для выяснения, является ли слово перевертышем, необходимо сравнивать 1-й и последний символ в строке, 2-й и предпоследний, 3-й и предпредпоследний символ, и т. д. до середины слова. Если в процессе сравнения будет установлено отличие сравниваемых символов, т. е. выясняется, что слово читается слева направо иначе, чем справа налево, значит можно сделать вывод, что это слово не является перевертышем. Если в процессе сравнения не будет выявлено отличие сравниваемых символов, значит это слово — перевертыш. Введем следующие переменные: для хранения слов — Word типа String с максимальным размером слов 30 символов и переменную I целого типа, указывающую номер позиции сравниваемого символа от начала строки.
Текст программы:
program Perev_Word; {Является ли введенное слово перевертышем?}
Var
I : byte;
Word : string[30];
Begin
Write('Введите слово ');
Readln(Word) ;
{Проверяем символы поочередно от начала до середины слова}
for I:=1 to Trunc (Length (Word)/ 2) do
begin
{Если соответствующие символы не одинаковы}
if Word[I]<>Word[Length(Word)-I+1] then
begin
Writein (' Неперевертыи') ;
exit {Выход из цикла и завершение программы, дальше не имеет смысла сравнивать }
end;
end;
Writeln (' Перевертыш');
end.
Программа 4. Составить программу, которая обращает введенное слово, т. е. переставляет символы в слове в обратном порядке, например: Петя — ятеП, мама — амам, про-грамма — аммаргорп.
Алгоритм обращения слова можно представить в виде следующей циклической процедуры обмена соответствующих символов: значение первого символа слова запоминается в некоторой переменной символьного типа Ch, затем на место первого символа записывается значение последнего символа, а на его место записывается значение первого символа, хранимое в переменной Ch, после этого аналогично выполняется обмен второго и предпоследнего символа, третьего и предпредпоследнего и т. д., пока не дойдем до середины слова. Далее обмен продолжать не нужно, иначе символы опять займут прежние места.
Исходя из этих рассуждений, введем следующие переменные: для хранения слова Word типа String с максимальным размером слов 30 символов и переменную I целого типа, указывающую номер позиции сравниваемого символа от начала строки, а также символьную переменную Ch для временного хранения значения символа при обмене.
Текст программы может выглядеть так:
program Obr_Word;
Var
I : byte;
Ch : char;
Word : String[30] ;
Begin
Write(' Введите слово ');
Readln(Word) ;
{Перебирая символы поочередно от начала до середины слова}
for I:=l to Trunc(Length (Word)/2) do
begin {Обмениваем соответствующие символы}
Ch:=Word[I];
Word[I]:=Word[Length(Word)-I+1] ;
Word[Length(Word)-I+1]:=Ch ;
end ;
Write('Получилось слово ',Word) ;
end.
