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

VPS Starter Arubacloud
+2 głosów
973 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,374 wizyt
pytanie zadane 20 października 2016 w C# przez Serengeti Nowicjusz (150 p.)
0 głosów
0 odpowiedzi 181 wizyt
pytanie zadane 20 czerwca 2022 w Sprzęt komputerowy przez bazyl8796 Obywatel (1,020 p.)
+1 głos
2 odpowiedzi 1,362 wizyt
pytanie zadane 26 lipca 2016 w C i C++ przez dziubi21 Początkujący (310 p.)

92,970 zapytań

141,934 odpowiedzi

321,168 komentarzy

62,299 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...