Sostituzione valore matrice [c]

di il
11 risposte

Sostituzione valore matrice [c]

Salve ragazzi, risolto un problema ne sto riscontrando un altro. Praticamente ho una matrice letta da file, in questa matrice devo visualizzare le colonne, e l'utente scelta una colonna ne devo visualizzare il massimo, dopodichè questo massimo lo devo sostituire in una posizione qualsiasi ma scelta dall'utente. Vi mostro il mio codice:

P.S: il mio problema sta nel visualizzare la nuova matrice con lo scambio del valore che ha posizione le coordinate scelte dall'utente con il massimo, cioè l'ultimo punto! Il resto funziona tutto.
void maxCol(int mat[][n],int r, int c, int col, int maxc){

// visualizzo al colonna


printf("\nInserire la colonna:\n");
scanf("%d",&col);
maxc=0;
int temp;

 for (int i=0; i<r; i++){
   int j=col;
    printf("%d\t",mat[i][j]);
  

//trovo il massimo della colonna visualizzata


  if (maxc<mat[i][col]){
    maxc=mat[i][col];

  }
 }
   
  printf("\n\nIl massimo della colonna %d e': %d\n",c,maxc);

//preparazione scambio valore coordinate con massimo

  printf("\nInserire la coordinata della riga dove si vuole sostituire il massimo:\n");
  scanf("%d",&r);

  printf("\nInserire la coordinata della colonna dove si vuole sostituire il massimo:\n");
  scanf("%d",&c);


  printf("\nIl valore avente coordinate (%d,%d) e': %d\n",r,c,mat[r][c]);

  printf("\nScambio valore coordinate con valore massimo:\n");

       for (int i=0; i<r; i++){
       printf("\n");
          for (int j=0; j<c; j++){
            temp=maxc;
            maxc=mat[r][c];
            mat[r][c]=temp;

//visualizzo la matrice con i valori scambiati

  printf("%d\t",mat[i][j];

}
}
}
Vi ringrazio anticipatamente!


Esempio:

Matrice originale:
0 2 0
0 0 0
1 0 0

Matrice con valore scambiato:
0 1 0
0 0 0
2 0 0

11 Risposte

  • Re: Sostituzione valore matrice [c]

    Il problema è "visualizzare" la matrice ? Non sai visualizzare gli elementi della matrice ?
  • Re: Sostituzione valore matrice [c]

    Si, con i valori scambiati, da codice come ho fatto io non va..
  • Re: Sostituzione valore matrice [c]

    Nessuno disposto ad aiutarmi?
  • Re: Sostituzione valore matrice [c]

    Ma che vuol dire "non va"? Cerca di essere più preciso se vuoi un aiuto ...
  • Re: Sostituzione valore matrice [c]

    Tu hai detto "Il problema è visualizzare la matrice?" ed io ho detto: "si, non va", inoltre ho anche detto: " P.S: il mio problema sta nel visualizzare la nuova matrice con lo scambio del valore che ha posizione le coordinate scelte dall'utente con il massimo, cioè l'ultimo punto! Il resto funziona tutto. ", più chiaro di così non riesco.

    In sintesi ho il numero massimo di una delle colonne delle matrici, e questo numero massimo lo devo spostare in una posizione qualsiasi, scelta dall'utente, ed io trovato il numero massimo, e visualizzato il numero tramite le coordinate di righe e colonne, devo scambiare questi due, ma non mi visualizza la matrice.
  • Re: Sostituzione valore matrice [c]

    khaleds ha scritto:


    più chiaro di così non riesco.
    E invece dovresti (e sicuramente ci puoi anche riuscire, con un po' di impegno).

    Hai un errore durante la COMPILAZIONE?

    Hai un errore durante l'ESECUZIONE?

    Proponi TUTTO il programma, compreso il main, magari si prova ...

    L'unica riga evidentemente sbagliata è questa

    printf("%d\t",mat[j];

    ma avresti un errore di COMPILAZIONE e sicuramente un messaggio del compilatore che potresti leggere e usare per correggere.
    Quindi penso non sia quello ...
  • Re: Sostituzione valore matrice [c]

    Va bene! Non da nessun errore, ma nel momento in cui eseguo il programma, arriva all'ultimo punto ma non mi mostra la matrice con i valori scambiati, non me la stampa proprio, non esce nulla! (il punto in questione è il secondo che leggi nel commento sotto alla libreria).
    #include <stdio.h>
    #define n 100
    
    /*
    
    • Leggere una matrice quadrata di interi. //DONE
    
    • Scambiare il massimo di una colonna con una posizione specifica
    
     */
    
    
    void leggiFile(FILE *fp,int mat[][n],int *r, int *c);
    void scriviFile(int mat[][n],int r, int c);
    void maxCol(int mat[][n],int r, int c,int col, int maxc);
    
    
    
    
    
    
    
    main()
     {
    
        //DICHIARAZIONE VARIABILI
    
        FILE *fp;
        int mat[n][n];
       
        int maxc;
    
        int r;
        int c;
        int j;
        int i;
        int col;
    
    
    
        //APERTURA FILE
    
        fp=fopen("input.txt","r");
    
          if (fp==NULL)
            printf("\nERRORE NELL'APERTURA DEL FILE!!\n");
    
          else{
    
             leggiFile(fp,mat,&r,&c);
    
             printf("\nLA MATRICE CONTENUTA NEL FILE E' LA SEGUENTE:\n");
             scriviFile(mat,r,c);
    
             printf("\n\n");
    
    
             maxCol(mat,r,c,col,maxc);
    
    }
     }
    
    
    void leggiFile(FILE *fp,int mat[][n],int *r, int *c){
    
      fscanf(fp,"%d",r);
      fscanf(fp,"%d",c);
    
        printf("\n");
    
        for (int i=0; i<*r; i++)
        for (int j=0; j<*c; j++){
            fscanf(fp,"%d",&mat[i][j]);
        }
       }
    
    
    
    void scriviFile(int mat[][n],int r, int c){
    
      for (int i=0; i<r; i++){
      printf("\n");
        for (int j=0; j<c; j++){
        printf("%d\t",mat[i][j]);
    
      }
     }
    }
    
    
    void maxCol(int mat[][n],int r, int c, int col, int maxc){
    
    
    printf("\nInserire la colonna:\n");
    scanf("%d",&col);
    maxc=0;
    int temp;
    
     for (int i=0; i<r; i++){
       int j=col;
        printf("%d\t",mat[i][j]);
    
      if (maxc<mat[i][col]){
        maxc=mat[i][col];
    
      }
     }
       printf("\n\nIl massimo della colonna %d e': %d\n",c,maxc);
    
    
    
    
      printf("\nInserire la coordinata della riga dove si vuole sostituire il massimo:\n");
      scanf("%d",&r);
    
      printf("\nInserire la coordinata della colonna dove si vuole sostituire il massimo:\n");
      scanf("%d",&c);
    
    
      printf("\nIl valore avente coordinate (%d,%d) e': %d\n",r,c,mat[r][c]);
    
      for (int i=0; i<r; i++){
        for (int j=0; j<r; j++){
            temp=maxc;
            maxc=mat[r][c];
            mat[r][c]=temp;
    
            printf("%d",mat[i][j]);
        }
      }
    }
  • Re: Sostituzione valore matrice [c]

    Se devi mettere un valore nella posizione r,c alla fine non servono le due fir con gli scambi ma semplicemente

    mat[r][c]=maxc;

    Le due for successive le devi usare solo per visualizzare i valori con la printf avendo cura di usare r come massimo per i e c per j. Inoltre devi usare una printf per andare a capo dopo ogni fine ciclo di riga
  • Re: Sostituzione valore matrice [c]

    Intanto grazie mille per l'aiuto, ho fatto così ma continua a non visualizzarmi la matrice.. Continuo a sbagliare da qualche parte, ma non riesco proprio a capire dove.
    mat[r][c]=maxc;
    
      printf("\n");
    
      for (int i=0; i<r; i++){
       printf("\n");
        for (int j=0; j<c; j++){
            printf("%d",mat[i][j]);
        }
      }
  • Re: Sostituzione valore matrice [c]

    Per le scanf precedenti non usare r c ma i e j e quindi

    mat[j]=maxc;

    altrimentri perdi i valori di r e c per le for
  • Re: Sostituzione valore matrice [c]

    Verissimo, non ci avevo proprio fatto caso. In questo modo me la visualizza la matrice, ma non con i valori scambiati.

    Correggo: ora funziona, avevo dimenticato di cambiare i parametri i e j in mat[r][c]=maxc; Grazie mille!!!!!
Devi accedere o registrarti per scrivere nel forum
11 risposte