elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dudas de programa en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dudas de programa en C  (Leído 2,964 veces)
Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Dudas de programa en C
« en: 12 Enero 2016, 18:39 pm »

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 ;
Código
  1. #include <stdio.h>
  2. int main(void){
  3. int datos[10];
  4. int cantidad_datos=10;
  5. int i;
  6. int mayor=0;
  7. int menor;
  8. int suma;
  9. for(i= 0 ; i < cantidad_datos ; i++){
  10. printf("\nIntroduzca el valor del número #%i\n", i+1);
  11. scanf("%d", &datos[i]);
  12. }
  13. for(i=0 ; i <cantidad_datos ; i++){
  14. if(datos[i] > mayor)
  15. mayor= datos[i];
  16. }
  17. printf("\nEl valor máximo es %d\n", mayor);
  18. for(i=0 ; i<cantidad_datos ; i++){
  19. if(datos[i] < menor)
  20. menor = datos[i];
  21. }
  22. printf("\nEl valor mínimo es %d\n", menor);
  23.  
  24. }

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 Desconectado

Mensajes: 24


Ver Perfil
Re: Dudas de programa en C
« Respuesta #1 en: 12 Enero 2016, 21:09 pm »

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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: Dudas de programa en C
« Respuesta #2 en: 13 Enero 2016, 00:39 am »

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 Desconectado

Mensajes: 81


Ver Perfil
Re: Dudas de programa en C
« Respuesta #3 en: 13 Enero 2016, 13:47 pm »

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 :huh:
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 Desconectado

Mensajes: 81


Ver Perfil
Re: Dudas de programa en C
« Respuesta #4 en: 13 Enero 2016, 14:54 pm »

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 ;
Código
  1. #include <stdio.h>
  2. void media(int sum){
  3. int media;
  4. media= sum/10;
  5. printf("\nLa media de todos los valores introducidos es %d\n", media);
  6. }
  7. int main(void){
  8. int datos[10];
  9. int cantidad_datos=10;
  10. int i;
  11. int mayor=0;
  12. int menor=9999999;
  13. int suma=0;
  14. for(i= 0 ; i < cantidad_datos ; i++){
  15. printf("\nIntroduzca el valor del número #%i\n", i+1);
  16. scanf("%d", &datos[i]);
  17. suma= suma + datos[i];
  18. }
  19. for(i=0 ; i <cantidad_datos ; i++){
  20. if(datos[i] > mayor)
  21. mayor= datos[i];
  22. }
  23. for(i=0 ; i<cantidad_datos ; i++){
  24. if(datos[i] < menor)
  25. menor = datos[i];
  26. }
  27. printf("\nEl valor máximo es %d\n", mayor);
  28. printf("\nEl valor mínimo es %d\n", menor);
  29. printf("\nLa suma de todos los valores es %d\n", suma);
  30. media(suma);
  31.  
  32. }
En línea

fary


Desconectado Desconectado

Mensajes: 1.084



Ver Perfil WWW
Re: Dudas de programa en C
« Respuesta #5 en: 13 Enero 2016, 15:36 pm »

Código
  1.    #include <stdio.h>
  2.  
  3.    void media(int sum){
  4. int media;
  5. media= sum/10;
  6. printf("\nLa media de todos los valores introducidos es %d\n", media);
  7.    }
  8.  
  9.    int main(void){
  10. int datos[10];
  11. int i;
  12. int mayor=0;
  13. int menor=9999999;
  14. int suma=0;
  15.  
  16. for(i= 0 ; i < 10 ; i++){
  17. printf("\nIntroduzca el valor del número #%i\n", i+1);
  18. scanf("%d", &datos[i]);
  19. suma += datos[i];
  20. }
  21.  
  22. for(i=0 ; i < 10 ; i++){
  23. if(datos[i] > mayor){
  24. mayor = datos[i];
  25. }
  26. if(datos[i] < menor){
  27. menor = datos[i];
  28. }
  29. }
  30.  
  31. printf("\nEl valor máximo es %d\n", mayor);
  32. printf("\nEl valor mínimo es %d\n", menor);
  33. printf("\nLa suma de todos los valores es %d\n", suma);
  34. media(suma);
  35.  
  36. return 0;
  37.    }

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

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Dudas de programa en C
« Respuesta #6 en: 18 Enero 2016, 18:27 pm »

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?
Código
  1. mayor = datos[0];      /* <-- primer elemento */
  2. menor = datos[0];      /* <-- primer elemento */
  3. suma = 0;
  4. for(i=1 ; i <cantidad_datos ; i++){      /* inicias el ciclo con el segundo elemento, y de ahi en adelante */
  5.    if(datos[i] > mayor)
  6.        mayor = datos[i];
  7.    if(datos[i] < menos)
  8.        menos = datos[i];
  9.    suma = suma + datos[i];
  10. }
  11. 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 Desconectado

Mensajes: 1.603



Ver Perfil
Re: Dudas de programa en C
« Respuesta #7 en: 18 Enero 2016, 18:43 pm »

Dice Orb:
Citar
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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Busco programa y resolver dudas
Diseño Gráfico
Bardook 0 1,837 Último mensaje 9 Noviembre 2004, 23:16 pm
por Bardook
Dudas sobre programa plc
Electrónica
juan perez lopez 2 5,006 Último mensaje 22 Mayo 2012, 14:17 pm
por skapunky
Dudas programa NetFincas Horizontal
Software
vincent13m 0 2,205 Último mensaje 5 Febrero 2013, 17:19 pm
por vincent13m
Dudas varias programa
Programación C/C++
novatus84 1 1,675 Último mensaje 24 Noviembre 2014, 20:24 pm
por Orubatosu
Programa WTFast dudas
Software
Nillo 1 1,167 Último mensaje 20 Febrero 2015, 22:11 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines