Pomnożyć macierzA przez wektor

0

Witam na forum nie znalazłem odpowiedniego wątku dla tego tematu dlatego zamieszczam nowy:
potrzbuje na studia pomnożyć Macierz przez wektor
wiem jednak ze nie robi sie tego do konca tak jak ukazałem to w kodzie, ponieważ tak na prawde dopiero raczkuje w c.
stworzyłem coś takiego :

#include <stdio.h>

#include <stdlib.h>

#include <time.h>


int main()

{
  srand((unsigned) time(NULL));
  int i, j, x, n = 10, m = 10, o = 10, c;
  int MacierzA[n][m];
  int wektorB[o];
  printf("podaj liczbe wierszy w macierzy A : ");
  scanf("%d", & n);
  printf("podaj liczbe kolumn w macierzy A : ");
  scanf("%d", & m);

  //podanie elementów macierzy
  for (i = 0; i < n; i++)
    for (j = 0; j < m; j++) {
      printf("MacierzA[%d][%d]", i + 1, j + 1);
      scanf("%d,%d", & MacierzA[i][j]);
    }
  //wyswietlenie macierzy
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      printf("%3d\t", MacierzA[i][j]);

    }
    printf("\n");
  }
  printf("\n");
  //randowmowe elementy wektora B
  c = rand() % 21 - 10;
  //wyswietlam wektorB
  printf("%d", c);
  //mnozenie
  for (i = 0; i < n; i++)
    for (j = 0; i < m; j++) {
      MacierzA[i][j] *= c;
    }
  //wynik
  printf("Macierz wynikowa\n");
  for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++) {
      printf("%3d\t", MacierzA[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  printf("\n");

  return 0;
}
2

Mnożenie macierzy przez wektor odbywa się tak samo jak mnożenie macierzy przez macierz, zwyczajnie przyjmij że wektor ma 1 kolumnę (zaś wierszy tyle ile kolumn w macierzy.

0

@_13th_Dragon: #include <stdio.h>




#include <stdlib.h>


int main()

{

  int macierzA[20][30];
  int wektorB[20][0];
  int wynik[20][30];

  int n, m, j, k; //deklaracja wymiarów macierzy

  printf("podaj liczbe wierszy w macierzy A : ");
  scanf("%d", & n);
  printf("podaj liczbe kolumn w macierzy A : ");
  scanf("%d", & m);
  j = m;
  int i, p, u; //deklaracja licznikow

  //podanie elementów macierzy
  for (i = 0; i < n; i++)
    for (p = 0; p < m; p++) {
      printf("MacierzA[%d][%d]", i + 1, p + 1);
      scanf("%d,%d", & macierzA[i][p]);
    }

  //wyswietlenie macierzy
  for (i = 0; i < n; i++) {
    for (p = 0; p < m; p++)
      printf("%3d\t", macierzA[i][p]);
    printf("\n");
  }
  printf("\n");

  printf("wektorB :\n");
  for (i = 0; i < j; i++)
    for (p = 0; p < k; p++)
      for (i = 0; i < j; i++)
        for (p = 0; p < k; p++) {
          printf("WektorB[%d]", i + 1);
          scanf("%d,%d", & macierzA[i][p]);
        }
  printf("\n\n");

  for (i = 0; i < n; i++)
    for (p = 0; p < k; p++) {
      wynik[i][p] = wynik[i][p] + macierzA[i][u] * wektorB[u][p];

    }

  printf("Macierz wynikowa:\n");
  for (i = 0; i < n; i++) {
    for (p = 0; p < k; p++)
      printf("%3d\t", wynik[i][p]);
    printf("\n");
  }
  printf("\n");

  return 0;
}
0

int wektorB[20][0]; - mówiłem jedna kolumna, nie zero.

0
#include <stdio.h>

#include <time.h>
#include <stdlib.h>

int main()

{

  int macierzA[20][30];
  int wektorB[20][30];
  int wynik[20][30];
  int n, m, j, k; //deklaracja wymiarów macierzy
  srand(time(NULL));

  printf("podaj wymiary macierzy: ");
  scanf("%d%d", & n,&m);
  k=1;//wektor ma jedna kolumne
  j = m;//liczba kolumn pierwszej rowna liczbie wierszy drugiej
  printf("\n");
  printf("pierwsza:n=%d,m=%d\n",n,m);
  printf("wektor:j=%d,k=%d\n",j,k);


  int i, p, u; //deklaracja licznikow


  for (i = 0; i < n; i++)
  for (p = 0; p < m; p++)
    macierzA[i][p]=rand()%10;

  for(i=0;i<n;i++)//wypisywanie wierszami
  {
      printf("\n");
      for(p=0;p<m;p++)
        printf("%d\t",macierzA[i][p]);
  }

printf("\n");
 printf("wektor:\n");

 for(i=0;i<j;i++)
 for(p=0;p<k;p++)
    wektorB[i][p]=rand()%10;

//wypisanie wektora
for(i=0;i<j;i++)
{
 printf("\n");
for(p=0;p<k;p++)
    printf("%d\t",wektorB[i][p]);
}
printf("\n\n");
//mnozenie
 for(i=0;i<n;i++)
 for(p=0;p<k;p++)
 {
     wynik[i][p]=0;
     for(u=0;u<j;u++)
        wynik[i][p]=wynik[i][p]+macierzA[i][u]*wektorB[u][p];
 }
//wynik
 printf("macierz wynikowa:\n");
 for(i=0;i<n;i++)
 {
     printf("\n");
     for(p=0;p<k;p++)
        printf("%d\t",wynik[i][p]);
 }
 return 0;
}

tu chyba działa

2

Nie może być dobrze, dopóki:

  1. Nie rozumiesz że wektor jest jednowymiarowy.
  2. Masz popieprzoną czarnym pieprzem deklaracje, ma być:
  int matrix[20][30];
  int vector[30];
  int result[20];
  1. Masz niczego nie znaczące nazwy zmiennych iterujących. Użyj np rowCount,colCount - dla rozmiarów, r,c - dla indeksów.
  2. Masz pochrzanione formatowanie: http://forum.4programmers.net/998482
  3. Nie rozumiesz nawet podstawowych operatorów: http://forum.4programmers.net/1101404
  4. Ignorujesz rady bo poprzedni punkt już podawałem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1