Problem z deklaracja funkcji

0

Witam, jestem poczatkujacym programista w C, mam problem z deklaracja funkcji, mianowicie chodzi o wynik = sum(tab,size,suma); Nie rozumiem jak mam to zadeklarowac, nie jestem pewien czy do konca dobrze napisalem funkcje, ale chyba tak. Za to od kilku h mecze sie co wpisac jako trzeci argument w funkcji sum( , , ). Z gory bardzo dziekuje za pomoc.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int sum(const float* tab, unsigned int size, float *result);
int avg(const float* tab, unsigned int size, float *result);


int main()
{
	int i, size = 0;
	 float tab[100];
	 float *wsk;
	 wsk = tab;
	 int wynik;
	

	
	printf("Podaj liczby:\n");
	
	
	for(i=0; i<100; i++)
		{
			scanf("%f", &*(wsk+i));
			
			if(*(tab+0) == 0)
			{
				printf("Error");
				exit(1);
			}
			size++;
			
			if(*(tab+i) == 0)
			{
				size--;
				break;
			}	
		}exit(0);
	
		wynik = sum(tab,size,suma);
		printf("%0.2f\n", suma);
		
}

int sum(const float* tab, unsigned int size, float *result)
	{
		int i;
		float suma;
		
		*result = 0;
		for(i=0; i<size; i++)
			{
				*result += tab[i];
			}
			if(result==0)
				return 1;
				suma = *result;
		return *result;
	}
	
int avg(const float* tab, unsigned int size, float *result)
	{
		int i;
		
		result = 0;
		for(i=0; i<size; i++)
			{
				*result += tab[i]/size;
			}
			if(result==0)
				return 1;
		return *result;
	}
0

Dlaczego nie zwrócisz normalnie wyniku tylko chcesz tam przekazywać wskaźnik?

0

Bo mam tak narzucone ze funkcje musza tak wygladac :

int sum(const float* tab, unsigned int size, float *result);
int avg(const float* tab, unsigned int size, float *result);
0

Czym jest wynik? Jaka jest treść zadania?

0
40	35
[Error] cannot convert 'float' to 'float*' for argument '3' to 'int avg(const float*, unsigned int, float*)'
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int sum(const float* tab, unsigned int size, float *result);
int avg(const float* tab, unsigned int size, float *result);


int main()
{
	int i, size, suma, srednia;
	float tab[100];
	float *result;
	float *wsk;
	wsk = tab;

	
	printf("Podaj liczby:\n");
		
	for(i=0; i<100; i++)
		{
			scanf("%f", &*(wsk+i));
			
			if(*(tab+0) == 0)
			{
				printf("Error");
				exit(1);
			}
			size++;
			
			if(*(tab+i) == 0)
			{
				size--;
				break;
			}	
		}exit(0);
	
		
		suma = sum(tab, size, *result);
		srednia = avg(tab, size, *result);
		printf("Suma : %0.2f\n", suma);
		printf("Srednia : %0.2f\n", srednia);
		
}

int sum(const float* tab, unsigned int size, float *result)
	{	
		unsigned int i;
		*result = 0;

		for(i=0;i<size;i++)
		{
    		*result +=*(tab+i);
		}
		if(*result==0)
			return 0;
		return 1;
	}
	
	
int avg(const float* tab, unsigned int size, float *result)
	{
		unsigned int i;
		*result = 0;
		
		for(i=0; i<size; i++)
		{
			*result += *(tab+i)/size;
		}
		if(*result==0)
			return 0;
		return 1;
	}
0
int main() {
//...
   float result;
   float *wsk;
   wsk = tab;

//...

   suma = sum(tab, size, &result);
   srednia = avg(tab, size, &result);
//...
}

https://4programmers.net/C/Przekazywanie_parametru_przez_warto%C5%9B%C4%87_i_referencj%C4%99

0

Juz napisalem i wszystko dziala, dzieki !

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int sum(const float* tab, unsigned int size, float *result);
int avg(const float* tab, unsigned int size, float *result);


int main()
{
	int i;
	unsigned int size = 0;
	float tab[100];
	float suma, srednia;
	float *wsk;
	wsk = tab;

	
	printf("Podaj liczby:\n");
		
	for(i=0; i<100; i++)
		{
			scanf("%f", &*(wsk+i));
			
			if(*(tab+0) == 0)
			{
				printf("Error");
				exit(1);
			}
			size++;
			
			if(*(tab+i) == 0)
			{
				size--;
				break;
			}	
		}
	
		sum(tab, size, &suma);
		avg(tab, size, &srednia);
	
		printf("Suma : %0.2f\n", suma);
		printf("Srednia : %0.2f\n", srednia);
		
	return 0;
}

int sum(const float* tab, unsigned int size, float *result)
	{	
		if(tab == NULL) return 0;
		if(result==NULL) return 0;
		unsigned int i;
		*result = 0;

		for(i=0;i<size;i++)
		{
    		*result +=*(tab+i);
		}
	
		
		return 1;
	}
	
	
int avg(const float* tab, unsigned int size, float *result)
	{
		if(tab == NULL) return 0;
		if(result==NULL) return 0;
		unsigned int i;
		*result = 0;
		
		for(i=0; i<size; i++)
		{
			*result += *(tab+i)/size;
		}
		
			
		return 1;
	}











0

Na marginesie - lepiej byłoby:

for(i = 0; i < size; i++) {
    *result += tab[i];
}

*result /= size;

Dzięki temu uzyskasz większą precyzję (ponieważ dzielenie nastepuje na końcu).

0
Patryk27 napisał(a):

Na marginesie - lepiej byłoby:

for(i = 0; i < size; i++) {
    *result += tab[i];
}

*result /= size;

Dzięki temu uzyskasz większą precyzję (ponieważ dzielenie nastepuje na końcu).

Precyzja chyba będzie taka sama (@wall by pewnie wiedział :)), ale złożoność u @Patryk27 jest lepsza, bo dzielisz raz, nie size razy.

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