Witam.
Na wstępie chciałbym przedstawic treśc programu:
Napisac funkcję, która służy do wprowadzania jednej liczby zespolonej. Napisac funkcję, która służy do wprowadzania zespolonych elementów macierzy. Napisac funkcje "cpl", która otrzymuje wektor o elementach zespolonych. Funkcja wyznacza trzy wyniki:
- Oblicza sumę części rzeczywistych wszystkich elementów wektora ( przekazywane przez wskaźnik );
- Ilośc części urojonych w tym wektorze, które są ujemne ( przekazywane przez referencję );
- Wyznaczyc średnią arytmetyczną modułów wszystkich elementów wektora ( funkcja zwraca tą wartośc );
W funkcji głównej utworzyc macierz A o elementach zespolonych i wymiarach mxn, wprowadzic elementy macierzy. Dla każdego wiersza macierzy (m) wywołac funkcję cpl, wyznaczyc te 3 wyniki i wypisac je na ekranie.
Teraz mam następujący problem: kompilator wyrzuca błąd:
60 35 ... [Error] cannot convert 'typ_zesp ()[50]' to 'typ_zesp' for argument '1' to 'float cpl(typ_zesp*, int, float*, int&)'
oraz
63 43 ... [Error] cannot convert 'typ_zesp ()[50]' to 'typ_zesp' for argument '1' to 'float cpl(typ_zesp*, int, float*, int&)'
Rozumiem, że to coś z przekazaniem wektora, który jest częścią macierzy? Mam utworzoną macierz a do funkcji chcę przekazac tylko jeden wiersz, robię to podając adres wiersza macierzy "A+i". Może tu jest coś niepoprawnie? Dodam, że korzstam z devC++. Proszę o pomoc.
#include <iostream>
#include <math.h>
using namespace std;
const int wmax = 50 , kmax = 50;
struct typ_zesp{ float Re; float Im; };
typ_zesp wprowadz_lz( )
{
typ_zesp dane;
cout << "Podaj Re: ";
cin >> dane.Re;
cout << "Podaj Im: ";
cin >> dane.Im;
return dane;
}
void wczytaj_macierz( typ_zesp macierz[][kmax] , int ile_w , int ile_k , char *nazwa )
{
int i , j;
for( i=0 ; j<ile_w ; i++ )
for( j=0 ; j<ile_k ; j++ )
{
cout << "Podaj " << nazwa << '[' << (i+1) << "][" << (j+1) << "]: ";
macierz[i][j] = wprowadz_lz();
}
}
float cpl( typ_zesp wektor[] , int ile , float *suma , int &ilosc_im )
{
int i;
*suma = 0;
for( i=0 ; i<ile ; i++ )
*suma += wektor[i].Re;
ilosc_im = 0;
for( i=0 ; i<ile ; i++ )
if( wektor[i].Im < 0 )
ilosc_im++;
float srednia;
srednia = 0;
for( i=0 ; i<ile ; i++ )
srednia += sqrt( wektor[i].Re * wektor[i].Re + wektor[i].Im * wektor[i].Im );
return srednia;
}
int main()
{
typ_zesp A[wmax][kmax];
int m , n;
cout << "Podaj ilosc wierszy <= " << wmax << endl;
cin >> m;
cout << "Podaj ilosc kolumn <= " << kmax << endl;
cin >> n;
wczytaj_macierz( A , m , n , "A" );
int i;
float suma_re;
int ilosc;
for( i=0 ; i<m ; i++ )
{
cpl( A+i , n , &suma_re , ilosc );
cout << "Suma Re w A[" << (i+1) << "]: " << suma_re << endl;
cout << "Ilosc Im < 0 w A[" << (i+1) << "]: " << ilosc << endl;
cout << cpl( A+i , n , &suma_re , ilosc );
}
}