Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] ordine lessicografico

    Ho due vettori:uno contenente degli interi, l'altro dei caratteri. Devo mettere in ogni cella di terzo vettore il carattere precedente in ordine lessicografico a quello presente nel vettore di caratteri il cui indice è indicato dal vettore di interi.
    Per esempio:
    Il vettore di interi è: 3 9 1

    Il vettore di caratteri è: b c d e f g h i l

    quindi nel terzo vettore andrà: c i a

    Il codice che ho scritto per fare questo è:
    codice:
    void elabora(char dec[],int *dimd, int vet[],int dimv,char mat[])
    {
        int i;
        i=0;
        for(i=0;i<dimv;i++)
        {
            dec[i]=(mat[vet[i]]-1);
        }
        *dimd=i;
     }
    Ma purtroppo non viene scalato il carattere in ordine lessicografico, o meglio, viene scalato come SE considerassimo il carattere successivoa quello effettivo(infatti se metto -2 invece di -1 ottengo i caratteri cercati). In pratica:




    Il main è:
    codice:
    int dimv,dimm,dimd,i;
        int vet[100];
        char mat[50],dec[100];
        lettura(vet,&dimv,mat,&dimm);
        if(dimv==-1)
        {
            printf("Errore nell'apertura di uno dei due file\n");
        }
        else
        {
            printf("Stampa vettore numerico\n");
            for(i=0;i<dimv;i++)
            {
                printf("%d ", vet[i]);
            }
            printf("\n");
            printf("Stampa vettore di caratteri\n");
            for(i=0;i<dimm;i++)
            {
                printf("%c", mat[i]);
            }
            elabora(dec,&dimd,vet,dimv,mat);
            printf("\n");
            printf("Stampa risultato(invece di casa)\n");
            for(i=0;i<dimd;i++)
            {
                printf("%c",dec[i]);
            }
            printf("\n");
     }

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Non hai postato tutto il codice quindi non si capisce se le variabili che indicano la dimensione degli array sono inizializzate ! potresti usare delle costanti al posto di variabili.
    poi le passi per indirizzo alla funzioni quindi per usarle devi anteporre *
    al nome delle variabili .
    sottrai 1 in modo sbagliato .


    codice:
    void elabora(char dec[],int *dimd, int vet[],int dimv,char mat[])
    {
        int i;
        i=0;
        for(i=0;i<dimv;i++)
        {
            // dec[i]=(mat[vet[i]]-1); come hai scritto tu
               dec[i]=(mat[vet[i]-1]); // indica il valore dell'array vet[] in posizione i -1
        }
        *dimd=i;
     }
    Tecnologia

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Appena ho la possibilità modifico il post con il codice completo. Comunque, per quanto riguarda il -1: dal momento che devo prendere il carattere precedente il -1 non dovrebbe andare fuori dalla parentesi? Nel senso, se per esempio mat[vet[i]] indica 'd', mat[vet[i]] -1 indica il carattere precedente al 'd' ovvero 'c', che è quello che serve a me!

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    a riciao

    Non avevo capito bene quello che dovevi fare !

    comunque visto che nell'array di int avrai numeri che indicano secondo terzo carattere
    tipo 2
    se vuoi prendere il secondo carattere dell'array di char che parte da zero devi fare 2-1

    Prova cosi sempre che abbia capito cosa devi fare !
    un po capisco poco io un po ti spieghi male tu

    codice:
    void elabora(char dec[],int *dimd, int vet[],int dimv,char mat[])
    {
        int i;
        i=0;
        for(i=0;i<dimv;i++)
        {
                       dec[i]=(mat[vet[i]-1]-1); // indica il valore dell'array vet[] in posizione i -1
        }
        dec[i]=0;
        *dimd=i;
     }
    Se invece i numeri dell'array int indicano gli indici dell array char va bene come avevi fatto tu
    la funzione comunque lo provata e funziona ritorna il carattere che precede nell alfabeto
    il carattere contenuto nell array di char nella posizione indicata nell array int
    Tecnologia

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    L'errore negli indici Ti ringrazio per l'aiuto!

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.