Noioso problema durante compilazione

di il
5 risposte

Noioso problema durante compilazione

Ciao a tutti, sono nuovo del forum e quasi nuovo nel C,
sto abbozzando un programma che mi faccia fare il gioco del 15, e per ora nella bozza c'è solo un'assegnazione banale dei numeri e la visualizzazione del vettore, ma nella fase di compilazione mi da "12 [Warning] passing arg 1 of `printMatrix' makes pointer from integer without a cast"

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 4
int causalMatrix(int x[][SIZE]);
void printMatrix(const int x[][SIZE]);
int main(void)
{
    int matrix[SIZE][SIZE];
    
    casualMatrix(matrix);
    printMatrix(matrix);
    
    system("PAUSE");
    return 0;
    
}

int casualMatrix(int x[][SIZE])
{
    int i,j;
    int num=0;
    srand(time(NULL));
    for(i=0;i<SIZE;i++){
                        for(j=0;j<SIZE;j++){
                                            x[i][j]=num;
                                            num++;
                        }
    }
}
void printMatrix(const int x[][SIZE])
{
    int i,j;
    printf("|");
    for(i=0;i<SIZE;i++){
                        for(j=0;j<SIZE;j++){
                                            if(j==SIZE-1)
                                                         printf("\n\n|");
                                            else
                                                printf("%3d|", x[i][j]);
                                            
                        }
    }
}
**non fate caso al srand li in mezzo, l'ho inserito ma non l'ho ancora usato.
quel Warning non mi crea nessun problema, è solo che vorrei capirne il perchè!
grazie in anticipo

5 Risposte

  • Re: Noioso problema durante compilazione

    Un'altra domanda, adesso sono arrivato a questo punto e il programma mi disegna la tabella e fa vedere le opzioni, e quando premo uno dei tasti disegna un'atra tabella, come faccio a cancellare quella precedente?
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #define SIZE 4
    int causalMatrix(int x[][SIZE]);
    void printMatrix(const int x[][SIZE+1]);
    int main(void)
    {
        int matrix[SIZE][SIZE+1];
        int pos0X, pos0Y;
        int pressedNum;
        int i,j;
        
        casualMatrix(matrix);
        
        while(1){
                 printMatrix(matrix);
                 for(i=0;i<SIZE;i++){
                         for(j=0;j<SIZE;j++){
                                 if(matrix[i][j]==0){
                                                     pos0X=i;
                                                     pos0Y=j;
                                                     break;
                                 }//end if
                                 else continue;
                         }//end for-j
                 }//end for-i
                 printf("la posizione di 0 e' %dx%d, premi %d o %d per spostarli ", pos0X,pos0Y, matrix[pos0X+1][pos0Y],
                            matrix[pos0X][pos0Y+1]);
                 scanf("%d",&pressedNum);
                 if(pressedNum==matrix[pos0X+1][pos0Y] || pressedNum==matrix[pos0X][pos0Y+1]){
                                                       matrix[pos0X][pos0Y]=pressedNum;
                                                       if(pressedNum==matrix[pos0X+1][pos0Y]){
                                                                                              matrix[pos0X+1][pos0Y]=0;
                                                       }
                                                       if(pressedNum==matrix[pos0X][pos0Y+1]){
                                                                                              matrix[pos0X][pos0Y+1]=0;
                                                       }
                 }
                 else{
                      printf("inserire o %d o %d!!\n\n", matrix[pos0X+1][pos0Y], matrix[pos0X][pos0Y+1]);
                 }
        }
                 
                                                                                           
                 
        
        
        system("PAUSE");
        return 0;
        
    }
    
    int casualMatrix(int x[][SIZE+1])
    {
        int i,j;
        int num=0;
        srand(time(NULL));
        for(i=0;i<SIZE;i++){
                            for(j=0;j<SIZE;j++){
                                                x[i][j]=num;
                                                num++;
                            }
        }
    }
    void printMatrix(const int x[][SIZE+1])
    {
        int i,j;
        printf("|");
        for(i=0;i<SIZE;i++){
                            for(j=0;j<=SIZE;j++){
                                                if(j==SIZE)
                                                             printf("\n\n|");
                                                else
                                                    printf("%3d|", x[i][j]);
                                                
                            }
        }
    }
    
  • Re: Noioso problema durante compilazione

    Il "problema noioso" è causato dal fatto che prima hai scritto

    int causalMatrix(int x[][SIZE]);

    e poi

    int casualMatrix(int x[][SIZE+1])

    e non possono essere diverse ...

    Per l'altro problema, vedi

    http://forum.html.it/forum/showthread.php?s=&threadid=1532554
  • Re: Noioso problema durante compilazione

    Mille grazie anche qua
    ho un altro dubbio: come faccio a far mettere un valore casuale da 0 a 15 in una tabella 4x4 senza che esso si ripeta? ci ho provato con questa funzione, ma vengono fuori degli strani valori :/
    
        int i,j;
        int num=0;
        int count[16]={0};
        srand(time(NULL));
        for(i=0;i<SIZE;i++){
                            for(j=0;j<SIZE;j++){
                                                etichetta:
                                                num=(rand() % 15);
                                                if(count[num]==0){
                                                                  x[i][j]=num;
                                                                  count[num]=num;
                                                }
                                                if(count[num]!=0&&i==SIZE-1&&j==SIZE-1&&count2<=17){
                                                                                                    count2++;
                                                                  goto etichetta;
                                                }
                            }
        }
    
  • Re: Noioso problema durante compilazione

    glukosio ha scritto:


    mille grazie anche qua
    ho un altro dubbio: come faccio a far mettere un valore casuale da 0 a 15 in una tabella 4x4 senza che esso si ripeta? ci ho provato con questa funzione, ma vengono fuori degli strani valori :/
    
        int i,j;
        int num=0;
        int count[16]={0};
        srand(time(NULL));
        for(i=0;i<SIZE;i++){
                            for(j=0;j<SIZE;j++){
                                                etichetta:
                                                num=(rand() % 15);
                                                if(count[num]==0){
                                                                  x[i][j]=num;
                                                                  count[num]=num;
                                                }
                                                if(count[num]!=0&&i==SIZE-1&&j==SIZE-1&&count2<=17){
                                                                                                    count2++;
                                                                  goto etichetta;
                                                }
                            }
        }
    
    Per non far ripetere i numeri con la funzione rand() basta mettere srand(time(NULL)), come hai già messo quindi non capisco cosa intendi per "valori strani". Altra cosa : MAI E POI MAI usare goto, devi usare gli appositi statement di iterazione ( i cicli, in parole povere ).
  • Re: Noioso problema durante compilazione

    Non far ripetere i numeri intendo inserirli una sola volta: devo inserire i numeri da 0 a 15 dentro un vettore 4x4, in modo casuale e che non si ripetano (cioè che non ci siano due 14 o cose così).

    Ho tolto il goto, lo avevo inserito per disperazione, e ho inserito un ciclo while, ora funziona ma non tutte le volte, infatti mi succede che ho due o tre 0 nel vettore, e non so come risolvere definitivamente
    ecco la funzione:
    
    int casualMatrix(int x[][SIZE+1])
    {
        int i,j;
        int num=0;
        int count[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        srand(time(NULL));
        for(i=0;i<SIZE;i++){
                            for(j=0;j<SIZE;j++){
                                                while(x[i][j]!=num){
                                                num=(rand() % 16);
                                                if(count[num]!=99){
                                                            x[i][j]=count[num];
                                                            count[num]=99;
                                                            break;
                                                }
                                                else continue;
                                                }
                            }
        }
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte