[C] Prodotto scalare!

Messaggioda Ster24 » 21/10/2017, 15:06

Salve, mi trovo in difficoltà con un esercizio. Questo mi chiede di leggere da un file di testo una matrice e un vettore e mi chiede infine di calcolare il prodotto scalare tra le colonne della matrice e il vettore dato. Nel momento in cui eseguo il programma, nel prodotto scalare mi escono valori non corretti. Di seguito il codice:



Codice:
printf("\nIL PRODOTTO SCALARE TRA IL VETTORE E LE COLONNE ANALIZZATE E': \n");
      for(j=0; j<colonne; j++){
        for(i=0; i<righe; i++){

            ps[j]+=matrice[i][j]*vettore[i];

        }
      }
         for(i=0; i<colonne; i++){
         printf("%.1f",ps[i]);

         }       




E di seguito il codice completo:

Testo nascosto, fai click qui per vederlo
Codice:
#include <stdio.h>
#include <stdlib.h>
#define R 20
#define C 20


void lettura(char file[],int matrice[][C], int *righe, int *colonne, int vettore[]);






main(){

   int matrice[R][C];
   char file[20];
   int righe, colonne, i, j;
   float ps[C];


   int vettore[R];


     printf("\nINSERIRE IL NOME DEL FILE DA APRIRE:\n");
     scanf("%s",file);


     lettura(file, matrice, &righe, &colonne, vettore);



       printf("\nLA MATRICE HA %d RIGHE E %d COLONNE, ED E' LA SEGUENTE:",righe,colonne);
       printf("\n");



       for(i=0; i<righe; i++){
        for(j=0; j<colonne; j++){
            printf("%d ",matrice[i][j]);
        }
        printf("\n");

       }

       printf("\nIL VETTORE CON CUI EFFETTUARE IL PRODOTTO SCALARE E':\n");
       for(i=0; i<righe; i++){
        printf("%d ",vettore[i]);
       }



      printf("\nIL PRODOTTO SCALARE TRA IL VETTORE E LE COLONNE ANALIZZATE E': \n");
      for(j=0; j<colonne; j++){
        for(i=0; i<righe; i++){

            ps[j]+=matrice[j][i]*vettore[i];

        }
      }

         for(i=0; i<colonne; i++){
         printf("%.1f",ps[i]);

         }








return(0);








}

void lettura(char file[],int matrice[][20], int* righe, int* colonne,int vettore[]){

     FILE *f;
     int r,c,i,j;


     f= fopen(file,"r");
     if(f==NULL){
        printf("ATTENZIONE! IL FILE NON ESISTE!");
        exit(0);
     }
     fscanf(f, "%d",&r);
     fscanf(f, "%d",&c);

     *righe=r;
     *colonne=c;

       for(i=0; i<r; i++){
         for(j=0; j<c; j++){
            fscanf(f,"%d",&matrice[i][j]);
         }
       }

     for(i=0; i<r; i++){
        fscanf(f,"%d",&vettore[i]);
     }

     fclose(f);


}


Vi ringrazio anticipatamente.
Ster24
Junior Member
Junior Member
 
Messaggio: 170 di 427
Iscritto il: 10/01/2014, 20:32

Re: [C] Prodotto scalare!

Messaggioda Michele/96 » 30/11/2017, 12:41

Ciao,
probabilmente quando calcoli il prodotto scalare dovresti fare

ps[j] +=matrice[j][i] * vettore[i]

invece che

ps[j] +=matrice[i][j] * vettore[i]

dal momento che j indica le colonne dovresti selezionare la colonna con il primo for e riga ed elemento dell' array con il secondo for, poi ovviamente dipende da come intendi la matrice(essendo un' astrazione) però a prima vista mi pare un errore di battitura, spero di esserti stato utile,
Saluti
Michele/96
New Member
New Member
 
Messaggio: 27 di 70
Iscritto il: 22/10/2016, 12:24


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite