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

Нахождение наибольшего элемента в строке матрицы

06.06.2016, 17:10. Показов 2155. Ответов 16
Метки c++, си (Все метки)

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
#include <stdio.h>
 
int printmas (int intmas[3][4]) //функция выводит массив на экран 
{
   for(int i=0; i<3; i++)  
   {
     for(int j=0; j<4; j++) 
       {
         printf("%d ", intmas[i][j]);
       }
     printf("\n"); 
   } 
  return 0; 
}
 
int masind(int *danmas,int strok, int stolb, int lin) //функция с индексами 
{
    //int max = danmas [lin],i=0,index=0;
    //if 
    int max = danmas [lin], index = 0, i = 0;
    if (lin < strok) {
        for (i = 0; i < stolb; i++)
            if (danmas [lin + strok*i] > max) {
                max = danmas [lin + strok*i];      // Значение наибольшего элемента
                index = i;                     // Индекс наибольшего элемента
            }
        return index;
    }
    else return -1;
 
 
//return 0;
}
 
 
int masukaz()//функция с указателями
{
return 0;
}
 
 
int main ()
 
{
    int const x=3;
    int const y=4;
    int danmassiv [x][y]={{10,9,98,65},
                          {1,-9,-4,6},
                          {15,6,78,-8}};
    int line=2;
    int max=0;//ему присваевается функция поиска элемента 
 
    printmas(danmassiv);
    printf("with index");
    max=masind(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
    //printf("С указателями");
 
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2016, 17:10
Ответы с готовыми решениями:

Нахождение наибольшего элемента в строке и этот элемент должен быть минимальным в столбце
a)Матрица задана формулой A=0.1*(N*N-pow((j-N/2+0.2),2))*pow((i-N/2-0.3),2); Нужно вывести вектор...

Нахождение минимального элемента в строке матрицы
Вот задание: Дана целочисленная матрица А размерности mхn. Найти наименьшее целое число k,...

Нахождение бОльшего элемента в строке матрицы
Добрый день. Есть матрица размерностью NxN, в каждой из строк надо найти большее значение и...

Нахождение наибольшего элемента дерева
Написать функцию, которая находит наибольший элемент дерева. Добавлено через 3 часа 56 минут...

16
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
06.06.2016, 17:34 2
C++
1
danmas [lin * stolb + i]
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 103
06.06.2016, 17:42  [ТС] 3
это не работает

Добавлено через 2 минуты
Цитата Сообщение от mat_for_c Посмотреть сообщение
1
danmas [lin * stolb + i]
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
#include <stdio.h>
 
int printmas (int intmas[3][4]) //функция выводит массив на экран 
{
   for(int i=0; i<3; i++)  
   {
     for(int j=0; j<4; j++) 
       {
         printf("%d ", intmas[i][j]);
       }
     printf("\n"); 
   } 
  return 0; 
}
 
int masind(int *danmas,int strok, int stolb, int lin) //функция с индексами 
{
    
    int maxs = danmas [lin], index = 0, i = 0;
    if (lin < strok) 
    {
        for (i = 0; i < stolb; i++)
            if (danmas [lin * stolb + i] > maxs) 
            {
                maxs = danmas [lin * stolb + i];      // Значение наибольшего элемента
                index = i;                     // Индекс наибольшего элемента
            }
        return index;
    }
    else return -1;
 
 
//return 0;
}
 
 
int masukaz()//функция с указателями
{
return 0;
}
 
 
int main ()
 
{
    int const x=3;
    int const y=4;
    int danmassiv [x][y]={{10,9,98,65},
                          {1,-9,-4,6},
                          {15,6,78,-8}};
    int line=2;
    int max=0;//ему присваевается функция поиска элемента 
 
    printmas(danmassiv);
    printf("with index");
    max=masind(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
    //printf("С указателями");
 
 
}
это не работает
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
06.06.2016, 17:49 4
В добавок
C++
1
int maxs = danmas[lin * stolb]
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 103
06.06.2016, 17:55  [ТС] 5
Цитата Сообщение от mat_for_c Посмотреть сообщение
В добавок
C++
1
int maxs = danmas[lin * stolb]
всё равно не верно работает всё время указывает на 1 столбец в не зависимости от чисел в массив, не могу понять почему
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
#include <stdio.h>
 
int printmas (int intmas[3][4]) //функция выводит массив на экран 
{
   for(int i=0; i<3; i++)  
   {
     for(int j=0; j<4; j++) 
       {
         printf("%d ", intmas[i][j]);
       }
     printf("\n"); 
   } 
  return 0; 
}
 
int masind(int *danmas,int strok, int stolb, int lin) //функция с индексами 
{
    
    int maxs = danmas[lin * stolb], index = 0, i = 0;
    if (lin < strok) 
    {
        for (i = 0; i < stolb; i++)
            if (danmas [lin + stolb * i] > maxs) 
            {
                maxs = danmas [lin + stolb * i];      // Значение наибольшего элемента
                index = i;                     // Индекс наибольшего элемента
            }
        return index;
    }
    else return -1;
 
 
//return 0;
}
 
 
int masukaz()//функция с указателями
{
return 0;
}
 
 
int main ()
 
{
    int const x=3;
    int const y=4;
    int danmassiv [x][y]={{10,9,98,65},
                          {1,-9,-4,6},
                          {15,6,78,-8}};
    int line=2;
    int max=0;//ему присваевается функция поиска элемента 
 
    printmas(danmassiv);
    printf("with index\n");
    max=masind(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
    //printf("С указателями");
 
 
}
0
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
06.06.2016, 18:07 6
Цитата Сообщение от toyi Посмотреть сообщение
функцию которая должна искать наибольший элемент в строке массива
С коленки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
    int const x=3;
    int const y=4;
    int danmassiv [x][y]={{10,9,98,65},
                          {1,-9,-4,6},
                          {15,6,78,-8}};
int max(int a[x]) {
    int k=0; 
    for(int i=k;i<y;i++) k=(a[i]>a[k])?i:k;
    return a[k];
}
void foreach(int a[x][y]){
    for(int i=0;i<x;i++){
       cout<<max(a[i])<<endl; 
    }
}                          
int main()
{
   foreach(danmassiv);
   return 0;
}
0
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 103
06.06.2016, 18:10  [ТС] 7
Цитата Сообщение от Hikari Посмотреть сообщение
функцию которая должна искать наибольший элемент в строке массива
С коленки:
{
}
мне нужно с индексами и указателями разобраться поэтому я хочу запустить свой код,
в моём коде не подскажите ошибку?
0
139 / 109 / 60
Регистрация: 26.10.2013
Сообщений: 314
06.06.2016, 18:17 8
Лучший ответ Сообщение было отмечено toyi как решение

Решение

Передаете двумерный массив, а работаете как с одномерным.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int masind(int *danmas, int strok, int stolb, int lin) //функция с индексами 
{
    if (lin > strok)
        return -1;
 
    int maxs = *(danmas + lin * stolb);
    int index = 0;
 
    for (int i = 1; i < stolb; ++i)
    {
        if (*(danmas + lin * stolb + i) > maxs)
        {
            maxs = *(danmas + lin * stolb + i);      // Значение наибольшего элемента
            index = i;                     // Индекс наибольшего элемента
        }
    }
    return index;
}
1
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 103
06.06.2016, 18:25  [ТС] 9
Цитата Сообщение от stzer Посмотреть сообщение
Передаете двумерный массив, а работаете как с одномерным.
с указателями то понятно, я с индексами не понимаю почему функция 0 возвращает!
0
139 / 109 / 60
Регистрация: 26.10.2013
Сообщений: 314
06.06.2016, 18:41 10
toyi, никогда подобным образом не работал с массивами.

1 прототип:
C++
1
type func(type array[][m])
Работаем как с обычным двумерным массивом, через [][].
2 прототип:
C++
1
type func(type *array[m])
Работаем как с обычным двумерным массивом, через [][].
3 прототип:
C++
1
type func(type *array)
Тут всегда работал только через указатели.

Добавлено через 7 минут
Оказывается, все намного проще.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int masind(int *danmas, int strok, int stolb, int lin) //функция с индексами 
{
 
    int maxs = danmas[lin * stolb], index = 0, i = 0;
    if (lin < strok)
    {
        for (i = 1; i < stolb; i++)
            if (danmas[lin * stolb + i] > maxs)
            {
                maxs = danmas[lin * stolb + i];      // Значение наибольшего элемента
                index = i;                     // Индекс наибольшего элемента
            }
        return index;
    }
    else return -1;
 
 
    //return 0;
}
1
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 103
06.06.2016, 18:45  [ТС] 11
Цитата Сообщение от stzer Посмотреть сообщение
никогда подобным образом не работал с массивами.
спасибо уже со всем разобрался, а потом увидел ваше сообщение
но почему у вас цикл функции работает с i=1, у меня по другому но шикарно работает
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
#include <stdio.h>
 
int printmas (int intmas[3][4]) //функция выводит массив на экран 
{
   for(int i=0; i<3; i++)  
   {
     for(int j=0; j<4; j++) 
       {
         printf("%d ", intmas[i][j]);
       }
     printf("\n"); 
   } 
  return 0; 
}
 
int masind(int *danmas,int strok, int stolb, int lin) //функция с индексами 
{
    
    int maxs = danmas[lin * stolb], index = 0, i = 0;
    if (lin > strok)
        return -1;
    {
        for (i = 0; i < stolb; i++)
            if (danmas [lin * stolb + i] > maxs) 
            {
                maxs = danmas [lin * stolb + i];      // Значение наибольшего элемента
                index = i;                     // Индекс наибольшего элемента
            }
        return index;
    }
    
 
 
//return 0;
}
 
 
 
int masukz(int *danmas, int strok, int stolb, int lin) //функция с индексами 
{
    if (lin > strok)
        return -1;
 
    int maxs = *(danmas + lin * stolb);
    int index = 0;
 
    for (int i = 0; i < stolb; i++)
    {
        if (*(danmas + lin * stolb + i) > maxs)
        {
            maxs = *(danmas + lin * stolb + i);      // Значение наибольшего элемента
            index = i;                     // Индекс наибольшего элемента
        }
    }
    return index;
}
 
 
 
int main ()
 
{
    int const x=3;
    int const y=4;
    int danmassiv [x][y]={{10,9,98,65},
                          {1,-9,49,6},
                          {15,6,78,-8}};
    int line=2;
    int max=0;//ему присваевается функция поиска элемента 
 
    printmas(danmassiv);
    printf("with index\n");
    max=masind(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
    printf("with ukaz\n");
    max=masukz(&danmassiv[0][0],x,y,line-1);
    if (max != -1) {
        printf ("the largest element in %d", line);
        printf (" line stored in the  %d column", max + 1);// и добавляется 1 т.к. начинается с 0 столбца
        printf ("\n");
    }
    else printf ("Error! This line does not exist\n");
 
 
}
0
139 / 109 / 60
Регистрация: 26.10.2013
Сообщений: 314
06.06.2016, 18:46 12
toyi, можно и с 0, но это лишняя итерация.
1
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 103
06.06.2016, 18:55  [ТС] 13
Цитата Сообщение от stzer Посмотреть сообщение
toyi, можно и с 0, но это лишняя итерация.
я видимо не до конца разобрался с принципом работы, потому что я думал что при i=0 это первый проход цикла , который работает с 1 элементом то бишь [0][0]

Добавлено через 2 минуты
Цитата Сообщение от stzer Посмотреть сообщение
toyi, можно и с 0, но это лишняя итерация.
если можно объясните почему так, чтобы я в суть работы с массивами вник
0
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
06.06.2016, 18:57 14
toyi, в итоге 2 раза говорил, что не работает, но всё же оставил мой вариант
1
0 / 0 / 0
Регистрация: 05.06.2016
Сообщений: 103
06.06.2016, 19:42  [ТС] 15
Цитата Сообщение от mat_for_c Посмотреть сообщение
toyi, в итоге 2 раза говорил, что не работает, но всё же оставил мой вариант
чес слово не работало

Добавлено через 5 минут
Цитата Сообщение от mat_for_c Посмотреть сообщение
toyi, в итоге 2 раза говорил, что не работает, но всё же оставил мой вариант
объясните почему с 0 лишняя итерация!!!
Цитата Сообщение от toyi Посмотреть сообщение
Сообщение от stzer
toyi, можно и с 0, но это лишняя итерация.
если можно объясните почему так, чтобы я в суть работы с массивами вник
Цитата Сообщение от toyi Посмотреть сообщение
я видимо не до конца разобрался с принципом работы, потому что я думал что при i=0 это первый проход цикла , который работает с 1 элементом то бишь [0][0]
0
139 / 109 / 60
Регистрация: 26.10.2013
Сообщений: 314
06.06.2016, 19:48 16
Лучший ответ Сообщение было отмечено toyi как решение

Решение

toyi,
Перед for мы условились, что максимальный элемент в n-ой строке находится по индексу 0. Далее просто сравниваем последующие элементы строки с условным максимумом и т. д. и т. п. Нет смысла сравнивать элемент по индексу 0 с самим собой.
1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
06.06.2016, 19:49 17
Лучший ответ Сообщение было отмечено toyi как решение

Решение

Цитата Сообщение от toyi Посмотреть сообщение
чес слово не работало
а теперь обрати внимание на твой конечный результат, на свой изначальный, и на то, что я тебе говорил (обе ошибки исправил - и все заработало)
Цитата Сообщение от toyi Посмотреть сообщение
объясните почему с 0 лишняя итерация!!!
она роли не играет, т.к.
C++
1
2
3
4
5
6
7
int maxs = danmas[lin * stolb];
// и этот код
for (i = 0; i < stolb; i++)
   if (danmas [lin * stolb + i] > maxs)
 
// при i = 0, ты получишь danmas [lin * stolb], т.е. maxs, 
// далее maxs > maxs - ложно для int. т.е. отпадает смысл проверки при i = 0.
1
06.06.2016, 19:49
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2016, 19:49
Помогаю со студенческими работами здесь

Нахождение наибольшего элемента в последовательности
По структурам и алгоритмам дали задание, найти наибольшее число с помощью сложения чисел...

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

Нахождение наибольшего элементе в строке матрицы
Всем доброго времени суток ! Прошу помочь решить задачу по matlab'у Построить квадратную...

С помощью процедуры определить порядковые номера наибольшего элемента в каждой строке матрицы
Задали матрицу Z размерности (5х6). Составить схему алгоритма и программу, в которой с помощью...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
UserScript для подсветки кнопок языков программировани­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форм быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru