s0n1c Opublikowano 23 Czerwca 2007 Zgłoś Opublikowano 23 Czerwca 2007 (edytowane) Jest taki problem: Dany jest ciąg znaków np: „Pluszowe 22 łosie buszują w zaroślach i gryzą, każdy co najmniej po 312 orzechów, a 2 łosie zjadają grzybki leśne, ale 1 rodzaj grzybka jest trujący” Podaj czy więcej jest liczb parzystych czy nieparzystych. Długość ciągu cyfr występujących obok siebie nie przekracza 4. Cyfry tworzące daną liczbę zawsze występują bezpośrednio obok siebie. #pragma hdrstop#pragma argsused#include <conio.h>#include <iostream.h>#define znak_pusty '\0'int main(int argc, char* argv[]){char c=znak_pusty,tab[100];int i,dodatnie=0,ujemne=0,liczba=0;int len=strlen(tab);cout<<"Podaj zdanie:\n";cin>>tab;for (i=0; i<len; i++){ if (tab[i]>='0' && tab[i]<='9') c=tab[i]; else { if (c!=znak_pusty) { liczba=c-'0'; if (liczba %2==0) dodatnie++; else ujemne++; c=znak_pusty; } }}if (dodatnie>ujemne)cout<<"Wiecej jest liczb parzystych";if (dodatnie<ujemne)cout<<"Wiecej jest liczb nieparzystych";elsecout<<"parzystych i nieparzystych jest rowno"; getch(); return 0;} Moze ktos wskazac gdzie tkwi blad? (Prosilbym o wskazanie bledow, zamiast propozycji rozwiazania na wskaznikach). Edytowane 23 Czerwca 2007 przez s0n1c Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Haquim Opublikowano 23 Czerwca 2007 Zgłoś Opublikowano 23 Czerwca 2007 (edytowane) Twój program oblicza liczbę liczb parzystych i nieparzystych (traktując je tak jakby miały po max 1 cyfrze). Edytowane 23 Czerwca 2007 przez Haquim Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
s0n1c Opublikowano 23 Czerwca 2007 Zgłoś Opublikowano 23 Czerwca 2007 Analizuje tylko ostania cyfre liczby, bo po co wiecej. Jesli modulo z niej = 0 to parzysta, jesli = 1 nieparzysta. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 23 Czerwca 2007 Zgłoś Opublikowano 23 Czerwca 2007 No zaczynamy od tego, ze probujesz liczyc cyfry, nie liczby :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 23 Czerwca 2007 Zgłoś Opublikowano 23 Czerwca 2007 (edytowane) ups.. przez pomylke wyedytowalem nie tego posta Edytowane 25 Czerwca 2007 przez FiDO Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tukamon Opublikowano 23 Czerwca 2007 Zgłoś Opublikowano 23 Czerwca 2007 Podpowiedz: mozesz uzyc isdigit() :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jericho666 Opublikowano 24 Czerwca 2007 Zgłoś Opublikowano 24 Czerwca 2007 z wyglądu to poza wyjątkiem że string nie bedzie zakończony cyfrą (FiDO o tym wspominał) to powinno działać ok poza tymi ifami na końcu powinny one wygladac raczej tak if (dodatnie>ujemne)cout<<"Wiecej jest liczb parzystych";else {if (dodatnie<ujemne)cout<<"Wiecej jest liczb nieparzystych";elsecout<<"parzystych i nieparzystych jest rowno";} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 24 Czerwca 2007 Zgłoś Opublikowano 24 Czerwca 2007 (edytowane) Przejrzalem jeszcze raz kod, tym razem probujac go zrozumiec i okazuje sie, ze algorytm jest dobry jednak (pomijajac sytuacje, kiedy liczba jest na koncu), tylko troche dziwnie napisany :) Bledow jest kilka. wspomniany wyzej else, ktorego brakuje przez co wyswietla sie 2 komunikaty dla odpowiednich danych. zadeklarowany bufor nie jest w stanie pomiescic Twojego przykladowego zdania. cin>>tab; powoduje zapisanie do tej zmiennej tylko pierwszego wyrazu. Nie pamietam juz szczegolow technicznych (nie pisalem w C++ nic od lat...), wiec nie napisze czemu tak sie dzieje, wiem tylko, ze musisz uzyc cin.getline(tab, rozmiar_bufora) dlugosc stringa odczytujesz przed wczytaniem danych z klawiatury co jest bez sensu To chyba tyle.. ;] Edit: ano.. im pozniej tym lepiej mysle i sie zreflektowalem ;) PS. tutaj jest nieco poprawiona wersja. Nie twierdze, ze jest to najlepszy sposob na napisanie tego, ale wg mnie lepszy (m.in. pod wzgledem czytelnosci) od Twojego. Warto nabrac dobrych nawykow juz na poczatku.. latwiej bedzie Ci pozniej. Edytowane 25 Czerwca 2007 przez FiDO Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
jericho666 Opublikowano 25 Czerwca 2007 Zgłoś Opublikowano 25 Czerwca 2007 (edytowane) Dokałdnie to sprawdzana jest parzystość ostatniej cyfry w ciągu cyfr a wiec w efekcie parzystość liczby a to c=znak_pusty jest wlasnie poto zeby nie sprawdzac kazdej cyfry tylko ostatnią z ciągu cyfr popatrz dokladnie na konstrukcje tego if elsa w pętli Edit : O widze ze poprawiles :D Edytowane 25 Czerwca 2007 przez jericho666 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...