Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Proste zadanie w c++


Rekomendowane odpowiedzi

Opublikowano

Jakby ktoś mi mógł to wykonać będę wdzięczny :)

 

"Napisz program w którym użytkownik wprowadzi nazwe miesiąca a na ekranie pojawi się komunikat który to kwartał roku. Do realizacji tego zadania wykorzystaj informacje Switch"

//gif w sygnie

F.

 

RZAL :<

Do u wanna fight with me?

Opublikowano

Jakby ktoś mi mógł to wykonać będę wdzięczny :)

 

"Napisz program w którym użytkownik wprowadzi nazwe miesiąca a na ekranie pojawi się komunikat który to kwartał roku. Do realizacji tego zadania wykorzystaj informacje Switch"

Nie dajemy gotowców, nawet na tak marne "projekty".

Napisz nam z czym masz problem.

8LTfBGw.jpg

Opublikowano

oceni ktoś czy dobrze?

#include <iostream>
#include <string>

using namespace std;

int main ()
{
    string miesiac;
    int kwartal = 0;
    cout << "Podaj miesiac (bez polskich znakow): ";
    cin >> miesiac;

    if (miesiac == "styczen" || miesiac == "Styczen")
        kwartal = 1;
    else if (miesiac == "luty" || miesiac == "Luty")
        kwartal = 1;
    else if (miesiac == "marzec" || miesiac == "Marzec")
        kwartal = 1;
    else if (miesiac == "kwiecien" || miesiac == "Kwiecien")
        kwartal = 2;
    else if (miesiac == "maj" || miesiac == "Maj")
        kwartal = 2;
    else if (miesiac == "czerwiec" || miesiac == "Czerwiec")
        kwartal = 2;
    else if (miesiac == "lipiec" || miesiac == "Lipiec")
        kwartal = 3;
    else if (miesiac == "sierpien" || miesiac == "Sierpien")
        kwartal = 3;
    else if (miesiac == "wrzesien" || miesiac == "Wrzesien")
        kwartal = 3;
    else if (miesiac == "pazdziernik" || miesiac == "Pazdziernik")
        kwartal = 4;
    else if (miesiac == "listopad" || miesiac == "Listopad")
        kwartal = 4;
    else if (miesiac == "grudzien" || miesiac == "Grudzien")
        kwartal = 4;

    cout << "Kwartal ";
    switch (kwartal) {
    case 1: cout << "I" << endl; break;
    case 2: cout << "II" << endl; break;
    case 3: cout << "III" << endl; break;
    case 4: cout << "IV" << endl; break;
    }
    return 0;
}

//gif w sygnie

F.

 

RZAL :<

Do u wanna fight with me?

Opublikowano

imo lepiej użyć tolower, wtedy pierwszy znak będzie zawsze z małej litery więc lepiej będzie pisać kod. Poza tym dla kwartału danego ustawiaj w jednym ifie

 

@@w google znajdziesz implementacje

Opublikowano

Jak już dajecie to ja też dam tak jak ja bym to zrobił.

Pisanie tego ze switchem IMO nie ma sensu, więc daję normalne rozwiązanie

#include <iostream>
#include <string>
#include <map>
#include <algorithm>

int main()
{
  const std::map<std::string, std::string> kwartaly = {
    {"styczen",     "I"},
    {"luty",        "I"},
    {"marzec",      "I"},
    {"kwiecien",    "II"},
    {"maj",         "II"},
    {"czerwiec",    "II"},
    {"lipiec",      "III"},
    {"sierpien",    "III"},
    {"wrzesien",    "III"},
    {"pazdziernik", "IV"},
    {"listopad",    "IV"},
    {"grudzien",    "IV"}
  };

  std::string miesiac;
  std::cout << "Podaj miesiac (bez polskich znakow): ";
  std::cin >> miesiac;

  std::transform(miesiac.begin(), miesiac.end(), miesiac.begin(), ::tolower);

  std::cout << "Kwartal " << kwartaly[miesiac];
  return 0;
}

Można łatwo przerobić na wersję ze switchem, ale to jest głupota.

Opublikowano

@Sopelek997 @Vesim mozecie sie schowac xD

 

 

#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    cout << "Podaj nazwe miesiaca: ";
    string in;
    getline(cin,in);
    cout<<"Kwartal tego miesiaca to: ";
    switch(in[0])
    {
    case 's':
        switch(in[1])
        {
        case 't':
            cout<<"I"<<endl;
            break;
        default:
            cout<<"III"<<endl;
            break;
        }
        break;
 
        case 'l':
            switch(in[2])
            {
            case 'i':
                cout<<"III"<<endl;
                break;
            case 't':
                cout<<"I"<<endl;
                break;
            default:
                cout<<"IV"<<endl;
            }
            break;
            case 'm':
                switch(in[2])
                {
                case 'j':
                    cout<<"II"<<endl;
                    break;
                default:
                    cout<<"I"<<endl;
                }
            break;
                case 'c':
                    cout<<"II"<<endl;
                    break;
                case 'w':
                    cout<<"III"<<endl;
                    break;
                case 'g':
                    cout<<"IV"<<endl;
                    break;
                case 'k':
                    cout<<"II"<<endl;
                    break;
                case 'p':
                    cout<<"III"<<endl;
                    break;
                default:
                    cout<<"podales zly miesiac"<<endl;
 
    }
 
    return 0;
}
Opublikowano

@blowfish wygrałeś :D

 

Ja i tak bym to zrobił jak Sopelek tylko z tym switchem kłopot :D

W swift można by to było banalnie napisać - z 20 linijek max

3587513.png


Potrzebujesz pomocy? Pisz śmiało na PW/Skype/Gadu-Gadu!


(albo napisz na forum... ^.^)

Opublikowano

@blowfish

 

To napiszę jeszcze coś. Bo jak się bawić to się bawić.

 

Zakładam, że wprowadzane dane (miesiące) są poprawne i z małych liter

 

Wyznaczmy funkcję

f(s) = s[1]+s[2]-200

Która nazwie miesiąca przyporządkowuje unikalna liczbę (relatywnie małą)

 

Jest ona różnowartościowa (to nam pozwoli ją odwrócić) (dla wartości jakie nas interesują) i dostajemy wartości, które prezentują się tak

 

http://screenshooter.net/100253651/qgxtbia

 

Zamieniając numery miesięcy na odpowiadające kwartały i sortując według wartości funkcji dostajemy takie coś:

 

http://screenshooter.net/100253651/girosnl

 

Wartości na lewej to jakaś wartość f(s), wartości po prawej to odpowiadające kwartały.

 

Używając 'polynomial interpolation' możemy wyznaczyć przybliżoną funkcję opisującą krzywą przechodzącą przez punkty

{{3,2},{6,3},{11,1},{17,3},{19,4},{20,4},{23,2},{24,2},{31,4},{33,1},{36,3},{37,1}}

czyli kolejne (ważne dla nas) wartości f(s) i odpowiadające im kwartały

 

Po wrzuceniu do wolfram alpha

DŁUGI LINK

dostajemy piękny wielomian

 

Nie potrzeba nam jednak aż takiej dokładności. Poradzimy sobie z błędem ~0.5, bo zawsze można zaokrąglić.

 

Więc poniższy kod też rozwiązuje poprawnie to zadanie (wypisuje w postaci arabskiej, nie rzymskiej. Chciałem tylko dać przykład.)

#include <iostream>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
    vector<string> miesiace = {"styczen", "luty", "marzec",
                               "kwiecien", "maj", "czerwiec",
                               "lipiec", "sierpien", "wrzesien",
                               "pazdziernik", "listopad", "grudzien"
                              };
    for(auto& m : miesiace)
    {
        double x = m[1] + m[2] - 200;
        double poly = - 77608926099667.0 / 17737902000.0
                      + (13410936091790591507.0 * x) / 3365234767440000.0
                      - (324663650977723466281.0 * pow(x, 2)) / 222105494651040000.0
                      + (1559382638774845160501.0 * pow(x, 3)) / 5330531871624960000.0
                      - (21030907268548135457.0 * pow(x, 4)) / 581512567813632000.0
                      + (94000281749698848889.0 * pow(x, 5)) / 31983191229749760000.0
                      - (1724501924077218449.0 * pow(x, 6)) / 10661063743249920000.0
                      + (64742567289921091.0 * pow(x, 7)) / 10661063743249920000.0
                      - (108928288506889.0 * pow(x, 8)) / 710737582883328000.0
                      + (26517891624761.0 * pow(x, 9)) / 10661063743249920000.0
                      - (750021107089.0 * pow(x, 10)) / 31983191229749760000.0
                      + (3121532021.0 * pow(x, 11)) / 31983191229749760000.0;
        cout << round(poly) << '\n';
    }

    return 0;
}

Kod nie jest najlepszy, obrazuje tylko idee. Podejrzewam, że float też dałby radę.

Opublikowano

@blowfish

 

To napiszę jeszcze coś. Bo jak się bawić to się bawić.

 

Zakładam, że wprowadzane dane (miesiące) są poprawne i z małych liter

 

Wyznaczmy funkcję

f(s) = s[1]+s[2]-200

Która nazwie miesiąca przyporządkowuje unikalna liczbę (relatywnie małą)

 

Jest ona różnowartościowa (to nam pozwoli ją odwrócić) (dla wartości jakie nas interesują) i dostajemy wartości, które prezentują się tak

 

http://screenshooter.net/100253651/qgxtbia

 

Zamieniając numery miesięcy na odpowiadające kwartały i sortując według wartości funkcji dostajemy takie coś:

 

http://screenshooter.net/100253651/girosnl

 

Wartości na lewej to jakaś wartość f(s), wartości po prawej to odpowiadające kwartały.

 

Używając 'polynomial interpolation' możemy wyznaczyć przybliżoną funkcję opisującą krzywą przechodzącą przez punkty

{{3,2},{6,3},{11,1},{17,3},{19,4},{20,4},{23,2},{24,2},{31,4},{33,1},{36,3},{37,1}}

czyli kolejne (ważne dla nas) wartości f(s) i odpowiadające im kwartały

 

Po wrzuceniu do wolfram alpha

DŁUGI LINK

dostajemy piękny wielomian

 

Nie potrzeba nam jednak aż takiej dokładności. Poradzimy sobie z błędem ~0.5, bo zawsze można zaokrąglić.

 

Więc poniższy kod też rozwiązuje poprawnie to zadanie (wypisuje w postaci arabskiej, nie rzymskiej. Chciałem tylko dać przykład.)

#include <iostream>
#include <string>
#include <cmath>
#include <vector>
using namespace std;
int main()
{
    vector<string> miesiace = {"styczen", "luty", "marzec",
                               "kwiecien", "maj", "czerwiec",
                               "lipiec", "sierpien", "wrzesien",
                               "pazdziernik", "listopad", "grudzien"
                              };
    for(auto& m : miesiace)
    {
        double x = m[1] + m[2] - 200;
        double poly = - 77608926099667.0 / 17737902000.0
                      + (13410936091790591507.0 * x) / 3365234767440000.0
                      - (324663650977723466281.0 * pow(x, 2)) / 222105494651040000.0
                      + (1559382638774845160501.0 * pow(x, 3)) / 5330531871624960000.0
                      - (21030907268548135457.0 * pow(x, 4)) / 581512567813632000.0
                      + (94000281749698848889.0 * pow(x, 5)) / 31983191229749760000.0
                      - (1724501924077218449.0 * pow(x, 6)) / 10661063743249920000.0
                      + (64742567289921091.0 * pow(x, 7)) / 10661063743249920000.0
                      - (108928288506889.0 * pow(x, 8)) / 710737582883328000.0
                      + (26517891624761.0 * pow(x, 9)) / 10661063743249920000.0
                      - (750021107089.0 * pow(x, 10)) / 31983191229749760000.0
                      + (3121532021.0 * pow(x, 11)) / 31983191229749760000.0;
        cout << round(poly) << '\n';
    }

    return 0;
}

Kod nie jest najlepszy, obrazuje tylko idee. Podejrzewam, że float też dałby radę.

ok ja sie pobawie

 

#include <iostream>
using namespace std;

int main() {
    string month;
    cin >> month;
    cout << "Jeden kwartal to 3 miesiace, policz na palcach ktory miesiac wpisales i zaokragl w gore, jezeli wyjdzie z reszta";
    return 0;
}

badumm tss

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...