Ludvic Napisano Marzec 17, 2010 Zgłoś Share Napisano Marzec 17, 2010 Witam mam problem z programem, który poinformuje użytkownika odpowiednim komunikatem, czy 3 podane przez niego boki trójkąta należą do trójkąta prostokątnego. Podane przez użytkownika dane są liczbami całkowitymi.Napisałem ale nie działa do końca poprawnie , możecie zerknąć co jest źle? KOD #include<stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int a, b , c; printf("Podaj trzy liczby calkowite\n"); printf("Pierwsza liczba:"); scanf("%d",&a); printf("Druga liczba:"); scanf("%d",&b); printf("Trzecia liczba:"); scanf("%d",&c); if ( a > b) { if (b > c){ if ("a^2=b^2+c^2"){ printf ("Trójkąt jest prostokątny"); } } else if ( b < c){ if ( a > c) { if ("b^2=c^2+a^2"){ printf ("Trójkąt jest prostokątny"); } } else if ( a < c) { if ("c^2=a^2+b^2") printf ("Trójkąt jest prostokątny"); } } } else if ( b> a) { if ( a > c) { if ("b^2=a^2+c^2") printf ("Trójkąt jest prostokątny ", c,a,b); } else if ( a < c) { if (b > c) { if ("b^2=a^2+c^2"){ printf ("Trójkąt jest prostokątny "); } else if ( b < c) { if("c^2=b^2+a^2"){ printf ("Trójkąt jest prostokątny"); } } } } } system("PAUSE"); return 0; } Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Marzec 17, 2010 Zgłoś Share Napisano Marzec 17, 2010 po pierwsze if ("a^2=b^2+c^2"){ zasze jest prawda bo "STRING" "a^2=b^2+c^2" jest != 0 czyli dla C++ to prawda po drugie: skad ty wytrzasnales taki warunek, juz myslalem ze niekt mnie nie zadziwi po trzecie: operator ^ nie jest operatorem potegi, wiem zawiodlem cie, ale takie sa smutne fakty. policz wartosci do zmiennych i dopiero porownaj w warunkach. i na kuniec nie pisze w warunku = tylko == albo bedziesz baaaardzoe dlugo szukac bledu Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
sharp13 Napisano Maj 21, 2010 Zgłoś Share Napisano Maj 21, 2010 Witam To mój pierwszy post. Zastanawiam się co to za forum, by podyskutować, czy by wykazać że ktoś jest początkujący i raczej powinien zmienić profesje. Toster masz 100% racji, to są błędy podstawowe w tym programie, oczywiście poza tym warunkiem. Ludvic podstawową zasadą języka C, czy też C++ jest logiczne myślenie. Patrząc na Twój program przeanalizowanie go to niezła łamigłówka. Następnym razem zanim napiszesz program, to pomyśl co chcesz uzyskać, wybierz metodę i na koniec napisz kod. Wymyśliłeś sobie, że najpierw musisz sprawdzić który bok jest największy, a jak już znajdziesz taki chciałeś sprawdzić czy boki trójkąta spełniają twierdzenie Pitagorasa. I niby ok, ale język C jak król wszystkich języków programowania pozwala tworzyć kod który jest zwięzły bez potrzeby powielania tego samego kodu w programie. I lubi jak programista zmierza najprostrzą drogą do celu. A więc wracając do Twojego programu. Masz rację: twierdzenie Pitagorasa to podstawa. Natomiast oznaczenie który bok jest najdłuższy nic nie daje. Ponieważ interesują nas w twierdzeniu Pitagorasa tylko kwadraty boków wystarczy, że po wczytaniu zmiennych od razu je podniesiesz do kwadratu (procesor zrobi to tylko 1 raz!!!), przekładając na język C pomnożysz przez siebie: a*=a; a później sprawdzisz 3 warunki łącząc je operatorem sumy logicznej (w C: ||) i będziesz od razu miał wynik. Jakie warunki: a == b+c i tak dla każdego boku. Proste i naprawdę łatwiej szukać błędu w takim programie, do tego działa szybciej. Zapamiętaj sobie program może być napisany tylko w jednym języku i dobrą zasadą jest używanie klawisza Tab po Enter, łatwiej się czyta. Pozdrawiam Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.