[C] Funkcje.

Michal99
Użytkownik
Użytkownik
Posty: 95
Rejestracja: 12 wrz 2010, o 17:27
Płeć: Mężczyzna
Podziękował: 49 razy

[C] Funkcje.

Post autor: Michal99 »

Witam.
Jako praca domowa wysłałem ten kod do nauczyciela. Został on zaliczony jednak z jednym zastrzeżeniem.
dlaczego funkcja ma trzy argumenty? "a" i "n"
powinny być zadeklarowane w funkcji
Nie mogę się z nim skontaktować, więc pytam was, czy może mi ktoś wyjaśnić o co chodzi?

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
float szereg(float n, float a, float N)
{
	a=0;
	for(n=1; n<=N; n++)
	a=a+1/(n*(n+1)*(n+2));

	return a;
}

int main(void)
{
	float n=0, suma=0.25, a=0, N;
	printf("Podaj liczbe wyrazow szeregu
");
	scanf("%f", &N);
	printf("Suma wynosi: %f%", szereg(n,a,N));
	printf("
");
	printf("Roznica dla 10 wyrazow wynosi: %f%", suma-szereg(n,a,N=10));
	printf("
");
	printf("Roznica dla 100 wyrazow wynosi: %f%", suma-szereg(n,a,N=100));
	printf("
");
	printf("Roznica dla 1000 wyrazow wynosi: %f%", suma-szereg(n,a,N=1000));
	printf("
");

	system("PAUSE");
	return 0;
}
@EDIT: Czy chodziło o coś takiego?

Kod: Zaznacz cały

float szereg(float N)
{
	float a=0, n;
	for(n=1; n<=N; n++)
	a=a+1/(n*(n+1)*(n+2));

	return a;
}
[...]
printf("Roznica dla 10 wyrazow wynosi: %f%", suma-szereg(N=10));
[...]
Ostatnio zmieniony 9 cze 2014, o 11:42 przez Michal99, łącznie zmieniany 1 raz.
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C] Funkcje.

Post autor: Ser Cubus »

Twoja funkcja powinna wyglądać tak:

Kod: Zaznacz cały

float szereg(float N)
{
   int a=0;
   for(int n=1; n<=N; n++)
         a=a+1/(n*(n+1)*(n+2));

   return a;
}
Zastanów się dlaczego
Michal99
Użytkownik
Użytkownik
Posty: 95
Rejestracja: 12 wrz 2010, o 17:27
Płeć: Mężczyzna
Podziękował: 49 razy

[C] Funkcje.

Post autor: Michal99 »

Właśnie tego nie rozumiem. Chodzi o to, że tylko parametr N przyjmuje wartości argumentu podawanego dalej w kodzie?
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C] Funkcje.

Post autor: Ser Cubus »

Chodzi o to, że zmienna 'a' zawsze na początku jest równa 0, zaś zmienna 'n' zawsze jest równa na początku 1. Argumenty funkcji to coś co musimy o obsłużyć, dane które przychodzą z zewnątrz. A po co przesyłać z zewnątrz coś co i tak znamy, co zawsze będzie miało taki sam stan początkowy?
Michal99
Użytkownik
Użytkownik
Posty: 95
Rejestracja: 12 wrz 2010, o 17:27
Płeć: Mężczyzna
Podziękował: 49 razy

[C] Funkcje.

Post autor: Michal99 »

Rozumiem, dzięki za pomoc.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10218
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2361 razy

[C] Funkcje.

Post autor: Dasio11 »

Ale nie int a, tylko float a.
Michal99
Użytkownik
Użytkownik
Posty: 95
Rejestracja: 12 wrz 2010, o 17:27
Płeć: Mężczyzna
Podziękował: 49 razy

[C] Funkcje.

Post autor: Michal99 »

Dzięki wielkie za pomoc. Zgłaszam kolejny problem z inną funkcją.

Kod: Zaznacz cały

include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 6
int trzy(int tab[])
{
	int a=0, b=0;
	for(int i=0; i<N; i++)
	{
		if(tab[i]>0)
			a++;
		if(tab[i]<0)
			b++;
	}
	printf("%f    %f", a, b);
	if(a==b)
		return 0;
	if(a>b)
		return 1;
	if(a<b)
		return -1;
}  
int main(void)
{
	int tab[N];

	srand(time(NULL));
	for(int i=0; i<N; i++)
	{
		tab[i]=rand()%19- 9;
		printf("%3d",tab[i]);
	}
	printf("
");

	printf("%f", trzy(tab));
	printf("
");
	
	
	system("PAUSE");
	return 0;
}
Dlaczego a i b wynoszą zawsze 0? Próbowałem również zrobić to, gdy generowanie liczb do tablicy było w funkcji, efekt był ten sam. Nie mogę zrobić tego w jednej funkcji. Powinienem wstawić do funkcji "trzy" generowanie liczb?
gryxon
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 30 gru 2011, o 02:21
Płeć: Mężczyzna
Lokalizacja: Puławy
Podziękował: 11 razy
Pomógł: 53 razy

[C] Funkcje.

Post autor: gryxon »

W tej linijce szukaj błędu:

Kod: Zaznacz cały

printf("%f    %f", a, b);
Podpowiedź:
Ukryta treść:    
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C] Funkcje.

Post autor: Ser Cubus »

zamień też #define na const int
Michal99
Użytkownik
Użytkownik
Posty: 95
Rejestracja: 12 wrz 2010, o 17:27
Płeć: Mężczyzna
Podziękował: 49 razy

[C] Funkcje.

Post autor: Michal99 »

Jeżeli tylko o to chodziło, funkcja dobrze zlicza liczby ujemne i dodanie, ale dlaczego przy sprawdzaniu warunków ciągle zwraca mi zero?
gryxon
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 30 gru 2011, o 02:21
Płeć: Mężczyzna
Lokalizacja: Puławy
Podziękował: 11 razy
Pomógł: 53 razy

[C] Funkcje.

Post autor: gryxon »

Wcale, że nie zwraca ciągle zero.
Ukryta treść:    
Michal99
Użytkownik
Użytkownik
Posty: 95
Rejestracja: 12 wrz 2010, o 17:27
Płeć: Mężczyzna
Podziękował: 49 razy

[C] Funkcje.

Post autor: Michal99 »

Załapałem już dlaczego idąc na zajęcia. Tyle problemów przez nieuwagę. Dzięki za pomoc.
ODPOWIEDZ