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

c++ pętla for

Object Storage Arubacloud
0 głosów
591 wizyt
pytanie zadane 26 lutego 2018 w C i C++ przez pawel33335555 Początkujący (440 p.)

Tworzę prosty program do liczenia punktów do liceum. Napotkałem problem ponieważ program zwraca mi błędny wynik i nie mam pojęcia co jest nie tak.Wydaje mi się że jest problem w tej części ale mogę się mylić.

for(int x=0; x<=3; x++)
    {
    if(ocena[x]=3)
        ocena[x]=8;
    else if (ocena[x]=4)
        ocena[x]=14;
    else if (ocena[x]=5)
        ocena[x]=17;
    else if (ocena[x]=6)
        ocena[x]=18;

    punkty=punkty+ocena[x];
    }

  Dopiero zaczynam z programowaniem więc jak robię podstawowy błąd to wybaczcie.

komentarz 26 lutego 2018 przez Paweł Dymek Bywalec (2,300 p.)
Rozważ użycie pętli switch-case. Dużo bardziej tu pasuje zwłaszcza jeśli będzie miał zamiar dokładać tych warunków.
2
komentarz 26 lutego 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

@Paweł Dymek,

No ja bym raczej switcha pętlą nie nazwał. wink

komentarz 26 lutego 2018 przez Paweł Dymek Bywalec (2,300 p.)
Przejęzyczenie, oczywiście miało być "instrukcji warunkowej"
komentarz 26 lutego 2018 przez pawel33335555 Początkujący (440 p.)
edycja 26 lutego 2018 przez pawel33335555

@pawel33335555,

Mam kolejny problemcrying. Program działał super, tylko postanowiłem go uprościć i zrobić pętle zamiast wypisywać 10 razy prawie identycznego couta i cina. Ale jak to w programowaniu nie obyło się bez błędów.(Wstawiam tylko kawałek, bo reszta pozostała tak jak na początku)

    for(int z=0;z<=4;z++)
    {
        cout<<"Podaj % zdobytych punktow z czesci "<<przedmioty[z]<<": ";
        cin>>egzamin[z];
        if(egzamin[z]<0||egzamin[z]>100)
            cout<<endl;
        else
            z--;
            cout<<"Wpisz poprawny procent!";
            Sleep(1000);
            system("cls");
    }

    for(int a=0;a<=3;a++)
    {
        cout<<"Podaj "<<ktora_ocena[a]<<"ocene: ";
        cin>>ocena[a];
        if(ocena[a]==2||3||4||5||6)
            cout<<endl;
        else
        {
            a--;
            cout<<"Wpisz poprawna ocene!";
            Sleep(1000);
            system("cls");
        }
    }

A mianowicie w ifach wykonuje się zarówno if jak i else.

 Wydaje mi się że jest coś nie tak w nawiasach, tylko że nie wiem co.

komentarz 26 lutego 2018 przez pawel33335555 Początkujący (440 p.)
Przepraszam jednak a-- działa.

1 odpowiedź

+1 głos
odpowiedź 26 lutego 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
wybrane 26 lutego 2018 przez pawel33335555
 
Najlepsza

Nie przeczytałem dokładnie kodu, ale chyba wiem w czym problem. Do przypisywania wartości do zmiennych, owszem, służy operator =. Natomiast do porównywania dwóch wartości służy operator ==. A więc w warunkach instrukcji warunkowych if musisz pozamieniać pojedynczy znak = na podwójny ==.

Kod po poprawieniu powinien wyglądać więc tak:

for (int x = 0; x <= 3; x++)
{
    if(ocena[x] == 3)
        ocena[x] = 8;
    else if (ocena[x] == 4)
        ocena[x] = 14;
    else if (ocena[x] == 5)
        ocena[x] = 17;
    else if (ocena[x] == 6)
        ocena[x] = 18;
 
    punkty += ocena[x];
}

Zwróć jeszcze uwagę, że instrukcję:

punkty=punkty+ocena[x];

Można zapisać krócej, tak jak ja to zrobiłem, przy pomocy operatora +=

punkty += ocena[x];

Do tego, zamiast tych wszystkich ifów, możesz użyć konstrukcji switch.

Jeszcze jedna sprawa. Nie widziałem całego kodu, ale:

for(int x=0; x<=3; x++)

Jeżeli tablica ocena jest tylko trzyelementowa, to ten warunek pętli for spowoduje problemy. Zapewne miało tam być x < 3.

komentarz 26 lutego 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Znam fajną definicję eksperta:

Ekspert to osoba, która popełniła już wszystkie możliwe błędy w swojej dziedzinie

smiley

komentarz 26 lutego 2018 przez DragonCoder Nałogowiec (36,500 p.)
Eryku, czyzbys byl ekspertem w BrainFucku? :D
komentarz 26 lutego 2018 przez Secrus Nałogowiec (32,880 p.)

Też dodam coś podobnego:

Nauczyć się coś robić dobrze, to poznać doświadczalnie wszystkie możliwe sposoby na zepsucie tego :)

komentarz 26 lutego 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

@DragonCoder, a skąd mnie to wiedzieć? Jak mogę wiedzieć czy jakiś błąd może zaistnieć, jeśli jeszcze go nie popełniłem? Jakbym wiedział o jego istnieniu, to raczej bym go nie popełnił (no chyba że z rozpędu). laugh

komentarz 26 lutego 2018 przez Beginer Pasjonat (22,110 p.)
Nie jest tak źle! Ten akurat błąd zdarza się na początku prawie każdemu. Wszystko przez to, że w C++ indeksy tablicy zaczynają się od zera. W niektórych językach można wybierać - czy mają zaczynać się od 0, czy od 1.

Podobne pytania

+1 głos
2 odpowiedzi 659 wizyt
pytanie zadane 27 lutego 2021 w JavaScript przez Darth Vader Początkujący (270 p.)
–3 głosów
1 odpowiedź 914 wizyt
pytanie zadane 19 lutego 2017 w C i C++ przez beniek_01 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 195 wizyt
pytanie zadane 28 października 2018 w JavaScript przez warzywko13 Użytkownik (840 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...