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++ - [AIUTO]Programma per invertire serie di parole inserite da tastiera
Forum - C/C++ - [AIUTO]Programma per invertire serie di parole inserite da tastiera - Pagina 2

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 17:28
Mercoledì, 19/05/2010
sisi chiarissimo!
grazie per l'intrvento:k:

PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 17:36
Mercoledì, 19/05/2010
Ragazzi ora ho complicato un pò le cose..
praticamente ora devo verificare se le parole immesse sono palindrome.
io ho fatto cosi:
Ricordo che le parole palindrome pe es. possono essere: anna,radar enne etc.
C'èun problema però..nella stampa come primo termine mi stampa qualcosa di strano...
se inserisco
ho un radar in tasca tasca
mi esce(in foto):
il codice è:
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define maxchar 21
  5. #define maxparole 10
  6.  
  7. int reverse_lett(char word[maxchar]);/*funzione per invertire l'ordine delle lettere nella stringa*/
  8.  
  9. int main()
  10. {
  11.     enum {SI,NO};
  12.     int i=0,j,ESCI,cont[maxparole];
  13.     ESCI=NO;/*verifica l'uscita dal ciclo*/
  14.     char parole[maxparole][maxchar],temp[maxchar]={'\0'};
  15.     printf("Inserire serie di parole\n");
  16.     while(ESCI==NO)/*ciclo while per riempire il vettore di stringhe*/
  17.     {
  18.         scanf("%s",temp);/*variabile temporanea*/
  19.         if((strcmp(temp,parole[i-1])==0))/*confronto*/
  20.         ESCI=SI;
  21.         else
  22.         {
  23.             strcpy(parole[i],temp);/*copia della stringa nel vettore*/
  24.             i++;
  25.         }
  26.     }
  27.     for(j=i;j>=0;j--)
  28.     /*ciclo per mandare alla funzione tutte le stringhe immesse*/
  29.     {
  30.         cont[j]=reverse_lett(parole[j]);/*funzione che stampa e allo stesso tempo mi dice se una parole è palindroma*/
  31.     }
  32.     for(j=0;j<=i;j++)/*for che verifica se è palindroma*/
  33.     {
  34.         if(cont[j]==128)
  35.         printf("la parola %s e' palindroma\n",parole[j]);
  36.     }
  37.     return EXIT_SUCCESS;
  38. }
  39. /*-----inizio funzione reverse------*/
  40. int reverse_lett(char word[maxchar])
  41. {
  42.     char palin[maxchar];/*nuova stringa*/
  43.     int k,lung=strlen(word);
  44.     int x=lung-1,compar;
  45.     char temp;
  46.     strcpy(palin,word);
  47.     for(k=0;k<(lung/2);k++)
  48.     {
  49.         temp=palin[k];
  50.         palin[k]=palin[x];
  51.         palin[x]=temp;
  52.         x--;
  53.     }
  54.  
  55.     /*ora la stringa è rovesciata*/
  56.     printf("%s\n",palin);/*stampa*/
  57.     compar=strcmp(palin,word);
  58.     if(compar==0)/*verifico se la stringa è palindroma confrontando l'originale con l'inversa*/
  59.     return compar+128;/*se è palindroma nel main avrò 128*/
  60.     else
  61.     return EXIT_SUCCESS;/*altrimenti esco normalmente*/
  62. }



u_boss ha allegato un file: Cattura.PNG (34060 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 17:52
Mercoledì, 19/05/2010
hai di nuovo sbagliato nei cicli for del main(), sono concettualmente gli stessi errori che hai fatto prima, poi perché fai ritornare 128? cioè perché fai return compar+128?

PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 17:55
Mercoledì, 19/05/2010
perchè se metto solamente return compar (che è uguale a zero) mi conta come palindromi tutti i valori e non ho capito perchè.
comunque potresti segnalarmi gli errori che faccio e spiegarmi perchè come ho fatto non funge correttamente?

PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 17:59
Mercoledì, 19/05/2010
ok ho capito gli errori.
In pratica il ciclo for aumenta i di 1.Ma l'aumenta anche nel caso la parola è uguale, allora nel ciclo per stampare devo partire da i-1!
ma per il discorso dei problemi col return compar che mi sai dire?
lì non trovo nessuna spiegazione!

PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 18:02
Mercoledì, 19/05/2010
--------RISOLTO-------------
Perchè in pratica EXIT_SUCCESS equivale ad 0!

PM Quote
Avatar
Premoli (Normal User)
Pro


Messaggi: 108
Iscritto: 25/06/2009

Segnala al moderatore
Postato alle 18:03
Mercoledì, 19/05/2010
Codice sorgente - presumibilmente Plain Text

  1. for(j=i;j>=0;j--) //sostituiscilo con for(j=0; j<i; j++)
  2.    
  3. for(j=0;j<=i;j++) //al posto di <= ci devi mettere <



Per l'if puoi fare semplicemente così:

Codice sorgente - presumibilmente C/C++

  1. if(compar==0)
  2.     return 1;


PM Quote
Avatar
u_boss (Normal User)
Newbie


Messaggi: 11
Iscritto: 19/05/2010

Segnala al moderatore
Postato alle 18:09
Mercoledì, 19/05/2010
per il primo for che mi hai fatto notare non posso fare cosi perchè è richiesto nell'esercizio espressamente di stampare le parole al contrario nell'ordine inverso in cui sono state inserite!:D

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo