Форум программистов, компьютерный форум CyberForum.ru

Поиск максимального из отрицательных - C++

Восстановить пароль Регистрация
 
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 18:06     Поиск максимального из отрицательных #1
Добрый день. Решаю задачу:
Найти сумму наибольших из отрицательных элементов матрицы A(7 x 8) и массива И(76).

Собственно вопрос в поиске максимального из отрицательных(например числа: -2, -8, -13, -5. Максимальное из отрицательных будет -2.) Поэтому скину только одну функцию. Саму функцию поиска этого числа.

Задача то получилась, но получилась она после поиска последнего отрицательного и в следующем цикле сравнения его с другими элементами массива.

Вот.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        
    int result;//переменная для будущей стартовой точки обработки массива
    for(int i = 0; i < line; i++) {
        for(int j = 0; j < column; j++) {
            if(matr[ i * line + j ] < 0) {
                result = matr[ i * line + j];
            }
        }
    }
 
    for(int i = 0; i < line; i++) {
        for(int j = 0; j < column; j++) {
            if(matr[ i * line + j ] < 0 && matr[ i * line + j ] > result) {
                result = matr[ i * line + j ];
            }
        } 
    }
    return result;
По идее, чтобы отправной точкой для сравнения сделать первый элемент надо в первом цикле добавить после
C++
1
 result = matr[ i * line + j];
этого это
C++
1
 break;
Нужно это для того, чтобы остановить цикл и условие после поиска первого элемента массива < 0, тоесть отрицательного.

Но так функция не работает. Возвращается неверное значение. Любое но не максимальное из отрицательных.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2010, 18:06     Поиск максимального из отрицательных
Посмотрите здесь:

C++ Поиск максимального по модулю
C++ Поиск максимального значения в списке.
C++ Поиск максимального
C++ Поиск максимального елемента
Поиск максимального элемента по модулю C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
08.12.2010, 18:13     Поиск максимального из отрицательных #2
Найти максимальный из отрицательных элементов в массиве?
C++
1
2
3
4
5
6
int max=x[0][0];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(x[i][j]<0)
if(max<x[i][j])
max=x[i][j];
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 18:31  [ТС]     Поиск максимального из отрицательных #3
По вашему предложению.
Во первых в моем случае не matr[i][j] а matr[i * line + j]

А во вторых - я пробовал уже такой вариант. И работает он не корректно.

Иногда выдает положительное значение. Почему?
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
08.12.2010, 18:34     Поиск максимального из отрицательных #4
VladSharikov, Я сейчас напишу программу,и скину код сюда,со скрином,специально для вас.
И ps,работаю на 2008 вс
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 18:45  [ТС]     Поиск максимального из отрицательных #5
Напишите.
Нужна программа с функциями. Вот пример.
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// Лабораторная работа 7, Задание 1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
 
//прототипы фукнций
void InMas(int *, int); //функция ввода двумерного массива с клавиатуры
void InMas_rand(int *, int); //функция ввода одномерного массива массива через rand();
void InMatr_rand(int *, int, int); //функция ввода двумерноо массива через rand();
void InMatr_hand(int *, int, int); //функция ввода двумерного массива двумерного массива с клавиатуры
void OutMas(int *, int); //вывод массива
void OutMatr(int *, int, int); //вывод двумерного массива
int FindMaxMatrNegativ(int*, int, int); //поиск максимального из отрицательного элементов двумерного массива
int FindMaxMasNegativ(int*, int); //поиск максимального из отрицательного элементов одномерного массива
 
 
int main(void) {
 
    //объявление переменных и массивов
    const int column = 8, line = 8, size = 10;
    int matr[column][line], mas[size];
 
    //ввод массивов одномерного и двумерного(можно вводить с клавиатуры "_hand" и через rand(); "_rand"
    InMas_rand(mas, size);
    InMatr_rand(&matr[0][0], column, line);
 
    //вывод массивов одномерного и двумерного
    //printf("\t Old One-Dimensional Array: \n\n");
    OutMas(mas, size);
    //printf("\n\n\------ \n\t Old Two-Dimensional Array: \n\n");
    OutMatr(&matr[0][0], column, line);
    //printf("------\n");
 
    //поиск максимального из отрицательных чисел в обоих массивах
    int MaxMatrNegativ = FindMaxMatrNegativ(&matr[0][0], column, line);
    int MaxMasNegativ = FindMaxMasNegativ(mas, size);
 
    //ищем сумму максимальных отрицательных элементов
    int sum = MaxMasNegativ + MaxMatrNegativ;
 
    //вывод суммы на экран
    printf("SUM: %d", sum);
 
    return 0;
}
 
 
void InMas_rand(int *mas, int size) {
 
    srand(unsigned(time(NULL)));
    for(int i = 0; i < size; i ++) {
        mas[i] = rand() % 100 - 50;
    }
 
}
 
void InMas_hand(int *mas, int size) {
 
    for(int i = 0; i < size; i ++) {
        scanf_s("%d", &mas[i]);
    }
 
}
 
 
void InMatr_rand(int *matr, int column, int line) { 
 
    srand(unsigned(time(NULL)));
    for(int i = 0; i < line; i++) {
        for(int j = 0; j < column; j++) {
             matr[ i * line + j] = rand() % 99 - 49;
        }
    }
 
}
 
void InMatr_hand(int *matr, int column, int line) {
 
    for(int i = 0; i < line; i++) {
        for(int j = 0; j < column; j++) {
             scanf_s("%d", &matr[i * line + j]);
        }
    }
 
}
 
 
void OutMas(int *mas, int size) {
 
    for(int i = 0; i < size; i++) {
        printf("%4d ", mas[i]);
        if((i + 1) % 5 == 0) {
            printf("\n\n");
        }
    }
 
}
 
 
void OutMatr(int *matr, int column, int line) {
 
    for(int i = 0; i < line; i++) {
        for(int j = 0; j < column; j++) {
            printf("%3d ", matr[i * line + j]); 
            if( (j + 1)  % column == 0) {
                printf("\n\n"); 
            }
        }
    }
 
}
 
int FindMaxMatrNegativ(int *matr, int column, int line) {
 
    int result;
    for(int i = 0; i < line; i++) {
        for(int j = 0; j < column; j++) {
            if(matr[ i * line + j ] < 0) {
                result = matr[ i * line + j];
            }
        }
    }
 
    for(int i = 0; i < line; i++) {
        for(int j = 0; j < column; j++) {
            if(matr[ i * line + j ] < 0 && matr[ i * line + j ] > result) {
                result = matr[ i * line + j ];
            }
        } 
    }
    return result;
 
}
 
 
int FindMaxMasNegativ(int *mas, int size) {
 
    int result = 0;
    for(int i = 0; i < size; i++) {
        if(mas[i] < 0) {
            result = mas[i];
        }
    }
    
    for(int i = 0; i < size; i++) {
        if(mas[i] < 0 && mas[i] > result) {
            result = mas[i];
        }
    }
 
    return result;
 
}
Именно в таком виде.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
08.12.2010, 18:48     Поиск максимального из отрицательных #6
Поиск максимального из отрицательных

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
#include "windows.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
//#include <D:\\alex\\Head-files\\classes.h>
const int n=5;
void inp(int x[][n]);
int calc(int x[][n]);
void out(int x[][n],int max);
 
using namespace std;
int main(){
    srand(time(0));
    int max=0;
    int x[n][n];
    inp(x);
    max=calc(x);
    out(x,max);
        return 0;
}
void inp(int x[][n])
{
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            x[i][j]=rand()%100-200;
}
 
int calc(int x[][n])
{
    int max=x[0][0];
    for(int i=1;i<n;i++)
        for(int j=0;j<i;j++)    
            if(max<x[i][j])
                max=x[i][j];
    return max;
}
 
void out(int x[][n],int max)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
            cout<<x[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl<<"max="<<max<<endl;
}
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
08.12.2010, 18:49     Поиск максимального из отрицательных #7
VladSharikov, в моем случае только матрица...а с массивом еще легче будет-упростите код.
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 19:10  [ТС]     Поиск максимального из отрицательных #8
Что за windows.h ?
Что за classes.h ?

Зачем string ?

stdio.h и iostream это для cin и cout ?

Извините, но я студент первого курса.
Что-то понял что-то нет.
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
08.12.2010, 20:28     Поиск максимального из отрицательных #9
Цитата Сообщение от VladSharikov Посмотреть сообщение
я студент первого курса
Аналогично........

Цитата Сообщение от VladSharikov Посмотреть сообщение
windows.h
Цитата Сообщение от VladSharikov Посмотреть сообщение
classes.h
Цитата Сообщение от VladSharikov Посмотреть сообщение
string
Эти файлы остались из прошлой работы...
windows.h-стандартные функции,разные операции,если можно так назвать
classes.h-вам не нужен,там классы созданные мною для развития моего понимания.


Цитата Сообщение от VladSharikov Посмотреть сообщение
Зачем string ?
Вот почему
Цитата Сообщение от ^Tecktonik_KiLLeR Посмотреть сообщение
Эти файлы остались из прошлой работы...
Цитата Сообщение от VladSharikov Посмотреть сообщение
iostream это для cin и cout
да

Цитата Сообщение от VladSharikov Посмотреть сообщение
stdio.h
Для ранда

Добавлено через 4 минуты
И еще
Цитата Сообщение от VladSharikov Посмотреть сообщение
Во первых в моем случае не matr[i][j] а matr[i * line + j]
что такое
C++
1
matr[i][j] И matr[i*line+j]
Чем они отличаются
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 20:34  [ТС]     Поиск максимального из отрицательных #10
На счет вашего последнего вопроса.

matr[i * line + j] тоже самое что и matr[i][j].
Я использую matr[i * line + j], потому что использую дополнительные подпрограммы, а в них если использовать matr[i][j] выдается ошибка. В главной же программе можно и так и так.

Если есть skype могу показать экран с ошибкой. Вы бы мне заодно показали как у вас с этим нет ошибок
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
08.12.2010, 20:52     Поиск максимального из отрицательных #11
Цитата Сообщение от VladSharikov Посмотреть сообщение
matr[i * line + j] тоже самое что и matr[i][j].
эмм нет.
matr[i * line + j] это одномерный массив...
matr[i][j]-двумерный..
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 21:12  [ТС]     Поиск максимального из отрицательных #12
Сравните у себя в компиляторе.

Посмотрите сами. Я не буду расписывать, что и как. Поищите сами или попробуйте.

Хочу заметить что в одномерном массиве нет j.
matr[ i + line + j ];

matr[i][j] - *(matr + i * line + j) - matr[ i * line + j ].
Это все одно и тоже. Двумерные массивы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2010, 22:42     Поиск максимального из отрицательных
Еще ссылки по теме:

C++ Поиск максимального элемента дерева
Определение максимального среди отрицательных введеных 7 чисел с использованием do while C++
C++ Поиск максимального неповторяющегося числа

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

Или воспользуйтесь поиском по форуму:
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
08.12.2010, 22:42     Поиск максимального из отрицательных #13
VladSharikov, -_-
Yandex
Объявления
08.12.2010, 22:42     Поиск максимального из отрицательных
Ответ Создать тему
Опции темы

Текущее время: 06:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru