Avatar billede Slettet bruger
07. februar 2001 - 21:21 Der er 14 kommentarer og
2 løsninger

Hvordan ændrer man fortegn?

Heysa!

Jeg har kodet et lille newbie program til at beregne den potentielle energi i et objekt (noget 1-gs fysik pensum sjov)

og programmet ser sådan ud:

#include <iostream.h>
#include <string.h>

// Dette program skal beregne den potientelle energi oplagret i et objekt

int masse;
int hoejde;

void beregn_joule(int masse, int tyngde, int hoejde)
{

    long ePot;
    ePot = masse * tyngde * hoejde;
    cout << \"Den potientielle energi der er oplagret er \" <<ePot<< \"Joule\" <<endl;
}

char objekt[100];

void find_fortegn(void)
{
    int fortegn;

    cout << \"Falder objektet eller bliver det hevet opad? (skriv \'1=fald\' eller \'2=hiv\')\" <<endl;
    cin >> fortegn;
    if (fortegn = 1)
        hoejde = -hoejde;
    else
        hoejde = +hoejde;
}

void main(void)
{
    int tyngde;
    tyngde = 9,82;

    cout << \"Epot beregner BETA 1 by Pacroon\\nDette program skal beregne den potientelle energi oplagret i et objekt.\" <<endl;
    cout << \"\\nHvilket objekt er der tale om?\" <<endl;
    cin >> objekt;
    cout << \"Der er altsaa tale om en \" << objekt << \"\\nHvor meget vejer \" << objekt <<\"en? (i kg)\" <<endl;
    cin >> masse;
    cout << objekt << \"en vejer altsaa \" << masse << \"kg\" <<endl;
    cout << \"Hvor hoej er \" << objekt << \"? (i meter)\" <<endl;
    cin >> hoejde;
    cout << objekt << \" er \" << hoejde << \" meter hoej\" <<endl;
   
    find_fortegn();
   
    beregn_joule(masse, tyngde, hoejde);
}
#include <iostream.h>
#include <string.h>

// Dette program skal beregne den potientelle energi oplagret i et objekt

int masse;
int hoejde;

void beregn_joule(int masse, int tyngde, int hoejde)
{

    long ePot;
    ePot = masse * tyngde * hoejde;
    cout << \"Den potientielle energi der er oplagret er \" <<ePot<< \"Joule\" <<endl;
}

char objekt[100];

void find_fortegn(void)
{
    int fortegn;

    cout << \"Falder objektet eller bliver det hevet opad? (skriv \'1=fald\' eller \'2=hiv\')\" <<endl;
    cin >> fortegn;
    if (fortegn = 1)
        hoejde = -hoejde;
    else
        hoejde = +hoejde;
}

void main(void)
{
    int tyngde;
    tyngde = 9,82;

    cout << \"Epot beregner BETA 1 by Pacroon\\nDette program skal beregne den potientelle energi oplagret i et objekt.\" <<endl;
    cout << \"\\nHvilket objekt er der tale om?\" <<endl;
    cin >> objekt;
    cout << \"Der er altsaa tale om en \" << objekt << \"\\nHvor meget vejer \" << objekt <<\"en? (i kg)\" <<endl;
    cin >> masse;
    cout << objekt << \"en vejer altsaa \" << masse << \"kg\" <<endl;
    cout << \"Hvor hoej er \" << objekt << \"? (i meter)\" <<endl;
    cin >> hoejde;
    cout << objekt << \" er \" << hoejde << \" meter hoej\" <<endl;
   
    find_fortegn();
   
    beregn_joule(masse, tyngde, hoejde);
}

Alt efter om objektet falder eller bliver hevet op ad, skal højden være negativ eller positiv.

Jeg vil gerne have det lavet sådan, at når den har fået værdierne til både masse og højde (ikke tyngde fordi den er konstant) skal den lave hoejde til negativ eller positiv... hvordan gør jeg???
Avatar billede Slettet bruger
07. februar 2001 - 21:25 #1
HOV koden kom to gange.. det er jeg ked af =) håber stadig i forstår det =)
Avatar billede jpk Nybegynder
07. februar 2001 - 22:17 #2
Hvis du vil ændre fortegn ganger du bare med -1

ex:
int Tal = 10;
//tallet er nu 10
Tal *= -1;
//tallet er nu -10
Avatar billede erikjacobsen Ekspert
07. februar 2001 - 23:05 #3
Jeg tror nu mere at
  if (fortegn = 1)
måske skulle være
  if (fortegn == 1)
Avatar billede devia Nybegynder
08. februar 2001 - 09:18 #4
;-)  en af de irriterende småfejl man alrig selv finder ,-)
Avatar billede soepro Nybegynder
08. februar 2001 - 11:14 #5
Simpelt -og billigere end at multiplicere med -1:

Tal = 0 - Tal;

Avatar billede jpk Nybegynder
08. februar 2001 - 11:28 #6
soepro>> Der ændrer du dog kun fortegn hvis \'Tal\' er positiv...!

En gangeoperation er ganske rigtig normalt ret \'dyr\', da den i virkeligheden udfører et antal operationer, fx:

3*4 = 3+3+3+3 (3 operationer)

I dette tilfælde (operator er 1) udføres kun én operation, nemlig Tal = -Tal, og så er vi vist lige vidt?

Desuden tror jeg ikke der er i denne type program, vi skal lede efter optimeringer af så lille format! (måske vi så skulle manipulere fortegnsbitten direkte...)
Avatar billede erikjacobsen Ekspert
08. februar 2001 - 11:59 #7
Nej, jpk, det er fuldstænidg korrekt, som soepro skriver. Det vil ændre
fortegnet, også for negative tal. Og det er jo det der sker i programmet:

    hoejde = -hoejde;

hvor 0-et dog er \"optimeret\" væk. Det har vores spørger jo sådan set
styr på.
Avatar billede jpk Nybegynder
08. februar 2001 - 12:07 #8
Sorry, jeg var lidt for hurtig med fortegnsændringen...
Avatar billede erikjacobsen Ekspert
08. februar 2001 - 12:08 #9
;-)
Avatar billede virtualfriend Nybegynder
09. februar 2001 - 00:10 #10

Jeg kan se i dit program at du tildeler en
integer en floatværdi <Tyngde> Det må du straks
holde op med..
Avatar billede Slettet bruger
09. februar 2001 - 07:08 #11
Hej og tak for hjælpen!

Dog til virtualfriend> Hvorfor må tyngde ikke være i float? Det er jo sådan set ligemeget hvad den er, da dens værdi jo er konstant..?
Avatar billede jpk Nybegynder
09. februar 2001 - 09:28 #12
Den SKAL jo netop være en float, men det du gør er:

int tyngde;
tyngde = 9,82;

Når du assigner en int, en floatværdi, får den kun heltalsværdien!
Altså er tyngde nu lig 9 og ikke 9,82!   
Avatar billede erikjacobsen Ekspert
09. februar 2001 - 10:07 #13
Nej tyngde er lig med 82. Der står jo ikke 9.82, men 9,82. I C betyder
kommaet, at der udregnes to udtryk, nemlig 9 og derefter 82. Og det sidst
udregnede er værdien. 9.82 ville have givet en oversætterfejl.
Avatar billede Slettet bruger
09. februar 2001 - 20:14 #14
Hey wow tak for det! Især med float og tyngde værdien, det ANEDE jeg ikke! Derfor at den laver lidt lort i den når den skal komme med facit..!
Avatar billede Slettet bruger
10. februar 2001 - 11:31 #15
Jeg siger tak! Jeg har allerede udvidet det rigtig meget med min viden fra denne post =)
Avatar billede erikjacobsen Ekspert
10. februar 2001 - 14:38 #16
Jamen, så er vi også glade ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester