Ando codificando este:
En un estacionamiento, se cobra de la siguiente manera: los primeros 10 minutos son gratis, los siguientes 30 minutos tiene un valor de $0.30 y la hora $0.60. diseñe un programa que reciba tanto minutos como horas y muestre lo que debe cancelar el cliente. Tomando en cuenta que si es Martes y Sábado se hace un descuento del 12.56% sobre el monto total.
#include<stdio.h>
int main()
{
int min,hora,pagarporhora,montobruto;
float descuento,pagarpormin,montoapagar;
char dia[7];
printf ("Indique la cantidad de minutos: ");
scanf("%d",&min);
printf("Indique el numero de horas: ");
scanf ("%d",&hora);
printf ("Indique el Dia: ");
scanf ("%d",&dia);
if (min<=10) {
pagarpormin=0.0;
}
else
if (min<=30) {
pagarpormin=0.3;
}
else
pagarpormin=0.6;
pagarporhora=hora*0.6;
montobruto=pagarpormin+pagarporhora;
if ((dia=="sabado") || (dia=="martes")){
descuento=montobruto*12.56/100;
}
else
descuento=0;
montoapagar=montobruto-descuento;
printf("Su monto a pagar es:$ %f", montoapagar);
}
El programa corre pero no devuelve los valores requeridos.
¿En qué ando fallando?
A mi me estaba dando fallos para pasar pagarporhora y montobruto de int a float, pero bueno si a ti te va bien, mejor.
Yo habiendo definido estas dos variables como float también y poniéndole:
system("pause"); // Para que no desaparezca la pantalla rápidamente
Habiendo incluido la librería iostream, si que obtengo el resultado. Creo que no hay ningún fallo.
Al ponerle que estuve 1 hora con 30 minutos me cobra $ 0.900
Incluso si le pongo que fue sabado o lunes. Ahí tendría que haber diferencia.
Citarchar dia[7];
Tienes declarado dia como un arreglo de caracteres, pero cuando luego haces:
Citarscanf ("%d",&dia);
estas intentando guardar un valor de tipo decimal en ese arreglo de caracteres. Tendrias que usar el especificador %s, que es el fomato de tipo cadena, en el primer argumento del scanf():
scanf ("%s", &dia)
Ademas, el nombre de un arreglo es en realidad un puntero del primer elemento de un arreglo, por lo que no tiene mucho sentido que uses el operador direccion en el segundo argumento de ese scanf(), que deberia quedar finalmente asi:
scanf ("%s", dia)
A ti sí te obedece a los datos que pongas?
A mi no, es decir, ya sólo le falta obedecer cuando le digo que si es marte o sábado realice el descuento.
Para comparar la cadena ingresada con las literales "sabado" y "martes" tienes que seguir el consejo que te dieron en tu otro tema: utilizar la función strcmp.
Un saludo
Efectivamente, con la siguiente línea si que obedece al día insertado
if (strcmp(dia,"sabado")==0||strcmp(dia,"martes")==0)descuento=montobruto*12.56/100;
Listo! \o/
Una duda:
¿Tiene que ver que, como me dices, al usar strcmp al inicio tenga que cambiar el
int main()
por
int main(int argc, char * argv[])
?
¿Ahí qué estás indicando?
Al ejecutar un programa, se le pueden proporcionar datos (muy util para transmitir datos entre programas).
Si no los vas a usar, puedes dejarlo en blanco.