Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информ 1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
138.75 Кб
Скачать

8

Методические указания по выполнению домашнего задания на тему «Разработка алгоритмов для структурного программирования и их реализация. Линейные алгоритмы»

Составил: к.т.н., доц. А.Ю. Уразбахтина

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;