Informática: Parcial 1
Ejercicio 1: En un proceso industrial se mide el porcentaje de carbono en una determinada sustancia cada 5 minutos. Se pide hacer un programa que permita guardar los datos en un archivo llamado porcentaje.dat, ingresandolo por teclado.
Ejercicio 2: Se pide hacer un programa que realice las siguientes tareas.
- Leer los datos del archivo porcentaje.dat y almacenarlos en una variable de tipo vector sabiendo que el archivo puede tener a lo sumo 1000 valores.
- Presentar un menú, que se repetirá hasta la condición de fin. Las opciones del menú serán las siguientes:
- Listar los porcentajes empezando por el ultimo medido hasta el primero.
- Listar los datos en los que cumpla %<promedio
- Informar cual fue el porcentaje mínimo, y el tiempo en el que fue medido.
- Finalizar
Los métodos usados son:
#include "stdio.h"
#include "stdlib.h"
//UNSAM
//Ejercicio modelo de parcial - Materia: Informática
void initVector(int vec[], int tam){
int i = 0;
for(i=0;i<tam;i++){
vec[i]=0;
}
}
void loadVector(int vec[], int &tam){
int i=0;
int opc=0;
printf("Desea ingresar un valor?: ");
printf("\n1- Si");
printf("\n2- No");
printf("\n#: ");
scanf("%d", &opc);
if(opc==1){
printf("Ingrese un valor para vec[%d]: ", i);
scanf("%d", &vec[i]);
i++;
do{
printf("Desea ingresar otro valor?:");
printf("\n1- Si");
printf("\n2- No");
printf("\n#: ");
scanf("%d", &opc);
if(opc==1){
printf("Ingrese un valor para vec[%d]: ", i);
scanf("%d", &vec[i]);
i++;
}
}while((i<=tam) && (opc==1));
tam = i;
}
}
void loadValor(int vec[], int &tam){
int i=0;
int opc=0;
printf("Ingrese un valor para vec[%d]: ", tam);
scanf("%d", &vec[tam]);
tam++;
}
void showVector(int vec[], int tam){
int i=0;
for(i=0;i<tam;i++){
printf("\nEl valor de vec[%d] es: %d\n", i, vec[i]);
}
}
int suma(int vec[], int tam){
int i=0;
int suma=0;
for(i=0;i<tam;i++){
suma = suma + vec[i];
}
return suma;
}
float promedio(int vec[], int tam){
float promedio=0.0;
promedio = suma(vec,tam) / float(tam);
return promedio;
}
void swap(int &a, int &b){
int aux=0;
aux = a;
a=b;
b=aux;
}
//Usamos este metodo para encontrar el minimo y maximo ordenando al vector
void ordenBurbuja(int vec[], int tam){
int i=0,j=0;
for(i=0;i<tam-1;i++){
for(j=0;j<tam-1-i;j++){
if(vec[j]>vec[j+1]){
swap(vec[j],vec[j+1]);
}
}
}
}
//Otra forma es hacer 2 metodos que busquen al minimo y al maximo directamente
int minimo(int vec[], int tam){
int i=0;
int minimo=vec[0];
for(i=0;i<tam;i++){
if(vec[i]<minimo){
minimo=vec[i];
}
}
return minimo;
}
int maximo(int vec[], int tam){
int i=0;
int maximo=vec[0];
for(i=0;i<tam;i++){
if(vec[i]>maximo){
maximo=vec[i];
}
}
return maximo;
}
int main(void){
FILE *fp;
int leer[10];
int escribir[10];
int tam=10;
int opcion=0;
char nombre[20] = "porcentaje.dat";
//Errores
char errorAbrir[20] = "El error es: ";
char errorCerrar[40] = "El error al cerrar el archivo es: ";
char errorEscribir[40] = "El error al escribir es: ";
char errorLeer[40] = "El error al leer es: ";
//Abrimos el archivo y comprobamos que la apertura sea correcta...
if(fp = fopen(nombre,"w+")){
printf("Archivo abierto correctamente!\n\n");
}else{
printf("Hubo algun problema al abrir/crear el archivo...\n");
perror(errorAbrir);
exit(1);
}
//Inicializo el vector
initVector(escribir,tam);
initVector(leer,tam);
//Cargo el vector con datos que luego grabaremos en un archivo
loadVector(escribir, tam);
//Muestro el vector
showVector(escribir, tam);
//Escribimos los datos del vector en el archivo
if(fwrite(escribir,sizeof(int),tam,fp)){
printf("Escritura en '%s' exitosa!\n", nombre);
}else{
printf("Error al escribir datos!\n");
perror(errorEscribir);
}
//Ponemos el puntero al principio del archivo
rewind(fp);
//Leemos el archivo
int cant=0;
if(cant = fread(leer,sizeof(int),10,fp)){
printf("Lectura de '%s' exitosa!", nombre);
}else{
printf("Error al leer el archivo!\n");
perror(errorLeer);
}
showVector(leer,tam);
//Aca va el Menu
do{
printf ("1-Ver archivo \n");
printf ("2-Agregar un valor \n");
printf ("3-Ver Promedio \n");
printf ("4-Ver Minimo y Maximo \n");
printf ("5-Ordenar Vector\n");
printf ("6-Finalizar \n");
printf("\n#: ");
scanf ("%d", &opcion);
switch(opcion){
case 1:
showVector(leer,cant);
break;
case 2:
loadValor(leer,cant);
rewind(fp);
if(fwrite(leer,sizeof(int),cant,fp)){
printf("Escritura en '%s' exitosa!\n", nombre);
}else{
printf("Error al escribir datos!\n");
perror(errorEscribir);
}
break;
case 3:
printf("El promedio de los valores grabados en los archivos es: %f\n", promedio(leer,cant));
break;
case 4:
printf("El maximo es: %d\n", maximo(leer,cant));
printf("El minimo es: %d\n", minimo(leer,cant));
break;
case 5:
printf("ordenando vector...\n");
ordenBurbuja(leer,cant);
printf("El vector ordenado es: ");
showVector(leer,cant);
break;
case 6:
printf("Adios!\n");
break;
}
//Ponemos el puntero al principio del archivo
rewind(fp);
//Volvemos a leer el archivo
int cant=0;
if(!(cant = fread(leer,sizeof(int),10,fp))){
printf("Error al leer el archivo!\n");
perror(errorLeer);
}
if((opcion<1) || (opcion>6)){
printf("Opcion incorrecta!\nIntentelo de nuevo...\n");
}
}while(opcion!=6);
if(fclose(fp)){
printf("Archivo cerrado exitosamente!\nAdios!");
}else{perror(errorCerrar);}
}
Saludos!








