kamilmasow Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 Witam!!! Jestem początkującym użytkownikiem programowania i nie wiem jak ustawić poprawne wyświetlanie wyniku dzielenia liczb. Używam programu Borland C++. Mam wpisane w programie: #include <stdio.h> #include <conio.h> void main(void) { int a,b; //deklaracja zmiennych a i b int suma,roznica,iloczyn; float iloraz; clrscr(); printf("Podaj liczb© A: \n"); scanf("%d",&a); printf("Podaj liczb© B: \n"); scanf("%d",&b); suma=a+b; roznica=a-b; iloczyn=a*b; iloraz=a/b; printf("Wyniki dziaa:\n"); printf("Suma: %d\n",suma); printf("Rnica: %d\n",roznica); printf("Iloczyn: %d\n",iloczyn); printf("Iloraz: %.3f\n",iloraz); getch(); } Wyświetla się: Podaj liczbę A: (np.)5 Podaj liczbę B: (np.)10 Wyniki działań: Suma: 15 Różnica: -5 Iloczyn: 50 Iloraz: 0,000000 Co zmienić aby wyświetlało poprawny wynik ilorazu - 0,50...?? Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 sproboj iloraz = (float)a/(float)b; i uzywaj tagow do kolorowania skladni. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 Wystarczy, że jedną zmienną się rzutuje na float-a Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 z natury jestem nieufny jesli chodzi o c++ Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 12, 2008 Autor Zgłoś Share Napisano Maj 12, 2008 zmieniłem jak poradziliście, dzięki wam, ja jestem początkujący, a czytałem, że c++ jest łatwy dla początkujących jeszcze raz wielkie dzięki Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 ja jestem początkujący, a czytałem, że c++ jest łatwy dla początkujących Jasne, że jest łatwy dla początkujących, każdy język będzie dla Ciebie prosty, jeśli tylko włożysz w jego naukę odpowiednią ilość czasu i nie poddasz się przy pierwszych niepowodzeniach Pozdrawiam! Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 Jasne, że jest łatwy dla początkujących, każdy język będzie dla Ciebie prosty, jeśli tylko włożysz w jego naukę odpowiednią ilość czasu i nie poddasz się przy pierwszych niepowodzeniach Popieram, ale dorzucę swoje trzy grosze - moim zdaniem lepiej się nauczyć kodzenia na Pascalu, bo potem łatwo jest przejść na C++. Widzę sam po sobie. ^^ .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 12, 2008 Autor Zgłoś Share Napisano Maj 12, 2008 z pewnością myślę, że umiecie dużo na temat programowania, ale jak zaczynaliście uczyć się podstaw to w szkole(studia) czy samodzielnie, jeśli samodzielnie to jakieś książki? Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Maj 12, 2008 Zgłoś Share Napisano Maj 12, 2008 Uczyć się przed studiami. Teraz mogę na luzie przychodzić na wykłady i tylko uzupełniać wiedzę Na pierwszym semestrze byli ludzie którzy dopiero zaczynali programować... Nie wyszło to im na zdrowie Niektórzy nawet odpadli na samym programowaniu (wstępie do programowania) A niektórzy zdali dopiero za trzecią poprawką... Więc kombinuj, kombinuj, najlepiej przerób jakiś podstawowy kurs internetowy, jak załapiesz podstawy to reszta pójdzie jak po maśle Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 12, 2008 Autor Zgłoś Share Napisano Maj 12, 2008 ja dopiero gimnazjum kończę informatyka jest moją pasją i będę się jej uczył mimo przeciwności losu i trudności związanych np. z pisaniem programów, ale wszystkiego da się nauczyć Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 13, 2008 Autor Zgłoś Share Napisano Maj 13, 2008 Mam jeszcze jeden mały problem, klikając sobie i sprawdzając czy dobrze chodzi, zapomniałem o możliwości wstawianiu ułamków dziesiętnych, zmieniłem w programie liczby całkowite na rzeczywiste: #include <stdio.h> #include <conio.h> void main(void) { float a,b; //deklaracja zmiennych a i b float suma,roznica,iloczyn; float iloraz; clrscr(); printf("Podaj liczb© A: \n"); scanf("%f",&a); printf("Podaj liczb© B: \n"); scanf("%f",&b); suma=(float)a+(float)b; roznica=(float)a-(float)b; iloczyn=(float)a*(float)b; iloraz=(float)a/(float)b; printf("Wyniki działań:\n"); printf("Suma: %f\n",suma); printf("Różnica: %f\n",roznica); printf("Iloczyn: %f\n",iloczyn); printf("Iloraz: %f\n",iloraz); getch(); } jednak po obliczeniach np. Podaj liczbę A: 6.7 Podaj liczbę B: 3.3 Wyniki działań: Suma: 10.000000 Różnica: 3.400000 Iloczyn: 22.109999 Iloraz: 2.030303 Iloczyn nie jest wynikiem właściwym ponieważ powinno być 22.11 lub: Podaj liczbę A: 56.7 Podaj liczbę B: 3.3 Wyniki działań: Suma: 60.000000 Różnica: 53.400002 ----->powinno być 53.400000 Iloczyn: 187.110001 ---->powinno być 187.110000 Iloraz: 17.181818 Czasami jednak wynik wychodzi dobry, ale z innymi liczbami (5.5 i 6.5) Co tu może nie grać? Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Maj 13, 2008 Zgłoś Share Napisano Maj 13, 2008 Taką rzeczą zajmują się metody numeryczne. Chodzi ogólnie o to, że zmienne ułamkowe są zapisane jako liczby binarne i nie mogą przez to wszystko dokładnie mieć zapisane (bo mają skończą ilośc liczb) i np. 0.3333 nie zapisze jako 0.333, ale jako coś około tego, to jest taki błąd związany z tym że tak są liczby w pamięci zapisane, drugi błąd to jest że błędy się propagują wraz z obliczeniami i mogą rosnąć. Sumę pokazuje dobrze bo masz tylko 6 liczb po przecinku. Nic na to nei zaradzisz, zmniejsz dokładność w wyświetlaniu i musisz zapamiętać, aby na liczbą rzeczywistych nie używać operatora "==" bo rzadko zwraca true, właśnie przez to, że dopiero na 6 czy dalszym miejscu po przecinku jest coś inaczej. Czasami wynik wychodzi dobyr bo niektóre liczby da się przedstawić jako skończony ciąg binarny Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Maj 13, 2008 Zgłoś Share Napisano Maj 13, 2008 Jak chcesz zwiększyć dokładność użyj double, wtedy w scanf i printf %lf zamiast %f. w standardzie IEEE754 32 bitowym są zapisane właśnie tylko przy pomocy 32 bitów w formacie stałoprzecinkowym, np. liczba A: 6.7 to by było: 110. (6 w pamięci "skonwertowałem" na binarny) 0.7|1 0.4|0 0.8|1 0.6|1 0.2|0 0.4|0 0.8|1 Jak można zauważyć na 0.4 kończy się okres, więc liczba w całości to będzie: 110.10(1100) przesuń przecinek do pierwszego znaczącego bitu: 1.1010(1100) przesunięty został o 2 miejsca w lewo, więc dodajemy do tego 127 (to zapisujemy w 8 bitach): 129 i zamień na dwójkowy: 129|1 64|0 32|0 16|0 8|0 4|0 2|0 1|1 Czyli cała liczba będzie tak wyglądać 1|10000001|101011001100110011001 jeśli się nigdzie nie walnąłem Na 64 bitach masz dużo więcej miejsca na zapisanie liczby, więc w typie double najlepiej przeprowadzać operacje na liczbach zmiennoprzecinkowych Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 13, 2008 Autor Zgłoś Share Napisano Maj 13, 2008 zmieniłem na %lf i wyświetliły mi się bardzo duże wyniki wpisując 6.7, 3.3 wyświetliły się liczby 24 cyfrowe przed przecinkiem i za 6, zmieniłem na 3 cyfry po przecinku i pokazuje dobrze, mam jeszcze jedno pytanie, czy da się zrobić tak, aby np. w sumie kiedy wynik jest liczbą całkowitą to wyświetlał się wynik całkowity bez zer za przecinkiem (np. 4; a nie 4.000) i kiedy będzie wynik z cyframi po przecinku to kasował pozostałe "0" (np. 5.1; a nie 5.100)?? Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Maj 13, 2008 Zgłoś Share Napisano Maj 13, 2008 Bardzo duże liczby, czy bardzo dużo miejsc po przecinku ?? Pewnie zapomniałeś żyć double zamiast float jeśli wyświetla Ci inne liczby... Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Maj 13, 2008 Zgłoś Share Napisano Maj 13, 2008 możesz sprawdzać resztę z dzielenia modulo 1, albo czy liczba rzutowana na inta jest równa floatowi, ale jak mówiłem to ryzykowne, bo gdzieś tam na 8 miejscu po przecinku może być jakieś 1, tak jak u Ciebie i porównanie zwróci false Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 13, 2008 Autor Zgłoś Share Napisano Maj 13, 2008 nie zmieniłem wcześniej float na double, ale efekt po zmianie podobny, tylko że jest mniej cyfr, wychodzą wyniki -0.000000 i tylko w ilorazie inny -6.4767865769697987000000000000000000000e+73 (coś podobnego), ale zostawię tak jak było przedtem, a czy da się zrobić żeby np. w sumie kiedy wynik jest liczbą całkowitą to wyświetlał się wynik całkowity bez zer za przecinkiem (np. 4; a nie 4.000) i kiedy będzie wynik z cyframi po przecinku to kasował pozostałe "0" (np. 5.1; a nie 5.100)?? Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Maj 13, 2008 Zgłoś Share Napisano Maj 13, 2008 Już o tym mówiłem i sam zauważyłeś że np. pisze 53.400002 zamiast 53.400000 i powiedziałem czemu tak jest to nawet jak zera dałoby się odciąć bo by Ci w tym przypadku nic nie odcięło, to jest urok liczb rzeczywistych (a raczej pseudo jak to jest w programowaniu) Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 13, 2008 Autor Zgłoś Share Napisano Maj 13, 2008 aha, no oki dzięki wszystkim za wszelką pomoc zapewne jeszcze tu zajrzę Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Maj 14, 2008 Zgłoś Share Napisano Maj 14, 2008 Jak skorzystasz z %g zmiast %lf to Ci obetnie te zera, jest sporo przełączników, na wykładzie miałem, pewnie dałoby się bez zmiany lf na g, tak czy inaczej %g daje najkrótszy zapis, czasem krótszy jest zapis naukowy więc go użyje. Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Maj 14, 2008 Zgłoś Share Napisano Maj 14, 2008 A ti ti Jason: link. Choć C++ to nie ambrozja dla mnie, ale ta strona to wg mnie to co każdy programista C++ nie musi umieć, ale musi znać adres strony Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Jason Napisano Maj 14, 2008 Zgłoś Share Napisano Maj 14, 2008 Może nie musi umieć, ale wybacz, Twoje wcześniejsze posty brzmiały jakby się nie dało skorzystać z double, albo nie dało wypisać tak jak trzeba (chciałeś obcinać float'a) Więc lepiej wiedzieć coś o tym Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Maj 14, 2008 Zgłoś Share Napisano Maj 14, 2008 No obcinać floata, czyli chodziło mi że te zera z końca, a nic że doubla się nie da nie mówiłem. Mówiłem tylko, że nie każda (a raczej z prawdopodobieństwem 1 że się w taką trafi) ładnie się zapisze jako float, czy nawet double (ładnie -czyt. nie ma czegoś takiego: 53.400002 itp.) Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
kamilmasow Napisano Maj 14, 2008 Autor Zgłoś Share Napisano Maj 14, 2008 i jeszcze jedno pytanie: czy C++ i C++ Builder to jest to samo?? pytam ponieważ chciałbym zakupić książkę w necie, ale napotkałem właśnie te 2 hasła Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Maj 14, 2008 Zgłoś Share Napisano Maj 14, 2008 C++ Builder to IDE przede wszytkim. Niektórzy mówią, że nie do końca zgodne ze standardem, ale Visual też, więc trudno powiedzieć co to c++ jest:D ogólnie Builder dodaje że w klasach można dawać property, co nei jest w standardzie. I pewnie jakieś inne różnice są, ale mało istotne. I rób jeden temat na jeden problem Baza tysięcy lotnisk: http://airportsbase.com 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.