Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 3
1

Матрица с fstream. Найти максимум среди отрицательных и минимум среди положительных элементов

25.12.2014, 14:45. Показов 1252. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить программу нахождения максимального элемента среди отрицательных чисел и минимального элемента среди положительных для каждой строки матрицы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
#include <locale.h>
#include <fstream>
 
using namespace std;
 
void FileOpen(fstream &f, char *fname, ios_base::openmode mode);
void FileRead(fstream &f, int &N, int &M, int **&a);
void CountData(int &N, int &M, int **&a, int *&arMin, int *&arMax);
void FileClose(fstream &f);
void FileOut(fstream &f, int &N, int &M, int **&a, int *&arMin, int *&arMax);
 
int main()
{
    setlocale(LC_ALL, "rus");
    fstream fin, fout;
    FileOpen(fin, "in.txt", ios::in);
    int N;
    int M;
    int **a;
    FileRead(fin, N, M, a);
    int *arMin;
    arMin = new int[N];
    int *arMax;
    arMax = new int[N];
    CountData(N, M, a, arMin, arMax);
    FileClose(fin);
    FileOpen(fout, "out.txt", ios::out);
    FileOut(fout, N, M, a, arMin, arMax);
    FileClose(fout);
    return 0;
}
 
void FileOpen(fstream &f, char *fname, ios_base::openmode mode)
{
    f.open(fname, mode);
    if (!f)
    {
        cout << "Ошибка 1: Файла " << fname << " нет на диске" << endl;
        system("pause");
        exit(1);
    }
}
 
void FileClose(fstream &f)
{
    f.close();
}
 
void FileRead(fstream &f, int &N, int &M, int **&a)
{
    f >> ws;
    f.ignore(4, '=');
    f>> N;
    if (N <= 0 || !f)
    {
        cout << "Ошибка 2: Ошибка ввода строк матрицы";
        system("pause");
        exit(2);
    }
    f >> ws;
    f.ignore(4, '=');
    f >> M;
    if (M <= 0 || !f)
    {
        cout << "Ошибка 3: Ошибка ввода столбцов матрицы";
        system("pause");
        exit(3);
    }
    a = new int *[N];
    for (int i = 0; i < N; i++)
    {
        a[i] = new int[M];
    }
    f >> ws;
    for (int i = 0; i<N; i++)
    {
        for (int j = 0; j<M; j++)
        {
            f >> a[i][j];
            if (!f)
            {
                cout << "Ошибка 4: Ошибка ввода элементов";
                system("pause");
                exit(4);
            }
        }
    }
}
 
void FileOut(fstream &f, int &N, int &M, int **&a, int *&arMin, int *&arMax)
{
    f << "Составить программу нахождения максимального элемента среди отрицательных " << endl;
    f << "и минимального элемента среди положительных для каждой строки матрицы.";
    f << endl << endl << "Данная матрица: " << endl;
    for (int i = 0; i<N; i++)
    {
        for (int j = 0; j<M; j++)
        {
            f << a[i][j] << "\t";
        }
        f << endl;
    }
    f << endl;
    f << "Решение задачи: " << endl;
    for (int i = 0; i<N; i++)
    {
        if (arMin[i] == 1000)   f << "Минимальный положительный элемент " << i + 1 << " строки отсутствует" << endl;
        else f << "Минимальный положительный элемент " << i + 1 << " строки: " << arMin[i] << endl;
        if (arMax[i] == -1000) f << "Максимальный отрицательный элемент " << i + 1 << " строки отсутствует" << endl;
        else f << "Максимальный отрицательный элемент " << i + 1 << " строки:" << arMax[i] << endl;
        f << endl;
    }
 
}
 
void CountData(int &N, int &M, int **&a, int *&arMin, int *&arMax)
{
    int max = -1000;
    int min = 1000;
 
    for (int i = 0; i<N; i++)
    {
        for (int j = 0; j<M; j++)
        {
            if ((a[i][j]>max) && (a[i][j]<0)) max = a[i][j];
            if ((a[i][j]<min) && (a[i][j]>0)) min = a[i][j];
        }
        arMax[i] = max;
        arMin[i] = min;
        max = -1000;
        min = 1000;
    }
 
}
файл in.txt
N = 3
M = 3
-1 2 3
4 -5 6
7 8 9

вывести в out.txt

Добавлено через 15 часов 11 минут
У меня возник вопрос.
int max = -1000;
int min = 1000;

какие нужны значения здесь, чтобы программа работала?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2014, 14:45
Ответы с готовыми решениями:

Определить минимум среди положительных и максимум среди отрицательных чисел
Ну вот смотрите у меня есть код почти робочий.Он правильно показивает самое меньшее среди...

Найти минимум среди нечетных, и максимум - среди четных элементов массива
Помогите пожалуйста сделать так, чтобы эта программа брала min c нечетных, а max с четных...

Найти наибольший среди отрицательных и наименьший среди положительных элементов массива
Задача такова: В введенном с клавиатуры одномерном массиве найти наибольший среди отрицательных и...

В одномерном массиве найти наибольший среди отрицательных и наименьший среди положительных элементов
пожалуйста пожалуйста листинг оставил на компьютере в колледже поэтому кинуть свои наработки не...

3
191 / 161 / 116
Регистрация: 14.09.2013
Сообщений: 302
25.12.2014, 14:54 2
Все зависит от входных данных, т.е. если в исходных данных будут только числа больше 1000, то минимум так и останется 1000.
0
30 / 30 / 35
Регистрация: 05.11.2014
Сообщений: 120
25.12.2014, 15:02 3
Лучший ответ Сообщение было отмечено pavnov как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int max;
int min;
 
    for (int i = 0; i<N; i++)
    {
        max = A[i][0];
        min = A[i][0];
        for (int j = 1; j<M; j++)
        {
            if ((a[i][j]>max) && (a[i][j]<0)) max = a[i][j];
            if ((a[i][j]<min) && (a[i][j]>0)) min = a[i][j];
        }
        arMax[i] = max;
        arMin[i] = min;
    }
2
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 3
26.12.2014, 10:05  [ТС] 4
Если это так то как поправить цикл в функции FileOut чтобы программа работала?

C++
1
2
3
4
5
6
7
8
for (int i = 0; i<N; i++)
    {
        if (arMin[i] == 1000)   f << "Минимальный положительный элемент " << i + 1 << " строки отсутствует" << endl;
        else f << "Минимальный положительный элемент " << i + 1 << " строки: " << arMin[i] << endl;
        if (arMax[i] == -1000) f << "Максимальный отрицательный элемент " << i + 1 << " строки отсутствует" << endl;
        else f << "Максимальный отрицательный элемент " << i + 1 << " строки:" << arMax[i] << endl;
        f << endl;
    }
Добавлено через 13 часов 27 минут
___
0
26.12.2014, 10:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2014, 10:05
Помогаю со студенческими работами здесь

Найти сумму Максимум(среди чётных)+Минимум(среди нечётных)
дана последовательность действительных чисел {a1,a2,...an}. Найти...

Среди чисел на четных местах найти максимум,а среди нечетных найти минимум
Текст полной задачи: С клавиатуры вводится произвольная последовательность целых чисел.Числа...

Матрица D(4,4). Определить максимальный среди положительных, минимальный среди отрицательных и поменять их местами
Помогите решить задачу: Задана матрица D(4,4). Определить максимальный среди положительных,...

Найти макс. элемент среди отрицательных и мин. элемент среди положительных элементов массива
В массиве (введенном пользователем) найти максимальный элемент среди отрицательных массива и найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru