Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: flacc en 15 Diciembre 2010, 10:30 am



Título: que quiere decir este ejercicio?[c]
Publicado por: flacc en 15 Diciembre 2010, 10:30 am
Hola, en este ejercicio no entiendo el enunciado...
Citar
Escribir un programa que lea N números enteros y muestre el mayor y el menor de todos ellos.
a que se refiere con n números?, a mi me suena a que el programa tiene que almacenar todos los n° que al user se le ocurra poner, y si es así, como hago eso?... no puedo predefinir cuantos n° van a entrar.. o si se puede?...saludoss


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: dooque en 15 Diciembre 2010, 14:00 pm
hola!

Eso lo podes decidir vos! El usuario podria primero especificar cuantos numeros va a entrar y luego ingresa esa cantidad de numeros! O podrias ir ingresando cadenas y cuando se ingrese la cadena vacia terminar de leer los numeros, o alguna otra forma!

Saludos


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: pitka en 15 Diciembre 2010, 14:33 pm
Hola, en este ejercicio no entiendo el enunciado...a que se refiere con n números?, a mi me suena a que el programa tiene que almacenar todos los n° que al user se le ocurra poner, y si es así, como hago eso?... no puedo predefinir cuantos n° van a entrar.. o si se puede?...saludoss

Si es exactamente eso, almacenar los números que ingrese el usuario por teclado me imagino que en un arreglo y luego ordenarlo de manera que puedas sabe cual es el numero mayor y cual es el menor y mostrarlos por pantalla. Así que lo que debes estudiar seria arreglos, algoritmos de ordenación básicamente creo que eso  :D


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: pucheto en 15 Diciembre 2010, 14:35 pm
Si es exactamente eso, almacenar los números que ingrese el usuario por teclado me imagino que en un arreglo y luego ordenarlo de manera que puedas sabe cual es el numero mayor y cual es el menor y mostrarlos por pantalla. Así que lo que debes estudiar seria arreglos, algoritmos de ordenación básicamente creo que eso  :D
No hace falta ordenarlos si solo le interesa el maximo y el minimo.


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: pitka en 15 Diciembre 2010, 14:56 pm
No hace falta ordenarlos si solo le interesa el maximo y el minimo.

Me imagine que se podría hacer sin ordenar pero no estaba seguro, yo también estoy muy verde en C. Gracias por la aclaración


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: flacc en 15 Diciembre 2010, 14:59 pm
gracias de todas formas, creo que no fui claro, yo me referia a la aprte de n numeros, osea a que si debo almacenar todos los numeros que se le ocurran al usuaro 1000, 5, 324, etc... osea numeros al azar en cuanto a cantidad se refiere, lo demas lo entiendo...


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: ABDERRAMAH en 15 Diciembre 2010, 15:03 pm
Sí, se refiere a cualquier cantidad de números. De todas formas no especifica que se deban leer desde el usuario, ¿no? podría ser desde un archivo o algo, supongo. Tu para poder almacenarlos haz un array y vas añadiendo números.


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: flacc en 15 Diciembre 2010, 15:27 pm
no, solo son numeros desde scanf a una variable, todavia no llego en el libro nisiquiera a las listas, apenas termino la parte de while, do while y for... y me fijo que es un array...
edit: esta complicado esto del array, porque no he llegado a los punteros, ni esas cosas de matrices y listas... en fin.. hare lo que pueda


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: diskontrol en 15 Diciembre 2010, 15:43 pm
No hace falta que almacenes los números, con una variable para el número máximo inicializada a 0 (suponiendo que hablamos de numeros naturales), otra para el número mínimo inicializada al máximo (máximo de int, por ejemplo) y una variable temporal para almacenar el número introducido, haces un bucle infinito (o para la cantidad de números que quieras leer) con algún escape y en cada iteración comparas el número escaneado con el máximo y el minimo; si procede sustituyes la que toca.


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: ABDERRAMAH en 15 Diciembre 2010, 15:45 pm
Cierto, puedes montar un procedimiento algo así y llamarlo cada petición de número


Código:
entero valor_input
entero valor_max = 0
entero valor_min = 65000 //[usar el límite máximo adecuado]

procedimiento input()

pedir_número(valor_input)

if (valor_input<valor_min)
  valor_min=valor_input
else if (valor_input >valor_max)
  valor_max=valor_input
end if

end procedimiento





Título: Re: que quiere decir este ejercicio?[c]
Publicado por: flacc en 15 Diciembre 2010, 15:52 pm
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..


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: 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.


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: 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.
*/
Código:
#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


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: leogtz en 15 Diciembre 2010, 17:07 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.


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: flacc en 15 Diciembre 2010, 18:46 pm
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


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: dato000 en 16 Diciembre 2010, 02:07 am
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.
*/
Código:
#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
Citar
if (edad>mayor) mayor=edad;  
         if (edad<menor) menor=edad;  
         if (edad==mayor) contmay++;
         if (edad==menor) contmen++;
         suma+=edad;
     .
     .
     .
     system("PAUSE");

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



Título: Re: que quiere decir este ejercicio?[c]
Publicado por: leogtz en 16 Diciembre 2010, 08:55 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.


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: anonimo12121 en 16 Diciembre 2010, 11:43 am
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.


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: ghastlyX en 16 Diciembre 2010, 13:08 pm
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:
Código
  1. #include <stdio.h>
  2.  
  3. const int INF = 1000000000;
  4.  
  5. int main() {
  6.    int maxim = -INF, minim = INF, a;
  7.    while (scanf("%d", &a) != EOF) {
  8.        if (maxim < a) maxim = a;
  9.        if (minim > a) minim = a;
  10.    }
  11.    printf("%d %d\n", maxim, minim);
  12. }

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


Título: Re: que quiere decir este ejercicio?[c]
Publicado por: flacc en 17 Diciembre 2010, 17:22 pm
muy interesante ghastlyX gracias...