Ejercicio en C de Vectores 1.2[Borland 5.02]

Iniciado por SonaArtica, 6 Noviembre 2012, 05:53 AM

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

SonaArtica

Bueno sigo cn lo mismo,otro ejercicio de vectores,quisiera saber si creen que le falta algo.A mi parecer esta bien el ejercicio,corre perfecto si lo funcionan.Espero sus opiniones  ;D
#include <stdio.h>
#include <conio.h>
/* Se deben cargar en un vector los tiempos de clasificacion de 60 autos.
Los autos se identifican con numeros correlativos del 1 al 60.Se pide determinar:
      a)Numero de Auto que clasifico primero.
      b)Peor tiempo de clasificacion. */
main(){
       int tiempo[60];
       int autoganador;
       int i;
       float peortiempo,mejortiempo;
       for(i=1;i<60;i++){
                        printf("Ingrese Tiempo de auto %d \n",i);
                        fflush(stdin);
                        scanf(" %f",&tiempo[i-1]);
                        if (i==1 || tiempo[i-1]<mejortiempo){
                            autoganador=i;
                            mejortiempo=tiempo[i-1];
                        }//Cierre del If que saca al auto ganador
                        if(i==1 || tiempo[i-1]>autoganador){
                              peortiempo=tiempo[i-1];
                        }//Cierre del If que saca el peor tiempo
        }
       printf("El auto ganador es %d con el tiempo de %f \n",autoganador,mejortiempo);
       printf("El auto con peor tiempo fue de %f \n",peortiempo);
getch();
return 0;
}
<z

soyloqbuskas

#1
¡Buenas SonaArtica!

No he ejecutado tu programa pero creo que tiene un par de fallos...

1) el bucle se ejecuta 59 veces cuando deberia ser 60. El array va desde 0 hasta 59 y tu bucle va desde 1 hasta 59. Asi que el bucle escribelo asi:
for(i=0;i<60;i++){
//codigo
}


2) y los if del bucle no son del todo correcto si te fijas, pones

                       if (i==1 || tiempo[i-1]<mejortiempo){
                                //codigo
                       }
                       if(i==1 || tiempo[i-1]>autoganador){
                                //codigo
                       }

Para el caso i==1 entras en ambos if y lo que hagas en el segundo puede anular lo que hayas hecho en el primero. Y ademas no calculas bien el perdedor.....(usa else para que tu programa sea mas eficiente)

Yo lo haria asi...:

#include <stdio.h>
#include <conio.h>
/* Se deben cargar en un vector los tiempos de clasificacion de 60 autos.
Los autos se identifican con numeros correlativos del 1 al 60.Se pide determinar:
     a)Numero de Auto que clasifico primero.
     b)Peor tiempo de clasificacion. */
main(){
      int tiempo[60];
      int autoganador=0;
      int i=0;
      float peortiempo,mejortiempo;

       //el primero es el mejor y el peor al mismo tiempo ya que es el unico
      printf("Ingrese Tiempo de auto %d \n",i);
      fflush(stdin);
      scanf(" %f",&tiempo[0]);
      peortiempo=tiempo[0];
     
      //pedimos que ingrese datos y comparamos
      for(i=1;i<60;i++){
                       printf("Ingrese Tiempo de auto %d \n",i);
                       fflush(stdin);
                       scanf(" %f",&tiempo[i]);
                       if (tiempo[i]<mejortiempo){
                           autoganador=i;
                           mejortiempo=tiempo[i];
                       }//Cierre del If que saca al auto ganador
                       else(tiempo[i]>peortiempo){//ESTA LINEA HA CAMBIADO!
                             peortiempo=tiempo[i]; 
                       }//Cierre del If que saca el peor tiempo
      }
      printf("El auto ganador es %d con el tiempo de %f \n",autoganador+1,mejortiempo);
      printf("El auto con peor tiempo fue de %f \n",peortiempo);
getch();
return 0;
}


En caso de empate  con mejor tiempo tanto tu programa como el mio imprimiran el primer coche....

NOTA: el codigo lo he hecho a ojo y no lo he compilado pero creo que es correcto el algoritmo.

Un saludo.
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

rir3760

Cita de: SonaArtica en  6 Noviembre 2012, 05:53 AM
Bueno sigo cn lo mismo,otro ejercicio de vectores,quisiera saber si creen que le falta algo.A mi parecer esta bien el ejercicio,corre perfecto si lo funcionan.Espero sus opiniones
Se puede mejorar evitando el uso de la biblioteca conio de Borland, cambiando la definición de la función "main" y evitando el uso de "fflush(stdin);", las razones de ello se explican en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

En cuanto al caso especial (primer valor) este se puede eliminar si se utilizan dos bucles: el primero para obtener los valores y el segundo para encontrar el máximo y el mínimo.

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