Ricerca su array monodimensionali

di il
23 risposte

Ricerca su array monodimensionali

Ciao ragazzi,

Da poco ho iniziato con il C e sto cercando di scrivere un programmino semplice, ma non riesco ad avere il risultato dovuto.

quello che voglio fare é costruire una array monodimensionale di N dimensioni e riempire ogni casella con numeri pari. Poi inserire due numeri da tastiera, una per la riga e una per la colonna della array (so che con array monodimensionali non esistono righe e colonne, ma voglio che chi usa il programma la vede come una tabella piena di valori che puo richiamarli inserendo due valori. Non volgio usare le matrici ). dopo di che moltiplico i due valori inseriti per trovare la pozione sulla array (moltiplicando riga -1* col). con la posizione posso andare a vedere il valore che c'e al suo interno e stamaprlo su video.

Ecco il codice. riesco a compilarlo, mi fa inserire i due numeri, ma poi non va avanti e non mi da nessun errore. Mi potete aiutare o darmi qualche suggerimento? grazie mille.

#include <stdio.h>
#define N 625

int array [N];
int i;
int riga, col;
int molt;

int main () {
   for(i=1; i<N; i++) {
   array [i]= i;
}
   printf ("array %d: \n", array [i]); 

   printf ("inserisci numero riga: ");
   scanf ("%d",&riga);
   
   printf ("inserisci numero colonna: ");
   scanf ("%d",&col);
   
   int molt =riga -1 * col;
   printf ("valore di molt: %d", molt);
   
   if (molt<N) {
    array [molt];
     printf ("il valore in riga %d e colonna %d è: %d/n", riga, col, array [molt]);   
    } 
    else {
      printf ("ritenta: il valore massimo deve essere tra 1 e 25");
   }      
}

23 Risposte

  • Re: Ricerca su array monodimensionali

    - la for per riempire il vettore deve iniziare da 0

    - la printf subito dopo la for non ha senso, anzi è sbagliata

    - la riga array [molt]; non fa nulla, non serve

    - non è che il programma non va avanti, il fatto è che non ci sono altre istruzioni e il programma si conclude regolarmente.
  • Re: Ricerca su array monodimensionali

    Mmm ok. grazie. Quale sarebbe il prossimo passo? non riesco ad andare avanti. Qualche suggerimento?
  • Re: Ricerca su array monodimensionali

    Non lo so quale sarebbe il prossimo passo, tu che vuoi fare?
  • Re: Ricerca su array monodimensionali

    Vorrei riuscire a trovare tramite i due numeri inseriti da tastiera il valore che c'e nella array. Moltiplicando la riga - 1 con la colonna "riga-1*col". Avrei praticamente l'indirizzo in cui si trova il valore. Ora dovrei dire al programmino di stamparmi il valore che c'e all'interno della array tramite l'indirizzo trovato. dovrebbe essere molto semplice, ma non riesco ad risolverlo.
    se mi potresti dare una mano, sarebbe di grande aiuto.

    grazie
  • Re: Ricerca su array monodimensionali

    Scusa ma non lo fai già in

    printf ("il valore in riga %d e colonna %d è: %d/n", riga, col, array [molt]);

    ?
  • Re: Ricerca su array monodimensionali

    Dovrebbe, ma non mi stampa il valore!? mi fa solo inserire i due valori e poi esce.
    non capisco perche! secondo te dovrebbe funzionare o manca qualche passaggio?
  • Re: Ricerca su array monodimensionali

    Quando il programma termina la finestra viene chiusa e tu non hai il tempo di leggere la risposta.

    Prima di terminare il main inserisci una funzione che attenda un tasto

    getchar();
    }
  • Re: Ricerca su array monodimensionali

    Uff grazieeeeeeeee oraaaa vaaaa....... non conoscevo quella funzione!!

    grazie mille
  • Re: Ricerca su array monodimensionali

    Il calcolo della posizione é errato, oltre al fatto che togli da riga il prodotto di uno per colonna il calcolo in se per se é errato.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.
  • Re: Ricerca su array monodimensionali

    vbextreme ha scritto:


    il calcolo della posizione é errato, oltre al fatto che togli da riga il prodotto di uno per colonna il calcolo in se per se é errato.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.
    Grazieee. me ne sono accorto pure io. Infatti l'ho cambiata dopo...grazieeeee lo stesso. Siete di grande aiuto......
  • Re: Ricerca su array monodimensionali

    Mi ritrovo con un altro enigma! magari mi potete aiutare.

    Praticamente sono riuscito a stampare il contenuto della array su file, ma ora vorrei che me la stampi come se fosse una tabella di NCOL e NRIG che ho stabilito nel #define.

    qualche suggerimento??? grazieeeeeee

    qui il codice:
    
    #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 
          fprintf (fp, "array \t%d\t", array [i]);
       }
       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

    Se vuoi fare una semplice tabella, puoi usare:
    +un ciclo interno che stampa gli elementi della riga separati da '\t';
    +un ciclo che ripete quello precedente per ogni colonna, stampando ogni volta un '\n' a inizio/fine riga.

    occhio che gli indici dell'array partono da 0.
  • Re: Ricerca su array monodimensionali

    Mmm...dici di fare un altro ciclo interno "for"?

    ho fatto questo, mi da una tabella, ma mi ripete ogni valore di un array per NCOL. Quale 'e il problema? devo fare invece di un "for" un "do-while"?

    graziee per l'aiuto!

    ecco il codice per la stampa:
    
       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, array[i]);    
       }  
       fclose(fp);
    
  • Re: Ricerca su array monodimensionali

    Perché due fprintp? Ne devi usare una sola e l'indice va calcolato opportunamente.
Devi accedere o registrarti per scrivere nel forum
23 risposte