• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak poprawić program przeliczający temperaturę w języku C. ?

Object Storage Arubacloud
+2 głosów
848 wizyt
pytanie zadane 31 października 2016 w C i C++ przez MadMax Początkujący (260 p.)
edycja 31 października 2016 przez MadMax

Witam, 

Właśnie robię na zajęcia program przeliczający temperaturę. Działanie tej aplikacji ma być następujące:

1.Wybór przelicznika w menu np. Cel na Kelv, Fahr na Kelv etc.,

2.Obliczenie danej temperatury,

3. Możliwość zamknięcia pętli.

Dopiero zaczynam przygodę z programowaniem także jest spora szansa , że będzie w nim sporo błędów. Jednak liczę na jakąś dobrą radę i sugestię co poprawić :). 

#include <stdio.h>
using namespace std;
float cel_na_fahr(float x);
float fahr_na_cel(float x);
int main()

{
    float fahrenheit, celcjusz, x, y , a ,b , c, d ;
    char wybor;
    int i;
    printf("1  --> Z Celcjusza do Fahrenheita\n");
    printf("2  --> Z Fahrenheita do Celcjusza\n");
    printf("3  --> Z Celsiusza na Kelvina\n");
    printf("4  --> Z Kelvina na Celsiusza\n");
    printf("5  --> Z Kelvina na Fahrenheita\n");
    printf("6  --> Z Fahrenheita na Kelvina\n");
    scanf("%s",&wybor);


  //  if(wybor=='c' || wybor=='C')
  switch(wybor)
        {
            case '1':
                printf("podaj temperature w stopniach Celcjusza:");
                scanf("%f",&celcjusz);
                x = cel_na_fahr(celcjusz);
                printf("Temperatura w stopniach Fahrenheita wynosi: %3.3f",x);

  //  else if (wybor =='f' || wybor =='F')
            case '2':
                printf("podaj temperature w stopniach Fahrenheita:");
                scanf("%f",&fahrenheit);
                y = fahr_na_cel(fahrenheit);
                printf("Temperatura w stopniach Celcjusza wynosi: %3.3f",y);

   // else
            case '3':
                printf("podaj temperature w stopniach celsiusza:")
                scanf("%f", &celcjusz);
                a = fahr_na_kel(celcjusze);
                printf("Temperatura w stopniach Kelvina wynosi: %3.3f",a);

            case'4':
                printf("Podaj temperature w stopniach Kelvina:");
                scanf("%f, &kelvina ");
                b = kel_na_cel(kelvina);
                print("Temperatura w stopniach Celcjusza: %3,3f",b)
            case'5':
                printf("Podaj temperature w stopniach Kelvina:");
                scanf("%f",kelvina);
                c = kel_na_fahr(kelvina);
                printf("Temperatura w stopniach Fahrenheita: %3,3",c);

            case'6':
                printf("Podaj temperature w stopniach Fahrenheita:");
                scanf("%f",fahrenheit);
                d = fahr_na_kel(fahrenheit);
                printf("Temperatura w stopniach Kelvina:%3,3",d)


            printf("Podaj poprawna litere nastepnym razem");



        }

   return 0;
}
float cel_na_fahr (float x)
{

    return (x * (9.0/5.0)) + 32;

}
float fahr_na_cel (float x)
{

    return (5.0/9.0)*(x-32);

}

Nie wiem co dalej zrobić(wiem ,że muszę dodać prototypy , ale nie wiem jak xd). 
 

Dziękuje za poświęcony czas ! 

komentarz 31 października 2016 przez niezalogowany
edycja 31 października 2016

Ale co ty chcesz w nim poprawić? Nie jest idealny bo można by go skrócić pewnie o połowę, ale wygląda ok

@edit brakuje break'ów w casea'ch, zapoznaj się w ze słowem default dla switcha, nie potrzebujesz osobnych zmiennych do każdej konwersji (x, y, a, b, c, d), przecież wystarczyłaby jedna zmienna np "result"

1 odpowiedź

+4 głosów
odpowiedź 31 października 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
wybrane 2 listopada 2016 przez MadMax
 
Najlepsza

Dokładnie, jak na początki programowania wygląda to całkiem nieźle.
Próbowałeś go kompilować? Wyrzuca sporo błędów... Oprócz kosmetycznych poprawek o których pisał shead przydałoby się pamiętać o innych drobiazgach, które mogą zepsuć dużo nerwów rozpoczynającym naukę języka C, tzn:

  • pamiętać o znaku ampersanda & przy scanfie [nr linii Twojego kodu]
  • kończeniu każdej instrukcji (u Ciebie wywołań funkcji) średnikiem [38]
  • uważać, by nie utworzyć zbyt długiego łańcucha znaków [45]
  • konsekwentnie trzymać się nazewnictwa funkcji printf() [47]
  • niepotrzebnie nie tworzyć zmiennych, jeżeli ich później nie użyjemy [10]
  • pamiętać o znaku specyfikatora % w funkcji printf() [58]
  • użyć polecenia default gdy żaden z case'ów nie zostanie uruchomiony [61]

Co dalej? Musisz dodać prototypy funkcji na wstępie programu, co już zrobiłem w poniżej poprawionym kodzie oraz zdefiniować funkcje, których będziesz używał, to już zadanie dla Ciebie. Wydaje mi się, że właśnie o nich powinieneś więcej poczytać, by docenić możliwość przesyłania argumentów i zwiększenia czytelności kodu np. tutaj Funkcje : ).

#include <stdio.h>

float cel_na_fahr(float x);
float fahr_na_cel(float x);
float kel_na_cel(float x);
float cel_na_kel(float x);
float fahr_na_kel(float x);
float kel_na_fahr(float x);

int main() {
    float temp, wynik;
    char wybor;
    printf("1  --> Z Celcjusza do Fahrenheita\n");
    printf("2  --> Z Fahrenheita do Celcjusza\n");
    printf("3  --> Z Celsiusza na Kelvina\n");
    printf("4  --> Z Kelvina na Celsiusza\n");
    printf("5  --> Z Kelvina na Fahrenheita\n");
    printf("6  --> Z Fahrenheita na Kelvina\n");
    scanf("%s", &wybor);
    switch (wybor) {
    case '1':
        printf("podaj temperature w stopniach Celcjusza:");
        scanf("%f", &temp);
        wynik = cel_na_fahr(temp);
        printf("Temperatura w stopniach Fahrenheita wynosi: %f", wynik);
        break;
    case '2':
        printf("podaj temperature w stopniach Fahrenheita:");
        scanf("%f", &temp);
        wynik = fahr_na_cel(temp);
        printf("Temperatura w stopniach Celcjusza wynosi: %f", wynik);
        break;
    case '3':
        printf("podaj temperature w stopniach celsiusza:");
        scanf("%f", &temp);
        wynik = fahr_na_kel(temp);
        printf("Temperatura w stopniach Kelvina wynosi: %f", wynik);
        break;
    case'4':
        printf("Podaj temperature w stopniach Kelvina:");
        scanf("%f", &temp );
        wynik = kel_na_cel(temp);
        printf("Temperatura w stopniach Celcjusza: %f", wynik);
        break;
    case'5':
        printf("Podaj temperature w stopniach Kelvina:");
        scanf("%f", &temp);
        wynik = kel_na_fahr(temp);
        printf("Temperatura w stopniach Fahrenheita: %f", wynik);
        break;
    case'6':
        printf("Podaj temperature w stopniach Fahrenheita:");
        scanf("%f", &temp);
        wynik = fahr_na_kel(temp);
        printf("Temperatura w stopniach Kelvina: %f", wynik);
        printf("Podaj poprawna litere nastepnym razem");
        break;
    default :
        printf("Podales niepoprawny znak.");
    }
    return 0;
}

float cel_na_fahr (float x) {
    return (x * (9.0 / 5.0)) + 32;
}

float fahr_na_cel (float x) {
    return (5.0 / 9.0) * (x - 32);
}

float kel_na_cel(float x) {

}

float cel_na_kel(float x) {

}

float fahr_na_kel(float x) {

}

float kel_na_fahr(float x) {

}

Piszesz, że jeszcze chcesz zapętlić program, spokojnie - na razie ogarnij co się dzieje w kodzie wyżej, a później wystarczy tylko pewny fragment kodu zawrzeć w pętlę ; )
Nie jest źle, oby tak dalej!
Powodzenia w dalszym programowaniu : )

1
komentarz 2 listopada 2016 przez MadMax Początkujący (260 p.)
Dzięki za pomoc ! :) Teraz widzę , że robiłem to trochę okrężną drogą. postaram się wprowadzić w życie twoje rady. :)
1
komentarz 2 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
Nie ma sprawy : )
Cieszę się, że mogłem pomóc ; )

Podobne pytania

0 głosów
1 odpowiedź 6,221 wizyt
pytanie zadane 20 października 2016 w C# przez Serengeti Nowicjusz (150 p.)
0 głosów
0 odpowiedzi 162 wizyt
pytanie zadane 20 czerwca 2022 w Sprzęt komputerowy przez bazyl8796 Obywatel (1,020 p.)
+1 głos
2 odpowiedzi 1,245 wizyt
pytanie zadane 26 lipca 2016 w C i C++ przez dziubi21 Początkujący (310 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...