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

Pętla switch - działanie

Object Storage Arubacloud
0 głosów
463 wizyt
pytanie zadane 1 lutego 2018 w C i C++ przez Rizenek Nowicjusz (220 p.)

Witam, Mam do napisania projekt programistyczny, chciałbym go napisać sam także wkleje tylko kawałek kodu gdzie prosiłbym o pomoc. Otóż Muszę przedstawić rejs statku, który ma przemieszczać się po kilku stacjach (ma byc podana odleglosc, srednie spalanie, pytanie o potrzebe zatankowania itp.) I chciałbym zrobić menu które pokazywałoby na której stacji jestem. np. Jestem na stacji A, i pozycja nr. 1 (Stacja B - 4000mil) jak nacisne 1 chcialbym zeby poplynal na stacje B i wyswielil "Aktualna stacja B" i w tym momencie bylby 2 mozliwosci powrot na stacje A lub plyniecie na stacje C, jak bede na C to stacja B i D wyswielona. na stacji D mialby byc zaladunek ale to juz dopracuje pozniej.

Chyba ze jest jakiś łatwiejszy sposób jak to wykonać to proszę o jakiś pomysł, zaznaczę że dopiero zaczynam z programowaniem c++ także proszę o wyrozumiałośc. Pozdrawiam.

 

for(;;)
    {
        cout <<endl;
        cout << "Aktaulna przystan:  "<<A<<endl;
        cout << "----------------------"<<endl;
        cout << "Trasa rejsu"<<endl;
        cout << "----------------------"<<endl<<endl;
        cout << "1." << B<<endl;
        cout << "2." << C<<endl;
        cout << "3." << D<<endl;
        cout << "4." << E<<endl;
        cout << "5." << F<<endl;
        cout << "6." << G<<endl;
        wybor=getch();
        switch (wybor)
        {
        case '1':

            break;
        case '2':

            break;
        default: cout << "Nie ma takiej opcji w menu!";
        }
        getchar();getchar();
        system("cls");

    }

 

1
komentarz 1 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
Trochę więcej szczegółów. Podaj jakiś przykładowy listing konsoli programu jako symulację jego działania.
komentarz 1 lutego 2018 przez Rizenek Nowicjusz (220 p.)

 

 

Stan

paliwa

(t)   w

dniu

Trasa rejsu

Odleglość

 olej

ciężki

olej

lekki

 

Mm

wejścia

wyjścia

wejścia

wyjścia

Zaladunek 5-dniowy

 

 

718,56

 

110,00

Richard Bay

 

-

 

 

 

San Nicolas

4204

 

 

 

 

Victoria

2177

 

 

 

 

Philadelphia

4058

 

 

 

 

Montreal

1665

 

 

 

 

Przejście torem wodnym

200

 

 

 

 

Chicago

1100

 

 

 

 

Tutaj mam tabelke z trasą statku, i chciałbym to przedstawić drogę ze stacji 1 na 2 wraz z dodatkowymi parametrami, ale chodzi mi głównie jak przedstawić mechanikę tego rejsu.

Ja to widzę tak że jestem na stacji A - ( "Aktualna stacja A" 1. Wypłyń na San Nicolas) potem jak wybiore 1, chcialbym zeby byl napis Aktualna stacja B, i teraz zeby byla 3 opcja, czyli musiałbym zrobić takie menu w menu itp. czy może jest jakieś łatwiejsze wyjście?

Może ja poprostu wyobrażam to sobie zbyt skomplikowanie, dlatego chciałbym jakąś pomoc ;)

2 odpowiedzi

+2 głosów
odpowiedź 1 lutego 2018 przez Beginer Pasjonat (22,110 p.)
wybrane 3 lutego 2018 przez Rizenek
 
Najlepsza
Projekt nie wydaje się skomplikowany ale trochę zawile go opisujesz. Kierunek działania oraz algorytm z budową kolejnych menu jest poprawny.
komentarz 3 lutego 2018 przez Rizenek Nowicjusz (220 p.)

Projektowe zadanie programistyczne:

 

Cel zadania: Zaprojektowanie algorytmu i zrealizowanie programu planowania uzupełniania zapasu (bunkrowania) paliwa w oceanicznym rejsie frachtowca

 

Założenia i dane:

Znane są:

- początkowy stan paliwa (w tonach) w zbiornikach,

- normy zużycia (w tonach na dobę) paliwa dwóch rodzajów (ciężkie i lekkie) odpowiednio w porcie

i na morzu

- planowany czas pobytu w porcie: 1 doba

- ekonomiczna prędkość podróżna - stała: 12,5 węzła

- odległości odcinków trasy rejsu określone w milach morskich (Mm)

 

Data rozpoczęcia podroży - wyjścia z portu określana przez użytkownika programu („armatora / kapitana”). Należy uwzględnić pięciodniowy postój podczas trwania załadunku w porcie wyjścia.

 

Zadania programu:

- obliczenie czasu (w dobach) przepłynięcia pomiędzy kolejnymi portami rejsu

z określeniem planowanej daty wejścia i wyjścia z kolejnego portu

- wyznaczanie wielkości pozostałego stanu / poziomu paliwa

- wskazanie portu w którym wystąpi konieczność uzupełniania paliwa

- oszacowanie calego, ogólnego czasu trwania podróży od portu początkowego do końcowego

 

 

Przykładowe dane do zadania:

 

Nazwy portów i odleglości

 

 

 

Stan

paliwa

(t) w

dniu

Trasa rejsu

Odleglość

olej

ciężki

olej

lekki

 

Mm

wejścia

wyjścia

wejścia

wyjścia

Zaladunek 5-dniowy

 

 

718,56

 

110,00

Richard Bay

 

-

 

 

 

San Nicolas

4204

 

 

 

 

Victoria

2177

 

 

 

 

Philadelphia

4058

 

 

 

 

Montreal

1665

 

 

 

 

Przejście torem wodnym

200

 

 

 

 

Chicago

1100

 

 

 

 

 

 

Dane dot. prędkości statku i zużycia paliwa

Prędkość

zużycie paliwa

(tony / dobę)

 

(węzły)

ciężkiego

lekkiego

 

12,5

28,00

2,00

W morzu

0

1,00

3,50

Przy nabrzeżu

 

 

 

Dodatkowe – opcjonalne funkcje projektowanego programu: utworzenie graficznego/semigraficznego wykresu obrazującego stan paliwa (w określonym porcie w planowanym dniu wyjścia)

 


Tutaj jest całe moje zadanie, poniżej wstawie kod do czego doszedłem jak narazie, na obecną chwilę nie wiem dlaczego nie działa mi sprawdzanie daty, mogę wpisać byle co, tylko warunek podania zbyt wysokiego roku wyświetla błąd.

#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <cstdlib>
#include <conio.h>
#include <unistd.h>
#include <dos.h>  //instrukcja dla preprocesora dla funkcji Sleep()
//funkcja Sleep(czas w milisekundach) czeka, spowalnia program
//funkcja sleep(czas w sekundach)



using namespace std;


double zbiornik1=500, zbiornik2=80, ile_port, ile_morze, bak1=800, bak2=120, bak11, bak22;
int dzien, miesiac, rok;
char wybor;
double postoj, silnik, tankowanie;
double droga[7]= {4204,2177, 4058, 1665, 200, 1110};
string stacja[7]= {"Richard_Bay", "San_Nicolas", "Victoria","Philadelphia", "Montreal", "Tor_wodny", "Chicago;"};

void _tankowanie();

void _sprawdz_date()
{
    if ((dzien > 31) && (dzien < 0))
    {
        cout << "Niepoprawny dzien..";
        cin >> dzien;
    }
    if ((miesiac >12) && (miesiac <0))
    {
        cout << "Niepoprawny miesiac";
        cin >> miesiac;
    }
    if (rok > 2018)
    {
        cout << "Zaplanuj podroz w tym roku";
        cin >> rok;
    }
    cout << "Rozpoczecie rejsu ustawione na: " <<dzien<<"/"<< miesiac << "/"<< rok<<" roku."<<endl;
}
void _stan_paliwa()
{
    cout << "Stan paliwa ciezkiego wynosi: " << zbiornik1 << "ton" << endl;
    cout << "Stan paliwa lekkiego wynosi: " << zbiornik2 << "ton" << endl;
    if (zbiornik1 < 200)
    {
        silnik == 1;
        tankowanie == 1;
        cout << "Uwaga!, Zbiornik z paliwem ciezkim jest prawie pusty, zalecane jest tankowanie";
    }
    if (zbiornik2 < 40)
    {
        silnik == 1;
        tankowanie == 1;
        cout << "Uwaga!, Masz malo paliwa w zbiorniku lekkiego paliwa, zatankuj!";
    }
    if (zbiornik1 == 0 && zbiornik2 == 0)
    {
        silnik == 0;
        tankowanie == 0;
        cout << "Stan krytyczny, nie mozesz dalej plynac!!!";
    }
    if (zbiornik1 > 400 && zbiornik2 > 120)
    {
        tankowanie == 0;
        cout << "Masz jeszcze ponad polowe baku, mozesz spokojnie plynac dalej";
    }
    if (zbiornik1 > 650 && zbiornik2 > 90)
    {
        tankowanie == 0;
        cout << "Zbiornik paliwa > 80%, Mozesz spokojnie plynac";
    }
};
void _czy_tankowac()
{
    cout <<endl;
    cout << "Czy chcesz zatankowac?"<<endl;
    cout << "----------------------"<<endl;
    cout << "1. Tak"<<endl;
    cout << "2. Nie"<<endl<<endl;
    wybor=getch();
    switch (wybor)
    {
    case '1':
        _tankowanie();
        break;
    case '2':
        cout << "OK, Ruszamy" <<endl;
        cout << "Stan paliwa to: " << zbiornik1<< "paliwa ciezkiego i " << zbiornik2 << " paliwa lekkiego. ";
        break;
    default:
        cout << "Nie ma takiej opcji w menu!";
    }
    getchar();
    system("cls");

};


void _tankowanie()
{
    bak11 = (bak1 - zbiornik1);
    cout << "TANKOWANIE ...."<<endl<<endl;
    Sleep(4000);
    cout << "Zatankoawno: "<<bak11<<"ton paliwa ciezkiego"<<endl;
    zbiornik1=bak1;
    cout << "Masz pelny bak paliwa, GRATULACJE"<<endl<<endl;

    bak22 = (bak2 - zbiornik2);
    cout << "TANKOWANIE ...."<<endl<<endl;
    Sleep(3000);
    cout << "Zatankoawno: "<<bak22<<"ton paliwa lekkiego"<<endl;
    zbiornik2=bak2;
    cout << "Masz pelny bak paliwa, GRATULACJE"<<endl<<endl;

};
int main()
//////////////////////////////////////////////////////////////////////////

{
    cout << "Witaj Kapitanie! Prosze podac date startu naszego rejsu (dd/mm/rrrr)"<<endl;//Sleep(2000);
    cin >> dzien >> miesiac >> rok;
    _sprawdz_date();
    Sleep(1000);
    cout << endl;
    cout << "Oto rejs statku KATARZYNKA!" <<endl<<endl;//Sleep(2000);
    cout << "Stacja poczatkowa: "<<stacja[0]<<endl;//Sleep(2000);
    cout << "Twoj obecny stan paliwa to: "<<endl;//Sleep(2500);
    cout << "Paliwo ciezkie: " << zbiornik1<< "ton"<<endl;
    cout << "Paliwo lekkie: "<<zbiornik2<< "ton"<<endl;//Sleep(2000);

    _czy_tankowac();

////////////////////////////////////////////////////////////////////////
    int i;
    for(i=0; i <= 5; i++)
    {
        cout <<endl;
        cout << "Aktaulna przystan:  "<<stacja[i]<<endl;
        cout << "----------------------"<<endl;
        cout << "Trasa rejsu: "<<endl;
        cout << "----------------------"<<endl<<endl;
        cout << "1." << stacja[i+1]<<" oddalony o "<<droga[i]<< " mil morskich"<<endl;
        cout << "2." << "tankowanie" <<endl;
        wybor=getch();
        switch (wybor)
        {
        case '1':
            zbiornik1=(zbiornik1)-(droga[i]/12.5);
            cout << "Witamy w: "<<stacja[i+1]<<endl;
            _stan_paliwa();
            if ((zbiornik1 < 200) && (zbiornik2 < 80))
                _czy_tankowac();
            break;

        case '2':
            _tankowanie();
            break;

        default:
            cout << "Nie ma takiej opcji w menu!";
        }
        getchar();
        system("cls");
    };

    cout << "Witamy w Chicago!!"<<endl<<endl;
    cout << "Na tej stacji zaplanowalismy dla Ciebie zaladunek"<<endl;
    cout << "Moze on potrwac 5 dni"<<endl<<endl;

    return 0;
}

 

komentarz 3 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Na razie nie widzę, żadnego błędu w sprawdzaniu daty. Ale zrób tak:

Weź w znaki komentarza miesiąc i rok, zostaw tylko sprawdzanie dnia, zobacz czy działa poprawnie.

Cały projekt masz już gotowy, widać ląd.
komentarz 3 lutego 2018 przez Rizenek Nowicjusz (220 p.)
Mam jeszcze problem z poprawnością tankowania paliwa gdy jest np. poniżej 200 ton paliwa, to

1. Program ma powodować wymuszenie zatankowania, gdyż będzie brakowało paliwa na kolejną stacje

2. Jeżeli nawet nie zatankuje to wychodzą wartości ujemne paliwa

3. Jeżeli np zatankuje gdy mam wartość ujemną pokazuje mi że zatankowano 900ton paliwa, gdzie max 800 miał być
komentarz 3 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Już wiem jaki błąd popełniłeś w sprawdzaniu daty - zamiast && powinno być OR (lub), a nad paliwem jeszcze się zastanowię.

P.S. Nadaję z tabletu, tutaj nie mam odpowiednich znaków dla OR.
komentarz 3 lutego 2018 przez Rizenek Nowicjusz (220 p.)
Problem z datą rozwiazany, wielkie dzięki :)
komentarz 3 lutego 2018 przez Beginer Pasjonat (22,110 p.)
W funkcji void stan paliwa, trzeci if licząc od góry, powinno chyba być:

If (zbiornik1 == 0   OR  zbiornik2 == 0)

(

silnik = 0;

tankowanie = 1;

)

Zwróć również uwagę, źe piszesz błędnie podwójne znaki równości.

Popraw na razie to.

c.d.n.
komentarz 3 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Sprawdziłem przed chwilą (organoleptycznie) funkcję void tankowanie. Jest napisana bardzo dobrze i musi działać dobrze!

Proponował bym tylko zmianę nazw niektórych zmiennych (w całym programie), np:

bak11   na   tank1

bak22.    na    tank2

zbiornik1.   na.    stanZbiornika1

zbiornik2.    na.     stanZbiornika2

bak1.    na.      bakMax1

bak2.    na.     bakMax2

Przy starych (istniejących) nazwach miałem początkowo problemy z połapaniem się: what is what?  (W języku polskim zbiornik i bak to akurat to samo).
+1 głos
odpowiedź 1 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)

Przedstawię jedynie sposób na prezentację rejsu w postaci informowania o aktualnej stacji, wraz z opcjami w menu dotyczącymi różnych dróg statku. Innych aspektów programu nie rozumiem z powodu nikłych informacji na ich temat, więc nie odniosę się do nich.

Otóż wykorzystanie instrukcji switch-case jest rozsądne w tym przypadku, więc nie musisz tego zmieniać. Stacje możesz zapisać w jakieś tablicy, a aktualną stację, jako indeks tej tablicy, w jakieś zmiennej. Jeśli indeks ten jest równy 0 (stacja A), to wyświetlasz opcję przepłynięcia do stacji o indeksie 1 (stacja B). Dla indeksu równego 1 wyświetlasz już wszystkie opcje, gdzie stacja powrotna to indeks - 1, a następna to indeks + 1. Jeśli indeks jest równy wielkość tablicy - 1, to wtedy oferujesz jedynie opcję powrotu.

Jeśli masz jakieś wątpliwości na temat samej implementacji, to pisz śmiało.

komentarz 1 lutego 2018 przez Chess Szeryf (76,710 p.)

@Patrycjerz, nie powinno się raczej pisać tak:

Stacje możesz zapisać w jakiejś tablicy, a aktualną stację, jako indeks tej tablicy, w jakiejś zmiennej.

Zamiast pisać w tym zdaniu "jakieś", to powinno być raczej "jakiejś". Czy może się mylę?

komentarz 1 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Nie mylisz się, słuszna uwaga!  Ale myślę, że w tym przypadku chodzi o zwykłą "literówkę" wynikającą z pośpiechu. (Ja nie zauważyłem).
komentarz 1 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
Wydaje mi się, że dobrze napisałem. Słowo "jakiejś" to bardziej w zdaniu "Kod jakiejś programistki".
komentarz 1 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Sorry, nie masz tutaj racji  Można np.powiedzieć (w liczbie mnogiej): "jakieś tablice,  jakieś zmienne". Ale naszym, konkretnym przypadku powinno być: "w jakiejś tablicy,  w jakiejś zmiennej".

Podobne pytania

0 głosów
2 odpowiedzi 470 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Śwież4k Bywalec (2,570 p.)
+1 głos
2 odpowiedzi 173 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez Irish Nowicjusz (130 p.)
+1 głos
0 odpowiedzi 116 wizyt
pytanie zadane 2 października 2020 w SQL, bazy danych przez michal_php Stary wyjadacz (13,700 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...