Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18
  1. #11
    Originariamente inviato da clynamen
    codice:
    int i,j,k=0,*p; 
    p = (int*)calloc(k,sizeof(int));
    Devi immagazzinare tutti i possibili multipli di 5 nell'array p, quindi alloca lo spazio necessario. Se passi 0 ottieni un array di dimensioni pari a 0...

    Deve restituire un puntatore che punta all'inizio dell'array. Ti consiglio di studiare gli array in modo piu` approfondito
    ma il fatto è che non so quanti allocarne. probabilmente devo fare un caso generico.è per questo che avevo messo k.
    tu come lo faresti?

  2. #12
    La soluzione migliore e` usare un contenitore che puo` essere ingrandito (vedi liste, deque, stack etc. ).
    La piu` semplice e` contare il numero di multipli di 5, poi creare un array delle dimensioni necessarie e infine assegnare i valori

  3. #13
    Originariamente inviato da clynamen
    La soluzione migliore e` usare un contenitore che puo` essere ingrandito (vedi liste, deque, stack etc. ).
    La piu` semplice e` contare il numero di multipli di 5, poi creare un array delle dimensioni necessarie e infine assegnare i valori
    ma supponendo che i multipli di 5 siano k la mia funzione non sarebbe corretta?

  4. #14
    Originariamente inviato da clynamen
    La soluzione migliore e` usare un contenitore che puo` essere ingrandito (vedi liste, deque, stack etc. ).
    La piu` semplice e` contare il numero di multipli di 5, poi creare un array delle dimensioni necessarie e infine assegnare i valori
    ho capito.hai ragione.
    cioè prima li conto e poi li passo.
    ma per contarli devo creare un ciclo for?
    potresti aiutarmi a scrivere la riga di codice che mi serve?

  5. #15
    codice:
    int numeroDiMultipli = 0;
    for (i=0; i<nrighe; i++) { 
       for (j=0; j<ncolonne; j++) { 
        if (mat[i][j] % 5 == 0)
          ++numeroDiMultipli;
      } 
    }

  6. #16
    In alternativa ti puoi preparare semplicemente per il caso peggiore: alloca un vettore di dimensione nrighe*ncolonne, sicuramente non puoi avere più multipli di cinque del numero di elementi totali della matrice. Al limite a posteriori - quando sai quanti multipli di cinque effettivamente ci sono - puoi fare una realloc e restringere il blocco.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #17
    Originariamente inviato da clynamen
    codice:
    int numeroDiMultipli = 0;
    for (i=0; i<nrighe; i++) { 
       for (j=0; j<ncolonne; j++) { 
        if (mat[i][j] % 5 == 0)
          ++numeroDiMultipli;
      } 
    }
    provando a scorrere la matrice 2 volte quindi il codice sarebbe questo?
    codice:
    int *conta(unsigned int **mat,int nrighe, int ncolonne){
    int i,j,k=0,*p;
    for (i=0; i<nrighe; i++) { 
       for (j=0; j<ncolonne; j++) { 
        if (mat[i][j] % 5 == 0)
          ++k;
    }
    }
    p = (int*)calloc(k,sizeof(int));
    for (i=0; i<nrighe; i++) { 
       for (j=0; j<ncolonne; j++) { 
        if (mat[i][j] % 5 == 0){
        p[k++]=mat[i][j];
      } 
    }
    return p;
     } 
    }

  8. #18
    Devi resettare k a zero prima del secondo giro...

    In ogni caso, per casi come questi un idioma comune è scrivere la funzione in modo che accetti l'array di destinazione come argomento e restituisca il numero di elementi trovati; se viene passato NULL, si limita a contare gli elementi.
    Dall'esterno della funzione si fa una prima chiamata per sapere il numero di elementi necessario, si alloca la memoria e poi si chiama nuovamente la funzione questa volta passandole l'array:
    codice:
    int conta(unsigned int **mat,int nrighe, int ncolonne, int * dest){
        int i,j,k=0;
        for (i=0; i<nrighe; i++) { 
           for (j=0; j<ncolonne; j++) { 
               if (mat[i][j] % 5 == 0) {
                   if(dest!=NULL)
                       dest[k]=mat[i][j];
                   ++k;
                }
           }
        }
       return k;
    }
    
    /* ... da fuori ... */
    int n=conta(mat, nrighe, ncolonne, NULL);
    int * dest = calloc(n, sizeof(int));
    cont(mat, nrighe, ncolonne, dest);
    nota tra l'altro che questo evita confusioni su chi debba deallocare la memoria (è il chiamante che gestisce il tutto) e consente più flessibilità al chiamante sulla scelta di come allocare la memoria in questione.
    Amaro C++, il gusto pieno dell'undefined behavior.

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