Przekształcenie w projekt wieloplikowy

0

PRZEKSZTALC ten program w poprawnie dzialajacy wieloplikowy projekt zgodnie z obowiązującymi regułam.

#include <iostream>
 
using namespace std;
 
// definicja struktury Punktstruct Punkt
{
float x, y; // structure fields (attributes)
// Punkt może być rozumiany jako wierzcholek wektora z początkiem
// w punkcie (0,0) ukladu kartezjanskiego};
 
// Geometria na płaszczyznie
Punkt dodaj (Punkt a, Punkt b)
{Punkt c;
c.x = a.x + b.x;
c.y = a.y + b.y;
return c;
} 
int main()
{
Punkt a = {0, 1}, b = {1, 5}, c;
c = dodaj(a, b);cout<<" Punkt a = <"<< a.x << "," << a.y <<">"<< endl;
cout<<" Punkt b = <"<< b.x << "," << b.y <<">"<< endl;
cout<<" Punkt c = Punkt a + Punkt b"<<endl;
cout<<" Punkt c = <"<< c.x << "," << c.y <<">"<< endl;
return 0;}
0

Ale co, mamy to za Ciebie zrobić, czy jak? :D

0

Zacznij od doprowadzenia do stanu w którym da się to skompilować.
Po czym poczytaj na temat tego co tu użyto, aby rozumieć co się dzieje w tym projekcie.
Na koniec podział na pliki będzie kompletną pestką.

0

utwórz sobie nowe pliki .hpp i .cpp , w hpp masz mieć tylko deklaracje, w cpp definicje.
każdy cpp includuje swojego hpp.
main.cpp includuje wszytkie hpp jakie zrobiłeś.

pozdro

//Usunąłem spam, chcesz pomagać na forum, pomagaj - nikt nie prosił tu o pomoc "za kasę"
//madmike

0

Przepraszam oto kompilujący się kod:

#include <iostream>

using namespace std;

// definicja struktury Punkt
struct Punkt
{
float x, y; // structure fields (attributes)
// Punkt może być rozumiany jako wierzcholek wektora z początkiem
// w punkcie (0,0) ukladu kartezjanskiego
};

// Geometria na płaszczyznie
Punkt dodaj (Punkt a, Punkt b)
{
Punkt c;
c.x = a.x + b.x;
c.y = a.y + b.y;
return c;
}



int main()
{
Punkt a = {0, 1}, b = {1, 5}, c;
c = dodaj(a, b);
cout<<" Punkt a = <"<< a.x << "," << a.y <<">"<< endl;
cout<<" Punkt b = <"<< b.x << "," << b.y <<">"<< endl;
cout<<" Punkt c = Punkt a + Punkt b"<<endl;
cout<<" Punkt c = <"<< c.x << "," << c.y <<">"<< endl;
return 0;
}


0

Dzięki za podpowiedzi, program działa. Wygląda tak:
plik cpp:

#include "gotowe.hpp"

Punkt dodaj (Punkt a, Punkt b)
{
Punkt c;
c.x = a.x + b.x;
c.y = a.y + b.y;
return c;
}


plik main:


#include <iostream>

#include "gotowe.hpp"
using namespace std;
int main()
{
Punkt a = {0, 1}, b = {1, 5}, c;
c = dodaj(a, b);
cout<<" Punkt a = <"<< a.x << "," << a.y <<">"<< endl;
cout<<" Punkt b = <"<< b.x << "," << b.y <<">"<< endl;
cout<<" Punkt c = Punkt a + Punkt b"<<endl;
cout<<" Punkt c = <"<< c.x << "," << c.y <<">"<< endl;
return 0;
}


plik hpp:


#ifndef gotowe_hpp
#define gotowe_hpp

struct Punkt
{
float x, y; // structure fields (attributes)
// Punkt może być rozumiany jako wierzcholek wektora z początkiem
// w punkcie (0,0) ukladu kartezjanskiego
};
Punkt dodaj (Punkt a, Punkt b);
#endif



Mam jeszcze jedno polecenie do tego: Zmien w projekcie z poprzedniego punktu slowo "struct" na slowo "class" i dokonaj
wszelkich koniecznych zmian i uzupelnien wynikajacych z wprowadzonej zmiany tak,
aby koncowa wersja programu dzialala identycznie jak wyjsciowa, jednoplikowa jego
wersja.
Oczywiście chodzi o to żeby metody były publiczne w klasie

0

dobrze ci poszło, projekt wygląda bardzo dobrze :)

0

tak ale pozostaje trudność 2 polecenia:/

0

Może po prostu zamień słówko struct na class, potem nazwy funkcji poprzedź słowem public i zobacz co się stanie.

0

tak ale chodzi o to żeby tylko metody były publiczne;)

0

Jak na razie nie masz metod.

0

Hej,
Czyli musisz zrobić coś takiego:

class Punkt
{
public:
    Punkt(): x(), y() {}
    Punkt(float x, float y) : x(x), y(y) {}
    Punkt dodaj(const Punkt& a, const Punkt& b)
    {
        Punkt c;
        c.x = a.x + b.x;
        c.y = a.y + b.y;
        return c;
    }
//albo bardziej zaawansowane z przeciązeneim operatora, teraz można napisać tak Punkt c = a + b;
    Punkt operator+(const Punkt& b)
    {
        return Punkt(this->x + b.x, this->y + b.y);
    }

float x, y; 
};
0

Hej, nie wiem czy dużo rozważacie komentując, wiec napisze tylko raz:
to jest kod naipsany w około 45 sek, bez kompilacji, więc rzeczywiście zapomniałem o dopisaniu const do operatora
konstruktor jeden nie wystarczy, zobacz na użycie klasy w main.cpp
To jest ćwiczenie do szkoły, po tym wnioskuję że nie chodziło o stworzenie metody statycznej.
Metoda dodaj miała dwa parametry i zwracała trzeci obiekt , nie modyfikowała żadnego, więc metoda dodaj nie może przyjmować jednego parametru, bo wskazywało by to, że chcemy dodać współrzędne do naszego punktu.
I na koniec: nie zrobiłem metody dodaj (chyba chodzi ci o definicje) , ponieważ jest to kod dla początkującego programisty, niech wie, że jest kilka możliwości napisania tego samego.

1

to jest kod naipsany w około 45 sek, bez kompilacji, więc rzeczywiście zapomniałem o dopisaniu const do operatora
To jakies usprawiedliwienie?

konstruktor jeden nie wystarczy, zobacz na użycie klasy w main.cpp
Wystarczy.

To jest ćwiczenie do szkoły, po tym wnioskuję że nie chodziło o stworzenie metody statycznej.
Tego wniosku nie rozumiem.

Metoda dodaj miała dwa parametry i zwracała trzeci obiekt , nie modyfikowała żadnego, więc metoda dodaj nie może przyjmować jednego parametru, bo wskazywało by to, że chcemy dodać współrzędne do naszego punktu.
W Twoim kodzie przyjmuje 3 parametry.

na koniec: nie zrobiłem metody dodaj (chyba chodzi ci o definicje) , ponieważ jest to kod dla początkującego programisty, niech wie, że jest kilka możliwości napisania
Jest jakis sens pokazywania kiepskich rozwiazan?

0

Bardzo proszę mógłby ktoś to napisać prawidłowo, żeby w klasie była publiczna metoda która odnosi się do prywatnych argumentów

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