Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    76

    aiuto urgente per esame in c!

    programma che calcola la matrice somma di due matrici date!



    void Inserisci (int *r,int *c)
    {
    printf ("Inserisci il numero delle righe della matrice:\n");
    scanf ("%d",r);
    printf ("Inserisci il numero delle colonne della matrice:\n");
    scanf ("%d",c);
    }

    int main()
    {
    int r1;
    int c1;
    int r2;
    int c2;
    int i,j;
    int** mat1;
    int** mat2;
    int** mat3;
    do
    {
    printf ("Prima matrice!\n");
    Inserisci (&r1,&c1);
    printf ("Seconda matrice!\n");
    Inserisci (&r2,&c2);
    }
    while ((r1!=r2) && (c1!=c2));

    mat1 = (int **) malloc(r1 * sizeof(int *));
    mat2 = (int **) malloc(r2 * sizeof(int *));
    mat3 = (int **) malloc(r1 * sizeof(int *));

    for (i=0;i<r1;i++){
    mat1[i] = (int *) malloc(c1 * sizeof(int));
    mat2[i] = (int *) malloc(c2 * sizeof(int));
    mat3[i] = (int *) malloc(c1 * sizeof(int));
    }

    printf ("Inserisci gli elementi della prima matrice:\n");
    for (i=0;i<r1;i++)
    for (j=0;j<c1;j++)
    scanf ("%d",&mat1[i][j]);
    printf ("La prima matrice e':\n\a");
    for (i=0;i<r1;i++)
    {
    for (j=0;j<c1;j++)
    printf ("%d\t",mat1[i][j]);
    printf ("\n");
    }
    printf ("Inserisci gli elementi della seconda matrice:\n");
    for (i=0;i<r2;i++)
    for (j=0;j<c2;j++)
    scanf ("%d",&mat2[i][j]);
    printf ("La seconda matrice e':\n\a");
    for (i=0;i<r2;i++)
    {
    for (j=0;j<c2;j++)
    printf ("%d\t",mat2[i][j]);
    printf ("\n");
    }

    for (i=0;i<r1;i++)
    for (j=0;j<c1;j++)
    mat3[i][j] = mat1[i][j] + mat2[i][j];

    printf ("La matrice somma delle matrici inserite e':\n\a");
    for (i=0;i<r1;i++)
    {
    for (j=0;j<c1;j++)
    printf ("%d\t",mat3[i][j]);
    printf ("\n");
    }
    getch();
    return 0;
    }


    c'e' un errore e non riesco a capire dove.
    c'e' il controlo nel while che controlla che il numero di righe e colonne sia ugale
    se inserisco per la prima 2 e 3 e per la seconda 2 e 3 ok
    se inserisco per la prima 3 e 5 e per la seconda 6 e 3 ok mi chiede di riinserirle perche' sono diversi
    il problema è che se inserisco per la prima 3 e 5 e per la seconda 3 e 4 va avanti perche' se una delle due è uguale va avanti io ho messo un and non un or!

  2. #2
    ciao,
    visto che sei nuovo ti invito a leggere il regolamento di questo forum: Leggi_Regolamento

    p.s. il titolo (questa volta) lo modifico io... "aiuto" e "urgente" in questo forum sono termini banditi in quanto
    non aiutano a capire quale sia il reale problema da risolvere
    ...Terrible warlords, good warlords, and an english song

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    76
    ok! grazie non lo sapevo
    riguardo al mio problema sai mica perche' da questo buffo errore?

  4. #4
    codice:
    #include <stdio.h> 
    #include <stdlib.h> 
    
    void Inserisci (int *r,int *c) 
    { 
        printf ("Inserisci il numero delle righe della matrice:\n"); 
        scanf ("%d",r); 
        printf ("Inserisci il numero delle colonne della matrice:\n"); 
        scanf ("%d",c); 
    } 
    
    char controllo (int r1, int r2, int c1, int c2) 
    { 
        if(r1==r2 && c1==c2)
            return 0;
        return 1;     
    } 
    
    int main() 
    { 
        int r1; 
        int c1; 
        int r2; 
        int c2; 
        int i,j; 
        int **mat1; 
        int **mat2; 
        int **mat3;
        char sw=1; /* loop infinito */ 
     
        while(sw) 
        { 
            printf ("Prima matrice!\n"); 
            Inserisci (&r1,&c1); 
            printf ("Seconda matrice!\n"); 
            Inserisci (&r2,&c2);
            sw = controllo (r1,r2,c1,c2);  
        }; 
    
        mat1 = (int **) malloc(r1 * sizeof(int *)); 
        mat2 = (int **) malloc(r2 * sizeof(int *)); 
        mat3 = (int **) malloc(r1 * sizeof(int *)); 
    
        for (i=0;i<r1;i++)
        { 
            mat1[i] = (int *) malloc(c1 * sizeof(int)); 
            mat2[i] = (int *) malloc(c2 * sizeof(int)); 
            mat3[i] = (int *) malloc(c1 * sizeof(int)); 
        } 
    
        printf ("Inserisci gli elementi della prima matrice:\n"); 
        for (i=0;i<r1;i++) 
            for (j=0;j<c1;j++) 
                scanf ("%d",&mat1[i][j]); 
                printf ("La prima matrice e':\n\a"); 
                for (i=0;i<r1;i++) 
                { 
                    for (j=0;j<c1;j++) 
                        printf ("%d\t",mat1[i][j]); 
                    printf ("\n"); 
                } 
    
        printf ("Inserisci gli elementi della seconda matrice:\n"); 
        for (i=0;i<r2;i++) 
            for (j=0;j<c2;j++) 
                scanf ("%d",&mat2[i][j]); 
                printf ("La seconda matrice e':\n\a"); 
                for (i=0;i<r2;i++) 
                { 
                    for (j=0;j<c2;j++) 
                        printf ("%d\t",mat2[i][j]); 
                    printf ("\n"); 
                } 
    
    
    
        for (i=0;i<r1;i++) 
            for (j=0;j<c1;j++) 
                mat3[i][j] = mat1[i][j] + mat2[i][j]; 
                printf ("La matrice somma delle matrici inserite e':\n\a"); 
                for (i=0;i<r1;i++) 
                { 
                    for (j=0;j<c1;j++) 
                        printf ("%d\t",mat3[i][j]); 
                    printf ("\n"); 
                } 
    
        while(getchar()!='\n')
            ;
        printf("premi un tasto per uscire");    
        getchar();
        return 0; 
    }
    Così dovrebbe andare... provalo.

    p.s. la prossima volta sei pregato di INDENTARE il codice (altrimenti è praticamente impossibile capire il flusso del programma (con tutti quei cicli FOR ) )

    per indentare il codice basta inserirlo tra i tag [CODE*]codice programma[/CODE*] senza mettere l'asterisco!!!
    ...Terrible warlords, good warlords, and an english song

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Si, ma qual era l'errore???

  6. #6
    c'e' un errore e non riesco a capire dove.
    c'e' il controlo nel while che controlla che il numero di righe e colonne sia ugale
    se inserisco per la prima 2 e 3 e per la seconda 2 e 3 ok
    se inserisco per la prima 3 e 5 e per la seconda 6 e 3 ok mi chiede di riinserirle perche' sono diversi
    il problema è che se inserisco per la prima 3 e 5 e per la seconda 3 e 4 va avanti perche' se una delle due è uguale va avanti io ho messo un and non un or!
    il ciclo while non andava! (da buon idraulico l'ho sostituito )

    il resto non l'ho controllato... ma credo che funzioni.
    ...Terrible warlords, good warlords, and an english song

  7. #7
    scusami...

    ho riletto:

    è sufficiente mettere (giustamente) un OR
    codice:
    do
    {
    ...
    ...
    /* la funzione controllo e lo switch (sw) non servono a nulla */
    } while ( r1!=r2 || c1!=c2 );
    in questo modo "passa" soltanto se r1 è uguale a r2 e anche c1 è uguale a c2
    ...Terrible warlords, good warlords, and an english song

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    76
    si ma non riesco a capire dove era l'errore nel mio
    do
    {
    printf ("Prima matrice!\n");
    Inserisci (&r1,&c1);
    printf ("Seconda matrice!\n");
    Inserisci (&r2,&c2);
    }
    while ((r1!=r2) && (c1!=c2));

    fa una volta la parte del do poi controlla se r1 è diverso da r2 e c1 è diverso da c2 riparte con le istruzioni sotto al do altrimenti va avanti!
    boh

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    76
    hai ragione ci va messo un or!!!!sono proprio un cazzone se faccio un errore cosi' all'esame mi sparo!
    il problema è che sei cosi' convinto di averlo fatto bene che non ti accorgi dell'errore!
    sul dev che opzione devo usare per migliorere la lettura del testo del programma?

  10. #10
    devi utilizzare l'operatore OR (vedi il mio post sopra) al posto dell' AND
    ...Terrible warlords, good warlords, and an english song

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 © 2025 vBulletin Solutions, Inc. All rights reserved.