Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - conteggio sequenza uguale
Forum - C/C++ - conteggio sequenza uguale

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
salve ragazzi mi potete aiutare?
ho un problemino con questo programma....

Codice sorgente - presumibilmente C++

  1. // programma che conta la sequenza più lunga di zero o uno consecutivi...
  2. #include <iostream>
  3. using namespace std;
  4. int main (){
  5.         int num=0, contuno=0, contzero=0, submax=0, max=0, submax1=0, max1=0;
  6.        
  7.         cout << "inserisci una sequenza binaria di zero e uno...digita -1 per terminare: "<<endl;
  8.        
  9.        
  10.         while (num!=-1){
  11.         cin >> num;
  12.        
  13.         if (num%2==0){
  14.                                 if (contuno>max1){
  15.                                 submax1=max1;
  16.                                 max1=contuno;
  17.                                 contuno=0;}
  18.         contzero++;}
  19.         else if (num%2!=0){
  20.                                 if      (contzero>max){
  21.                                 submax=max;
  22.                                 max=contzero;
  23.                                 contzero=0;}
  24.         contuno++;}
  25.                
  26.                
  27.                
  28.         cin >> num;
  29.        
  30.         }
  31.         if (max1>max)
  32.         cout << "il max di numeri consecutivi e' stato di : "<< max1<< " uni" << endl;
  33.         if (max1<max)
  34.         cout << "il max di numeri consecutivi e' stato di : "<< max<< " zeri" << endl;
  35.         return 0;
  36. }



dovrebbe calcolare la sequenza di numeri uguali consecutivi più numerosa...sequenza di soli zero e uno....

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:55
Domenica, 08/11/2009
nel programma che hai postato ci sono dei controlli superflui, come ad esempio il modulo. Inoltre da come l'hai indentato si capisce poco o niente senza farlo girare.

Guarda un'altra soluzione:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  
  7.         cout << " *** BinaryCont by HeDo *** " << endl << endl;
  8.  
  9.         cout << " Inserisci la sequenza di 0 e 1, per terminare immetti altro valore" << endl;
  10.  
  11.         char c = NULL;
  12.  
  13.         // Massima sequenza di zeri che abbiamo trovato fino ad ora
  14.         int iMaxZeroSequence = 0;              
  15.        
  16.         // Massima sequenza di uno che abbiamo trovato fino ad ora
  17.         int iMaxOneSequence = 0;
  18.  
  19.         // Accumulatore con il conteggio di zeri
  20.         int iTempZeroSequence = 0;
  21.  
  22.         // Accumulatore con il conteggio di uno
  23.         int iTempOneSequence = 0;
  24.  
  25.         // Ultimo carattere inserito ('1' o '0')
  26.         char cLastDigit = NULL;
  27.  
  28.         // Se il ciclo è finito
  29.         bool bEnd = false;
  30.  
  31.         do {
  32.  
  33.                 // Chiedo il valore da tastiera
  34.                 cin >> c;
  35.  
  36.                 // A seconda di cosa è stato inserito
  37.                 switch(c) {
  38.  
  39.                         // Se è uno '0'
  40.                         case '0':
  41.  
  42.                                 // Controllo se è il primo '0' dopo una sequenza di '1'
  43.                                 if (cLastDigit == '1') {
  44.  
  45.                                         // Se la sequenza di '1' appena finita è più
  46.                                         // lunga della più lunga trovata fino ad ora
  47.                                         if (iTempOneSequence > iMaxOneSequence)
  48.  
  49.                                                 // Nuova sequenza di '1' più lunga!
  50.                                                 iMaxOneSequence = iTempOneSequence;
  51.  
  52.                                         // Azzero il conteggio della sequenza di '1'
  53.                                         iTempOneSequence = 0;
  54.                                        
  55.                                 }
  56.  
  57.                                 // Incremento il conteggio degli zeri inseriti
  58.                                 iTempZeroSequence++;
  59.  
  60.                                 break;
  61.  
  62.                         // Se è un '1'
  63.                         case '1':
  64.  
  65.                                 // Controllo se è il primo '1' dopo una sequenza di '0'
  66.                                 if (cLastDigit == '0') {
  67.  
  68.                                         // Se la sequenza di '0' appena finita è più
  69.                                         // lunga della più lunga trovata fino ad ora
  70.                                         if (iTempZeroSequence > iMaxZeroSequence)
  71.  
  72.                                                 // Nuova sequenza di '0' più lunga!
  73.                                                 iMaxZeroSequence = iTempZeroSequence;
  74.  
  75.                                         // Azzero il conteggio della sequenza di '0'
  76.                                         iTempZeroSequence = 0;
  77.                                        
  78.                                 }
  79.  
  80.                                 // Incremento il conteggio degli uno inseriti
  81.                                 iTempOneSequence++;
  82.  
  83.                                 break;
  84.  
  85.                         // Se è stato inserito altro carattere
  86.                         default:
  87.                
  88.                                 // Imposto il flag di ciclo terminato
  89.                                 bEnd = true;
  90.  
  91.                                 // A seconda dell'ultimo carattere valido inserito
  92.                                 // controllo se è stata trovata una nuova sequenza
  93.                                 // più lunga sia di '0' che di '1'
  94.                                 if(cLastDigit == '1') {
  95.                                         if (iTempOneSequence > iMaxOneSequence)
  96.                                                 iMaxOneSequence = iTempOneSequence;
  97.                                 } else {
  98.                                         if (iTempZeroSequence > iMaxZeroSequence)
  99.                                                 iMaxZeroSequence = iTempZeroSequence;
  100.                                 }      
  101.  
  102.                                 break;
  103.  
  104.  
  105.                 }
  106.  
  107.                 // Salvo l'ultimo carattere inserito
  108.                 cLastDigit = c;
  109.  
  110.         // Il ciclo va avanti se non è stato
  111.         // inserito un carattere non valido
  112.         } while(!bEnd);
  113.  
  114.         cout << "Più lunga sequenza di '0': " << iMaxZeroSequence << endl;
  115.         cout << "Più lunga sequenza di '1': " << iMaxOneSequence << endl;
  116.  
  117.         system("PAUSE");
  118.  
  119.         return 0;
  120. }


Ultima modifica effettuata da HeDo il 08/11/2009 alle 14:06
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:01
Domenica, 08/11/2009
come lo hai fatto tu funziona ma è ancora troppo complicato per me...mi sn appena iscritto al corso di informatica all'università....cmq grazie!!

io l'ho fatto cosi è funziona lo stesso...

Codice sorgente - presumibilmente C++

  1. // programma che conta la sequenza più lunga di zero o uno consecutivi...
  2. #include <iostream>
  3. using namespace std;
  4. int main (){
  5.         int num=0, contuno=1, contzero=1, submax=0, max=0;
  6.        
  7.         cout << "inserisci una sequenza binaria di zero e uno...digita -1 per terminare: "<<endl;
  8.        
  9.         cin >> num;
  10.         while (num!=-1){
  11.        
  12.        
  13.         if (num%2==0){
  14.                
  15.                 if (contuno>max){
  16.                 submax=max;
  17.                 max=contuno;
  18.                 contuno=0;
  19.                 }
  20.         contzero++;}
  21.         else if (num%2!=0){
  22.                 if      (contzero>max){
  23.                         submax=max;
  24.                         max=contzero;
  25.                         contzero=0;
  26.                         }
  27.         contuno++;}
  28.                
  29.         cin >> num;
  30.         }
  31.         cout << "il max di numeri consecutivi e' stato di : "<< max<< " numeri" << endl;
  32.         return 0;
  33. }


Ultima modifica effettuata da il 08/11/2009 alle 14:15
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 14:07
Domenica, 08/11/2009
ho editato il codice, ora ho messo un sacco di commenti :)

leggili e vedi se il codice risulta più comprensibile :yup:

EDIT: esame in info1?

Ultima modifica effettuata da HeDo il 08/11/2009 alle 14:10
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:16
Domenica, 08/11/2009
precisamente devo sostenere a febbraio l'esame di fondamenti di informatica....oltre ad analisi uno, fisica uno ed economia aziendale....
mi sto appassionando al mondo dell'informatica...è bellissimo :)

ora è chiarissimo grazie, l'unica cosa che non ho capito è quel

char cLastDigit = NULL;

perchè lo hai inizializzato a NULL e cosa vuol dire NULL???

Ultima modifica effettuata da il 08/11/2009 alle 14:18
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 14:29
Domenica, 08/11/2009
Testo quotato

Postato originariamente da Riuzaki:

precisamente devo sostenere a febbraio l'esame di fondamenti di informatica....oltre ad analisi uno, fisica uno ed economia aziendale....
mi sto appassionando al mondo dell'informatica...è bellissimo :)

ora è chiarissimo grazie, l'unica cosa che non ho capito è quel

char cLastDigit = NULL;

perchè lo hai inizializzato a NULL e cosa vuol dire NULL???



NULL è questo:

Codice sorgente - presumibilmente C/C++

  1. #define NULL 0



ovvero NULL come scrivere 0 :)

cmq non dire che ti stai appassionando all'informatica perchè io :love: :love:

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 14:32
Domenica, 08/11/2009
tu in cosa sei laureato?:)

senti posso avere il tuo indirizzo msn cosi da poterti disturbare per avere chiarimenti quando non capisco una cosa...:) hahaha:rofl:

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 14:51
Domenica, 08/11/2009
Testo quotato

Postato originariamente da Riuzaki:

tu in cosa sei laureato?:)

senti posso avere il tuo indirizzo msn cosi da poterti disturbare per avere chiarimenti quando non capisco una cosa...:) hahaha:rofl:



laureato non ancora, sono al terzo anno di ing. informatica e dovrei farcela quest'anno, poi ovviamente c'è la specialistica quindi il cammino è ancora lungo.

msn te lo mando in pvt

PM Quote