Autor
|
Tema: Dudas de programa en C (Leído 2,964 veces)
|
Orb
Desconectado
Mensajes: 81
|
Buenas Estaba haciendo un ejercicio en C cuyo enunciado es elaborar un programa que encuentre el valor mayor y menor de la suma de 10 numeros enteros introducidos por teclado. Esto es lo que he hecho ; #include <stdio.h> int main(void){ int datos[10]; int cantidad_datos=10; int i; int mayor=0; int menor; int suma; for(i= 0 ; i < cantidad_datos ; i++){ printf("\nIntroduzca el valor del número #%i\n", i +1); } for(i=0 ; i <cantidad_datos ; i++){ if(datos[i] > mayor) mayor= datos[i]; } printf("\nEl valor máximo es %d\n", mayor ); for(i=0 ; i<cantidad_datos ; i++){ if(datos[i] < menor) menor = datos[i]; } printf("\nEl valor mínimo es %d\n", menor ); }
Es un código bastante sucio pero no me lo toméis en cuenta que estoy empezando. Mi primera duda es como sumar todos los elementos del vector.Probé haciendo esto : int suma; suma= datos[1]+datos[2]+.... etc etc pero no funcionó, podría hacerse con un for? Y mi otra duda sería como optimizar el código con funciones.Es decir que hallar el mínimo lo haga una función llamada minimo(), el maximo otra llamada maximo().. Para que esto fuera posible que debería hacer, al declarar la función pasar como parámetros esos valores y luego retornarlos al llamar la función? Es decir algo como int maximo(int mayor) y luego hacer la llamada así? maximo(mayor2) o directamente no harían falta parámetros en la función? No sé si me explico, a ver si alguien puede ayudarme
|
|
|
En línea
|
|
|
|
NowhereMan
Desconectado
Mensajes: 24
|
Yo sugiero que lo hagas ordenando todos tus valores (ya sea de mayor a menor o de menor a mayor) y asi simplemente seleccionas el numero, que deseas, el metodo mas sencillo a mi parecer es el metodo de la burbuja, que puedes hacer con un simple for
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Unas cuantas cosas: menor no está inicializado, si es menor que cualquier número que entres el programa te dará datos falsos.
En este caso no te hace falta ningún array. Cada vez que se ingrese un dato por teclado se puede ver si es mayor o menor que los que tienes guardados y además puedes ir sumando el resultado final.
Sí, puedes realizar funciones que te devuelvan el mayor/menor. Para ello le pasas los dos valores a comparar y que te devuelva el mayor/menor de los dos. En internet hay muchos ejemplos de esto pero se realizan con macros ya que son más rápidas e igualmente clarifican el código.
|
|
|
En línea
|
|
|
|
Orb
Desconectado
Mensajes: 81
|
Buenas, gracias por responder. He buscado acerca del método mencionado el de la burbuja, aunque sin mucho éxito. Mafus, la variable menor no esta inicializada pero de momento funciona, me devuelve el valor menor.¿Por qué es tan importante inicializar? Y al ser 10 datos veía mejor un array que diez variables para guardar diez valores :! Y lo de las macros primera vez que lo escucho jajajajaja Un saludo! Edito:Me he quedado bastante trabado ya que ayer la funcion para hallar el menor funcionaba perfectamente, ahora he ido a hacerlo y devuelve 0 , ya sea menor; o menor=0; No sé si será por los datos que introducí ayer por teclado, si serán distintos a los de hoy, pero que mosqueo Edit2: al final lo que hice fue inicializar menor en 999999999 , asi parece que va Aprovecho para plantear otra cuestion,la suma la acabe haciendo con esto : suma= suma + datos porque si suma=suma + datos; no esta en la linea de codigo del for y el scanf , es decir si pongo esa linea al final en la ejecucion del programa me devuelve ese valor a 0?
|
|
« Última modificación: 13 Enero 2016, 14:42 pm por Orb »
|
En línea
|
|
|
|
Orb
Desconectado
Mensajes: 81
|
Finalmente lo he conseguido.Se me olvido añadir que ademas de las funciones que mencione antes, habia que obtener la media de los datos mediante una funcion.Os dejo el codigo a ver si me podeis dar consejillos, cualquier critica es agradecida ; #include <stdio.h> void media(int sum){ int media; media= sum/10; printf("\nLa media de todos los valores introducidos es %d\n", media ); } int main(void){ int datos[10]; int cantidad_datos=10; int i; int mayor=0; int menor=9999999; int suma=0; for(i= 0 ; i < cantidad_datos ; i++){ printf("\nIntroduzca el valor del número #%i\n", i +1); suma= suma + datos[i]; } for(i=0 ; i <cantidad_datos ; i++){ if(datos[i] > mayor) mayor= datos[i]; } for(i=0 ; i<cantidad_datos ; i++){ if(datos[i] < menor) menor = datos[i]; } printf("\nEl valor máximo es %d\n", mayor ); printf("\nEl valor mínimo es %d\n", menor ); printf("\nLa suma de todos los valores es %d\n", suma ); media(suma); }
|
|
|
En línea
|
|
|
|
fary
|
#include <stdio.h> void media(int sum){ int media; media= sum/10; printf("\nLa media de todos los valores introducidos es %d\n", media ); } int main(void){ int datos[10]; int i; int mayor=0; int menor=9999999; int suma=0; for(i= 0 ; i < 10 ; i++){ printf("\nIntroduzca el valor del número #%i\n", i +1); suma += datos[i]; } for(i=0 ; i < 10 ; i++){ if(datos[i] > mayor){ mayor = datos[i]; } if(datos[i] < menor){ menor = datos[i]; } } printf("\nEl valor máximo es %d\n", mayor ); printf("\nEl valor mínimo es %d\n", menor ); printf("\nLa suma de todos los valores es %d\n", suma ); media(suma); return 0; }
Sugerencias: Que pongas el return, en el main... ya te lo he puesto yo en el arreglo del código pero tienes que acordarte de ponerlo si declaras una funcion que no sea de tipo void. Identar el código, que no quede todo en plano ya que es imposible de leer. Te he resumido el programa de 2 bucles innecesarios a 1 solo. saludos.
|
|
|
En línea
|
Un byte a la izquierda.
|
|
|
Yoel Alejandro
|
Disculpa Orb, El mayor y el menor se inicializan al primer elemento del arreglo. Pues no puedes estar adivinando un número "inmensamente grande", o uno "inmensamente pequeño" (siempre habrá un número mayor o menor que otro). ¿Qué tal si el usuario pasa valores negativos? mayor = datos[0]; /* <-- primer elemento */ menor = datos[0]; /* <-- primer elemento */ suma = 0; for(i=1 ; i <cantidad_datos ; i++){ /* inicias el ciclo con el segundo elemento, y de ahi en adelante */ if(datos[i] > mayor) mayor = datos[i]; if(datos[i] < menos) menos = datos[i]; suma = suma + datos[i]; } promedio = suma / cantidad_datos;
y en este caso hemos reunido el cálculo de mayor, menor y suma en el mismo ciclo, de acuerdo a la sugerencia de fary
|
|
« Última modificación: 18 Enero 2016, 18:28 pm por Yoel Alejandro »
|
En línea
|
Saludos, Yoel. P.D..- Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Dice Orb: habia que obtener la media de los datos mediante una funcion Por tanto la media no se debe obtener en el mismo cálculo. Por otra parte, en caso de hacerlo todo en la misma función el usar un array sería malgastar memoria y tiempo de cálculo de la posición de elementos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Busco programa y resolver dudas
Diseño Gráfico
|
Bardook
|
0
|
1,837
|
9 Noviembre 2004, 23:16 pm
por Bardook
|
|
|
Dudas sobre programa plc
Electrónica
|
juan perez lopez
|
2
|
5,006
|
22 Mayo 2012, 14:17 pm
por skapunky
|
|
|
Dudas programa NetFincas Horizontal
Software
|
vincent13m
|
0
|
2,205
|
5 Febrero 2013, 17:19 pm
por vincent13m
|
|
|
Dudas varias programa
Programación C/C++
|
novatus84
|
1
|
1,675
|
24 Noviembre 2014, 20:24 pm
por Orubatosu
|
|
|
Programa WTFast dudas
Software
|
Nillo
|
1
|
1,167
|
20 Febrero 2015, 22:11 pm
por engel lex
|
|