Skocz do zawartości


Zdjęcie

Informatyka - pomocy


9 odpowiedzi w tym temacie

#1 mARTi

mARTi

    Rozgrzewam się

  • Użytkownik
  • 68 postów

Napisano 2010.05.25, 18:03

Witam
Mam do napisania na zaliczenie informatyki program mnożący macierze. Mógłby mi ktoś pomóc bo jestem zielony. Program ma mnożyć dwie macierze oczywiście tylko gdy będzie spełniony warunek kolumna-wiersz. macierze mogą być np 1x4 i 4x1 a elementy macierzy ma wpisać użytkownik. Proszę o pomoc może ktoś się zlituje:D

#2 Senega

Senega

    Początkujący

  • Wtyczkopisarz
  • 1401 postów

Napisano 2010.05.25, 18:09

Podaj język

@Edit
Język programowania oczywiście. Nie wiem czy ktoś to zrobi za Ciebie, ale algorytm na pewno tutaj dostaniesz.

@Down
To z przepracowania :D

Użytkownik Senega edytował ten post 2010.05.25, 18:42

Android - program telewizyjny Kropka TV http://goo.gl/AZyEE

Aktualnie bez AQQ - co na dobre mi wychodzi :tuptup:


#3 karololszak

karololszak

    podróżnik w czasie

  • Moderator
  • 1562 postów

Napisano 2010.05.25, 18:20

@Senega w dodatkowym opisie tematu jest przecież 'program mnożący macierze w C++'

#4 Senega

Senega

    Początkujący

  • Wtyczkopisarz
  • 1401 postów

Napisano 2010.05.25, 18:49

Jeśli to mają być stałe wielkości macierzy to od pobierasz macierz 1 i macierz 2. Link.
Masz 8 zmiennych (lub dwie tablicowe to zależy od Ciebie).
Wyświetlasz dane. Link
To co powinieneś uzyskać to jest opisane tutaj

wynik mniej więcej będzie na ekranie wyglądał tak:
m1_1..m1_4 - macierz 1 - pionowa
m2_1..m2_4 - macierz 2 - pozioma

m1_1*m2_1 m1_1*m2_2 m1_1*m2_3 m1_1*m2_4
m1_2*m2_1 m1_2*m2_2 m1_2*m2_3 m1_2*m2_4
m1_3*m2_1 m1_3*m2_2 m1_3*m2_3 m1_3*m2_4
m1_4*m2_1 m1_4*m2_2 m1_4*m2_3 m1_4*m2_4

Użytkownik Senega edytował ten post 2010.05.25, 18:53

Android - program telewizyjny Kropka TV http://goo.gl/AZyEE

Aktualnie bez AQQ - co na dobre mi wychodzi :tuptup:


#5 Beherit

Beherit

    In Sorte Diaboli

  • Wtyczkopisarz
  • 5030 postów

Napisano 2010.05.25, 22:01

Przecież to nie jest trudne ;) Macierz to zwykła tablica ;) int macierzA[3]; int macierzB[3]; int macierzC[3] i jedziesz :P macierzC[0]=macierzA[0]*[macierzB[0]; i tak dalej :P

#6 Laston

Laston

    Weteran

  • Dekorator
  • 559 postów

Napisano 2010.05.25, 22:49

Zadeklaruj 3 macierze jako tablice dwuwymiarowe, a potem wstaw dwa for'y i pomnóż wszystko ;)

//Edit

Tak na szybko stworzone. Działa ale u mnie windows wywala błąd ;)

#include <stdlib.h>
#include <iostream>
using namespace std;


int main(int argc, char** argv) {
    float m1[1][4];
    float m2[4][1];
    float m3[4][4];

    for(int i=1;i<=4;i++)
    {cout<<"Poadj a"<<i<<": ";
    cin>>m1[1][i];}

    cout<<endl;

    for(int i=1;i<=4;i++)
    {cout<<m1[1][i]<<endl;}
    cout<<endl;

    for(int j=1;j<=4;j++)
    {cout<<"Poadj b"<<j<<": ";
    cin>>m2[j][1];}

    cout<<endl;

    for(int j=1;j<=4;j++)
    {cout<<m2[j][1]<<" ";}
    cout<<endl;


    for(int i=1;i<=4;i++)
    {for(int j=1;j<=4;j++)
    {
        m3[i][j]=m1[1][i]*m2[j][1];
    }}
    cout<<endl;


    for(int i=1;i<=4;i++)
    {for(int j=1;j<=4;j++)
    {
    cout<<m3[i][j]<<" ";
    }
    cout<<endl<<endl;}

    return (EXIT_SUCCESS);
}


Użytkownik Laston edytował ten post 2010.05.25, 23:15


#7 mav

mav

    Skrypter

  • Przyjaciel
  • 1157 postów

Napisano 2010.05.25, 23:25

LOL, to się pętlami robi i jedziesz na dowolnych rozmiarach :D:D
Do tego jakieś sprytne parsowanie wpisywania (ja u siebie miałem split(" ") split("\n")) :)
A pisałem w JS bo w telefonie działało, na zaliczeniu jak znalazł.

var C=new Array(yA);
var xC=xB;
var yC=yA;
var z;
for (i=0;i<yC;i++) C[i]=new Array(xB);
for (i=0;i<yC;i++){
	for (j=0;j<xC;j++){
		temp=0;
		for (z=0;z<xA;z++) {
			temp+=A[i][z]*B[z][j];
			}
		C[i][j]=temp;
		}
	}
A i B to dwuwymiarowe tablice, C to wynikowa tablica, yA,xB to wymiary tablic itp.

A i tworzenie tablic o dowolnych rozmiarach w C++ nie jest niczym nadzwyczajnym, new int[] i wsio.


Beherit->macierzA[3] ? Toć to jeden wymiar, macierz ma dwa. macierz[3][3] jak już;)

A jeszcze coś, to nie jest tylko mnożenie, w mnożeniu macierzy macie jeszcze dodawanie, panowie mózgi ;) chyba, że od ostatniego czasu, jak przerabiałem macierze, coś się w tej kwestii zmieniło...

Użytkownik mav edytował ten post 2010.05.25, 23:35

JS / jQuery / PHP / MySQL / CMS / Forum filmowe / Kran kamerowy


#8 Beherit

Beherit

    In Sorte Diaboli

  • Wtyczkopisarz
  • 5030 postów

Napisano 2010.05.26, 10:45

macierze mogą być np 1x4 i 4x1

Beherit->macierzA[3] ? Toć to jeden wymiar, macierz ma dwa. macierz[3][3] jak już;)

W tym wypadku działa :P

#9 mARTi

mARTi

    Rozgrzewam się

  • Użytkownik
  • 68 postów

Napisano 2010.05.30, 16:48

Dziękuje, coś postaram się z tego wymyślić ale ciężko to widzę. Mogłem chodzić na informatykę zamiast piwo:D

#10 Laston

Laston

    Weteran

  • Dekorator
  • 559 postów

Napisano 2010.05.30, 17:31

Masz ten już się przynajmniej nie wywala ;)

#include <stdlib.h>
#include <iostream>
using namespace std;


int main(int argc, char** argv) {
    float m1[1][4];
    float m2[4][1];
    float m3[4][4];

    for(int i=0;i<=3;i++)
    {cout<<"Poadj a"<<i<<": ";
    cin>>m1[0][i];}

    cout<<endl;

    for(int i=0;i<=3;i++)
    {cout<<m1[0][i]<<endl;}
    cout<<endl;

    for(int j=0;j<=3;j++)
    {cout<<"Poadj b"<<j<<": ";
    cin>>m2[j][0];}

    cout<<endl;

    for(int j=0;j<=3;j++)
    {cout<<m2[j][0]<<" ";}
    cout<<endl;


    for(int i=0;i<=3;i++)
    {for(int j=0;j<=3;j++)
    {
        m3[i][j]=m1[0][i]*m2[j][0];
    }}
    cout<<endl;

    
    for(int i=0;i<=3;i++)
    {for(int j=0;j<=3;j++)
    {
    cout<<m3[i][j]<<" ";
    }
    cout<<endl<<endl;}

    return (EXIT_SUCCESS);
}




Dodaj odpowiedź



  


Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych