Array 2D

di il
12 risposte

Array 2D

Ancora una volta ho un problema!
sto usando il devC, ma mi dice il seguente errore: invalid use of array with unspecified bounds
quando scrivo una assegnazione del tipo
*min=A[j];
oppure
if(A[j]<*min)

ho provato di tutto...con puntatore, senza puntatore...inserendo dei numeri invece delle lettere ma niente! mi da il solito errore! cosa può essere? il linguaccio è il c...
grazie in anticipo

12 Risposte

  • Re: Array 2D

    Prova a postare qui il tuo codice per intero...
    (hai dichiarato la matrice definendo il massimo valore che può raggiungere?)
  • Re: Array 2D

    #include <stdio.h>
    void min_max_2D(int A[][],int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max);

    main ()
    {
    int A[4][4]=
    {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
    {13,14,15,16}
    };
    int min,max,riga_min,riga_max,col_min,col_max,i,j;
    for (i=0;i<2;i++)
    for(j=0;j<3;j++)
    printf("A[%d][%d]=%d \n",i,j,A[j]);
    min_max_2D(A,&min,&max,&riga_min,&riga_max,&col_min,&col_max);
    printf("Elemento max A[%d][%d]: %d",&riga_max,&col_max,&max);

    system("pause");
    }
    void min_max_2D(int A[][],int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max)
    {
    int i=1;
    int j=1;


    for(i=1;i<=4;i++)
    {
    for(j=1;j<=4;j++)
    {
    *min=A[j];
    *max=A[j];
    if(A[j]<*min)
    *min=A[j];
    *riga_min=i;
    *col_min=j;
    if(A[j]>A[*max][*max])
    *max=A[j];
    *riga_max=i;
    *col_max=j;
    }
    }

    }

    ovviamente per aggiustarlo ho fatto così tante modifche che non so più cosa è giusto e cosa sbagliato o.O
    inotlre ho provato a fare un altro programma e mi da lo stesso errore O.O
  • Re: Array 2D

    Meglio se utilizzi i puntatori a puntatori:
    #include <stdio.h>
    void min_max_2D(int** A,int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max);


    int main(void)
    {
    int A[4][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} };
    int min,max,riga_min,riga_max,col_min,col_max,i,j;
    for (i=0;i<2;i++)
    for(j=0;j<3;j++)
    printf("A[%d][%d]=%d \n",i,j,A[j]);
    min_max_2D(A,&min,&max,&riga_min,&riga_max,&col_min,&col_max);
    printf("Elemento max A[%d][%d]: %d",&riga_max,&col_max,&max);

    system("pause");
    return 0;
    }

    void min_max_2D(int ** A,int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max)
    {
    int i=1;
    int j=1;

    for(i=1;i<=4;i++)
    {
    for(j=1;j<=4;j++)
    {
    *min=A[j];
    *max=A[j];
    if(A[j]<*min)
    *min=A[j];
    *riga_min=i;
    *col_min=j;
    if(A[j]>A[*max][*max])
    *max=A[j];
    *riga_max=i;
    *col_max=j;
    }
    }

    }
    cosi dovresti avere meno problemi
  • Re: Array 2D

    Grazie!
    sto aggiustando alcune cose perchè si blocca ad un certo punto.. se non riesco a trovare l'errore ti faccio sapere
  • Re: Array 2D

    La risposto con chiarezza...
    non entra nella function o qualcosa di simile...purtroppo...

    /*Calcolo di massimo e minimo in un array 2D*/

    #include <stdio.h>
    void min_max_2D(int** A,int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max);


    int main(void)
    {
    /*definizione dell'array*/
    int A[4][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} };
    int min,max,riga_min,riga_max,col_min,col_max,i,j;
    /*output dei suoi valori*/
    for (i=0;i<4;i++)
    for(j=0;j<4;j++)
    printf("A[%d][%d]=%d \n",i,j,A[j]);
    /*chiamata alla funzione per il calcolo*/
    min_max_2D(A,&min,&max,&riga_min,&riga_max,&col_min,&col_max);
    /*output dei valori cercati*/
    printf("Elemento max A[%d][%d]: %d",&riga_max,&col_max,&max);
    printf("Elemento min A[%d][%d]: %d",&riga_min,&col_min,&min);
    system("pause");
    return 0;
    }

    void min_max_2D(int ** A,int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max)
    {
    int i;
    int j;
    qui si blocca

    for(i=1;i<=4;i++)
    {
    for(j=1;j<=4;j++)
    {
    *min=A[j];
    *max=A[j];
    if(A[j]<*min)
    *min=A[j];
    *riga_min=i;
    *col_min=j;
    if(A[j]>A[*max][*max])
    *max=A[j];
    *riga_max=i;
    *col_max=j;
    }
    }

    }
  • Re: Array 2D

    Scusa.. lascia stare il puntatore a puntatore, fai cosi:
    #include <stdio.h>
    void min_max_2D(int A[][4],int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max);


    int main(void)
    {
    /*definizione dell'array*/
    int A[4][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} };
    int min,max,riga_min,riga_max,col_min,col_max,i,j;
    /*output dei suoi valori*/
    for (i=0;i<4;i++)
    for(j=0;j<4;j++)
    printf("A[%d][%d]=%d \n",i,j,A[j]);

    /*chiamata alla funzione per il calcolo*/
    min_max_2D(A,&min,&max,&riga_min,&riga_max,&col_min,&col_max);
    /*output dei valori cercati*/
    printf("Elemento max A[%d][%d]: %d",&riga_max,&col_max,&max);
    printf("Elemento min A[%d][%d]: %d",&riga_min,&col_min,&min);
    system("pause");
    return 0;
    }

    void min_max_2D(int A[][4],int *min,int *max,int *riga_min,int *riga_max,int *col_min,int *col_max)
    {
    int i;
    int j;

    for(i=1;i<=4;i++)
    {
    for(j=1;j<=4;j++)
    {
    *min=A[j];
    *max=A[j];
    if(A[j]<*min)
    *min=A[j];
    *riga_min=i;
    *col_min=j;
    if(A[j]>A[*max][*max])
    *max=A[j];
    *riga_max=i;
    *col_max=j;
    }
    }

    }

    cosi credo dovrebbe andare
  • Re: Array 2D

    Non vorrei che fosse il mio pc...ma si blocca sempre allo stesso punto..."si è verificato un errore".. eppure non vedo dopo possa essere o.O
    insomma, al tuo pc funziona?
  • Re: Array 2D

    Ok dunque...questa è la versione senza gli indici di posizione, e funziona:
    #include <stdio.h>
    #define N 4
    /*Prototipo funzioni*/

    void min_max_2D(int A[N][N], int n,int *max,int *min,int riga_min,int col_min,int riga_max,int col_max);

    main()
    {
    /*Inizializzazione*/
    int A[N][N]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} };
    int n,min,max,riga_min,col_min,riga_max,col_max,i,j;
    printf("Calcolo dell'elemento massimo di un array\n");


    /*chiamata alla funzione per il calcolo del massimo elemento*/
    min_max_2D(A,n,&max,&min,riga_min,col_min,riga_max,col_max);
    /*Output*/
    printf("Il massimo tra gli elementi e': %d\n",max);
    printf("Il minimo degli elementi e': %d\n",min);
    system("Pause");
    }
    /*calcolo del massimo tramite la function*/
    void min_max_2D(int A[N][N], int n,int *max,int *min,int riga_min,int col_min,int riga_max,int col_max)
    {
    int i=0;
    int j=0;
    *max=A[j];
    *min=A[j];
    for (i=0; i<N; i=i+1)
    {
    for(j=0;j<N;j++)
    {
    if(A[j]>*max)
    *max=A[j];

    printf("%d\n",*max);
    if(A[j]<*min)
    *min=A[j];

    }
    }

    ora il problema è che sono proprio quegli indici a dar fastidio al programma!
  • Re: Array 2D

    Che problema hai, perchè a me il programma funziona perfettamente.
  • Re: Array 2D

    La funzione non va, si blocca il programma...
  • Re: Array 2D

    Allora..ricapitoliamo... quelli scritti da te, li ho provati su vari pc e si bloccano...
    questo qui invece, ha un solo difetto:
    #include <stdio.h>
    #define N 4
    /*Prototipo funzioni*/

    void min_max_2D(int A[N][N], int n,int *max,int *min,int *riga_min,int *col_min,int *riga_max,int *col_max);

    main()
    {
    /*Inizializzazione*/
    int A[N][N]={{1,2,3,4}, {13,14,15,16}, {5,6,7,8}, {9,10,11,12} };
    int n,min,max,riga_min,col_min,riga_max,col_max,i,j;
    printf("Calcolo dell'elemento massimo di un array\n");
    for (i=0;i<4;i++)
    for(j=0;j<4;j++)
    printf("A[%d][%d]=%d \n",i,j,A[j]);


    /*chiamata alla funzione per il calcolo del massimo elemento*/
    min_max_2D(A,n,&max,&min,&riga_min,&col_min,&riga_max,&col_max);
    /*Output*/
    printf("Il massimo tra gli elementi e' %d in pos A[%d][%d]\n",max,riga_max,col_max);
    printf("Il minimo degli elementi e' %d in pos A[%d][%d]\n",min,riga_min,col_min);
    system("Pause");
    }
    /*calcolo del massimo tramite la function*/
    void min_max_2D(int A[N][N], int n,int *max,int *min,int *riga_min,int *col_min,int *riga_max,int *col_max)
    {
    int i=0;
    int j=0;
    *max=A[j];
    *min=A[j];
    for (i=0; i<N; i=i+1)
    {
    for(j=0;j<N;j++)
    {
    if(A[j]>*max)
    *max=A[j];
    *riga_max=i;
    *col_max=j;
    -----> con queste assegnazioni, mi restituisce sempre l'ultima posione, e
    non quella dell'elemento max(in questo caso). credo sia perchè si trova all'interno dei
    cicli for... come faccio a far restituire la posizione corretta?

    if(A[j]<*min)
    *min=A[j];
    *riga_min=i;
    *col_min=j;
    }
    }
    }
  • Re: Array 2D

    Fai attenzione ai blocchi if;
    se nel corpo if devi metterci più linee di codice devi utilizzare le parentesi:
    rivedi un po la funzione min_max_2D

    void min_max_2D(int A[N][N], int n,int *max,int *min,int *riga_min,int *col_min,int *riga_max,int *col_max)
    {
    int i=0;
    int j=0;
    *max=A[j];
    *min=A[j];
    for (i=0; i<N; i=i+1)
    {
    for(j=0;j<N;j++)
    {
    if(A[j]>*max)
    {
    *max=A[j];
    *riga_max=i;
    *col_max=j;
    }

    if(A[j]<*min)
    {
    *min=A[j];
    *riga_min=i;
    *col_min=j;
    }
    }
    }
    }

    cosi dovrebbe andare.
Devi accedere o registrarti per scrivere nel forum
12 risposte