Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ НЕФТЯНОЙ ТЕХНИЧЕСКИЙСтр 1 из 2Следующая ⇒
УФИМСКИЙ ГОСУДАРСТВЕННЫЙ НЕФТЯНОЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра вычислительной техники и инженерной кибернетики
УЧЕБНО-МЕТОДИЧЕСКОЕ ПОСОБИЕ К выполнению заданий по информатике “Обработка массивов данных”
УФА 2000
Учебно-методическое пособие содержит требования к выполнению заданий по информатике, включающих решение задач на ЭВМ по обработке массивов данных с использованием функций и процедур. Приведены образцы выполнения двух заданий, содержащих задачи по обработке одномерных (4задачи) и двумерных (5 задач) массивов. Пособие предназначено для студентов всех специальностей и может быть использовано при выполнении домашних, курсовых и контрольных (для заочников) работ.
Составитель Хоробров В.Р., доц., канд. техн. наук
Рецензент Давыдов А.Ф., доц.
© Уфимский государственный нефтяной технический университет, 2000 Введение
При изучении курса информатики в части освоения основ алгоритмизации и программирования студенты выполняют самостоятельные работы (домашние задания, курсовые и контрольные работы) по решению задач, содержащих обработку массивов данных. Варианты заданий представлены в сборнике [1], содержащем по 1000 вариантов задач по темам “Обработка одномерных массивов” и “Обработка двумерных массивов”. Индивидуальное задание и номер варианта (трехзначное число из диапазона от 000 до 999) определяются преподавателем. Язык программирования также определяется преподавателем, в большинстве случаев таким языком является Турбо-Паскаль. Краткое описание языка приведено в методических указаниях [2], а более полное – в книгах [3], [4]. При разработке программ рекомендуется использовать модульный принцип: программа состоит из основной (головной) программы и подпрограмм (процедур и функций). Алгоритм основной программы содержит обращения к алгоритмам подпрограмм и алгоритмам вывода результатов решения. Алгоритмы подпрограмм разрабатываются для отдельных частей задания.
Состав работы
В соответствии с учебным планом студенту может быть предложено выполнение курсовой работы, домашнего задания или контрольной работы (для заочников), в состав которой включены задания на обработку одномерных и (или) двумерных массивов данных.
Задание 1 “Обработка одномерных массивов” включает 4 задачи. 1. Получение элементов массива с использованием генератора случайных чисел; 2. Вычисление параметра массива: значения суммы, произведения, среднеарифметического, среднеквадратичного, среднегеометрического или среднегармонического из элементов массива; 3. Определение параметра массива: наибольшего или наименьшего по значению (модулю), два наибольших или наименьших, близкое по модулю к заданному числу среди различных элементов указанной части массива; 4. Упорядочение элементов массива: расположение элементов (четных или нечетных, по номеру или значению, положительных или отрицательных, каждых вторых, третьих, ненулевых, принадлежащих отрезку) указанной части массива (первой половины, второй трети и т.д.) по возрастанию или убыванию значений, модулей значений, квадратов значений и т.д.).
Задание 2 “Обработка двумерных массивов” включает 5 задач. 1. Получение квадратной матрицы по формуле; 2. Получение вектора: элементы вектора вычисляются из элементов строки или столбца матрицы; 3. Выполнение матричной операции, содержащей произведение трех операндов, каждый из которых представлен матрицей, вектором или скаляром. 4. Упорядочение элементов матрицы по заданному критерию; 5. Вычисление параметра массива: значения суммы двух слагаемых, представленных комбинацией сумм, произведений, факториалов, максимумов, минимумов.
Для выполнения заданий (задания независимы друг от друга) рекомендуется следующий порядок работы. Вначале разрабатывается алгоритм основной программы а затем – алгоритмы подпрограмм. Описание отдельного алгоритма включает: · постановку задачи; · математическую формулировку (только для частей 2, 3 заданий); · блок-схему алгоритма; · таблицу переменных, определяющую состав и типы переменных алгоритма и программы; · блок программы, реализующий описываемый алгоритм (не обязательно, т.к. он будет включен в текст всей паскаль-программы). Затем разработанные модули вставляются в программу и записывается полный текст программы. Программа вводится в компьютер и отлаживается для входного значения n=2 или n=3. Полученные результаты сравниваются с предварительно просчитанными вручную (с помощью калькулятора) и делается вывод о ее (программы) работоспособности. Если тестирование прошло успешно, получают решение задачи при заданном преподавателем значении n (по умолчанию n=6). Далее программу и результаты решения распечатывать на принтере. Распечатка может быть выполнена как на отдельных листах, так и рулоне. И, наконец, оформляется отчет в соответствии с изложенными ниже требованиями.
2. Требования к оформлению отчета
Отчет должен иметь следующую структуру: Титульный лист Содержание(оглавление) 1. Наименование задания 1 1.1. Постановка задачи 1.2. Блок-схема алгоритма 1.3. Программа на языке Паскаль 1.4. Результаты решения 2. Наименование задания 2 2.1. Постановка задачи -------------------------------------------- -------------------------------------------- 5.4 Результаты решения Список использованной литературы
Отчет выполняется на листах формата А4 (210× 297). Допускается, использование листов в клетку. Листы отчета должны быть пронумерованы, начиная со следующего после титульного листа. Номер листа проставляется в середине верхней его части. Желательно (но не обязательно) оформлять отчет в печатном виде с использованием редактора WORD. Титульный лист оформляется в соответствии с приложением 1. Содержание (оглавление) отчета включает все выделенные в тексте заголовки частей и разделов с указанием номеров страниц, включая список литературы. Блок-схемы алгоритмов выполняются в соответствии с ГОСТ 19.001-80 и 19.003-80. В приложении 2 приведены требования к оформлению блок-схем алгоритмов. Программа на Паскале должна соответствовать блок-схеме алгоритма. Программа и результаты расчета представляются в распечатанном на принтере виде на отдельных листах или в сложенном по формату А4 виде. В помощь студенту ниже приведены образцы выполнения работ для задания 1 и задания 2.
Задание 1. Обработка одномерных массивов Постановка задачи
Часть 1. Вычислить значения 30 элементов одномерного целочисленного массива F в интервале (-7, 8) с использованием генератора случайных чисел. Алгоритм основной программы
Таблица переменных
begin clrscr; write('Введите размерность вектора'); readln(n); write('Интервал значений от '); read(a); write('до '); readln(b); writeln; writeln(' ': 25, ’Исходные данные’); writeln('Размерность вектора n = ', n); writeln('Интервал [', a, ', ', b, ']'); writeln; writeln(' ': 26, 'Результаты расчета'); randomize; writeln('-----------------Часть 1---------------------'); writeln(‘Вектор F из ‘, n, ’ элементов в интервале [‘, a, ’, ’, b, ’], полученных’); writeln(‘при помощи генератора случайных чисел’); vector(n, a, b, f); writevect(n, 4, f); writeln('-----------------Часть 2---------------------'); writeln('Сумма положительных элементов третьей четверти вектора'); s: =sum(n, f); writeln(‘ s=’, s); writeln('-----------------Часть 3---------------------'); writeln('Наибольший элемент второй трети среди нечетных по номеру'); writevect(n, 3, f); mx: =max(n, f); writeln(‘ mx=’, mx); writeln('-----------------Часть 4---------------------'); writeln(‘Вектор F с упорядоченными по убыванию квадратов значений’); writeln(‘нечетными по номеру элементами второй половины’); porjadok(n, f); writevect(n, 2, f); writeln('---------------Конец задачи----------------'); end.
Алгоритмы подпрограмм
Получение элементов вектора
Алгоритм процедуры vector
n, a, b
f[i..n] Таблица переменных
procedure vector(n, a, b: integer; var f: vect); var i: integer; begin for i: =1 to n do f[i]: =round((b-a)*random(100)/100+a); end; Таблица переменных
function sum(n: integer; f: vect): integer; var i, s: integer; begin s: =0; for i: =round(n/2)+1 to round(3*n/4) do if f[i] > 0 then s: =s+f[i]; sum: =s; end; {sum}
Таблица переменных
function max(n: integer; f: vect): integer; var i, mx: integer; begin mx: =-1000; for i: =round(n/3)+1 to round(2*n/3) do if odd(i) then if f[i] > mx then mx: =f[i]; max: =mx; end{max}; 4.2.3.4. Упорядочение элементов вектора
Алгоритм процедуры porjadok n, f[1..n]
нет f[1..n]
да
Нет нет
да да
Таблица переменных
procedure porjadok(n: integer; var f: vect); var i, k, j, c: integer; begin for i: =round(n/2)+1 to n-1 do if odd(i) then begin k: =i; for j: =i+2 to n do if odd(j) then if sqr(f[j]) > sqr(f[k]) then k: =j; if i < > k then begin c: =f[i]; f[i]: =f[k]; f[k]: =c; end; end; end {porjadok};
4.2.3.5. Вывод информации
Алгоритм процедуры writevect n, k, f [1..n]
нет
да
Таблица результатов
procedure writevect(n, k: integer; f: vect); var i: integer; begin for i: =1 to n do begin write(f[i]: 5); if i mod round(n/k)=0 then writeln; end; writeln; end {writevect};
Паскаль-программа
program kurslab1; {Хасанов А. А. ст.гр. АГ 98-02 вар. 111} uses crt; type vect=array[1..99] of integer; var f: vect; n, a, b, s, mx: integer;
{-----------Часть 1--------------} procedure vector(n, a, b: integer; var f: vect); var i: integer; begin for i: =1 to n do f[i]: =round((b-a)*random(100)/100+a); end;
{-----------Часть 2--------------} function sum(n: integer; f: vect): integer; var i, s: integer; begin s: =0; for i: =round(n/2)+1 to round(3*n/4) do if f[i] > 0 then s: =s+f[i]; sum: =s; end;
{-----------Часть 3-------------} function max(n: integer; f: vect): integer; var i, mx: integer;
begin mx: =-1000; for i: =round(n/3)+1 to round(2*n/3) do if odd(i) then if f[i] > mx then mx: =f[i]; max: =mx; end;
{-----------Часть 4----------------} procedure porjadok(n: integer; var f: vect); var k, j, c: integer; begin for i: =round(n/2)+1 to n-1 do if odd(i) then begin k: =i; for j: =i+2 to n do if odd(j) then if sqr(f[j]) > sqr(f[k]) then k: =j; if i < > k then begin c: =f[i]; f[i]: =f[k]; f[k]: =c; end; end; end;
{--------Вывод вектора--------------} procedure writevect(n, k: integer; f: vect); var i: integer; begin for i: =1 to n do begin write(f[i]: 5); if i mod round(n/k)=0 then writeln; end; if n mod k < > 0 then writeln; end;
{----------Основная программа-----} begin clrscr; write('Введите размерность вектора '); readln(n); write('Интервал значений от '); read(a); write('до '); readln(b); writeln; writeln(' ': 25, ’Исходные данные’); writeln('Размерность вектора n = ', n); writeln('Интервал [', a, ', ', b, ']'); writeln; writeln(' ': 26, 'Результаты расчета'); randomize; vector(n, a, b, f); writeln('--------------------Часть 1---------------------------'); writeln(‘Вектор F из ‘, n, ’ элементов в интервале [‘, a, ’, ’, b, ’], полученных’); writeln(‘при помощи генератора случайных чисел’); writevect(n, 4, f); writeln('--------------------Часть 2---------------------------'); writeln('Сумма положительных элементов третьей четверти вектора'); s: =sum(n, f); writeln(‘ s=’, s); writeln('--------------------Часть 3---------------------------'); writeln('Наибольший элемент второй трети среди нечетных по номеру'); writevect(n, 3, f); mx: =max(n, f); writeln(‘ mx=’, mx); writeln('--------------------Часть 4---------------------------'); writeln(‘Вектор F с упорядоченными по убыванию квадратов значений’); writeln(‘нечетными по номеру элементами второй половины’); porjadok(n, f); writeln('Упорядоченный вектор F’); writevect(n, 2, f); writeln('----------------Конец задачи-----------------------'); end.
3.4. Распечатка результатов
Исходные данные
Размерность вектора n = 30 Интервал [-7, 8] Результаты расчета
--------------------------------Часть 1-------------------------------
Вектор F из 30 элементов в интервале [-7, 8], полученных при помощи генератора случайных чисел
---------------------------------Часть 2------------------------------
Сумма положительных элементов третьей четверти вектора
s=40
---------------------------------Часть 3------------------------------
Наибольший элемент второй трети среди нечетных по номеру
mх=7
---------------------------------Часть 4------------------------------
Вектор F с упорядоченными по убыванию квадратов значений нечетными по номеру элементами второй половины
-----------------------------Конец задачи---------------------------
4. Задание 2. Обработка двумерных массивов. 4.1. Постановка задачи. Часть 1. Вычислить элементы матрицы А по формуле
, i, , где ; ; . Часть 2. Используя известную матрицу А, вычислить вектор ( ) как наибольший среди принадлежащих отрезку [-10, 10] элементов i-го столбца. Часть 3. Вычислить Z= , где , - вектор; , , - квадратная матрица; , - единичная матрица; – транспонированная матрица , , ; – инвенторованный вектор , .
Часть 4. Упорядочить по убыванию положительные элементы последнего столбца матрицы А.
Часть 5. Вычислить значение функции 4.2. Алгоритм решения. 4.2.1. Структура алгоритма. Алгоритм состоит из основного алгоритма (для основной программы) и вспомогательных алгоритмов (для подпрограмм): - вычисление матрицы – процедура matrica (n, a); - вычисление вектора – процедура vector (n, a, x); - матричные операции – процедура matoper (n, x, a, z); - сортировка массива – процедура porjadok (n, a, b); - вычисление значение функции - функция – znachf (n, a, x), где n – размерность матрицы, вектора (вводится в начале); A, B, Z– квадратные матрицы размерности n; X – вектор из n элементов.
Кроме того используются процедуры вывода: - матрицы - writmatr ( ’A’, n, a); - вектора - writvect ( ’X’, n, x); ‘A’, ‘X’ – имена соответственно матрицы A, вектора X.
4.2.2. Алгоритм основной программы
Таблица переменных
begin{Основная программа} clrscr; write(' Введите размерность матрица n '); readln(n); writeln(' ': 25, 'Исходные данные'); writeln('размерность матрицы n=', n); writeln(' ': 20, 'результаты расчетов'); writeln('------------------ часть 1--------------------------'); writeln('Вычислить элементы матрицы А по формуле'); matrica(n, a); writmatr('А', n, a); writeln('------------------- часть 2--------------------------'); writeln('Из матрицы А получить вектор Х, '); writeln('элемент которого х[i] определяется как наибольший '); writeln('среди принадлежащих отрезку [-10, 10] '); writeln('элементов i-го столбца. '); vector(n, a, x); writevect('X', n, x); writeln('------------------- часть 3--------------------------'); writeln(' ': 7, 'Вычислить Z=(At-E)(A-E)(X-Xи)'); matoper(n, a, x, z); write('Результат: '); writmatr('Z', n, z); writeln('------------------- часть 4--------------------------'); writeln('Упорядочить по убыванию положительные элементы'); writeln('последнего столбца мартицы А'); porjadok(n, a, b); writmatr('B', n, b); writeln('-------------------- часть 5------------------------ '); writeln('Вычислить значение функции y=y1+y2'); y: =znachf(n, a, x); writeln('y=', y: 6: 3); writeln('------------------конец задачи---------------------'); end.
4.2.3. Алгоритмы подпрограмм.
4.2.3.1. Получение матрицы.
Алгоритм процедуры matrica
Таблица переменных.
procedure matrica(n: integer; var a: matr); var i, j: integer; f1, f2, f3: real; begin for i: =1 to n do for j: =1 to n do begin f1: =cos(pi*(8.25+(i+j)/2))/sin(pi*(8.25+(i+j)/2)); f2: =pi*i*(1+i/j); f3: =ln(sqr(n)-i/j+1)/ln(2); a[i, j]: =f1/f2*f3; end; end{matrica}; 4.2.3.2. Получение вектора.
Используя известную матрицу А, вычислить вектор X, если xi(i=1, 2..n) вычисляется как наибольший среди принадлежащих отрезку [-10, 10] элементов i-го столбца матрицы. Математическая формулировка задачи , , i= Таблица переменных
procedure vector(n: integer; a: matr; var x: vect); var i, j: integer; m: real; begin for i: =1 to n do begin m: =-exp(30); for j: =1 to n do if abs(a[j, i])< =10 then if a[j, i]> m then m: =a[j, i]; x[i]: =m; end; end{vector};
4.2.3.3. Матричные операции.
Выполнить матричную операцию Z=
1) ;
2) U=A - E ;
3) V=A-E ;
4) C=U.V ;
5) ; 6) . Таблица переменных
Алгоритм процедуры matoper n, a[1..n, 1..n], x[1..n]
нет
да Популярное:
|
Последнее изменение этой страницы: 2016-06-04; Просмотров: 458; Нарушение авторского права страницы