Aiuto per programma in C

di il
54 risposte

54 Risposte - Pagina 2

  • Re: Aiuto per programma in C

    Si i numeri complessi sono quelli.. per metterli nella matrice pensavo di metterli come argomento. ora riguardo il codice, comunque in input mi da numeri enormi che nemmeno ho inserito..
  • Re: Aiuto per programma in C

    Ma quello è l'input o l'output? A me sembra output. Per mettere numeri complessi dovresti creare un struttura con parte reale e parte immaginaria.
    
    typedef struct _complex
    {
        int reale;
        int immaginaria;
    }complex;
    
    e crei la tua matrice come:
    
    complex xx[9][9];
    
    solo così hai una matrice di numeri complessi. lo scambio dei dati lo fai tramite una variabile temporanea.
  • Re: Aiuto per programma in C

    Cioè spiegati meglio... e poi
    typedef struct _complex
    {
    int reale;
    int immaginaria;
    }complex;
    è in c o c++?? perchè non ho mai visto questo tipo di codice
    ps ho sbagliato, volevo scrivere output..
  • Re: Aiuto per programma in C

    Hai imparato cosa sono le strutture? quello è in C puro. Come puoi rappresentare un oggetto che sia composto da due tipi di dati? Nel tuo caso hai due int per rappresentare un numero complesso. Il numero 2 + 3i sarà rappresentato in questa struttura nella forma:
    
    //struttura x 2+3i
    
    complex numeroComplesso;
    
    numeroComplesso.reale = 2;
    numeroComplesso.immaginaria = 3;
    
    
    
    e la struttura conterrà:
    typedef struct _complex
    {
    int reale;  //= 2
    int immaginaria; //= 3
    }complex;
    
  • Re: Aiuto per programma in C

    A ok.. solo che queste cose non le devo studiare... ma credo di aver capito, però come si crea una variabile temporanea in c?? non sono sicuro ma per caso io creo una variabile tipo:
    int temp
    poi le assegno il valore che mi interessa, tipo:
    temp = c[][];
    e poi ruoto c[][] e riassegno il valore?
  • Re: Aiuto per programma in C

    Supponi che hai due dati da scambiare diciamo xx[1][5] con xx[3][4];

    allora fai:
    
    int temp = xx[1][5];
    xx[1][5] = xx[3][4];
    xx[3][4] = temp;
    
  • Re: Aiuto per programma in C

    Allora ho modificato il programma, l'ho fatto con gli interi e non con i complessi per semplicità. il codice è questo:
    #include<stdio.h>
    #define SIZE 9
    
    void scambia( int xx[9][9],const  int  matriceIniziale[9][9] );
    void printArray( const int zz[9][9]);
    void printSottoMatrice(int xx[9][9]);
    
    const int matriceIniziale[SIZE][SIZE] = { { 91, 92, 93, 94, 95, 96, 97, 98, 99 }, { 11, 12, 13, 14, 15, 16, 17, 18, 19 },
    { 21, 22, 23, 24, 25, 26, 27, 28, 29 }, { 31, 32, 33, 34, 35, 36, 37, 38, 39 },
    { 41, 42, 43, 44, 45, 46, 47, 48, 49 }, { 51, 52, 53, 54, 55, 56, 57, 58, 59 },
    { 61, 62, 63, 64, 65, 66, 67, 68, 69 }, { 71, 72, 73, 74, 75, 76, 77, 78, 79 },
    { 81, 82, 83, 84, 85, 86, 87, 88, 89 } };
    
    int main()
    {
      int aa[9][9];
    
    
    printf("la matrice e':\n");
    printArray(matriceIniziale);
    
    printf("\nla matrice invertita e':\n");
    scambia(aa, matriceIniziale);
    
    printSottoMatrice(aa);
    
    return 0;
    
    
    }
    
    void scambia( int xx[9][9],const  int  matriceIniziale[9][9] )
    {
       int temp;
       int i, j;
    
       for( i = 0; i < 9; i++ )
       {
          for( j = 0; j < 9; j++ )
          {
               xx[i][j] = matriceIniziale[i][j];
               
               if(i == j)
               {
                    temp = xx[i][j];
                    xx[i][j] = xx[i][9 - 1 -j];
                    xx[9 - 1 - j][i] = temp;
               }                   
          }
       }
    }
    
    void printArray( const int zz[9][9])
    {
       int i;
       int j;
    
       for( i = 0; i < 9; i++ )
       {
          for( j = 0; j < 9; j++ )
          {
             printf("%d ", zz[ i ][ j ]);
          }
          printf("\n");
       }
    }     
          
    
    void printSottoMatrice(int xx[9][9])
    {
       int i;
       int j;
    
       for( i = 0; i < 9; i++ )
       {
          for( j = 0; j < 9; j++ )
          {
             printf("%d\t  ", xx[ i ][ j ]);
          }
          printf("\n");
       }
    }
    
    il fatto è che in out mi da la matrice con le diagonali invertite, solo che i primi 4 valori della diagonale di sinistra mi da valori senza senso.. so di essere un rompiscatole, ma avendo tra poco l'esame sei la mia unica salvezza... un giorno mi sdebiterò
  • Re: Aiuto per programma in C

    Questa
    
    xx[9 - 1 - j][i] = temp;
    
    non dovrebbe essere
    
    xx[i][9 - 1 - j] = temp;
    
    l'inversione lo devi fare solo fino a meta colonna quindi j deve andare da 0 a 4. Se non inverti due volte e raggiungi lo stato iniziale. Impara ad usare il debugger. E' la tua salvezza in situazioni dove non capisci perche il codice fa cose strane.
  • Re: Aiuto per programma in C

    Ok ho aggiustato, non mi ero accorto però non ho capito in che senso j deve andare da 0 a 4.. cioè ho provato a modificare il programma come dici, solo che mi da numeri assurdi... invece se lascio j per com'è mi da xx[1][1]= 2, xx[2][2]= 2046820731, xx[3][3]= 0, xx[4][4]= 0. poi le altre parti della diagonale sono esatte, o meglio xx[9][9] fino a xx[5][5] rimangono le stesse... e poi come si usa il debug?? grazie sempre per l'aiuto
  • Re: Aiuto per programma in C

    Scusate per il doppio post, ma intanto che aspettavo stavo facendo un altro programma e in out mi da cose strane..
    #include<stdio.h>
    
    void printArray( const int zz[4][4]);
    int contamulti( int conta );
    
    int mat[4][4] = { { 12, 15, 34, 21 }, { 11, 12, 99, 14 },
                      { 21, 22, 23, 24 }, { 30, 69, 73, 49 } };
                                           
    int main()
    {
        int conta = 0;
        int aa[4][4];
        
        printf("la matrice e':\n");
        printArray(aa);
        
        printf("\nil numero di multipli di 3 e':\n");
        contamulti(conta);
        
        return 0;
        
    }
    
    int contamulti( int multi )
    {
        int i, j;
        
        
        for( i = 0; i < 4; ++i )
        {
              for( j = 0; j < 4; ++j )
              {
                   if(mat[i][j] % 3 == 0)
                   {
                        ++multi;
                   }
              }
        }
        
        return multi;
    }
    
    void printArray( const int zz[4][4])
    {
       int i;
       int j;
    
       for( i = 0; i < 4; i++ )
       {
          for( j = 0; j < 4; j++ )
          {
             printf("%d ", zz[ i ][ j ]);
          }
          printf("\n");
       }
    }
                   
    
    intanto non mi stampa multi, e la matrice ha valori assurdi diversi da quello che ho messo...
  • Re: Aiuto per programma in C

    Che compilatore usi? Nel ultimo post stai stampando una matrice non inizializzata. invece di mat stai stampando aa.
  • Re: Aiuto per programma in C

    L'ultimo programma l'ho risolto subito dopo aver postato però continuo ad avere problemi con quello precedente della matrice.. io uso dev c++ l'ha consigliato il prof ed è anche l'unico che so usare..
  • Re: Aiuto per programma in C

    Hai un menu che si chiama Debug? Inizia da quello e impari ad utilizzare il debug. In tanto io vedo se riesco a trovarti gli errori nel tuo codice.
  • Re: Aiuto per programma in C

    Cambia la funzione scambia così:
    
    void scambia( int xx[9][9],const  int  matriceIniziale[9][9] )
    {
    	int temp;
    	int i, j;
    
    	for( i = 0; i < 9; i++ )
    	{
    		for( j = 0; j < 9; j++ )
    		{
    			xx[i][j] = matriceIniziale[i][j];
    		}
    	}
    	for( i = 0; i < 9; i++ )
    	{
    		for( j = 0; j < 9; j++ )
    		{
    			if(i == j)
    			{
    				temp = xx[i][j];
    				xx[i][j] = xx[i][8 -j];
    				xx[i][8-j] = temp;
    			}                   
    		}
    	}
    }
    
  • Re: Aiuto per programma in C

    Inutile dire grazie avevo pensato di mettere 8 - j solo che sto facendo un milione di programmi e mi è passato di mente... e poi non ci pensavo a mettere altri due for annidati... grazie di nuovo
Devi accedere o registrarti per scrivere nel forum
54 risposte