Базовые алгоритмические структуры

ПРИБРЕЖНЕНСКИЙ АГРАРНЫЙ КОЛЛЕДЖ (ФИЛИАЛ)

ПРИМЕРЫ ПРОГРАММ НА ЯЗЫКЕ FREE PASCAL

МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ ВЫПОЛНЕНИЯ
САМОСТОЯТЕЛЬНЫХ РАБОТ

ПО ДИСЦИПЛИНЕ «ОСНОВЫ ПРОГРАММИРОВАНИЯ
И БАЗ ДАННЫХ»

для студентов специальности: 09.02.02 Компьютерные сети

Курс

Составил преподаватель: Дубик Н.А.

Рассмотрено и одобрено цикловой комиссией общетехнических и специальных дисциплин

протокол № ____ от «___» ____________ 2016 г.

Председатель цикловой комиссии

_______________________

Ю.Ф. Тулова

Прибрежное, 2016

Дубик Н.А.

Примеры программ на языке Free Pascal. Методические указания для выполнения самостоятельных работ по дисциплине «Основы программирования и баз данных». – Прибрежное: Прибрежн. аграрн. колледж (ФГАОУ ВО «Крымский федеральный университет им. В.И. Вернадского» (филиал), 2016.

Пособие содержит исходные тексты программ на языке Free Pascal, рассматриваемые на теоретических и практических занятиях по дисциплине «Основы программирования и баз данных». Многие программы сопровождаются комментариями, позволяющими изучить приемы программирования или уяснить алгоритмы выполнения задач.

Пособие может быть использовано в учебном процессе при изучении дисциплины ««Основы программирования и баз данных».

© Дубик Н.А., 2016

© Прибрежненский аграрный колледж, 2016

Содержание

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА.. 5

ПЕРЕЧЕНЬ ТЕМ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ.. 6

1. Основы алгоритмизации. 7

Базовые алгоритмические структуры.. 7

Базовая структура «Следование». 7

Пример: Обмен значениями двух переменных. 7

Пример: вычисление сложного выражения. 8

Базовая структура «Ветвление». 8

Циклы.. 10

Пример: Алгоритм вычисления наибольшего общего делителя. 11

2. Базовые понятия языка программирования Pascal 13

Простейшие программы.. 13

Вычисление площади трапеции. 13

Операторы ветвления и выбора. 13

Условный оператор: пример вычисления значения функции. 13

Оператор выбора: пример определения числа дней в месяце. 14

Вычисление дня недели по дате. 14

Операторы цикла. 15

Цикл с предусловием: Программа вычисления наибольшего общего делителя 15

Цикл с постусловием: программа определяет, является ли число простым 16

Цикл в постусловием: наименьшее положительное из введенных чисел 17

Цикл со счетчиком (с параметром): пример вывода таблицы значений 17

Вывод кодов латинских и русских букв. 18

Пример использования процедуры break для прерывания выполнения цикла 19

Цикл с параметром: пример вычисления суммы ряда. 19

3. Процедуры и функции. 20

Пример процедуры без параметров: сокращение дроби. 20

Сокращение дроби: пример процедуры с параметрами. 21

Пример процедуры с передачей параметра по ссылке: вычисление периметра треугольника по координатам его вершин. 21

Пример функции: вычисление периметра треугольника. 22

Пример: Вычисление действительной степени числа. 22

Решение нелинейных уравнений методом половинного деления. 23

Шифрование сообщения методом Цезаря. 24

4. Работа с массивами. 26

Заполнение массива случайными числами. 26

Определение максимального элемента массива и его индекса. 26

Сортировка массивов. 27

Сортировка массивов методом обменов (пузырька) 27

Сортировка методом пузырька с флагом.. 29

Алгоритм сортировки выбором.. 30

Обработка двумерных массивов. 32

Примеры к занятиям.. 32

Обработка строк. 34

Во введенной строке удалить все символы, стоящие на нечетных местах 34

Пример: вывести символы между первым и вторым многоточиями. 34

Замена первого вхождения подстроки другой подстрокой. 35

Записать строку в обратном порядке. 36

Изменение строки: пример использования стандартных функций. 36

5. Работа с файлами. 38

Простейший пример работы с текстовым файлом.. 38

Пример работы с типизированным файлом.. 38

Рекомендуемая литература. 39

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Материалы для самостоятельной работы составлены в соответствии с рабочей программой дисциплины «Основы программирования и баз данных» для специальности 09.02.02 Компьютерные сети.

Самостоятельные работы по дисциплине «Основы программирования и баз данных» предназначены для закрепления обучающимися практических навыков программирования на языке Pascal. Основу материалов составляют тексты программ, демонстрирующие основные понятия программирования на языке Pascal. Тексты программ проверены с использованием среды программирования Free Pascal.

Контроль освоения материалов производится путем опросов во время аудиторных занятий.

ПЕРЕЧЕНЬ ТЕМ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

№ п/п Название темы К-во часов
Раздел 1. Системы и технологии структурного программирования
Примеры блок-схем линейных алгоритмов
Изучение примеров и самостоятельное составление программ с использованием управляющих структур
Изучение примеров и самостоятельное составление программ с использованием процедур и функций
Изучение примеров и самостоятельное составление программ с использованием методов сортировки массивов
Изучение примеров и самостоятельное составление программ с использованием обработки строк
ВСЕГО по разделу «Системы и технологии структурного программирования»

Основы алгоритмизации

Пример: Обмен значениями двух переменных

Во множестве алгоритмов и программ требуется поменять местами значения двух переменных. Для этого чаще всего используют вспомогательную переменную. Блок-схема алгоритма приведена на рисунке 2. Настоятельно рекомендуется изучить эту блок-схему, так как на практических занятиях подобная задача будет неоднократно встречаться. Значения переменных после выполнения каждого блока алгоритма приведены в таблице.

начало
Базовые алгоритмические структуры - student2.ru
Базовые алгоритмические структуры - student2.ru
Базовые алгоритмические структуры - student2.ru
конец

Рис. 1.2. Блок-схема алгоритма обмена значений переменных

Обмен значениями можно производить и без использования промежуточной переменной. Блок-схема алгоритма приведена на рис. 1.3.

начало
Базовые алгоритмические структуры - student2.ru
Базовые алгоритмические структуры - student2.ru
Базовые алгоритмические структуры - student2.ru
конец

Рис. 1.3. Блок-схема алгоритма обмена значений без использования промежуточной переменной

Пример: вычисление сложного выражения

Рассмотрим структуру «следование» на примере вычисления сложного выражения. Большие, сложные выражения при вычислении их значений рекомендуется разбивать на части с целью упрощения отладки программы и получения конечного результата. Составим алгоритм вычисления выражения: Базовые алгоритмические структуры - student2.ru Постановка задачи: Даны Базовые алгоритмические структуры - student2.ru . Вычислить y. Разобьем выражение на части. Для этого введем следующие обозначения: Базовые алгоритмические структуры - student2.ru С учетом введенных обозначений вычисляемое выражение примет вид: Базовые алгоритмические структуры - student2.ru Блок-схема алгоритма решения задания приведена на рис. 1. 4. Следует отметить, что в данном примере не анализировалась область допустимых значений выражения. Базовые алгоритмические структуры - student2.ru Рис. 1.4

Циклы

Пример цикла с предусловием

Найти среднее из нескольких введенных положительных чисел. Окончание ввода – число 0.

Упрощенная блок-схема алгоритма приведена на рис. 1.7.

x > 0
начало
ввод x
S = 0 N = 0 a = 0
S = S + x N = N + 1
a = S / N
вывод a
конец
нет
да

Рис. 1.7. Пример цикла с предусловием

Пример цикла с параметром

Вычислить сумму Базовые алгоритмические структуры - student2.ru

Блок-схема приведена на рисунке 1.8. Для наглядности блоки ввода данных не показаны.

начало
S:=0
i:=1; N (1)
S=S+1./i
вывод S
конец

Рис. 1.8. Пример цикла с параметром

Пример: Алгоритм вычисления наибольшего общего делителя

Записать алгоритм нахождения наибольшего общего делителя (НОД) двух натуральных чисел. Используем алгоритм Эвклида и представим алгоритм как в словесной форме, так и в виде блок-схемы. Словесное представление алгоритма имеет вид: 1. задать два числа; 2. если числа равны, то взять любое из них в качестве ответа и остановиться, в противном случае продолжить выполнение алгоритма; 3. определить большее из чисел; 4. заменить большее из чисел разностью большего и меньшего из чисел; 5. повторить алгоритм с шага 2.   Базовые алгоритмические структуры - student2.ru Рис. 1.9.

Блок-схема алгоритма приведена на рисунке 1.9. Описанный алгоритм применим к любым натуральным числам и должен приводить к решению поставленной задачи. Убедитесь в этом самостоятельно, определив с помощью алгоритма наибольший общий делитель чисел 125 и 75.

Простейшие программы

Вычисление площади трапеции

Пример демонстрирует структуру простейшей программы на языке Pascal. Как известно, площадь трапеции равна произведению полусуммы оснований на высоту трапеции.

В разделе описаний объявлено 4 переменных: длины оснований, высота трапеции и переменная S, в которой будет храниться рассчитанная площадь. В разделе операторов выполняется расчет и вывод результата на экран.

program ex02_1;

{ составить программу расчета площади трапеции }

var

a, b: real; { основания трапеции }

h: real; { высота }

S: real; { площадь }

begin

write('введите через пробел основания трапеции: ');

readln(a, b);

write('введите высоту трапеции: ');

readln(h);

S:=(a+b)*h/2;

writeln('Площадь трапеции равна ',S:8:4);

writeln('нажмите Enter...');

readln;

end.

Операторы цикла

Пример использования процедуры break для прерывания выполнения цикла

Вычислить сумму положительных значений синуса.

Так как для отрицательных значений аргумента суммирование не требуется, то в этом случае тело цикла дальше не выполняется и происходит переход к следующей итерации.

program ex02_09;

var

i: integer; s: real;

BEGIN

s:=0;

FOR i:=1 to 20 do BEGIN

{ Если sin(i)<0 - дальше не выполнять, вернуться к for }

IF sin(i)<0 then break;

s:=s + sin(i);

writeln('sin(',i,')= ', sin(i):12:9);

END;

writeln('Сумма равна: ', s);

readln;

END.

Цикл с параметром: пример вычисления суммы ряда

Вычислить сумму S= 1 + 1/3 + 1/5 + ... для n слагаемых.

Как следует из задания, каждое слагаемое вычисляется по формуле: 1/(2i +1), где i – номер слагаемого от 0 до n. Тогда программа может иметь вид:

program ex02_10;

{ вычислить сумму S = 1 + 1/3 +1/5 . . . }

{ для N слагаемых }

var

i, n: integer;

s: double;

begin

writeln('введите число слагаемых:');

readln(n);

s:=0.0;

for i:=0 to n do begin

s:=s + 1/(2.0*i + 1);

end;

writeln('сумма равна: ',s:10:5);

readln;

end.

Процедуры и функции

Пример процедуры без параметров: сокращение дроби

Чтобы сократить дробь, необходимо найти наибольший общий делитель числителя и знаменателя. Для этого используется процедура NOD. В программе определена глобальная переменная m, значение которой изменяется в подпрограмме.

Для вычисления НОД используем простейшую процедуру без параметров. Ниже приводится текст программы с использованием такой процедуры:

program ex03_01;

{ сокращение дроби: используется процедура вычисления }

{ наибольшего общего делителя без параметров }

var

nom, denom, m: integer;

procedure NOD;

var a,b: integer;

begin

a:=nom; b:=denom; // сохранение параметров;

while a <> b do

if a > b then a := a - b else b := b - a;

m:= a;

end;

begin // головная программа

writeln('введите числитель и знаменатель:');

readln(nom, denom);

NOD; // вызов процедуры

nom:=nom div m; denom:=denom div m;

writeln('результат: ', nom, '/',denom);

readln;

end.

Обратите внимание: как и у головной программы, у процедуры есть заголовок, раздел описаний и раздел операторов. Процедура объявлена до начала вызывающей – в данном случае головной – программы.

В данном примере в подпрограмме описаны две переменные a и b. Это – локальные переменные, они доступны только операторам внутри процедуры. В головной же программе описаны переменные nom, denom и m. Это – глобальные данные.

Процедура NOK вначале присваивает своим (локальным) переменным a и b значения переменных nom и denom. Так как nom и denom объявлены в головной программе, то они доступны подпрограмме. Результат работы процедуры присваивается переменной m. Эта переменная тоже объявлена как глобальная. Таким образом, обмен информацией между подпрограммой и процедурой без параметром происходит через глобальные переменные.

Сокращение дроби: пример процедуры с параметрами

Создадим еще одну программу сокращения дроби. На этот раз используем процедуру, которая имеет два параметра – два целых числа. Алгоритм вычислений такой же, как и в предыдущем примере.

program ex03_02;

{ сокращение дроби: используется процедура вычисления}

{ наибольшего общего делителя с параметрами }

var

nom, denom, m: integer;

procedure NOD(a,b:integer);

begin

while a <> b do

if a > b then a := a - b else b := b - a;

m:= a;

end;

begin // головная программа

writeln('введите числитель и знаменатель:');

readln(nom, denom);

NOD(nom, denom); // вызов процедуры

nom:=nom div m; denom:=denom div m;

writeln('результат: ', nom, '/',denom);

readln;

end.

Пример процедуры с передачей параметра по ссылке: вычисление периметра треугольника по координатам его вершин

Пусть, например, требуется вычислить периметр треугольника по координатам его точек. Как уже говорилось, при этом потребуется трижды вычислить расстояние между точками треугольника. Создадим процедуру dist, в которой будут производиться эти вычисления.

Program ex03_03;

{вычисление периметра треугольника }

var

x1,y1,x2,y2,x3,y3:real; { координаты точек }

d1,d2,d3:real; { расстояния – длины сторон }

procedure dist(xx1,yy1,xx2,yy2:real; var d:real);

begin

d:=sqrt(sqr(xx2-xx1)+sqr(yy2-yy1));

end;

begin { ГОЛОВНАЯ ПРОГРАММА }

write('Введите координаты первой вершины:');

readln(x1,y1);

write('Введите координаты второй вершины:');

readln(x2,y2);

write('Введите координаты третьей вершины:');

readln(x3,y3);

dist(x1,y1,x2,y2,d1);

dist(x2,y2,x3,y3,d2);

dist(x1,y1,x3,y3,d3);

writeln ('Периметр треугольника равен',d1+d2+d3);

end.

В процедуре dist параметры x1, x2, y1, y2 передаются по значению, а параметр d – по ссылке. Это означает, что вычисленное значение d изменится и в вызывающей программе.

Пример функции: вычисление периметра треугольника

Рассмотрим снова программу вычисления периметра треугольника, но теперь создадим функцию вычисления расстояния:

Program ex03_04;{вычисление периметра треугольника}

{ используется функция }

var x1,y1,x2,y2,x3,y3,d1,d2,d3:real;

function dist(xx1,yy1,xx2,yy2:real):real;

begin

dist:=sqrt(sqr(xx2-xx1)+sqr(yy2-yy1));

end;

begin

write('Введите координаты первой вершины, через пробел:');

readln(x1,y1);

write('Введите координаты второй вершины:');

readln(x2,y2);

write('Введите координаты третьей вершины:');

readln(x3,y3);

d1:=dist(x1,y1,x2,y2);

d2:=dist(x2,y2,x3,y3);

d3:=dist(x1,y1,x3,y3);

writeln ('Периметр треугольника равен',(d1+d2+d3):10:5);

end.

В подобных случаях использование функций предпочтительнее использования процедур.

Пример: Вычисление действительной степени числа

В языке Pascal нет стандартной функции возведения действительного числа в степень с действительным показателем.

При необходимости программисты используют следующий прием. Как известно, логарифм степени равен произведению логарифма числа на показатель степени:

Базовые алгоритмические структуры - student2.ru

С другой стороны, основное логарифмическое тождество имеет вид:

Базовые алгоритмические структуры - student2.ru

Для конкретности используем натуральные логарифмы. Тогда

Базовые алгоритмические структуры - student2.ru

Ниже приведен пример функции возведения числа в действительную степень и программы, использующей эту функцию.

program pow;

{ возведение числа в действительную степень }

function power(x,b: double):double;

begin

power:=exp(b*ln(x));

end;

var y,a,p: double;

begin

write('a, p: '); readln(a,p);

y:=Power(a,p);

writeln('y= ',y:10:4);

readln;

end.

Пример работы программы: вычисление 20,5:

a, p: 2 0.5

y= 1.4142

Работа с массивами

Сортировка массивов

Сортировка массивов методом обменов (пузырька)

Для наглядности и возможности самостоятельно ознакомиться с этим методом сортировки в программе предусмотрен вывод массива после каждого прохода.

Идея метода состоит в сравнении двух соседних элементов, в результате чего меньшее число (более легкий "пузырек") перемещается на одну позицию влево.

Обычно просмотр организуют с конца, и после первого прохода самое маленькое число перемещается на первое место. Затем все повторяется от конца массива до второго элемента и т.д.

При использовании этого алгоритма весь массив просматривается несколько раз подряд.

При каждом таком просмотре сравниваются последовательно только соседние элементы массива. Если при сравнении окажется, что предыдущий элемент больше следующего, они меняются местами описанным выше способом. Так в результате одного последовательного просмотра элементы, значение которых больше, "всплывают" образно говоря на поверхность, т.е. ближе к концу массива. Если провести такой последовательный просмотр массива несколько раз, то "тяжёлые" элементы окончательно "всплывут" и массив окажется отсортированным.

Ниже приведен пример программы. Для наглядности после каждого обмена на экран выводится текущее состояние массива. Красным цветом выделена собственно сортировка .

Program ex04_03;

{ ex25_01 сортировка массива методом пузырька }

{ с выводом после каждого прохода, проходы - с конца }

const

N = 10; { размер массива }

Var

i, j, buf, k: integer; { счетчики и буфер обмена }

a: array[1..10] of integer;

begin

{ ввод массива }

for i:=1 to N do begin

write('a[',i,']= '); readln(a[i]);

end;

{ контрольный вывод массива }

writeln('исходный массив:');

for i:=1 to N do write(a[i]:5); writeln;

{ сортировка, проходы - с конца массива }

writeln('сортировка:');

for i:=1 to N do begin

for j:=N-1 downto i do

if a[j]>a[j+1] then begin

buf:=a[j]; a[j]:=a[j+1]; a[j+1]:=buf;

end;

{ вывод массива – для демонстрации }

for k:=1 to N do write(a[k]:5);

writeln;

end;

{ итоговый вывод массива }

writeln('отсортированный массив:');

for i:=1 to N do write(a[i]:5); writeln;

readln;

end.

Результат работы программы:

исходный массив:

7 5 1 2 9 6 4 1 3 8

сортировка:

1 7 5 1 2 9 6 4 3 8

1 1 7 5 2 3 9 6 4 8

1 1 2 7 5 3 4 9 6 8

1 1 2 3 7 5 4 6 9 8

1 1 2 3 4 7 5 6 8 9

1 1 2 3 4 5 7 6 8 9

1 1 2 3 4 5 6 7 8 9

1 1 2 3 4 5 6 7 8 9

1 1 2 3 4 5 6 7 8 9

1 1 2 3 4 5 6 7 8 9

отсортированный массив:

1 1 2 3 4 5 6 7 8 9

Алгоритм сортировки выбором

Очевидно, что первое место в массиве должен занять минимальный элемент массива, второе - наименьший из всех остальных, третий - наименьший из оставшихся и т.д.

Для этого необходимо выполнить следующую последовательность действий:

1. Определить минимальный элемент массива;

2. Поменять его местами с первым элементом;

3. Определить минимальный элемент среди оставшихся;

4. Поменять его местами со вторым элементом и т.д.;

Эта последовательность действий должна выполняться до тех пор, пока не будет определён последний минимальный элемент.

Всю операцию по упорядочиванию массива можно разбить на более простые задачи.

Вспомогательная – ввод массива. Пока ввод массива осуществим с клавиатуры:

{ ввод массива }

for k:=1 to N do begin

write('a[',k,']= '); readln(a[k]);

end;

Для контроля введенных значений рекомендуется вывести массив на экран.

Первая задача – поиск минимального элемента. При этом важно запомнить не столько само значение минимального элемента, сколько его номер (индекс):

num:=i;

for j:=i+1 to N do

if a[j]<a[num] then num:=j;

Вторая – поменять местами минимальный элемент с i-ым (очередным):

{ меняем местами a[num] и a[i] }

buf:=a[i]; a[i]:=a[num]; a[num]:=buf;

В приведенном ниже примере для наглядности после каждого обмена на экран также выводится текущее состояние массива.

Program ex04_04;

{ ex25_04 сортировка массива методом выбора }

{ с выводом массива после каждого прохода }

const

N = 10; { размер массива }

Var

a: array[1..N] of integer;

i: integer; { счетчик }

num: integer;{ номер минимального эл-та в части от i до N }

j: integer; { номер эл-та, сравниваемого с минимальным }

buf: integer;{ буфер для обмена значениями }

k: integer; { счетчик для ввода/вывода массива }

begin

{ ввод массива }

for k:=1 to N do begin

write('a[',k,']= '); readln(a[k]);

end;

writeln('исходный массив:');

for k:=1 to N do write(a[k]:5); writeln;

{ сортировка }

writeln('сортировка');

for i:=1 to N-1 do begin

{ ищем минимальный элемент в части от i до N }

num:=i;

for j:=i+1 to N do

if a[j]<a[num] then num:=j;

{ меняем местами a[num] и a[i] }

buf:=a[i]; a[i]:=a[num]; a[num]:=buf;

{ вывод промежуточного состояния массива }

for k:=1 to N do write(a[k]:5); writeln;

end;

writeln('отсортированный массив:');

for k:=1 to N do write(a[k]:5); writeln;

readln;

end.

Результат работы програмы:

исходный массив:

7 5 1 2 9 6 4 1 3 8

сортировка

1 5 7 2 9 6 4 1 3 8

1 1 7 2 9 6 4 5 3 8

1 1 2 7 9 6 4 5 3 8

1 1 2 3 9 6 4 5 7 8

1 1 2 3 4 6 9 5 7 8

1 1 2 3 4 5 9 6 7 8

1 1 2 3 4 5 6 9 7 8

1 1 2 3 4 5 6 7 9 8

1 1 2 3 4 5 6 7 8 9

отсортированный массив:

1 1 2 3 4 5 6 7 8 9

Описанные методы сортировки массивов можно применять как для сортировки массивов по возрастанию, так и для сортировки массивов по убыванию. Для этого просто необходимо определять не минимальный элемент массива, а максимальный. В тексте программы это выражается заменой в некоторых местах знака "<" на знак ">".

Примеры к занятиям

источник: http://wecherkina.ru/

Описание массива в разделе переменных:

const

M = 4; //количество строк

N = 5; //количество столбцов

var

a: array [1..M, 1..N] of integer;

Заполнение массива с клавиатуры и вывод на экран в виде матрицы:

writeln ('Введите M?N чисел: ');

//заполнение массива с клавиатуры

for i := 1 to M do

for j := 1 to N do read (a[i,j]);

//вывод массива на экран

for i := 1 to M do begin

for j := 1 to N do write (a[i,j]:5);

Writeln;

end;

Заполнение массива генератором случайных чисел и вывод на экран в виде матрицы:

randomize;

for i := 1 to M do begin

for j := 1 to N do begin

//заполнение элементов массива случайными числами

a[i,j]:=Random(10);

write (a[i,j]:5); //вывод элемента на экран

end;

writeln;

end;

Подсчёт суммы элементов массива и вывод результата на экран:

S:=0; //обнуляем сумму

//через циклы производим суммирование всех элементов матрицы

for i := 1 to M do

for j := 1 to N do S := S+a[i,j];

writeln('S= ',S); //выводим результат суммы на экран

Подсчёт суммы элементов каждой строки матрицы и вывод результата на экран:

for i := 1 to M do begin

S := 0; //обнуляем сумму

for j := 1 to N do begin

S := S + a[i,j]; //находим сумму элементов строки

end;

writeln('S = ',S); //выводим результат суммы на экран

end;

Подсчёт суммы элементов каждого столбца матрицы и вывод результата на экран:

for j := 1 to N do begin

S := 0; //обнуляем сумму

for i := 1 to M do begin

S := S + a[i,j]; //находим сумму элементов строки

end;

writeln('S = ',S); //выводим результат суммы на экран

end;

Блок заполнения элементов главной диагонали массива (матрицы):

for i:=1 to N do a[i,i] := 1;

или

for i := 1 to N do

for j := 1 to N do if i = j then a[i,j] := 1;

Блок заполнения элементов над главной диагональю массива (матрицы):

for i := 1 to N-1 do

for j := i+1 to N do a[i,j] := 2;

или

for i := 1 to N do

for j := 1 to N do if i < j then a[i,j] := 2;

Блок заполнения элементов под главной диагональю массива (матрицы):

for i := 2 to N do

for j := l to i-1 do a[i,j] := 3;

или

for i := 1 to N do for j := 1 to N do

if i > j then a[i,j] := 3;

Блок заполнения элементов побочной диагонали массива (матрицы):

for i := 1 to N do A[i,N-i+1] := 4;

или

for i := 1 to N do

for j := 1 to N do

if i+j = n+1 then a[i,j] := 4;

Блок заполнения элементов над побочной диагональю массива (матрицы):

for i := 1 to N-1 do

for j := l to N-i do A[i,j] := 5;

или

for i := 1 to N do

for j := 1 to N do

if i+j &lt; n+1 then a[i,j] := 5;

Блок заполнения элементов под побочной диагональю массива (матрицы):

for i := 2 to N do

for j := N downto N-(i-2) do A[i,j] := 6;

или

for i := 1 to N do

for j := 1 to N do

if i+j > n+1 then a[i,j] := 6;

Обработка строк

Следует также изучить пример «Шифрование шифром Цезаря», рассмотренный ранее.

Пример: вывести символы между первым и вторым многоточиями

Задание можно решить разными способами: 1) с использованием встроенных функций обработки строк; 2) просматривая строку как массив символов. Ниже приводится вариант решения с использованием встроенных функций.

Для надежности сохраним исходную строку и скопируем содержимое исходной строки в новую строку s2. Вначале определяется позиция первого двоеточия pos1 (функция Pos). Если pos1=0, то в строке нет двоеточий и работа программы прекращается. Далее удаляем из строки pos1 символов и снова ищем позицию двоеточия (pos2). Если pos2=0, то в строке только одно двоеточие и работа программы прекращается. Если второе двоеточие есть, то в результат записываем (pos2-1) символов, начиная с pos1+1.

program ex04_06;

{ вывести символы между первым и вторым многоточиями }

{ вариант 1 - с использованием встроенных функций }

var

str1, str2: string;

pos1, pos2: integer;

len, i: integer;

begin

writeln('введите строку:'); readln(str1);

pos1:=pos(':',str1);

str2:=str1;

delete(str2,1,pos1);

pos2:=pos(':',str2);

if pos1=0 then writeln('строка не содержит двоеточий!')

else

if pos2=0 then writeln('строка содержит только одно многоточие')

else str2:=copy(str1,pos1+1,pos2-1);

writeln(str2);

readln;

end.

Результат работы программы:

введите строку:

root:314159:/bin/bash

Работа с файлами

Простейший пример работы с текстовым файлом

В приведенном ниже примере создается текстовый файл с именем «test.txt», в который записываются введенные с клавиатуры строки. Программа заканчивает работу после ввода пустой строки.

program ex05_01;

{ пример работы с текстовым файлом }

var

a: string;

f: text;

begin

Assign(f,'test.txt');

Rewrite(f);

repeat

readln(a);

writeln(f,a);

until length(a)=0;

Close(f);

end.

Так как создавался текстовый файл, то его содержимое можно просмотреть в любом редакторе типа «Блокнот».

Пример работы с типизированным файлом

В приведенном ниже примере вначале производится запись целых чисел в файл test2.dat, а затем для контроля выполняется чтение из этого файла.

program ex05_02;

{ пример работы с файлом чисел integer }

var

i, a: integer;

f: file of integer;

begin

Assign(f,'test2.dat');

{ запись данных в файл }

Rewrite(f);

for i:=1 to 10 do begin

readln(a);

write(f,a);

end;

Close(f);

{ чтение из файла }

Reset(f);

while not eof(f) do begin

read(f,a);

write(a:7);

end;

writeln;

Close(f);

end.

Рекомендуемая литература

До сих пор подавляющее большинство учебников описывают язык программирования Turbo Pascal, хотя среда Turbo Pascal не работает на современных 64-разрядных операционных системах. Однако создатели Free Pascal сознательно создавали интерфейс максимально походим на интерфейс Turbo Pascal, а в опциях программы возможно задать совместимость с Turbo Pascal.

Поэтому практически все учебники по языку Pascal пригодны и для изучения Free Pascal. Приведенные ниже два учебника позволяют ознакомиться с возможностями Free Pascal, отсутствующими в Turbo Pascal.

1. Кетков, Ю. Л. Свободное программное обеспечение. FREE PASCAL для студентов и школьников/ Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM

2. Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus. - Донецк.: ДонНТУ, Технопарк ДонНТУ УНИТЕХ, 2011. - 503 с.

Значительное количество примеров и заданий для самостоятельной работы содержится в книгах:

3. Культин Н. Turbo Pascal в задачах и примерах. – СПб.: БXB-Петep6ypr, 2006. – 256 c.

4. Павловская Т.А. Паскаль. Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2007. – 339 с.

ПРИБРЕЖНЕНСКИЙ АГРАРНЫЙ КОЛЛЕДЖ (ФИЛИАЛ)

ПРИМЕРЫ ПРОГРАММ НА ЯЗЫКЕ FREE PASCAL

МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ ВЫПОЛНЕНИЯ
САМОСТОЯТЕЛЬНЫХ РАБОТ

ПО ДИСЦИПЛИНЕ «ОСНОВЫ ПРОГРАММИРОВАНИЯ
И БАЗ ДАННЫХ»

для студентов специальности: 09.02.02 Компьютерные сети

Курс

Составил преподаватель: Дубик Н.А.

Рассмотрено и одобрено цикловой комиссией общетехнических и специальных дисциплин

протокол № ____ от «___» ____________ 2016 г.

Председатель цикловой комиссии

_______________________

Ю.Ф. Тулова

Прибрежное, 2016

Дубик Н.А.

Примеры программ на языке Free Pascal. Методические указания для выполнения самостоятельных работ по дисциплине «Основы программирования и баз данных». – Прибрежное: Прибрежн. аграрн. колледж (ФГАОУ ВО «Крымский федеральный университет им. В.И. Вернадского» (филиал), 2016.

Пособие содержит исходные тексты программ на языке Free Pascal, рассматриваемые на теоретических и практических занятиях по дисциплине «Основы программирования и баз данных». Многие программы сопровождаются комментариями, позволяющими изучить приемы программирования или уяснить алгоритмы выполнения задач.

Пособие может быть использовано в учебном процессе при изучении дисциплины ««Основы программирования и баз данных».

© Дубик Н.А., 2016

© Прибрежненский аграрный колледж, 2016

Содержание

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА.. 5

ПЕРЕЧЕНЬ ТЕМ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ.. 6

1. Основы алгоритмизации. 7

Базовые алгоритмические структуры.. 7

Базовая структура «Следование». 7

Пример: Обмен значениями двух переменных. 7

Пример: вычисление сложного выражения. 8

Базовая структура «Ветвление». 8

Циклы.. 10

Пример: Алгоритм вычисления наибольшего общего делителя. 11

2. Базовые понятия языка программирования Pascal 13

Простейшие программы.. 13

Вычисление площади трапеции. 13

Операторы ветвления и выбора. 13

Условный оператор: пример вычисления значения функции. 13

Оператор выбора: пример определения числа дней в месяце. 14

Вычисление дня недели по дате. 14

Операторы цикла. 15

Цикл с предусловием: Программа вычисления наибольшего общего делителя 15

Цикл с постусловием: программа определяет, является ли число простым 16

Цикл в постусловием: наименьшее положительное из введенных чисел 17

Цикл со счетчиком (с параметром): пример вывода таблицы значений 17

Вывод кодов латинских и русских букв. 18

Пример использования процедуры break для прерывания выполнения цикла 19

Цикл с параметром: пример вычисления суммы ряда. 19

3. Процедуры и функции. 20

Пример процедуры без параметров: сокращение дроби. 20

Сокращение дроби: пример процедуры с параметрами. 21

Пример процедуры с передачей параметра по ссылке: вычисление периметра треугольника по координатам его вершин. 21

Пример функции: вычисление периметра треугольника. 22

Пример: Вычисление действительной степени числа. 22

Решение нелинейных уравнений методом половинного деления. 23

Шифрование сообщения методом Цезаря. 24

4. Работа с массивами. 26

Заполнение массива случайными числами. 26

Определение максимального элемента массива и его индекса. 26

Сортировка массивов. 27

Сортировка массивов методом обменов (пузырька) 27

Сортировка методом пузырька с флагом.. 29

Алгоритм сортировки выбором.. 30

Обработка двумерных массивов. 32

Примеры к занятиям.. 32

Обработка строк. 34

Во введенной строке удалить все символы, стоящие на нечетных местах 34

Пример: вывести символы между первым и вторым многоточиями. 34

Замена первого вхождения подстроки другой подстрокой. 35

Записать строку в обратном порядке. 36

Изменение строки: пример использования стандартных функций. 36

5. Работа с файлами. 38

Простейший пример работы с текстовым файлом.. 38

Пример работы с типизированным файлом.. 38

Рекомендуемая литература. 39

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Материалы для самостоятельной работы составлены в соответствии с рабочей программой дисциплины «Основы программирования и баз данных» для специальности 09.02.02 Компьютерные сети.

Самостоятельные работы по дисциплине «Основы программирования и баз данных» предназначены для закрепления обучающимися практических навыков программирования на языке Pascal. Основу материалов составляют тексты программ, демонстрирующие основные понятия программирования на языке Pascal. Тексты программ проверены с использованием среды программирования Free Pascal.

Контроль освоения материалов производится путем опросов во время аудиторных занятий.

ПЕРЕЧЕНЬ ТЕМ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ

№ п/п Название темы К-во часов
Раздел 1. Системы и технологии структурного программирования
Примеры блок-схем линейных алгоритмов
Изучение примеров и самостоятельное составление программ с использованием управляющих структур
Изучение примеров и самостоятельное составление программ с использованием процедур и функций
Изучение примеров и самостоятельное составление программ с использованием методов сортировки массивов
Изучение примеров и самостоятельное составление программ с использованием обработки строк
ВСЕГО по разделу «Системы и технологии структурного программирования»

Основы алгоритмизации

Базовые алгоритмические структуры

Наши рекомендации