Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pMV2ere en 2 Octubre 2013, 20:36 pm



Título: Ayuda en C por favor dificultad baja
Publicado por: pMV2ere en 2 Octubre 2013, 20:36 pm
Buenas amigos, hoy he hecho mi primer programa en C y no consigo ver los errores que he cometido.
Podéis ayudarme con esto? me da error en las filas con--------------------
en el error del diff dice: expected ";" before price


Título: Re: Ayuda en C por favor dificultad baja
Publicado por: dnlsrl en 2 Octubre 2013, 21:05 pm
Hola,

Una pregunta, ¿pusiste los ------- como referencia para que veamos dónde te marca los errores, o los pusiste en el código? Si los pusiste en el código, seguro que el compilador los está marcando como puntuación incorrecta. Intenta comentarlos con un #.

En las líneas 8 y 9 estás haciendo typecasting ¿estoy en lo correcto? Si es así, ¿por qué hacer una operación con un int y dos floats si las variables priceWithCents y paidWithCents son floats por "naturaleza"? Checa eso..

My bad, eso está bien.

Quizá si nos dices el resultado deseado o para qué sirve ese pedazo de código te podamos ayudar.

Un saludo.
PS. Hace mucho que no toco C :xD Así que si te señalo un error que no existe, por favor una disculpa.


Título: Re: Ayuda en C por favor dificultad baja
Publicado por: pMV2ere en 2 Octubre 2013, 21:15 pm
las filas con ---------------------- no están en el código original
gracias por tu rspuesta, al menos ya me han contestado  :D


Título: Re: Ayuda en C por favor dificultad baja
Publicado por: eferion en 2 Octubre 2013, 21:19 pm
Sería de ayuda entender lo que quieres conseguir y qué es lo que no funciona como esperas.


Título: Re: Ayuda en C por favor dificultad baja
Publicado por: Dawman en 2 Octubre 2013, 21:20 pm
Hola,

Asi a simple vista, veo que por una banda:
    1  - diff= paid-price
depués declaras diff como:
    2  - diff=diff%current

yo probaria de declarar la segunda diff con otro variable(aux) por ejemplo.

No he podido probarlo porq no tengo dnd ejecutar nada del C... pero a simple vista parece q esta bien


Hola,

Asi a simple vista, veo que por una banda:
    1  - diff= paid-price
depués declaras diff como:
    2  - diff=diff%current

yo probaria de declarar la segunda diff con otro variable(aux) por ejemplo.

No he podido probarlo porq no tengo dnd ejecutar nada del C... pero a simple vista parece q esta bien

Otra cosa mas!!
el or se escribe hace con doble barra vertical ||


Título: Re: Ayuda en C por favor dificultad baja
Publicado por: pMV2ere en 2 Octubre 2013, 21:26 pm
Sería de ayuda entender lo que quieres conseguir y qué es lo que no funciona como esperas.


sólo tenía que traducir este código a C.
Código
  1. algorisme change
  2. var
  3. price, paid, diff, current, qtt: enter;
  4. priceWithCents, paidWithCents: real;
  5. fvar
  6. priceWithCents:= readReal();
  7. paidWithCents:= readReal();
  8. price:= realToInt(priceWithCents * 100.0 + 0.5);
  9. paid:= realToInt(paidWithCents * 100.0 + 0.5);
  10. diff:= paid – price;
  11. writeReal( intToReal(diff) / 100.0 );
  12. current:= 50000;
  13. mentre diff > 0 fer
  14. qtt:= diff div current;
  15. 05.554 · FP· PAC1 · 2013-01 · Programa · Estudis d’Informàtica Multimèdia i Telecomunicació
  16. 14
  17. si qtt > 0 llavors
  18. writeInteger( qtt );
  19. writeReal( intToReal(current) / 100.0 );
  20. fsi
  21. diff:= diff mod current;
  22. si current = 50000 o current = 5000 o current = 500 o current = 50 o current = 5 llavors
  23. current:= realToInt( intToReal( current ) / 2.5 );
  24. sino
  25. current:= current div 2;
  26. fsi
  27. fmentre
  28. falgorisme


Otra cosa mas!!
el or se escribe hace con doble barra vertical ||

ahora sólo tengo problemas con el diff

el diff primero lo declaro asi pq el algoritmo calcula cuantas monedas/billetes dar de cambio.
El primero hace efectivo entregado-precio
el segundo sirve para pasar a un billete/moneda más pequeño

lo que no entiendo es pq va mal el primero y el segundo no

quizá sea de ayuda decir que en el error del diff dice: expected ";" before price


Título: Re: Ayuda en C por favor dificultad baja
Publicado por: eferion en 3 Octubre 2013, 10:32 am
El código es un poco extraño y difícil de seguir.

Podrías mejorar su legibilidad si te creas un vector con el valor de los billetes y monedas...

Código
  1. int[15] monedas = { 50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1 }; // Billetes y monedas de Euro.
  2.  

Con un vector así, calcular las vueltas resulta en un algoritmo sencillo de manejar y seguir:

Código
  1. int i;
  2. for ( i=0; i<15; ++i )
  3. {
  4.  int qt = diff / monedas[ i ];
  5.  if ( qt != 0 ) // Solo hacemos calculos si de la moneda actual hay que devolver algo
  6.  {
  7.    diff -=  qt * monedas[ i ];
  8.    printf( "valor moneda: %f, cantidad: %d\n", (float)monedas[ i ] / 100.0, qt );
  9.  }
  10. }

Pero claro, si te tienes que ceñir a ese pseudocódigo no hay margen de maniobra.



Referente a tus errores, tienes 2:

* El del diff que dices, tiene toda la pinta de que se te ha colado un caracter no imprimible y es lo que está dando el error. Prueba a borrar la linea y reescribirla... a mi me ha compilado.

* Las comprobaciones de 50000, 5000, ... van con doble igual '==' con solo un igual estás haciendo una asignación.