[C] Error en código de ejercicio

Iniciado por audiogalaxy., 29 Marzo 2013, 07:32 AM

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

audiogalaxy.

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?
Qué sería de dios sin el Hombre.

Almapa

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:

Código (cpp) [Seleccionar]
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.

audiogalaxy.

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.
Qué sería de dios sin el Hombre.

pacoperico

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():
Código (cpp) [Seleccionar]
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:
Código (cpp) [Seleccionar]
scanf ("%s", dia)

audiogalaxy.

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.
Qué sería de dios sin el Hombre.

rir3760

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Almapa

Efectivamente, con la siguiente línea si que obedece al día insertado

Código (cpp) [Seleccionar]
if (strcmp(dia,"sabado")==0||strcmp(dia,"martes")==0)descuento=montobruto*12.56/100;

audiogalaxy.

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?
Qué sería de dios sin el Hombre.

amchacon

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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar