Lab#3.
Autor : Adiel Palominos F.
Competencia : Orientación a la calidad.
Asignatura : Programación para la integración de sistemas.
Palabras clave : Lenguaje c, punteros, estructuras, memoria dinámica.
Descripción de la Actividad.-
Solución.-
Tomando en cuenta los problemas
planteado en el presente laboratorio, éste tendrá por objetivo trabajar en
lenguaje C utilizando punteros con
manejo de archivos y en python respectivamente,
todo esto para lograr trabajar y desarrollar el laboratorio planteado que
veremos más adelante haciendo uso de los conocimientos adquiridos y trabajados
en el ramo.
1. Utilizando
el archivo generado por Python
“ventas.dat”, éste generará 100.000 registros. Una vez generados los registros
se debe leer éste archivo mediante lenguaje C y realizar ciertos cálculos de ventas que serán mostrados a
continuación.
a)
Calcular
las ventas totales por productos e imprimir por pantalla.
Para desarrollar ésta problemática se planteó realizar una estructura con
los elementos entregados por el archivo ventas.dat
el cual será la base del desarrollo de las siguientes preguntas, en éste caso
se realizó la función suma_x_Producto
en el cual se planteó el uso de variables de tipo int en éste caso cod y CostoP, el primero(cod) nos servirá para tener un comparador de
códigos mediante un for y luego compararlo con el dato que se encuentra dentro
de la estructura, una vez que se ha leído el archivo CostoP dará la venta total por cada producto.
b)
Calcular
ventas totales por fecha e imprimir por pantalla.
Para abordar el siguiente ejercicio de separar las ventas totales por fecha
se generó variables de tipo int con el anio,
mes, dia y el costo asociado, y variables tipo char para poder
almacenarlos, a su vez se generó un puntero fecha para utilizarlo en las
funciones donde se separará el archivo para obtener los datos requeridos.
En la imagen a continuación se podrá observar el desarrollo con 3 for para ir trabajando las fechas
correspondientes, luego se utilizará strcat
para ir concatenando las cadenas de acuerdo a lo que antes se había realizado
de ir leyendo la fecha separada en anio,mes y día, luego de esto inicializamos CostoF y entramos al while para poder trabajar con el archivo
datos, luego si comparamos la fecha separada y la fecha que nos entrega el
archivo de ventas, si este es igual a 0
entonces éste imprimirá las ventas totales por fecha.
c)
Calcular
las ventas totales por rango de horas e imprimir por pantalla.
Para calcular las ventas totales por rango de horas se implementará una
hora inicial y una final para lograr la comparación de la hora inicial con la
de termino, esto se trabajó utilizando punteros, y separando los datos del
archivo mediante strtok el cual
rompe la cadena, retornando el puntero al comienzo del primer token, y luego se utiliza un atoi para transformarlo a entero. Una
vez separado y reunida la información abrimos el archivo de forma binaria, para luego leer e ir
extrayendo según la estructura antes mencionada, dentro de éste ciclo de lectura
el programa se enfoca a la extracción de datos de acuerdo a los delimitadores
que tiene la hora. Luego y para lograr llegar al objetivo que se nos presenta,
comenzamos con una serie condicionales las cuales nos permitirán diferenciar
los rangos de horarios, dentro de los cuales tenemos horas distintas, horas
iguales pero con diferencia de minutos, a medida que se van realizando las
comparaciones se va sumando a la variable total cada valor que este en ese
rango de hora.
d)
Calcular
las ventas totales e imprimir por pantalla
Para calcular éstas ventas se inicia un ciclo while que mientras no sea el final del archivo no terminara,
se abre el archivo de ventas.dat, y
se lee los datos de costo y margen para obtener los totales de las ventas.
El total de las ventas es igual al total + costo del producto*(+1(margen
del producto/100)).
2.Realiza
lo mismo que el problema anterior mediante un array.
Se debe realizar lo anterior mediante un array del tipo eReg y
sólo con los 10.000 últimos registros del archivo ventas.dat, la programación
se realiza en C.
Como se puede apreciar en la imagen, solamente se debe llenar el arreglo antes
utilizado llamado eReg con la diferencia de que anteriormente éste usaba
100.000 registros y ahora solamente se utilizarán los 10.000 últimos registros
del archivo ventas.dat, explicado esto las funciones anteriormente realizadas
son las mismas, lo único que pide en éste apartado es que se llene el arreglo,
para abordar el segundo ejercicio, declaramos la función llena_arreglo_struc() , para el cual utilizaremos 2 variables de tipo int, los cuales
funcionarán para almacenar en la
estructura y el otro como contador para ir recorriendo los últimos
10.000 registros del archivo inicial.
Luego de abrir el archivo ventas.dat,
leemos éste y asignamos los datos en el arreglo leer [10000], esto lo
hacemos ayudados del contador “i” que servirá para ir subiendo en las
posiciones del arreglo y otro contador “cont” el cuál dará el acceso a esos
últimos 10.000 registros, para poder ir guardando los últimos registros en el
arreglo.
3. Realizar
lo anterior, utilizando punteros.
aLista debe ser un bloque de memoria donde cada dirección apunta a eReg. Para comenzar el
desarrollo de lo anterior aLista
queda declarado como un arreglo puntero que apunta hacia la estructura eReg.
Luego de esto en nuestro main principal abriremos el archivo, aquí trabajamos con los últimos 10.000 registros. Generamos un bloque de memoria para cada posición del arreglo puntero aLista, en el cual cada dirección apunta a la estructura eReg y a la cual asignamos cada parámetro dentro del registro de ventas con el uso de la variable de tipo estructura leer.
Reflexión.-
Tras haber realizado el trabajo se puede destacar que resulta sumamente útil para comprender lo que realmente se puede lograr con un lenguaje de programación. Para mí personalmente, esta actividad me resulto un gran desafío ya que por un lado, no era muy experimentado, y porque ademas se debía tener en cuenta varios conceptos aprendidos. Sin embargo, se logró completar sin mayores problemas esta actividad, ademas de eso logramos obtener un conocimiento más amplio, por lo cual se devió llevar a la práctica muchos conocimientos en relacionados a este lenguaje.
Te invito a que compartas tus comentarios o consultas si requieres más información, o que profundice algún tema.









No hay comentarios:
Publicar un comentario