- •«Московский государственный технический университет гражданской авиации»
- •Лабораторная работа №5 Разработка программ с использованием функций для обработки массивов арифметических и символьных данных.
- •Цель лабораторной работы
- •1.2. Теоретические сведения Создание динамических массивов
- •Массивы указателей
- •Создание двумерного динамического массива с помощью динамического массива указателей.
- •Определение динамического двумерного массива
- •Указатель на массив. Многомерные массивы динамической памяти.
- •Определение типа массива
- •Определение типа указателя на массив
- •Основные виды обработки массивов.
- •1.3 Задание на выполнение лабораторной работы
- •1.4 Порядок выполнения работы
- •1.5. Пример выполнения лабораторной работы
- •Схемы алгоритмов функций
- •Текст программы
- •1.6. Контрольные вопросы
- •1.7. Варианты заданий лабораторной работы
- •2. Лабораторная работа № 6 Разработка функций рекурсивных и без рекурсии, использующих параметр – функцию и оператор return.
- •2.1 Цель лабораторной работы
- •2.2. Теоретические сведения Рекурсивные функции
- •Указатели на функции
- •Массивы указателей на функции
- •Определение типа указателя на функцию
- •Указатель на функцию - параметр функции
- •2.3 Задание на выполнение лабораторной работы
- •2.4 Порядок выполнения работы
- •2.5 Пример выполнения лабораторной работы
- •Текст программы
- •2.6 Контрольные вопросы
- •2.7. Варианты заданий лабораторной работы
- •3 Лабораторная работа № 7
- •3.1 Цель лабораторной работы
- •3.2 Теоретические сведения Структура как совокупность данных
- •3.3 Задание на выполнение лабораторной работы
- •3.4 Порядок выполнения работы
- •3.5 Пример выполнения лабораторной работы
- •Текст программы
- •3.6 Контрольные вопросы
- •3.7 Варианты заданий лабораторной работы
- •4. Лабораторная работа № 8 Классы и объекты. Создание и разрушение объектов пользовательского класса, статических и динамических.
- •4.1 Цель лабораторной работы
- •4.2. Теоретические сведения Объектно-ориентированный подход к программированию.
- •Понятие класса
- •Объявление функции вне и внутри тела класса
- •Конструктор
- •Массивы объектов статических и динамических
- •Деструктор
- •Указатели на компоненты-функции
- •4.3 Задание на выполнение лабораторной работы
- •4.4 Порядок выполнения работы
- •Методические указания
- •4.5 Контрольные вопросы
- •4.6 Варианты задания
- •5 Список литературы
- •Содержание
- •1. Лабораторная работа № 5
- •1.1. Цель лабораторной работы 3
- •1.2. Теоретические сведения 3
- •4.1. Цель лабораторной работы 38
- •4.2. Теоретические сведения 38
Схемы алгоритмов функций
Схемы алгоритмов функций ввода и вывода данных представлены в лабораторной работе № 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
