dj_tej Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 (edytowane) mam do wykonania funkcje ktora rozwiazuje rownianie kwadratowe i zwraca jego rozwiazania... probowalem to zrobic przy pomocy tablicy.... no nie wychodzi mi to jakos... :/ moze mi pomozecie i wskarzecie bledy... z gory dzieki oto jaki kod wymodzilem w dev-cpp #include <stdio.h>#include <math.h>float pierwiastki (float x, float y, float z){float a;float b; float c;float x1, x2, delta;float tab_rozw[2];printf ("podaj wspolczynnik a:"); scanf ("%f", &a);printf ("podaj wspolczynnik b:"); scanf ("%f", &b);printf ("podaj wspolczynnik c:"); scanf ("%f", &c); if (a==0) //równanie liniowe bo a=0 { x1=(-c)/b; tab_rozw[0]=x1; } else //równanie kwadratowe { delta=b*b-4*a*c; if (delta==0) // jeden pierwiastek { x1=x2=-b/(2*a); tab_rozw[0]=x1; } else { if (delta<0); //brak rozwiazan else //dwa pierwiastki { x1=(-b-sqrt(delta))/(2*a); x2=(-b+sqrt(delta))/(2*a); tab_rozw[0]=x1; tab_rozw[1]=x2; } } }return tab_rozw;} Edytowane 12 Grudnia 2006 przez dj_tej Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 na moj gust brakuje tam main(); ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dj_tej Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 ale to ma byc funkcja :) main to sie chyba daje jak sie pisze glowny program?:> zrestza juz troche zmienilem. wczytywanie abc jest poza funkcja.. bo tak powinno byc ;p deklaracje abc tez wywalilem bo to sie robi w glownym programie ;p Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 wrzuc caly program, latwiej bedzie przerzucic do wlasnego dev-cpp i dokonywac modyfikacji Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 float pierwiastki (float x, float y, float z){(..)float tab_rozw[2]; (...)return tab_rozw;} Jak widać typ nie zgadza się z tym co zwracasz ? zrób lepiej to w taki sposób /** * Funkcja zwraca liczbę znalezionych pierwiastków * @param a współczynnik przy x^2 * @param b współczynnik przy x * @param c wyraz wolny * @param tab_rozw - tablica 2 elementowa w której zapiszesz sobie rozwiązania * @return Liczba pierwiastkół równania ax^2+bx+c = 0 */int pierwiastki (float a, float a, float a,float* tab_rozw);To jest prototyp , ciało funkcji chyba umiesz zmajstrować ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 btw pytanie poczatkujacego: to da sie przekazac tablice poza funkcje w ktorej sie ja zdefiniowalo? nie powinno sie ja zdefiniowac "pietro wyzej" w strukturze programu? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Prog Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 btw pytanie poczatkujacego: to da sie przekazac tablice poza funkcje w ktorej sie ja zdefiniowalo? nie powinno sie ja zdefiniowac "pietro wyzej" w strukturze programu? Jeżeli utworzyłeś zmienną, tablicę etc. w funkcji to poza nią one nie będą funkcjonować. Odwołanie do nich spowoduje błąd. Zresztą kompilator tego nie przepuści. Zmienne utworzone pomiędzy { } // klamrami funkcjonują tylko w tym bloku. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 (edytowane) nom, rozumiem. rozszerzam pytanie: czy wiec mozna zwrocic cala tablice zdeklarawana wewnatrz funkcji poprzez return tak jak kolega na samej gorze zrobil? bo wg mnie nie Edytowane 12 Grudnia 2006 przez tukamon Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 nom, rozumiem. rozszerzam pytanie: czy wiec mozna zwrocic cala tablice zdeklarawana wewnatrz funkcji poprzez return tak jak kolega na samej gorze zrobil? bo wg mnie niePytanie za 100 punktów - a gdzie ja twierdzę że zwracam tablicę ,przecież funkcja zwraca int-a <_< Ja i kompilator GCC twierdzimy że można odwołać się do tablicy poprzez wskaźnik na jej pierszy element , np. int main(int argc,char** argv){float wyniki[2];float wsp[3];int k;(...) // Wczytanie danychk= pierwiastki (wsp[0],wsp[1],wsp[2],wyniki); if (0==k) printf("Brak rozwiązań")else for(int i=0;i<k;i++) printf("%f \n",wyniki[i]);return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 czaje. wkuwanie elektromagnetyzmu widac wylacza "musk" Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Polar Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 Możliwe... Ale są tam też rodzynki jak działko Gaussa, notabene możliwy jest nawet DIY. oO Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Prog Opublikowano 12 Grudnia 2006 Zgłoś Opublikowano 12 Grudnia 2006 Wracając do zwracania tablicy. Możnaby pomyśleć o zwracaniu elementu struktury inaczej tego nie zrobisz. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dj_tej Opublikowano 13 Grudnia 2006 Zgłoś Opublikowano 13 Grudnia 2006 (edytowane) najlepsza w tym zabawa ze funkcja ma zwrac obydwa pierwiastki naraz... :/ czyli chyba bez struktury sie nie obejdzie :/ haguim troskze nie rozumeim twojego prototypu ;p Edytowane 13 Grudnia 2006 przez dj_tej Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 13 Grudnia 2006 Zgłoś Opublikowano 13 Grudnia 2006 (edytowane) najlepsza w tym zabawa ze funkcja ma zwrac obydwa pierwiastki naraz... :/ czyli chyba bez struktury sie nie obejdzie :/ haguim troskze nie rozumeim twojego prototypu ;p 3 pierwsze parametry to współczynniki równania ostatni to tablica w której zapiszesz rozwiązania nim zwrócisz liczbę pierwiastków tablicę z buforem przekażesz jako wskaźnik na jej 1 element dzięki temu będziesz mógł zapisać pierwiastki a po powrocie z funkcji będziesz mógł je odczytać tak jak to jest w moim przykładzie z funkcja main Albo przepisz taki bloczek kodu #include<stdio.h>float f(float *wsk,float a){ wsk[0]=a*a; return a*wsk[0];}int main(){ float a,b,c;scanf("%f",&a); b = f(&c,a); printf("b=%f c=%f",b,c); getchar(); getchar(); return 0;} Teraz może łatwiej będziesz mógł zrozumieć o co chodzi w przkazywaniu wskaźników w funkcjach w C Edytowane 13 Grudnia 2006 przez Haquim Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dj_tej Opublikowano 13 Grudnia 2006 Zgłoś Opublikowano 13 Grudnia 2006 o cos takeigo ci chodzilo haguim? bo jak nie to padaczke mam dalej: #include <stdio.h>#include <math.h>float * pierwiastki (float a, float b, float c, float *tab ){float x1, x2, delta;float tab_rozw[2]; if (a==0) //równanie liniowe bo a=0 { x1=(-c)/b; tab_rozw[0]=x1; } else //równanie kwadratowe { delta=b*b-4*a*c; if (delta==0) // jeden pierwiastek { x1=x2=-b/(2*a); tab_rozw[0]=x1; } else { if (delta<0); //brak rozwiazan else //dwa pierwiastki { x1=(-b-sqrt(delta))/(2*a); x2=(-b+sqrt(delta))/(2*a); tab_rozw[0]=x1; tab_rozw[1]=x2; } } }return 0;}int main(int argc,char** argv){float wyniki[2];float wsp[3];int k;printf ("podaj wspolczynnik a:"); scanf ("%f", &wsp[0]);printf ("podaj wspolczynnik b:"); scanf ("%f", &wsp[1]);printf ("podaj wspolczynnik c:"); scanf ("%f", &wsp[2]);k= pierwiastki (wsp[0],wsp[1],wsp[2],wyniki); if (0==k) printf("Brak rozwiązań");else for(int i=0;i<k;i++) printf("%f \n",wyniki[i]);return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 13 Grudnia 2006 Zgłoś Opublikowano 13 Grudnia 2006 o cos takeigo ci chodzilo haguim? bo jak nie to padaczke mam dalej:Masz prawie padaczkę ;) chodziło o coś takiego : #include <stdio.h>#include <math.h>int pierwiastki (float a, float b, float c, float *tab_rozw ){float x1, x2, delta; if (a==0) //równanie liniowe bo a=0 , a co jeśli b =0 ? { if (b==0) { if (c==0) return -1; else return 0; } else { tab_rozw[0]=(-c)/b; return 1; } } else //równanie kwadratowe { delta=b*b-4*a*c; if (delta==0) // jeden pierwiastek { tab_rozw[0]=-b/(2*a); return 1; } else { if (delta<0) return 0; //brak rozwiazan else //dwa pierwiastki { tab_rozw[0]=(-b-sqrt(delta))/(2*a); tab_rozw[1]=(-b+sqrt(delta))/(2*a); return 2; } } }}int main(int argc,char** argv){float wyniki[2];float wsp[3];int k;printf ("podaj wspolczynnik a:"); scanf ("%f", &wsp[0]);printf ("podaj wspolczynnik b:"); scanf ("%f", &wsp[1]);printf ("podaj wspolczynnik c:"); scanf ("%f", &wsp[2]);k= pierwiastki (wsp[0],wsp[1],wsp[2],wyniki); if (0==k) printf("Brak rozwiązań");else if (k<0) printf("Równanie tożsamościowe");else for(int i=0;i<k;i++) printf("%f \n",wyniki[i]);return 0;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dj_tej Opublikowano 13 Grudnia 2006 Zgłoś Opublikowano 13 Grudnia 2006 dzieki haguim :) poczatki sa trudne wiec dziekuje podwojnie:) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...