• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

tablica wskaźników

0 głosów
741 wizyt
pytanie zadane 4 kwietnia 2019 w C i C++ przez four Użytkownik (720 p.)
edycja 4 kwietnia 2019 przez four

Siemka mam do zrobienie zadanie o takiej treści:

Opracować program, który definiuje klasę LiczbaZespolona o składowych prywatnych Im oraz Re (typu double). Zdefiniować dla tej klasy 3 konstruktory: – bezargumentowy, nadający Im i Re wartość 0.0, – jednoargumentowy, nadający Im i Re taką samą wartość, – dwuargumentowy o argumentach będących wartościami Im i Re.

Program główny tworzy tablicę wskaźników LiczbZespolonych (100 elementów) i umożliwia realizację następujących poleceń:

– N : tworzy dynamicznie liczbę zespoloną i jej wskaźnik wpisuje do tablicy wskaźników (2 argumenty), – R : tworzy dynamicznie liczbę zespoloną i jej wskaźnik wpisuje do tablicy wskaźników (1 argument),

– W : wyświetla wartość liczby zespolonej o podanym indeksie zapisanej w tablicy wskaźników,

– + : oblicza sumę dwu liczb zespolonych, wpisuje wskaźnik liczby wynikowej do tablicy wskaźników i wyświetla indeks nowoutworzonej liczby,

 

Mój kod wygląda tak, jakby ktoś mógł poprawić, bo przez błąd z tablicą wskaźników nie wiem jak ruszczyć dalej

#include<iostream>
using namespace std;
class Zespolona
{
private:
	double Im, Re;

public:
	Zespolona()
	{
		Im = 0.0;
		Re = 0.0;
	}

	Zespolona(double wartosc)
	{
		Im = wartosc;
		Re = wartosc;
	}
Zespolona(double Re, double Im){}
	Zespolona dodaj(Zespolona z1, Zespolona z2) {
		Zespolona wyn;
		wyn.Re = z1.Re + z2.Re;
		wyn.Im = z1.Im + z2.Im;
		return wyn;
	}
};


int main()
{
	Zespolona *Vector = new Zespolona[100];
	int n = 0;
	int wybor;
	cout << "Wybierz polecenie: " << endl;
	cout << "N: utworzenie liczby zespolonej " << endl << "R: utworzenie liczby zespolonej: " << endl;
	cout << "W:  wyświetla wartość liczby zespolonej o podanym indeksie zapisanej w tablicy" << endl << "+: Suma dwu liczb zespolonych " << endl;
	cout << "- : różnica dwu liczb zespolonych " << endl << "* : obicza iloczyn dwu liczb" << endl;
	cout << "/ : iloraz dwu liczb zespolonych " << endl;
	cin >> wybor;
	switch (wybor)
	{
	case 'N':
	{
		double im, re;
		cout << "Podaj wartość rzeczywistą liczby zespolonej: " << endl;
		cin >> re;
		cout << "Podaj wartość urojoną liczby zespolonej: " << endl;
		cin >> im;
		Zespolona *c = new Zespolona(re, im);
		Vector[n] = c;
		n++;

		break;
	}
	case 'R':
	{
		double wartosc;
		cout << "Podaj wartość " << endl;
		cin >> wartosc;
		Zespolona *c1 = new Zespolona(wartosc);
		Vector[n] = *c1;
		n++;
		break;
	}

	case 'W':
	{
		int index;
		cout << "Podaj index liczby, którą chcesz wyświtlić: " << endl;
		cin >> index;
		//cout << Vector[0];
	}

	case '+':
	{
		Zespolona c1, c2;

	}

 

2 odpowiedzi

0 głosów
odpowiedź 4 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
Napisz jaki błąd otrzymujesz lub co konkretnie nie działa.
komentarz 4 kwietnia 2019 przez four Użytkownik (720 p.)
A coś więcej, bo nie wiele mi to daje
komentarz 4 kwietnia 2019 przez DeBos123 Nałogowiec (44,950 p.)
Podałem ci dwa sposoby przeciążania operatorów arytmetycznych.

W pierwszym linku masz przykład w którym musisz tylko dosłownie nazwy zamienić i trochę kod.
komentarz 4 kwietnia 2019 przez j23 Mędrzec (195,240 p.)

@four,  pobierz od użytkownika pierwszą liczbę, pobierz drugą, dodaj je (funkcję już masz), wynik wrzuć do tablicy i wyświetl indeks, pod którym jest wynik.

 

PS. ta twoja tablica powinna być tablicą wskaźników.

komentarz 4 kwietnia 2019 przez four Użytkownik (720 p.)
No i działa o to chodziło, jeszcze raz dzięki
0 głosów
odpowiedź 4 kwietnia 2019 przez Marcin Siniarski Gaduła (4,420 p.)

To

Zespolona *Vector = new Zespolona[100];

powinno wyglądać tak

Zespolona **Vector = new Zespolona*[100];

Ponieważ tworzysz tablice (czyli wskaźnik do) stu wskaźników.
Twoją zmienną n możesz zamienić na wskaźnik wskazujący na ostatnie wolne miejsce w tablicy, ale to już twój wybór.

int** n = Vector;
//....
*n = new Zespolona();
if(n != Vector + 100)
    n++;
// Użycie
(**n).blah();

Mógłbyś tu nawet załatwić sprawę używając std::vector (na dole strony przykład).

Podobne pytania

–1 głos
3 odpowiedzi 1,517 wizyt
pytanie zadane 9 września 2018 w C i C++ przez niezalogowany
–1 głos
2 odpowiedzi 1,846 wizyt
0 głosów
1 odpowiedź 833 wizyt

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...