skracanie kodu - preprocessor

0

Witam mam taki kod w c++

#define E else if
E(z>=80)z=4.5;
E(z>=70)z=4;
E(z>=60)z=3.5;
E(z>=50)z=3

chcialbym go jeszcze skrocic - chodzi o jak najmniejsza liczbe znakow (zadane na uczelni)

chcialem zdefiniowac cos w stylu #define E(x) else if... - tylko jak tu dalej to napisac zeby uzyskac cos w stylu:

E(X)z=4.5;
.
.
.

Brakuje mi 1 znaku do pierwszego miejsca w rankingu :D prosze o pomoc :D

0
z=z>=90?5:z>=80?4.5:z>=70?4:z>=60?3.5:z>=50?3:2;

48 znaków już z piątką i dwóją.

Daj treść zadania.

0
#define E(v,x) else if(z>=v)z=x;
E(80,4.5)E(70,4)E(60,3.5)E(50,3)

Zgadując, gdy nie zna się treści zadania:

z=((int)z/10+1)*.5;

albo

int a=z;a/=10;a=a<5?5:a>8?8:a;z=.5*++a;
0

Może zamiast używania preprocesora wystarczy jakieś proste działanie? Tak jak pisze Rev, ważna tu jest dokładna treść zadania.

0

Wrzucam link do zadania: http://programowanie.ii.uj.edu.pl/index.html#ProblemContent/16

0

mi tez nie dziala tamten link :)
to powinno wystarczyc (kryteria na dana ocene) :) :
if (z>=90) z=5;
else if (z>=80) z=4.5;
else if (z>=70) z=4;
else if (z>=60) z=3.5;
else if (z>=50) z=3;
else z=2;

0

Jeśli to jest wszystko to powinno wystarczyć

z=z>=50?3+((int(z)-(z==100))/10-5)*.5:2;

40 znaków

0
```cpp z=max(2,min(10,(int)z/10+1)/2.); ```

Poprawka wg @Sopelek:

z=max(4,min(10,(int)z/10+1))/2.;

wciąż 33 znaki ale nadal niepoprawnie (patrz komentarz od @MarekR22

Więc trzeba:

z=z<50?2:min(10,(int)z/10+1)/2.;

wciąż 33 znaki i chyba nareszcie poprawnie.

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