Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11

    [C]programmino anagrammi

    cosa c'è di sbagliato? perchè non mi trova gli anagrammi corretti?
    so che il problema è nel ciclo for ma non riesco a individuarlo!



    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    codice:
    int main (void)
    
       {
    
           char p1[20];
           char p2[20];
    
           int i=0;
           int x,k,temp,temp2;
           char p1aux[20];
           char p2aux[20];
    
    
           printf ("digita una parola: ");
           scanf ("%s", p1);
           printf ("digita una seconda parola: ");
           scanf ("%s", p2);
    
    
           strcpy(p1aux,p1);
           strcpy(p2aux,p2);
            if (strlen(p1)==strlen(p2)){
    
    
                    for (k=0; k<(strlen(p1)-1); k++){
                            for (i=k; i<strlen(p1); i++){
    
                                            if (p1aux[i]>p1aux[i+1]) {
    
                                                        temp=p1aux[i];
                                                        p1aux[i]=p1aux[i+1];
                                                        p1aux[i+1]=temp;
                                                        }
    
    
                            }}
    
                for (i=0; i<(strlen(p1)-1); i++) {
                            for (k=i; k<strlen(p1); k++) {
    
                                 if(p2aux[k]>p2aux[k+1]) {
                                        temp2=p2aux[k];
                                        p2aux[k]=p2aux[k+1];
                                        p2aux[k+1]=temp2;                             }
    
                            }}
    
                             printf( "%s\n", p1aux);
                            printf ("%s\n", p2aux);
            if (strcmp(p1aux,p2aux)==0)
                        printf ("le parole sono un anagramma!");
    
    else printf ("le parole non sono un anagramma");
    
        }
    
            else
                        printf ("le parole non sono anagrammi!");
    return 0;
       }

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11
    provandolo a correggere così ho notato che dopo essere entrati nei cicli for (bubble sort) le due stringhe p1aux e p2aux escono senza valori... come mai??

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    int main (void)
    
       {
    
           char p1[20];
           char p2[20];
    
           int i=0;
           int x,k,temp,temp2;
           char p1aux[20];
           char p2aux[20];
    
    
           printf ("digita una parola: ");
           scanf ("%s", p1);
           printf ("digita una seconda parola: ");
           scanf ("%s", p2);
    
    
           strcpy(p1aux,p1);
           strcpy(p2aux,p2);
           printf ("%s\n%s\n", p1aux , p2aux);
    
    
    
                    for (k=0; k<(strlen(p1)-1); k++){
                            for (i=0; i<strlen(p1); i++){
    
                                            if (p1aux[k]>p1aux[i+1]) {
    
                                                        temp=p1aux[k];
                                                        p1aux[k]=p1aux[i+1];
                                                        p1aux[i+1]=temp;
                                                        }
    
    
                            }}
    
                for (i=0; i<(strlen(p1)-1); i++) {
                            for (k=0; k<strlen(p1); k++) {
    
                                 if(p2aux[i]>p2aux[k+1]) {
                                        temp2=p2aux[i];
                                        p2aux[i]=p2aux[k+1];
                                        p2aux[k+1]=temp2;                             }
    
                            }}
    
    printf( "ciao:%s\n", p1aux);
    printf ("ciao: %s\n", p2aux);
            if (strcmp(p1aux,p2aux)==0)
                        printf ("le parole sono un anagramma!");
    
    else printf ("le parole non sono un anagramma");
    
    
    
    
    return 0;
       }

  3. #3
    Utente di HTML.it L'avatar di ybla82
    Registrato dal
    Jan 2009
    Messaggi
    92
    Ciao,
    in pratica hai sbagliato l'algoritmo di sort.

    te l'ho riscritto .

    codice:
    for (i=0; i<(strlen(p1) - 1); i++) 
    { 
        if (p1[i]>p1aux[i+1]) 
        { 
                temp=p1aux[i]; 
                p1aux[i]=p1aux[i+1]; 
                p1aux[i +1]=temp; 
                i = -1; 
         } 
    }
    Dopo che confronti due lettere e le scambi, devi far ripartire il ciclo.

    La prossima volta indenta un po' meglio il codice.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11
    scusa ma non ho capito.. ho provato a mettere il tuo codice ma non succede nulla.. mi si blocca dopo i primi due printf come se finisse li......

  5. #5
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    cosi sono giusti

    codice:
    for (k=0; k<(strlen(p1)-1); k++){
                            for (i=k+1; i<strlen(p1); i++){
    
                                            if (p1aux[k]>p1aux[i]) {
    
                                                        temp=p1aux[k];
                                                        p1aux[k]=p1aux[i];
                                                        p1aux[i]=temp;
                                                        }
    
    
                            }}
    
                for (i=0; i<(strlen(p1)-1); i++) {
                            for (k=i+1; k<strlen(p1); k++) {
    
                                 if(p2aux[i]>p2aux[k]) {
                                        temp2=p2aux[i];
                                        p2aux[i]=p2aux[k];
                                        p2aux[k]=temp2;                             }
    
                            }}

  6. #6
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Per velocizzare il codice è meglio se la lunghezza della stringa la salvi in una costante, invece di calcolarla ad ogni iterazione.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    11
    Originariamente inviato da rsdpzed
    cosi sono giusti

    codice:
    for (k=0; k<(strlen(p1)-1); k++){
                            for (i=k+1; i<strlen(p1); i++){
    
                                            if (p1aux[k]>p1aux[i]) {
    
                                                        temp=p1aux[k];
                                                        p1aux[k]=p1aux[i];
                                                        p1aux[i]=temp;
                                                        }
    
    
                            }}
    
                for (i=0; i<(strlen(p1)-1); i++) {
                            for (k=i+1; k<strlen(p1); k++) {
    
                                 if(p2aux[i]>p2aux[k]) {
                                        temp2=p2aux[i];
                                        p2aux[i]=p2aux[k];
                                        p2aux[k]=temp2;                             }
    
                            }}
    così funziona... ed ero anche sicuro di averlo provato ma evidentemente avevo sbagliato qualcosa! grazie mille! gentilissimi tutti!

    ps..alll'ottimizzazione ci penserò quando avrò più dimestichezza

  8. #8
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    occhio che c'è un errore che mi sono portato dietro dal copia incolla del tuo codice, il secondo ciclo di ordinamento è strlen(p2) e non di p1, fnziona in tutti quei casi in cui p2 è maggiore o uguale a p1 è per questo che non te ne sei accorto.

    anzi per fare ancora meglio andando sulla scia del consiglio di who direi che all'inizio ci fai subito un bel controllo su le due strlen ed eviti di fare gli ordinamenti e i confronti gia se le due lunghezze sono diverse.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.