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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция сцепления строк http://www.cyberforum.ru/cpp-beginners/thread202198.html
Необходимо добавить в строковый класс функцию сцепления строк, используя перегрузку бинарного оператора +, функцию пересечения строк (то есть общие символы для двух строк), используя перегрузку...
C++ Указатель на массив списков здравствуйте.не очень понятна одна вещь-указатель на массив списков.т.е. пытаюсь сделать вот так ITEM table=new ITEM; и всевозможные комбинации этого, но мне надо оращаться к этому массиву так :... http://www.cyberforum.ru/cpp-beginners/thread202194.html
только начала С++ Borland C++
нужно сотавить программу ,которая позволит определить возможность существования треугольника по сторонам.(использовать формулу герона)
Создать новый массив, содержащий только те элементы, которые встрачаются в исходном один раз C++
имеется массив из 4-х элементов. создать новый массив,содержащий только те элементы,которые в предыдущем встречаются один раз.
C++ Упорядочить матрицу(borland(cи)) http://www.cyberforum.ru/cpp-beginners/thread202170.html
Упорядочить строки матрицы m * n в порядке возрастания элементов в главной диагонали. Матрица вводится и выводится в главной программе. Составление выполнить с помощью функции.
C++ Работа со строками Подскажите пожалуйста как реализовать следущие методы в классе: Вставка подстроки по позиции Замена(передается две строки-что заменить и на что заменить) Спасибо! подробнее

Показать сообщение отдельно
VladSharikov
22 / 22 / 1
Регистрация: 02.12.2010
Сообщений: 824

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

02.12.2010, 19:02. Просмотров 363. Ответов 3
Метки (Все метки)

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

Извините мало пользовался терминологией. Дополнительные всмысле не 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru