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

Zadania z pętlami, problem.

Object Storage Arubacloud
0 głosów
455 wizyt
pytanie zadane 22 października 2015 w C i C++ przez Adrian312 Nowicjusz (160 p.)

Mam za zadanie napisać program z instrukcją switch. Jestem całkowicie zielony w tych tematach to mój pierwszy tydzień nauki każda pomoc bardzo doceniam. Załączam fragment kodu który udało mi się samemu wywalczyć. największy problem mam z przedstawieniem sumy za pomocą równania, o ile tak się w ogóle da.

.

#include <iostream>// Adrian Janiak
#include <cmath>

using namespace std;

int main()
{
    int w;
    cout << "Wybierz program" << endl;
    cout << "1.rok przestepny"<< endl;
    cout << "2.gwiazdki"<< endl;
    cout << "3.wartosc funkcji w punkcie"<< endl;
    cout << "4.wartosc sumy"<< endl;
    cout << "\n";
    cout << "wybierz program 1-4"<< endl;
    cin >> w;
    cout << "\n";

    switch (w)
    {
    case 1:
        int r;
        char v;
        cout << "wybrales program 1"<< endl;
poczatek:
        cout << "podaj rok"<< endl;
        cin >> r ;
        if (r % 4 ==0 && r % 100!=0 || r % 400 == 00 )
            cout << "rok przestepny" << endl;
        else
            cout << "rok nie przestepny" << endl;
        cout <<"\nCzy chcesz wprowadzic inny rok? t-tak" << endl;
        cin >> v ;
        if ( v=='t' ) goto poczatek ;
        break;
    case 2:
        int gwiazdka;
        cout << "wybrales program 2"<< endl;
        cout << "wprowadz liczbe gwiazdek"<< endl;
        cin >> gwiazdka;
        for(int i=0; i<gwiazdka; i++)
        {
            for(int j=0; j<gwiazdka-i; j++)
            {
                cout << "";
            }
            for(int k=0; k<gwiazdka-(gwiazdka-1-i); k++)
            {
                cout << "*";
            }
            cout<< endl;
        }

        break;

    /*        case 3:
                int a, h, n;
                long double sin (long double x);
                    cout << "wybrales program 3"<< endl;
                    cout << "podaj a, h i n"<< endl;
                    cout <<"a=  ";
                    cin >>a;
                    cout << "h=  ";
                    cin >>h;
                    cout << "n=  ";
                    cin >>n;
                    x= a+n*h
                    f=1/3* sin(x)+3*(x*x)
                    cout << "oto wynik" endl;
                    cout <<x<<;
            break;*/
    case 4:
        int k, n, S;
        cout << "wybrales program 4"<< endl;
        cout << "wprowadź zmienna n"<< endl;
        cin >> n;
        if (n<5)
            cout << "n mniejsze od 5, wprowadz inne n";
            break;
        do
        {

            for( k=5; k<=n; k++)
            {
                cout << " k musi byc wieksze od 5"<< endl;
                S=2 / (2*k+1);
            }while ( k < n)
        cout << S*1.0<< endl;
        break;
        }

    default:
        cout << "nieprzypisany klawisz"<< endl;
    break;
  }
 return 0 ;
}

 

3 odpowiedzi

+1 głos
odpowiedź 22 października 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
double n=0;
    cout<<"Wprowadz liczbe n:";

    while(n<5)
    {
        cin>>n;
        if(n<5)
        {
            cout<<"n mniejsze od 5 wprowadz jeszcze raz:";
        }
    }
    cout<<"n jest rowne="<<n<<endl<<endl;
    
    double S=0;
    double buffor=0;
    for(double k=5; k<=n; k++)
    {
        buffor = 2/(2*k+1);
        cout<<buffor<<endl;
        S +=buffor;
    }
    cout<<endl<<S;

 

Sprawdź sobie czy o to Ci chodziło jak jest coś niejasnego to pytaj
komentarz 22 października 2015 przez Adrian312 Nowicjusz (160 p.)
edycja 22 października 2015 przez Adrian312
Niestety nie mogę tego sprawdzić bo na wysokości "default" po odznaczeniu default plik siękompiluje normalnie ale gdy próbuje go uruchomić komputer uruchamia się ponownie, nigdy wczesniej takiego problemu nie miałem. Używam code blocks 13.12
komentarz 23 października 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
weś ten listing i wklej do metody main

int main()
{
  //o tutaj wklej
}
Przetestuj działanie i zobacz czy o to Ci chodziło
+1 głos
odpowiedź 22 października 2015 przez furas Maniak (53,800 p.)

Sumę wykonujesz w pętli korzystają z

suma = suma + kolejny_element

co można zapisać w sposób dla niektórych bardziej czytelny

suma += kolejny_element

---

Bardzo dawno temu pewien znany programista (lub naukowiec) wystosował wniosek do innych ze stwierdzeniem, że "goto" to jest największe zło w programowaniu - i wielu programistów zgadza się z tym do dziś. 

Zamiast `goto` możesz użyć pętli `while`.

---

To co masz w każdym `case` (oprócz `break) mógłbyś umieszczać w osobnych funkcjach aby było to czytelniejsze - switch zajmował by mniej linii i dało by się go całęgo objąć wzrokie.

komentarz 22 października 2015 przez Adrian312 Nowicjusz (160 p.)
Też słyszałem o tym że goto to szatan w czystej postaci ale tu całkiem dobrze się sprawdza może przy większym programie wprowadzał by spory zament, tu w case 1 działa bez problemu.
komentarz 22 października 2015 przez furas Maniak (53,800 p.)
Dla wielu każde użycie `goto` wprowadza zamęt :) Nawet w najmniejszym programie.

Pytanie jaki stosunek do `goto` ma osoba, która będzie sprawdzać te zadania ;)
0 głosów
odpowiedź 22 października 2015 przez Adrian312 Nowicjusz (160 p.)
Ktoś byćmoże ma jakiś pomysł na zad 2? moj program rsuje tylko 1 model gwiazdek.
komentarz 22 października 2015 przez furas Maniak (53,800 p.)
Każdy model gwiazdek zamknij w osobnej funkcji i skup się w niej tylko na tym modelu.

Pierwszy modej jest prosty - masz pętlę od 1 do n .

W drugim musisz tylko zmodyfikować pętle i robić od n do 1.

W trzecim musisz dodatkowo rysować odpowiednią ilość spacji na początku linii.

W czwartym bierzesz funkcję do rysowania trzeciej i zamieniasz pętle od 1 do n na pętlę od n do 1

W piątym i szóstym musisz rysować tak jak w trzecim i czwartym tylko w każdej lini wstawiasz o połowe mniej spacji niż w trzecim i czwartym.
komentarz 22 października 2015 przez Adrian312 Nowicjusz (160 p.)
Dziękuję bardzo za pomoc. Ale niestety jeszcze jeden problem się pojawił, mianowicie z wyłączającym się komputerem, gdy buduje i włączam program to po pojawieniu sie okienka programu komputer uruchamia się ponownie żaden blue screen, po prostu zwykły shutdown.
komentarz 22 października 2015 przez furas Maniak (53,800 p.)
Trudno cokolwiek powiedzieć o takim problemie. Zostaje drogą wyrzucania kawałków kodu dojść do momentu, w którym problem przestaje istnieć. Wtedy można przyjrzeć się temu kawałkowi co został usunięty jako ostatni czy jest tam coś podejrzanego - albo ten kawałek wstawiać do programu w mniejszych kawałkach. Może uda się dojść do miejsca, które powodują błąd.

Można też wstawić dużo `cout` z komunikatami typu `wchodzę do case 1`, `wewnatrz for` itp. i patrzyć jakie komunikaty uda się programowi wyświetlić przed resetem :)

Wyższy poziom to używanie debugera ale tu już musisz szukać narzędzia i tutoriala w internecie.
komentarz 22 października 2015 przez Adrian312 Nowicjusz (160 p.)
Dzieje się tak nim wybiore jakakolwiek cyferke czyli przy samym switchu, przeskanowałem teraz laptopa znalazlo kilka wirusow moze probem zniknie.
komentarz 22 października 2015 przez Adrian312 Nowicjusz (160 p.)
antywirus rozwiązał probelem.
komentarz 22 października 2015 przez Adrian312 Nowicjusz (160 p.)
Dasz radę jeszcze wytłumaczyć mi to 3 zadanie? Strasznie topornie mi to idzie ale chyba takie są początki niestety.
komentarz 22 października 2015 przez furas Maniak (53,800 p.)
Tam masz pętle dla i od 0 do n .
w pętli:
- liczysz x = a + i * h ,
- z tego wyliczasz f = ... x ...  
- wypisujesz f.

gdy i = 0  to masz  x = a + 0 * h = a
gdy i = 1  to masz  x = a + 1 * h = a + h
...
gdy i = n  to masz  x = a + n * h = a + n * h

Podobne pytania

0 głosów
4 odpowiedzi 1,693 wizyt
pytanie zadane 14 marca 2016 w C i C++ przez Barman Nowicjusz (150 p.)
0 głosów
3 odpowiedzi 1,319 wizyt
pytanie zadane 12 października 2015 w C i C++ przez Ted0ka Nowicjusz (180 p.)
+1 głos
1 odpowiedź 264 wizyt
pytanie zadane 7 maja 2023 w C i C++ przez kwkstein Nowicjusz (150 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

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

...