
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •220301 Автоматизированные системы обработки информации и правления
- •Введение
- •Основные этапы решения задач на эвм
- •Глава 1 способы записи алгоритма
- •1.1 Алгоритм и его свойства
- •Схемы алгоритма
- •1.2 Структуры алгоритмов
- •1.2.1 Алгоритм линейной структуры
- •1.2.2 Алгоритм разветвляющейся структуры
- •1.2.3 Алгоритм циклической структуры
- •1.2.4 Алгоритм со структурой итерационных циклов
- •1.2.5 Алгоритм со структурой вложенных циклов
- •Глава 2 программа на языке высокого уровня
- •2.1 Системы программирования
- •2.2 Характеристика языка программирования Паскаль
- •2.3 Алфавит и структура программы на Паскале Алфавит программы
- •Структура программы
- •Глава 3 Стандартные типы данных
- •3.1 Данные. Типы
- •3.2 Вещественные типы
- •3.3 Целочисленные типы
- •3.4 Символьный тип
- •3.5 Логический тип
- •4 Представление основных структур программирования: итерация, ветвление, повторение
- •4.1 Линейная структура (следование)
- •Var X,y,f: real;
- •4.2 Разветвляющая структура (ветвление)
- •4.3 Циклическая структура (повторение)
- •4.3.1 Оператор цикла с параметром
- •I : Integrer; {номер числа }
- •4.3.2 Оператор цикла с постусловием
- •I,n: integer;
- •4.3.3 Оператор цикла с предусловием
- •4.3.4 Итерационные циклы
- •Var r,a:real;
- •Приближенное вычисление функций
- •Решение уравнений приближенными методами
- •Метод деления отрезка пополам
- •Xsl, Xpr, a, b, e, y1, y2, Lev, Prav, y: Real;
- •Метод Ньютона
- •Метод прохождения отрезка с переменным шагом
- •Вычисление определенных интегралов
- •1. Метод прямоугольников
- •X: Real;
- •2. Метод трапеций
- •X: Real;
- •Глава 5 Типы данных, определяемые пользователем
- •5.1 Пользовательский тип данных
- •5.1.1 Типизированные константы
- •5.1.2 Перечисляемый тип
- •I:1..6; loto: num;
- •5.2 Массивы
- •I : integer;
- •5.2.1. Работа с одномерными массивами
- •I,sum : integer;
- •Var a: array [1..N] of real;
- •Var I,s,r: integer;
- •I : list;
- •I : integer;
- •X : mass;
- •I, j, p, n, m, k:integer;
- •I, j, k, nd : integer;
- •Xmin : real;
- •X : mass;
- •Var I, j, nd : integer;
- •X : mass;
- •5.2.2 Работа с двумерными массивами( матицы)
- •Var I,j,n : integer;
- •I,j,n,m : integer;
- •5.2.3 Сортировка массивов
- •Сортировка методом "пузырька"
- •X : Array [1..Nmax] Of Real;
- •X : Array [1..Nmax] Of Real;
- •Сортировка выбором
- •Обменная сортировка
- •Var m:array[1..1000] of integer;
- •I,z,n:integer; Key:byte;
- •Сортировка слиянием
- •Var { Описание массивов и переменных}
- •X, y: array[1..1000] of integer;
- •5.3 Строковые типы
- •Var s: string[10];
- •5.3.1 Операции над строками
- •5.3.2 Стандартные процедуры и функции для строк
- •Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Роs
- •I, n, p: integer;
- •I: integer;
- •I: integer;
- •Insert (word2, text, I);
- •Insert (chr (k-32), t, I);
- •Insert (chr (k-80), t, I);
- •Insert (‘е’, t, I);
- •Глава 6 Процедуры и функции
- •6.1 Процедуры
- •I : Integer;
- •I, n: integer;
- •Input _ mas (k, n);
- •I,n : Integer;
- •I,k : Integer;
- •6.2 Функции
- •I:Integer;
- •2) Массивы;
- •I,n : Integer;
- •I : Integer;
- •I,tn,tk:Real;
- •Глава 7 Программирование рекурсивных алгоритмов
- •7.1 Понятие рекурсии
- •7.2 Техника построения рекурсивных алгоритмов
- •7.3 Формы рекурсий
- •If Prim(I) then
- •7.4 Рекурсия и итерация
- •7.5 Программирование с использованием рекурсии
- •Var p: Integer;
- •Var X, y: Integer; begin
- •Var z: Real; begin
- •Var I:integer; j:real;
- •Глава 8 Файлы
- •8.1 Текстовые файлы
- •I,n : Integer; {Вспомогательные переменные}
- •8.2 Типизированные файлы
- •X,m,s : Real;
- •8.3 Нетипизированные файлы
- •Глава 9 Записи
- •9.1 Описание записи
- •I: integer;
- •9.2 Оператор присоединения
- •I, j, k, m : integer;
- •X: real;
- •9.3 Вложенные записи
- •9.4 Записи с вариантами
- •Information: record
- •I, k, n : integer;
- •Vedom : Array [1..Nmax] Of Stud;
- •I,j : Integer;
- •Vedom : File Of Stud;
- •Vedom : File Of Stud;
- •I,j,kdv,k2 : Integer;
- •If Not Eof (Ftel) Then
- •If Not Eof(Ftel) then
- •If Not Eof(FilComp) then
- •Глава 10 Динамические структуры данных
- •10.1 Распределение памяти при выполнении программ
- •Верхняя граница памяти ms-dos
- •10.2 Ссылочные переменные
- •10.3 Процедуры управления кучей
- •10.4 Использование переменных ссылочного типа
- •I: Integer;
- •I, k : Integer;
- •Val(b, k, code);{Превратили второй символ в ч исло}
- •10.5 Списки
- •Var Ch : Char;
- •Var Ch : Char;
- •10.6 Деревья
- •10.7 Константы ссылочного типа
- •Глава 11. Язык Паскаль. Графический модуль Graph Список используемой литературы Основная
- •Дополнительная
5.3.2 Стандартные процедуры и функции для строк
Турбо Паскаль представляет в распоряжение пользователя целый ряд функций и процедур, предназначенных для обработки строк.
Функция Length
Встроенная функция Length (длина) позволяет определить фактическую длину текстовой строки, хранящейся в указанной переменной.
Пример.
var
word: string;
begin
write ('Введите, пожалуйста, слово: ');
readln (word);
writeln ('Это слово состоит из ', length(word) : 3, ' букв!')
end.
При подсчете фактической длины строки учитываются все входящие в нее символы, в том числе и пробелы.
Функция Upcase
Функция Upcase позволяет преобразовывать символ любой литеры из строчного в прописной. Эта функция рассчитана на обработку отдельного символа, поэтому для обработки строки символов с помощью этой функции приходится организовывать цикл.
Пример.
var
word : string;
i : byte;
begin
word := 'Фирма Microsoft';
for i := 1 to length (word) do
word [i] := upcase (word[i]);
writeln (word); {Выводится текст " фирма MICROSOFT"}
end.
Русские литеры не могут обрабатываться этой функцией, поэтому в результате работы этой программы на терминал выдается строка, содержащая большие английские и маленькие русские буквы.
Функция Copy
Функция Copy позволяет копировать фрагмент некоторой строки из одной переменной в другую. Вызывая функцию copy, необходимо указывать следующие параметры:
имя строки, из которой должен извлекаться копируемый фрагмент;
позицию в строке, начиная с которой будет копироваться фрагмент;
число копируемых символов.
Пример.
var
ws: string [79];
w1,w2,w3 : string [20];
begin
ws := 'фотографирование';
w1 := copy (ws, 1, 4); writeln (w1);
w2 := copy (ws, 5, 4); writeln (w2);
w3 := copy (ws, 10, 3); writeln (w3);
end.
В результате выполнения программы на экран выводится:
фото
граф
ров
Сообщения об ошибке не будет в случаях, если начальная или конечная позиции копируемого фрагмента находятся вне пределов исходной строки символов. Результатом выполнения операции в первом случае будет строка нулевой длины, во втором - фрагмент от начальной позиции копирования до конца исходной строки.
Функция Роs
С помощью функции Pos осуществляется поиск определенного фрагмента в строке. Если заданный фрагмент в строке присутствует, то функция возвращает номер позиции в строке, с которой фрагмент начинается. Если в строке фрагмент не найден, то функция возвращает ноль.
var
ws string [79];
sw string [20];
p : byte;
begin
ws := 'Электрификация';
sw := 'Эл'; p := Pos (sw,ws); writeln(p);
sw := 'три'; p := Pos (sw,ws); writeln(p);
sw := 'к'; p := Pos (sw,ws); writeln(p);
end.
В результате выполнения программы на экране появляется:
1
5
4
Функция Pos требует полного совпадения искомого фрагмента и фрагмента строки, в которой производится поиск. Большие и маленькие буквы считаются различными символами.
Процедура Delete
Удаление из строки. Для этого используется процедура Delete (Str,n,t), которая вырезает из строки Str t символов, начиная с n-го, таким образом сама строка изменяется.
Пример: Дан фрагмент программы:
Strl:='ABCDEFGH':
Delete(Strl, 3, 4);
Wrlteln(Strl);
После выполнения этих операторов из строки будут удалены четыре символа, начиная с третьего, то есть строка будет такой: Strl='ABGH'.
Процедура Insert
Вставка подстроки в строку. Это можно сделать, применяя процедуру Insert(Strl,Str2,n) — вставка строки Str1 в строку Str2, начиная с n-го символа, при этом первая строка остается такой же, как и была, а вторая получает новое значение.
Пример:
Strl:='ABCDEFGH';
Str2:='abcdefgh';
Insert(Strl, Str2, 3);
В результате выполнения данной процедуры строка будет такой — Str2=’abABCDEFGHcdefgh’. Этот же результат будет и после выполнения такой последовательности операторов:
Str2:='abcdefgh';
Insert('ABCDEFGH', Str2, 3);
Числа и строки
Надо заметить, что число 13 и строка ‘43' — это не одно и то же. Для работы с числами и строками применяются две процедуры.
Str(N,Strl) — переводит числовое значение N в строковое и присваивает результат строке Strl, причем можно переводить как целые числа, так и вещественные.
Пример:
Str(1234, Strl) - после выполнения Strl='1234';
Str(452.567,Strl) — переводим вещественное число в нестандартном виде, результат Strl='452.567';
Str(4.52567e-st-2,Strl) — переводим вещественное число в стандартном виде, в итоге:
Strl='4.52567e+2'.
Вторая процедура выполняет обратное действие. Val(Str, N, К) — переводит строковое значение в числовое, если данная строка действительно является записью числа (целого или вещественного), то значение к=0, а N — это число, иначе К будет равно номеру символа, в котором встречается первое нарушение записи числа N.
Пример 5.19 Ввести в ЭВМ строку символов. Количество символов в строке (n <40). Вывести встречающиеся в ней символы без повторов и количество этих символов.
Решение задачи сводится к следующему. Каждый символ строки сравнивается со всеми остальными, находящимися после него. Если данный элемент имеет номер i, то следующий – i+1 и т.д., до конца. При этом i изменяется от 1 до n-1. Если в результате сравнения окажется, что анализируемый символ встречается в правой части строки, то он не уникальный. Пока его можно не выводить, он будет выведен потом. Если i-тый элемент не равен ни одному из последующих, то он уникальный и его нужно вывести.
Например для строки 'АВВСА' уникальные символы будут выведены в следующем порядке: ВСА
Program Unicum;
var
s : string;
n, i, j, k, kols : integer;
begin
writeln('Введите строку');
readln(s);
n:=length(s);
kols:=0;
writeln('Символы строки без повторов ');
for i:=1 to n-1 do
begin
k:=0;
for j:=i+1 to n do {п.4.2}
if s[i]=s[j] then
k:=k+1;
if k=0 then
begin
kols:=kols+1;
write(s[i]:2);
end;
end;
writeln('Количество различных символов в строке - ',kols);
writeln('Работа окончена. Нажмите клавишу ENTER');
readln;
end.
Пример 5.20 Ввести в ЭВМ строку из n символов латинского алфавита (n<30). Расположить их по алфавиту.
Воспользуемся тем, что буквы латинского алфавита 'A' – 'Z', 'a' –'z' имеют коды, значения которых возрастают. При этом для решения задачи можно применять алгоритм сортировки "пузырьком".
Program Sorts;
var
s : string;
sr : char;
n, i, k : integer;
Begin
writeln('Введите строку');
readln(s);
n := length(s);
for k := 1 to n-1 do
for i := 1 to n-k do
if s[i]>s[i+1]then
begin
sr :=s[i];
s[i] := s[i+1];
s[i+1] := sr;
end;
writeln('Строка с упорядоченными символами:');
writeln(s);
End.
Пример 5.21 Задана последовательность символов S1 … Sn Подсчитать количество "!" знаков. Ввод каждого символа завершается ENTER.
Program pod;
var
s: array [1…100] of char;
p, i, n: integer;
begin
readln (n);
for i:=1 to n do
readln (s[i]);
for i:=1 to n do
if s[i]= '!' then p:=p+1;
writeln (p);
end.
Пример 5.22 Задана последовательность символов S1…Sn Подсчитать сколько цифр (09) в этой последовательности.
Program pod1;
var;
s: array [1…100] of char;