miércoles, 14 de octubre de 2015

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.-

Desarrollar y encontrar un método correcto de resolución de problemas planteados utilizando punteros, estructuras, array y archivos en lenguaje C.

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 eRegPara 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