Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Исходные данные : массив вещественных чисел.
- Найти местоположение максимума и минимума(вернуть из функции два значения),
- таким образом, массив будет разделен на 3 части.
- В большей по количеству элементов части найти все положительные элементы.
- */
- #include "pch.h"
- #include <iostream>
- #include <clocale>
- #include <cstdlib>
- #include <Windows.h>
- #include <ctime>
- #include <iomanip>
- using namespace std;
- #define ROW 4
- #define COLUMN 4
- /*
- Вам наверное интересно, а нахуя так много аргументов у функции? По заданию функция должна вернуть два значения,
- но для дальнейшего его выполнения двух будет маловато. Нужно больше промежуточных значений, и они все должны быть
- переданы.
- */
- void findExtremes(double ** arr, double * max, double * min, int * iMin, int * jMin, int * iMax, int * jMax) {
- for (int i = 0; i < ROW; i++) {
- for (int j = 0; j < COLUMN; j++) {
- if (arr[i][j] < *min) {
- *min = arr[i][j];
- *iMin = i;
- *jMin = j;
- }
- if (arr[i][j] > *max) {
- *max = arr[i][j];
- *iMax = i;
- *jMax = j;
- }
- }
- }
- }
- int main() {
- setlocale(LC_ALL, "Russian");
- srand(time(0));
- cout.precision(4);
- double ** arr = new double * [ROW];
- for (int i = 0; i < ROW; i++) {
- arr[i] = new double[COLUMN];
- for (int j = 0; j < COLUMN; j++) {
- arr[i][j] = rand() % 100 / (double)8;
- cout << arr[i][j] << "\t";
- }
- cout << endl;
- }
- // В этих переменных будут храниться:
- int * iMin = new int(0); // номер строки минимального элемента
- int * jMin = new int(0); // номер столбца минимального элемента
- int * iMax = new int(0); // номер строки максимального элемента
- int * jMax = new int(0); // номер столбца максимального элемента
- // Переменные, в которых будут храниться вычисленные значения минимального и максимального
- // элементов массива. Изначально инициализируются первым элементом массива
- double * min = new double(arr[0][0]);
- double * max = new double(arr[0][0]);
- findExtremes(arr, max, min, iMin, jMin, iMax, jMax);
- cout << "Минимальный элемент находится на " << *iMin + 1 << " строке и " << *jMin + 1 << " столбце." << " Он равен " << *min << endl;
- cout << "Максимальный элемент находится на " << *iMax + 1 << " строке и " << *jMax + 1 << " столбце." << " Он равен " << *max << endl;
- // Переведем позиции минимума и максимума в такие позиции, как если бы они находились в одномерном массиве
- int minPos = *iMin * COLUMN + *jMin;
- int maxPos = *iMax * COLUMN + *jMax;
- cout << "Максимальный отрезок, получаемый разделением массива минимальным и максимальным элементом: " << endl;
- /*
- Да простит меня Кнут
- */
- if (minPos < maxPos) {
- if (minPos > maxPos - minPos) {
- if (minPos > COLUMN * ROW - maxPos) {
- // Больше всего элементов в отрезке от начала массива
- // до минимального элемента
- for (int i = 0; i < *iMin; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int j = 0; j <= *jMin; j++) {
- cout << arr[*iMin][j] << "\t";
- }
- }
- else {
- // Больше всего элементов в отрезке от минимального элемента
- // до максимального элемента
- for (int i = *iMin; i <= *iMin; i++) {
- for (int j = *jMin; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMin + 1; i < *iMax; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMax; i <= *iMax; i++) {
- for (int j = 0; j <= *jMax; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- }
- }
- else if (maxPos - minPos > COLUMN * ROW - maxPos) {
- // Больше всего элементов в отрезке от минимального элемента
- // до максимального элемента
- for (int i = *iMin; i <= *iMin; i++) {
- for (int j = *jMin; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMin + 1; i < *iMax; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMax; i <= *iMax; i++) {
- for (int j = 0; j <= *jMax; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- }
- else {
- // Больше всего элементов в отрезке от максимального элемента
- // до конца массива
- for (int j = *jMax; j < COLUMN; j++) {
- cout << arr[*iMax][j] << "\t";
- }
- for (int i = *iMax + 1; i < ROW; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- }
- }
- else {
- if (maxPos > minPos - maxPos) {
- if (maxPos > COLUMN * ROW - minPos) {
- // от начала до максимального
- for (int i = 0; i < *iMax; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int j = 0; j <= *jMax; j++) {
- cout << arr[*iMax][j] << "\t";
- }
- }
- else {
- // от максимального до минимального
- for (int i = *iMax; i <= *iMax; i++) {
- for (int j = *jMax; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMax + 1; i < *iMin; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMin; i <= *iMin; i++) {
- for (int j = 0; j <= *jMin; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- }
- }
- else if (minPos - maxPos > COLUMN * ROW - minPos) {
- // от максимального до минимального
- for (int i = *iMax; i <= *iMax; i++) {
- for (int j = *jMax; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMax + 1; i < *iMin; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- for (int i = *iMin; i <= *iMin; i++) {
- for (int j = 0; j <= *jMin; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- }
- else {
- // от минимального до конца
- for (int j = *jMin; j < COLUMN; j++) {
- cout << arr[*iMin][j] << "\t";
- }
- for (int i = *iMin + 1; i < ROW; i++) {
- for (int j = 0; j < COLUMN; j++) {
- cout << arr[i][j] << "\t";
- }
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement