Ayuda en C por favor dificultad baja

Iniciado por pMV2ere, 2 Octubre 2013, 20:36 PM

0 Miembros y 1 Visitante están viendo este tema.

pMV2ere

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

dnlsrl

#1
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.

pMV2ere

las filas con ---------------------- no están en el código original
gracias por tu rspuesta, al menos ya me han contestado  :D

eferion

Sería de ayuda entender lo que quieres conseguir y qué es lo que no funciona como esperas.

Dawman

#4
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



Cita de: nouaman 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

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

pMV2ere

#5
Cita de: 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.


sólo tenía que traducir este código a C.
algorisme change
var
price, paid, diff, current, qtt: enter;
priceWithCents, paidWithCents: real;
fvar
priceWithCents:= readReal();
paidWithCents:= readReal();
price:= realToInt(priceWithCents * 100.0 + 0.5);
paid:= realToInt(paidWithCents * 100.0 + 0.5);
diff:= paid – price;
writeReal( intToReal(diff) / 100.0 );
current:= 50000;
mentre diff > 0 fer
qtt:= diff div current;
05.554 · FP· PAC1 · 2013-01 · Programa · Estudis d'Informàtica Multimèdia i Telecomunicació
14
si qtt > 0 llavors
writeInteger( qtt );
writeReal( intToReal(current) / 100.0 );
fsi
diff:= diff mod current;
si current = 50000 o current = 5000 o current = 500 o current = 50 o current = 5 llavors
current:= realToInt( intToReal( current ) / 2.5 );
sino
current:= current div 2;
fsi
fmentre
falgorisme




Cita de: nouaman en  2 Octubre 2013, 21:25 PM
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

eferion

#6
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...


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


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


int i;
for ( i=0; i<15; ++i )
{
 int qt = diff / monedas[ i ];
 if ( qt != 0 ) // Solo hacemos calculos si de la moneda actual hay que devolver algo
 {
   diff -=  qt * monedas[ i ];
   printf( "valor moneda: %f, cantidad: %d\n", (float)monedas[ i ] / 100.0, qt );
 }
}


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.