Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
#1

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

08.12.2010, 18:06. Просмотров 765. Ответов 12
Метки нет (Все метки)

Добрый день. Решаю задачу:
Найти сумму наибольших из отрицательных элементов матрицы 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, тоесть отрицательного.

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

Поиск максимального среди отрицательных элементов одномерного массива - C++
Доброго времени суток! Задача следующая: В массиве Х, содержащем 14 элементов, определить максимальный элемент среди отрицательных...

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

Написать программу определения максимального среди отрицательных введенных чисел - C++
3. Написать программу определения максимального среди отрицательных введенных 7 чисел

Определение максимального числа из введенной клавиатуры последовательности отрицательных чисел - C++
Написать программу, которая определяет максимальное число из введенной с клавиатуры последовательности отрицательных чисел (длина...

Найти номер первого максимального элемента среди отрицательных элементов - C++
Задан целочисленный массив a из n элементов. Найти номер первого максимального элемента среди отрицательных элементов. Поменять местами...

Поиск максимального - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include &lt;iostream&gt;...

12
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 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];
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 18:31  [ТС] #3
По вашему предложению.
Во первых в моем случае не matr[i][j] а matr[i * line + j]

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

Иногда выдает положительное значение. Почему?
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
08.12.2010, 18:34 #4
VladSharikov, Я сейчас напишу программу,и скину код сюда,со скрином,специально для вас.
И ps,работаю на 2008 вс
0
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;
 
}
Именно в таком виде.
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 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;
}
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
08.12.2010, 18:49 #7
VladSharikov, в моем случае только матрица...а с массивом еще легче будет-упростите код.
0
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
08.12.2010, 19:10  [ТС] #8
Что за windows.h ?
Что за classes.h ?

Зачем string ?

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

Извините, но я студент первого курса.
Что-то понял что-то нет.
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 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]
Чем они отличаются
0
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 могу показать экран с ошибкой. Вы бы мне заодно показали как у вас с этим нет ошибок
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
08.12.2010, 20:52 #11
Цитата Сообщение от VladSharikov Посмотреть сообщение
matr[i * line + j] тоже самое что и matr[i][j].
эмм нет.
matr[i * line + j] это одномерный массив...
matr[i][j]-двумерный..
0
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 ].
Это все одно и тоже. Двумерные массивы
0
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,342
Завершенные тесты: 1
08.12.2010, 22:42 #13
VladSharikov, -_-
0
08.12.2010, 22:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2010, 22:42
Привет! Вот еще темы с ответами:

Поиск максимального елемента - C++
вот есть код програмы которая генерует случайные числа по нормально закону, и нужно найти максимальный елемент в каждом столбце, но находит...

Поиск максимального по модулю - C++
Помогите, пожалуйста.. никак разобраться не могу... Даны натуральное число n, действительные числа a1...an. Получить...

Поиск максимального элемента - C++
Нужна сделать поиск максимального элемента массива путем деления пополам не через рекурсию, а через цикл. #include &lt;stdio.h&gt; ...

Поиск максимального элемента вектора - C++
Написала программу поиска максимального элемента вектора, только теперь её надо переделать немного с использованием указателей... ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.