Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторные_ЯП.doc
Скачиваний:
276
Добавлен:
10.06.2015
Размер:
11.47 Mб
Скачать

1. Индивидуальное задание №1:

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

Выполнить задание, оформив каждый пункт в виде функ­ции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.

Задача: построить резуль­тат сглаживания заданной вещественной матрицы размером 10 на 10. В сглаженной матрице найти сумму модулей элементов, расположенных выше глав­ной диагонали. Ввод и вовод данных в программе осуществить с помощью файла.

Примечание. Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имею­щихся соседей соответствующего элемента исходной матрицы.

1.2. UML-диаграмма:

1.3. Листинг программы:

// Лабораторная работа №7

// Индивидуальное задание №1

#include <iostream>

#include <fstream>

#include <iomanip>

using namespace std;

int sort_array(int ncol, int nrow);

int sort_array(int ncol, int nrow)

{

ifstream fin("input.txt",ios::in);

if (!fin)

{

cout << "Can't find input.txt" << endl;

return 1;

}

ofstream fout("output.txt");

if (!fout)

{

cout << "Write falure: check permission" <<endl;

return 1;

}

int k, l, k1, l1, counter, i, j;

double sum,sumdiag = 0;

double a[nrow][ncol];

cout << "Чтение данных из файла..." << endl;

for(i = 0; i < nrow; i++)

for(j = 0; j < ncol; j++)

fin >> a[i][j];

cout << "Обработка данных..." << endl;

counter = 0;sum = 0; l = 0; l1 = 0;

double m[nrow][ncol];

//calculate neighbour' sum & sum diagonalies

for(i = 0; i < nrow; i++)

for(j = 0; j < ncol; j++)

{

k = i -1;

k1 = i + 1;

if (k<0) k++;

if (k1 > nco l- 1) k1--;

if ((j <= ncol - 1)&&(j >= ncol - i)) sumdiag = sumdiag+a[i][j];

for(k; k <= k1; k++)

{

l = j - 1;

l1 = j + 1;

if (l < 0) l++;

if (l1 > ncol - 1) l1--;

for(l; l <= l1; l++)

if ((k == i) && (l == j)) continue;

else

{

sum = sum + a[k][l];

counter++;

}

}

m[i][j] = (float) sum/counter;

sum = 0;

counter = 0;

}

for(i = 0; i < nrow; i++)

{

for(j = 0; j < ncol; j++)

fout << setw(5) << left << setprecision(3) << m[i][j] <<" " << endl;

}

fout << endl;

fout << "Сумма эл-ов ниже главной диагонали: " << setw(5) << setprecision(9) << sumdiag << endl;

return 0;

}

int main()

{

const int nrow = 10;

const int ncol = 10;

if (!sort_array(ncol,nrow))

{

cout<<"Запись результатов обработки в файл..."<<endl;

cout<<"Обработка успешно закончена!"<<endl;

return 0;

}

else

{

cout<<"Ошибка обработки данных!"<<endl;

return 1;

}

}

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

Рисунок 7.1 – Файл для входных данных

Рисунок 7.2 – Файл для выходных данных

Рисунок 7.3 – Вывод программы на экран

2. Индивидуальное задание №2:

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

Выполнить задания согласно варианта индивидуального задания №1 лабораторной работы №7, оформив в виде функций законченные последовательности действий. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.

2.2. UML-диаграмма: