Controllo diagonale matrice

di Anonimizzato32187 il
5 risposte
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

  • 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?
  • 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

  • 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; 
    }
    
  • Grazie dell'aiuto
  • 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