Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142

    [C] Misteri dell'informatica...

    ciao a tutti, ho creato una funzione:

    Codice PHP:
    void StampaMatrice(int Tav[][N],int As[][2])

    {
    char Ped[]={' ','O','X'}; // Array contenente 3 elementi: 0: lo spazio vuoto 1: il simbolo cerchietto 2: il simbolo X

    /* Viene rappresentato lo schema di gioco inserendo in ogni cella il corrispettivo valore della matrice.
       Per visualizzare il simbolo viene messo in output l'elemento di Ped[] posto in posizione 0,1,2 a seconda del valore
       letto nella matrice Tav */
      
    int i=0;
    printf("           ___________      \n");
    printf("          | %c | %c | %c |     \n",  Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("         _|___|___|___|_    \n");
    printf("        | %c | %c | %c | %c |   \n"Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0] ][As[i][1]]]);
    printf("       _|___|___|___|___|_  \n");
    printf("      | %c | %c | %c | %c | %c | \n",Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("      |___|___|___|___|___| \n");
    printf("        | %c | %c | %c | %c |   \n"Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("        |___|___|___|___|   \n");
    printf("          | %c | %c | %c |     \n",  Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("          |___|___|___|     \n");

    ho 2 problemi:

    1) non so x quale assurda ragione il matrice As che passo in input riesce a leggermela lo stesso anche se nel main non l'ho messa.. e non mi da errore di compilazione... qualsiasi nomi gli metto.. pippo pluto e paperino lui riesce a capire che è quella matrice e parte uguale...lo trovo assurdo.

    2) ma è normale che gli incrementi della "i" li fa da destra verso sinistra? praticamente nella prima riga x es mi esce che la i è 3 poi 2 e poi 1...

    è normale?
    lavoro con il wxDev-c e con un progetto

  2. #2
    1) Se passi come argomento la matrice (comunque tu la chiami nel main) non c'è nulla di strano che la funzione ci acceda: è a quello che servono i parametri.
    2) Se non sbaglio l'ordine di valutazione dei parametri delle funzioni è a scelta del compilatore, per cui è buona regola evitare di inserire operatori di incremento (o in generale espressioni con side-effect) come parametri di funzione, specie se i side-effect in questione si ripercuotono sugli altri parametri.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [C] Misteri dell'informatica...

    Originariamente inviato da atomico
    1) non so x quale assurda ragione il matrice As che passo in input riesce a leggermela lo stesso anche se nel main non l'ho messa.. e non mi da errore di compilazione... qualsiasi nomi gli metto.. pippo pluto e paperino lui riesce a capire che è quella matrice e parte uguale...lo trovo assurdo.
    Non è assurdo, basta aprire un qualsiasi libro di C
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    ecco.. dalle vostre risposte è palese che non mi avete capito... faccio esempio
    Codice PHP:
    int main()
    {
    StampaMatrice(Mat);

    la funzione la chiamo
    Codice PHP:
    void StampaMatrice(int Tav[][N],int As[][2]) 
    e FUNZIONA!! ora avete capito?

  5. #5
    Posta il codice completo, altrimenti non ti si può dire nulla.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Bisogna capire se hai dichiarato le matrici globalmente o localmente ...

    Non ci sono "misteri" ma solo "cattivo uso" dell'informatica ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    se pure come dici avessi dichiarato la matrice "globalmente", come fa la funzione a "sapere" che la matrice che considero è proprio quella? non c'è nessun legame...l'unica cosa che mi viene in mente è che è l'unica matrice non usata in quel momento... ma questo dovrebbe essere una idea "geniale" del dev-c

  8. #8
    Originariamente inviato da MItaly
    Posta il codice completo, altrimenti non ti si può dire nulla.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    è impossibile postare tutto il codice.. è un progetto da centinaia di linee di codice..

    posto solo le linee interessate:
    Codice PHP:
    main(void){
    //Dichiarazione var
        
    int Associazioni[20][2]; //Matrice utilizzata per dare una corrispondenza numero-indici della matrice
        
    int Tav[N][N]; //Viene utilizzata una Matrice come struttura di gioco

    StampaMatrice(Tav); 
    Codice PHP:
    void StampaMatrice(int Tav[][N],int As[][2])

    {

    char Ped[]={' ','O','X'}; // Array contenente 3 elementi: 0: lo spazio vuoto 1: il simbolo cerchietto 2: il simbolo X

    /* Viene rappresentato lo schema di gioco inserendo in ogni cella il corrispettivo valore della matrice.
       Per visualizzare il simbolo viene messo in output l'elemento di Ped[] posto in posizione 0,1,2 a seconda del valore
       letto nella matrice Tav */

    int i=0;
    printf("           ___________      \n");
    printf("          | %c | %c | %c |     \n",  Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("         _|___|___|___|_    \n");
    printf("        | %c | %c | %c | %c |   \n"Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0] ][As[i][1]]]);
    printf("       _|___|___|___|___|_  \n");
    printf("      | %c | %c | %c | %c | %c | \n",Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("      |___|___|___|___|___| \n");
    printf("        | %c | %c | %c | %c |   \n"Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("        |___|___|___|___|   \n");
    printf("          | %c | %c | %c |     \n",  Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]], Ped[Tav [As[++i][0]] [As[i][1]]]);
    printf("          |___|___|___|     \n");


  10. #10
    Il codice della funzione non dovrebbe nemmeno venire compilato, visto che manca il tipo della variabile As. Comunque, ribadisco, senza un progetto di compilabile, specie in presenza di fenomeni "strani" come questo, non ti so dare alcuna spiegazione. Carica uno zip con il progetto.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.