Forum » Programiranje » [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!
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?
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?
- spremenil: Hardstyle ()
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 !!!
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
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:
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";
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:
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...
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…
- spremenilo: BlueRunner ()
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
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"; }
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | excelOddelek: Pomoč in nasveti | 1265 (974) | m1h4 |
» | Matematična naloga v PythonuOddelek: Šola | 775 (529) | Adam7 |
» | innerHTMLOddelek: Izdelava spletišč | 942 (732) | Badboy_ |
» | Kakšen sistem za merjenje ratinga uporabnikov? (strani: 1 2 )Oddelek: Slo-Tech | 4140 (3311) | zcetrt |
» | Nadomestilo FRAME-ov?Oddelek: Izdelava spletišč | 1904 (1603) | Jackass |