Ricerca su array monodimensionali

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Ricerca su array monodimensionali

    Niente non riesco ad risolvere il problema. Anche se dovrebbe essere molto semplice.
    NOn riesco ad calcolarmi l'indice del "for" come si deve. Ho provato in vari modi, ma nulla.
    bohhhh qualche aiutino in piu??

    p.s. l'esercizio non 'e per scopi scolastici, ma sto cercando di imparare il C da solo...
  • Re: Ricerca su array monodimensionali

    vbextreme ha scritto:


    Per calcolare la posizione monodimensionale con input in base 1 allora sara

    Posizione = ( (riga - 1) * numerocolonne ) + ( colonne - 1 )

    Con le parentesi é sempre meglio abbondare perché uno si legge meglio la formula e due si evitano errori di precedenza non voluti e spesso difficili da trovare.
    Dato che l'indice di un'array parte da 0:

    Posizione = ( riga * numerocolonne ) + colonne

    riga e colonna le ricavi dalle variabili dei due cicli
  • Re: Ricerca su array monodimensionali

    ale99 ha scritto:


    vbextreme ha scritto:


    Per calcolare la posizione monodimensionale con input in base 1 allora sara

    Posizione = ( (riga - 1) * numerocolonne ) + ( colonne - 1 )

    Con le parentesi é sempre meglio abbondare perché uno si legge meglio la formula e due si evitano errori di precedenza non voluti e spesso difficili da trovare.
    Dato che l'indice di un'array parte da 0:

    Posizione = ( riga * numerocolonne ) + colonne

    riga e colonna le ricavi dalle variabili dei due cicli
    Parli per la stampa dell'array come una tabella con tot colonne e righe???

    Aiutooooooooo non riesco e ci devo riuscireeeeeee
  • Re: Ricerca su array monodimensionali

        #define NROW 10
        #define NCOL 20
    
        int map[NROW * NCOL];
    
        //example 1 to linear
        int ix,iy;
    
        for (iy = 0; iy < NROW ; iy++)
        {
            for (ix = 0; ix < NCOL ; ix++)
            {
                map[ (iy * NCOL) + ix ] = 0;
            }
        }
    
        //example input user with index base 1 to size
        //..input emulation
        int inpy = 5;
        int inpx = 4;
    
        map[ ( (inpy - 1) * NCOL) + (inpx-1) ] = 1;
    Non ho ben capito cosa non riesci,posta di nuovo il codice e spiegati meglio
  • Re: Ricerca su array monodimensionali

    vbextreme ha scritto:


        #define NROW 10
        #define NCOL 20
    
        int map[NROW * NCOL];
    
        //example 1 to linear
        int ix,iy;
    
        for (iy = 0; iy < NROW ; iy++)
        {
            for (ix = 0; ix < NCOL ; ix++)
            {
                map[ (iy * NCOL) + ix ] = 0;
            }
        }
    
        //example input user with index base 1 to size
        //..input emulation
        int inpy = 5;
        int inpx = 4;
    
        map[ ( (inpy - 1) * NCOL) + (inpx-1) ] = 1;
    Non ho ben capito cosa non riesci,posta di nuovo il codice e spiegati meglio

    praticamente voglio che che l'array monodimensionale viene stamapata come una tabella semplice di NCOL e NRIG che ho definito nella #define.
    Non capisco come impostarlo!??
    
    #include <stdio.h>
    #define NCOL 25
    #define NRIG 15
    #define N  NCOL * NRIG
    #define File "array_file.txt" 
    
    
    int array [N];
    int i, j;
    int riga, col;
    int molt;
    int main () {
       FILE *fp;
       if (!(fp = fopen (File, "w")))                                                   //apertura file
       {                               
           printf ("Errore: impossibile aprire file", File);
           exit (1); 
       }  
       
       for(i=0; i<N; i++)                                                               //ciclo d'inserimento
           array [i]= (i+1) *2;
       
         for (i=0; i<N; i++)
       {                                                                                //ciclo stampa array su file  
             for  (j=0; j<=NCOL-1; j++)
                
                fprintf (fp, "array:%d\t",array [i]);
                fprintf (fp, "\n\n" , j);
                    
             
       }  
       fclose(fp);
      
       
       
       printf ("La tabella ha %d righe e %d colonne. \n", NRIG, NCOL);
             
       do {    
           printf ("Inserisci numero riga dell'elemento desiderato: ");
           scanf ("%d",&riga);
       
           printf("\n");
           printf ("Inserisci numero colonna dell'elemento desiderato: ");
           scanf ("%d",&col);    
           
           if ( !( (riga<=NRIG && riga>0) && (col<=NCOL && col>0) ) ) 
           {
              printf("\n");
              printf ("Errore: valore fra 1 e %d per le righe e fra 1 e %d per le colonne\n", NRIG, NCOL);
           }
       
       } while ((riga>NRIG || riga<0) || (col>NCOL || col<0));
       
       molt = (riga - 1) * NCOL + col - 1;                                       //calcolo per trovare indirizzo
      
       printf ("\n Indice elemento array: %d\n", molt);
       getchar();
       
       if (molt<N) 
          printf (" Il contenuto dell'elemento in riga %d e colonna %d è: %d", riga, col, array [molt]);
       
       getchar();         
    }
       
    
    
  • Re: Ricerca su array monodimensionali

    Sei sempre fermo con i due fprintf ? Non ti avevo detto di utilizzarne uno solo?

    Perché non provi a seguire i suggerimenti che ricevi ?
  • Re: Ricerca su array monodimensionali

    +Si intendo dire come ricavare l'indice dell'elemento da stampare

    +

    oregon ha scritto:


    Sei sempre fermo con i due fprintf ? Non ti avevo detto di utilizzarne uno solo?
    Perchè non usare il doppio fprintf??? Al massimo è antiestetico scrivere "array:%d"
    e la var "j" nel secondo fprintf è in più
    E la variabile i è sbagliata (deve arrivare fino a N)?
  • Re: Ricerca su array monodimensionali

    Devi usare l'example 1:
    
        for (iy = 0; iy < NROW ; iy++)
        {
            for (ix = 0; ix < NCOL ; ix++)
            {
                fprintf(f,"%d\t",map[ (iy * NCOL) + ix ]);
            }
            fprintf(f,"\n");
        }
    
    Va bene lo stesso o il concetto era l'usare un unico ciclo?
    Perchè in quel caso per trovare il giusto momento di andare a capo devi usare il modulo tra l'indice e la dimensione massima delle colonne e se è zero ritorno a capo.
  • Re: Ricerca su array monodimensionali

    Grazieeee a tutti ci sono riuscito. Siete di grande aiutooooooo.....Scusate la mia ignoranza a capire le cose!! la soluzione me l'avete data piu volte!! ma non ci arrivavo....! Grazie un altra volta
    
    for(i= 0; i< NRIG; i++){
          for(j= 0; j <NCOL-1; j ++)    
            fprintf(fp, " array  %d\t ", array[i * NCOL + j ]);
    
Devi accedere o registrarti per scrivere nel forum
23 risposte