Non riesco a capire l'errore...il prodotto dà un output sbagliato, come se il ciclo for girasse più del dovuto.
C++:
/*Programma che legge un intero positivo
n minore di 6, gli elementi di una matrice
A nxn e un vettore u e calcola il vettore
v=Au, il vettore w che contiene la somma
della corrispondente colonna di A e il
prodotto scalare tra u e w*/
#include <stdio.h>
#include <math.h>
#define N 10
typedef int Matrice[N][N];
int leggi_dato (int&);
int controllo_dato (int);
void leggi_matrice (int [N][N], int);
int leggi_vettore (int&);
void prodotto_matrice (int [N][N], int[], int);
int main ()
{int n=leggi_dato (n);
if (controllo_dato (n)==0) return 0;
Matrice A;
leggi_matrice (A, n);
int u[n];
u[n]=leggi_vettore (n);
int w[n];
prodotto_matrice (A, u, n);
return 0;}
int leggi_dato (int&a)
{printf ("Inserire numero minore di 6="); scanf("%d", &a);
if (controllo_dato (a)==0) {printf ("Numero errato"); return 0;}
return a;}
int controllo_dato (int a)
{if (a>10||a<1) return 0; else return 1;}
void leggi_matrice (int A[N][N], int n)
{for (int i=0; i<n; i++) {for (int j=0; j<n; j++) {printf ("Matrice %d %d=", i+1, j+1); scanf("%d", &A[i][j]);}}
return;
}
int leggi_vettore (int&n)
{int a[n]; for (int i=0; i<n; i++) {printf ("Inserire %d componente del vettore u=", i+1);
scanf ("%d", &a[i]);} return a[n];
}
void prodotto_matrice (int a[N][N], int u[N], int n)
{int i, j;
int w[N];
for (i=0; i<n; i++) {w[i]=0; for (j=0; j<n; j++) {w[i]+=(a[i][j]*u[j]);}}
for (int k=0; k<n; k++) printf ("%d\n", w[k]); return;
}