Prácticas y Ejercicios con Solución
Prácticas resueltas y Ejercicios con solución de programación en c, El enunciado de las prácticas y ejercicios que se plantea es el siguiente: realizar una práctica o ejercicio en la que se soliciten números de la lotería de 3 dígitos y a continuación se visualicen los principios de números que mas han salido, los finales de números que mas han salido, así como unidades, centenas y decenas, el ejercicio se ha intentado resolver utilizando vectores y un método de ordenación denominado hundimiento o burbuja.
La solución de los ejercicios que se plantean es la siguiente:
// El siguiente programa solicitado por un usuario del blog
// www.aprendoencasa.com al cual agradecemos mucho su visita tiene
// el siguiente enunciado: realizar una práctica en la que se soliciten
// números de lotería por pantalla, los cuales han de tener tres dígitos
// cada uno, para finalizar se ha de teclear el numero 0, y una vez
// solicitados todos los números se han de visualizar por pantalla
// los pares iniciales de números que mas han salido, los pares finales
// de números que más han salido, así como las unidades, decenas y centenas.
// Agradecemos el planteamiento de los ejercicios con solución propuesto
// y esperamos que os animéis a plantear nuevas soluciones en
// aprendoencasa.com
// Se ha de tener en cuenta que el programa no tiene en cuenta
// números con tres dígitos como 001, 002, 045. ya que se considera
// que los ceros a la izquierda no tienen efecto. Si se quisiera
// reflejar también estos números este programa que utiliza calculo
// matemático no serviría y habría que adaptarlo para que solicitase
// los números en formato de cadena en vez de numérico. También se
// podría utilizar memoria dinámica para una mejor optimización.
// Vuelvo a repetir que en muchas ocasiones la optimización del código
// puede ser mucho mejor e incluso emplear menos ordenes para realizar
// acciones concretas, pero como también utilizo muchas veces los
// ejercicios que realizo para que mis alumnos practiquen, insisto
// demasiado en utilizar o repetir ciertas ordenes para reforzar sus
// conocimientos de las mismas.
#include <stdio.h>
#include <stdlib.h>
void Funcion_Ordenar(int [],int);
int main(int argc, char *argv[])
{
// Vectores donde almacenar los resultados
int Inicios[99];
int Finales[99];
int Unidades[10];
int Decenas[10];
int Centenas[10];
// variables a utilizar por el programa
int Numero; // Numero que se solicita
int Contador; // variable auxiliar para bucles
int Contador2; // variable auxiliar para bucles
int Auxiliar; // variable auxiliar para cálculos y bucles
int error=0; // variable para controlar errores
int Inicio=0; // variable que almacena los dos dígitos iniciales
int Final=0; // variable que almacena los dos dígitos finales
// Inicializar los vectores a valores 0
for(Contador=0;Contador<100;Contador++) {
Inicios[Contador]=0;
Finales[Contador]=0;
if(Contador<10) {
Unidades[Contador]=0;
Decenas[Contador]=0;
Centenas[Contador]=0;
}
}
// Solicitar un numero hasta que se teclee 0 para finalizar
do {
// solo se aceptan números de tres valores
do {
// se inicializa la variable de error a cero
error=0;
// se visualiza el titulo de petición del numero
printf("Numero:");
// se solicita el numero
scanf(" %d",&Numero);
// se comprueba si el numero esta en el rango correcto
// en caso de ser incorrecto se cambia el valor de la variable
// error para que el numero se vuelva a solicitar sin tenerlo en
// cuenta para las estadísticas
if((Numero<100 || Numero>999) && Numero!=0) error=1;
// la condición de repetición es hasta que se teclee un valor cero
// en el numero
} while(error!=0);
// si se llega a este punto el numero es correcto y se
// realizan las estadísticas necesarias siempre y cuando el
// numero no sea cero
if(Numero!=0) {
// Se extrae el inicio del numero
Inicio = Numero / 10 ;
//printf("\nInicio %d",Inicio);
// Se extrae el final del numero
Final = Numero % 100 ;
//printf(" Final %d",Final);
// Se almacena el inicio en las estadísticas de inicio
Inicios[Inicio]++;
// Se almacena el final en las estadísticas de final
Finales[Final]++;
// Unidades, Decenas y Centenas guardar las estadísticas
Auxiliar = Numero / 100 ;
Centenas[Auxiliar]++;
//printf(" Centenas %d",Auxiliar);
Auxiliar = Numero % 100 ;
Auxiliar = Auxiliar / 10 ;
Decenas[Auxiliar]++;
//printf(" Decenas %d",Auxiliar);
Auxiliar = Numero % 10 ;
Unidades[Auxiliar]++;
//printf(" Unidades %d\n",Auxiliar);
}
} while(Numero!=0);
// Visualizar Ordenaciones realizadas
printf("\nPares Iniciales\n");
Funcion_Ordenar(Inicios,1);
printf("\nPares Finales\n");
Funcion_Ordenar(Finales,1);
printf("\nUnidades\n");
Funcion_Ordenar(Unidades,0);
printf("\nDecenas\n");
Funcion_Ordenar(Decenas,0);
printf("\nCentenas\n");
Funcion_Ordenar(Decenas,0);
printf("\n");
system("PAUSE");
return 0;
}
// Función para ordenar
void Funcion_Ordenar(int Vector[],int Tipo)
{
// Matriz para ordenar
int Ordenar[99][2];
int Contador; // variable auxiliar para bucles
int Contador2; // variable auxiliar para bucles
int Auxiliar=0;
int error=0;
int cuantos=0;
// Controlar el tipo de vector recibido
if (Tipo==1) cuantos=100; else cuantos=10;
// Inicializar la matriz para ordenar
for(Contador=0;Contador<100;Contador++) {
Ordenar[Contador][0]=0; // posición que almacenara el numero
Ordenar[Contador][1]=0; // posición que almacenara sus repeticiones
}
// Ordenar los números de inicio
// Traspasar los inicios a la matriz de ordenar
Auxiliar=0;
for(Contador=0;Contador<cuantos;Contador++) {
// Si el numero ha salido se traspasa a la matriz de ordenar
if(Vector[Contador]>0) {
Ordenar[Auxiliar][0] = Contador;
Ordenar[Auxiliar][1] = Vector[Contador];
Auxiliar++;
}
}
// Ordenar el vector utilizando el sistema de hundimiento o burbuja
for(Contador2=cuantos-1;Contador2>0;Contador2--) {
for(Contador=0;Contador<Contador2;Contador++) {
if(Ordenar[Contador][1]<Ordenar[Contador+1][1]) {
Auxiliar = Ordenar[Contador][0] ;
Ordenar[Contador][0] = Ordenar[Contador+1][0];
Ordenar[Contador+1][0] = Auxiliar;
Auxiliar = Ordenar[Contador][1] ;
Ordenar[Contador][1] = Ordenar[Contador+1][1];
Ordenar[Contador+1][1] = Auxiliar;
}
}
}
// Visualizar el vector ordenado
for(Contador=0;Contador<cuantos;Contador++) {
if(Ordenar[Contador][1]!=0)
printf("\n%d - %d",Ordenar[Contador][0],Ordenar[Contador][1]);
}
}
El resultado del ejercicio con unos pocos valores es el siguiente:
Gracias por vuestra visita y un saludo!!!
me da un error ls: linea 1: PAUSED: orden no encontrada, me podes decir como, no soy programador
me da un error ls: linea 1: PAUSED: orden no encontrada, me podes decir como, no soy programador, jajaja, me llamo adolfo tambien, increible y como cambio para trabajar con cadena de texto para leer los ceros a la izquierda, tengo un programa en Qbasic de hace mucho (tengo 73 años, jajaja), estaba buscando algo en C++ y por fin encontre esto, Yo necesito almacenar en un archivo de aceso aleatorio los 20 numeros de cada sorteo como ya lo hago en Qbasic, y leer una cantidad de sorteos para atras (siempre la misma cantidad, para decena y unidad 120) pero para tres cifras tengo problemas de memoria agotada o pila agotada, el programa lee los numeros del archivo, hace 4 matrices,
una de 256 x 20, que son los sorteos almacenados, tres de 256 x 1, para dos cifras, unidad, decena y centena.
siempre toma desde el sorteo que quiero la misma cantidad para atras para que sea comparable los resultados, tengo exitos, estoy estableciendo, cantidad de sorteos tomados, cantidad de numeros mas salidos (8, 10, 13) para apostar, pero me interesan los tres digitos, hay que tomar mas sorteos para atras y mas numeros (40, 50, 80), ahi te dejo mi mail para cualquier respuesta, un no tambien es aceptado y agradezco el no con mucho gusto, un abrazo