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

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

Восстановить пароль Регистрация
 
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
02.12.2010, 19:02     Двумерные массивы в дополнительных функциях. #1
Привет програмисты и просто форумчане. У меня есть проблема.
Учусь на первом курсе - задали задачку.

Извините мало пользовался терминологией. Дополнительные всмысле не main, а те которые мы пишем руками
Например (НАПРИМЕР!!!!)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h" 
void InArr(int *mas, int size) { /* описываем функцию и определяем тут же */
for(int i = 0; i < size; i++) {
scanf("%d", &mas[i]);
}
}
void OutArr(int *mas, int size) { 
for(int i = 0; i < size; i++) {
printf("%d ", mas[i]);
}
 
main (void) {
const int size = 10;
int mas[size];
InArr(mas, size); /* подключаем функцию в главную программу. передаем значения mas и size */
OutArr(mas, size);
return 0;
}
main главная функция.
InArr и OutArr доп. функции(операции, подпрограммы и тд)

Итак, пример выше. Это программа для ввода массива и вывода его. Прекрасно работает в моей среде программирование. VS 2010.

В главной функции пишем InArr(mas, size). Тоесть передаем значения mas и size.

В моем случае двумерный массив.
Ввод и вывод написать легко.
Но как описать функцию InMatr или OutMatr ?
Сами программы написать легко.
Но вот описать не могу. Тоесть так же как и в примере не могу понять что передать и как описать подпрограмму.

Еще раз извиняюсь, если вы меня не понимаете, отпишитесь - я объясню. Мало пользуюсь терминологией, поэтому вы, опытные програмисты можете меня не понять)

Как я пытался разрулить проблему.
Есть код.

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
// Лабораторная работа 6 Задание 2.cpp: ввести массив. посчитать среднее арифметическое всех элементов лежащих на главной диагонали
// Программа не доделана, не обращайте внимание на FindSUM.
 
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void InMatr(int *, int n, int m);
void OutMatr(int *, int, int);
// int FindSUM(int **, int, int);
 
 
int main(void) {
    const int n = 8, m = 8;
    int matr[n][m];
 
        InMatr(&matr[0][0], n, m); //функции передаем адрес n 0 m 0.
    printf("Out Massive:: \n\t");
    OutMatr(&matr[0][0], n, m); //функции передаем адрес n 0 m 0.
 
        //на следующие 2 строки не обращаем внимания
        //int result = FindSUM(&matr[0][0], n, m);
    //printf("\n\nSUM:\t %d \n", result);
 
    return 0;
}
 
/* обратите внимание на аргументы функции. int **matr */
void InMatr(int **matr, int n, int m) {
    srand(unsigned(time(NULL)));
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            matr[i][j] = 1;
        }
    }
}
 
/* обратите внимание на аргументы функции. int **matr */
void OutMatr(int **matr, int n, int m) {
    for(int i = 1; i < n; i++) {
        for(int j = 1; j < m; j++) {
            printf("%3d\t", *(matr + i * n + j)); 
            if( (j + 1)  % 8 == 0) {
                printf("\n\t"); 
            }
        }
    }
}
При компиляции ошибок нет.
Когда нажимаю "Отладка -> Начать без отладки" вылетает окошко. При компиляции произошли ошибки. Продолжить? Нажимаем нет и смотрим ошибку. Ошибка такая.
Код
1>Лабораторная работа 6 Задание 2.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl OutMatr(int *,int,int)" (?OutMatr@@YAXPAHHH@Z) в функции _main
1>Лабораторная работа 6 Задание 2.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl InMatr(int *,int,int)" (?InMatr@@YAXPAHHH@Z) в функции _main
1>C:\Users\Vlad\documents\visual studio 2010\Projects\Лабораторная работа 6 Задание 2\Debug\Лабораторная работа 6 Задание 2.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
Или же поменяем код немного.
Обратим внимание на эти же строки.

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
// Лабораторная работа 6 Задание 2.cpp: ввести массив. посчитать среднее арифметическое всех элементов лежащих на главной диагонали
// Программа не доделана, не обращайте внимание на FindSUM.
 
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void InMatr(int *, int n, int m);
void OutMatr(int *, int, int);
// int FindSUM(int **, int, int);
 
 
int main(void) {
    const int n = 8, m = 8;
    int matr[n][m];
 
        InMatr(&matr[0][0], n, m);//функции передаем адрес n 0 m 0.
    printf("Out Massive:: \n\t");
    OutMatr(&matr[0][0], n, m);//функции передаем адрес n 0 m 0.
 
    //int result = FindSUM(&matr[0][0], n, m);
    //printf("\n\nSUM:\t %d \n", result);
 
    return 0;
}
/* обратим внимание на эту строку и на int *matr */
void InMatr(int *matr, int n, int m) {
    srand(unsigned(time(NULL)));
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            matr[i][j] = 1;
        }
    }
}
 
/* обратим внимание на эту строку int *matr */
void OutMatr(int *matr, int n, int m) {
    for(int i = 1; i < n; i++) {
        for(int j = 1; j < m; j++) {
            printf("%3d\t", *(matr + i * n + j)); 
            if( (j + 1)  % 8 == 0) {
                printf("\n\t"); 
            }
        }
    }
}
Компилятор(напомню VS 2010) выдает ошибку. При компиляции
Код
1>c:\users\vlad\documents\visual studio 2010\projects\лабораторная работа 6 задание 2\лабораторная работа 6 задание 2\лабораторная работа 6 задание 2.cpp(32): error C2109: для индекса требуется массив или указатель
Вот так вот.
Подскажите как решить проблему? чтобы программа заработала правильно.
Вроде ничего не упустил. Если что-то непонятно. не проходите мимо спросите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2010, 19:02     Двумерные массивы в дополнительных функциях.
Посмотрите здесь:

Двумерные массивы C++
двумерные массивы C++
Двумерные массивы в С++ C++
C++ Двумерные массивы в с++
массивы в функциях C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
02.12.2010, 19:09     Двумерные массивы в дополнительных функциях. #2
Попробуй в строке 33
C++
1
matr[i][j] = 1;
заменить на
C++
1
matr[i*n+j] = 1;
VladSharikov
 Аватар для VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824
02.12.2010, 19:20  [ТС]     Двумерные массивы в дополнительных функциях. #3
В первом варианте или во втором?

Добавлено через 2 минуты
Поменял во втором варианте.
Программа запустилась без проблем.
Попробую сделать сейчас полную программу
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
02.12.2010, 19:21     Двумерные массивы в дополнительных функциях. #4
33 строку замени на
C++
1
matr[i*n+j] = 1;
первая это твоё
Yandex
Объявления
02.12.2010, 19:21     Двумерные массивы в дополнительных функциях.
Ответ Создать тему
Опции темы

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