Gå til innhold

Komme i gang med C


Anbefalte innlegg

Gjest Slettet+5132

 

 

Dersom du vil holde deg til C for gui anbefaler jeg https://www.gtk.org/

 

 

Lastet ned GTK og oppdaterte denne.

 

ser ut som  #include <gtk/gtk.h> mangler, når jeg prøver eksemplelet (i Code::Blocks) fra siden:

https://developer.gnome.org/gtk3/stable/gtk-getting-started.html

 

Vil tro jeg ikke har fått installert alt?

Har søkt etter filen i installasjonsmappen, men den finnes ikke.

 

Garantert nybegynnerfeil fra min side  :)

 

 

Hvilket operativsystem? Hvis det var Windows, hva lastet du ned og hva gjorde du? Hvis det er Windows har du kanskje ikke installert pakkene i msys2 etterpå? Eventuelt glemt å installere dev-pakkene hvis det er et annet OS...

Endret av Slettet+5132
Lenke til kommentar
Videoannonse
Annonse

Å bruke GTK+ på windows er et merkelig alternativ. Da får man ikke "native" widgets. Og for en nybegynner i C, så er vanlig win32 api (altså å programmere mot Windows direkte) et alternativ som gir et mye mer "naturlig" api i C.

 

Men fordelen med GTK+ er at man kan lage GUI med drag and drop, og så laste det inn med en funksjon: https://glade.gnome.org/

Resizing av widgets er mer automatisk, etc.

Endret av Emancipate
Lenke til kommentar

Whoops...

 

Følgende er da installert:

 

pacman -Syu

pacman -Syu

pacman -Su

pacman -S mingw-w64-x86_64-glade

pacman -S mingw-w64-x86_64-gtk3

pacman -S mingw-w64-x86_64-devhelp

pacman -S mingw-w64-x86_64-python2-gobject (har Python 2.7 installert fra tidligere)

 

Fra følgende er det ikke installert noe, vet ikke hva jeg evt. skal velge her.

 

$ pacman -S mingw-w64-x86_64-toolchain base-devel
 
:: Det er 17 medlemmer i gruppen mingw-w64-x86_64-toolchain:
:: Pakkebrønn mingw64
   1) mingw-w64-x86_64-binutils  2) mingw-w64-x86_64-crt-git
   3) mingw-w64-x86_64-gcc  4) mingw-w64-x86_64-gcc-ada
   5) mingw-w64-x86_64-gcc-fortran  6) mingw-w64-x86_64-gcc-libgfortran
   7) mingw-w64-x86_64-gcc-libs  8) mingw-w64-x86_64-gcc-objc
   9) mingw-w64-x86_64-gdb  10) mingw-w64-x86_64-headers-git
   11) mingw-w64-x86_64-libmangle-git  12) mingw-w64-x86_64-libwinpthread-git
   13) mingw-w64-x86_64-make  14) mingw-w64-x86_64-pkg-config
   15) mingw-w64-x86_64-tools-git  16) mingw-w64-x86_64-winpthreads-git
   17) mingw-w64-x86_64-winstorecompat-git
 
Oppgi et valg (standardvalg=all):
 
-----
 
Finner nå filen under C:\msys64\mingw64\include\gtk-3.0\gtk, men code::blocks finner den ikke:
#include <gtk/gtk.h>
 
Prøvde å flytte filen til C:\Program Files (x86)\CodeBlocks\MinGW\include
Den fant da filen, men ikke alle de andre filene som er beskrevet inne i gtk.h.
 
Prøvde også " #include <C:\msys64\mingw64\include\gtk-3.0\gtk.h> " uten noe hell...
Lenke til kommentar

Når du skal kompilere et prosjekt mot et bibliotek, må kompilatoren ha mappen til include-filene (.h) og objektfilene (selve biblioteket). Disse parametrene kan du sikkert skrive inn et sted i code::blocks i innstillingene for prosjektet. Hva som skal stå når man skal linke med GTK+ på windows, er jeg imidlertid ikke klar over.

Lenke til kommentar

Takker, jeg får prøve å finne en løsning på den senere.

 

Har dog skrevet mitt første program i dag, og ser ikke feilen(e) jeg har gjort.

#include <stdio.h>

int main()
{
    float CELSIUS, FAHRENHEIT, KELVIN, RANKINE, DELISLE, NEWTON, REAUMUR, ROMER;

    printf("Please enter temperature in øC: ");
    scanf("%f", &CELSIUS );

    FAHRENHEIT = ((CELSIUS * 1.8) + 32);
    KELVIN = (CELSIUS + 273.15);
    RANKINE = ((CELSIUS + 273.15) * (9/5));
    DELISLE = ((100 - CELSIUS) * (3/2));
    NEWTON = (CELSIUS * (33/100));
    REAUMUR = (CELSIUS * (4/5));
    ROMER = ((CELSIUS * (21/40)) + 7.5);

    printf( "\nThe temperature in fahrenheit is \t %6.2f \n", FAHRENHEIT);
    printf( "The temperature in kelvin is \t\t %6.2f \n", KELVIN);
    printf( "The temperature in rankine is \t\t %6.2f \n", RANKINE);
    printf( "The temperature in delisle is \t\t %6.2f \n", DELISLE);
    printf( "The temperature in newton is \t\t %6.2f \n", NEWTON);
    printf( "The temperature in reaumur is \t\t %6.2f \n", REAUMUR);
    printf( "The temperature in rømer is \t\t %6.2f \n", ROMER);
    return 0;
}

 

 

1)

Newton og reaumur returnerer 0,00 i verdi, uansett input.

 

2)

Bokstaven ø fungerer som symbol der jeg skriver inn temperaturen, men hvordan kan jeg enkelt bruke bokstaven ø ellers i teksten?

 

3)

Dersom jeg skriver inn en verdi på f.eks 4000, vil ikke tallene på utskriften være sentrert mot høyre lengre.

 

kode001.jpg

Endret av Teza
Lenke til kommentar
Gjest Slettet+5132

Takker, jeg får prøve å finne en løsning på den senere.

 

Har dog skrevet mitt første program i dag, og ser ikke feilen(e) jeg har gjort.

#include <stdio.h>

int main()
{
    float CELSIUS, FAHRENHEIT, KELVIN, RANKINE, DELISLE, NEWTON, REAUMUR, ROMER;

    printf("Please enter temperature in øC: ");
    scanf("%f", &CELSIUS );

    FAHRENHEIT = (CELSIUS * 1.8) + 32;
    KELVIN = (CELSIUS + 273.15);
    RANKINE = (CELSIUS + 273.15) * (9/5);
    DELISLE = (100 - CELSIUS) * (3/2);
    NEWTON = CELSIUS * (33/100);
    REAUMUR = CELSIUS * (4/5);
    ROMER = (CELSIUS * (21/40)) + 7,5;

    printf( "\nThe temperature in fahrenheit is \t %6.2f \n", FAHRENHEIT);
    printf( "The temperature in kelvin is \t\t %6.2f \n", KELVIN);
    printf( "The temperature in rankine is \t\t %6.2f \n", RANKINE);
    printf( "The temperature in delisle is \t\t %6.2f \n", DELISLE);
    printf( "The temperature in newton is \t\t %6.2f \n", NEWTON);
    printf( "The temperature in reaumur is \t\t %6.2f \n", REAUMUR);
    printf( "The temperature in rømer is \t\t %6.2f \n", ROMER);
    return 0;
}

1)

Newton og reaumur returnerer 0,00 i verdi, uansett input.

 

2)

Bokstaven ø fungerer som symbol der jeg skriver inn temperaturen, men hvordan kan jeg enkelt bruke bokstaven ø ellers i teksten?

 

3)

Dersom jeg skriver inn en verdi på f.eks 4000, vil ikke tallene på utskriften være sentrert mot høyre lengre.

 

kode001.jpg

 

Jeg tar for meg en viktig feil her: Heltallsdivisjon. I C har du all hovedsak to talltyper (egentlig flere, men la oss ignorere dem). Du har flyttall ("desimaltall") og heltall (1,2,3,4...). Alle operasjoner med flyttall blir nye flyttall, og alle operasjoner med kun heltall blir nye heltall, blander du blir det flyttall. 

 

Som tall skiller C mellom tall uten desimaler  (eg. 1, 8 eller 124) som er heltall, og tall med desimaler (eg 1.0, 8.8, 128.0). Altså må du ha med "." (MERK: Punktum er desimalmarkøren i C). Så skal du skrive 124 i flyttall blir det 124.0 eller bare 124. (124 PUNKTUM)

 

Nå kommer en til divisjon. I matematikken er 1/2=0.5. Som flyttall er også 1.0/2.0=0.5, MEN, som heltall er 1/2=0 (det vil si, heltallsdivisjon runder alltid ned). I alle uttrykkene bruker du heltallsdivisjon (eg. 9/5). Når du deler bør du derfor konvertere til flyttall og så dele, eg istedenfor 9/5 bruk 9.0 / 5.0

 

For å ta det veldig enkelt:

 

9/5 = 1 

9./5. = 1.8

4/5 = 0 

4.0/5.0 = 0.8

 

En helt annen feil er i uttrykket for  ROMER, her har du brukt KOMMA (,) men du vil bruke PUNKTUM (.) for å angi desimaltall. Årsaken til at kompilatoren ikke klager er at komma er symbolet for å skille uttrykk, så ", 5" betyr bare "Og så evaluer 5", og siden 5 bare blir til 5, skjer det ingenting...

 

Lenke til kommentar

Mange takk!

 

Så en god praksis er alltid mellomrom rundt  / * - +, samt gjerne bruke det antall desimaler som man ønsker i summen.

    FAHRENHEIT = ((CELSIUS * 1.80) + 32.00);
    KELVIN = (CELSIUS + 273.15);
    RANKINE = ((CELSIUS + 273.15) * (9.00 / 5.00));
    DELISLE = ((100.00 - CELSIUS) * (3.00 / 2.00));
    NEWTON = (CELSIUS * (33.00 / 100.00));
    REAUMUR = (CELSIUS * (4.00 / 5.00));
    ROMER = ((CELSIUS * (21.00 / 40.00)) + 7.50);

(du svarte før jeg fikk rettet kommafeilen :)  )

 

 

Lenke til kommentar
Gjest Slettet+5132

Antall desimaler du bruker er irrelevant sålenge desimalene er der. Det som kan ha noe å si for litt spesielle ting er forskjellen mellom float (32 bits, ca. 8 desimaler) mot double (64 bits, ca. 16 desimaler). Det kommer litt an på enheten din om den har (rask) støtte for double eller ei.  Men det kan derimot være en god dokumentasjon for deg selv å oppgi antall desimaler slik, og det skader ikke.

Tall som 1.8 blir automatisk double, altså høy presisjon, men du lagrer dem som float (du deklarerer float FAHRENHEIT osv). For disse beregningene har det ingenting å si, men for noen ting kan det ha noe å si (men da vet du det typisk på forhånd).

Lenke til kommentar

Vedrørende  æ,ø og å ser jeg at noen bytter ut bokstavene med:

 

æ = \x91
ø = \x9b
å = \x86
Æ = \x92
Ø = \x9d
Å = \x8f

 

Vil anta dette er "dårlig" praksis og det beste er å benytte kode for å omgå utfordringen?

Vil kanskje gjøre koden tung og mindre leselig for andre?

Lenke til kommentar

Det er pga kompatibilitet for våre utenlandsvenner.

 

ae, oe, aa, er jo alternativer hvis du vil ha det lettere lesbart, men fortsatt forståelig.

 

 

Jeg håper du korrigerer din dokumentasjon etter som feil oppdages, og fortsetter i samme stil. Dette kan være en fin intro to PIC for mange.

Lenke til kommentar
Gjest Slettet+5132

æøå og andre ikke-ascii tegn er alltid et problem. Det finnes støtte for det i C99-standarden, men det er alltid litt kinkig. Hvis du begynner å inkludere særnorske tegn kommer du på et eller annet tidspunkt til å møte på enkodingsproblemer og æ kommer til å bli ^'§¤ eller liknende. 

 

Mitt råd er at for enkle konsoll-programmer ville jeg gjort som forrige post og brukt ae, oe og aa (altså ting som kun skriver ut til en kommandolinje). Når du skal lage grafisk brukergrensesnitt, ville jeg tatt en titt på GTK sin guide for hvordan du kan gjøre dette (denne lærer deg også hvordan du kan gi programmet støtte for flere språk om ønskelig -- dette skjer via gettext, og du finner en enkel tutorial til dette), Du kan også bruke gettext for kommandlinjeprogrammer, og essensielt hva det gjør er at hver gang du skriver ut noe ala

 

printf("Hello, World"); 

 

skal du heller bruke

 

printf(_("Hello, World")); // merk at du her kaller macroen/funksjonen _ rundt stringen

 

da kan du etterpå i en tekstfil legge til alle oversettelser av "Hello, World" og få støtte for alle verdens språk i ettertid. Jeg tror jeg ville håndtert norsk på denne måten. Det vil si, skrive programmet med output på engelsk, og så bruke gettext til å oversette. Da slipper du ubehageligheter med særnorske tegn i kildekodefilene (det kommer til å by på problemer)

Lenke til kommentar

Jeg håper du korrigerer din dokumentasjon etter som feil oppdages, og fortsetter i samme stil. Dette kan være en fin intro to PIC for mange.

 

Var ikke akkurat tanken å publisere dette, men heller et oppslagsverk for meg selv, også for å vise andre hva jeg har gjort når jeg ber om hjelp.

 

Dersom noen skulle ha interesse av notatblokken min, har jeg nå lagt den ut her:

Notatblokk

Lenke til kommentar

I versjon 2 av mitt første program, føler jeg at endel av koden blir veldig repeterende, og lurer på om det er er bedre praksis for å komprimere koden?

 

Er det en kommando som får programmet til å starte på nytt etter at første kjøring er ferdig?

 

 

 

 

#include <stdio.h>

int main()
{
    printf("Temperature conversion tool\n\n");
    printf("Choose what type to convert from:\n");
    printf("[1] Celsius\n");
    printf("[2] Delisle\n");
    printf("[3] Fahrenheit\n");
    printf("[4] Kelvin\n");
    printf("[5] Newton\n");
    printf("[6] Rankie\n");
    printf("[7] Reaumur\n");
    printf("[8] R\x9bmer\n\n");
    printf("Please enter temperature type: ");

    int temperature_type;
    float celsius, fahrenheit, kelvin, rankine, delisle, newton, reaumur, romer, calculation;

    scanf("%d", &temperature_type);
    if (temperature_type == 1) {
        printf("Please enter temperature in celsius: ");
        scanf("%f", &celsius );
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 2) {
        printf("Please enter temperature in delisle: ");
        scanf("%f", &calculation);
        celsius = (100.00 - calculation * (2.00 / 3.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 3) {
        printf("Please enter temperature in fahrenheit: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 32.00) * (5.00 / 9.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 4) {
        printf("Please enter temperature in kelvin: ");
        scanf("%f", &calculation);
        celsius = (calculation - 273.15);
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 5) {
        printf("Please enter temperature in newton: ");
        scanf("%f", &calculation);
        celsius = (calculation * (100.00 / 33.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 6) {
        printf("Please enter temperature in rankine: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 491.67) * (5.00 / 9.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 7) {
        printf("Please enter temperature in reaumur: ");
        scanf("%f", &calculation);
        celsius = (calculation * (5.00 / 4.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 8) {
        printf("Please enter temperature in r\x9bmer: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 7.50) * (40.00 / 21.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
    }
    else {
        printf("Please choose a number, 1-8, from above!\n\n");
    }

    return 0;
}

 

 

Lenke til kommentar

I versjon 2 av mitt første program, føler jeg at endel av koden blir veldig repeterende, og lurer på om det er er bedre praksis for å komprimere koden?

Det er som i matematikk, faktoriser ut det som er felles. Enten ved å legge det i en egen funksjon, eller (om mulig) etter if-setningen.

 

Er det en kommando som får programmet til å starte på nytt etter at første kjøring er ferdig?

Ja, putt alt inni en while-løkke: while(1) { programmet } Endret av Emancipate
Lenke til kommentar

Det er som i matematikk, faktoriser ut det som er felles. Enten ved å legge det i en egen funksjon, eller (om mulig) etter if-setningen.

 

Antok det, men ettersom det er 2 linjer som er forskjellig under hver if, og det aldri er de samme to linjene, ble jeg usikker.

 

Vil tro at alle beregningene kan settes utenfor, men at dette vil kreve at de deles opp i to deler hvor den ene delen er regning fra celsius til annen temperatur, og den andre delen er regning til celsius?

 

Den delen som regner til celsius må vel da få verdien fra IF setningen og summen av dette overføres til delen som regner fra celsius til annen temperatur.

 

Da er det vel bare å printe ut resultatet som jeg har gjort under IF setningene?

 

 

Edit:

 

 

Dette så ut til å fungere, men ga litt merkelige resultater...

 

 

 

#include <stdio.h>

int main()
{
    while(1){

    printf("Temperature conversion tool\n\n");
    printf("Choose what type to convert from:\n");
    printf("[1] Celsius\n");
    printf("[2] Delisle\n");
    printf("[3] Fahrenheit\n");
    printf("[4] Kelvin\n");
    printf("[5] Newton\n");
    printf("[6] Rankie\n");
    printf("[7] Reaumur\n");
    printf("[8] R\x9bmer\n");
    printf("[0] Exit program\n\n");
    printf("Please enter temperature type: ");

    int temperature_type;
    float celsius, fahrenheit, kelvin, rankine, delisle, newton, reaumur, romer, calculation;

    delisle = ((100.00 - celsius) * (3.00 / 2.00));
    fahrenheit = ((celsius * 1.80) + 32.00);
    kelvin = (celsius + 273.15);
    newton = (celsius * (33.00 / 100.00));
    rankine = ((celsius + 273.15) * (9.00 / 5.00));
    reaumur = (celsius * (4.00 / 5.00));
    romer = ((celsius * (21.00 / 40.00)) + 7.50);

    scanf("%d", &temperature_type);
    if (temperature_type == 1) {
        printf("Please enter temperature in celsius: ");
        scanf("%f", &calculation);
        celsius = calculation;
        printf( "\nThe temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n\n", romer);
    }
    else if (temperature_type == 2) {
        printf("Please enter temperature in delisle: ");
        scanf("%f", &calculation);
        celsius = (100.00 - calculation * (2.00 / 3.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n\n", romer);
    }
    else if (temperature_type == 3) {
        printf("Please enter temperature in fahrenheit: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 32.00) * (5.00 / 9.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n\n", romer);
    }
    else if (temperature_type == 4) {
        printf("Please enter temperature in kelvin: ");
        scanf("%f", &calculation);
        celsius = (calculation - 273.15);

        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n\n", romer);
    }
    else if (temperature_type == 5) {
        printf("Please enter temperature in newton: ");
        scanf("%f", &calculation);
        celsius = (calculation * (100.00 / 33.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n\n", romer);
    }
    else if (temperature_type == 6) {
        printf("Please enter temperature in rankine: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 491.67) * (5.00 / 9.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n\n", romer);
    }
    else if (temperature_type == 7) {
        printf("Please enter temperature in reaumur: ");
        scanf("%f", &calculation);
        celsius = (calculation * (5.00 / 4.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n\n", romer);
    }
    else if (temperature_type == 8) {
        printf("Please enter temperature in r\x9bmer: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 7.50) * (40.00 / 21.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n\n", reaumur);
    }
    else if (temperature_type == 0) {
        exit(0);
    }
    else {
        printf("Please choose a number, 1-8, from above!\n\n");
    }

    system ("pause");
    system("cls");

    } /* while */
    return 0;
} /* main */ 

 

 

 

Må se om beregningene henger på greip...

Endret av Teza
Lenke til kommentar

I C kjøres koden fra øverst til nederst, så nei, det vil ikke funke. = tegnet er tilordningsoperatoren (assignment operator), ikke matematisk definisjon.

 

Det er nok mange måter å løse dette på, men man vil alltid ha litt repetisjon, og det kreves at du lærer noen nye ting. Er det viktig at temperaturskalaene skrives ut i akkurat den rekkefølgen?

 

Det ville også vært mye enklere om du kunne skrive ut temperaturen også på den skalaen den ble skrevet inn i, selv om jeg forstår om det er uønsket.

 

Edit: Hovedregel er at man bruker double, med mindre det er grunn til å bruke float.

Endret av Emancipate
Lenke til kommentar

Man kan faktorisere ut selve utregningen, ved å lage en funksjon som regner om fra celcius til alle de andre temperaturene. Eksempelet under er normalt ikke akkurat sånn man lager en sånn funksjon, men den duger. Fullfør mønsteret ved å legge alle temperaturene inn i funksjonen, og la alle if-branchene bruke funksjonen.

 

 

#include <stdio.h>

int main()
{
    printf("Temperature conversion tool\n\n");
    printf("Choose what type to convert from:\n");
    printf("[1] Celsius\n");
    printf("[2] Delisle\n");
    printf("[3] Fahrenheit\n");
    printf("[4] Kelvin\n");
    printf("[5] Newton\n");
    printf("[6] Rankie\n");
    printf("[7] Reaumur\n");
    printf("[8] R\x9bmer\n\n");
    printf("Please enter temperature type: ");

    int temperature_type;
    float celsius, fahrenheit, kelvin, rankine, delisle, newton, reaumur, romer, calculation;

    void convert_temperatures(
        float  celsius) {
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
    }

    scanf("%d", &temperature_type);
    if (temperature_type == 1) {
        printf("Please enter temperature in celsius: ");
        scanf("%f", &celsius );
        convert_temperatures(celsius);
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 2) {
        printf("Please enter temperature in delisle: ");
        scanf("%f", &calculation);
        celsius = (100.00 - calculation * (2.00 / 3.00));
        convert_temperatures(celsius);
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 3) {
        printf("Please enter temperature in fahrenheit: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 32.00) * (5.00 / 9.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 4) {
        printf("Please enter temperature in kelvin: ");
        scanf("%f", &calculation);
        celsius = (calculation - 273.15);
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 5) {
        printf("Please enter temperature in newton: ");
        scanf("%f", &calculation);
        celsius = (calculation * (100.00 / 33.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 6) {
        printf("Please enter temperature in rankine: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 491.67) * (5.00 / 9.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        reaumur = (celsius * (4.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 7) {
        printf("Please enter temperature in reaumur: ");
        scanf("%f", &calculation);
        celsius = (calculation * (5.00 / 4.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        romer = ((celsius * (21.00 / 40.00)) + 7.50);
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 8) {
        printf("Please enter temperature in r\x9bmer: ");
        scanf("%f", &calculation);
        celsius = ((calculation - 7.50) * (40.00 / 21.00));
        delisle = ((100.00 - celsius) * (3.00 / 2.00));
        fahrenheit = ((celsius * 1.80) + 32.00);
        kelvin = (celsius + 273.15);
        newton = (celsius * (33.00 / 100.00));
        rankine = ((celsius + 273.15) * (9.00 / 5.00));
        reaumur = (celsius * (4.00 / 5.00));
        printf( "\nThe temperature in celsius is \t\t %6.2f \n", celsius);
        printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        printf( "The temperature in newton is \t\t %6.2f \n", newton);
        printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
    }
    else {
        printf("Please choose a number, 1-8, from above!\n\n");
    }

    return 0;
}

 

Endret av Emancipate
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...