Gå til innhold

Komme i gang med C


Anbefalte innlegg

Gjest Slettet+5132

Skal sies at eksempelet kan gjøres enklere via enten funksjonspekere (veldig generell tilnærming, først bør du lære deg å lage C funksjoner) eller bruke et array av koeffisienter, den siste er hva jeg ville anbefalt.
 
For å beskrive det i litt grove trekk: Du regner alltid tilbake til Celcius via
 
chart?cht=tx&chl=T_C = aT + b
 
Hvor T er temperaturen i den andre temperaturenhenten og a og b er konstanter som avhenger av temperaturenheten gitt inn. Du kan da lage et array a og b (for a og b), som hver temperatur har koeffisienter for a og b. Eg
 

void main() {
   /* ... litt andre thing her */
   
   /* Vi antar at temperatur til celsius er paa formen T_C = a[temperatur_type-1] + b[temperatur_type-1]
    */
   double a[] = {/*element 0 */ <koeffisient_til_celcius >(1), 
                 /*element 1 */ <koeffisient til temperatur 2> ,
                 /*element 2 osv*/};
   double b[] = {/*element 0 */ <translasjon til celicus> (0),
                 /*element 1 */ <translasjon til temperatur 2>,
                /*element 2 osv*/};

    /* Du kan ogsaa lagre inn temperaturnavn hvis du vil skrive dem ut enkelt */
    const char ** temperature_names ={"Celcius", "delisle", /**osv*/};

    /* merk ingen if her, alt skjer via samme kode */
    scanf("%d", &temperature_type);
  
    printf("Please enter temperature in celsius: ");
    scanf("%f", &calculation);
    
    /* Her kommer det viktige: Du aksesserer arrays med heltall, og foerste element er alltid 0,
     * Siden du nummerer temperaturtypene med 1 som start, maa du trekke fra 1 for a faa riktig array
     * indeks
     */
    celsius = a[temperature_type-1]*calculation + b[temperature_type-1];

    printf("The temperature was given in %s and was \t\t%6.2f\n", temperature_names[temperature_type-1]);
    /* regn ut de andre temperaturene her:*/
    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 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);
}
Lenke til kommentar
Videoannonse
Annonse

Hva som skrives ut og hvordan det gjøres er "ikke" viktig, programmet skal ikke brukes til annet enn å lære litt  C.

 

Æ, ø og å får jeg komme tilbake til, ved å se på forslaget til PingEnt.

 

Ønsker å lage programmet slik at alle beregningene samles på ett sted, slik at de ikke gjentas flere steder i koden.

 

Grunnen til dette er at det blir lettere å gjøre endringer dersom man oppdager feil.

 

Jeg har gått gjennom resultatene av beregningene (da de var inkludert i IF setningene) og ser at noe er feil.

 

feil.jpg

 

Er det bedre måter å gjøre det på, eller er det "void" jeg bør sette meg inn i, ala slik du har gjort det?

 

Edit: Kan ikke stole på wikipedia, der er formlene feil :(

Endret av Teza
Lenke til kommentar

Bygg på eksempelet mitt med void convert_temperatures(float celsius), det er den beste måten å gjøre det på ut ifra det du kan nå. Dette er en "funksjon", dvs. en liste med statements som du kan kjøre fra andre steder i koden.

 

Fullfør endringen av programmet ved å legge alle temperaturene inn i funksjonen, og la alle if-branchene kalle opp funksjonen (sånn som det er vist i de to første if-branchene).

Lenke til kommentar

Fullfør endringen av programmet ved å legge alle temperaturene inn i funksjonen, og la alle if-branchene kalle opp funksjonen (sånn som det er vist i de to første if-branchene).

 

Denne fungerte, dog en bug jeg kom over da jeg kjørte det:

Hvis jeg bruker komma i stedet for punktum i temperaturen, så henger programmet?

 

 

 

#include <stdio.h>

int main()
{
        /*
        celsius = (fahrenheit - 32.) * (5. / 9.)
        celsius = kelvin - 273.15
        celsius = (rankine - 491.67) * (5. / 9.)
        celsius = (delisle + 100) * (2. / 3.)
        celsius = newton * (100. / 33.)
        celsius = reaumur * (5. / 4.)
        celsius = (romer - 7.5)* (40. / 21.)

        delisle = (celsius * (3. / 2.)) - 100;
        fahrenheit = (celsius * 1.80) + 32.;
        kelvin = celsius + 273.15;
        newton = celsius * (33. / 100.);
        rankine = (celsius * 1.80) + 491.67;
        reaumur = celsius * (4. / 5.);
        romer = (celsius * (21. / 40.)) + 7.50;

        Formlene er verifisert mot www.metric-conversions.org
        */

    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] Romer\n");
    printf("[0] Avslutt programmet\n\n");
    printf("Please enter temperature type: ");

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

    void convert_temperatures(
        float celsius) {
        delisle = (celsius * (3. / 2.)) - 100;
        fahrenheit = (celsius * 1.80) + 32.;
        kelvin = celsius + 273.15;
        newton = celsius * (33. / 100.);
        rankine = (celsius * 1.80) + 491.67;
        reaumur = celsius * (4. / 5.);
        romer = (celsius * (21. / 40.)) + 7.50;
    }


    scanf("%d", &temperature_type);

    if (temperature_type == 1) {
        printf("Please enter temperature in celsius: ");
        scanf("%f", &celsius );
        convert_temperatures(celsius);

        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 romer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 2) {
        printf("Please enter temperature in delisle: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius + 100) * (2. / 3.);
        convert_temperatures(celsius);

        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 romer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 3) {
        printf("Please enter temperature in fahrenheit: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 32.) * (5. / 9.);
        convert_temperatures(celsius);

        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 romer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 4) {
        printf("Please enter temperature in kelvin: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius - 273.15;
        convert_temperatures(celsius);

        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 romer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 5) {
        printf("Please enter temperature in newton: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius * (100. / 33.);
        convert_temperatures(celsius);

        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 romer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 6) {
        printf("Please enter temperature in rankine: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 491.67) * (5. / 9.);
        convert_temperatures(celsius);

        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 romer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 7) {
        printf("Please enter temperature in reaumur: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius * (5. / 4.);
        convert_temperatures(celsius);

        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 romer is \t\t %6.2f \n", romer);
    }
    else if (temperature_type == 8) {
        printf("Please enter temperature in romer: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 7.5)* (40. / 21.);
        convert_temperatures(celsius);

        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 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 

 

 

Lenke til kommentar

Correct.

Kompilatoren benytter ikke det franske systemet for desimalseperasjon, som vi i Norge gjør, men heller den engelske si stilen som usa og Storbritannia bruker.

 

Eksempel:

Bruk av .

float tall = 5.0;

Bruk av ,

void toinnput ( int tall, char tekst );

 

Det er vel mye grønt.

Hva med å samle utskriving i en funksjon?

 

 

#include <stdio.h>

int main()
{
        /*
        celsius = (fahrenheit - 32.) * (5. / 9.)
        celsius = kelvin - 273.15
        celsius = (rankine - 491.67) * (5. / 9.)
        celsius = (delisle + 100) * (2. / 3.)
        celsius = newton * (100. / 33.)
        celsius = reaumur * (5. / 4.)
        celsius = (romer - 7.5)* (40. / 21.)

        delisle = (celsius * (3. / 2.)) - 100;
        fahrenheit = (celsius * 1.80) + 32.;
        kelvin = celsius + 273.15;
        newton = celsius * (33. / 100.);
        rankine = (celsius * 1.80) + 491.67;
        reaumur = celsius * (4. / 5.);
        romer = (celsius * (21. / 40.)) + 7.50;

        Formlene er verifisert mot www.metric-conversions.org
        */

    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] Romer\n");
    printf("[0] Avslutt programmet\n\n");
    printf("Please enter temperature type: ");

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

    void convert_temperatures( float celsius ) {
        delisle = (celsius * (3. / 2.)) - 100;
        fahrenheit = (celsius * 1.80) + 32.;
        kelvin = celsius + 273.15;
        newton = celsius * (33. / 100.);
        rankine = (celsius * 1.80) + 491.67;
        reaumur = celsius * (4. / 5.);
        romer = (celsius * (21. / 40.)) + 7.50;
    }

    scanf("%d", &temperature_type);
    
    void print_temp() {
	printf( "\n" );
	if ( !temperature_type == 1 )
	    printf( "The temperature in celsius is \t\t %6.2f \n", celsius);
	if ( !temperature_type == 2 )
	    printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
	if ( !temperature_type == 3 )
	    printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
	if ( !temperature_type == 4 )
	    printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
	if ( !temperature_type == 5 )
	    printf( "The temperature in newton is \t\t %6.2f \n", newton);
	if ( !temperature_type == 6 )
	    printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
	if ( !temperature_type == 7 )
	    printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
	if ( !temperature_type == 8 )
	    printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }

    if (temperature_type == 1) {
        printf("Please enter temperature in celsius: ");
        scanf("%f", &celsius );
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 2) {
        printf("Please enter temperature in delisle: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius + 100) * (2. / 3.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 3) {
        printf("Please enter temperature in fahrenheit: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 32.) * (5. / 9.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 4) {
        printf("Please enter temperature in kelvin: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius - 273.15;
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 5) {
        printf("Please enter temperature in newton: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius * (100. / 33.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 6) {
        printf("Please enter temperature in rankine: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 491.67) * (5. / 9.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 7) {
        printf("Please enter temperature in reaumur: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius * (5. / 4.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 8) {
        printf("Please enter temperature in romer: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 7.5)* (40. / 21.);
        convert_temperatures(celsius);
	print_temp();
    }
    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 

 

 

Endret av kjeita
Lenke til kommentar

Eksempel:

Bruk av .

int tall = 5.0;

Det eksempelet gir ikke mening. 5.0 gir et flyttall, men det lagres direkte i en int, så 5 hadde gitt samme resultat.

 

Ellers smart samling av utskriving.

 

TS, selv om du "fikk lov" lenger oppe å skrive 5. uten null, vil jeg på det sterkeste oppfordre deg til å skrive 5.0 med null. 5. ser bare dumt ut.

Lenke til kommentar

Takker, det var den neste jeg tenkte på  :)

 

Kan du dog fortelle hvorfor denne ikke skriver ut noe, mens hvis jeg bruker følgende, så skriver den ut mange ganger?:

 

Gir ingen mening da koden ser lik ut..

 

 

 

    void print_temp() {
        printf( "\n" );
        if ( !temperature_type == 1 )
            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 romer is \t\t %6.2f \n", romer);
        if ( !temperature_type == 2 )
            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 romer is \t\t %6.2f \n", romer);
        if ( !temperature_type == 3 )
            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 romer is \t\t %6.2f \n", romer);
        if ( !temperature_type == 4 )
            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 romer is \t\t %6.2f \n", romer);
        if ( !temperature_type == 5 )
            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 romer is \t\t %6.2f \n", romer);
        if ( !temperature_type == 6 )
            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 romer is \t\t %6.2f \n", romer);
        if ( !temperature_type == 7 )
            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 romer is \t\t %6.2f \n", romer);
        if ( !temperature_type == 8 )
            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);
    }
    void print_temp() {
        printf( "\n" );
        if ( !temperature_type == 1 )
            printf( "The temperature in celsius is \t\t %6.2f \n", celsius);
        if ( !temperature_type == 2 )
            printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
        if ( !temperature_type == 3 )
            printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
        if ( !temperature_type == 4 )
            printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
        if ( !temperature_type == 5 )
            printf( "The temperature in newton is \t\t %6.2f \n", newton);
        if ( !temperature_type == 6 )
            printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
        if ( !temperature_type == 7 )
            printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
        if ( !temperature_type == 8 )
            printf( "The temperature in romer is \t\t %6.2f \n", romer);
    } 

 

 

Endret av Teza
Lenke til kommentar

Legg merke til at det er et utropstegn i hver if-setning, det betyr "not".

 

Så den skriver ut alle temperaturene (fungerer som tidligere) ved å bruke:

    void print_temp() {
        printf( "\n" );
            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);
            printf( "The temperature in romer is \t\t %6.2f \n\n", romer);
    }

og den kan programeres til å ekskludere enkelte linje med IF og ! om jeg forstår det riktig.

Endret av Teza
Lenke til kommentar

 

Eksempel:

Bruk av .

int tall = 5.0;

Det eksempelet gir ikke mening. 5.0 gir et flyttall, men det lagres direkte i en int, så 5 hadde gitt samme resultat.

Oi, den overså jeg. Det stod egentlig kun: tall=5.0, men når jeg rettet på tabulatorfeilene mine så tenkte jeg at jeg måtte deklarere den. Jeg var nok mere opptatt av det med rett mellomrom enn den der :(

 

@Teza,

if ( !temperature_type == 1 )

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 romer is \t\t %6.2f \n", romer);

Vil ikke virke. Du må skrive:

if ( !temperature_type == 1 ) {

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 romer is \t\t %6.2f \n", romer);
}

Du kan sløyfe {} hvis hva som er i if-løkken kun består av en enkel linje.

 

Her er hva eksemplet egentlig gjør.

temp_type = 1 er Celsius

Hvis temp_type IKKE er 1, så skriver den ut Celsius.

Hvis temp_type IKKE er 2, så skriver den ut Delisle.

 

Poenget var å få samme utskrift som du hadde tidligere, men uten å måtte repetere samme printf() noen plasser. Noe som gjør det lettere å redigere det senere

Lenke til kommentar

Tok en pause til i dag for å tømme hodet litt, men føler meg fremdeles ganske dum.

    void print_temp() {
	printf( "\n" );
	if ( !temperature_type == 1 )
	    printf( "The temperature in celsius is \t\t %6.2f \n", celsius);
	if ( !temperature_type == 2 )
	    printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
	if ( !temperature_type == 3 )
	    printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
	if ( !temperature_type == 4 )
	    printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
	if ( !temperature_type == 5 )
	    printf( "The temperature in newton is \t\t %6.2f \n", newton);
	if ( !temperature_type == 6 )
	    printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
	if ( !temperature_type == 7 )
	    printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
	if ( !temperature_type == 8 )
	    printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }

Slik jeg forstår denne sjekker programmet hver IF setning, og dersom:

 

temperature_type == 1 ikke er 1 skrives: celsius, og hopper til neste linje hvor

temperature_type == 2 ikke er 2 skrives: delisle, og hopper til neste linje hvor

temperature_type == 3 ikke er 3 skrives: fahrenheit, og så videre.

 

Så slik jeg leser koden, skal den skrive ut alle temperaturene, untatt for det valget som er gjort.

 

Dog når jeg kjører denne koden, skriver den ikke ut noe som helst, uansett hvilket valg jeg tar?

Så noe gjør jeg feil, eller må jeg laste inn et tilleggs bibliotek for denne?

 

 

 

#include <stdio.h>

int main()
{
    while(1){

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

    void convert_temperatures( float celsius ) {
        delisle = (celsius * (3. / 2.)) - 100;
        fahrenheit = (celsius * 1.80) + 32.;
        kelvin = celsius + 273.15;
        newton = celsius * (33. / 100.);
        rankine = (celsius * 1.80) + 491.67;
        reaumur = celsius * (4. / 5.);
        romer = (celsius * (21. / 40.)) + 7.50;
    }

    void print_temp() {
	printf( "\n" );
	if ( !temperature_type == 1 )
	    printf( "The temperature in celsius is \t\t %6.2f \n", celsius);
	if ( !temperature_type == 2 )
	    printf( "The temperature in delisle is \t\t %6.2f \n", delisle);
	if ( !temperature_type == 3 )
	    printf( "The temperature in fahrenheit is \t %6.2f \n", fahrenheit);
	if ( !temperature_type == 4 )
	    printf( "The temperature in kelvin is \t\t %6.2f \n", kelvin);
	if ( !temperature_type == 5 )
	    printf( "The temperature in newton is \t\t %6.2f \n", newton);
	if ( !temperature_type == 6 )
	    printf( "The temperature in rankine is \t\t %6.2f \n", rankine);
	if ( !temperature_type == 7 )
	    printf( "The temperature in reaumur is \t\t %6.2f \n", reaumur);
	if ( !temperature_type == 8 )
	    printf( "The temperature in r\x9bmer is \t\t %6.2f \n", romer);
    }

    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] Romer\n");
    printf("[0] Avslutt programmet\n\n");
    printf("Please enter temperature type: ");
    scanf("%d", &temperature_type);

    if (temperature_type == 1) {
        printf("Please enter temperature in celsius: ");
        scanf("%f", &celsius );
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 2) {
        printf("Please enter temperature in delisle: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius + 100) * (2. / 3.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 3) {
        printf("Please enter temperature in fahrenheit: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 32.) * (5. / 9.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 4) {
        printf("Please enter temperature in kelvin: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius - 273.15;
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 5) {
        printf("Please enter temperature in newton: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius * (100. / 33.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 6) {
        printf("Please enter temperature in rankine: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 491.67) * (5. / 9.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 7) {
        printf("Please enter temperature in reaumur: ");
        scanf("%f", &convert_to_celsius);
        celsius = convert_to_celsius * (5. / 4.);
        convert_temperatures(celsius);
        print_temp();
    }
    else if (temperature_type == 8) {
        printf("Please enter temperature in romer: ");
        scanf("%f", &convert_to_celsius);
        celsius = (convert_to_celsius - 7.5)* (40. / 21.);
        convert_temperatures(celsius);
	print_temp();
    }
    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 

 

 

 

Lenke til kommentar

Tok en pause til i dag for å tømme hodet litt, men føler meg fremdeles ganske dum.

Dess mer du tømmer, dess dummere blir du. :p Nei da, C og programmering er vanskelig, og det tar lang tid å lære. Du bør skaffe deg et steg-for-steg læreverk (f.eks. en bok).

 

Edit: for grunnen til at koden ikke skriver ut noe, se neste innlegg. Les det helst før dette innlegget.

 

Når jeg kompilerer koden din får jeg endel warnings:

temp_printfunk.c:110:9: warning: implicit declaration of function ‘exit’ [-Wimplicit-function-declaration]

         exit(0);

         ^

temp_printfunk.c:116:5: warning: implicit declaration of function ‘system’ [-Wimplicit-function-declaration]

     system ("pause");

     ^

Disse funksjonene finnes sikkert i diverse header-filer. Men i første omgang vil jeg be deg om å ikke bruke dem.

 

For å avslutte programmet, bryt heller ut av while-løkka ved å skrive break; La programmet avsluttes ved at det når slutten av main. Dette er bedre stil.

 

system() utfører en kommando i operativsystemet. Dette er stort sett uønsket, fordi kommandoene ikke er like på alle OS. Hverken pause eller cls finners på Linux. Derfor får jeg bare feilmelding underveis i programmet:

sh: 1: pause: not found

sh: 1: cls: not found

 

Her drøftes problemet: https://stackoverflow.com/questions/1391548/why-doesnt-getchar-wait-for-me-to-press-enter-after-scanf

 

Legg merke til svaret "I would suggest reading an actual line (use fgets(3)) and then using sscanf() to scan the string."

 

cls er umulig å gjøre uten system.

Endret av Emancipate
Lenke til kommentar

Ble tipset om denne boken i begynnelsen av tråden, men er litt usikker på om det kanskje finnes bedre alternativer.

Det sier seg selv at den ikke passer. "This book is for the knowledgeable C programmer,".

 

Et søk på beginner c programming lister denne øverst: https://www.amazon.com/Programming-Absolute-Beginners-Guide-3rd/dp/0789751984/ref=sr_1_5?s=books&ie=UTF8&qid=1509231557&sr=1-5&keywords=c+programming

 

Den ser bra ut, men ikke kjøp kindle-versjonen (iflg. anmeldelsene).

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...