Dev - C++ - ayuda en comprender este codigo

   
Vista:

ayuda en comprender este codigo

Publicado por carlos (1 intervención) el 15/12/2014 04:37:39
Alguien me puede ayudar a comprender este codigo no lo logro entender ademas cuando lo ejecuto en la pantalla no aparece nada. Se agradece de antemano las respuestas

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
#include <iostream>
#include <stdio.h>
 
void prueba (int px, int py)
{
     printf("%i y %i",px,py);
     }
int  fprueba (int fpx, int fpy)
{
     int fpsalida;
     fpsalida=fpx*fpy+2;
     return fpsalida;
     }
main(void)
{
int a,b,z;
float c  [4];
int *p, *q;
float *r;
p=&a;
q=&b;
r=&c[0];
 
for (int k=0; k<4; k++) *q=2*k+1;
for (int i=0; i<3; i++) *q=i+1;
a=fprueba (1,5)-2;
b=fprueba (2,4);
 
while (true)
{
     switch (a)
     {
            case 1:
                 {
                        z=3;
             for (int j=0; j<4;j++) *(r+j)=j+1;
             prueba (1,0);
             break;
             }
             case 2:
                    {
                        z=3;
             for (int j=0; j<4;j++) *(r+j)=j+1;
             prueba (2,0);
             break;
             }
             case 3:
                   {
                        z=3;
             for (int j=0; j<4;j++) *(r+j)=j+1;
             prueba (3,0);
             break;
             }
             }
             if (z==3)
             break;
             }
             }
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 vangodp

ayuda en comprender este codigo

Publicado por vangodp (287 intervenciones) el 15/12/2014 12:03:03
si pones un simples cout << a << endl << b << endl; antes del while ( true ) veras que vale a y b. Veras el por que no hace nada.
Tienes 3 case, que esperan 1, 2 y 3 respectivamente. Pero al switch espera lo que devuelve tu variable a. Bien.. te diré que 'a' devuelve 5 siempre. Como 5 no es ni 1, ni 2 y ni es 3 pues ese es el caso de que no haga nada tu programa.
A debe ser uno de los valores esperados (1,2 y 3), debes arreglar eso o los valores de los case están malos.

Otro punto a destacar es que esto: *( r + j ) = j + 1; es aritmética de punteros. En ese caso r que es un puntero apunta hacia un lugar de la memoria que en ese caso es la primera posición de c[], al sumarle j ese lugar al que apunta r va cambiando. El operador * es el que se encarga de guardar j+1 a lo que apunta r+j. Nada del otro mundo.

Confío en que sepas sobre aritmética de punteros. Si no sabes es el momento de actualizarte.

Aquí te dejo el código comentado y "arreglado" de manera que puedas ver los errores:http://codepad.org/S3KsjDxl
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