Expected primary-expression before – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Expected primary-expression before – C / C++ – Fórum – Programujte.comExpected primary-expression before – C / C++ – Fórum – Programujte.com

 

Spuštěný nový filmový web Filmožrouti.cz — vše o Avengers, Pacific Rim, Thor, Star Wars…
Majko
~ Anonymní uživatel
7 příspěvků
4. 10. 2017   #1
-
0
-

 Ahojte, chcel by som sa opýtať, ak robím jednotlivé case, nemôžem to aj takto napísať?

switch (percent){
             case >=90: cout << " Tvoja znamka je 1. " ; break;
             case >=75 && <75: cout <<" Tvoja znamka je 2. "; break;
             case >=50 && <75: cout <<" Tvoja znamka je 3. "; break;
             case >=30 && <50: cout <<" Tvoja znamka je 4. "; break;
             case <30: cout <<" Tvoja znamka je 5. "; break;

alebo to môžem iba takto cez if? 

 if (percent>=90) cout << " Tvoja znamka je 1" << endl;
     if (percent>=75 && percent<90) cout << " Tvoja znamka je 2" << endl;
     if (percent>=50 && percent<75) cout << " Tvoja znamka je 3" << endl;
     if (percent>=30 && percent<50) cout << " Tvoja znamka je 4" << endl;
     if (percent<30) cout << " Tvoja znamka je 5" << endl;
Nahlásit jako SPAM
IP: 178.253.132.–
KIIV
~ Moderátor
+42
God of flame
4. 10. 2017   #2
-
0
-

#1 Majko
Zalezi na tom, jestli tvuj (a pokud to mas do skoly, tak hlavne uciteluv) prekladac podporuje rozsahy pro switch. Jinak proste musis pouzit jeden case na jednu hodnotu.

Ale v gcc/g++ se da napsat i:

switch (percent) {
  case  0 ...  29:
    cout << "Tvoje znamka je 5\n";
    break;
  case 30 ...  49:
    cout << "Tvoje znamka je 4\n";
    break;
  case 50 ...  74:
    cout << "Tvoje znamka je 3\n";
    break;
  case 75 ...  89:
    cout << "Tvoje znamka je 2\n";
    break;
  case 90 ... 100:
    cout << "Tvoje znamka je 1\n";
    break;
}

Jen nedoporucuji pouzivat, nemusi to byt prenositelne na jiny prekladac.

Pak se da jeste udelat prekladova tabulka (ale to jde jen pokud neni hodnot moc)

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Majko
~ Anonymní uživatel
7 příspěvků
4. 10. 2017   #3
-
0
-

   

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
main()
{
      srand(time(0));
      float prve,druhe,sucet,d,pbodov,percent;
      for (d=0; d<10;d++){
      prve=rand()%100;
      druhe=rand()%100;
      sucet=prve+druhe;
      cout << prve <<" + " << druhe << " = " << sucet << endl;
      if ( sucet < 100) { cout << "ziskavas bod" << endl;
         pbodov++;}
         else {cout << "nedostavas bod " << endl;}
               }
      percent = pbodov/d *100;
      cout<< "Pocet dosiahnutych percent je: " << percent << endl;
      if (percent>=90) cout << " Tvoja znamka je 1" << endl;
     if (percent>=75 && percent<90) cout << " Tvoja znamka je 2" << endl;
     if (percent>=50 && percent<75) cout << " Tvoja znamka je 3" << endl;
     if (percent>=30 && percent<50) cout << " Tvoja znamka je 4" << endl;
     if (percent<30) cout << " Tvoja znamka je 5" << endl;
      system("pause");
}
      

No celý program vyzerá takto a len jediné čo mi tak na ňom vadilo je množstvo cyklov if. Ale samozrejme ďakujem za radu, určite vyskúšam.


Nahlásit jako SPAM
IP: 178.253.132.–
KIIV
~ Moderátor
+42
God of flame
4. 10. 2017   #4
-
0
-

#3 Majko
if neni cyklus. Tomu se rika vetveni (branch expression). Stejne jako switch.

Cyklus (smycka, ci loop v anglictine) tak nejak musi mit schopnost opakovat se (za nejake podminky) a to if opravdu nema.

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
MilanL+1
Super člen
5. 10. 2017   #5
-
0
-

#3 Majko
#4 KIIV
tedy nevím jak moc efektivní jsou C compilery, ale asi bych použíl if + else if , kvůli vyhnutí se těm zdvojeným podmínkám:

     if (percent>=90) cout << " Tvoja znamka je 1" << endl;
     else if (percent>=75) cout << " Tvoja znamka je 2" << endl;
     else if (percent>=50) cout << " Tvoja znamka je 3" << endl;
     else if (percent>=30) cout << " Tvoja znamka je 4" << endl;
     else (percent<30) cout << " Tvoja znamka je 5" << endl;

EDIT-OPRAVA  na poslední řádce už bez té podmínky jen výstup
else cout << " Tvoja znamka je 5" << endl;

Nahlásit jako SPAM
IP: 91.139.9.–
KIIV
~ Moderátor
+42
God of flame
5. 10. 2017   #6
-
0
-

#5 MilanL
else if trosku pomuze, za predpokladu ze mas same jednickare. Pokud mas tridu plnou pitomcu, tak uz to bude horsi :) Vyhodnotit se musi vsechno nez to spadne do spravne vetve. Kdyby neco, da se pouzit i forma binarniho vyhledavani, kdy pulis intervaly.

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
MilanL+1
Super člen
5. 10. 2017   #7
-
0
-

#6 KIIV
a co tohle 

znamka = (percent>=90) ? 1 : (percent>=75) ? 2 : (percent>=50) ? 3 : (percent>=30) ? 4 : 5;

cout << " Tvoja znamka je " << znamka << endl;

Nahlásit jako SPAM
IP: 91.139.9.–
KIIV
~ Moderátor
+42
God of flame
5. 10. 2017   #8
-
0
-

#7 MilanL
if - else kod vypada v assembleru cca takto (g++-5.4.1, -O2, plus je to dany do funkce, ktera vraci znamku):

	.cfi_startproc
	cmpl	$89, %edi
	movl	$1, %eax
	jg	.L3
	cmpl	$74, %edi
	movl	$2, %eax
	jg	.L3
	cmpl	$49, %edi
	movl	$3, %eax
	jg	.L3
	xorl	%eax, %eax
	cmpl	$29, %edi
	setle	%al
	addl	$4, %eax
.L3:
	rep ret
	.cfi_endproc

a varianta s ternarnim operatorem:

	.cfi_startproc
	cmpl	$89, %edi
	movl	$1, %eax
	jg	.L3
	cmpl	$74, %edi
	movl	$2, %eax
	jle	.L9
.L3:
	rep ret
	.p2align 4,,10
	.p2align 3
.L9:
	cmpl	$49, %edi
	movl	$3, %eax
	jg	.L3
	xorl	%eax, %eax
	cmpl	$29, %edi
	setle	%al
	addl	$4, %eax
	ret
	.cfi_endproc

Takze by sis technicky vzato spise uskodil nez pomohl.

Nahlásit jako SPAM
IP: 93.91.151.–
Program vždy dělá to co naprogramujete, ne to co chcete...
MilanL+1
Super člen
9. 10. 2017   #9
-
0
-

#8 KIIV
hm mě se zdá, že ty kody jsou funkčně a instrukčně téměř stejný je tam snad jen 1 instrukce navíc a to ten RET na konci a 1 instrukce jiná JLE co přeskakuje v 1/2 label L3 s Rep Ret..

Jinak koukám na ten asm, že je to ten obrácený "instr  zdroj, cíl" jsem zvyklej na klasiku "insr cíl, zdroj", jako by to nemohli všichni dělat stejně

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 47 hostů

Podobná vlákna

Illegal start of expression — založil Draffix

Microsoft expression blend — založil domitea

MS Expression Blend - přechody — založil Anonymní uživatel

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý