» »

[NALOGA][C++]stavek SWITCH - APJ

[NALOGA][C++]stavek SWITCH - APJ

Hardstyle ::

Imam popravni izpit iz predmeta APJ. In imam nalogo z stavkom switch vendar sem naletel na težavo.:\

Besedilo naloge:
//Profesor ocenjuje seminarske naloge dijakov po st. zbranih tock. Nalogo reši z stavkom SWITCH!

#include <iostream.h>
#include <stdlib.h>

void main()
{
	int st_tock;

	cout<<"Vpisi stevilo dosezenih tock";
	cin>>st_tock;

	switch (st_tock)
	{
	case (st_tock<50): cout<<"Ocena je nezadostno";
	case (st_tock>=51) && (st_tock<=65): cout<<"Ocena je zadostno";
	case (st_tock>=66) && (st_tock<=79): cout<<"Ocena je dobro";
	case (st_tock>=80) && (st_tock<=89): cout<<"Ocena je pravdobro";
	case (st_tock>=90) && (st_tock<=100): cout<<"ocena je odlicno";
	default: cout<<"samo med 0 in 100";
	}
}


Zdaj pa dobim 5 napak in sicer vse so enake
"error C2051: case expression not constant"


Mi lahko kdo pove, kje sem ga polomil in kako težavo odpravit?

AndrejS ::

error C2051: case expression not constant

Saj ti lepo pove napako!

V casu stavku lahko uporabljaš samo konstante !

Pa še po vsakem case stavku ti manjka BREAK !!!

l0g1t3ch ::

sicer ne poznam C++ ampak verjetno je tako kot v C-ju

pri uporabi switch izraza je lahko tista zadeva, ki jo gledamo, za pogoj samo int ali char konstanta in nič drugega. Ti pa maš namest int al pa char konstante podan izraz.

case (st_tock>=51)

pravilno bi blo case 51

Hardstyle ::

Ja ampak kako naj potem naredim kriterij? Z if stavkom bi to blo bolj enostavno ampak naloga zahteva drugače.

l0g1t3ch tako kot si mi ti napisal, bi moral doseči točno tisto število točk (51), da bi mi izpisalo nezadostno.

Z IF stavkom bi to zgledalo tako:
if (st_tock<=50)
cout<<"Nezadostno"; 

Kami ::

Z switch nemoreš to naredit, narediš lahko samo z if stavkom.

BlueRunner ::

Tako, kot si napisal intervale, je rešitev z uporabo stavka switch nepraktična. Če si lahko intervale izbereš bolj "pravilno", potem pa obstaja relativno enostavna rešitev.

Intervali, ki jih predlagam, so:
- 0...49: nezadostno
- 50...64: zadostno
- 65...79: dobro
- 80...89: prav dobro
- 90...100: odlično

Ker je spodnja meja vseh intervalov sedaj deljiva s 5, lahko narediš st_tock/5, kar pomeni, da so nove vrednosti postale:
0,1,2,3,4,5,6,7,8,9: nezadostno
10,11,12: zadostno
13,14,15: dobro
16,17: prav dobro
18,19,20: odlično

iz tega lahko sestaviš delujoč switch stavek:

switch (st_tock/5) {
default:
    cout << "Ocena je nezadostno";
    break;
case 10: case 11: case 12:
    cout << "Ocena je zadostno";
    break;
case 13: case 14: case 15:
    cout << "Ocena je dobro";
    break;
case 16: case 17:
    cout << "Ocena je pravdobro";
    break;
case 18: case 19: case 20:
    cout << "ocena je odlicno";
}


Stavek je brez kontrole prevelikih in premajhnih vrednosti (robni pogoji), za kar je še vedno bolje uporabiti if stavek, ker bi bil case za ostale veljavne vrednosti ocen predolg, predvsem pa (iz vidika dolžine prevedene kode) skrajno neučinkovit.


Edit: Ooops, sem se malo začipkal...

Zgodovina sprememb…

Quikee ::

noja samo v navodilu ne piše, da je maksimalno število točk 100 - pač narediš za recimo maksimalno število 10 =) Ali pa uporabiš trik in število točk deliš z 10 in meje postaviš celoštevilske.
Recimo

switch(st_tock/10)
{
case 5: 
case 6: cout<<"Ocena je zadostno"; break;
case 7: cout<<"Ocena je dobro"; break;
case 8: cout<<"Ocena je pravdobro"; break;
case 9: 
case 10: cout<<"Ocena je odlicno"; break;
default: cout<<"Ocena je nezadostno";

}

Hardstyle ::

Hvala za pomoč!

Če bom še kaj potreboval vem kam se obrnit!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

excel

Oddelek: Pomoč in nasveti
71272 (981) m1h4
»

Matematična naloga v Pythonu

Oddelek: Šola
8780 (534) Adam7
»

innerHTML

Oddelek: Izdelava spletišč
8948 (738) Badboy_
»

Kakšen sistem za merjenje ratinga uporabnikov? (strani: 1 2 )

Oddelek: Slo-Tech
564166 (3337) zcetrt
»

Nadomestilo FRAME-ov?

Oddelek: Izdelava spletišč
161910 (1609) Jackass

Več podobnih tem