Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czy da się sensownie połączyć switch i pętlę do while. Prośba o pomoc.

Ostatnio zmodyfikowano 2022-01-25 21:09
Autor Wiadomość
Gosia_2003
Temat założony przez niniejszego użytkownika
Czy da się sensownie połączyć switch i pętlę do while. Prośba o pomoc.
» 2022-01-25 20:21:20
Witam Wszystkich,
Piszę, a w zasadzie napisałam program z kilkoma zadaniami. Mam jednak problem z jednym zadaniem, otóż w tym zadaniu użytkownik ma dokonać wyboru 1 z 2 i po dokananiu wyboru chciałabym dodać możliwość powtórzenia obliczenia na życzenie użytkownika. Jednak nie wiem jak to zrobić . Próbowałam użyć pętli do while, natomiast to nie działa, w sumie rozumiem dlaczego, bo gdy używam switch to wiadomo, że po case jest break, który kończy działanie switcha.

Tak wygląda ta część programu z zadaniem:
C/C++
case 5:

{
   
   
   
float stopnieC, stopnieF, stopnieC2, stopnieF2;
   
int wybor;
   
char again;
   
   
   
   
   
cout << "Funkcja, ktora konwertuje jednostki temperatur Celcjusza i Fahrenheita" << endl;
   
cout << "----------------------------------------------------------------------" << endl;
   
cout << endl;
   
   
   
   
   
cout << "[6] Z Celsjusza na Fahrenheita" << endl;
   
cout << "[7] Z Fahrenheita na Celsjusza" << endl;
   
cin >> wybor;
   
   
do {
       
       
switch( wybor )
       
       
case 6
   
:
       
{
           
cout << "Ile stopni: ";
           
cin >> stopnieC;
           
stopnieF =(( 9.0 / 5.0 ) * stopnieC + 32 );
           
cout << stopnieC << " stopni Celsjusza to = " << stopnieF << "stopni Fahrenheita" << endl;
           
cout << endl;
           
           
       
}
       
break;
   
case 7:
       
{
           
cout << "Ile stopni: ";
           
cin >> stopnieF2;
           
stopnieC2 = stopnieF2 * - 17, 22;
           
cout << stopnieF2 << " stopni Fahrenheita to  = " << stopnieC2 << "stopni Celsjusza" << endl;
           
cout << "Czy powtorzyc zadanie/polecenie : [T/N] ";
           
cin >> again;
           
           
       
}
       
break;
       
       
cout << "Czy powtorzyc zadanie/polecenie : [T/N] ";
       
cin >> again;
       
       
   
}
   
while( again == 't' || again == 'T' );
   
   
}

Czy może popełniam jakiś błąd logiczny, lub powinnam użyć innej pętli? Tak, by użytkownik po wyborze i wykonaniu obliczenia mógł ponownie dokonać wyboru.
Będę wdzięczna za pomoc.
Pozdrawiam.
P-179228
DejaVu
» 2022-01-25 20:45:33
kod jest źle posklejany. To się w ogóle kompiluje?
P-179229
Gosia_2003
Temat założony przez niniejszego użytkownika
» 2022-01-25 21:01:02
Tak i działa.
Przelicza normalnie, pokazuje się komunikat z informacją o obliczeniach.
Uciełam po prostu początek.
Teraz lepiej wygląda:
   #include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <string>

using namespace std;

int main ()
{

    int wybor;
    cout<<" ---------------"<<endl;
    cout<<" Zadanie nr 1 - <<endl;
    cout<<" Zadanie nr 2 - <<endl;
    cout<<" Zadanie nr 3 - <<endl;
    cout<<" Zadanie nr 4 - <<endl;
    cout<<" Zadanie nr 5 - <<endl;
    cout<<" ---------------"<<endl;
    cout<<" Wybierz numer zadania: ";
    cin>>wybor;
    cout<<" --------------"<<endl;



    switch(wybor)

    {case 5:

{
   
   
    float stopnieC, stopnieF, stopnieC2, stopnieF2;
    int wybor;
    char again;
   
   
   
   
    cout << "Funkcja, ktora konwertuje jednostki temperatur Celcjusza i Fahrenheita" << endl;
    cout << "----------------------------------------------------------------------" << endl;
    cout << endl;
   
   
   
   
    cout << "[6] Z Celsjusza na Fahrenheita" << endl;
    cout << "[7] Z Fahrenheita na Celsjusza" << endl;
    cin >> wybor;
   
    do {
       
        switch( wybor )
       
        case 6
    :
        {
            cout << "Ile stopni: ";
            cin >> stopnieC;
            stopnieF =(( 9.0 / 5.0 ) * stopnieC + 32 );
            cout << stopnieC << " stopni Celsjusza to = " << stopnieF << "stopni Fahrenheita" << endl;
            cout << endl;
           
           
        }
        break;
    case 7:
        {
            cout << "Ile stopni: ";
            cin >> stopnieF2;
            stopnieC2 = stopnieF2 * - 17, 22;
            cout << stopnieF2 << " stopni Fahrenheita to  = " << stopnieC2 << "stopni Celsjusza" << endl;
            cout << "Czy powtorzyc zadanie/polecenie : podany identyfikator nie istnieje ";
            cin >> again;
           
           
        }
        break;
       
        cout << "Czy powtorzyc zadanie/polecenie : podany identyfikator nie istnieje ";
        cin >> again;
       
       
    }
    while( again == 't' || again == 'T' );
   
   
}
    }


    break;
    default:
        cout << "Niepoprawny wybor, nie ma takiego zadania." << endl;
        break;


    }
    return 0;
P-179230
nanoant20
» 2022-01-25 21:01:15
obliczenia też są niepoprawne 32°F to 0°C
stopnieC2 = stopnieF2 * (- 17, 22); <- błędny wynik
stopnieC2 = ( (float) stopnieF2 - 32 ) * 5 / 9;

Stopnie Fahrenheita na stopnie Celsjusza
°C = (°F - 32) x 5/9

Stopnie Celsjusza na stopnie Fahrenheita
°F = (°C x 9/5) + 32

//edit
listing wstawiaj między [cpp] ... [/cpp] lub [code src="C++"] ... [/code]
Kurs STC
Wstawianie kodu źródłowego

C/C++
#include <iostream>
#include <iomanip>  
//setw, setfill, setprecision
#include <limits>    //std::numeric_limits

using namespace std;

int main()
{
   
float stopnieC, stopnieF, stopnieC2, stopnieF2;
   
int wybor;
   
char again;
   
   
cout << "Konwertuje jednostki temperatur Celcjusza i Fahrenheita" << endl;
   
cout << endl;
   
   
do
   
{
       
cout << "[1] Z Celsjusza na Fahrenheita" << endl;
       
cout << "[2] Z Fahrenheita na Celsjusza" << endl;
       
       
while( !( cin >> wybor ) ||( wybor < 1 ) ||( wybor > 2 ) )
       
{
           
cout << "wprowadzony znak nie jest liczba lub jest poza zakresem" << endl;
           
cout << "Prosze podac liczbe (1 - 2): ";
           
std::cin.clear();
           
std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
           
continue;
       
}
       
       
switch( wybor )
       
{
       
case 1:
           
cout << "Ile stopni: ";
           
cin >> stopnieC;
           
stopnieF =(( float ) stopnieC * 9 / 5 ) + 32;
           
cout << stopnieC << " stopni Celsjusza to = " << stopnieF << " stopni Fahrenheita" << endl;
           
cout << endl;
           
break;
       
case 2:
           
cout << "Ile stopni: ";
           
cin >> stopnieF2;
           
stopnieC2 =(( float ) stopnieF2 - 32 ) * 5 / 9;
           
cout << stopnieF2 << " stopni Fahrenheita to  = " << stopnieC2 << " stopni Celsjusza" << endl;
           
break;
           
/*
        default:
            std:: cout<< "\nnieprawidlowa operacja" << "\n";
            break;
        */
       
}
       
//czyscimy strumien wejsciowy std::cin
       
std::cin.clear();
       
std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
       
       
cout << "Czy powtorzyc zadanie/polecenie : [T/N] ";
       
cin >> again;
   
}
   
while( again == 't' || again == 'T' );
   
   
return 0;
}

//edit
Faktycznie ta pętla do while jest bez sensu, do usunięcia, bo nie działa i nie mam pomysłu jak ją zrobić.
Przecież naniosłem poprawki
//edit dodalem jeszcze jedna pętle while
P-179231
Gosia_2003
Temat założony przez niniejszego użytkownika
» 2022-01-25 21:09:32
Dzięki za uwagi.
Dziękuję też serdecznie za pomoc, widzę, że dużo nauki przede mną.
"Faktycznie ta pętla do while jest bez sensu, do usunięcia, bo nie działa i nie mam pomysłu jak ją zrobić"-
Sorki, nie ogarnełam, że już mi to naprawiłeś:)
Pozdrawiam Was:)
P-179232
« 1 »
  Strona 1 z 1