Prosty Program ale potrzebna pomoc

0

Witam.
Niżej podaje kod programu. Program pyta użytkownika o 1 punkt i o 2 punkt wyświetla to co podaliśmy a następnie pyta o ile przesunąć punkt 1 i punkt 2 czyli wygląda to tak:

Podaj ile chcesz chcesz utworzyć obiektów punktów: 2

Podaj 1 punkt : 2
Podaj 2 punkt : 3

Twoje podane punkty to : 2 3

Podaj o ile chcesz przesunąć 1 punkt: 2
Podaj o ile chcesz przesunąć 2 punkt: 2

Twoje punkty po przesunięciu: 4 5

Podaj 1 punkt : 4
Podaj 2 punkt : 4

Twoje podane punkty to : 4 4

Podaj o ile chcesz przesunąć 1 punkt: 4
Podaj o ile chcesz przesunąć 2 punkt: 4

Twoje punkty po przesunięciu: 8 8

Program działa teraz tak, że pyta o punkty wyświetla je i później pyta o przesunięcie i wyświetla przesunięty punkt i tak za każdym razem w zależności od tego ile podamy punktów....

Problem polega na tym, że chcę ten program zrobić w ten sposób, że podaje, że chcę stworzyć załóżmy 5 punktów to program pierw pyta Podaj 1 punkt Podaj 2 punkt i tak np 5 razy ( za każdym razem wyświetla Moje współrzędne ale już nie pyta o przesunięcie) a dopiero na samym końcu pyta znów 5 razy o ile przesunąć punkty i wyświetla pod każdym o ile przesunięto

Gdy próbuję to zrobić to program tylko zczytuje mi ostatni punkt a nie wszystkie.

Proszę o pomoc.

czyli powinno to wyglądać tak:

Podaj ile chcesz chcesz utworzyć obiektów punktów: 2

Podaj 1 punkt : 2
Podaj 2 punkt : 3

Twoje podane punkty to : 2 3

Podaj 1 punkt : 3
Podaj 2 punkt : 3

Twoje podane punkty to : 3 3

Podaj o ile chcesz przesunąć 1 punkt: 2
Podaj o ile chcesz przesunąć 2 punkt: 2

Twoje punkty po przesunięciu: 4 5

Podaj o ile chcesz przesunąć 1 punkt: 3
Podaj o ile chcesz przesunąć 2 punkt: 3

Twoje punkty po przesunięciu: 6 6


 
punkt.h
class punkt
{
private:
     float x, y; 
     int tworz;                   
public:
	punkt (float, float);	         
	void przesun (float, float); 	
	void wyswietl();
	
};

definicja.cpp
#include <iostream.h>
#include "punkt.h"

punkt::punkt (float xx, float yy)
{
    x = xx; y = yy;
}

void punkt::przesun(float dx, float dy)
{
    x = x + dx; y = y + dy;
}

void punkt::wyswietl()
{
    
    cout<<"\n";
	cout << "Moje Wspolrzedne: " << x << " " << y << "\n";
	//cout << "Liczba utworzonych obiektow: " << tworz;
}

main.cpp
#include <iostream.h>
#include "punkt.h"

main ()
{
    int tworz;
    float xx,yy,dx,dy;
    cout << "Ile punktow chcesz utworzyc ?: ";
    cin>>tworz;
    cout << "\n";
    
    int licznik;
  
    for (licznik=1;licznik<=tworz;++licznik)
    {
        
        cout << "\n";
        cout << "-------------------------------------------------------------------------------";
        cout << "\n";
        cout<<"Podaj 1 wspolrzedna ";
        cin>>xx;
        cout<<"Podaj 2 wspolrzedna ";
        cin>>yy;
        punkt a (xx, yy);
        a.wyswietl();


        cout<<"\n";
        cout << "-------------------------------------------------------------------------------";
        cout <<"\n";
        cout<<"Podaj 1 wspolrzedna do przesuniecia ";
        cin>>dx; 
        cout<<"Podaj 2 wspolrzedna do przesuniecia ";
        cin>>dy;
        //punkt a (xx, yy); 
        a.przesun(dx, dy);
        a.wyswietl();
        cout << "\n";
     }
    
        cout << "\n";
        cout << "-------------------------------------------------------------------------------";
        cout << "\n";
        cout << "Jeszcze raz sprawdzam poprawnosc...";
        cout << "\n";
        cout << "Liczba wszystkich utworzonych obiektow typu punk wynosi: " << tworz;
        cout << "\n";
 	cout << "\n";
	system("PAUSE");
    
}
0

Nie będę ci pisał kodu bo jest to bardzo proste, podam tylko jak masz to zrobić. Najpierw wczytaj ile ma być tych punktów, potem stwórz tablice dynamiczną (albo wcześniej w klasie stwórz zwykłą z tym, że zwykła będzie miała ograniczenie np. do 100 punktów float tab[100] ) następnie wczytuj w pętli najlepiej for punkty do tablicy, a w następnej pętli zrób przesunięcie.

0

dzięki jeszcze zanim przeczytałem Twój post zakumałem, żeby zrobić to na tablicach i tak zrobiłem, jest ok tylko teraz mam problem jak zliczyć ile obiektów utworzyłem (czyli to co podaje na początku ile punktów chcesz utworzyć) oczywiście najprościej było by wypisać po prostu tylko tą zmienną ale problem polega w tym że muszę to zrobić poprzez funkcję wyświetl......a jak robię to przez tą funkcję to nie wypisuje mi ile utworzyłem zmiennych tylko tak jakby wypisywał rozmiar zmiennej ?

0

Użyj std::vectora-to taka "tablica" której możesz dynamicznie zmieniać rozmiar,a także zapytać się o jej wielkość.Szczegóły tutaj:
http://www.cplusplus.com/reference/stl/vector/

0

niestety nie wiem jak to użyć w tym programie żeby zadziałało

0

Przede wszystkim, ten kod nie jest zbyt ładny. Warto wspomnieć o paru drobnostkach:

  • nie kompiluje się (drobnostka ;) ),
  • cóż to za dziwny twór iostream.h? (dobrze, dobrze, wiem - cóż, nie każdy kompilator posiada takowy) Lepiej używać nagłówka iostream,
  • z czego wynika, że potrzebna deklaracja użycia przestrzeni nazw using namespace std - ew. nazwy kwalifikowane, tj. std::cout, std::cin itd.,
  • funkcja system zawarta jest w cstdlib, trzeba dołączyć,
  • funkcja main nie posiada typu! Zwrócę uwagę, że w C++ dozwolony jest tylko int.

To tak pobieżnie. Niestety, czas mnie goni.

0

To

cout << "Liczba utworzonych obiektow: " << tworz;

powinno działać. Nie wiem czemu ci nie działa. Wygląda na to, że używasz jakiegoś bardzo starego kompilatora, zgadza się?

1

Dobrze, postaram się więcej teraz. Linijka po linijce, część po części:

  • Widzę, że ogólnie jest to połączenie stylu programowania C z C++. Lepiej zdecydować się na 1, za panem Stroustrupem (a w przypadku C lepiej ograniczyć się do podzbioru C++).
  • Co wynika z owego, zmieniłbym "\n" na endl.
  • Co wynika z owego, zadeklarowałbym zmienną w pętli for, miast przed nią. A, i nie ma potrzeby lecieć 1 do <=, lepiej wyrobić sobie nawyk 0 do <.
  • Niewiele złego jest w deklaracji zmiennych, które będą zawsze dodatnie, jako int, a nawet, za panem Stroustrupem, jest to dobra praktyka (z uwagi na możliwość przekroczenia zakresu), jednak ja wolę unsigned int miast int (większy zakres).
  • Konstruktor można lepiej napisać: punkt::punkt(float xx, float yy) : x(xx), y(yy) { tworz++; }. (Tamto, to styl C#, mam wrażenie, a C# to mi nie po drodze. ;) )
  • Idąc dalej, czemu by nie zamieć operatorów inkrementacji na bardziej zwięzłą formę? - x = x + dx na x += dx itd.
  • Przesłonięcie zmiennej tworz! Dozwolone, niezalecane (przynajmniej przeze mnie). Wyżej dodałem inkrementację w konstruktorze, żeby cokolwiek liczyło. Trzeba ją oczywiście zainicjować, jeżeli nie chcesz mieć szybkiego przeglądu adresów swojej pamięci. ;)

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