[C] Tablice w funkcji

intelcan
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 17 sty 2015, o 11:57
Płeć: Mężczyzna
Lokalizacja: abc

[C] Tablice w funkcji

Post autor: intelcan »

Witam. Mam takie niby proste zadanie ale nie moge go ogarnąć. Bez funkcji bez problemu mi sie udaje to zadanie zrobić a już jak mam to w funkcji ułożyć to jest problem.

Mam zrobić funkcje która która obliczy i zwróci sumę liczb dodatnich z tablicy o rozmiarze n.W main ma być aby wprowadzenie danych i wyświetlenie wyniku. Tak w sumie to nie wiem czy dobrze to zacząłem robić i nie wiem czemu mi jakieś dziwne wyniki wychodzą (jak wpisze 3 i 4 do tablicy to sume mam 9). Bardzo byłbym wdzięczny za pomoc

Tu jest to co zrobiłem:

Kod: Zaznacz cały

float S(int A[],int n)
{   float suma;
    int i;
    if(A[i]>0)
	suma=suma+A[i];
	return(suma);
}


int main(int argc, char *argv[]) {
	int n,i;
	printf("Podaj ilosc liczb:");
	scanf("%d", &n);
	
	int A[n];
	float suma=0;
	
	printf("Podaj liczby:");
	for(i=0; i<n; i++)
	{
		scanf("%d", &A[i]);
	    S(A,n);
	}
	printf("Suma jest rowna %f", S(A,n));
	return 0;
}
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] Tablice w funkcji

Post autor: miki999 »

Na początek:

1. W funkcji S indeksujesz tablicę po niezainicjalizowanej zmiennej i nie używasz drugiego przekazanego parametru.
2. Działasz na intach czy floatach?
3. Funkcja S coś zwraca, jednak nijak nie widać, abyś korzystał z rezultatu.

Aha i kompilatory zwracają warningi, które są pomocną wskazówką
intelcan
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 17 sty 2015, o 11:57
Płeć: Mężczyzna
Lokalizacja: abc

[C] Tablice w funkcji

Post autor: intelcan »

miki999 pisze:
1. W funkcji S indeksujesz tablicę po niezainicjalizowanej zmiennej i nie używasz drugiego przekazanego parametru.
Ma sie rozumieć że ta niezainicjalizowana zmienna to zmienna "i" ? I drugie pytanie gdzie mam tą zmienną zainicjalizować? Narazie znam podstawy języka C także jak można to bym prosił o bardziej łopatologiczne wytłumaczenie.

Co do warningów to właśnie nie mam żadnych warningów
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Tablice w funkcji

Post autor: kalwi »

Kod: Zaznacz cały

float S(int A[],int n)
{   float suma;
    int i;
    if(A[i]>0)
   suma=suma+A[i];
   return(suma);
}
który element tablicy A teraz będzie sprawdzany wg Ciebie?
intelcan
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 17 sty 2015, o 11:57
Płeć: Mężczyzna
Lokalizacja: abc

[C] Tablice w funkcji

Post autor: intelcan »

kalwi pisze:

Kod: Zaznacz cały

float S(int A[],int n)
{   float suma;
    int i;
    if(A[i]>0)
   suma=suma+A[i];
   return(suma);
}
który element tablicy A teraz będzie sprawdzany wg Ciebie?
Będzie sprawdzany element o indexie równym zmiennej "i" w pętli.... a przynajmniej tak starałem się napisać ale chyba coś mi nie wyszło
Awatar użytkownika
jarzabek89
Użytkownik
Użytkownik
Posty: 1337
Rejestracja: 11 lis 2007, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 4 razy
Pomógł: 181 razy

[C] Tablice w funkcji

Post autor: jarzabek89 »

No tak to nie działa.
Musisz dodać do funkcji parametr i(i nie tylko, co kolega wyżej wspomniał)
Drugie, tak nie można tworzyć tablic dynamicznych.

W C++ to by wyglądało mniej więcej tak:
Ukryta treść:    
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[C] Tablice w funkcji

Post autor: Vardamir »

Taki jest wymóg, żeby robiła to funkcja? Bo nie jest tu potrzebna, tablica zresztą też nie. Można to liczyć "w locie" podczas wczytywania.
intelcan pisze:Będzie sprawdzany element o indexie równym zmiennej "i" w pętli.... a przynajmniej tak starałem się napisać ale chyba coś mi nie wyszło
Ale Ty nigdzie nie mowisz ile ten i wynosi.
intelcan pisze:Co do warningów to właśnie nie mam żadnych warningów
Kompiluj z flaga -w to dostaniesz.
intelcan
Użytkownik
Użytkownik
Posty: 11
Rejestracja: 17 sty 2015, o 11:57
Płeć: Mężczyzna
Lokalizacja: abc

[C] Tablice w funkcji

Post autor: intelcan »

Vardamir pisze:Taki jest wymóg, żeby robiła to funkcja? Bo nie jest tu potrzebna, tablica zresztą też nie. Można to liczyć "w locie" podczas wczytywania.
intelcan pisze:Będzie sprawdzany element o indexie równym zmiennej "i" w pętli.... a przynajmniej tak starałem się napisać ale chyba coś mi nie wyszło
Ale Ty nigdzie nie mowisz ile ten i wynosi.
intelcan pisze:Co do warningów to właśnie nie mam żadnych warningów
Kompiluj z flaga -w to dostaniesz.
To że można to zrobić bez funkcji i bez tablic to ja wiem. Ale właśnie mam zrobić to w funkcji i nie wiem właśnie jak to zrobić.

Druga sprawa. To gdzie to i mam wstawić w funkcji czy gdzie?

A co do tej flagi to jak juz mowilem uczę się języka c od niedawna i jest to pierwsze starcie z programowaniem i nie bardzo wiem co to "flaga" i jak tego użyć.
Gouranga
Użytkownik
Użytkownik
Posty: 1563
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 243 razy

[C] Tablice w funkcji

Post autor: Gouranga »

flag się używa przy kompilacji, jak kompilujesz np. w ten sposób:

Kod: Zaznacz cały

gcc main.c -o main
to dopisujesz flagę:

Kod: Zaznacz cały

gcc main.c -o main -Wall
wtedy kompilator wypluje wszystkie warningi jakie się da
inne flagi na jakie z pewnością się natkniesz z czasem to -lm i -lrt

ale Twój kod jest tak nieczytelny i zasyfiony, że polecam napisać go od zera tym razem myśląc nad każdą linią, pilnując typów zmiennych, nie zapominając o pętlach itd.
a tablice dynamiczne w C (takie, które się same rozszerzają) to bajka na 2-3 semestr informatyki
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Tablice w funkcji

Post autor: kalwi »

Gouranga pisze:a tablice dynamiczne w C (takie, które się same rozszerzają) to bajka na 2-3 semestr informatyki
huh? Masz na myśli malloc i calloc? Ja to miałem w połowie pierwszego semestru na telekomunikacji
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] Tablice w funkcji

Post autor: miki999 »

Co do warningów to właśnie nie mam żadnych warningów
Jak koledzy zauważyli, to nawet nie powinno się kompilować ze względu na linię 15. Twojego kodu.
Na początku dla ułatwienia można po prostu zrobić tablicę o np. 50 elementach i sprawdzić, czy liczba elementów, którą podał użytkownik jest mniejsza od 50.

A co do tej flagi to jak juz mowilem uczę się języka c od niedawna i jest to pierwsze starcie z programowaniem i nie bardzo wiem co to "flaga" i jak tego użyć.
A jakiego środowiska używasz do programowania i kompilowania?
Awatar użytkownika
jarzabek89
Użytkownik
Użytkownik
Posty: 1337
Rejestracja: 11 lis 2007, o 21:36
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 4 razy
Pomógł: 181 razy

[C] Tablice w funkcji

Post autor: jarzabek89 »

Gouranga pisze: a tablice dynamiczne w C (takie, które się same rozszerzają) to bajka na 2-3 semestr informatyki
Jeśli masz na myśli Uniwerki, to być może tak jest.
Ogólnie jest to poziom technikum.
Nie jestem po informatyce, ale takie rzeczy też miałem na pierwszym semestrze.
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10211
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 40 razy
Pomógł: 2359 razy

[C] Tablice w funkcji

Post autor: Dasio11 »

miki999 pisze:Jak koledzy zauważyli, to nawet nie powinno się kompilować ze względu na linię 15. Twojego kodu.
To zależy. Zmienny rozmiar tablicy jest dozwolony w standardzie C99.
Awatar użytkownika
miki999
Użytkownik
Użytkownik
Posty: 8691
Rejestracja: 28 lis 2007, o 18:10
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 36 razy
Pomógł: 1001 razy

[C] Tablice w funkcji

Post autor: miki999 »

To zależy. Zmienny rozmiar tablicy jest dozwolony w standardzie C99.
Wow! Szaleństwo! Dzięki za tę uwagę. Czegoś nowego się nauczyłem
ODPOWIEDZ