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

Статический двумерный массив - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.85
airone
0 / 0 / 0
Регистрация: 12.10.2010
Сообщений: 6
28.12.2010, 18:37     Статический двумерный массив #1
есть задача: заполнить матрицу и вывести её на экран, используя функции. вот что делаю:

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
//main.cpp
#include <iostream>
#include <conio.h>
using namespace std;
 
void vvod(int matr[10][10], int, int);
void vivod(int matr[10][10], int, int);
 
void main()
{
setlocale(LC_ALL,"rus");
int n=0;
int m=0;
cout<<"Введите  n"<<endl;
cin>>n;
 
cout<<endl<<"Введите m"<<endl;
cin>>m;
 
int matr[10][10];
cout<<endl<<"Введите матрицу построчно"<<endl;
vvod (matr[10][10], n, m);
 
cout<<endl<<"Ваша матрица"<<endl;
vivod (matr[10][10], n, m);
 
_getch();
}
 
//InOut.cpp
#include <iostream>
using namespace std;
 
void vvod(int matr[10][10], int n, int m)
{
  for (int i=0; i<n; i++) 
     for (int j=0; j<n; j++)
        cin>>matr[i][j];
}
 
void vivod(int matr[10][10], int n, int m)
{
   for (int i=0; i<n; i++) 
      { cout << "\n строка" << (i+1) << ":";
       for (int j=0; j<n; j++)
       cout<<"\t"<<matr[i][j];
      }
}
Результат:
error C2664: 'vvod' : cannot convert parameter 1 from 'int' to 'int [][10]'
error C2664: 'vivod' : cannot convert parameter 1 from 'int' to 'int [][10]'

Прекрасно понимаю, что в функцию я пытаюсь "передать" не пойми что. Но никак не могу понять, как это сделать правильно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2010, 18:37     Статический двумерный массив
Посмотрите здесь:

статический массив C++
C++ Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже -->
двумерный статический массив размером 5x5 C++
C++ создать статический массив строк как статический массив указателей на строки, задание ниже -->
C++ функция возвращает двумерный статический массив своего класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abyr
4 / 4 / 1
Регистрация: 23.12.2010
Сообщений: 27
28.12.2010, 18:48     Статический двумерный массив #2
дак если массив статический, то элементы должны задавать все изначально. разве нет? а если ты его сам вводишь с клавы, то уже динмамический надо задавать.
airone
0 / 0 / 0
Регистрация: 12.10.2010
Сообщений: 6
28.12.2010, 18:51  [ТС]     Статический двумерный массив #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
24
25
26
27
28
29
30
31
#include <iostream>
#include <conio.h>
using namespace std;
 
 
void main()
{
setlocale(LC_ALL,"rus");
int n=0;
int m=0;
cout<<"Введите  n"<<endl;
cin>>n;
 
cout<<endl<<"Введите m"<<endl;
cin>>m;
 
int matr[10][10];
cout<<endl<<"Введите матрицу построчно"<<endl;
  for (int i=0; i<n; i++) 
     for (int j=0; j<n; j++)
        cin>>matr[i][j];
 
cout<<endl<<"Ваша матрица"<<endl;
   for (int i=0; i<n; i++) 
      { cout << "\n строка" << (i+1) << ":";
       for (int j=0; j<n; j++)
       cout<<"\t"<<matr[i][j];
      }
 
_getch();
}
Serhiy:)
 Аватар для Serhiy:)
2 / 2 / 1
Регистрация: 09.10.2010
Сообщений: 72
28.12.2010, 18:54     Статический двумерный массив #4
Массив передается функции по ее адресу.
Неправильно vvod (matr[10][10], n, m);
Правильно vvod (matr, n, m);
airone
0 / 0 / 0
Регистрация: 12.10.2010
Сообщений: 6
28.12.2010, 22:54  [ТС]     Статический двумерный массив #5
заработало, благодарю.
о_О

Добавлено через 1 час 59 минут
всё, в статике с задачей справился.
Составить программу, которая получает матрицу А размером m*n и, если
среднеарифметическое число всех положительных элементов матрицы по
модулю меньше среднеарифметического числа ее отрицательных элементов, то
программа формирует новую матрицу, все строки которой упорядочены по
возрастанию.
//main.cpp
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
#include <iostream>
#include <conio.h>
using namespace std;
 
void vvod(float matr[10][10], int n, int m);
void vivod(float matr[10][10], int n, int m);
bool analysing(float matr[10][10], int m, int n);
void performing (float matr[10][10], int n, int m);
void copy(float matr[10][10], float matrNew[10][10], int n, int m);
 
void main()
{
  setlocale(LC_ALL,"rus");
  char pvt='1';
 
  while (pvt=='1') {
  int n=0;
  int m=0;
 
  cout<<"\nВведите  n:"<<endl;
  cin>>n;
 
  cout<<endl<<"Введите m:"<<endl;
  cin>>m;
 
  float matr[10][10];
  cout<<endl<<"Введите матрицу построчно:"<<endl;
  vvod (matr,n,m);
 
  if (analysing(matr,n,m)) {
     float matrNew[10][10];
     copy (matr, matrNew, n, m);
     performing (matrNew, n, m);
     cout<<endl<<"Ваша матрица:"<<endl;
     vivod (matrNew,n,m);
  }
  else cout<<endl<<"Матрица не сформирована!"<<endl;
 
  cout<<endl<<"\nПовторить? (1/0)"<<endl;
  pvt=_getch();
  } 
}
//InOut.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
void vvod(float matr[10][10], int n, int m)
{
  for (int i=0; i<n; i++) 
     for (int j=0; j<n; j++)
        cin>>matr[i][j];
}
 
void vivod(float matrNew[10][10], int n, int m)
{
   for (int i=0; i<n; i++) 
      { cout << "\n строка" << (i+1) << ":";
        for (int j=0; j<n; j++)
        cout<<"\t"<<matrNew[i][j];
      }
}
//processing.cpp
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
#include <iostream>
using namespace std;
 
bool analysing (float matr[10][10], int n, int m)//true если sredPos<sredNeg
{
float summPos=0, summNeg=0;
int kolPos=0, kolNeg=0;
 
for (int i=0; i<n; i++) 
{ for (int j=0; j<m; j++)
  {
     if (matr[i][j]>=0) {
       summPos=summPos+matr[i][j];
       kolPos++;
       } 
 
     else {
     summNeg=summNeg-matr[i][j];
     kolNeg++;
     }
  }
}
 
float sredPos=summPos/kolPos;
float sredNeg=summNeg/kolNeg;
 
if (sredPos < sredNeg)
  return true;
return false;
}
 
 
void copy(float matr[10][10], float matrNew[10][10], int n, int m)
{
  for (int i=0; i<n; i++) 
     for (int j=0; j<n; j++)
        matrNew[i][j]=matr[i][j];
}
 
 
void performing (float matrNew[10][10], int n, int m)//упорядочивание элементов строк
{  
   float x;
    for(int k=0; k < m; k++) {
     for(int i=0; i < n; i++) {         
       for(int j = n-1; j > i; j-- ) {     
         if ( matrNew[k][j-1] > matrNew[k][j] ) {
         x=matrNew[k][j-1]; matrNew[k][j-1]=matrNew[k][j]; matrNew[k][j]=x;
         }
       }
     }
   }    
}
теперь всё это добро надо переправить под динамическое распределение. дядьки, помогайте. ибо завтра последний срок, и если сам не осилю - будет мне

Добавлено через 1 час 54 минуты
up
Yandex
Объявления
28.12.2010, 22:54     Статический двумерный массив
Ответ Создать тему
Опции темы

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