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++ - Piccolo intoppo col valore massimo
Forum - C/C++ - Piccolo intoppo col valore massimo

Avatar
swet (Normal User)
Pro


Messaggi: 128
Iscritto: 01/01/2009

Segnala al moderatore
Postato alle 20:10
Mercoledì, 16/07/2014
Salve ragazzi, tra non molto dovrò affrontare un' esame sulla programmazione in C.
Il testo chiede di inserire delle sequenze di caratteri  e quindi di trovare la parola più lunga tra quelle inserite.
Non bisogna usare array o funzioni stringa.

Di seguito il codice scritto da me:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. /*testo di esame del 16/01/2014*/
  3.  
  4. int main(){
  5. printf("Benvenuto nel programma\n");
  6. printf ("Inserisci una sequenza di caratteri\n");
  7. int numerospazi,parola1,parola2,parolapiulunga; //contatori
  8. //inizializzo i contatori
  9. parolapiulunga=0;
  10. numerospazi = 0;
  11. parola1=0;
  12. parola2=0;
  13. // dichiaro la variabile che conterrà il carattere letto dalla getchar()
  14. char c ;
  15. do{
  16.         //leggo il carattere
  17.         c=getchar();
  18.         //incremento il contatore di parola1
  19.         parola1++;
  20.         // se viene premuta la barra spaziatrice
  21.         if (c==32 && c!=10){// c!=10 serve per evitare l'echo generato dalla getchar()
  22.         //incremento il contatore degli spazi
  23.                 numerospazi++;
  24.         //routine per la seconda parola
  25.                 do {
  26.                 //leggo il carattere
  27.                 c=getchar();
  28.                 //incremento il contatore di parola2
  29.                 parola2++;}
  30.                 // fin quando non viene premuta nuovamente la barra spaziatrice
  31.                 while(c!=32 );
  32.                
  33.                 //incremento il contatore degli spazi
  34.         numerospazi++;
  35.                 // confronto le parole inserite per determinare la più lunga
  36.         if (parola2 > parola1 ){
  37.                 if (parola2>parolapiulunga)
  38.                         parolapiulunga=parola2;
  39.                        
  40.                        
  41.         }else
  42.         if(parola1 > parola2 ){
  43.                 if (parola1>parolapiulunga)
  44.                         parolapiulunga=parola1;
  45.                        
  46.         }
  47.         parola1=0;
  48.         parola2=0;
  49.         }
  50.  
  51. }
  52. // L' input termina quando viene generato il segnale EOF ctrl+z
  53. while (c!=EOF);
  54. // stampo a video i risultati
  55. printf("Hai inserito %d numero di spazi\n",numerospazi);
  56. printf("La parola piu' lunga contiene %d caratteri\n",parolapiulunga);
  57. //programma terminato correttamente
  58. return 0;
  59. }



Non riesco ad ottenere il numero di caratteri che contengono la parola più lunga, infatti , al termine dell' esecuzione :
Codice sorgente - presumibilmente Plain Text

  1. parolapiulunga=numeri apparentemente casuali.


invece che mostrare la parola più lunga inserita
Sicuramente è un errore stupido ma non ne esco!

Grazie

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:51
Venerdì, 18/07/2014
Non ti serve tenere traccia della seconda parola. Tieni solamente traccia della lunghezza della parola piu' lunga inserita fino ad ora.

Codice sorgente - presumibilmente C/C++

  1. int maxLength = 0;
  2. // ...
  3. if (parola1 > maxLength) maxLength = parola1;



Ti semplifichera' il do-while di un bel po'.


Il mio blog: https://piero.dev
PM Quote
Avatar
swet (Normal User)
Pro


Messaggi: 128
Iscritto: 01/01/2009

Segnala al moderatore
Postato alle 14:45
Sabato, 19/07/2014
Grazie!!! Avevo risolto alla fine , ma con la tua soluzione risparmio un bel po di codice inutile!


PM Quote