Dev - C++ - ayuda en comprender este codigo

 
Vista:

ayuda en comprender este codigo

Publicado por carlos (2 intervenciones) el 23/11/2014 07:07:03
hola alguien me puede ayudar a comprender este ejercicio en especial la linea despues de declarar las variables enteras la subrayada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main ()
{
          int a=2,b=3,c=4;
          a=2*(a++) - --a+2*(b++) - --b+2*(c++) - --c;
          while (true)
          {
                switch (a)#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main ()
{
          int a=2,b=3,c=4;
          a=2*(a++) - --a+2*(b++) - --b+2*(c++) - --c;
          while (true)
          {
                switch (a)
                {
                       case 1:
                            {
                                  printf ("el valor es correcto");
                                  break;
                                  }
                                  case 2:
                            {
                                  printf ("el valor es incorrecto");
                                  break;
                                  }
                                  case 3:
                            {
                                  printf ("pudo estar mejor");
                                  break;
                                  }
                                  default:
                            {
                                  printf ("definitivamente incorrecto");
                                  break;
                                  }
                                  }
                                  break;
                                  }
                                  return 0;
                                  }
                {
                       case 1:
                            {
                                  printf ("el valor es correcto");
                                  break;
                                  }
                                  case 2:
                            {
                                  printf ("el valor es incorrecto");
                                  break;
                                  }
                                  case 3:
                            {
                                  printf ("pudo estar mejor");
                                  break;
                                  }
                                  default:
                            {
                                  printf ("definitivamente incorrecto");
                                  break;
                                  }
                                  }
                                  break;
                                  }
                                  return 0;
                                  }

de antemano se agradecen las respuestas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JuanC

ayuda en comprender este codigo

Publicado por JuanC (35 intervenciones) el 23/11/2014 10:54:15
a=2*(a++) - --a+2*(b++) - --b+2*(c++) - --c;

a++ incrementa en uno el valor de 'a' (después de utilizarlo)
--a decrementa en uno el valor de 'a' (antes de utilizarlo)

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp
Val: 73
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda en comprender este codigo

Publicado por vangodp (287 intervenciones) el 23/11/2014 17:41:25
bueno... debes intender que los operadores tienen un orden...
Solo voy a comentar el caso del a. Ya que b y c son lo mismo.

1º quiero que visites esta pagina y mires detenidamente el orden de los operadores: http://maxus.fis.usal.es/FICHAS_C.WEB/03xx_PAGS/0303.html


Como bien puedes ver tienen un orden.
Segun los que usamos 1º esta (), 2º los ++ y -- y en 3º esta los sumar y restar.
Teniendo claro el seguiente orden: (),++, --, *, +, -, ...vamos a poder resolver el rollo este.
Hay un poren... No es lo mismo x++ que ++x. Lo digo por que si x valiera 1 y pruebas imprimir 10 + ++a veras que no va dar lo mismo que 10 + x++.
Lo que ocurre con 10 + ++x es que a 10 le sumamos x ya incrementado por que como los operadores ++ van delante de x primero se incrementa y luego se hace el calculo.
Por otro lado cuando hacemos 10 + x++ ..te va a dar un rotundo 11 XD. Esto pasa por que si los operadores ++ van posteriores a x es como decir multiplica primero y despues incrementa. ojo con eso.
Voy a demostrar lo anterior con código.

Ejemplo1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
 
int main () {
 
    int n = 10;
    int x = 1;
 
    printf("n + ++x = %d\n", n + ++x );
    printf("x ahora vale: %d\n\n", x );
 
    //volvemos a dar el valor inicial a x de 1
    x=1;
    printf("n + x++ = %d\n", n + x++ );
    printf("x ahora vale: %d\n\n", x );
 
    //puedes ver como en ambos casos x termina como 2 pero hacemos la suma de num antes y despues 
    //de incrementar segun sea ++x o x++;    
 
    //No adelanta rodear x con () por que el resultado no cambiara para nada.
    x=1;
    printf("n + (++x) = %d\n", n + (++x) );
    printf("x ahora vale: %d\n\n", x );
 
    //volvemos a dar el valor inicial a x de 1
    x=1;
    printf("n + (x++) = %d\n", n + (x++) );
    printf("x ahora vale: %d", x );
 
    getchar();
    return 0;
}

Bien... algo mas claro ya quedamos no?
Seguimos...

Solo voy hacer el calculo para a, ya que b y c son lo mismo.
entonces tenemos:
int a = 2;
a = 2 * ( a++ ) - --a;

Voy explicar paso a paso como se resuelve eso: 2 * ( a++ ) - --a

1º se multiplica 2 por el valor de "a" pero sin incrementar ya que los operadores ++ van despues de la "a".
Lo anterior es equivalente a: 2 * 2. Es luego despues cuando se multiplica 2*2 que incrementa "a" ahora tenga claro que a vale 3
Entonces de aplicar el 2*2 ahora la cuenta se queda: 2*2 - --a ¿Correcto?Entonces sigamos adelante...

2º quitamos el 2*2 y ponemos el 4 que es lo que equivale 2*2, quedando: 4 - --a.
Como la orden de los operadores obliga a decrementar primero "a" por que los operadores -- van delante si hemos dicho que a valia 3 pues ha vuelto a valer 2.
Ahora queda: 4 - 2;

y eso es lo que vale a: a = 4 - 2;
O sea que los puñeteros numeros no cambian y encima te toman el pelo jajaja. Pero no es el caso, sino que aprendas a como funciona.
si ni a ni b ni c cambian los valores... Toda la marimba esa:
int a=2,b=3,c=4;
a=2*(a++) - --a+2*(b++) - --b+2*(c++) - --c;

...Equivale a :

a = a+b+c;

que es:
9 = 2+3+4;

capiche? XDD
Estudie el orden de los operadores por que es muy importante.

También puedes usar el depurador para ir viendo que valores toma las variables an todo el momento.

Suerte! =)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar