Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Healsy en 5 Octubre 2016, 01:39 am



Título: Problema ejercicio básico. Lenguaje C.
Publicado por: Healsy en 5 Octubre 2016, 01:39 am
¡Buenos días a todos!

Tengo como consigna este ejercicio:ingresar un conjunto de 20 personas y solamente contabilizar aquellos que tengan edad comprendida entre 18 y 45.

Recién estoy empezando en esto ayer empece a investigar así que perdonen. La verdad no se que hago mal, hay veces que me pide 5 datos cuando ingreso numeros muy altos, y cuando ingreso bajos solo me pide 4.

Código (lo realice con 4 personas para no tener que estar ingresando tantos datos).

Código:
#include<stdio.h>

int main (){



int ed=0,i=0,cont=0;


  printf ("Ingrese la edad de 4 personas (el programa contabilizara solo las que esten comprendidas entre 18 y 45):\n");


for (i=0;i<4;i++)
{scanf ("%i",&ed);

if (ed>=18 && ed<=45)
       {
      cont++;
        scanf ("%i",&ed);
   }
   
       
}

printf ("La cantidad de personas comprendidas en el rango pedido es de: %d",cont);


return 0;

}


Título: Re: Problema ejercicio básico. Lenguaje C.
Publicado por: dato000 en 5 Octubre 2016, 16:03 pm
No funcionaba porque o tienes que inicializar una cantidad de variables igual a la cantidad de datos que ingresas, o creas una colección de posiciones en las cuales guardaras esos valores, de igual manera, con una cantidad de posiciones igual a los valores que necesitas guardar.

Para ello, se puede usar arreglos, vectores, punteros...aquí un ejemplo sencillo con arreglos, como estoy usando esa basura de dev c++, tengo que usar el estandar c11, pero igual sirve.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  5.  
  6. int main(int argc, char *argv[]) {
  7.  
  8.  
  9. int edad[4]; // Arreglo de cuatro posiciones --> Edad [ valorEdad1, valorEdad2, valorEdad3, valorEdad4 ]
  10. int edadEscaneada; // variable temporal para grabar las edades, luego comprobar si esta en el rango
  11. int contador=0;
  12.  
  13.    printf ("Ingrese la edad de 4 personas:\n");
  14. printf ("Digite solo edades entre 18 y 45 años:\n");
  15.  
  16. int i;
  17. for (i=0;i<4;i++)
  18. {
  19. printf ("Edad %d: ", i+1);
  20. scanf ("%d", &edadEscaneada);
  21.  
  22. if (edadEscaneada>=18 && edadEscaneada<=45)
  23.        {
  24.       edad[i] = edadEscaneada;
  25.       contador++;
  26.    }
  27.  
  28.  
  29. }
  30.  
  31.  
  32.    printf ("La cantidad de personas comprendidas en el rango pedido es de: %d \n\n", contador);
  33. for (i=0;i<4;i++)
  34. {
  35. if (edad[i] >=18 && edad[i] <=45)
  36.        {
  37. printf ("Edad %d:\n", edad[i]);
  38. }
  39. }
  40.  
  41.   return 0;
  42. }
  43.  


Título: Re: Problema ejercicio básico. Lenguaje C.
Publicado por: MAFUS en 5 Octubre 2016, 17:22 pm
Código
  1. for(i=0; i<4; i++) {
  2.    scanf("%i",&ed);
  3.    if(ed>=18 && ed<=45) {
  4.        cont++;
  5.        scanf ("%i",&ed); // <-- Te sobra esta instrucción
  6.    }
  7. }

Cuando entres en el if al dar una edad que cumpla la condición, además de contabilizar, vas a pedir un dato que no se va a tener en cuenta porque al salir del if e iterar otra vez el bucle, vas a llegar al scanf del inicio que te machacará lo que hubiera puesto en el anterior en ed.

Si sigues el flujo del programa verás que el segundo scanf no tiene razón de ser. Sobra. Por eso te pedía datos de más.


Título: Re: Problema ejercicio básico. Lenguaje C.
Publicado por: Healsy en 5 Octubre 2016, 20:24 pm
Muchisimas gracias a los dos, cualquier duda que me surga con el ejercicio la pondré aquí. A la noche tendre la computadora para compilar.

Me dieron para que lo resuelva con los temas que se, y no llegamos a la parte de vectores de todas formas voy a investigar ese tema.


Título: Re: Problemas ejercicios básicos. Lenguaje C.
Publicado por: Healsy en 6 Octubre 2016, 01:32 am
Ya logre compilar y efectivamente ese era el error lo imagine como si fuese un while por eso agregue un scanf adentro.
Tengo otra duda no entiendo el siguiente ejercicio.
Escriba un programa que informe la cantidad de bytes que utiliza la PC para almacenar cada uno de los distintos tipos de variables: int, float, char, doublé, long. El programa debe tener una salida aceptable con las aclaraciones correspondientes y buena presentación.

 Busque en internet y encontré esto pero no logro relacionarlo (no creo que el ejercicio sea mostrar en un printf estos datos).

Código:
int
Cantidad entera 2 bytes o una palabra (varía según compilador).
char
Carácter 1 byte.
float
Almacena valores reales en punto flotante. 1 palabra (4 bytes).
double
Almacena valores reales en doble precisión. 2 palabras (8 bytes).


Gracias de antemano por la ayuda.


Título: Re: Problema ejercicio básico. Lenguaje C.
Publicado por: MAFUS en 6 Octubre 2016, 09:39 am
Busca sobre el operador sizeof, es lo que necesitas.