Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185

Возвращение двумерного массива из функции

05.01.2015, 22:22. Показов 5567. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
int function (int x[][], const int r, const int c) //работает только если указана размерность массива x[5][4]
{
    int max, i, maxelrownum = 0;
    max = x[0][0];
    for (i = 1; i<r; i++)
    {
        for (int j = 1; j<c; j++)
        {
            if (x[i][j]>max)
            {
                    max = x[i][j];
                    maxelrownum = i;
            }
        }
    }
    int j = 0;
    for(j; j<c; j++)
            x[maxelrownum][j] = x[maxelrownum][j]*2;
 
    return x[maxelrownum][j];
 
}
 
int main ()
{
    const int row = 5, col = 4;
    int mas[row][col] = {211, 2,3,4,
                         5,26,7,8,
                         9,10,1111,12,
                         13,14,15,16,
                         99, 12, 252, 0};
    function(mas, row, col);
}
Подскажите пожалуйста, как задать размерность массива через вызов функции, где ошибка?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2015, 22:22
Ответы с готовыми решениями:

Возвращение двумерного массива из функции
Здравствуйте, написал пробник, чтобы освоить метод возвращения из функции двумерного массива (указателя). Что-то не заладилось с двумерным....

Функции двумерного массива. Транспонировать матрицу через ввод вывод функции двумерного массива.
Транспонировать матрицу через ввод вывод функции двумерного массива.Сначала вывести ее,а потом провести транспонирование.

Как реализовать передачу массива в функцию и возвращение массива из функции?
Нужно сделать отдельный блок программы в виде функции, которая в качестве аргумента должна принимать массив и возвращать массив после...

13
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
06.01.2015, 00:21
Цитата Сообщение от Gekr Посмотреть сообщение
//работает только если указана размерность массива x[5][4]
Достаточно второй размерности. А ты что хочешь? Если без размерности, то создавай массив динамически, передавай указатель на указатель.
0
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185
06.01.2015, 00:29  [ТС]
Хочу вводить размерность массива через вызов функции, а не напрямую через функцию. Чтобы значения row, col определяли размерность массива x в функции.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.01.2015, 00:49
Цитата Сообщение от Gekr Посмотреть сообщение
Чтобы значения row, col определяли размерность массива x в функции.
Это - избыточно.

Размер массива можно вывести автоматически.
Никакие дополнительные переменные для этого не нужны:
http://rextester.com/NLB67805

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
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
 
template<size_t R, size_t C>
int function (int (&x)[R][C])    
{
    int max = x[0][0];
    size_t maxelrownum = 0;
    for (size_t i = 1; i<R; ++i)
        for (size_t j = 1; j<C; ++j)
            if (x[i][j]>max)
                max = x[i][j],
                maxelrownum = i;
 
    for(size_t j=0; j<C; ++j)
            x[maxelrownum][j] = x[maxelrownum][j]*2;
 
    return x[maxelrownum][C-1];
 
}
 
template<size_t R, size_t C>
void view (const int (&x)[R][C])    
{
   for (size_t i = 1; i<R; ++i)
   {
       for (size_t j = 1; j<C; ++j)
           std::cout
               << std::setw(6)
               << std::left 
               << std::to_string(x[i][j])+", ";
       
       std::cout<< '\n';
   }
}
 
 
int main ()
{
    const int row = 5, col = 4;
    int mas[row][col] = {211, 2 , 3   , 4,
                         5  , 26, 7   , 8,
                         9  , 10, 1111, 12,
                         13 , 14, 15  , 16,
                         99 , 12, 252 , 0  };
    
 
    view(mas);
    std::cout<<"-----------------\n";
    function(mas);
 
    view(mas);
    std::cout<<"-----------------\n";
}
0
0 / 0 / 5
Регистрация: 05.01.2015
Сообщений: 46
06.01.2015, 00:55
Цитата Сообщение от Gekr Посмотреть сообщение
Подскажите пожалуйста, как задать размерность массива через вызов функции, где ошибка?
Нужно указывать размерность столбцов
0
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185
06.01.2015, 17:08  [ТС]
В задании использование библиотек и классов не разрешено. Я так понимаю, решить задачу можно только использовав динамический массив, как советовал lss
0
0 / 0 / 5
Регистрация: 05.01.2015
Сообщений: 46
06.01.2015, 17:13
Gekr, Как звучит условие задачи?
0
45 / 45 / 32
Регистрация: 01.10.2012
Сообщений: 185
06.01.2015, 17:42  [ТС]
Написать подпрограмму, которая будет увеличивать в два раза элементы строки в которой находится максимальный элемент.
Условие от преподавателя: подключение дополнительных библиотек, использование классов и т.д. запрещено.

Добавлено через 5 минут
Для двумерного массива...
0
0 / 0 / 5
Регистрация: 05.01.2015
Сообщений: 46
06.01.2015, 17:42
Можно сделать через статику, так и через динамику. Но в этой задачи я бы стал использовать динамику.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.01.2015, 17:47
Цитата Сообщение от Gekr Посмотреть сообщение
Для двумерного массива...
Цитата Сообщение от Nuckles Посмотреть сообщение
Можно сделать через статику, так и через динамику. Но в этой задачи я бы стал использовать динамику.
Поскольку на языке с++ не существует динамических массивов,
то через динамику эту задачу решить нельзя.

Так как в случае с динамикой двухмерный массив перестанет быть двухмерным,
и перестанет быть массивом, что является нарушением требований к задаче.
0
267 / 170 / 40
Регистрация: 25.08.2014
Сообщений: 1,087
Записей в блоге: 1
06.01.2015, 17:55
Чё за проблемы, ребята. Можно же возвращать значения через аргументы функции. А конструкция int x[4] - это именно тип int[4]. То что он неявно приводится к int* не значит что это одно и то же. А размер массива можно определять динамически в mingw, он такое позволяет.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.01.2015, 20:58
Цитата Сообщение от Enno Посмотреть сообщение
А размер массива можно определять динамически в mingw, он такое позволяет.
mingw позволяет вам gcc, который в качестве собственного расширения позволяет с99, который умеет variable length array

Итого: код не переносим, не по стандарту.

Другое дело, что размерность массива можно вывести автоматически, и с этим то как раз проблем нет.
Решение уже озвучено в #4 посту.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
06.01.2015, 21:15
Двумерный массив можно легко эмулировать через одномерный:
C++
1
2
3
4
5
6
7
void foo( int * x, const int r, const int c ) {
    for ( int i = 0; i < r; i++ ) {
        for ( int j = 0; j < c; j++ ) {
            x[i * c + j] = 123;
        }
    }
}
, где: c - ширина.
Так же стоит заметить, что индексация массивов в Си/С++ начинается с нуля.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
06.01.2015, 21:45
Лучший ответ Сообщение было отмечено Gekr как решение

Решение

Цитата Сообщение от Gekr Посмотреть сообщение
Я так понимаю, решить задачу можно только использовав динамический массив
Если без динамически создаваемого, то можно как предложил castaway:
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
#include <clocale>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <stdlib.h>
using namespace std;
 
 
int function (int* x, const int r, const int c)
{
    int max, i, maxelrownum = 0;
    max = x[0];
    for (i = 1; i<r; i++)
    {
        for (int j = 1; j<c; j++)
        {
            if (x[i * c + j] >max)
            {
                    max = x[i * c + j];
                    maxelrownum = i;
            }
        }
    }
    int j = 0;
    for( ; j<c; j++)
            x[maxelrownum * c + j] = x[maxelrownum * c + j] * 2;
 
    return x[maxelrownum * c + j];
 
}
 
int main ()
{
    const int row = 5, col = 4;
    int mas[row][col] = {{211, 2,3,4},
                         {5,26,7,8},
                         {9,10,1111,12},
                         {13,14,15,16},
                         {99, 12, 252, 0}};
 
    cout << function(mas[0], row, col) << endl;
}
Если с помощью динамически создаваемого массива, то здесь почитай: https://www.cyberforum.ru/post6856142.html
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.01.2015, 21:45
Помогаю со студенческими работами здесь

Возвращение массива из функции
Как вернуть массив из функции? double* Zapolnenie(string Name) { if (Name == &quot;A&quot;) { const int number1 = 10; double A; ...

Возвращение массива из функции
Почему такой код выводит массив корректно. int* Input() { int b = { 10,20,30 }; return b; } int main() {

Возвращение массива из функции
Нужно вернуть массив типа int из функции Как я понимаю сделать это можно только с помощью указателей У меня это получилось но так...

Возвращение многомерного массива из функции
Как вернуть многомерный массив из функции для обычного массива c использованием указателей это выглядит так void function(int*); //...

Возвращение из функции массива указателей
Здравствуйте. Мне нужно вернуть из функции массив указателей. Внутри функции создаю динамический массив указателей, в который помещаю...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru