Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    16

    Prodotto tra matrici in C++.

    Ciao ragazzi,
    sono abbastanza preoccupato per l'esame che avrò tra 10 giorni, spero mi possiate dare una mano.
    Trattasi al momento di un problema che rigurda il prodotto di due matrici. M e L
    Sembrerebbe che il codice sia scritto bene, tanto è vero che riesco a compilarlo, ma quanto effettuo il Run, mi da subito l'errore.
    il codice del ciclo for che dovrebbe fare l'operazione è:

    for(i=1; i<=k ;i++)
    {
    for(j=1; j<=k ;j++)
    {
    N[i][j]=0;
    for(h=1; h<=k ;h++)
    {
    N[i][j]+=M[i][h]*L[h][k];
    }
    }
    }

    L'unica cosa che vi posso dire è che tutte e tre le matrci sono definite come puntatori di puntatori, e vanno a richiamarsi la funzione Matrice, dove appunto viene allocata la memoria dinamicamente in funzione della dimensione di riga e colonna.
    Successivamente le matrici M e L ottengono i loro valori da tastiera.
    Il codice completo è:

    Sapreste dirmi quale è il problema?

    Grazie
    Amartya
    PS.
    Il mio fine ultimo è calcolarmi una successione di vettori per n=2,3,4......300

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    16
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <iostream>

    using namespace std;
    double** Matrice(int r,int c);/*funzione che crea dinamicamente una matrice di r righe e c colonne*/
    void leggimat(int r, int c, double** M );

    double Prodotto(double, double, int, int, int);
    main()
    {int i,k,n,j,h,y; double x;

    cout<<"\n dammi il numero reale x = ";
    cin>> x;
    cout<<"\n dammi il numero dei componenti del vettore k = ";
    cin>> k;
    if (k>40) return 0;
    double** L; /* variabile puntatore */
    double** M; /* variabile puntatore */
    double** N; /* variabile puntatore */
    M = Matrice(k,k);
    L = Matrice(k,k);
    leggimat(k,k,M);
    leggimat(k,k,L);

    N = Matrice(k,k);

    for(i=1; i<=k ;i++)
    {
    for(j=1; j<=k ;j++)
    {
    N[i][j]=0;
    for(h=1; h<=k ;h++)
    {
    N[i][j]+=M[i][h]*L[h][k];
    }
    }
    }





    cout<<"\n Matrice N = ";

    for(i=0; i<k ;i++)
    {
    for(j=0; j<k ;j++)
    {
    cout << "\n l'elemento di riga "<< i << " e di colonna " << j << ": "<< N[i][j];
    N[i][j];
    }
    }






    system("\n PAUSE");return 0;

    }



    double** Matrice(int r, int c )
    {
    double** m;
    int i,j;
    m=new double* [r];
    /* ora posso creare le righe */
    for (i=0;i<r;i++)
    m[i] = new double[c];
    return m;
    }
    void leggimat(int r, int c, double** M )
    {
    int i,j;
    for ( i = 0; i <r; i++)
    for (j = 0; j <c; j++){
    cout << "\n Inserire l'elemento di riga "<< i
    << " e di colonna " << j << ": ";
    cin >> M[i][j];
    }
    }

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: Prodotto tra matrici in C++.

    Questo ciclo (e i suoi simili) sono sbagliati.
    Un array V[n] parte sempre da 0 e finisce a n-1, non da 1 a n
    for(i=1; i<=k ;i++)
    Corretto è:

    for(i=0; i<k ;i++)

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    16
    Problema risolto
    Si trattava del punto di partenza del ciclo for, settato su 1, anzichè su 0, quindi non c'era un matching tra le matrici.

    Grazie lo stesso.

    Mi riservo di chiedervi qualcos'altro sul calcolo di una successione di matrici.
    Anzi se avete qualcosa, vi sarei grato se potreste postarmelo.

    Amartya

  5. #5
    Problema risolto
    Si trattava del punto di partenza del ciclo for, settato su 1, anzichè su 0, quindi non c'era un matching tra le matrici.

    Grazie lo stesso.
    Esattamente come ti ha indicato Shodan, o sbaglio?
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    16
    Si infatti, ma giuro che non l'avevo visto.

    Cmq grazie per la tempestività e per la correttezza dell'informazione

    Amartya

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.