C++-pomoc z programem o ocenach


(_Kinga_) #1

Witam,

mam do napisania program o ocenach. Oczywiscie skala 1-6. Jesli dostaniemy np. 1, 2 to wtedy ma wyskoczyc komunikat np.: Niedobrze, musisz poprawic spr.! A powyzej 2jki: Brawo, gratulacje.

Zaczęłam kombinować, no ale niestety nie umiem sobie poradzić. Prosze o pomoc! Oto link do moich kombinacji: http://www51.zippyshare.com/v/50183343/file.html

Tylko proszę używać prostych poleceń.


(Ace4 Ur) #2

może coś takiego?

#include

#include 

using namespace std;

void main()

{

	int nOcenaZeSpr;

	cout << "Podaj ocene ze sprawdzianu: ";

	cin >> nOcenaZeSpr;

	if (nOcenaZeSpr <= 2)

	{

		cout << "Nie dobrze musisz to poprawić!" << endl;

	}

	else

	{

		cout << "Bardzo dobrze... " << endl;

	}

	getch();

}

(Sawyer47) #3

Kod mogłaś wkleić na forum, jest krótki.

Czy wg Ciebie są:

char 1;


...

char 6;

Jeśli miały być to deklaracje zmiennych, to ich nazwa nie może zaczynać się od cyfry (a w szczególności nie może być samą cyfrą, bo te są stałymi typów liczbowych). Nie deklarujesz zmiennej ocena. Nie mam również pojęcia co w Twoim zamierzeniu miał robić ten kod:

if(ocena-1,2)

Jak na nieszczęście jest to poprawny kod składniowo, a więc się skompiluje. Jeśli chcesz zbadać warunek, że ocena jest równa 1 lub 2 to użyj odpowiednich operatorów: równości == oraz alternatywy ||.

(ocena == 1) || (ocena == 2)

Jeśli wywołujesz metodę ignore na obiekcie cin, musisz dopisać nawiasy, nawet jeśli nie przesyłasz żadnych argumentów, powinno być cin.ignore().

Funkcja getchar znajduje się w pliku nagłówkowym cstdio (nie wspominam już o tym, że mieszasz cstdio z iostream, oraz że użycie funkcji wczytania z wejścia jako obejścia zamykania się okna konsoli jest wg mnie idiotyczne).

No i w jednym miejscu masz operator < zamiast <<.

PS Tak z ciekawości, od ilu minut uczysz się C++?


(Ace4 Ur) #4

A mój jest dobry? :smiley:


(Drobok) #5

Jak już się pytasz to ja się przyczepię tym, że program pobiera również wartości 0-7+ a gdy ktoś wpisze literę będzie wywalać error xD


(Sawyer47) #6

conio.h – jakaś niestandardowa DOS-owa biblioteka czyniąca kod nieprzenośnym

int main, a nie void main (i brak return w main).

Co do obejścia zamykania konsoli za pomocą funkcji wejścia już mówiłem. (rozwiązania: albo zmienić w opcjach konsoli aby się nie zamykała, albo najpierw otworzyć konsolę a potem uruchomić z niej program).


(Ace4 Ur) #7

co za różnica czy int czy main. Return tu jest raczej nie potrzebne nie?

conio.h nie odpowiada za możliwość wprowadzenia getch(); co czeka na dowolny klawisz aby przejść do następnego fragmentu kodu?


([alex]) #8

Ace4ur , skoro chcesz koniecznie zatrzymanie umieścić w kodzie to istnieje na to dużo przenośnych sposobów.

np:

cin.sync(); cin.get();


(_Kinga_) #9

Dziękuję za odpowiedzi...

Ostatecznie zrobiłam też taki kod:

#include

#include

using namespace std;

int main()

{

    int ocena;

    cout<<"Co dostales? ";

    cin>>ocena;

    getchar();

    if (ocena>6 or ocena<1)      

       cout<<"pomylisles sie.";   

    if (ocena==1)            

       cout <<"Popraw sie!";   

    else                       

        cout<<"Dobrze.";    

    getchar();

    return(0);

}

Dobrze?

A C++ uczę się dwa tygodnie... Nie moja wina, że poziom informatyki jest u mnie poniżej przeciętnego i do wszystkigo sama muszę dojść.


(Drobok) #10

Zamiast or powinnaś skorzystać z ||.


(Sawyer47) #11

Nadal jest coś do poprawienia: raczej nie powinno się mieszać obsługi wejścia/wyjścia z C i z C++, byłoby lepiej gdybyś pozbyła się cstdio. Nie wiem czemu ma służyć getchar() w 9 linijce. POnadto, nawet jeśli poda się ocenę spoza przedziału 1..6, zostanie wyświetlone "Dobrze". Raczej powinnaś zagnieździć if..else. Oraz (tylko dla większej czytelności) stosować klamry. Zamiast getchar(), jeśli już musisz, użyj cin.sync(); cin.get(), jak zaproponował [alex]. No i warto stosować odstępy między operatorami a operandami oraz między blokami kodu, dla większej czytelności.

No i jeszcze operator alternatywy, w C i C++ jest to ||. Owszem, są standardowe makra pozwalające używać nazw takich jak or, ale tego się raczej nie używa, bo wymaga dołączenia nagłówka http://www.cplusplus.com/reference/clibrary/ciso646/.


(_Kinga_) #12

Tylko, jeśli wpiszę np. 15 to wyskakuje mi w programie:

Dlaczego pod "Pomyliles sie..." pisze: "Gratuluje[...]" jak to usunąć?

Bez getchar() w 9 linijce program nie działa.

-- Dodane 01.11.2010 (Pn) 12:57 --

Dziękuję drobok!

A moglibyście spr jeszce ten? Na pewno też są błędy bo robiłam podobnie do ocen...

#include 

#include 

using namespace std;

int main()

{

         int wys,k;

         cout << "Na jakiej wysokosci lecimy (w metrach)?"<
         cin >> wys;

         k=0;

         if (wys<500) 

         { 

          k=k+1; 

          cout<
         }

         else 

         cout<
         cout << "Masz "<
         if (k>0)      

         cout<<"Popraw sie!";

         cin.ignore();

         getchar();

         return(0);

}

(Drobok) #13

Wystarczyło się zastosować do porady nr47, i [alex]'a

#includeusing namespace std;int main()

(_Kinga_) #14

W tym programie ma chodzić o to, że jesli samolot leci np. ponizej 500 km, to ma wyswietlac komunikat i dawac punkty karne,

natomiast gdy leci powyzej 500, ma wyswietlac ze wysokosc jest prawidlowa i nie otrymuje pkt karnych.

Rozumiem, że tu nie ma co zapętlac, ale pętli while jeszcze nie mieliśmy... Więc nie wiem. Ale jeśli nie da się tego zrobić inaczej to jakby to wyglądało z while?


(Drobok) #15

Skoro nie było while to może goto ?

#include using namespace std;int main()