Сделай Сам Свою Работу на 5

ПОРЯДОК ВЫПОЛНЕНИЯ ДОМАШНЕЙ РАБОТЫ «Структурные типы данных: массивы»





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

НЕСТРУКТУРНЫЕ АЛГОРИТМЫ И ИХ РЕАЛИЗАЦИЯ В ПАСКАЛЕ

С точки зрения теории программирования неструктурный оператор и процедуры передачи управления являются ‘лишними’, так как любой алгоритм может быть преобразован в структурный и реализован без них. Однако интуитивно построенные алгоритмы часто получаются неструктурными, и для их реализации может потребоваться использование неструктурных вариантов передач управления. Чаще всего проблема разработки структурного варианта алгоритма возникает при работе с поисковыми циклами.

Для организации неструктурных передач управления программой в Паскале используют оператор безусловной передачи управления 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.

Процедуры неструктурной передачи управления

· Break – реализует выход из цикла любого типа;

· Continue – осуществляет переход на следующую итерацию цикла, игнорируя оставшиеся до конца тела цикла операторы;

· Exit – осуществляет выход из программы.

СТРУКТУРНЫЕ ТИПЫ ДАННЫХ

Достаточно часто возникает необходимость программирования обработки однотипных данных: таблиц, текстов, множеств и т.д. Для их представления используют структурные типы данных. В Паскале определены следующие структурные типы данных:

· массивы – для представления однотипных или табличных данных;

· строки – для представления символьной (текстовой) информации;

· множества – для представления абстрактных математических множеств;



· записи – для представления таблиц с данными различных типов.

Массив

Массив – это упорядоченная совокупность однотипных данных (рис. 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;

ПОРЯДОК ВЫПОЛНЕНИЯ ДОМАШНЕЙ РАБОТЫ «Структурные типы данных: массивы»

Этап 1. Постановка задачи 1.Разработать алгоритм, спецификацию, тестовый пример и программу обработки статистических данных: вычисления среднего арифметического, дисперсии и стандартного отклонения для числового ряда , состоящего из n(=12) членов, где массив а: ежемесячные данные за 2004 год о реально отработанных в России часах в расчете на одного занятого человека.

Этап 2. Анализ поставленной задачи. Из теории математики и математической статистики определяем необходимые для вычисления формулы: сумма ряда ; среднее арифметическое ; дисперсия , где .

Сумма элементов массива S определяется методом накопления. Количество суммируемых чисел известно, поэтому используем цикл с заданным количеством повторений. При каждом проходе к сумме будем добавлять значение , где i будет изменяться от 1 до n(=12). Перед началом цикла необходимо переменную суммы обнулить. Затем определим значение среднего арифметического. Сумма U определяется аналогично сумме S.

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

Этап 3. Проектирование и определение спецификаций. В данных методических указаниях предлагается производить расчет тестовых (контрольных) примеров в EXCEL.

На рис. 5 приведена схема алгоритма. Результаты расчета тестового примера занесем в табл. 1. Спецификация к алгоритму представлена в табл. 2.

Рис. 5. Блок – схема алгоритма решения задачи 1.

 

Таблица 1.

Тестовые примеры для задачи 1.

Н№ теста n Массив а Результат Результат U Дисперсия g2
120; 130; 140; 150; 160; 123; 145; 156; 167; 144; 122; 177 144,5 313,75

 

Таблица 2.

Спецификация к алгоритму на рис. 5.

Наименование Обозначение в алгоритме Обозначение в программе Статус переменной Тип переменной
Количество элементов массива n N Входная Целый
Параметр цикла i i Расчетная Целый
Значение суммы S S Выходная Не целый
Значение суммы U U Выходная Не целый
Среднее арифметическое a_1 Выходная Не целый
Массив а а Входная Не целый
Дисперсия g2 Выходная Не целый

 

Этап 4. Реализация. Разрабатываем программу:

Program Massiv; Uses Crt;

Var a:array[1..12] of Real;

U, S, a_1, g2: Real;

i, n: Byte;

Begin

ClrScr;

Writeln('Введите n:'); Readln(n);

Writeln('Введите массив a:'); с м

S:=0;

For i:=1 to n do

Begin

Read(a[i]);

S:=S+a[i];

End;

Readln;

a_1:=S/n;

Writeln('Среднее арифметическое а_1=',a_1:4:1);

U:=0;

For i:=1 to n do

U:=U+Sqr(a[i]-a_1);

g2:=U/n;

Writeln('U=',U:5:2);

Writeln('Дисперсия g2=',g2:5:2);

Readln;

End.

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

Введите n:

Введите массив a:

120 130 140 150 160 123 145 156 167 144 122 177

Среднее арифметическое а_1=144.5

U=3765.00

Дисперсия g2=313.75

Сверяем полученные результаты с тестовым примером.

Вывод: Результаты работы программы на Паскале совпадают со значениями, рассчитанными в среде MATHCAD.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.