mnożenie tablic - problem z wynikiem

2011-10-20 21:43
0

Witam.
Programuje od niedawna. Sprawa banalna, chciałem zrobić na tablicach mnozenie skalarne i wektorowe 2 wprowadzonych wektorów (wprowadzanie zrobie pozniej na razie są zadeklarowane dla szybszego sprawdzania), skalarne działa ale z wektorowym mam problem. Ni jak nie moge przekazac poprawnie wyniku do maina. Na pewno cos zle zrobiłem ale nie moge dojsc co.

Kod:


#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

//--------------------------------------- WYPISANIE WEKTOROW ---------
void wypiszwektor(float t[], float ile)
{
    for(int i=0; i<3; i++)
         cout<<t[i]<<" ";
         cout<<"\t";
}
float skalar(float *, float *);
float wektor(float *, float *, float *);

//-------------------------------------- MNOZENIE SKALARNE ----------
float skalar(float t1[], float t2[])
{
    float wynik=0;
    int i;
    for(i=0; i<3; i++)
        {
            wynik = wynik + t1[i] * t2[i];
            //cout<<wynik;
        }
    return wynik;
}

//-------------------------------------- MNOZENIE WEKTOROWE ----------
float wektor(float wynik[], float t1[], float t2[])
{
    int i;
    for(i=0; i<3; i++)
        {
            wynik[i] = t1[i] * t2[i];
            //cout<<wynik[i];
        }
    return wynik[i];
}

//--------------------------------------- GLOWNY BLOK PROGRAMU -------
int main()
{
    float w1[3]={1,2,3}, w2[3]={1,2,3}, wynik[3];

    cout<<"Twoje wektory to:"<<endl;
    wypiszwektor(w1,3);
    wypiszwektor(w2,3);

    cout<<endl;
    cout<<"Wynik mnozenie skalarnego podanych wektorow wynosi: ";
    cout<<skalar(w1,w2);

    cout<<endl;
    cout<<"Wynik mnozenia wektorowego podanych wektorow wynosi: ";
    cout<<wektor(wynik,w1,w2);

    return 0;
}
edytowany 2x, ostatnio: quark, 2011-10-20 21:47

Pozostało 580 znaków

2011-10-20 22:02
0
return wynik[i];

To jest źle, bo i wynosi już wtedy 4. Poza tym wszystko działa.

Btw. to nie jest iloczyn wektorowy.


"(...) otherwise, the behavior is undefined".

Pozostało 580 znaków

2011-10-20 22:23
0

Czyli:

return wynik[i];

musze wrzucic w pętle? czy jak?

Co do mnozenia to ja to pozniej zmienie chce tylko na razie zeby mi dobrze wynik wyswietlało czyli te 3 elementy.

Pozostało 580 znaków

2011-10-20 22:30
0

Nie rozumiem Cię. Wynik zapisujesz sobie do tablicy wynik, po co Ci ten return w ogóle?


"(...) otherwise, the behavior is undefined".

Pozostało 580 znaków

2011-10-20 22:39
0

jak usune tego returna to wywala mi wynik: "nan" - i nie wiem co zrobic

BTW co oznacza ten nan bo juz kilka razy sie z tym spotkałem?

Pozostało 580 znaków

2011-10-20 22:43
0

NaN - Not a number.

Wydaje mi się, że przepisałeś skądś kod i nie wiesz jak on działa. Wynik mnożenia tych 3 elementów przez siebie zapisywany jest do tablicy wynik, która jest przez referencję przekazywana do funkcji. Na dobrą sprawę funkcja ta nie musi niczego zwracać, powinna być void. W main dopisz na końcu

wypiszwektor(wynik, 3);

i zobaczysz, że funkcja działa prawidłowo.


"(...) otherwise, the behavior is undefined".

Pozostało 580 znaków

2011-10-20 22:59
0

Sam to pisałem ale z racji ze jestem bardzo poczatkujacy nie wiem do konca jak wszystko działa, dopiero sie ucze. Wypisywanie wektorów rzeczywiscie wziąłem z gotowego kodu z jakiejs strony ale reszte pisałem sam.

Zrobiłem jak napisałeś ale niestety

 wypiszwektor(wynik, 3);

zwraca wyniki z kosmosu.
Zwraca takie bo funkcja wypiszwektor wypisuje tablice zadeklarowane w mainie a nie w funckji wektor. jesli funkcja wektor nie zwraca niczego nie ma co wypisac do maina. Chyba ze sie myle...

edytowany 2x, ostatnio: quark, 2011-10-20 23:04
Zobacz tutaj: http://ideone.com/s9ZwP Działa... - Endrju 2011-10-20 23:09

Pozostało 580 znaków

2011-10-21 11:12
0

A nie działało to co miałeś wcześniej bo zwracałeś float, a nie float[] oraz

Endrju napisał(a)

To jest źle, bo i wynosi już wtedy 4
i pewnie zwracało Ci przypadkową wartość, gdyż indeks wyszedł poza zakres tablicy.

edytowany 2x, ostatnio: Sarrus, 2011-10-21 11:15

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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