Dynamiczna tablica obiektów - problem

Dynamiczna tablica obiektów - problem
TU
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:6
0

Witam,
Mam do zrobienia takie zadanko
[code]
Stwórz klasę definiującą okręg. Każdy okręg składa się ze współrzędnych środka oraz
promienia (współrzędne środka x,y powinny być zmiennymi całkowitymi, promień r – liczbą
rzeczywistą nieujemną). Dokonaj wczytania liczb ze sprawdzeniem poprawności (r>=0).
 Zdefiniuj następujące konstruktory dla stworzonej klasy:
o konstruktor z parametrami do przypisania wartości początkowych na standardowe
współrzędne środka S(0,0) oraz promień r=1;
o konstruktor z niepełną liczbą parametrów;
o konstruktor umożliwiający wpisane użytkownikowi dowolnych wartości
Sprawdź ich zachowanie.
 Napisz funkcje obliczające Pole oraz Obwód okręgu oraz wyprowadzające wynik z
dokładnością do 0,001.
 Utwórz dynamiczną tablicę obiektów. Użytkownik powinien decydować o jej rozmiarze.
Użytkownik powinien decydować który z konstruktorów dla każdego obiektu jest
wywoływany. Powinna być możliwość wczytania parametrów okręgu z pliku. Wyświetl dla
każdego obiektu w tablicy jego pole i obwód.
 Napisz funkcję umożliwiającą wybranie dowolnych dwóch okręgów z powyższej tablicy oraz
zbadanie czy dane okręgi mają punkty wspólne. Program powinien poinformować o
tym użytkownika w postaci wyprowadzenia komunikatu o ilości punktów wspólnych
(zero, jeden, dwa lub nieskończenie wiele).
 Zaimplementuj zapis zapełnionej tablicy obiektów do pliku zewnętrznego oraz możliwość jej
ponownego wczytania z tego pliku.
[/code]

na razie napisałem kod do momentu, w którym mam utworzyć dynamiczną tablicę.
Dalej nie mam pomysłu co zrobić. Mógłby ktoś mnie jakoś naprowadzić?

To mój kod póki co:
[code]http://pastebin.com/6izQHZLJ[/code]

edytowany 1x, ostatnio: turpat
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0
Kopiuj
#include <iostream>

int main()
{
    int a;
    std::cin >> a;
    int *tablica = new int[a];
}

przykład tworzenia tablicy dynamicznie

TU
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:6
0

Tak, to wiem jak to się robi. Natomiast dalej nie wiem co zrobić.

//Użytkownik powinien decydować który z konstruktorów dla każdego obiektu jest
wywoływany. Powinna być możliwość wczytania parametrów okręgu z pliku. Wyświetl dla
każdego obiektu w tablicy jego pole i obwód.//

Po co nam ta tablica? W jaki sposób przypisać do niej poszczególne obiekty? Jak wczytać parametry okręgu z pliku?

edytowany 1x, ostatnio: turpat
fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

gdy tworzy się tablice obiektów to w c++ zawsze będą wywołane domyślne konstruktory (np w javie najpierw robisz pojemnik i dopiero później wsadzasz do niego obiekty, tutaj dostajesz pakiet).

Kopiuj
#include <iostream>

class test{
  public :
  test()
  {
      std::cout << 1;
  }
};

int main()
{
    int a;
    std::cin >> a;
    test *tablica = new test[a];
    delete[] tablica;
}
 

tutaj masz kawałek kodu który pokazuje o co mi chodzi.

Możesz napisać w konstruktorze domyślnym coś na zasadzie

Kopiuj
cout << " podaj jaki konstruktor 0 domyslny 1 z dwoma par 2 z trzema par";
cin >> decyzja;
if (decyzja == 1)
  //wywolujesz kostrusktor z dwoma parametrami, np test(5,3)
if (decyzja == 2)
  //wywolujesz kostrusktor z trzema parametrami, np test(5,3,9)
else
{
  // a tutaj domyslny
}
  

ale lepiej zrobić z tego funkcje ktoryKonstruktor() i w niej to robić a wywoływać jedynie funkcje ktoryKonstrutkor w domyślnym konstruktorze

zależy jak będzie wyglądał ten plik, ale zapewne konstrukcja będzie banalna coś na zasadzie

Kopiuj
plik >> tablica[i].x >> tablica[i].y >> tablica[i].r

gdzie plik będzie obiektem IO

edytowany 2x, ostatnio: fasadin
MA
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:25
1

Hej:)

Mnie się zdaje że to powinno wyglądać tak na konsoli:

Kopiuj
> podaj liczbe okregow? 
4
> podaj parametry 1 okregu (x,y,r, Enter - domyslne):

> podaj parametry 2 okregu (x,y,r, Enter - domyslne):
1 2 34.56
> podaj parametry 3 okregu (x,y,r, Enter - domyslne):
1 2
> podaj parametry 4 okregu (x,y,r, Enter - domyslne):
14.5

O ile konstruktor domyślny i ten do wszystkich parametrów jest prosty, o tyle ten z niepełną liczbą to już Twoja decyzja jak zrobisz:D Ja tu podałam przykład że kiedy się wpisze dwie liczby to powinien się wywołać konstruktor tylko z punktem, jak jedną - z promieniem:)

Schemat działania programu jest taki:

  1. Wczytaj ilość okręgów
  2. Zaalokuj tablicę
  3. Dla każdego okręgu utwórz obiekt za pomocą odpowiedniego konstruktora (pętla) i wpisz go do tablicy

Jak dobrze pomyślisz to będziesz mógł użyć tej samej funkcji to wczytywania wynikow z pliku jak i z konsoli :P Co do czytania z pliku to w sieci przykładów jest pełno - na penwo znajdziesz :)

Zobacz pozostały 1 komentarz
MA
@fasadin nie czepiaj się słówek:P Ale będąc wredną babą to też się przyczepię i powiem Ci że da się zaalokować samą tablicę :P Ha! :P
fasadin
samą tablicę czego ;>? W javie owszem się da. Ale w C++ nie spotkałem się z czymś takim ;) możesz mi pokazać kawałek kodu? Jakbyś była wredna to byś inaczej odpisała ;)
MA
A proszem: Test * array = reinterpret_cast<Test >(new char[10sizeof(Test)]); :P Tablica jest zaalokowana ale nie ma w niej żadnych obiektów :P
fasadin
to już chyba lepiej malloc'iem to zrobić ;) ale masz racje nie pomyślałem o tym +1. Jednakże nie chciałbym nigdy zobaczyć czegoś takiego w kodzie w którym będę musiał coś zrobić.
MA
Można czasem znaleźć dużo gorsze rzeczy :D a tak naprawdę ten cast nie jest tam potrzebny i można użyć tablicy czarów:P i skakać po niej co sizeof(Test) :P
TU
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:6
0

Jakoś mi to nie wychodzi...
Pogubiłem już się w tych klasach całych i sam nie wiem co dalej...
Mój obecny kod:
http://pastebin.com/Ri32513y

Pomoże mi ktoś to okiełznać?

MA
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:25
0

Hej a co nie działa? Ten kod się w ogóle kompiluje?:p

TU
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:6
0

No, nie kompiluje się bo nie mam pojęcia jak to zrobić. Dziękuje wszystkim za rady, ale nie mam pomysłu :(
Mam do napisania na jutro ten program i za chiny nie mogę przebić się przez ten jeden podpunkt.
Treść zadania: http://pastebin.com/Lf3G8ssX

Utknąłem na punkcie 3 i dalej nie wiem co robić.
Siedzę na tym cały dzień, myślałem, że coś wykombinuje ale nie mam pomysłu. W dodatku zostały mi oprócz tego 3, jeszcze 2 podpunkty.
Już jestem strasznie tym zdenerwowany, a na jutro muszę mieć to zrobione...

W tym momencie mój kod wygląda tak:
http://pastebin.com/gzGiyEsu

Dalej nie wiem co zrobić :(
Musze to mieć na jutro bo mnie obleją!

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)