C: non so usare i vettori bidimensionali

di il
4 risposte

C: non so usare i vettori bidimensionali

Ciao a tutti... Sono un novizio della programmazione, in realtà mi serve solo per passare un esame all'università dopodichè non credo che continuerò... Volevo chiede un aiutino perchè mi è stato assegnato per casa il seguente es:
"Scrivere un programma C che legga da file una sequenza di interi, li memorizzi in una matrice quadrata, calcoli la trasposta della matrice data in input e produca in output un nuovo file con i valori della matrice trasposta organizzati per righe crescenti".
Aggiungo a questa consegna che il nostro prof usa e ci ha insegnato solo e unicamente cicli while e istuzioni del tipo if-then-else (niente for o do-while) e possiamo utilizzare solo le librerie <stdio.h> e <math.h>. Se vi state chiedendo a che punto sono io fin'ora ho scritto questo:


#include <stdio.h>
// Creare un programma che prenda da file degli interi e li metta in un vettore bidimensionale
int main ()
{
FILE *f;
int vett[50][50];
int i, j, n, x;
f = fopen("matrice.txt","r");
if (f==NULL)
{
printf("File non trovato!!!");
}
else {
Lo so che sono messo male... Vi ringrazio in anticipo...

4 Risposte

  • Re: C: non so usare i vettori bidimensionali

    Allora non sono troppo ferrato sulle matrici però posso aiutarti a riempire il vettore.
    Prima di tutto devi sapere a priori quanto grossa sarà la tua matrice per poter uscire dai 2 cicli while annidati che userai per riempire il vettore.
    
    ...
    FILE *f;
    int vett[50][50];
    int i, j, n, x;
    i = j = 0;  //usi la i e la j come contatori
    f = fopen("matrice.txt","r"); //a questo punto pui partire a riempire
    while(i < 50){   
        while(j < 50){
            fscanf(f,“%d”, vett[i][j]);
            j++;
        }
        i++;
    }
    fclose(f);  //ora hai il tuo vettore bidimensionale
    .... //non so cosa sia la trasposta di una matrice 
            //una volta fatti i calcoli puoi creare però il file di output in questo modo
    f = fopen("nuovamatrice.txt", "w");
    i = j = 0;
    while(i < 50){
         while(j < 50){
              fprintf(f,"%d ", vett[i][j]);
              j++;
        }
        i++;
    }
    fclose(f);
    
    Questo è quello che so dirti.
    Se magari mi aggiorni sui calcoli da fare per ottenere la matrice trasposta ti aiuto anche con quello. Fammi sapere! Ciao
  • Re: C: non so usare i vettori bidimensionali

    Grazie mille... quindi per riempire un vettore bidimensionale basta fare due while uno dentro l'altro e si arrangiano da soli a riempirsi?
    cmq la la trasposizione consiste nello scmabiare le righe della matrice con le sue colonne... in pratica se il vettore è vett[j], bisogna scambiare gli elementi in posizione i con quelli in posizione j... cmq già così è oro... grazie ancora..
  • Re: C: non so usare i vettori bidimensionali

    Quindi se ho capito bene la trasposizione trasformerebbe questo
    1 2 3 4
    9 3 7 1
    6 7 3 0
    1 5 2 9
    in questo
    1 9 6 1
    2 3 7 5
    3 7 3 2
    4 1 0 9

    Beh per fare questo comunque hai bisogno di allocare un secondo array e riempirlo in questo modo
    
    int vett[50][50];  // il vettore riempito in precedenza
    int newvett[50][50];  //vettore da riempire con la matrice trasposta
    i = j = 0;
    while(i < 50){
        j = 0;       //questo devi metterlo anche nei cicli che ti ho fatto vedere nel post precedente 
        while(j < 50){
             newvett[j][i] = vett[i][j];
             j++;
        }
        i++;
    }
    
    La "j = 0" tra il primo e il secondo ciclo devi stare attento a metterli anche tra i cicli che prendono in input la matrice e quelli che danno in output la matrice trasposta(quelli del post precedente) perchè anltrimenti il programma ti andrà in segmentation fault! Sta semplicemente a significare che quando hai finito la riga e vai a capo devi ricominciare dalla prima colonna e non continuare dall'ultima. Farlo con un ciclo for sarebbe stato un po' più facile ma purtroppo hai detto che non li avete fatti quindi fai così che è lo stesso! fammi sapere se riesci a farlo funzionare... Ciao
  • Re: C: non so usare i vettori bidimensionali

    Si funziona perfettamente grazie... e mi è stato pure utile per il parziale.... grazie mille...
Devi accedere o registrarti per scrivere nel forum
4 risposte