que quiere decir este ejercicio?[c]

Iniciado por flacc, 15 Diciembre 2010, 10:30 AM

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

flacc

interesante, no me puse a pensar en hacer un bucle.. solo pense "como diablos hago para hacer que el codigo cree variables"...en fin... gracias..

ABDERRAMAH

A mi me pasó lo mismo, lo primero que pensé fue... Necesitamos N variables y por eso pensé en el array. Yo creo que el ejercicio está redactado con "perrería" para tratar de confundir un poquito, jeje.

autlos

#12
Es un ejercicio relativamente sencillo, yo estoy en DAI y tuve que hacer uno similar pero algo más complejo hace poco. Lo que debes de hacer es lo que te ha dicho diskontrol. Te voy a poner el código del que tuve que hacer yo, tiene bastantes cosas que no necesita el tuyo pero si lo entiendes te irá bien:

/*
16. Introducir por teclado las edades de 25 alumnos. Validar que son números comprendidos entre 17 y 30. Obtener y visualizar
la edad del más mayor y ver cuántas veces se repite esa edad. Obtener y visualizar la edad del menor y ver cuántas veces se
repite esa edad. Además indicar la edad media (sin decimales) de la clase.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
   int edad, contador=1, mayor=0, contmay=0, contmen=0, suma=0, menor=30, media=0;
   for (contador; contador<=8;contador++)
   {
           printf("Introducir edad entre 17 y 30: ");
           scanf("%d", &edad);
           fflush(stdin);
       while (edad<17 || edad>30)
       {
             printf("Edad incorrecta, introducela otra vez: ");
             scanf("%d", &edad);
       }  
        if (edad>mayor) mayor=edad;  
        if (edad<menor) menor=edad;  
        if (edad==mayor) contmay++;
        if (edad==menor) contmen++;
        suma+=edad;
   }
   media= suma/contador;
   printf("La edad del mayor es %d, la edad del menor es %d, y la edad media es %d\n",mayor,menor,media);
   system("pause");

}

Lo que tienes que cambiar es que no necesitas calcular la media, ni cuardar contadores, tan sólo el número mayor, el menor, los números que quiera introducir y otra para guardar los introducidos. En un bucle for de 0 al límite elegido haces algo similar a lo que hice yo, ahorrándote el proceso de verificar nada.

Por cierto, aprovecho este post para 2 cosas: para presentarme, y para que vosotros los expertos echéis un vistazo a ver qué cagadas (malos hábitos) tengo en mis códigos para ir haciendo mis programas más eficientes...  ;D

leogtz

Cita de: ABDERRAMAH en 15 Diciembre 2010, 15:56 PM
A mi me pasó lo mismo, lo primero que pensé fue... Necesitamos N variables y por eso pensé en el array. Yo creo que el ejercicio está redactado con "perrería" para tratar de confundir un poquito, jeje.

Desde un principio se puede deducir que no se necesita un arreglo, solo dos variables y un ciclo.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

flacc

amm, aunque me cuesta un poco entender el código, ya que no tengo mucha experiencia leyendo códigos ajenos(confío en que esa habilidad mejorará con el tiempo y la practica)... en fin.. tengo una idea aunque por baja que sea es algo... un poco diferente pero la idea no es copy paste al %70... asi que en fin... y sobre los malos hábitos, el system("pause");  supongo que lo hace anti estándar, podrás usar en su lugar getchar(); ... en fin.. solo soy un novato... saludoss

dato000

Cita de: autlos en 15 Diciembre 2010, 16:35 PM
Es un ejercicio relativamente sencillo, yo estoy en DAI y tuve que hacer uno similar pero algo más complejo hace poco. Lo que debes de hacer es lo que te ha dicho diskontrol. Te voy a poner el código del que tuve que hacer yo, tiene bastantes cosas que no necesita el tuyo pero si lo entiendes te irá bien:

/*
16. Introducir por teclado las edades de 25 alumnos. Validar que son números comprendidos entre 17 y 30. Obtener y visualizar
la edad del más mayor y ver cuántas veces se repite esa edad. Obtener y visualizar la edad del menor y ver cuántas veces se
repite esa edad. Además indicar la edad media (sin decimales) de la clase.
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
   int edad, contador=1, mayor=0, contmay=0, contmen=0, suma=0, menor=30, media=0;
   for (contador; contador<=8;contador++)
   {
           printf("Introducir edad entre 17 y 30: ");
           scanf("%d", &edad);
           fflush(stdin);
       while (edad<17 || edad>30)
       {
             printf("Edad incorrecta, introducela otra vez: ");
             scanf("%d", &edad);
       }  
        if (edad>mayor) mayor=edad;  
        if (edad<menor) menor=edad;  
        if (edad==mayor) contmay++;
        if (edad==menor) contmen++;
        suma+=edad;
   }
   media= suma/contador;
   printf("La edad del mayor es %d, la edad del menor es %d, y la edad media es %d\n",mayor,menor,media);
   system("pause");

}

Lo que tienes que cambiar es que no necesitas calcular la media, ni cuardar contadores, tan sólo el número mayor, el menor, los números que quiera introducir y otra para guardar los introducidos. En un bucle for de 0 al límite elegido haces algo similar a lo que hice yo, ahorrándote el proceso de verificar nada.

Por cierto, aprovecho este post para 2 cosas: para presentarme, y para que vosotros los expertos echéis un vistazo a ver qué cagadas (malos hábitos) tengo en mis códigos para ir haciendo mis programas más eficientes...  ;D

Bueno, tengo entendido que llamar al sistema es un desperdicio y una mala maña, que para eso simplemente es usar un getchar(); Pero el codigo esta muy bien hecho, solo seria hacer una mejor organizacion, yo lo hago así:

Original
Citarif (edad>mayor) mayor=edad;  
        if (edad<menor) menor=edad;  
        if (edad==mayor) contmay++;
        if (edad==menor) contmen++;
        suma+=edad;
     .
     .
     .
     system("PAUSE");

Sugerencia
Citarif (edad>mayor)
                      {mayor=edad; } 
        if (edad<menor)
                  {menor=edad;  }
        if (edad==mayor)
                  {contmay++;}
        if (edad==menor)
                  {contmen++;}
        suma+=edad;
     .
     .
     .
     getchar()




leogtz

Cita de: dato000 en 16 Diciembre 2010, 02:07 AM
Bueno, tengo entendido que llamar al sistema es un desperdicio y una mala maña, que para eso simplemente es usar un getchar(); Pero el codigo esta muy bien hecho, solo seria hacer una mejor organizacion, yo lo hago así:

Original
Sugerencia


Tu indentación es incorrecta, por favor mejorala, te traerá muchos beneficios.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

anonimo12121

int n[5] ={1,5,3,7,9};
[5] supongo que eso es predefinir los numeros que salen. luego ya los numeros dan igual ingrese los que ingreses. supongo que sera esto.
Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746

ghastlyX

Para lo de leer un número indefinido de números, una manera muy simple de hacerlo es ir leyendo hasta encontrar un EOF, es algo que se usa mucho en concursos de programación. Para hacerlo en C, puedes hacerlo de la siguiente manera:
#include <stdio.h>

const int INF = 1000000000;

int main() {
    int maxim = -INF, minim = INF, a;
    while (scanf("%d", &a) != EOF) {
        if (maxim < a) maxim = a;
        if (minim > a) minim = a;
    }
    printf("%d %d\n", maxim, minim);
}


Y si lo pruebas por teclado, puedes enviar un EOF haciendo Control+D en Linux y Control+Z en WIndows.

flacc