25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
1

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

02.12.2010, 19:02. Показов 690. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет програмисты и просто форумчане. У меня есть проблема.
Учусь на первом курсе - задали задачку.

Извините мало пользовался терминологией. Дополнительные всмысле не 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: для индекса требуется массив или указатель
Вот так вот.
Подскажите как решить проблему? чтобы программа заработала правильно.
Вроде ничего не упустил. Если что-то непонятно. не проходите мимо спросите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2010, 19:02
Ответы с готовыми решениями:

Массивы в функциях
как объявить массивы чтобы их можно было использовать в функциях но не внося в сами функции,...

Массивы в функциях
напишите пожалуйста 2 программы для с++ 1) составить программу, которая все элементы массивов...

Табулирование функции и поиск данных. Одномерные массивы. Двумерные массивы
Вычислить сумму первых четырех отрицательных элементов. В соответствии с п. 5.16 правил...

Одномерные массивы в процедурах и функциях
Мне необходимо при помощи процедур и функций найти количество неотрицательных элементов, но вот...

3
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281
02.12.2010, 19:09 2
Попробуй в строке 33
C++
1
matr[i][j] = 1;
заменить на
C++
1
matr[i*n+j] = 1;
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
02.12.2010, 19:20  [ТС] 3
В первом варианте или во втором?

Добавлено через 2 минуты
Поменял во втором варианте.
Программа запустилась без проблем.
Попробую сделать сейчас полную программу
0
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281
02.12.2010, 19:21 4
33 строку замени на
C++
1
matr[i*n+j] = 1;
первая это твоё
0
02.12.2010, 19:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2010, 19:21
Помогаю со студенческими работами здесь

Массивы в функциях и заполнение случайными числами
#include &lt;iostream.h&gt; int zapolnenie(int x, int n); int pokaz(int x, int n); int summa(int x,...

Двумерные массивы
Добрый день! Будьте добры , помогите с двумя задачками. 1. а) заменить все элементы...

Двумерные массивы
Пожалуйста, помогите решить задачу. Завтра сдавать :help: Дана целочисленная прямоугольная матрица...

Двумерные массивы
Вычислить сумму элементов двумерного массива А размером MxN в одномерный массив В


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru