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

C++ wyliczanie pkt do liceum

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

Witam, mam problem z funkcją if. Wkleiłem cały kod dla pewności że gdzieś indziej nie zrobiłem głupiego błędu.

Ten problem pojawia się w wyodrębnionej części którą postarałem się zaznaczyć. A mianowicie chodzi o instrukcję warunkową if else w której zamiast wykonywania się tylko części pod ifem gdy nawias jest prawdziwy wykonuje się cały if włącznie z elsem. Wydaje mi się że może być to błąd w nawiasach tylko za bardzo nie wiem jakicrying.

    #include <iostream>
#include <windows.h>
#include <cstdlib>
#include <stdio.h>
#include <conio.h>

using namespace std;

float egzamin[5];
int ocena[4];
int punkty=0;
string przedmioty[5];
int ktora_ocena[4];

int main()
{
przedmioty[0]="humanistycznej";
przedmioty[1]="polonistycznej";
przedmioty[2]="przyrodniczej";
przedmioty[3]="matematycznej";
przedmioty[4]="jezykowej";
ktora_ocena[0]=1;
ktora_ocena[1]=2;
ktora_ocena[2]=3;
ktora_ocena[3]=4;


------------------------------------------------------------------------------

    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");
        }
    }

---------------------------------------------------------------------------









    for(int i=0; i<=4; i++)
    {
        punkty=punkty+egzamin[i]*0.2;
    }

    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];
    }

    cout<<"Twoje punkty:"<<punkty;
    return 0;
}

 

komentarz 26 lutego 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
If to nie funkcja, lecz instrukcja warunkowa!
komentarz 26 lutego 2018 przez pawel33335555 Początkujący (440 p.)
Biblioteki brałem z innego programu więc mogą niektóre być niepotrzebne
komentarz 26 lutego 2018 przez Beginer Pasjonat (22,110 p.)
W instrukcji if nie można w taki sposób powtarzać operatora logicznego: OR 3 OR 4 OR 5.

1 odpowiedź

+2 głosów
odpowiedź 26 lutego 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Nie wiem o co Ci konkretnie chodzi, ale:

if(egzamin[z]<0||egzamin[z]>100)
    cout<<endl;
else
    z--;
    cout<<"Wpisz poprawny procent!";
    Sleep(1000);
    system("cls");

Masz najprawdopodobniej błąd w else (domyślam się po wcięciach). A mianowicie wykona się tam wbrew pozorom tylko instrukcja z--. Jeżeli chcesz aby wykonały się wszystkie cztery instrukcje, musisz je umieścić w bloku kodu {}. A najlepiej to w ogóle proponuję nie skracać sobie zapisu i nie pomijać tych bloków, żeby nie narobić sobie problemów.

if(ocena[a]==2||3||4||5||6)
    cout<<endl;

Ten if również działa chyba nie tak, jak ty byś sobie tego życzył. Każda inna wartość niż 0 to true, natomiast w łańcuchu operacji logicznych OR wystarczy jedna wartość true, aby cały wynik też był prawdziwy. Więc na moje oko, ten if będzie się wykonywał zawsze, a będący za nim else - nigdy. Jeśli chcesz poprawić ten kod, to albo porównuj każdą ocenę z osobna, albo lepiej sprawdź zakres w jakim znajduje się ocena.

if (ocena[a] >= 2 && ocena[a] <= 6) {
    std::cout << '\n';
}

Proponuję też używać '\n' zamiast std::endl, nie używać windows.h jeśli nie ma takiej potrzeby, nie używać system("cls")... No i jak wspominałem wcześniej, nie pomijać tych bloczków. W niektórych językach są one opcjonalne, w innych obowiązkowe.

komentarz 26 lutego 2018 przez pawel33335555 Początkujący (440 p.)

Dziękuję bardzo za wyłapanie banalnych błędów ponownie. Chyba naprawdę dużo powtórek mnie czekafrown

Podobne pytania

0 głosów
1 odpowiedź 301 wizyt
0 głosów
1 odpowiedź 123 wizyt
0 głosów
2 odpowiedzi 1,074 wizyt
pytanie zadane 14 listopada 2019 w C i C++ przez MaczugaPierd Nowicjusz (140 p.)

92,573 zapytań

141,423 odpowiedzi

319,648 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!

...