Eroare la problema C++ Clasa a IXa

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Locked
razvangherca
Junior
Junior
Posts: 1
Joined: 28 Sep 2011, 22:59
Judet: Neamţ

Eroare la problema C++ Clasa a IXa

Post by razvangherca » 28 Sep 2011, 23:04

Problema suna cam asa:
Sa se scrie un program care calculeaza valoarea functiei peuntr un x dat :
f(x)={1+max(x,y) daca x se divide cu 20
{2 altfel

Eu am scris asa:
#include <iostream.h>
#include <math.h>
int main()
{
int x,y,max,f;
cout<<"x=";
cin>>x;
cout<<"y=";
cin>>y;
max=(x+y+abs(x-y))/2;
if(x%20=0) f=1+max;
else f=2;
cout<<"f=";
cout<<f;
return 0;
}

...si imi apare eroarea "problema16.cxx:11: error: non-lvalue in assignment" pe care nu o gasesc.

Ma puteti ajuta cumva?



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Ovidiu Cucu » 28 Sep 2011, 23:54

if(x%20=0) trebuie sa fie if(x%20==0)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Silviu Ardelean » 29 Sep 2011, 08:07

Aditional la cele spuse de Ovidiu iti recomand ca atunci cand ai conditii cu constante sa pui constanta in stanga. La astfel de greseli compilatorul iti va da peste degete inainte de-a rula aplicatia, evitand astfel de buguri: if(0 == x%20) ...

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by bu7ch3r » 29 Sep 2011, 10:51

Ciudata abordare:

Code: Select all

max=(x+y+abs(x-y))/2;
In clasa a 9-a nu ma ducea capul sa fac in asa fel max a doua numere :)

Cu siguranta max a doua numere era:

Code: Select all

if( x > y )
max = x;
else
max = y;
In clasa a 10-a era:

Code: Select all

max = (x>y) ? x : y;
Se poate bineinteles filozofa pe tema asta :p
Cu stima,
Lupu Claudiu

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Ovidiu Cucu » 29 Sep 2011, 12:11

bu7ch3r wrote:Ciudata abordare:

Code: Select all

max=(x+y+abs(x-y))/2;
In clasa a 9-a nu ma ducea capul sa fac in asa fel max a doua numere :)

Cu siguranta max a doua numere era:

Code: Select all

if( x > y )
max = x;
else
max = y;
In clasa a 10-a era:

Code: Select all

max = (x>y) ? x : y;
Se poate bineinteles filozofa pe tema asta :p
Pun pariu ca-n clasa a 12-a ati ajuns la chestii avansate, precum:

Code: Select all

#include <algorithm>
// ...
max = std::max(x, y);
:D

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by bu7ch3r » 29 Sep 2011, 12:50

Multumesc, parca imi aduca aminte :)

Code: Select all

 
#define MAX(a,b)  ((((a)-(b))&0x80000000) >> 31)? (b) : (a) (furat de pe net)
P.S.Sa lasam C-ului ce-i al C-ului si C++-ului .... ;) Problema dupa cum spune titlul e de "C++", din cauza ca vine cu siguranta de la "Borland C++" sau "cevaDepasitC++". Pe langa asta "cout" si "cin" fac ca raspunsul referitor la limbajul de programare sa fie si mai ambiguu? -> E C, e C++? Poate-i "B" ?. Poate ne lumineaza Dl Stroustroup ce-i cu "++" ala ;)
Cu stima,
Lupu Claudiu

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Ovidiu Cucu » 29 Sep 2011, 13:02

bu7ch3r wrote:P.S.Sa lasam C-ului ce-i al C-ului si C++-ului .... ;) Problema dupa cum spune titlul e de "C++", din cauza ca vine cu siguranta de la "Borland C++" sau "cevaDepasitC++". Pe langa asta "cout" si "cin" fac ca raspunsul referitor la limbajul de programare sa fie si mai ambiguu? -> E C, e C++? Poate-i "B" ?. Poate ne lumineaza Dl Stroustroup ce-i cu "++" ala ;)
Este "C cu cin si cout". :)
Asta se preda si asta se cere la curs/teza/bac/olimpiada.
Din pacate n-ai ce-i face si cred ca asa va ramane pana n-or iesi la pensie 2-3 generatii de IT-isti din minister si inspectorate.

// scuzati offtopicu!

0ptr
Membru
Membru
Posts: 71
Joined: 01 Feb 2011, 23:27
Judet: Ilfov

Re: Eroare la problema C++ Clasa a IXa

Post by 0ptr » 29 Sep 2011, 18:57

Silviu Ardelean wrote:Aditional la cele spuse de Ovidiu iti recomand ca atunci cand ai conditii cu constante sa pui constanta in stanga. La astfel de greseli compilatorul iti va da peste degete inainte de-a rula aplicatia, evitand astfel de buguri: if(0 == x%20) ...
De ce e indicat sa pui constanta in stanga?

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Silviu Ardelean » 29 Sep 2011, 19:11

0ptr wrote:
Silviu Ardelean wrote:Aditional la cele spuse de Ovidiu iti recomand ca atunci cand ai conditii cu constante sa pui constanta in stanga. La astfel de greseli compilatorul iti va da peste degete inainte de-a rula aplicatia, evitand astfel de buguri: if(0 == x%20) ...
De ce e indicat sa pui constanta in stanga?
Recomandarea mea e un good practice recomandat incepatorilor dar e atent luata in seama in lumea embedded de catre developeri si departamentul de calitate.
Sa luam un exemplu simplu:

Code: Select all

	int s  = 10;
	// ceva,,,
	// si undeva in cod ne scapa un =
	if (s = 20) 
		s++;
	else
		s--;
E evident ca indiferent de valoarea lui s in momentul respectiv se va intra doar pe prima ramura (ptr orice val. diferita de 0). Nu cred ca asta vrei daca scrii codul asta.
Pentru ca codul nostru sa treaca de un review al echipei de quality chiar daca am pus if (s==20) atunci trebuie sa mutam constanta in stanga. // if (20 == s)
Daca obisnuim sa mutam constanta in stanga si uitam al 2-lea egal obtinem aceeasi eroare "left operand must be l-value" si rezolvand-o codul are mai putine buguri.

0ptr
Membru
Membru
Posts: 71
Joined: 01 Feb 2011, 23:27
Judet: Ilfov

Re: Eroare la problema C++ Clasa a IXa

Post by 0ptr » 05 Oct 2011, 19:08

Silviu Ardelean wrote:
0ptr wrote:
Silviu Ardelean wrote:Aditional la cele spuse de Ovidiu iti recomand ca atunci cand ai conditii cu constante sa pui constanta in stanga. La astfel de greseli compilatorul iti va da peste degete inainte de-a rula aplicatia, evitand astfel de buguri: if(0 == x%20) ...
De ce e indicat sa pui constanta in stanga?
Recomandarea mea e un good practice recomandat incepatorilor dar e atent luata in seama in lumea embedded de catre developeri si departamentul de calitate.
Sa luam un exemplu simplu:

Code: Select all

	int s  = 10;
	// ceva,,,
	// si undeva in cod ne scapa un =
	if (s = 20) 
		s++;
	else
		s--;
E evident ca indiferent de valoarea lui s in momentul respectiv se va intra doar pe prima ramura (ptr orice val. diferita de 0). Nu cred ca asta vrei daca scrii codul asta.
Pentru ca codul nostru sa treaca de un review al echipei de quality chiar daca am pus if (s==20) atunci trebuie sa mutam constanta in stanga. // if (20 == s)
Daca obisnuim sa mutam constanta in stanga si uitam al 2-lea egal obtinem aceeasi eroare "left operand must be l-value" si rezolvand-o codul are mai putine buguri.
Interesant. Chiar sunt oameni ce-si pun problema intr-un mod atat de strict?

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Ovidiu Cucu » 06 Oct 2011, 09:50

Sa rezumam.
In cazul problemei din topic, nu-i mare sfaraiala ce pui in fata pentru ca oricum o sa-ti dea aceeasi eroare daca scrii din greseala '=' in loc de '=='.
In general insa, nu strica/nu-i gresit/nu doare capul sa iti faci un obicei din a pune constanta in stanga operatorului de egalitate.
Pare un pic deplasat sa dai astfel de sfaturi unuia care se presupune ca acum abia desluseste buchiile C/C++.
Insa la fel, nu strica nici asta.

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Silviu Ardelean » 06 Oct 2011, 10:04

0ptr wrote:Interesant. Chiar sunt oameni ce-si pun problema intr-un mod atat de strict?
Ai fi surprins sa afli cati sunt nevoiti sa faca asta prin "fisa postului" - in special in lumea embedded.
Am inceput sa adopt aceasta practica dupa ce am fost nevoit sa aplic un tool de analiza statica (PCLint) pe o aplicatie destul de critica dar non-embedded. Lasand asta la o parte, multe reguli pe care se bazeaza acest tool te duc cu referire la item-uri din cartile Effective ale lu' Scott Meyers.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Eroare la problema C++ Clasa a IXa

Post by Ovidiu Cucu » 06 Oct 2011, 10:43

Multi profi de info nu fac distinctie inttre C si C++ iar tu spui copiilor de Scott Meyers. :D
In fine, cum spuneam nu strica nici asta. Cine stie?...


Cred ca problema din OP e rezolvata, sper ca Razvan a luat o nota buna, asa ca inchid acest topic.
Daca mai are cineva (ne)lamuriri/completari in problema lui == si-a constantei, il rog sa deschida un topic nou.

Locked