Hola, en este ejercicio no entiendo el enunciado...
CitarEscribir 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
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
Cita de: mini_nauta en 15 Diciembre 2010, 10:30 AM
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
Cita de: pitka en 15 Diciembre 2010, 14:33 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.
Cita de: pucheto en 15 Diciembre 2010, 14:35 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
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...
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.
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
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.
Cierto, puedes montar un procedimiento algo así y llamarlo cada petición de número
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
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..
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.
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
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.
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
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()
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.
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.
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.
muy interesante ghastlyX gracias...