Oprettet ons. d. 27. januar 2010 kl. 20:55:38

nickwan
nickwan (6.250 point. Point ude: 100)
www.haslingblik.dk

afrunding af decimal tal til hele tal ?

Hej der ude:)

jeg er igang med at uddanne mig til teknisk designer (jeg programmere i mit fritid, er dog nybegynder:) og der har vi noget der hedder hulmål og pille mål, hvis jeg skal tjekke om et tal er et hul mål eller pille mål skal jeg gøre sådan her:

Eksempel: (i dette eksempel passer målet ikke men det kan vi også komme ud for)
1334/60=22,23333
hvilket så skal afrundes til 22
og så skal man sige 22*60=1320 hvis det så er pille mål skal der -12 og hvis det er hulmål skal der +12, mit spørgsmål her er så hvordan laver jeg en kode der afrunder alt under xxx,49999 ned af og alt over xxx,50 op af? jeg kan sagtens finde ud af resten af koden det er kun afrunding jeg har problemer med?

som der ses i koden skal der afrundes til hele tal og der må ikke være decimaler.

på forhånd tak :)

Skrevet ons. d. 27. januar 2010 kl. 20:59:52| #1

arne_v
arne_v (1.005.658 point)
To muligheder:

#include <math.h>
...
double x = 22.23333;
int i = round(x);

og:

double x = 22.23333;
int i = (int)(x + 0.5);

Skrevet ons. d. 27. januar 2010 kl. 21:00:55| #2

arne_v
arne_v (1.005.658 point)
Men maaske behoever du det slet ikke.

1334/60 er nemlig 22 men 1334.0/60.0 er 22.23333

Skrevet ons. d. 27. januar 2010 kl. 21:16:23| #3

arne_v
arne_v (1.005.658 point)
Jo - ved afrunding til naermeste behover du det - det er kun nedrunding som er "gratis".

Skrevet ons. d. 27. januar 2010 kl. 21:16:44| #4

nickwan
nickwan (6.250 point)
www.haslingblik.dk
har lige siddet og prøvet lidt kan du fortælle mig hvad der er galt her?:

#include "stdafx.h"

double omregn (double);

int main()
{

    double maal;
    double resultat;

    std::cout<<"Indtast maal: ";
    std::cin>>maal;
    omregn (maal);
    std::cout<<resultat;

    system("pause");
    return 0;
}

double omregn (double maal)
{
    double resultat;
    resultat = ((maal/60)*60)+12 ;
    return (resultat);
}

og det var vel ikke sådan så du kunne smide en kode der virker det ville bare være perfekt:)

Skrevet ons. d. 27. januar 2010 kl. 21:24:19| #5

arne_v
arne_v (1.005.658 point)
Hvad skal omregn goere?

Skrevet ons. d. 27. januar 2010 kl. 21:24:48| #6

arne_v
arne_v (1.005.658 point)
Uanset hvad skal:

omregn (maal);

nok vaere:

resultat = omregn (maal);

Skrevet ons. d. 27. januar 2010 kl. 21:31:22| #7

nickwan
nickwan (6.250 point)
www.haslingblik.dk
aaaa det var det eneste jeg havde gjort forkert :) tak

det her ser ud til at virke:)

#include "stdafx.h"

int omregn (int);

int main()
{

    int maal;
    int resultat;

    std::cout<<"Indtast maal: ";
    std::cin>>maal;
    resultat = omregn (maal);
    std::cout<<resultat;

    system("pause");
    return 0;
}

int omregn (int maal)
{
    int resultat;
    resultat = ((maal/60)*60)+12;
    return (resultat);
}

sorry hvis jeg virkede lidt umulig med min kode men det er lige med at huske det hele og er som sagt ny :)

smid et svar så får du point:)

Skrevet ons. d. 27. januar 2010 kl. 21:34:47| #8

nickwan
nickwan (6.250 point)
www.haslingblik.dk
ups der var lige et problem når tallet bliver over xxx.50 så runder den stadig ned?

Skrevet ons. d. 27. januar 2010 kl. 21:47:04| #9

arne_v
arne_v (1.005.658 point)
Jeg gaetter paa at:

resultat = ((maal/60)*60)+12;

skal vaere:

resultat = (((int)(maal/60.0+0.5))*60)+12;

Skrevet ons. d. 27. januar 2010 kl. 21:53:28| #10

nickwan
nickwan (6.250 point)
www.haslingblik.dk
cool det virkede 1000 tak :) smid et svar .

er det sådan så du vil være sød at forklare hvad det er der sker for må indrømme at jeg ikke helt forstår hvad det er en gør.

(maal/60.0+0.5))*60)+12; det der forstår jeg godt det er mere den her jeg ikke forstår : (((int)(maal/60.0+0.5)) :)

hvordan ser min kode ellers ud ? er den okay? er jo ny så ville være rat at høre om det er okay eller helt ude i skoven (ved godt den er meget enkel og at der ikke er ret meget i den):)

Skrevet ons. d. 27. januar 2010 kl. 22:10:38| #11


Skrevet ons. d. 27. januar 2010 kl. 22:11:56| #12

arne_v
arne_v (1.005.658 point)
(int)noget runder ned.

(int)(noget+0.5) runder af til naermeste heltal.

Skrevet ons. d. 27. januar 2010 kl. 22:13:47| #13

arne_v
arne_v (1.005.658 point)
Koden ser rimelig fornuftig ud.

Jeg ville imporete navne fremfor at angive std:: hver gang.

Og jeg ville flytte omregn op over main og droppe forward erklaeringen.

Men det er ikke bedre - det er bare min programmerings stil.

Skrevet ons. d. 27. januar 2010 kl. 22:19:23| #14

nickwan
nickwan (6.250 point)
www.haslingblik.dk
okay lyder godt:) mange mange tak for hjælpen :)

sådan her kom min kode til at se ud:

#include "stdafx.h"

int omregn (int);

int main()
{

    int maal;
    int resultat;

    std::cout<<"PILLEMAAL! SKAL ende paa 8!\n";
    std::cout<<"Indtast maal: ";
    std::cin>>maal;
    resultat = omregn (maal);
    std::cout<<resultat<<"\n";

    return main();
}

int omregn (int maal)
{
    int resultat;
    resultat = (((int)(maal/60.0+0.5))*60)-12;
    return (resultat);
}

Skrevet tor. d. 28. januar 2010 kl. 01:47:19| #15

arne_v
arne_v (1.005.658 point)
Hvad pokker laver:

return main();

????

Skrevet tor. d. 28. januar 2010 kl. 09:26:10| #16

nickwan
nickwan (6.250 point)
www.haslingblik.dk
det er fordi jeg skal bruge det i skolen, og jeg gider ikke skulle åbne programmet hver gang jeg skal skrive et tal, for når den har udført handlingen lukker den jo, så jeg søgte lidt på nettet, og fandt et sted hvor der var en der havde skrevet at man kunne skrive:

return main();

ved godt det er en dårlig løsning men det virkede :)

Skrevet tor. d. 28. januar 2010 kl. 15:23:25| #17

arne_v
arne_v (1.005.658 point)
Det ville vaere noget paenere at lave en loekke i main !

Skrevet tor. d. 28. januar 2010 kl. 17:21:41| #18

nickwan
nickwan (6.250 point)
www.haslingblik.dk
så langt er jeg ikke nået i den bog jeg læser endnu, men hvis det er enkelt kan du så forklare mig hvordan jeg gør?

Skrevet fre. d. 29. januar 2010 kl. 04:29:56| #19

arne_v
arne_v (1.005.658 point)
En maade:

int main()
{

    int maal;
    int resultat;

    std::cout<<"PILLEMAAL! SKAL ende paa 8!\n";
    for(;;)
    {
        std::cout<<"Indtast maal (0=exit): ";
        std::cin>>maal;
        if(maal <= 0) break;
        resultat = omregn (maal);
        std::cout<<resultat<<"\n";
    }

    return 0;
}

Skrevet fre. d. 29. januar 2010 kl. 08:46:27| #20

nickwan
nickwan (6.250 point)
www.haslingblik.dk
smart, :) prøver det når jeg kommer hjem.

du kommer til at tjene mange point på mig endnu ^^
1000 tak for hjælpen :)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Regex sætning i C++

Oprettet den 30. januar 2012 kl. 22.55
kjeldsted giver 150 point for svar | Giv et svar »

Bog om strukturering

Oprettet den 25. januar 2012 kl. 07.26
keepy giver 30 point for svar | Giv et svar »

Opsnap keypress globalt.

Oprettet den 24. januar 2012 kl. 16.14
xited giver 200 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger