
- •Методические указания по выполнению домашнего задания на тему «Разработка алгоритмов для структурного программирования и их реализация. Линейные алгоритмы»
- •1. Неструктурные алгоритмы и их реализация в паскале
- •1.1. Оператор безусловной передачи управления GoTo
- •1.2. Процедуры неструктурной передачи управления
- •2. Структурные типы данных
- •2.1. Массив
- •3. Порядок выполнения домашней работы «Структурные типы данных: массивы»
- •4. Символьные массивы и строки
- •Приложение (варианты заданий)
Методические указания по выполнению домашнего задания на тему «Разработка алгоритмов для структурного программирования и их реализация. Линейные алгоритмы»
Составил: к.т.н., доц. А.Ю. Уразбахтина
1. Неструктурные алгоритмы и их реализация в паскале
С точки зрения теории программирования неструктурный оператор и процедуры передачи управления являются ‘лишними’, так как любой алгоритм может быть преобразован в структурный и реализован без них. Однако интуитивно построенные алгоритмы часто получаются неструктурными, и для их реализации может потребоваться использование неструктурных вариантов передач управления. Чаще всего проблема разработки структурного варианта алгоритма возникает при работе с поисковыми циклами.
Для организации неструктурных передач управления программой в Паскале используют оператор безусловной передачи управления GoTo и специальные процедуры.
1.1. Оператор безусловной передачи управления GoTo
Этот оператор передает управление в точку, определенную специальной меткой рис. 1. Все метки в программе должны быть описаны инструкцией объявления меток Label рис. 2. Метка ставится перед любым выполняемым оператором программы, после метки пишется знак :, причем, на один оператор можно ставить несколько меток.
Рис. 1. Синтаксическая диаграмма Оператор безусловной передачи управления
Рис. 2. Синтаксическая диаграмма Объявление меток
Меткой может быть целое число без знака или идентификатор вида А1, МЕТКА77. Например,
Program FFHGF; Uses CRT; Label M4, 789, Stop1;
Var a, b, c, r:Real; Begin ClrScr;…
789: c:=0; …If c<0 Then GoTo M4 else c:=b+a; …
If c>=1000 Then GoTo Stop1 else GoTo 789; …Stop1: End.
1.2. Процедуры неструктурной передачи управления
Break – реализует выход из цикла любого типа;
Continue – осуществляет переход на следующую итерацию цикла, игнорируя оставшиеся до конца тела цикла операторы;
Exit – осуществляет выход из программы.
2. Структурные типы данных
Достаточно часто возникает необходимость программирования обработки однотипных данных: таблиц, текстов, множеств и т.д. Для их представления используют структурные типы данных. В Паскале определены следующие структурные типы данных:
массивы – для представления однотипных или табличных данных
строки – для представления символьной текстовой информации
множества – для представления абстрактных математических множеств
записи – для представления таблиц с данными различных типов.
2.1. Массив
Массив – это упорядоченная совокупность однотипных данных рис. 3. Каждому элементу массива соответствует один или несколько индексов, определяющих положение элемента в массиве. Индексы образуют упорядоченные последовательности.
Рис. 3. Синтаксическая диаграмма Объявление массива
Тип индекса определяет его допустимые значения. В качестве типа индекса может быть указан любой порядковый тип (boolean, char, integer, перечисляемый тип, а также диапазоны этих типов), кроме типа longint и его производных.
В зависимости от количества типов индексов различают: одномерные, двумерные, трехмерные и n – мерные массивы. Двумерные массивы обычно называют матрицами, считая первый индекс номером строки, а второй – номером столбца.
Тип элементов массива – любой, кроме файла. Объявление переменных типа массив выполняется двумя способами:
в операторе объявления переменных, например,
Var a: array[1..10] of integer; {массив из 5 целых чисел}
b: array[byte] of char; {массив из 256 символов, индекс элемента массива изменяется от 0 до 255}
c: array[‘A’..’C’,-5..-3] of byte; {матрица из 9 чисел}
d: array[‘A’..’C’] of array [-5..-3] of byte; {матрица из 9 чисел, по структуре эквивалентная предыдущей}
с предварительным объявлением типа, например:
Type mas=array[1..10] of integer; {объявляем тип}
Var a: mas; {объявляем переменную}
Ограничения на количество индексов в Паскале нет. Однако суммарная длина массива не должна превышать 65537 байт.
Значения элементов массива в программе можно определить тремя способами.
Во-первых, массив может быть инициализирован с использованием типизированных констант или просто присваиваний значений элементам, например:
Const a: array[1..5] of real=(0.0, -3.6, 6.0, 2.1, -100.8); или
a[1]:=0; a[2]:=-3.6; a[3]:=6; a[4]:=2.1; a[5]:=-100.8;
Во-вторых, элементы массива могут быть введены с клавиатуры или из файла, например:
For j:=1 to 5 do Read(a[j]); Readln;
В-третьих, элементы массива могут быть вычислены, например, сгенерированы с использованием датчика случайных чисел, рассчитаны по заданным формулам и закономерностям, а также скопированы из другого массива, например:
Randomaze; a[1]:=random(10); a[2]:=random(5); a[3]:=a[1]+a[2]; a[4]:=a[3]+a[2]; a[5]:=a[4]+a[3];
Ввод-вывод массивов выполняют поэлементно, используя счетные циклы (с заданным числом повторений). При выполнении операций ввода-вывода матриц и массивов большой размерности целесообразно вводить и выводить значения построчно, например:
For i:=1 to n do Begin For j:=1 to m do Read(b[I,j]); Readln; End;
For i:=1 to n do Begin For j:=1 to m do Write(b[I,j]:4:1,’ ‘); Writeln; End;