Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы / 5_6_7_8_new.doc
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
445.92 Кб
Скачать

Схемы алгоритмов функций

Схемы алгоритмов функций ввода и вывода данных представлены в лабораторной работе № 4.

На рис.1 представлена схема алгоритма функции Treatment() - формирования нового массива из элементов исходного массива и модификации исходного массива.

Формирование нового массива. Организуется внешний цикл для обработки каждого нечётного столбца исходной матрицы, в котором, организуется вложенный цикл для установки номера строки элемента и производится сложение положительных элементов каждого нечетного столбца, а также подсчитывается их количество в столбце. Получаемыми суммами и количествами элементов заполняются строки нового массива. Далее находятся максимальная и минимальная суммы и номера столбцов исходного массива, в которых эти суммы были обнаружены. В исходном массиве эти столбцы обмениваются элементами. И, наконец, выводятся в файл результатов элементы нового массива и элементы измененного исходного массива.

Рисунок 1. Схема алгоритма функции Treatment ()

Рисунок 1. Продолжение

Схема алгоритма главной функции представлена на рис.2.

Первоначально в главной функции объявляются массивы. Первый массив, размером m строк и n столбцов предназначен для хранения данных, которые будут считаны из файла данных (исходные данные) и второй массив, в котором две строка и n/2 столбцов будет сформирован из элементов исходного массива в соответствии с заданием. Элементам формируемого массива присваиваются нулевые значения.

Далее открываются (с проверкой) файлы data.txt для чтения данных в элементы первого массива и файл l5.res, в который будут выведен результат выполнения программы. Производится последовательный вызов пользовательских функций – ввода данных, форматного вывода данных и функции обработки массивов.

В конце функции файлы закрываются.

Рисунок 2. Схема алгоритма главной функции main ()

Текст программы

#include <iostream>

#include <windows.h>

#include <fstream>

#include <iomanip>

using namespace std;

ofstream fout;

ifstream fin;

const int m = 5, n = 6;

char c [6][120];

void Input (double a[m][n]) {

int i, j;

for (i = 0; i < 6; i++) {

fin.getline (c[i], 120, '\n');

if (i < 4)

fout << c[i] << endl;

}

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

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

fin >> a[i][j];

fin.close ();

}

void Output (double a[m][n]) {

int i, j;

for (i = 0; i < m; i++) {

fout << "||";

fout. setf (ios::left);

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

switch (j) {

case 0:

case 1:

case 2:

case 3:

case 4:

fout.width (10);

fout.unsetf (ios::scientific);

fout.setf (ios::fixed);

fout.precision (4);

fout << a[i][j] << "||";

break;

case 5:

fout.width(10);

fout.unsetf (ios::fixed);

fout.setf (ios::scientific);

fout.precision (4);

fout << a[i][j] << "||\n";

break;

}

if (i == 5)

fout << c [5] << endl;

else

fout << c [4] << endl;

}

fout.unsetf (ios::scientific);

}

void Treatment (double a[m][n], double b [2] [n / 2]) {

double max, min, przv = 1;

int dmax = 1, dmin = 1, num = 0, L = 1;

for (int j = 0; j < n / 2; j++, L+=2) {

for (int k = 0; k < m; k++)

if (a[k][L] > 0) {

b[0][j] += a[k][L];

b[1][j]++;

}

przv *= b[0][j];

num += b[1][j];

if (j == 0)

max = min = b [0][0];

else {

if (b[0][j] > max) {

max = b[0][j];

dmax = j * 2 + 1;

}

else if (b[0][j] < min) {

min = b[0][j];

dmin = j * 2 + 1;

}

}

}

fout << "\nНовый массив: \n";

for (int i = 0; i < 2; i++) {

for (int j = 0; j < n / 2; j++) {

fout.setf (ios::fixed);

fout.precision (3);

fout.width (10);

fout << b[i][j];

}

fout << "\n";

}

double temp;

for (int i = 0; i < m; i++) {

temp = a[i][dmin];

a[i][dmin] = a[i][dmax];

a[i][dmax] = temp;

}

fout << "\n\nИзмененный начальный массив:\n";

for (int i = 0; i < m; i++) {

for (int j = 0; j < n; j++) {

fout.setf (ios::fixed);

fout.width(14);

fout.precision(3);

fout << a[i][j];

}

fout << "\n";

}

fout << "\n\nПроизведение сумм: " << przv;

fout << "\nОбщее количество положительных элементов: " <<num;

}

void main () {

SetConsoleCP (1251);

SetConsoleOutputCP (1251);

double a[m][n], b [2] [n / 2];

for (int i = 0; i < 2; i++)

for (int j = 0; j < n / 2; j++)

b[i][j] = 0;

fin.open ("data.txt");

if (!fin) {

cout << "Ошибка при открытии файла данных!";

exit (0);

}

fout.open ("l5.res");

if (!fout) {

cout << "Ошибка при открытии файла результатов!";

exit (0);

}

Input(a);

Output(a);

Treatment (a, b);

fout.close();

}

На рис. 3 представлен файл с исходными данными

Рисунок 3. Файл данных data.txt

На рис. 4 представлен файл результатов

Рисунок 4. Файл результатов l5.res

Соседние файлы в папке лабы