0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 10
1

Ошибка в функции

09.12.2014, 16:02. Показов 589. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Функция написана для:
Путем перестановки элементов квадратной вещественной матрицы добиться того,
чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине — в позиции (2, 2),
следующий по величине — в позиции (3, 3) и т.д., заполнив таким образом всю главную диагональ.

Описание функции:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void sotr(double **a, int const n)
{
  int imax,jmax,k; 
  double max;
  double b[n]={0};
 
for (k= 0; k < n; k++)
{ 
    max=a[0][0]; imax=0;jmax=0;
for (int i= 0; i < n; i++) 
    for (int j= 0; j < n; j++) 
if (a[i][j] > a[imax][jmax])
{imax=i; jmax=j; max=a[i][j];}
  b[k]=max;
   a[imax][jmax]=a[k][k];
    a[k][k]=-9999;
}
for (k = 0; k< n; k++)
a[k][k]=b[k];
b[k]=max;  
}

Выводит 2 ошибки:
\project\zadanie5f.cpp(105) : error C2057: expected constant expression
\project\zadanie5f.cpp(105) : error C2466: cannot allocate an array of constant size 0

В чём проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2014, 16:02
Ответы с готовыми решениями:

Ошибка в функции.
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; int Nod(int a, int b, int r) { while(a != b) {...

Ошибка в функции
Помогите найти ошибку в фунциях. Сама программа без них работает правильно, ошибка в самих...

Ошибка в главной функции
Показывает такую ошибку, но запускается, пропуская меню, и переходит сразу к выполнению...

В чем ошибка в функции ?
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; void array (int *mass) { int q,w; for(q=0;q&lt;5;q++)...

4
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 13
09.12.2014, 16:10 2
Цитата Сообщение от Kolenoy Посмотреть сообщение
double b[n]={0};
во первых это одномерная матрица
double b[n,m]={{0.1,0.2,0.3},{0.4,2.5,1.1},{0.9,1.6,5.5}};
вот заполнена сразу
0
0 / 0 / 0
Регистрация: 01.10.2014
Сообщений: 10
09.12.2014, 16:16  [ТС] 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
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <math.h>
using namespace std;
 
/* 17 вариант
Путем перестановки элементов квадратной вещественной матрицы добиться того, 
чтобы ее максимальный элемент находился в левом верхнем углу, следующий по величине — в позиции (2, 2),
следующий по величине — в позиции (3, 3) и т.д., заполнив таким образом всю главную диагональ. 
 
Найти номер первой из строк, не содержащих ни одного положительного элемента. 
*/
 
void Print (double **a, int n);
int findstr(double **a, int n);
void sotr(double **a, int n);
 
int main()
 
{ 
 
const int n = 4; 
 
double a[n][n] = {{1.1, 0.2, 0.8, 0.4}, 
                  {-3.5, -0.4, -3.3, -3.2},
                  {-1.8, -1.7, -1.9, 9.8}, 
                  {-1.2, -2.3, 9, -4.5}};
 
 int i, j;
 double **B = new double *[n];
 for (i = 0; i < n; i++)
 B[i] = new double [n];
 for (i = 0; i < n; i++)
  for (j = 0; j < n; j++)
   B[i][j] = a[i][j];
Print (B, n);
 
int fstr = findstr(B,n);
 if(fstr) cout << "Number otricatelnoi stroki: " << fstr << endl;
 else cout << "String not" << endl;
 
 
/*Найти номер первой из строк, не содержащих ни одного положительного элемента
 
bool bl,t=true; 
for (i = 0; i < n; i++)
{ 
    bl=true;
for (j = 0; j < n; j++) 
if (a[i][j] > 0)   {bl=false;break;}
if(bl) 
{cout  <<"Nomer 1 otricatelnoi stroki:  " << i+1 << endl;t=false;break;} 
}
if(t)
 cout  << "Otricatelnoi stroki net" << '\n';
 
 */
 
/*ее максимальный элемент находился в левом верхнем углу, следующий по величине — в позиции (2, 2),
следующий по величине — в позиции (3, 3) и т.д., заполнив таким образом всю главную диагональ.*/
 
 
//Печать массива после сортировки
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++) 
cout << setw(6) << a[i][j];
cout << endl;
}
_getch(); 
return 0; 
 
}
 
void Print(double **a, int n)
 
{
 for (int i = 0; i < n; i++)
 {
  for (int j = 0; j < n; j++)
  cout << setw(6) << a[i][j];
  cout << endl;
 }
}
 
 
int findstr(double **a, int n)
{
  int fstr;
  bool bl,t=true; 
for (int i = 0; i < n; i++)
{ 
    bl=true;
for (int j = 0; j < n; j++) 
if (a[i][j] > 0)   {bl=false;break;}
if(bl) fstr = i;
}
 return fstr;
}
void sotr(double **a, int n)
{
  int imax,jmax,k; 
  double max;
  double b[n]={0};
 
for (k= 0; k < n; k++)
{ 
    max=a[0][0]; imax=0;jmax=0;
for (int i= 0; i < n; i++) 
    for (int j= 0; j < n; j++) 
if (a[i][j] > a[imax][jmax])
{imax=i; jmax=j; max=a[i][j];}
  b[k]=max;
   a[imax][jmax]=a[k][k];
    a[k][k]=-9999;
}
for (k = 0; k< n; k++)
a[k][k]=b[k];
b[k]=max;  
}
0
833 / 641 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
09.12.2014, 20:38 4
Цитата Сообщение от Kolenoy Посмотреть сообщение
\project\zadanie5f.cpp(105) : error C2057: expected constant expression
Похоже, что компилятор не собирается есть размер массива в переменной.

Цитата Сообщение от Kolenoy Посмотреть сообщение
в функцию двумерный массив помещается как несколько одномерных
Что?
Это как бы разные типы данных.
0
5 / 5 / 8
Регистрация: 06.12.2014
Сообщений: 27
09.12.2014, 20:53 5
Kolenoy,
C
1
2
3
4
5
6
void sotr(double **a, int const n)
{
...
  double b[n]={0}; // g++ такое съест, на счёт gcc не уверен. если твоя визуалка съест constexpr, то будет тебе счастье.
...
}
Выделяй динамически память или используй готовый контейнер, std::array, std::vector.
И, кажется, это c++, не c. Языки то разные.
0
09.12.2014, 20:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2014, 20:53
Помогаю со студенческими работами здесь

Ошибка табулирования функции
#include&lt;stdio.h&gt; #include&lt;conio.h&gt; void main() { int n; const float a=1, b=1.5; double x=a;...

Ошибка в функции asin
почему при любых значениях V и T выводит alpha=-1.#IND ?#include&lt;iostream&gt; #include&lt;cmath&gt; using...

Функции, где то ошибка
Переписал программку из книжки Керниган, а не работает и не пойму где ошибка #include...

Ошибка с аргументами функции
Программа: функция нахождения четных элементов массива. (функция делает преобразования). ...


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

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

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