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

C++ Задача с использованием двумерных динамических массивов. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Stas
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
09.04.2012, 21:34     C++ Задача с использованием двумерных динамических массивов. #1
Собственно сабж.
Близится время сессии, начал потихоньку делать контрольные работы. Дошёл до программирования, думал справлюсь быстренько, т.к. ещё с колледжа неплохо разбирался в Delphi, да и задачки оказались весьма простыми. Если бы не одно большое НО, кодить разрешено только на С++, с которым я вообще не общался. На умные книжонки времени нет, т.к. работа, да и есть ещё контрольные по другим предметам. В общем покапался в инете, почитал несколько статей для чайников и с горем пополам 2 из 3 задач сделал. Третью никак не могу добить.

В общем условие таково:
Необходимо выполнить заданную обработку числового двумерного массива, имеющего произвольное количество строк (N) и столбцов (M). Элементы массива должны вводиться с клавиатуры.
Вычислить для каждой строки значение наименьшего элемента и его индекс. N ≤ 10, M ≤ 5.

В общем код, который наваял, выглядит так (ограничения на n и m не вводил, ибо пока просто захотел разобраться с массивами):
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
#include <iostream>
#include <conio.h>
using namespace std;
 
int main ()
{
  int i,j,n,m,max;
 
  cout << "Vvedite n: ";
  cin >> n;
  cout << "Vvdeite m: ";
  cin >> m;
  
  int **a = new int*[n];
  for(int i=1;i<n;i++)
        a[i]=new int [m];
 
  for (i=1;i<n;i++)
    {
      for (j=1;j<m;j++)
        {
         cout <<"a["<<i<<","<<j<<"]=";
         cin >> a[i][j];
        }
     }
  
  cout << "\n";
 
 
  for (i=1;i<n;i++)
    {
      max=a[i][1];
      for (j=1;j<m;j++)
       {
         if (a[i][j] > max)
             max = a[i][j];
        }
      cout << "Max element"<< i <<"-u ctroki:" << max;
    }
  _getch ();
}
В итоге при компиляции находится 1 ошибка:
fatal error LNK1169: обнаружен многократно определенный символ - один или более

и 1 предупреждение:
warning C4700: использована неинициализированная локальная переменная "a"

Сижу уже час и никак не пойму, что не нравится. Компилятор Visual Studio 2010. В общем, если несложно, подскажите где ошибка. Заранее благодарю за помощь)))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 21:34     C++ Задача с использованием двумерных динамических массивов.
Посмотрите здесь:

C++ с использованием динамических и двумерных массивов в С++
Разработка программ с использованием двумерных массивов C++
Программирование задач с использованием двумерных массивов C++
C++ Перемножение матриц с использованием динамических массивов
C++ Обработка двумерных массивов с использованием указателей
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
001_alex
9 / 13 / 1
Регистрация: 07.04.2012
Сообщений: 56
09.04.2012, 21:49     C++ Задача с использованием двумерных динамических массивов. #2
Выделяй двумерный массив n*m так :
C++
1
2
3
int** A=new int* [n];
A[0]=new int[n*m];
for(i=0; i<n; i++) A[i]=A[0]+i*m;
Его освобождение :
C++
1
2
delete[] A[0];
delete[] A;
Или вот так(как меня учили):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
      int i,j;
      int **A=new int* [*n];
     clrscr( );
     printf("Vvedite razmernost` -> ");
     scanf("%d", n);
       for (i=0; i<*n; i++)
          A[i]=new int [*n];
       for (i=0; i<*n; i++)
       for (j=0; j<*n; j++)
     {
        printf("\n A[%d][%d]=", i+1, j+1);
            scanf("%d", &A[i][j]);
     }
Stas
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
09.04.2012, 21:57  [ТС]     C++ Задача с использованием двумерных динамических массивов. #3
Цитата Сообщение от 001_alex Посмотреть сообщение
Выделяй двумерный массив n*m так :
C++
1
2
3
int** A=new int* [n];
A[0]=new int[n*m];
for(i=0; i<n; i++) A[i]=A[0]+i*m;
Его освобождение :
C++
1
2
delete[] A[0];
delete[] A;
Или вот так(как меня учили):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
      int i,j;
      int **A=new int* [*n];
     clrscr( );
     printf("Vvedite razmernost` -> ");
     scanf("%d", n);
       for (i=0; i<*n; i++)
          A[i]=new int [*n];
       for (i=0; i<*n; i++)
       for (j=0; j<*n; j++)
     {
        printf("\n A[%d][%d]=", i+1, j+1);
            scanf("%d", &A[i][j]);
     }
Премного благодарен за уточнение
Код подправил, ошибку убрал (если кому интересно, закрыл visual studio, открыл и создал новый пустой проект, код перенес из старого), задача работает. Я доволен)))

Спасибо ещё раз.
eji
116 / 116 / 6
Регистрация: 17.09.2010
Сообщений: 288
09.04.2012, 22:04     C++ Задача с использованием двумерных динамических массивов. #4
Stas,
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <conio.h>
#include <stdio.h>
 
using namespace std;
 
struct Item
{
    int value;
    int i;
    int j;
};
 
int main(int argc, char *argv[])
{
    cout << "Demo\n";
    int n = 10, m = 5;
    cout << "Input n: ";
    cin >> n;
    cout << "Input m: ";
    cin >> m;
    if(n > 10 || m > 5)
    {
        cout << "Not correct\n";
        system("pause");
        return 0;
    }
    int **a = new int*[n];
    for(int i = 0; i < n; i++)
    {
        a[i] = new int[m];
        for(int j = 0; j < m; j++)
        {
            cout << "Input a["
                 << i
                 << "]["
                 << j
                 << "]: ";
            cin >> a[i][j];
        }
    }
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            cout << a[i][j]
                 << "\t";
        }
        cout << endl;
    }
    for(int i = 0; i < n; i++)
    {
        Item item;
        item.value = a[i][0];
        item.i = i;
        item.j = 0;
        for(int j = 0; j < m; j++)
        {
            if(item.value > a[i][j])
            {
                item.value = a[i][j];
                item.i = i;
                item.j;
            }
        }
        cout << "a["
             << item.i
             << "]["
             << item.j
             <<"]: "
             << item.value
             << endl;
    }
    delete [] a;
    system("pause");
    return 0;
}
Stas
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 5
09.04.2012, 22:43  [ТС]     C++ Задача с использованием двумерных динамических массивов. #5
Цитата Сообщение от eji Посмотреть сообщение
C++
1
2
3
4
5
6
    if(n > 10 || m > 5)
    {
        cout << "Not correct\n";
        system("pause");
        return 0;
    }
Спасибо за дополнение
Yandex
Объявления
09.04.2012, 22:43     C++ Задача с использованием двумерных динамических массивов.
Ответ Создать тему
Опции темы

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