Problem z przekazaniem wiersza macierzy do podfunkcji, prośba o sprawdzenie programu.

0

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:

  1. Oblicza sumę części rzeczywistych wszystkich elementów wektora ( przekazywane przez wskaźnik );
  2. Ilośc części urojonych w tym wektorze, które są ujemne ( przekazywane przez referencję );
  3. 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 );
	}
}

1

cpl( A[i] , n , &suma_re , ilosc );

0

Wielkie dzięki :) . Dodałem to A+i, bo miałem jakąś notatkę o tym, że samo A jest adresem pierwszego wiersza, a A+i to jest adres wiersza o indeksie i. Czy w podobny sposób można to zapisac czy to moje notatki są niedokładne?

1

Notatki są dobre, tylko zabrakło rzutowania, bo zapis A+1 zwrócił ci wskaźnik na tablicę 50-elementową, a nie wskaźnik na element.

1 użytkowników online, w tym zalogowanych: 0, gości: 1