[C++] Funkcja zwracajaca obiekt struktury

mickolo
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 19 kwie 2009, o 10:07
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Funkcja zwracajaca obiekt struktury

Post autor: mickolo »

napisac bezparametrową funkcję o nazwie losuj zwracającą obiekt typu elipsa wypełniony losowymi
wartościami. Pola \(\displaystyle{ x}\) i \(\displaystyle{ y}\) mają zawierać się w przedziale \(\displaystyle{ [-10.0; 10.0]}\) . Pola \(\displaystyle{ a}\) i \(\displaystyle{ b}\) mają zawierać się w przedziale \(\displaystyle{ [0; 5.]}\).

mnie udało sie stworzyc cos takiego:

Kod: Zaznacz cały

elipsa fun()
{
       
       elipsa o;
       o.x=rand()%(10 +10+1)-10;
       o.y=rand()%(10 +10+1)-10;
       o.a=rand()%(5-0+1)+0;
       o.b=rand()%(5-0+1)+0;
       return o;
}
lecz po wyswietleniu np cout<< o.x pojawiaja sie jakies smieci.

Z góry dzieki z apomoc
Ostatnio zmieniony 10 cze 2012, o 08:04 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania. Całe wyrażenia matematyczne umieszczaj w tagach [latex] [/latex].
Jacek_Karwatka
Użytkownik
Użytkownik
Posty: 351
Rejestracja: 2 maja 2012, o 16:16
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 1 raz
Pomógł: 94 razy

[C++] Funkcja zwracajaca obiekt struktury

Post autor: Jacek_Karwatka »

nie bardzo rozumiem dlaczego w Twojej funkcji jest:

o.x=rand()%(10 +10+1)...
moim zdaniem powinno być:

o.x=rand()%(10 +10)

dobrym sposobem na rozwiązanie tego typu problemu jest sprawdzanie i wypisywane krok po kroku co liczy komputer.
np:

Kod: Zaznacz cały

cout<<o.x; // jeśli są śmieci to jakie?
o.x=rand();
cout<<o.x;
cout<<(o.x%20);
cout<<(o.x%20-10);
itp.

oczywiście można skorzystać z debuggera
Ostatnio zmieniony 10 cze 2012, o 08:05 przez Afish, łącznie zmieniany 1 raz.
Powód: Brak tagów code
KaBaSZo
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 23 mar 2011, o 17:55
Płeć: Mężczyzna
Lokalizacja: Poznań
Podziękował: 1 raz

[C++] Funkcja zwracajaca obiekt struktury

Post autor: KaBaSZo »

Randy są ok, kod wydaje się być ok. Tworzysz obiekt lokalny, ale zwracasz go przez wartość, czyli powinna być zwrócona kopia tego obiektu.

Może pokaż jak wygląda klasa/struktura elipsa(masz tam jakieś konstruktory kopiujące, operatory przypisania?) oraz jak wywołujesz tą funkcję.
mickolo
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 19 kwie 2009, o 10:07
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Funkcja zwracajaca obiekt struktury

Post autor: mickolo »

ok także cała treść zadania wygląda następująco:

Napisać program zawierający:
– strukturę elipsa zawierającą cztery pola typu double: x, y, a, b; Liczby x, y będziemy
interpretować jak położenie środka elipsy w układzie współrzędnych, natomiast liczby a, b to
wielkość jej półosi,
– bezparametrową funkcję o nazwie losuj zwracającą obiekt typu elipsa wypełniony losowymi
wartościami. Pola x i y mają zawierać się w przedziale <-10.0; 10.0>. Pola a i b mają zawierać się w przedziale <0; 5.00>


a oto mój cały kod:

Kod: Zaznacz cały

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;

struct elipsa{
       double x;
       double y;
       double a;
       double b;
};

elipsa fun()
{
       
       elipsa o;
       o.x=rand()%(10 +10+1)-10;
       o.y=rand()%(10 +10+1)-10;
       o.a=rand()%(5-0+1)+0;
       o.b=rand()%(5-0+1)+0;
       return o;
}

int main()
{
    elipsa o;
    srand(time(0));
    fun();

cout<<o.a;
    system("pause");
    return 0;
}

i np po wyswietleniu o.a wynik to: 3.47312e-307 co jest przecież sprzeczne z założeniami programu
gdzies kryje się jakiś mały głupi błąd
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++] Funkcja zwracajaca obiekt struktury

Post autor: Afish »

Kod: Zaznacz cały

elipsa o;
srand(time(0));
fun();
Nigdzie nie przypisujesz wartości zwróconej przez funkcję fun, więc dane w zmiennej o są śmieciowe.
mickolo
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 19 kwie 2009, o 10:07
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Funkcja zwracajaca obiekt struktury

Post autor: mickolo »

czyli jak to powinno wyglądać wg Ciebie?
wawek91
Użytkownik
Użytkownik
Posty: 795
Rejestracja: 2 cze 2010, o 08:56
Płeć: Mężczyzna
Lokalizacja: Tarnów
Podziękował: 14 razy
Pomógł: 66 razy

[C++] Funkcja zwracajaca obiekt struktury

Post autor: wawek91 »

Czyli powinno być

Kod: Zaznacz cały

elipsa o = fun();
mickolo
Użytkownik
Użytkownik
Posty: 33
Rejestracja: 19 kwie 2009, o 10:07
Płeć: Mężczyzna
Podziękował: 1 raz
Pomógł: 1 raz

[C++] Funkcja zwracajaca obiekt struktury

Post autor: mickolo »

rzeczywiscie... ok dzięki wielkie chłopaki za pomoc, wszystko juz gra
Ostatnio zmieniony 10 cze 2012, o 18:01 przez Afish, łącznie zmieniany 1 raz.
Powód: Nowe zadanie umieszczaj w nowym temacie.
ODPOWIEDZ