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

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

Войти
Регистрация
Восстановить пароль
 
Shady_Don
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 36
#1

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

27.02.2014, 00:20. Просмотров 329. Ответов 9
Метки нет (Все метки)

В программе у меня много двумерных массивом разной размерности. Мне нужна одна функция (общая) чтобы работала на все массивы. Функция простая, просто выводит эл. массива на экран. Но она должна быть универсальная ( подходить ко всем не зависимо от размера массива) Это надо сделать как-то через указатели.

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;
    }
 }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 00:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Универсальная функция для приема разных двумерных массивов (C++):

Функция приема разных типов в классе - C++
Сразу скажу что надо. Есть функция pow(), так вот она принимает разные типы данных. У меня класс хочу сделать тоже самое. Подскажите как, я...

Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? - C++
Какие есть виды массивов (кроме одномерных, двумерных и двумерных ступенчатых массивов)? И почему такая вот запись является &quot;чуть&quot;...

Утечки памяти при использовании new/delete для двумерных массивов - C++
Добрый день. Суть в том, что есть несколько функций, получающих на вход и возвращающих двумерные массивы. Реализация передачи массивов...

Составить программу на языке C++ для обработки двумерных массивов с использованием указателей - C++
Составить программу на языке C++ для обработки двумерных массивов с использованием указателей. Очень срочно. Завтра экзамен.

Динамическое выделение памяти. Использование функций для обработки двумерных массивов - C++
не понимаю что делаю хотя задание такое 1.2. Постановка задачи Задача 1. Разработать алгоритм и программу выполняющую следующие...

Составить программу на языке C++ для обработки двумерных массивов с использованием указателей - C++
Дана матрица порядка n. Найти в последнем столбце max и min. Если в матрице есть нули, то заменить их суммой max и min последнего столбца. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6481 / 2256 / 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;
}
0
Shady_Don
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 36
27.02.2014, 01:34  [ТС] #3
void printar ( int (*a)[], int n , int m);

строка из учебника, она должна быть именно такой... можно как-то с этим сделать?
0
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 - кол-во ВСЕХ элементов массива
0
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); // неверно
0
programina
1914 / 599 / 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);
}
1
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.02.2014, 09:40 #7
Цитата Сообщение от programina Посмотреть сообщение
cout << m[i*x+j] << " ";
Тут должен быть y. А то для неквадратной будет работать неправильно.
2
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
27.02.2014, 09:56 #8
Тут должен быть y.
Точно.

ТС, поменяй там х на у, или кто-нибудь из модераторов отредактируйте мой пример пожалуйста. Мне тяжело исправлять потому что пишу с телефона.
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
27.02.2014, 10:11 #9
programina, исправлено.
2
Shady_Don
0 / 0 / 0
Регистрация: 27.07.2013
Сообщений: 36
27.02.2014, 23:25  [ТС] #10
Всем спасибо, задание выполнил без проблем, спасибо огромное. Последний вариант помог!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2014, 23:25
Привет! Вот еще темы с ответами:

Универсальная функция - C++
Напишите пожалуйста прогу.Написать универсальную функцию для вычислениия заданных выражений.В main() обеспечить вызов этой функции и...

Класс Matrix: реализовать шаблонный класс для двумерных массивов - C++
Доброго времени суток. У меня вопрос: я создал класс Array со внутренним динамическим массивом и объекты этого типа смог создать и я ими...

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

Универсальная функция получения числа через cin - C++
Пытался написать универсальную функцию для гарантированного получения числа нужного типа, примерно так: // Функция для безопасного...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.02.2014, 23:25
Ответ Создать тему
Опции темы

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