Esercizio sulle matrici..

di il
42 risposte

Esercizio sulle matrici..

Buongiorno sono alle prese con un esercizio che data una matrice1 di partenza di N=40(righe x colonne) che si deve generare con valori random compresi tra 0 e 10 si deve costruire una seconda matrice2 che abbia la seguente forma:
alla matrice2 assegni per ogni cella di
posizione i,j la somma delle celle della prima matrice dalla cella 0,0 alla cella i,j.

Io ho agito cosi , ma alla visualizzazione della matrice2 mi mette un paio di numerii dispersi qua e la sullo schermo .

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 40

void stampamatrice1(int matrice1[N][N]);
void stampamatrice2(int matrice2[N][N]);

int main ()
{
    int i,j;
    int t=0,s=0;
    int somma=0;
    int matrice1[N][N];
    int matrice2[N][N];
    srand(time(NULL));
    for(i=0;i<N;i++)
    for(j=0;j<N;j++)
    matrice1[i][j]=rand()%10; 
    printf("\n Genero una matrice1 di dimensioni %dX%d:\n\n",N,N);     
    stampamatrice1(matrice1);
    for(i=0;i<N;i++){
                      
                     for(j=0;j<N;j++){
                     if ((t<=i)&&(s<=j))
                     somma=somma+matrice1[i][j];
                     matrice2[t][s]=somma;
                     t++;
                     s++;
                     }
                     }
                     stampamatrice2(matrice2);
                     system("pause");}
    
    void stampamatrice1(int matrice1[N][N]){
          int i,j;
         for(i=0;i<N;i++)
         {
        for(j=0; j<N; j++)printf("%4d",matrice1[i][j]);
        printf("\n\n");
    }
}
 
    void stampamatrice2(int matrice2[N][N]){
          int t,s;
         for(t=0;t<N;t++)
         {
        for(s=0;s<N;s++)printf("%4d",matrice2[t][s]);
        printf("\n\n");
    }
}                                      

42 Risposte

  • Re: Esercizio sulle matrici..

    Perchè hai fatto due funzioni stampamatrice1 e stampamatrice2? Ne basta una sola.
    Prova a risolvere il problema semplificandolo, poni ad esempio N=4.
  • Re: Esercizio sulle matrici..

    Il problema persiste anche diminuendo la dimensione.
  • Re: Esercizio sulle matrici..

    Non ho controllato il metodo che hai usato ma in questo modo

    le variabili t ed s aumentano senza controllo fino a oltre 90

    e questo non va bene dato che le usi come indice in una matrice di 40 x 40.
  • Re: Esercizio sulle matrici..

    Ma ho messo la condizione dell'if all'interno dei 2 cicli for annidati che non possono far andare oltre N t ed s.. o no ?
  • Re: Esercizio sulle matrici..

    Ti suggerivo di diminuire la dimensione per facilitarti il debug del problema; è molto probabile che se hai un problema con N=40 ce l'avrai anche con qualsiasi altro valore di N, solo che lavorare su 16 elementi è più facile che su 1600.
  • Re: Esercizio sulle matrici..

    Ma ho messo la condizione dell'if all'interno dei 2 cicli for annidati che non possono far andare oltre N t ed s.. o no ?
    t ed s non devono neanche raggiungere N
    Vedi un pò tu
  • Re: Esercizio sulle matrici..

    Ma con questa condizione possono mai raggiungere 40 ?


    for(i=0;i<N;i++){

    for(j=0;j<N;j++){
    if ((t<=i)&&(s<=j))
  • Re: Esercizio sulle matrici..

    Ti faccio notare che quella if vale solamente per la linea successiva, ovvero
    
    if ((t<=i)&&(s<=j))
       somma=somma+matrice1[i][j];
    
    e non per la linea
    
    matrice2[t][s]=somma;
    
    che è fuori dalla if.
  • Re: Esercizio sulle matrici..

    Si dovrei mettere la parentesi dopo l'if, ma comunque ho sempre lo stesso problema..
  • Re: Esercizio sulle matrici..

    Mettendo le parentesi elimini il problema che ti si presenta sugli indici t e s, ma NON è la soluzione al problema che stai affrontando per cui, probabilmente devi rivedere l'algoritmo che hai pensato per risolverlo.

    In particolare, spiega il metodo che hai usato, linea per linea e si vede dove hai sbagliato.
  • Re: Esercizio sulle matrici..

    Ma hai provato a "debuggare" il problema? Per semplificare ti ho suggerito di porre N=4; naturale (per uno che ha voglia di capire) sarebbe quella di andare a piazzare delle printf() per capire che valori assumo t ed s nei vari cicli, eseguire il codice ed analizzare il comportamento.
    Vedi anche i suggerimenti di oregon, li segui?
  • Re: Esercizio sulle matrici..

    Il metodo è spiegato nel codice , comunque :
    -creo la matrice1;
    -faccio girare gli indici i,j della matrice1 ;
    -metto la condizione nell'if su t,s;
    -e incremento t,s.
  • Re: Esercizio sulle matrici..

    Il metodo è spiegato nel codice , comunque :
    -creo la matrice1;
    -faccio girare gli indici i,j della matrice1 ;
    -metto la condizione nell'if su t,s;
    -e incremento t,s.
  • Re: Esercizio sulle matrici..

    A che servono t ed s? Il testo ti chiede

    "per ogni posizione i,j della matrice2"
Devi accedere o registrarti per scrivere nel forum
42 risposte