Hoy vamos a ver un ejercicio de programación en lenguaje C, también conocido como ANSI C. Se trata de generar números aleatorios, agregarlos a una lista (arreglo) y luego agruparlos para obtener la frecuencia con la que se repiten.

El ejercicio dice así:

Realizar un programa que genere de manera aleatoria 100 números en el intervalo del conjunto del 1 al 20, y después genera una lista con la frecuencia de cada número. Los números generados de manera aleatoria se deben de visualizar; la frecuencia de números se debe visualizar.

Veamos cómo resolverlo usando una pila, arreglos y algunas funciones.

Algoritmo

Lo primero que debemos hacer es declarar un arreglo de 100 elementos, y llenarlo con números aleatorios. También declaramos una pila dinámica que nos servirá para registrar la frecuencia de los números.

Al llenar el arreglo también agregamos los elementos a la pila (de hecho el arreglo no haría falta, porque la pila tendrá tanto la frecuencia como el número).

En caso de que el número no exista en la pila, lo registramos con una frecuencia de 1. Y si el número ya existe, entonces aumentamos su frecuencia.

Trabajando con la lista

Declaramos un struct que será un nodo de la pila. Tiene el número, la frecuencia con la que aparece y un apuntador al siguiente nodo.

Obviamente esto se podría optimizar si usáramos un diccionario en lugar de una pila, pero a mi parecer es más fácil gestionarlo con una pila (a nivel de programación, no a nivel de rendimiento).

Cuando se inserta un nuevo número por primera vez, se inserta un elemento en la pila.

Como puedes ver en la línea 4, la frecuencia por defecto es 1.

Relacionado:  PHP: contar letras de cadena e imprimir resultados

Agregar número si ya existe

Hasta ahora tenemos nuestra pila y agregamos los números por primera vez, pero debemos manejar el caso de que el número ya exista justamente para aumentar su frecuencia en este ejercicio de programación en C.

Por lo tanto definimos una función que regresa un apuntador a la memoria en donde se encuentra el número, o NULL en caso de que no se encuentre. Queda así:

Recorremos toda la pila y si encontramos el número, regresamos el apuntador a ese nodo. En caso contrario regresamos NULL.

Ahora cada que vayamos a agregar un número hacemos la comprobación: si ya existe, obtenemos el apuntador y aumentamos la frecuencia. Si no, lo agregamos por primera vez:

Imprimir frecuencias

Ahora para imprimir los números aleatorios y la frecuencia con la que aparecen, simplemente recorremos la pila y vamos imprimiendo. Para ello usamos el ciclo while en el lenguaje C, así como printf.

Poniendo todo junto

Frecuencia de números en C usando pila – Programación

Anteriormente expliqué todo el código para contar la frecuencia con la que aparecen los números, pero no hemos visto el llenado del arreglo con números aleatorios ni las funciones para generar los números.

Todo el código queda como se ve a continuación dentro de main:

Hay varias cosas en el método main, por ejemplo el llenado de la lista y la impresión de todas las cosas. Recuerda que en este caso hicimos conteo de números en C, anteriormente ya había explicado cómo contar la frecuencia de palabras.

Relacionado:  JavaScript: obtener día de la semana según fecha

Puedes ejecutar el código del ejercicio en este enlace. También puedes leer más sobre lenguaje C en mi blog.

Igualmente dejo un vídeo en YouTube explicando todo este ejercicio


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 812 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

0 Comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: