Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
visual с++.doc
Скачиваний:
28
Добавлен:
18.08.2019
Размер:
10.99 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-диаграмма:

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

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

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

#include <iostream.h>

#include <fstream>

#include <string.h>

using namespace std;

int readfile(string fileName)

{

ifstream fin(fileName.c_str(),ios::in);

if (!fin)

{

cout << "Ошибка открытия файла" << endl;

return 1;

}

int nword;

cout << "Введите искомое число слов в предложении: ";

cin >> nword;

fin.seekg(0,ios::end);

int len = fin.tellg();

char *buf = new char [len + 1];

fin.seekg(0,ios::beg);

fin.read(buf,len);

buf[len] = '\0';

int l_beg = 0, i = 0, n = 0, j = 0;

bool exist;

exist = false;

while (buf[i])

{

if (buf[i] == ' ') n++;

if (buf[i] == '.')

{

n++;

if (n == nword)

{

for(j = l_beg; j <= i; j++)

cout << buf[j];

exist = true;

cout << endl;

}

l_beg = i + 2;

i = i + 2;

n = 0;

}

i++;

}

if (!exist)

cout << "Таких предложений не найдено" << endl;

fin.close();

return 0;

}

int main()

{

setlocale( LC_ALL, "Russian" );

cout <<"\n"

<<"\tЛабораторная работа № 7\n"

<<"\n"

<<"------------------------------------------\n"

<<"Задание: Считать текст из файла. Вывести на экран только предложения, \n"

<<"\tсостоящие из заданного количества слов\n"

<<"-----------------------------------------\n";

string str;

cout << "Какой файл открыть? ";

cin >> str;

readfile(str);

return 0;

}

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

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

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

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

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

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

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

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

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

#include <iostream>

#include <fstream>

#include <iomanip>

using namespace std;

template <class T> T sort_array(T ncol, T 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 > ncol - 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] << " ";

fout << endl;

}

fout << endl;

fout << "Сумма эл-ов ниже главной диагонали: "

<< setw(5) << setprecision(9) << sumdiag <<endl;

return 0;

}

int main()

{

const int nrow = 10;

const int ncol = 10;

sort_array(ncol,nrow);

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

<< endl;

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

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

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]