Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892

    [C]: vettore di occorrenze

    Salve a tutti!
    Ho un piccolo problema:
    ho un vettore di double e dovrei contare l'occorrenza di ogni elemento (cioè quante volte quel numero ricompare sul vettore)!

    Ho provato ma niente da fare (sn uno zuccone patentato)

    chi mi dà una mano???
    Debian Sarge 3.01a
    Slackware 10.2

  2. #2
    beh si può fare in molti modi... un'idea sarebbe quella di dichiarare una matrice di dim_array righe e 2 colonne dove memorizzare nella prima colonna l'elemento e nella seconda la frequenza...
    codice:
    double a[10];
    double m[10][2];
    //inizializzare m[i][1] a 1
    
    for (int i=0; i<10; i++){
         m[i][0]=a[i];
         for (int j=0; j<10; j++){
             if (i!=j)&&(m[i][0]==a[j])
                  m[i][1]++;
         }
    }
    non è un gran che però + o - dovrebbe andare... nota che se l' array fosse questo: 1 2 3 3 3 4 5 1 1 1 la matrice risulterebbe cosi:

    1----->4
    2----->1
    3----->3
    3----->3
    3----->3
    4----->1
    5----->1
    1----->4
    1----->4
    1----->4
    Powered by MacOSX Lion

  3. #3
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    ma si potrebbe far solo con un vettore lineare dove si va a incrementare ogni suo elemento ogni volta che viene trovata una occorrenza dello stesso carattere?


    qualche aiutino in + ???
    Debian Sarge 3.01a
    Slackware 10.2

  4. #4
    per i caratteri puoi farlo, sono in numero limitato, ma coi double come fai?
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #5
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    ma anche con i numeri !
    scusa io ho un vettore di partenza e voglio contare quante volte ogni elemento compare per poi determinare il carattere che compare il massimo numero di volte!

    credo che si possa fare, ma ci ho provato e mi dà errori stupidi!
    boh !!

    aiutino??
    Debian Sarge 3.01a
    Slackware 10.2

  6. #6
    certo che si può fare... diciamo che il metodo che ti ho fornito io era il più pulito chiaro e leggibile possibile tu puoi però dichiararti un secondo array di interi della stessa lunghezza di quello di double...

    double a[10];
    int occ[10];


    for (int i=0; i<10; i++){
    for (int j=0; j<10; j++){
    if (a[i]==a[j])//tolgo i!=j così non devi inizializzare occ a 1
    occ[i]++;
    }
    }

    e ottieni lo stesso risultato...
    Powered by MacOSX Lion

  7. #7
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    era così cha avevo fatto anche io! ma non funzionava !!!
    Debian Sarge 3.01a
    Slackware 10.2

  8. #8
    Ah, in questo senso...
    Io avevo capito che volevi utilizzare un elemento dell'array per ogni possibile numero.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  9. #9
    codice:
    #include <stdio.h>
    
    main(){
    int a[10]={1,1,3,1,4,5,3,3,6,4};
    int occ[10]={0,0,0,0,0,0,0,0,0};
    int i,j;
    
    for (i=0; i<10; i++){ 
      for (j=0; j<10; j++){ 
       if (a[i]==a[j])//tolgo i!=j così non devi inizializzare occ a 1 
       occ[i]++; 
      } 
     } 
     
    for (i=0; i<10;i++)
     printf("il numero di %d e %d \n",a[i],occ[i]);
     
    }
    e questo è l'output che ottengo io:

    codice:
    il numero di 1 e 3
    il numero di 1 e 3
    il numero di 3 e 3
    il numero di 1 e 3
    il numero di 4 e 2
    il numero di 5 e 1
    il numero di 3 e 3
    il numero di 3 e 3
    il numero di 6 e 1
    il numero di 4 e 2
    a me funziona....
    Powered by MacOSX Lion

  10. #10
    Utente di HTML.it L'avatar di Fabiuz
    Registrato dal
    Nov 2004
    Messaggi
    892
    allora visto che non ci capisco + niente dimmi perchè mi va in loop quando cerco di fare l'inserimento dei valori del vettore:

    codice:
    #include <stdio.h>
    
    double carica(double a[],int dim){
      int i;
      for (i=0; i<dim; i++){
        printf("Inserire %d numero:",i+1);
        scanf("%f",&a[i]);
      }
     return;
    }
    
    double maxoccorrenza (double a[],int dim){
      double max;
      int i,j,vettocc[dim];
      for (i=0; i<dim; i++){
       for (j=0; j<dim; j++){
        if (a[i]==a[j])
          vettocc[j]++;
       }
      }
      for (j=0; j<dim; j++){
       if (vettocc[j]<=vettocc[j+1])
        max=(vettocc[j+1]);
       else{
         for (j=0; j<dim; j++)
          if (vettocc[j]==vettocc[j+1])
           max= 0;
       }
      }
      return max;
    }
    
    int main(){
      int dim,b;
      double a[dim];
      printf("Inserire un numero intero positivo: ");
      scanf("%d",dim);
      carica(a,dim); 
      b=maxoccorrenza(a,dim);
      printf("Elemento che occorre il massimo numero di volte:%d\n",b);
      return 0;
    }
    Grazie mille!
    Debian Sarge 3.01a
    Slackware 10.2

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.