Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Kolejne pytanie.
Idź do strony 1, 2  Następny
 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Kwiatek
pijak



Dołączył: 08 Gru 2005
Posty: 215
Przeczytał: 0 tematów

Skąd: Podkarpacie

PostWysłany: Pon 13:24, 26 Cze 2006    Temat postu: Kolejne pytanie.

Czy jest jakaś funkcja w C++ pozwalająca zaokrąglić float do dwóch miejsc po przecinku? Albo jakiś sprytny sposób, aby to zrobić?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Pon 13:30, 26 Cze 2006    Temat postu:

jeśli c++ i wypisanie na standardowe wyjście to są znaczniki:

Kod:
std::cout << std::fixed << std::setprecision(2) << zmienna_zmiennoprzecinkowa;


powinno wyświetlić w syst. dziesiętnym z dokładnością do 2 cyfr.

EDIT: ale właśnie sprawdziłem u siebie i nie bardzo działa, więc niech mnie ktoś poprawi ;)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Kwiatek
pijak



Dołączył: 08 Gru 2005
Posty: 215
Przeczytał: 0 tematów

Skąd: Podkarpacie

PostWysłany: Pon 13:37, 26 Cze 2006    Temat postu:

Nie chodzi mi o standardowe wyjście, tylko o ogólny przypadek.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Pon 13:47, 26 Cze 2006    Temat postu:

no to nie wiem czy jest jakaś funkcja do tego. ale zawsze możesz pomnozyć przez 100, zaokraglić i podzielić przez 100 ;)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Kwiatek
pijak



Dołączył: 08 Gru 2005
Posty: 215
Przeczytał: 0 tematów

Skąd: Podkarpacie

PostWysłany: Pon 14:04, 26 Cze 2006    Temat postu:

A jak zaokraglić po pomnożeniu przez 100? nie chce mi się szukac :P
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
dzendras
Germański oprawca



Dołączył: 07 Mar 2006
Posty: 1326
Przeczytał: 0 tematów

Skąd: Chorzów

PostWysłany: Pon 14:13, 26 Cze 2006    Temat postu:

double zmienna;
printf("Liczba %4.2f", zmienna);


Tylko nie wiem czy to Cię satysfakcjonuje...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysłany: Pon 14:13, 26 Cze 2006    Temat postu:

@Kwiatek:
Zrzutowanie na inta powinno wystarczyć.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Pon 14:27, 26 Cze 2006    Temat postu:

Jesli wystarcyz przechowac ja w stringu, to (inspiracja metoda dzendrasa)

char buf[100];
snprintf(buf, 100, "%4.2f", zmienna);

Ja snprintfa uzywam jak nalogowiec.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Pon 14:39, 26 Cze 2006    Temat postu:

Rzutowanie na inta może nie zadziałać dla liczb tak dużych, że nie mieszczą się w incie.

Mój typ:

double x;//liczba do zaokrąglenia
double ulamek,cz_calk;

ulamek=modf(x,&cz_calk);
ulamek*=100;
ulamek=round(ulamek);
ulamek/=100;
x=cz_calk+ulamek;

Edit:
Słówko objaśnienia:

round zaokrągla double do liczby całkowitej, ale dalej zapisuje to jako double.

double modf (double VALUE, double *INTEGER-PART)
dzieli liczbę na dwie części- ułamkową (-1,1) i całkowitą, przy czym ułamkowa i całkowita są tego samego znaku co wejściowa VALUE.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SZCZUR
żul



Dołączył: 09 Lis 2005
Posty: 603
Przeczytał: 0 tematów


PostWysłany: Pon 17:10, 26 Cze 2006    Temat postu:

chyba mozna prosciej:

wejscie x
wyjscie y

y = floor( x*100.0f )/100.0f;

floor() zwraca częsc czlkowita.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Pon 19:54, 26 Cze 2006    Temat postu:

@Szczur. Zazwyczaj tak robię. Ale jest problem przepełnienia - jeżeli ten double jest za duży.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SZCZUR
żul



Dołączył: 09 Lis 2005
Posty: 603
Przeczytał: 0 tematów


PostWysłany: Pon 23:09, 26 Cze 2006    Temat postu:

nie rozumiem co tu sie moze przepelnic?

double moze przechowywac liczby majace ok 1000 zer
więc marna szansa rzeby dodanie 2 zer go przepelnilo.

chyba ze floor() nie dziala dla dórzych liczb.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Robson
zielony żul



Dołączył: 21 Paź 2005
Posty: 1274
Przeczytał: 0 tematów

Skąd: Z Lasu :]

PostWysłany: Pon 23:27, 26 Cze 2006    Temat postu:

Raczej chodzi o błedy zaokraglenia... im wieksze liczby tym mniejsza precyzja... ale chyba w projektach z P1 precyzja nie jest az tak ważna ;) w koncu to nie reaktor atomowy :P
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
SZCZUR
żul



Dołączył: 09 Lis 2005
Posty: 603
Przeczytał: 0 tematów


PostWysłany: Wto 0:21, 27 Cze 2006    Temat postu:

raczej nie o chodzilo o precyzje. ja nie zmieniam wartosci tylko wykladnik.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Pawel Str.
pijak



Dołączył: 06 Lut 2006
Posty: 429
Przeczytał: 0 tematów

Skąd: Ze starszego roku / Z Gorlic

PostWysłany: Wto 0:24, 27 Cze 2006    Temat postu:

Jakbyś mnożył przez 1024, tobyś zmieniał wykładnik. Jak mnożysz przez 100, to zmieniasz też wartość. Chociaż racja, to co podał SZCZUR jest niezłe. Być może trochę przekombinowałem. Na pewno nie należy robić konwersji na int po drodze, ale floor powinien w normalnych zastosowaniach wystarczyć.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Wto 17:47, 14 Lis 2006    Temat postu:

next pytanie:

mam w zależności od warunku stworzyć objekt klasy A albo klasy B. Lecz jeśli użyję fora, to ta zmienna nie będzie istniała poza nim. Kto może powiedzieć jak to zrobić (o ile da się), by można było tej zmiennej używać dalej w programie?
Cytat:
if (warunek)
A obiekt;
else
B obiekt;
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
hansu
Nieomylny Admin



Dołączył: 17 Lis 2005
Posty: 1990
Przeczytał: 0 tematów

Skąd: przychodzimy? Czym jestesmy? Dokad zmierzamy?

PostWysłany: Wto 18:11, 14 Lis 2006    Temat postu:

Przyadlby sie jakis szerszy kontekst do tego, ale proponuje na przyklad przez wskaznik:
Kod:

A* aptr=NULL;
B* bptr=NULL;
for (...)
{
if (warunek)
aptr = new A();
else
bptr = new B();
}
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stefan
pijak



Dołączył: 22 Lis 2005
Posty: 173
Przeczytał: 0 tematów


PostWysłany: Wto 19:54, 14 Lis 2006    Temat postu:

liffe napisał:
next pytanie:
mam w zależności od warunku stworzyć objekt klasy A albo klasy B. Lecz jeśli użyję fora, to ta zmienna nie będzie istniała poza nim. Kto może powiedzieć jak to zrobić (o ile da się), by można było tej zmiennej używać dalej w programie?
Cytat:
if (warunek)
A obiekt;
else
B obiekt;


Wygląda jak sytuacja, gdzie naturalnym byłoby zastosowanie polimorfizmu. Nie napisałeś, czy klasy A i B są w jakiś sposób semantycznie powiązane i jak będziesz ich używał, ale proponuję stworzyć klasę bazową i skorzystać z mechanizmu funkcji wirtualnych.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Wto 23:46, 14 Lis 2006    Temat postu:

*pierwsze - przepraszam, bo pomyliłem się pisząc fora - miałem na myśli ifa

klasa A i klasa B są pochodnymi od jednej klasy C, różniącymi się tylko konstruktorem. Po stworzeniu obiektu jednej z tych klas chcę używaż ich wspólnych funkcji, metod i zmiennych, które dziedziczą po klasie C. Więc na to, co napisał hansu, to i tak musiałbym później używać jednego z tych wskaźników, czyli ten sam komplet funkcji dla jednego, a potem dla drugiego.
Cytat:
A* aptr=NULL;
B* bptr=NULL;

if (warunek){
aptr = new A();
aptr->wypisz();//przykladowo
aptr->wczytaj();//przykladowo
}else{
bptr = new B();
bptr->wypisz();//przykladowo
bptr->wczytaj();//przykladowo
}

A chciałbym tylko jeden raz to pisać. ... w teraźniejszym programie, z którego się ten problem urodził i tak to wsystko napisałem dwa razy, ale na przyszłość chciałbym umieć zrobić to krócej
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
hansu
Nieomylny Admin



Dołączył: 17 Lis 2005
Posty: 1990
Przeczytał: 0 tematów

Skąd: przychodzimy? Czym jestesmy? Dokad zmierzamy?

PostWysłany: Śro 0:19, 15 Lis 2006    Temat postu:

Nic prostszego. Z tego co zrozumialem wyglada to tak:
Kod:

class C // klasa-matka ;)
{
wypisz();
wczytaj();
}
class A : public C
{}
class B : public C
{}

No i teraz robisz tak:
Kod:

C* ptr;
if(warunek)
  ptr = new A();
else
  ptr = new B();

// i teraz mozesz spokojnie:

ptr.wypisz();
ptr.wczytaj();


Sytuacja troche sie komplikuje kiedy metody wczytaj i wypisz inaczej wygladaja w A i w B. Ale to tez sie jednym slowkiem kluczowym zalatwia ;)

P.S. hansu piszemy z malej literki :P
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Skrobocik
[SKROBORANGA]



Dołączył: 29 Lis 2005
Posty: 2958
Przeczytał: 0 tematów

Skąd: Skarżysko , Kraków

PostWysłany: Śro 0:50, 15 Lis 2006    Temat postu:

hansu napisał:
(...) P.S. hansu piszemy z malej literki :P

Skromniś... ;)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Śro 10:15, 15 Lis 2006    Temat postu:

dzięki, hansu - działa )) btw, co Twój nik oznacza?
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stefan
pijak



Dołączył: 22 Lis 2005
Posty: 173
Przeczytał: 0 tematów


PostWysłany: Śro 10:27, 15 Lis 2006    Temat postu:

hansu napisał:

Kod:

C* ptr;
if(warunek)
  ptr = new A();
else
  ptr = new B();

// i teraz mozesz spokojnie:

ptr.wypisz();
ptr.wczytaj();


Raczej: ptr->wypisz(). I nie zapomnij o wirtualnym destruktorze w klasie C.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
liffe
pijak



Dołączył: 16 Paź 2006
Posty: 78
Przeczytał: 0 tematów

Skąd: z daleka

PostWysłany: Pon 12:40, 20 Lis 2006    Temat postu:

next simple pytanko:
jak sprawdzić czy plik, który przykładowo użytkownik podaje na wejściu programu, istnieje?

Spróbować go otworzyć i jeśli zwróci nam błąd, to wtedy będziemy wiedzieli, że nic z tego czy istnieje inny sposób, szybszy, bez otwierania pliku?

Kod:
ifstream plik;

plik.open("tekst.txt");
if (plik==NULL)
   //zwracamy błąd
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stefan
pijak



Dołączył: 22 Lis 2005
Posty: 173
Przeczytał: 0 tematów


PostWysłany: Pon 17:00, 20 Lis 2006    Temat postu:

Nie ma przenośnego sposobu. I odradzam stosowanie NULL w C++. Pusty wskaźnik oznacza stała 0. Konwersja ifstream do void* (zamiast bool) istnieje tylko po to, by zmniejszyć prawdopodobieństwo złego użycia takiego obiektu. Dlatego IMO czytelniej jest if(plik) lub if(plik.good()).
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie Wszystkie czasy w strefie EET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin