Ayuda Con Lenguaje C Algorismo

Topic created · 3 Mensajes · 549 Visitas
  • El Algorismo Es En Lenguaje C!!!

    Las Multas

    En la ciudad de San Cristóbal, la Municipalidad ha prohibido girar a la derecha. Para obligar al cumplimiento de esta regla, es obligatorio instalar en todo vehículo un aparato que registra las coordenadas en plano cartesiano del vehículo cada vez que éste dobla.

    Al terminar un viaje, una sucesión de posiciones se transmite a una computadora municipal que calcula el total de la multa sumando Bs.F 5 por cada giro a la derecha. Es problema a resolver es: dada la sucesión de posiciones de un vehículo, calcular el total de la multa.

    Detalles:

    Para facilidad, un viaje será representado como una sucesión de 3 puntos: p1, p2, p3. Cada punto es un par de números (i, j), donde i y j son las coordenadas del punto en un sistema de coordenadas que tiene como origen al edificio de la Municipalidad.

    p1 es el punto donde empezó el viaje, p3 es donde terminó y p2 es la esquina donde el vehículo dobló. Las calles son rectas de dirección arbitraria. Entonces los datos a recibir se representan de la siguiente forma:

    AKI ESTA LA IMAGEN
    [http://www.subeimagenes.com/img/22-24125.html][0]">[http://www.subeimagenes.com/img/22-24125.html][1]

    El problema consiste en escribir un programa que contenga un menú con las siguientes opciones:
    1. Recibir por teclado los datos correspondientes a las coordenadas de varios carros
    2. Calcular la multa de cada uno de los carros
    3. Mostrar por pantalla el grafico de recorrido de un vehículo cualquiera que el usuario introduzca por teclado. (El usuario introduce el numero del vehículo a ver)
    4. Salir

    Cuando el usuario presione opción 1:

    El programa deberá permitir que el usuario ingrese los datos de las coordenadas del movimiento de los vehículos. No se sabe exactamente cuántos vehículos se estudiaran pero se sabe que al menos llegará uno.

    Cuando el usuario presione opción 2:
    El programa deberá calcular la multa de cada uno de los vehículos introducidos sumando BsF 5 por cada giro a la derecha del automóvil.

    En el ejemplo dado, estos son los recorridos: (FIJESE QUE SOLO SE MULTA A LOS VEHICULOS QUE REALIZARON CRUCE A LA DERECHA)
    AKI ESTA LA IMAGEN
    [http://www.subeimagenes.com/img/223-24127.html][0]">[http://www.subeimagenes.com/img/223-24127.html][2]

    El formato de salida debe ser el siguiente:

    Vehículo 1. Carlos Pérez. Multa Bs.F 5
    Vehículo 2. Juan Suarez. Multa Bs.F 0

    Cuando el usuario presione opción 3:
    El programa preguntará cual número de vehículo se va a visualizar. La visualización quedará a su gusto, pero este es un ejemplo. OJO: Por efectos de visualización nunca se pondrán coordenadas mayores a -10 o 10 en el eje de las x, ni a -10 o 10 en el eje de las Y.

    Ejemplo: Supongamos que el usuario desea visualizar el vehiculo 0, entonces por pantalla se veria algo como lo siguiente:
    AKI ESTA LA IMAGEN
    [http://www.subeimagenes.com/img/2235-24130.html][0]">[http://www.subeimagenes.com/img/2235-24130.html][3]

    [0]: <a href=
    [1]: http://www.subeimagenes.com/img/22-24125.html
    [2]: http://www.subeimagenes.com/img/223-24127.html
    [3]: http://www.subeimagenes.com/img/2235-24130.html

  • en qué lenguaje tienes que hacerlo? si es en java creo que la solución sería usar el método:
    relativeCCW(double x, double y)
    Es un método de la clase Line2D, y permite saber si un punto (x,y) está a un lado o a otro de la línea. O dicho de forma más concreta: nos dice en qué sentido tendría que pivotar una recta (sobre su punto de inicio) para apuntar hacia el nuevo punto.

    Ejemplo de código:

    Line2D linea = new Line2D.Double(4,1,5.5,4);
    		System.out.println(linea.relativeCCW(5, 2));
    

    La primera instrucción crea una línea (con coordenadas de tipo double, para mayor precisión), cuyo origen es (4, 1) y su final es (5.5, 4). Es decir, los datos del primer ejemplo.
    En la segunda instrucción imprimimos por pantalla el resultado de la operación que nos interesa:
    ¿el punto (5, 2) a qué lado de la línea queda? ¿hay que girar en un sentido o en otro?
    El resultado por pantalla es:
    1
    Mientras que si ponemos, por ejemplo, el punto (3, 3) el resultado es:
    -1

    Así que podríamos decir que el primer punto está girando a la derecha, y el segundo girando a la izquierda.

    ¿es eso lo que necesitas?

  • Lo siento se me olvido ese detalle es en lenguaje C, estoy utilizando el builder borlan c++ 6.0