Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Copiare un array di caratteri su una matrice

    Ciao a tutti!

    Mi serve un po' del vostro aiuto..
    /*
    *C'è una matrice A di dimensione MxN di caratteri ed un array B di lunghezza L=MxN. In ogni ennupla di B ci sono solo maiuscoli o solo minuscoli.
    *Bisogna scrivere un programma che copi in A i valori di B inserendo ogni ennupla in una riga in modo che nelle prime righe siano inserite le ennuple con caratteri maiuscolo e nelle ultime righe le ennuple con caratteri minuscoli..

    Ex: M=5,N=3,L=15

    B="lol PAL YES kit POP"

    A=
    PAL
    YES
    POP
    lol
    kit
    */

    Sto cercando di risolvere questo esercizio sui array bidimensionali. E sono riuscito ad identificare quali sono le ennuple di caratteri maiuscoli e quelli minuscoli. Ma nel momento in qui queste ennuple devono essere copiate nella matrice, non so come si deve applicare i vari cicli in maniera adatta. Qualcuno mi può dare una mano con la funzione copia..?

    Ecco quello che sono riuscito a fare fino ad ora..:
    codice:
    #include<stdio.h>
    
    int colmax;
    
    void copia(char A[][colmax],char B[],int M,int N,int i){
        //Qui vengono copiati i caratteri del B in A ... ?!?help!
    
    
        
    }
    
    void controlla(char A[][colmax],char B[],int M,int N,int L){
        int i,colonna,riga;
    
    //Cerca le ennuple maiuscoli    
        for(i=0;i<L;i+=N){
            if(B[i]>='A' && B[i]<='Z'){
                copia(A,B,M,N,i);
            }
        }
    
    //Cerca le ennuple minuscoli
        for(i=0;i<L;i+=N){
            if(B[i]>='a' && B[i]<='z'){
                copia(A,B,M,N,i);
            }
        }
    
    //Stampa matrice A
        for(riga=0;riga<M;riga++){
            for(colonna=0;colonna<N;colonna++){
                printf("%c ",A[riga][colonna]);
            }
            printf("\n");
        }
    
    }
    
    int main(){
        int M=5,N=3,L=M*N;
        char B[]="casMARSONpalESA";
        char A[M][N];
    
        colmax=N;
        controlla(A,B,M,N,L);
        printf("\n\n");
        system("pause");
        return 0;
    }
    Qualsiasi tipo di aiuto verrà apprezzato tanto!
    Grazie!

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    ho dato un'occhiata al codice, e bhè come idea mi è venuta in mente di poter usare l'operazione di mod % ( resto della divisione ) per non andare fuori dai limiti della matrice! inoltre secondo me è superfluo passare tutto il vettore B alla funzione copia! io ho provato a fare una soluzione così, vedi un pò se ti potrebbe essere utile:
    codice:
    #include<stdio.h>
    
    int colmax;
    
    void copia(char A[][colmax],char car,int* i, int* j) 
    { 
        if ( (*j)%colmax == 0 && (*j)!=0 ) { 
             (*i)++;   
             (*j)=0;
        }
        A[*i][(*j)%colmax] = car;
        (*j)++;
           
    }
    
    void controlla(char A[][colmax],char B[],int M,int N,int L){
        int i,colonna,riga;
        int r=0, c=0;
    
    //Cerca le ennuple maiuscoli  
        for(i=0;i<L;i++){
            if(B[i]>='A' && B[i]<='Z'){
                copia(A,B[i],&r,&c);
            }
        }
    
    //Cerca le ennuple minuscoli
        for(i=0;i<L;i++){
            if(B[i]>='a' && B[i]<='z'){
                copia(A,B[i],&r,&c);
            }
        }
    
    //Stampa matrice A
        for(riga=0;riga<M;riga++){
            for(colonna=0;colonna<N;colonna++){
                printf("%c",A[riga][colonna]);
            }
            printf("\n");
        }
    
    }
    
    int main(){
        int M=5,N=3,L=M*N;
        char B[]="casMARSONpalESA";
        char A[M][N];
    
        printf ("%s\n", B);
        colmax=N;
        controlla(A,B,M,N,L);
        printf("\n\n");
        system("pause");
        return 0;
    }
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Wow grandissimo! Non so perché non mi è mai venuto quest'idea di utilizzare (%)! Beh comunque è da poco tempo che studio programmazione quindi penso che dovrei migliorare ancora tanto. Grazie mille per la tua risposta e i suggerimenti.

    codice:
    void copia(char A[][colmax],char car,int* i, int* j) 
    { 
        if ( (*j)%colmax == 0 && (*j)!=0 ) { 
             (*i)++;   
             (*j)=0;
        }
        A[*i][(*j)%colmax] = car;
        (*j)++;
           
    }

    L'unica cosa che vorrei capire è perché hai usato nella funzione copia per una seconda volta A[*i][(*j)%colmax]. A quanto pare, visto che questo l'abbiamo già controllato precedentemente nell'if, si può direttamente scrivere A[*i][*j]=car, vero?

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    L'unica cosa che vorrei capire è perché hai usato nella funzione copia per una seconda volta A[*i][(*j)%colmax]. A quanto pare, visto che questo l'abbiamo già controllato precedentemente nell'if, si può direttamente scrivere A[*i][*j]=car, vero?
    bhè si ottima osservazione...mettere A[*i][(*j)%colmax] è del tutto superfluo, basta semplicemente [b]A[*i][*j] visto che appunto come dicevi il controllo lo si fa prima, oppure si lascia A[*i][(*j)%colmax], ma si toglie l'operazione dell'if (*j)=0 perchè risulterebbe superflua! spero di essermi spiegato...
    Wow grandissimo! Non so perché non mi è mai venuto quest'idea di utilizzare (%)! Beh comunque è da poco tempo che studio programmazione quindi penso che dovrei migliorare ancora tanto.
    bhè non ti preoccupare, anche io all'inizio quando mi proponevano delle soluzioni alternative, dicevo: "cavolo ma chi ci avrebbe mai pensato!!!", ma poi piano piano, studiando e programmando, le idee vengono!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.