Kalkulator wektorowy

0

Otóż, mam taki program do wykonania:

Zdefiniować klasę wektorów zawierającą następujące dane:

class Vec

{

string nazwa;

int n;

double *V;

static int p;

/*

Konstruktory, operatory, konwersja

*/

}

gdzie:

nazwa - jest nazwą wektora,
n - jest rozmiarem wektora (liczbą elementów tablicy wskazywanej przez V)
V - wskazuje na początkowy element n elementowej tablicy
p - jest precyzją wydruku wartości elementów tablicy V
  1. Oprogramować tę klasę. Napisać konstruktory, w tym konstruktor kopiujący oraz operator przypisania. W destruktorze zwalniać dynamicznie przydzielaną pamięć.

  2. Zdefiniować operator indeksacji ([]).

  3. Między innymi zdefiniować operatory dodawania, odejmowania wektorów, a także operator mnożenia wektora przez skalar (double) oraz mnożenia skalarnego dwóch wektorów (x1y1 + x2y2 + … + xnyn). Operatory powinny zwracać nowy wektor. Przyjąć zasadę, że jeśli operatory wymagają zgodności rozmiarów swoich argumentów (wektorów), brakujące elementy wektora o mniejszym rozmiarze są zerowe.

  4. Zdefiniować zaprzyjaźnione operatory wejścia (istream) i wyjścia (ostream).

  5. Zdefiniować jedną konwersje skalarną ( operator double() //zwraca moduł, długość wektora).

Niech w celach testowych konstruktory i destruktor, operatory i konwerter informują o swoim działaniu.

Dane powinny być wczytywane z pliku wybieranego przez użytkownika.

I oczywiście plik klasy Vec.h już napisałam, kwestia w tym jak zdefiniować wszystkie części składowe.
Tak wygląda plik Vec.h:

 #ifndef MOJTYP_H_
#define MOJTYP_H

#include <iostream>
#include <string.h>

class Vec {
private:
   string nazwa;
   int n;
   double *V;
   static int p;
public:
	Vec();
	Vec(int n,double *V, double* wspolrzedne);
	Vec(&Vec);
	~Vec();
	Vec & operator=(&Vec);
	double operator[](int index);
	Vec operator+(Vec &V);
    Vec operator-(Vec &V);
    Vec operator*(double d);
	Vec operator^(Vec &V); //mnozenie skalarne//
	friend ostream& operator<< (ostream&,Vec const&);
	friend istream& operator>> (istream&,Vec&);
    operator double();
};

#endif 

Nie chodzi mi o to aby ktoś mi ten program napisał, chcę go lepiej zrozumieć abym mogła w dalszej części go sama napisać. Dlatego moje pytanie brzmi tak, jaki sens w tym programie ma operator przypisania i indeksacji.

1
  1. Operator przypisania:
  • standardowo jest tworzony przez kompilator (jesli go nie zdefiniujemy)
  • kopiowanie skladowych, przez operator przypisania tworzony przez kompilator, jest kopiowaniem bit po bicie.

Przedstawienie sytuacji:
Chcesz skopiowac jeden obiekt do drugiego, np. po to, zeby na tym drugim obiekcie dokonac zmian, ale jednoczesnie zapamietac stan tego pierwszego. Drugi obiekt jest tymczasowo Ci potrzebny do jakichs obliczen, konczysz na nim dzialac i go usuwasz. Rozwazmy co sie dzieje w tym momencie:

  1. Kopiujesz wszystko bitowo, tzn. jesli masz obiekty dynamiczne, to nie zostana one skopiowane, a zostanie skopiowany jedynie wskaznik na nie.
  2. Przy takim zalozeniu modyfikujac jeden obiekt, modyfikujesz wszystkie obiekty, ktore w taki sposob zostaly utworzone.
  3. Po usunieciu tego obiektu, masz stary obiekt, ktory wskazuje na nie zaalokowana przestrzen.
  4. Odwolujesz sie do starego obiektu i Ci sie w najlepszym wypadku crashuje program.

Do tego wlasnie sluzy operator przypisania. Nadmienie tylko, ze powinien on takze sprawdzac czy nie przypisujesz do samego siebie. Jak bedziesz go implementowac to zobaczysz sama czemu.

  1. Operator indeksu:
    Nie ma on tak waznego znaczenia jak operator przypisania, praktycznie jedynym znaczeniem jest tylko wygoda w korzystaniu z danej klasy. Bo chyba latwiej odwolywac sie tak: obiekt[3] niz obiekt.tablica[3]?

Jesli masz problemy z implementacja to:

  1. Na wikipedii masz rozpisane wszystkie przeciazenia dla operatorow w C++ z przykladowym kodem.
  2. Na wikipedii masz rozpisane wszystkie potrzebne Ci dzialania na wektorach.
  3. Takich klas w sieci jest mnostwo, mozesz zerknac jak autorzy to zrobili, wystarczy poszukac.
0

Vec.h:

#ifndef MOJTYP_H_
#define MOJTYP_H_
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Vec 
{
private:
   string nazwa;
   int n;
   double *V;
   static int p;
public:
	Vec();
	Vec(int n, string nazwa, double *B);
	Vec(Vec &Vec);
	~Vec();
	Vec & operator=( Vec &V);
	const double & operator[](int index);
	Vec operator+(Vec &V);
    Vec operator-(Vec &V);
    Vec operator*(double d); //mnozenie przez skalar//
    double operator^(Vec &V); //mnozenie skalarne//
	friend ostream& operator<< (ostream&,Vec const&);
	friend istream& operator>> (istream&,Vec&);
	virtual void Wczytaj(istream&);
	virtual void Zapisz(ostream&) const;
    operator double();
};

#endif 

a vec.cpp:

#include "stdafx.h"
#include "vector.h"
#include <iostream>
#include <string>
#include <cstring>
#include <iomanip>

using namespace std;

Vec::Vec(){
	nazwa="wektor";
	n=0;
    V= new double[0];
}
Vec::Vec(int a, string nazw, double *B ){
V=new double[a]; 
for (int i=0; i<n;i++)
{
	V[i]=B[i];
}
nazwa=nazw;
}
Vec::Vec(Vec &Vec){
	nazwa=Vec.nazwa;
	V=new double[n];
	for(int i=0; i<n;i++){
		V[i]=Vec.V[i];
	}
}
Vec::~Vec(){
	delete []V;
	V=0;
}
Vec & Vec::operator=( Vec &A)
{
	if(&A==this) return *this;
	delete [] V;
	nazwa=A.nazwa;
	V=new double[n];
	for(int i=0; i<n;i++){
		V[i]=A.V[i];
	}
	return *this;
}
const double & Vec:: operator[](int index)
{
	 if(index >= 0 && index < n)
                return V[index];

}

Vec Vec:: operator+(Vec &A)
{
	int ilosc;
	if (n >= A.n)
		ilosc = n;
	else
		ilosc = A.n;
	double * wynik = new double[ilosc];
	if ( n >= A.n)
	{
		for (int i = 0; i < A.n; i++)
			wynik[i] = A.V[i] + V[i];
		for (int j = A.n; j < n; j++)
			wynik[j] = V[j];
	}
	else
	{
		for (int i = 0; i < n; i++)
			wynik[i] = A.V[i] + V[i];
		for (int j = n; j < A.n; j++)
			wynik[j] = A.V[j];
	}
	Vec * suma = new Vec(ilosc, "sum", wynik);
	return *suma;

}
Vec Vec::operator - (Vec& A)
{
	int ilosc;
	if (n >= A.n)
		ilosc = n;
	else
		ilosc = A.n;
	double * wynik = new double[ilosc];
	if (n >= A.n)
	{
		for (int i = 0; i < A.n; i++)
			wynik[i] = V[i] - A.V[i];
		for (int j = A.n; j < n; j++)
			wynik[j] =V[j];
	}
	else 
	{
		for (int i = 0; i < n; i++)
			wynik[i] = V[i] - A.V[i];
		for (int j = n; j < A.n; j++)
			wynik[j] = -A.V[j];
	}
	Vec * roznica = new Vec(ilosc, "Roz", wynik);
	return *roznica;
}
double Vec::operator^ (Vec& A)
{
	double wynik = 0;
	int x;										// zmienna pomocnicza zawierajace liczbe elementow krotszego wektora
	if(n > A.n) x = A.n;
	else x = this->n; 
	for(int i=0; i<x; i++)					    // sumowanie iloczynow wspolrzednych
		wynik += V[i] * A.V[i];
	return wynik;
}

istream &operator >> (istream& wejscie, Vec& A)
{
	A.Wczytaj(wejscie);
	return wejscie;
}

ostream &operator << (ostream& wyjscie, const Vec& A)
{
	A.Zapisz(wyjscie);
	return wyjscie;
}

void Vec::Zapisz(ostream& wyjscie) const
{
	int n = wyjscie.precision(this->p);
	wyjscie << fixed << "Wektor " << this->nazwa << "[ ";
	if (this->V) 
		wyjscie << ' ' << this->V[0];
	for (int i=1; i < this->n; i++) 
		wyjscie << ", " << this->V[i];
	wyjscie << " ]" << endl << setprecision(n);
}

void Vec::Wczytaj(istream& wejscie)
{
	wejscie >> nazwa;
	nazwa = '\0';
	wejscie >> n;
	delete [] V;
	V = new double [n];
	for (int i = 0; i < n; i++)
		wejscie >> V[i];
} 

nie do końca wiem na czym polega ten problem :

1>vec.obj : error LNK2001: unresolved external symbol "private: static int Vec::p" (?p@Vec@@0HA)
1>D:\vector\vector\Debug\vector.exe : fatal error LNK1120: 1 unresolved externals

1

Masz jeszcze kilka rzeczy do poprawienia.

  1. W konstruktorze kopiującym n nie jest zainicjowane.
V = new double[n];
  1. Te metody powinny jako parametr powinny przyjmować stałą referencję:
  • konstruktor kopiujący
  • operatory = + - ^
1

To co wyżej oraz:
operatory:

        const double & operator[](int index);
        Vec operator+(Vec &V);
        Vec operator-(Vec &V);
        Vec operator*(double d); *mnozenie przez skalar*
        double operator^(Vec &V); *mnozenie skalarne*
        operator double();

powinny być stałe np: double operator^(Vec &V)const;

0

Wydaje mi sie, ze poprawilam:

#include "stdafx.h"
#include "vector.h"
#include <iostream>
#include <string>
#include <cstring>
#include <iomanip>
#include <math.h>

using namespace std;

Vec::Vec(){
	nazwa="wektor";
	n=0;
    V= new double[0];
}
Vec::Vec(int a, string nazw, double *B ){
V=new double[a]; 
for (int i=0; i<n;i++)
{
	V[i]=B[i];
}
nazwa=nazw;
}
Vec::Vec(Vec &Vec){
	n=Vec.n;
	nazwa=Vec.nazwa;
	V=new double[n];
	for(int i=0; i<n;i++){
		V[i]=Vec.V[i];
	}
}
Vec::~Vec(){
	delete []V;
	V=0;
}
Vec & Vec::operator=( Vec &A)
{
	if(&A==this) return *this;
	delete [] V;
	nazwa=A.nazwa;
	V=new double[n];
	for(int i=0; i<n;i++){
		V[i]=A.V[i];
	}
	return *this;
}
double & Vec:: operator[](int index)const
{
	 if(index >= 0 && index < n)
                return V[index];

}

Vec Vec:: operator+(Vec &A)const
{
	int ilosc;
	if (n >= A.n)
		ilosc = n;
	else
		ilosc = A.n;
	double * wynik = new double[ilosc];
	if ( n >= A.n)
	{
		for (int i = 0; i < A.n; i++)
			wynik[i] = A.V[i] + V[i];
		for (int j = A.n; j < n; j++)
			wynik[j] = V[j];
	}
	else
	{
		for (int i = 0; i < n; i++)
			wynik[i] = A.V[i] + V[i];
		for (int j = n; j < A.n; j++)
			wynik[j] = A.V[j];
	}
	Vec * suma = new Vec(ilosc, "sum", wynik);
	return *suma;

}
Vec Vec::operator - (Vec& A)const
{
	int ilosc;
	if (n >= A.n)
		ilosc = n;
	else
		ilosc = A.n;
	double * wynik = new double[ilosc];
	if (n >= A.n)
	{
		for (int i = 0; i < A.n; i++)
			wynik[i] = V[i] - A.V[i];
		for (int j = A.n; j < n; j++)
			wynik[j] =V[j];
	}
	else 
	{
		for (int i = 0; i < n; i++)
			wynik[i] = V[i] - A.V[i];
		for (int j = n; j < A.n; j++)
			wynik[j] = -A.V[j];
	}
	Vec * roznica = new Vec(ilosc, "Roz", wynik);
	return *roznica;
}
double Vec::operator^ (Vec& A)const
{
	double wynik = 0;
	int x;										// zmienna pomocnicza zawierajace liczbe elementow krotszego wektora
	if(n > A.n) x = A.n;
	else x = this->n; 
	for(int i=0; i<x; i++)					    // sumowanie iloczynow wspolrzednych
		wynik += V[i] * A.V[i];
	return wynik;
}

istream &operator >> (istream& wejscie, Vec& A)
{
	A.Wczytaj(wejscie);
	return wejscie;
}

ostream &operator << (ostream& wyjscie, const Vec& A)
{
	A.Zapisz(wyjscie);
	return wyjscie;
}
int Vec::p = 0;
void Vec::Zapisz(ostream& wyjscie) const
{
	int n = wyjscie.precision(this->p);
	wyjscie << fixed << "Wektor " << this->nazwa << "[ ";
	if (this->V) 
		wyjscie << ' ' << this->V[0];
	for (int i=1; i < this->n; i++) 
		wyjscie << ", " << this->V[i];
	wyjscie << " ]" << endl << setprecision(n);
}

void Vec::Wczytaj(istream& wejscie)
{
	wejscie >> nazwa;
	nazwa = '\0';
	wejscie >> n;
	delete [] V;
	V = new double [n];
	for (int i = 0; i < n; i++)
		wejscie >> V[i];
}
Vec::operator double()
{
	double wynik = 0.0; 
	for(int i = 0 ; i < n; i++) 
		wynik += V[i]*V[i];
	return sqrt(wynik);
}
Vec Vec::operator*(Vec &A)const
{
	int d=5;
	double *wynik=new double[n];
	for(int i=0; i<n;i++){
       wynik[i]=A[i]*d;
	}
	Vec * skalar= new Vec(n, "skal", wynik);
	return *skalar;
} 

Ponadto mam jeszcze jedno pytanie, aczkolwiek niby sam program się kompiluje, to jak mozna zauważyć skalar zaimplementowany jest wewnątrz operatora *. A chodzi o to aby liczba podawana była przez użytkownika, pytanie jak to zrobić nie używając skalaru jako parametru.

1
karolina912 napisał(a):

... jak mozna zauważyć skalar zaimplementowany jest wewnątrz operatora *. A chodzi o to aby liczba podawana była przez użytkownika, pytanie jak to zrobić nie używając skalaru jako parametru.
WTF?
Coś w stylu: - "Chodzi o to aby samolot mógł latać, pytanie jak to zrobić aby nie miał skrzydeł." ?

Vec V;
double d;
cout<<"podaj vector oraz skalar: ";
cin>>V>>d;
cout<<"wynik: "<<(V*d)<<endl;
0

W każdym razie skoro implementacje mam za sobą, przeszłam do ciała programu:
vector.cpp:

#include "stdafx.h"
#include <iostream>
#include "vector.h"



int _tmain(int argc, _TCHAR* argv[])
{
	int n,p,a;
	double *A,*B;
	string nazwa,nazwa2;
	cout<<"Podaj precyzje wektorow"<<endl;
	cin>>p;
    cout<<"Oto, kalkulator wektorowy, proszę podać rozmiar obu wektorow"<<endl;
    cin>>n;
	 A= new double[n];
	 B= new double[n];
	cout<<"Jak chcesz nazwac wektor ?"<<endl;
	cin>>nazwa;
	Vec V1(n,nazwa,A);
	cout<<"Podaj wartosci pierwszego wektora"<<endl;
	for(int i=0;i<n;i++){
		cin>>A[i];
	}
	cout<<"Jak chcesz nazwac drugi wektor ?"<<endl;
	cin>>nazwa2;
    Vec V2(n,nazwa2,B);
	cout<<"Podaj wartosci drugiego wektora"<<endl;
		for(int i=0;i<n;i++){
			cin>>B[i];
		}
		do{
	cout<<"#####################################"<<endl;
	cout<<"############### MENU ################"<<endl;
	cout<<"#####################################"<<endl;
	cout<<"Co chcesz zrobic ? "<<endl;
	cout<<"1. Dodac wektor pierwszy do drugiego"<<endl;
	cout<<"2. Odjac jeden wektor od drugiego"<<endl;
	cout<<"3. Pomnozyc jeden wektor razy drugi"<<endl;
	cout<<"4. Pomnozyc jeden wektor razy skalar"<<endl;
	cout<<"5. Mnozenie skalarne"<<endl;
	cout<<"6. Koniec programu"<<endl;
	cin>>a;
	switch(a)
      {
		case 1 : 
			cout<<"Wynik to "<<(V1+V2);
		
      }
	    
		}while(a<6);
	


	system ("pause");
}

 

Problem powstaje gdy wywołuję opcję 1, nie wyrzuca mi kompletnie niczego.

0

Plik nagłówkowy:

#ifndef MOJTYP_H_
#define MOJTYP_H_
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Vec 
{
private:
   string nazwa;
   int n;
   double *V;
   static int p;
public:
	Vec();
	Vec(int n, string nazwa, double *B);
	Vec(const Vec &Vec);
	~Vec();
	Vec & operator=(const Vec& V);
	double & operator[](int index)const;
	Vec operator+(const Vec &V)const;
    Vec operator-(const Vec &V)const;
    Vec operator*(const Vec &V)const; //mnozenie przez skalar//
    double operator^(const Vec &V)const; //mnozenie skalarne//
	friend ostream& operator<< (ostream&,Vec const&);
	friend istream& operator>> (istream&,Vec&);
	virtual void Wczytaj(istream&);
	virtual void Zapisz(ostream&) const;
    operator double();
};

#endif 

plik źródłowy:

#include "stdafx.h"
#include "vector.h"
#include <iostream>
#include <string>
#include <cstring>
#include <iomanip>
#include <math.h>

using namespace std;

Vec::Vec(){
	nazwa="wektor";
	n=0;
    V= new double[0];
	cout<<"Zostal wywolany konstruktor "<<endl;
}
Vec::Vec(int a, string nazw, double *B ){
V=new double[a]; 
for (int i=0; i<n;i++)
{
	V[i]=B[i];
}
nazwa=nazw;
cout<<"Został wywołany konstruktor"<<endl;
}
Vec::Vec(const Vec &Vec){
	n=Vec.n;
	nazwa=Vec.nazwa;
	V=new double[n];
	for(int i=0; i<n;i++){
		V[i]=Vec.V[i];
	}
	cout<<"Został wywolany kontruktor kopiujacy"<<endl;
}
Vec::~Vec(){
	delete []V;
	V=0;
	cout<<"Został wywołany destruktor";
}
Vec & Vec::operator=(const Vec &A)
{
	cout<<"zostal wywolany operator przypisania";
	if(&A==this) return *this;
	delete [] V;
	nazwa=A.nazwa;
	V=new double[n];
	for(int i=0; i<n;i++){
		V[i]=A.V[i];
	}
	return *this;

}
double & Vec:: operator[](int index)const
{
	cout<<"Zostal wywołany operator indeksacji"<<endl;
	 if(index >= 0 && index < n)
                return V[index];

}

Vec Vec:: operator+(const Vec &A)const
{
	cout<<"Zostal wywolany operator dodawania";
	int ilosc;
	if (n >= A.n)
		ilosc = n;
	else
		ilosc = A.n;
	double * wynik = new double[ilosc];
	if ( n >= A.n)
	{
		for (int i = 0; i < A.n; i++)
			wynik[i] = A.V[i] + V[i];
		for (int j = A.n; j < n; j++)
			wynik[j] = V[j];
	}
	else
	{
		for (int i = 0; i < n; i++)
			wynik[i] = A.V[i] + V[i];
		for (int j = n; j < A.n; j++)
			wynik[j] = A.V[j];
	}
	Vec * suma = new Vec(ilosc, "sum", wynik);
	return *suma;
	
}
Vec Vec::operator - (const Vec& A)const
{
	cout<<"Zostałwywolany operator odejmowania";
	int ilosc;
	if (n >= A.n)
		ilosc = n;
	else
		ilosc = A.n;
	double * wynik = new double[ilosc];
	if (n >= A.n)
	{
		for (int i = 0; i < A.n; i++)
			wynik[i] = V[i] - A.V[i];
		for (int j = A.n; j < n; j++)
			wynik[j] =V[j];
	}
	else 
	{
		for (int i = 0; i < n; i++)
			wynik[i] = V[i] - A.V[i];
		for (int j = n; j < A.n; j++)
			wynik[j] = -A.V[j];
	}
	Vec * roznica = new Vec(ilosc, "Roz", wynik);
	return *roznica;
}
double Vec::operator^ (const Vec& A)const
{
	cout<<"Zostal wywolany operator mnozenia skalarnego";
	double wynik = 0;
	int x;										// zmienna pomocnicza zawierajace liczbe elementow krotszego wektora
	if(n > A.n) x = A.n;
	else x = this->n; 
	for(int i=0; i<x; i++)					    // sumowanie iloczynow wspolrzednych
		wynik += V[i] * A.V[i];
	return wynik;
}

istream &operator >> (istream& wejscie, Vec& A)
{
	A.Wczytaj(wejscie);
	return wejscie;
}

ostream &operator << (ostream& wyjscie, const Vec& A)
{
	A.Zapisz(wyjscie);
	return wyjscie;
}
int Vec::p = 0;
void Vec::Zapisz(ostream& wyjscie) const
{
	int n = wyjscie.precision(this->p);
	wyjscie << fixed << "Wektor " << this->nazwa << "[ ";
	if (this->V) 
		wyjscie << ' ' << this->V[0];
	for (int i=1; i < this->n; i++) 
		wyjscie << ", " << this->V[i];
	wyjscie << " ]" << endl << setprecision(n);
}

void Vec::Wczytaj(istream& wejscie)
{
	wejscie >> nazwa;
	nazwa = '\0';
	wejscie >> n;
	delete [] V;
	V = new double [n];
	for (int i = 0; i < n; i++)
		wejscie >> V[i];
}
Vec::operator double()
{
	double wynik = 0.0; 
	for(int i = 0 ; i < n; i++) 
		wynik += V[i]*V[i];
	return sqrt(wynik);
}
Vec Vec::operator*(const Vec &A)const
{
	cout<<"Został wywołany operator mnożenia przez skalar";
	int d=5;
	double *wynik=new double[n];
	for(int i=0; i<n;i++){
       wynik[i]=A[i]*d;
	}
	Vec * skalar= new Vec(n, "skal", wynik);
	return *skalar;
}
 

main:

 #include "stdafx.h"
#include <iostream>
#include "vector.h"



int _tmain(int argc, _TCHAR* argv[])
{
	int n,p,a;
	double *A,*B;
	string nazwa,nazwa2;
	cout<<"Podaj precyzje wektorow"<<endl;
	cin>>p;
    cout<<"Oto, kalkulator wektorowy, proszę podać rozmiar obu wektorow"<<endl;
    cin>>n;
	 A= new double[n];
	 B= new double[n];
	cout<<"Jak chcesz nazwac wektor ?"<<endl;
	cin>>nazwa;
	Vec V1(n,nazwa,A);
	cout<<"Podaj wartosci pierwszego wektora"<<endl;
	for(int i=0;i<n;i++){
		cin>>A[i];
	}
	cout<<"Jak chcesz nazwac drugi wektor ?"<<endl;
	cin>>nazwa2;
    Vec V2(n,nazwa2,B);
	cout<<"Podaj wartosci drugiego wektora"<<endl;
		for(int i=0;i<n;i++){
			cin>>B[i];
		}
		do{
	cout<<"#####################################"<<endl;
	cout<<"############### MENU ################"<<endl;
	cout<<"#####################################"<<endl;
	cout<<"Co chcesz zrobic ? "<<endl;
	cout<<"1. Dodac wektor pierwszy do drugiego"<<endl;
	cout<<"2. Odjac jeden wektor od drugiego"<<endl;
	cout<<"3. Pomnozyc skalarnie  jeden wektor przez drugi"<<endl;
	cout<<"4. Pomnozyc jeden wektor razy skalar"<<endl;
	cout<<"5. Koniec programu"<<endl;
	cin>>a;
	switch(a)
	{
		case 1 : 
			cout<<"Wynik to "<<(V1+V2);break;
		case 2:
			cout<<"wynik to "<<(V1-V2);break;
		case 3:
			cout<<"wynik to "<<(V1^V2);break;
		case 4:
			cout<<"Podaj wartosc skalaru";
			int d;
			cin>>d;
			cout<<"Wynik pomnozenia pierwszego wektora przez skalar, to "<<(V1*d);
			cout<<"Wynik pomnozenia drugiego wektora przez skalar, to "<<(V2*d); break;
		default: return 0;

	}
		}while(a<5);
	
		

	system ("pause");
}

To tak, wszystko działa dobrze do momentu wywołania którejś z opcji. Przy czym dwie pierwsze zawieszają program, reszta w wyniku wyrzuca 0 za każdym razem.

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