Gjest Slettet+5132 Skrevet 26. oktober 2017 Del Skrevet 26. oktober 2017 (endret) 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 26. oktober 2017 av Slettet+5132 Lenke til kommentar
Teza Skrevet 26. oktober 2017 Forfatter Del Skrevet 26. oktober 2017 Installerte MSYS2 x86_64 da jeg kjører Win/7, 64 bit.. Kjørte deretter "pacman -Syu" to ganger og deretter "pacman -Su". Lenke til kommentar
Gjest Slettet+5132 Skrevet 26. oktober 2017 Del Skrevet 26. oktober 2017 Installerte MSYS2 x86_64 da jeg kjører Win/7, 64 bit.. Kjørte deretter "pacman -Syu" to ganger og deretter "pacman -Su". Du må også kjøre "pacman -S mingw-w64-x86_64-gtk3" og gjerne også et par andre ting beskrevet i Windows sin installasjonsguide Lenke til kommentar
Emancipate Skrevet 26. oktober 2017 Del Skrevet 26. oktober 2017 (endret) Å 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 26. oktober 2017 av Emancipate Lenke til kommentar
Teza Skrevet 26. oktober 2017 Forfatter Del Skrevet 26. oktober 2017 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
Emancipate Skrevet 26. oktober 2017 Del Skrevet 26. oktober 2017 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
Teza Skrevet 26. oktober 2017 Forfatter Del Skrevet 26. oktober 2017 (endret) 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. Endret 26. oktober 2017 av Teza Lenke til kommentar
Gjest Slettet+5132 Skrevet 26. oktober 2017 Del Skrevet 26. oktober 2017 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. 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
Teza Skrevet 26. oktober 2017 Forfatter Del Skrevet 26. oktober 2017 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 Skrevet 26. oktober 2017 Del Skrevet 26. oktober 2017 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
Teza Skrevet 26. oktober 2017 Forfatter Del Skrevet 26. oktober 2017 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
kjeita Skrevet 26. oktober 2017 Del Skrevet 26. oktober 2017 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 Skrevet 27. oktober 2017 Del Skrevet 27. oktober 2017 æøå 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
Teza Skrevet 27. oktober 2017 Forfatter Del Skrevet 27. oktober 2017 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
Teza Skrevet 27. oktober 2017 Forfatter Del Skrevet 27. oktober 2017 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
Emancipate Skrevet 27. oktober 2017 Del Skrevet 27. oktober 2017 (endret) 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 27. oktober 2017 av Emancipate Lenke til kommentar
Teza Skrevet 27. oktober 2017 Forfatter Del Skrevet 27. oktober 2017 (endret) 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 27. oktober 2017 av Teza Lenke til kommentar
Emancipate Skrevet 27. oktober 2017 Del Skrevet 27. oktober 2017 (endret) 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 27. oktober 2017 av Emancipate Lenke til kommentar
Emancipate Skrevet 27. oktober 2017 Del Skrevet 27. oktober 2017 (endret) 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 27. oktober 2017 av Emancipate Lenke til kommentar
Emancipate Skrevet 27. oktober 2017 Del Skrevet 27. oktober 2017 Jeg får såklart opp et spørsmålstegn for "ø", forresten. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå