Skocz do zawartości
s0n1c

[c++] Wiecej Parzystych Czy Nieparzystych.

Rekomendowane odpowiedzi

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 przez s0n1c

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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";}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez FiDO

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez jericho666

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...