Помогите Исправить Программку Чтобы Она Работала

victory

New member
04.11.2014
4
0
#1
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<conio.h>

using namespace std;

double sum(double **a,int n,int m)
{
double sum=0.0;
for(int i=0;i<m;i++)
{
sum+=a[n];
}
return sum;
}
int main()
{;
int n,m;
cin>>n>>m;
double **a;
a=new double*[10];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
cin>>a[j];
}
double min=sum(a,n,m);
for(int i=1;i<n;i++)
{
for(int j=1;j<m;j++)
if(min>sum(a,i,m))
{
min=sum(a,i,m);
}
cout<<"min="<<endl;
_getch();
return 0;
}







}
При компиляции ошибок нет(у меня).Но не работает. ^_^
Заранее спасибо.
 
W

Whatka

#2
Есть ошибки.
Вы создаёте двумерный массив,для него нужно выделять память дважды.
Если вам интересно я могу рассказать подробнее.

Ещё вы запрашиваете размерность массива(как я понял) n и m,а выделяете память под 10 элементов.

Для того чтобы лучше понять,что должен делать код пишите задание.
 

victory

New member
04.11.2014
4
0
#3
Есть ошибки.
Вы создаёте двумерный массив,для него нужно выделять память дважды.
Если вам интересно я могу рассказать подробнее.

Ещё вы запрашиваете размерность массива(как я понял) n и m,а выделяете память под 10 элементов.

Для того чтобы лучше понять,что должен делать код пишите задание.
Хочу,в смысле чтобы объяснили подробнее. ^_^
Вот задание:
Описать функцию , которая вычисляет сумму элементов k - го столбца действительной матрицы A = ( a[sub]ij[/sub] ) [sub]mn[/sub] размером m на n . Для данной действительной матрицы A размером m на n , используя функцию суммирования элементов столбца матрицы , найти номер столбца с минимальной суммой элементов .
 
W

Whatka

#4
C++:
//для чего были другие библиотеки подключен????
#include<iostream>
using namespace std;

double Sum(double **A, int N, int K)//N - строк , K - номер столбца,в которм хотим вычислять
{
double sum = 0.0;
for (int i = 0; i < N; i++)
sum += A[i][K];
return sum;
}

void main()
{
int N, M;
cout << "Put N and M:";
cin >> N >> M;
// тут всё понятно,считываем размерность в наши переменные.
//важно понимать,что матрица NнаM обычно подразумевает N строк и M столбцов 

double **A; // создаём указатель на указатель вещественного типа.

A = new double* [N];//Выделяем память под массив указателей
/*
для одномерного массива:
int *Mas = new int [size]; - значит выделяем size ячеек в памяти размерности int.
рисунок: 
[ int ]
[ int ]
[ int ]
[ int ]
...
[ int ]
size - штук
каждая ячейка фиксированной длины

у нас:
N ячеек,но каждая ячейка - это одномерный массив
[double*]
[double*]
...
[double*]
N - штук
размер каждой ячейки компилятор не знает,мы должны это задать
*/
for (int i = 0; i < N; i++)
{
A[i] = new double[M]; // теперь каждая наша ячейка - это M ячеек фиксированной длины - double
/*
[[double] [double] ... [double]] - M штук(столбцов в каждой строке)
[[double] [double] ... [double]]
...		 ...  ...	...
[[double] [double] ... [double]]
N -штук (строк в каждом столбце)
*/

for (int j = 0; j < M; j++)
{
cout << "Put [" << i << "][" << j << "] element:";
cin >> A[i][j];
}

}
//Индексация в массивах с 0!!


double min = 0;//нам нужен индекс,а не само значение.
for (int i = 1; i < M; i++) // ицкл по каждому столбцу
{
if (Sum(A, N, min) > Sum(A, N, i))
min = i;
}

for (int i = 0; i < N; i++)
{
cout << "\n";
for (int j = 0; j < M; j++)
cout << A[i][j] << "\t";
}

cout << "\n Index of row with min sum = " << min << endl;
}
//