Controllo diagonale matrice

di il
5 risposte

Controllo diagonale matrice

Salve, io avrei dei problemi a fare questo programma dove devo avere una matrice quadratica che deve avere grandezza da 3 a 20. Poi devo inserire dei valori randomici nella matrice che vanno da 1 a 10000 , 1 e 10000 compresi. Dopo aver inserito i valori devo inserire un valore in input e vedere se quel valore c'è nella matrice ma devo fare un controllo diagonale e non sequenziale. es. abbiamo una matrice[3][3], controllo prima la posizione[2][0], poi [1][0], poi[2][1], poi[0][0], ecc. ma il problema è che mi da posizioni sui milioni. Questo è il programma che ho fatto:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
int main () {
    int i, n, y, x, num, nv;
    srand(time(NULL));
    printf(" Inserire grandezza matrice ");
    scanf("%d",&n);
    int matrice [n][n];
    for (y=0;y<n;y++) {
    for (x=0;x<n;x++) {
    matrice[y][x]=rand() %10001;
    }
    }
for (y=0;y<n;y++)     {
    for (x=0;x<n;x++) {
    printf(" %d",matrice[y][x]);
    }
    }
    printf("\n" " Inserire valore da trovare ");
    scanf(" %d",&num);
    y=0;
    x=0;
    for (i=1;i<n+1;i++) {
        x=0;
        for (y=n-i;y>-1;y--) {
            if(matrice[y][x]==num)
            {
                printf("\n""%c" " valore trovato in posizione ");
                printf(" %d", &y);
                printf(" %d", &x);
            }
            else{
                printf("\n"" valore non trovato ");
                
            }
            x++;
        }
        
        
    }
    
    for (i=0;i<n;i++) {
        y=0;
    for (x=1;x<n;x++) {
    if(matrice[y][x]==num)
            {
                printf("\n""%c" " valore trovato in posizione ");
                printf(" %d", &y);
                printf(" %d", &x);
            }
            else{
                printf("\n"" valore non trovato ");
                
            }
     
     y++;       
    }
    }        
        
       
}
E questi sono i valori che ottengo:

Inserire grandezza matrice 3
 2445 134 3586 7312 5291 5709 6948 9565 187
 Inserire valore da trovare 134

 valore non trovato 
 valore non trovato 
 valore non trovato 
 valore non trovato 
 valore trovato in posizione  804237488 804237492
 valore non trovato 
 valore trovato in posizione  804237488 804237492
 valore non trovato 
 valore trovato in posizione  804237488 804237492
 valore non trovato 
 valore trovato in posizione  804237488 804237492
 valore non trovato
 
Grazie in anticipo.

5 Risposte

  • Re: Controllo diagonale matrice

    Ciao, alcune considerazioni:

    - nei printf() non devi utilizzare l'operatore &, altrimenti vai a stampare l'indirizzo della variabile e non il suo valore;
    - l'operazione a%b ritorna un valore compreso nell'intervallo [0;b-1], quindi se vuoi un valore compreso nell'intervallo [1;10000] devi scrivere rand()%10000+1;
    - cosa intendi di preciso con "controllo diagonale"? Non ho letto in modo approfondito la parte di codice che si occupa della ricerca, ma suppongo che si possa fare di meglio;
    - la variabile nv risulta inutilizzata;
    - non serve includere la libreria math.h;
    - vale inoltre la pena notare che non stai usando una matrice statica, ma dei VLA (variable length array).

    P.S.
    Non sei italiano, vero?
  • Re: Controllo diagonale matrice

    No non sono italiano. Per controllo diagonale ho messo una foto per far vedere come fare, spero si capisca.
    20220525_071621.jpg
    20220525_071621.jpg

  • Re: Controllo diagonale matrice

    Era stato chiesto un esercizio simile in passato
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    int main () {
        int n = 0;
        while(n < 3 || n > 20){
            printf("Inserire grandezza matrice (valore tra 3 e 20): ");
            scanf("%d",&n);
        }
        
        int y, x, matrice[n][n];
        printf("\nValori sorteggiati per la matrice:\n"); 
        srand(time(NULL));    
        for (y = 0; y < n; y++) {
            for (x = 0; x < n; x++){
                matrice[y][x]= rand()%10000 + 1;
                printf("%5d", matrice[y][x]);
            }
            printf("\n");
        }
    
        int num;
        printf("\nInserire valore da trovare : ");
        scanf(" %d", &num);
        
        int d, diagonali = 2 * n - 1, trovato = 0;
        for(d = 0; d < diagonali; d++)
            for(y = n - 1, x = d; y >= 0 && x >= 0; y--, x--)
                if(x < n){
                    printf("\nControllo la posizione [%2d,%2d]", y, x);
                    if(matrice[y][x] == num){
                        printf(" ---> Valore %d trovato!", num);
                        trovato++;
                    }
                }
        if(!trovato)
            printf("\nValore %d non trovato!", num);
                
        return 0; 
    }
    
  • Re: Controllo diagonale matrice

    Grazie dell'aiuto
  • Re: Controllo diagonale matrice

    Ah si scusate ma io non ho capito a cosa serve il !trovato e il return 0.
Devi accedere o registrarti per scrivere nel forum
5 risposte