Jump to content
em

[Easy] C++ quest

Recommended Posts

Care crede?i c? este outputul la urm?toarele programe?

(Se accepta si depinde sau nu va compila)

NU RULATI si postati rezultatele aici, nu despre asta este vorba.

1.


#define patrat(x) x*x
int main()
{
std::cout<<patrat(3+4);
return 0;
}

2.


int main()
{
int x=16;
std::cout<<(x>>2+x>>2);
return 0;
}

3.


int main()
{
int x=0x1111b;
if(x>0xF)
std::cout<<"E mare";
else
std::cout<<"E mic";
}

4.


int main()
{
int n=10,i;
for(i=1;i<n;i++);
std::cout<<(n-(i++));
return 0;
}

5.


#define false true
int main()
{
bool x=false;
if(!x)
std::cout<<1337;
else
std::cout<<31337;
return 0;
}

6.


int main()
{
for(int l=1;1<5;l++)
{
std::cout<<l++;
if(l==10)
return l;
}
return 0;
}

7.


int main()
{
int i=0;
std::cout<<(++i + ++i + ++i);
return 0;
}

8.


int main()
{
std::cout<<"\\\nRST\0TEAM";
return 0;
}

9.


int dim(int64_t* a)
{
return sizeof(a);
}
int main()
{
int64_t a[5];
std::cout<<dim(a);
}

10.


int main()
{
while(0)
std::cout<<31338;
return 0;
}

Nu derula mai jos de aici. Gânde?te-te la r?spunsuri înainte.

LE: Dup? cum a zis ?i Nytro mai bine r?spunsurile prin PM ?i eventualele observa?ii aici. Nu conteaz? dac? nu ?ti?i r?spunsurile la toate întreb?rile, încerca?i! :)

Clasament

1. Cmin (7/10)

2. Patrunjel

3. Nytro

4-5. Flubber, nedo

6. tiodr

sulea a ales s? r?spund? doar la întreb?rile care i-au pl?cut.

Dificultate întreb?ri

10, 1 (4 corecte)

3, 5 (3 corecte)

6, 9 (2 corecte)

2, 4, 8 (1 corecte)

7 (0 corecte) - nimeni nu a r?spuns corect.

  • Upvote 2
Link to comment
Share on other sites

R?spunsuri

1. S? analiz?m ce se întâmpl? în etapa de preprocesare. Am rulat

g++ -E test1.cpp -o test1P.cpp


std::cout << 3+4*3+4;

Inmultirea are prioritate

R: 19

2. Semnul + are prioritate

R: 0

3. Amandoua sunt numere in baza 16

R: E mare

4. for-ul are un ; dupa el. i cand iese de acolo are valoarea 0

R: 0

5. x=true; !x=false

R: 31337

6. 1<5 (unu < cinci)

R: 13579

7.

Mai bine s? lu?m un exemplu mai u?or


int i=1;
std::cout<<(i + ++i);

sau


int i=1;
std::cout<<(++i + i);

Raspunsul ar fi 4 in ambele cazuri! De ce?

g++ p7.c -S -masm=intel


mov DWORD PTR [esp+28], 1 ; i=1
add DWORD PTR [esp+28], 1 ; ++i (prioritate)
mov eax, DWORD PTR [esp+28] ; trec in registru sa ma pragatesc de adunare
add eax, eax ; adunarea operanzilor

Ca s? vede?i dac? a?i în?eles ce am zis încerca?i s? v? gândi?i la


std::cout<<(++i + (++i + ++i));

R: 7

8.

\\ -> \

\n -> newline

\0 -> terminator de string

R: \(linie noua) RST

9.

Eu trimit ca parametru &a[0] de fapt (un pointer mai exact).

R: 8 sau 4

10.

Conditia e falsa

R:

Felicit?ri participan?ilor. La primul post e ?i un clasament.

Edited by em
mersi kynder
Link to comment
Share on other sites

R?spunsuri

7.

Mai bine s? lu?m un exemplu mai u?or


std::cout<<(i + ++i);

sau


std::cout<<(++i + i);

Raspunsul ar fi 4 in ambele cazuri! De ce?

aici gresesti, raspunsul e 2, presupunand ca i are valoarea initiala 0

cat despre cout << (++i + ++i + ... de n ori ++i) actioneaza ca n^2;

deci raspunsul la cout << (++i + ++i + ++i) = (3+3+3) = 3^2 = 9;

Link to comment
Share on other sites

Am f?cut o incurcatur?, pentru c? mi-am scris întâi exemplul pe windows, apoi l-am mutat pe linux s? am gcc cu parametrii. Multumesc de observatie.

Dar eu totu?i cred c? orice compilator care respect? standardele ar trebui s? ofere r?spunsul 7 aici (pentru ca întâi se evalueaza primele 2; r?spunsul 9 este la questul suplimentar propus de mine)


int i=0;
std::cout<<(++i + ++i + ++i);

Ai g?sit vreun compilator care s? dea alt rezultat?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...