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

Можно ли создать функцию, принимающую двумерный массив произвольного размера? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ С++ широкие символы http://www.cyberforum.ru/cpp-beginners/thread364650.html
Господа, здравствуйте! Дали мне в институте задание - написать консольное приложение, осуществляющее запись и чтение из txt файла. В ходе написания возникли проблемы с кирилицей, мне посоветовали...
C++ Создание объекта с помощью метода getInstance() Помогите написать тестовую программу: Создайте класс, из которого можно создать только один объект. • Создание объекта должено проходить через getInstance() метод, • Повторный "вызов"... http://www.cyberforum.ru/cpp-beginners/thread364646.html
C++ Целочисленный массив (SOS)
Дан целочисленный массив размера N. Вывести в начале все содержащиеся в данном массиве четные числа в порядке возрастания их индексов, а затем все нечетные числа в порядке убывания их индексов.
Циклы(С) C++
Здравствуйте,помогите мне пожалуйста с задачкой. В Одномерном массиве A(10) поменять местами элементы стоящие на чётных и нечётных местах, среди элементов расположенных до максимального.
C++ Для каждого числа в текстовом файле определить сумму его чисел http://www.cyberforum.ru/cpp-beginners/thread364611.html
В текстовом файле из 10 строк записаны построчно целые положительные числа. Для каждого числа определить сумму его цифр. Примечание: 1)имя текстового файла вводить с клавиатуры, 2)вывести на...
C++ Сколько в файле слов, состоящих из не более чем четырех букв Помогите пожалуйста написать программу на С. Написать программу, которая считывает текст из файла и определяет, сколько в нем слов, состоящих из не более чем четырех букв. подробнее

Показать сообщение отдельно
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136

Можно ли создать функцию, принимающую двумерный массив произвольного размера? - C++

11.10.2011, 15:34. Просмотров 2547. Ответов 4
Метки (Все метки)

Добрый вечер всем.
Я прочитал в книге в главе Передача двумерных массивов в функцию следующую вещь:
При передаче функции в качестве фактического параметра одномерного массива нет необходимости указывать количество его элементов. При передаче функции двумерных массивов необязательным является только количество строк, но количество столбцов должно указываться.
Я написал маленькую программку с тремя функциями:
1) Выводит массив на экран
2) Ищет максимальный элемент
3) Определяет сумму строк
Код:
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;
#include <stdio.h>
#include <conio.h> 
#include "D:\My documents\Программирование_Информатика\C++\26_2D_Array_in_function\max_elem.h"
#include "D:\My documents\Программирование_Информатика\C++\26_2D_Array_in_function\show_array.h"
#include "D:\My documents\Программирование_Информатика\C++\26_2D_Array_in_function\sum_strok.h"
int main() 
{       
    int array[3][4]={{1,99, 3, 4},
                     {5, 6, 7, 8},
                     {9,10,11,12}};
 
    show_array(array, 3); // Выводит массив на экран
    cout<<endl;
    max_elem(array, 3); //Ищет максимальный элемент
    cout<<endl<<endl;
    sum_strok(array, 3); //Определяет сумму строк
    cout<<endl;
        
    getch();  
    return 0; 
}
3 заголовочных файла:
C++
1
2
3
4
5
6
7
8
9
10
void show_array(int A[][4], int rows) 
{
    int i, j;
    for (i=0; i<rows; i++)
    {
        for (j=0; j<4; j++)
            printf("%3d", A[i][j]);
        cout<<endl;
    }
}
C++
1
2
3
4
5
6
7
8
void max_elem(int A[][4], int rows) 
{
    int i, j, max=0;
    for (i=0; i<rows; i++)
        for (j=0; j<4; j++)
            if (max<A[i][j]) max=A[i][j];
    cout<<"max elem = "<<max;
}
C++
1
2
3
4
5
6
7
8
9
10
11
void sum_strok(int A[][4], int rows) 
{
    int i, j, Sum; 
    for (i=0; i<rows; i++)
    {
        Sum=0;
        for (j=0; j<4; j++)
            Sum+=A[i][j];
        cout<<"Summa elementov stroki "<<i<<" = "<<Sum<<endl;
    }
}
Здесь все 3 функции написаны для матриц с 4 столбцами и произвольным количеством строк.
У меня возникла такая мысль. А вот я хочу написать функцию, которая подсчитывает сумму всех элементов произвольной матрицы, и чтобы потом заголовочный файл с этой функцией можно было включить в любой проект. Я так понял, что это сделать нельзя. Так как в каждой функции должно быть прописано количество столбцов массива. Но это так неудобно. Или я чего-то не понял?
В общем сформулирую вопрос:
Можно ли написать функцию, считающую сумму всех элементов матрицы с произвольным количеством как строк так и столбцов?

И заодно попутно второй маленький вопросик. Как тут видно, во всех трёх заголовочных файлах я использовал одни и те же переменные:
C++
1
int i, j, A[][4], rows;
Просто я подумал, что к функциям мы обращаемся здесь по очереди и поэтому одни и те же имена сойдут. Но в принципе то это правильно или всё же лучше в каждой функции свои новые буквы использовать? Например, в одной
C++
1
int i, j;
в другой:
C++
1
int a, b;
в третьей:
C++
1
int n, m;
Или всё равно? Как лучше?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.