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

Универсальная функция для приема разных двумерных массивов - C++

Восстановить пароль Регистрация
 
Shady_Don
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 36
27.02.2014, 00:20     Универсальная функция для приема разных двумерных массивов #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
void printar ( int (*a)[], int n , int m);  // обьявил прототип.
 
 
void main()
{   
    int b[3][4] = { {2,7,5,6}, {3,0,8,3}, {0,5,0,0}};  // к примеру такой массив дан
 
 
        printar ( (*b)[],3,4);  // вызываю функцию и что тут писать? как ставить массив именно b? ТУТ ОШИБКА
 
getchar();
}
 
 void printar( int (*a)[], int n , int m)  // собственно сама функция
 {
     for (int i=0; i < n; i++)  // цикл выводящий массив
    {
        for (int j=0; j < m; j++)
        {
            cout << " " << *(*(b+i)+j) ;  // тут тоже неверно, но я пока не разбирался в этом..
        }
        cout << endl;
    }
 }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 00:20     Универсальная функция для приема разных двумерных массивов
Посмотрите здесь:

Универсальная функция C++
Универсальная функция получения числа через cin C++
C++ Подсчитать для двух массивов количество разных по значению элементов
C++ Составить программу на языке C++ для обработки двумерных массивов с использованием указателей
Составить программу на языке C++ для обработки двумерных массивов с использованием указателей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.02.2014, 01:19     Универсальная функция для приема разных двумерных массивов #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template<size_t rows, size_t columns>
void printar(int (&a)[rows][columns])
{
    for (int i=0; i < rows; ++i)
    {
        for (int j=0; j < columns; ++j)
        {
            std::cout<<" "<<a[i][j];
        }
        std::cout<<std::endl;
    }
}
 
int main()
{   
    int b[3][4] = {{2,7,5,6}, {3,0,8,3}, {0,5,0,0}};
    printar(b);
    return 0;
}
Shady_Don
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 36
27.02.2014, 01:34  [ТС]     Универсальная функция для приема разных двумерных массивов #3
void printar ( int (*a)[], int n , int m);

строка из учебника, она должна быть именно такой... можно как-то с этим сделать?
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
27.02.2014, 01:34     Универсальная функция для приема разных двумерных массивов #4
Если доступ через указатели,то:
C++
1
cout << *(*b+i) ;//b - это твой "массив" , а i меняется от 0 до n-1,где n - кол-во ВСЕХ элементов массива
Shady_Don
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 36
27.02.2014, 01:39  [ТС]     Универсальная функция для приема разных двумерных массивов #5
но я не могу засунуть массив в функцию?

если обьявляю
void printar ( int (*a)[], int n , int m);

то как бы я ни вызывал функцию будет ошибка

printar ( *b,3,4); // неверно
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
27.02.2014, 08:57     Универсальная функция для приема разных двумерных массивов #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
#include <iostream>
using namespace std;
 
void foo(int *m, int x, int y)
{
    for (int i=0; i<x; i++)
    {
      for (int j=0; j<y; j++)
      {
        cout << m[i*y+j] << " ";
      }
      cout << endl;
    }
}
 
int main()
{
  int m[3][3] = { 
    {1,2,3}, 
    {4,5,6}, 
    {7,8,9} 
  };
 
  foo((int *)m, 3, 3);
}
Vourhey
Почетный модератор
6469 / 2244 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.02.2014, 09:40     Универсальная функция для приема разных двумерных массивов #7
Цитата Сообщение от programina Посмотреть сообщение
cout << m[i*x+j] << " ";
Тут должен быть y. А то для неквадратной будет работать неправильно.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
27.02.2014, 09:56     Универсальная функция для приема разных двумерных массивов #8
Тут должен быть y.
Точно.

ТС, поменяй там х на у, или кто-нибудь из модераторов отредактируйте мой пример пожалуйста. Мне тяжело исправлять потому что пишу с телефона.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,334
Завершенные тесты: 1
27.02.2014, 10:11     Универсальная функция для приема разных двумерных массивов #9
programina, исправлено.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 23:25     Универсальная функция для приема разных двумерных массивов
Еще ссылки по теме:

C++ Утечки памяти при использовании new/delete для двумерных массивов
C++ Функция приема разных типов в классе
C++ Универсальная функция считывания переменных из бинарного файла

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

Или воспользуйтесь поиском по форуму:
Shady_Don
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 36
27.02.2014, 23:25  [ТС]     Универсальная функция для приема разных двумерных массивов #10
Всем спасибо, задание выполнил без проблем, спасибо огромное. Последний вариант помог!
Yandex
Объявления
27.02.2014, 23:25     Универсальная функция для приема разных двумерных массивов
Ответ Создать тему
Опции темы

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