Pomoć oko zadatka- Zaokruzivanje.c

poruka: 5
|
čitano: 2.320
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
neaktivan
offline
Pomoć oko zadatka- Zaokruzivanje.c

Trebam pomoć oko ovog zadatka, izbacuje mi Debug Error kod debuggiranja i izbacuje da je inicijalizacija varijable decimale netočna, zanima me da li kome ovaj zadatak radi:

 

/*

       Zadatak: Upitati korisnika jedan realan broj, te ispisati njemu najblizi cijeli broj.

                    Npr: za 3.1 ispisati 3, za 3.5 ispisati 4, za -3.1. ispisati -3, za -3.5

                    ispisati -4 itd.

*/

 

#include <stdio.h>

 

intmain(void)      {

 

      double realni, decimale;

      int cijeli;

 

      printf("Unesi realan broj: ");

      scanf("%lf", &realni);

 

       /* prvi korak je uzimanje dekadskog dijela iz realnog broja

       * kopiranjem u varijablu cjelobrojnog tipa    */

       cijeli = realni;

 

       /* izracunamo decimalni dio, tako da od broja oduzmemo njegov

       * upravo izracunati dekadski dio */

       decimale = realni - cijeli;

 

       /* daljnje zaokruzivanje ovisi o tome je li broj pozitivan ili negativan */

      if (realni >= 0) {

            if (decimale >= 0.5) cijeli = cijeli + 1;

       } else {

            if (decimale <= -0.5) cijeli = cijeli - 1;

       }

 

      printf("Broj %lf je zaokruzen na %d.\n", realni, cijeli);

 

      return 0;

 

}

 

 

 

 

 

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Pomoć oko zadatka- Zaokruzivanje.c

Pa ovdje ti je sve OK (relativno), osim razmaka izmedju int i main.

 

No, zasto ne koristis ugradjene rounding funkcije obzirom da ovo tvoje "zaokruzivanje" i nije najbolje sroceno?

http://www.pci-z.com/
Moj PC  
1 0 hvala 0
10 godina
neaktivan
offline
Re: Pomoć oko zadatka- Zaokruzivanje.c

Riješeno! :) (vidi sliku) Trebalo je samo inicijalizirati decimale na 0.0 odnosno upisati:

 

double decimale = 0.0 ;

 

 

A ako imaš koju drugačiju verziju koda, a da radi isto, molim pošalji pa da isprobam i to.

Inače između int i main mi ide razmak, tu je nešto krivo ili sam ga slučajno izbrisala.

zaokruzivanje zaokruzivanje
Poruka je uređivana zadnji put sri 2.9.2015 12:03 (Evi).
17 godina
offline
Pomoć oko zadatka- Zaokruzivanje.c

Čudno, uopće ne trebaš inicijalizirati varijablu decimale kod deklaracije da bi taj program radio.

 Prije nego išta radiš sa varijablom decimale pridružuješ joj vrijednost realni - cijeli, dakle prije upotrebe je inicijaliziraš.

Vidim da je VS u pitanju, pa bi očekivao da je problem u scanf_s. odnosno zato što traži tu inačicu funkcije scanf.

 

 

Probaj ovako  nešto, kad već hoćeš razne verzije, mada je i tvoja dobra. Kod se temelji na svojstvu castanja i dodavanju ili oduzimanju 0.5 ovisno što treba.

 

#include <stdio.h>




int main() {

   double realni;
   int cijeli;
   scanf_s("%lf", &realni);
   cijeli = (int)(realni + (0.5 - (1 * realni < 0)));
   printf("%d\n", cijeli);
   return 0;
}



Poruka je uređivana zadnji put sri 2.9.2015 17:40 (Floki).
 
1 0 hvala 1
10 godina
neaktivan
offline
Re: Pomoć oko zadatka- Zaokruzivanje.c

Kada je samo
double decimale; onda je taj error , vidi na slici koju sam priložila.
A kada stavim

double decimale = 0.0; tada radi bez tog errora. :)

 

 

Hvala Floki. Ovo tvoje rješenje je super, kratko je i djeluje zanimljivo, samo što sam ja tek krenula sa učenjem C-a pa još nisam stigla do tako naprednog koda. :) Nadam se da budem, ako imaš kakav savjet pucaj! :)

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice