kalkulator pokazuje 0

0

Cześć. Próbowałam stworzyć prosty program - kalkulator do obliczania punktów z matury. Niestety nie działa jak powinien, bo za każdym razem pokazuje mi 0. Co zrobiłam źle?

#include <iostream>

using namespace std;

int PGP, PGR, PG, JPP, JPR, JP, JOP, JOR, JO, WU, W;

int main()
{
    cout << "Czesc. Pomoge ci obliczyc liczbe punktow ujednoliconych na Politechnike Gdanska." << endl;
    cout << "Podaj ilosc proc., ktore uzyskales z przedmiotu glownego na poziomie podstawowym." << endl;
    cin >> PGP;
    cout << "Podaj ilosc proc., ktore uzyskales z przedmiotu glownego na poziomie rozszerzonym (jezeli nie zdawales wpisz 0)." << endl;
    cin >> PGR;

	if (PGR >= PGP*0.6)
	{
        PGR = PG; }
	else
	{
	    PGP = PG; }

	cout << "Podaj ilosc proc., ktore uzyskales z jezyka polskiego na poziomie podstawowym." << endl;
	cin >> JPP;
	cout << "Podaj ilosc proc., ktore uzyskales z jezyka polskiego na poziomie rozszerzonym (jezeli nie zdawales wpisz 0)." << endl;
	cin >> JPR;

	if (JPR >= JPP*0.6)
	{
	    JPR = JP; }
	else
	{
	    JPP=JP; }

	cout << "Podaj ilosc proc., ktore uzyskales z jezyka obcego na poziomie podstawowym." << endl;
	cin >> JOP;
	cout << "Podaj ilosc proc., ktore uzyskales z jezyka obcego na poziomie rozszerzonym (jezeli nie zdawales wpisz 0)." << endl;
	cin >> JOR;

	if (JOR >= JOP*0.6)
	{
	    JOR = JO; }
	else
	{
	    JOP = JO; }

	W = PG + 0.1 * JP + 0.1 * JP <<endl;
	WU = (W / 125) * 100 <<endl;

	cout << "Twoja liczba punktow ujednoliconych to " << WU;

}
2

W / 125
Dzielenie całkowite daje całkowity rezultat. Wobect tego jeśli W jest mniejsze od 124 (i większe od -1) to wynik będzie 0. Podziel przez 125.0.

PS: po co te wszystkie zmienne globalne?

1
W / 125.0
0

Dziękuję wam bardzo!
Co do zmiennych - jestem zupełnie zielona w programowaniu, nie wiem jak inaczej miałabym to zapisać

0

Generalną ideą jest używanie zmiennych o jak najmniejszym czasie życia. Tj. w uproszczeniu najgłębiej {} jak tylko się da i zdefiniowane najpóźniej (najniżej) jak tylko się da. Tutaj spokojnie mogą być to zmienne wewnątrz main().

Jeśli już jesteśmy przy dobrych praktykach: http://format.krzaq.cc - przeformatuj kod. Nawet jeśli Tobie to nie robi różnicy to nam - tak. Tragedii teraz nie ma, ale układ {} jest dziwny.

1

(W / 125) * 100 zmień na W * 100 / 125, zadziała wtedy nawet na liczbach całkowitych.

1

Nie pisalem w C++ z dobre 10 lat i byc moze wraz z nowymi standardami cos sie pozmienialo. Operator przypisania zawsze dzialal tak, ze do lewej strony przypisywal wartosc wyrazenia po prawej stronie.

Tutaj mamy:

 if (PGR >= PGP*0.6)
    {
        PGR = PG; }
    else
    {
        PGP = PG; }

czyli przypisanie PG, ktore ma wartosc 0 do PGR lub PGP, ktore nie sa nigdzie dalej uzywane. Podobnie z JP i JO. A do wyliczenia W brane jest PG, i JP*2 (swoja droga drugie JP chyba powinno byc JO?), ktore caly czas maja wartosc 0 (domyslna dla int jesli dobrze pamietam). Jesli nic sie nie zmienilo w specyfikacji operatora przypisania to chyba trzebaby zaczac od poprawienia tych if'ow i nadania odpowiednich wartosci PG, JP i JO.

0

    W = PG + 0.1 * JP + 0.1 * JP <<endl;
    WU = (W / 125) * 100 <<endl;
  1. Te endl'e są chyba tam zbędne.
  2. Jak napisano wyżej - jedno JP powinno zwać się JO + zamienić wypada miejscami przypisania w if'ach.
  3. W ramach ćwiczeń - nie zaszkodziło by jakieś zabezpieczenie przed wpisaniem niepoprawnych danych (np. 125 punktów lub -12).

1 użytkowników online, w tym zalogowanych: 0, gości: 1