C++, dodawanie wektorów (na strukturach)

0

Utworzyć strukturę lub klasę 'wektor' i funkcję dodającą dwa wektory. Do funkcji strukturę lub obiekt klasy przekazywać przez wskaźnik lub referencje. program główny w którym podajemy składowe 2 wektorów i wypisujemy wynik.

w treści zadania jest powiedziane że mam "do funkcji strukturę przekazywać przez wskaźnik" nie wiem jak strukturę mam przez wskaźnik przekazać do funkcji

to program:

#include<iostream>
#include<conio>
#include<stdio>
using namespace std;
// ---------- deklaracja struktury 'WEKTOR' ----------
struct wektor {
float va[3]; // wektor 'a' o trzech współrzędnych
float vb[3]; // wektor 'b' o trzech współrzędnych
};
// ---------- deklaracja funkcji dodającej wektory ----------
float suma (float a, float b)
{
return a+b; // zwracanie sumy dwóch liczb
}
// ---------- program główny ----------
int main () {
struct wektor nowy; //
nowy.va[2];
nowy.vb[2];

float *va1=&nowy.va[0];
float *va2=&nowy.va[1];
float *va3=&nowy.va[2];

float *vb1=&nowy.vb[0];
float *vb2=&nowy.vb[1];
float *vb3=&nowy.vb[2];

cout<<"Podaj skladowe wektora 1:"<<endl;
cout<<"Vx=";
cin>>nowy.va[0];
cout<<"Vy=";
cin>>nowy.va[1];
cout<<"Vz=";
cin>>nowy.va[2];

cout<<"\n\nPodaj skladowe wektora 2:"<<endl;
cout<<"Vx=";
cin>>nowy.vb[0];
cout<<"Vy=";
cin>>nowy.vb[1];
cout<<"Vz=";
cin>>nowy.vb[2];

cout<<"\n\nSuma podanych wektrow wynosi: \nVx="<<suma(*va1,*vb1)<<"\nVy="<<suma(*va2,*vb2)<<"\nVz="<<suma(*va3,*vb3);

getch ();
return 0;
}
0

Ty a nie lepiej mieć strukturę opisującą 1 wektor??

struct wektor {
 float value[3];
};

I potem sumować:

wektor sum( wektor* a, wektor* b ) {
 wektor ret;
 ret.value[0] = a->value[0] + b->value[0];
 ret.value[1] = a->value[1] + b->value[1];
 ret.value[2] = a->value[2] + b->value[2];
 return ret;
}

??

0

o Stary! :) nieźle, ale ja dopiero zaczynam programowanie w c++, ale co dalej mając to co mi podałeś ? jak uzależnić wpisywane dane z klawiatury ?

0
	wektor a;
	wektor b;

	cout<<"Podaj skladowe wektora 1:"<<endl;
	cout<<"Vx=";
	cin>>a.value[0];
	cout<<"Vy=";
	cin>>a.value[1];
	cout<<"Vz=";
	cin>>a.value[2];

	cout<<"\n\nPodaj skladowe wektora 2:"<<endl;
	cout<<"Vx=";
	cin>>b.value[0];
	cout<<"Vy=";
	cin>>b.value[1];
	cout<<"Vz=";
	cin>>b.value[2];

	wektor tmp = sum(&a, &b);

	for( int i = 0; i < 3; i++ )
	 cout << tmp.value[i] << ", ";
0

chyba mam inną wersję kompilatora niż Ty dlatego tak błędy wywala... :(

0

Już poprawiłem, parę błędów było.

0

wyrzuciłem conio i stdio ale podając z klawiatury liczbę i naciskając enter okno exe się zamyka

0

Skopiuj jeszcze raz, bo było parę błędów. Teraz powinno działać ( na g++ 4.3.2 działa ).

0

ale co skopiować ? to co jest wyżej już kopiowałem

0
#include <iostream>

using namespace std;

struct wektor {
 float value[3];
};

wektor sum( wektor* a, wektor* b ) {
 wektor ret;
 ret.value[0] = a->value[0] + b->value[0];
 ret.value[1] = a->value[1] + b->value[1];
 ret.value[2] = a->value[2] + b->value[2];
 return ret;
}

int main() {

    wektor a;
    wektor b;

    cout<<"Podaj skladowe wektora 1:"<<endl;
    cout<<"Vx=";
    cin>>a.value[0];
    cout<<"Vy=";
    cin>>a.value[1];
    cout<<"Vz=";
    cin>>a.value[2];

    cout<<"\n\nPodaj skladowe wektora 2:"<<endl;
    cout<<"Vx=";
    cin>>b.value[0];
    cout<<"Vy=";
    cin>>b.value[1];
    cout<<"Vz=";
    cin>>b.value[2];

    wektor tmp = sum(&a, &b);

    for( int i = 0; i < 3; i++ )
     cout << tmp.value[i] << ", ";
return 0;
}
0

... podobnie, okno się zamyka nie podając wyniku

0

na sam koniec, przed return:
cin.sync();
cin.get();

0

A rzeczywiście, zapomniałem mu podać wszystkiego na talerzu bo sam nie pomyśli, a sam nigdy nie piszę programów zatrzymujących system po wykonaniu polecenia bo nie ma to sensu. Wyobraź sobie, np. jakby po zwykłym g++ -o test test.cpp trzeba by za każdym razem walić w enter. Przy większym projekcie dostał byś p*******a przy ciągłym waleniu w enter ( głową [glowa] ) :P

0

dobra, ale nie każdy kompiluje w konsoli ;) tymbardziej jak robi program z jakimś GUI. Wygodniej wtedy F9 wcisnąć ;)
Jak kompilujesz pod konsolą to i tam pewnie odpalasz, a wynik zostaje w konsoli.

0

Akurat ja korzystam z Eclipse + CDT i z przyzwyczajenia nie dałem tego na końcu ( ma własny widok konsoli, którego nie zamyka ). Ogólnie bardzo fajne IDE.

0

Code::Blocks zatrzymuje okienko konsoli po wykonaniu i wyświetla czas wykonania (Eclipse z tego co pamiętam też).

0

Nie wyświetla czasu wykonania, tylko informacje nt. daty i godziny uruchomienia.

0
Shalom napisał(a)

dobra, ale nie każdy kompiluje w konsoli ;) tymbardziej jak robi program z jakimś GUI. Wygodniej wtedy F9 wcisnąć ;)
Jak kompilujesz pod konsolą to i tam pewnie odpalasz, a wynik zostaje w konsoli.

jak masz GUI to ustawiasz sobie na koncu programu breakpoint a nie cinget :)

poza tym, przydalo by sie wyjasnienie czemu to okno w ogole sie zamyka i po co ten cinget z ew. syncem.
dosc popularny temat jak co roku przed zaliczeniami...
http://4programmers.net/Forum/510999#id510999

0

zdeklaruj na początku #include<conio.h>, a potem na końcu getch()

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