Уфимский государственный нефтяной технический 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Уфимский государственный нефтяной технический



УФИМСКИЙ ГОСУДАРСТВЕННЫЙ НЕФТЯНОЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ

 

Кафедра вычислительной техники и инженерной кибернетики

 

 

УЧЕБНО-МЕТОДИЧЕСКОЕ ПОСОБИЕ

К выполнению заданий по информатике

“Обработка массивов данных”

 

 

УФА 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. Обработка одномерных массивов

Постановка задачи

 

Алгоритм основной программы

 
 

 

 


 

                           
   
 
   
 
vector (n,a,b,f)
 
 
 
 
   
  s=sum(n,f)
 
   
 
   
 
   
  mx=max(n,f)
 
   
     
 

 

 


           
   
   
 
porjadok (n,f)
 
 

 

 


Таблица переменных

 

Имя Тип Назначение Параметр
n     целый размерность     глобальный
a,b интервал
f[1..n] вектор
s сумма
mx максимум

 

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.

 

Алгоритмы подпрограмм

 

Получение элементов вектора

 
 
Вычислить значения 30 элементов одномерного целочисленного массива F в интервале (-7, 8) с использованием генератора случайных чисел

 


Алгоритм процедуры vector

 

       
 
   
 


n, a, b

 
 


f[i..n]

Таблица переменных

Имя Тип Назначение Параметр
n     целый размерность формальный
i параметр цикла локальный
a, b интервал формальный
f[1..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;

Таблица переменных

 

Имя Тип Назначение Параметр
n     целый размерность формальный
f[1..n] вектор
i параметр цикла локальный
s вспомогательное
sum имя функции  

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}

 

Таблица переменных

Имя Тип Назначение Параметр
n целый размерность формальный
f[1..n] вещественный вектор
i   целый параметр цикла   локальный
mx вспомогательное
max имя функции  

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]

 

да

       
   
 
 

 

 


 
 

 


Нет нет

           
 
   
 
   
 

 


да да

 
 
c=fi fi=fk fk=c


k=j
нет да

       
   
 
 

 


Таблица переменных

Имя Тип Назначение Параметр
N   целый размерность формальный
f[1..n] вектор
i, j параметр цикла локальный
k, c вспомогательное

 

 

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]

 
 

 

 


 

 

нет

       
   
 
 

 


да

       
   
 
 

 


Таблица результатов

Имя Тип Назначение Параметр
n   целый размерность формальный
f[1..n] вектор
i параметр цикла локальный
k кол-во строк

 

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], полученных

при помощи генератора случайных чисел

 

  -6 -6     -4    
-4 -4 -6          
          -6    
-3       -2 -2    

 

---------------------------------Часть 2------------------------------

 

Сумма положительных элементов третьей четверти вектора

 

s=40

 

---------------------------------Часть 3------------------------------

 

Наибольший элемент второй трети среди нечетных по номеру

 

  -6 -6     -4     -4 -4
-6                  
  -6     -3       -2 -2

 

mх=7

 

---------------------------------Часть 4------------------------------

 

Вектор F с упорядоченными по убыванию квадратов значений нечетными по номеру элементами второй половины

 

  -6 -6     -4     -4 -4 -6        
            -6         -3   -2 -2

 

-----------------------------Конец задачи---------------------------

 

 

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. Алгоритм основной программы

 

 

 

 

 


Таблица переменных

 

Имя Тип Назначение Параметр
n целый размерность глобальный
a[1..n,1..n]   вещественный матрица
x[1..n] вектор
z[1..n,1..n] матрица
y скаляр
simbol символьный символ
namber целый номер
b[1..n,1..n] вещественный матрица

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. Получение матрицы.

 
 
Вычислить матрицу А по формуле , i, , где ; ; .

 

 


Алгоритм процедуры matrica

   
 
 
 

 

 


Таблица переменных.

 

Имя Тип Название Параметр
n   целый размерность матрицы формальный
a[1..n,1..n]   вещественный матрица
i, j   целый параметр цикла локальный

 

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 =

Таблица переменных

 

Имя Тип Назначение Параметр
n целый размерность вектора формальный
i, j параметр цикла локальный
m   вещественный вспомогательный
a[1..n,1..n] матрица формальный
x[1..n] вектор

 

 

n, a[1..n, 1..n]
Алгоритм процедуры vector

 
 

нет

 


да

m =

 

 


m

 

 


нет

 


да

 

 


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=

 

Х – вектор - инвентированный вектор А - матрица - транспонированная матрица Е – единичная матрица Z – матрица – результат    
Математическая формулировка задачи

 

1) ;

 

2) U=A - E ;

 

3) V=A-E ;

 

4) C=U.V ;

 

5) ;

6) .

Таблица переменных

 

Имя Тип Назначение Параметр
n целый размерность формальный
a[1..n,1..n] вещественный матрица   вектор
z[1..n,1..n] х[1..n]
i,k, j целый параметр цикла локальный
s вещественный вспомогательный скаляр
y
b[1..n,1..n] матрица
u[1..n,1..n]
v[1..n,1..n]
c[1..n,1..n]

 

Алгоритм процедуры matoper

       
 
   
 


n, a[1..n,1..n], x[1..n]

 

 
 


               
   
   
   
 
 
 


  y= 0

       
   
 
 


       
   
 
 


 

s=0
=

       
 
   
 


 

                   
   
 
         
y=y +
 
 
 


 

       
   
 
 

нет

               
   
   
 
 
   
 
 

 


да



Поделиться:


Последнее изменение этой страницы: 2016-12-15; просмотров: 242; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.227.36 (0.41 с.)