Informática – 2do Parcial

Descargar: Enunciado

Parte primera:


//UNSAM – Informatica
//Ejercicio de Parcial
#include “stdio.h”
#include “stdlib.h”

#define ARCHIVO “ambiente.dat”

//Prototipo de los metodos del programa
void cargarMatriz(float a[5][5]);
void mostrarMatriz(float a[5][5]);
void guardarDatos(float a[5][5]);

int main(void){
float mat[5][5];

mostrarMatriz(mat);
cargarMatriz(mat);

mostrarMatriz(mat);
guardarDatos(mat);

}

void cargarMatriz(float a[5][5]){
int i,j;
float val=0.0;

for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ printf("Ingrese una valor para MAT[%d][%d]: ", i, j); scanf("%f", &val); a[i][j] = val; } printf("Fila %d cargada exitosamente!\n", i); } printf("Matriz cargada exitosamente!\n"); } void mostrarMatriz(float a[5][5]){ int i,j; float val=0.0; for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ printf("El valor de MAT[%d][%d]: %f\n", i, j, a[i][j]); } } } void guardarDatos(float a[5][5]){ FILE *fp; int cant = 6*6; char errorCerrar[30]="Error al cerrar el archivo: "; char errorAbrir[30]="Error al abrir el archivo: "; char errorEscribir[35]="Error al escribir el archivo: "; if(fp = fopen(ARCHIVO, "w+")){ if(!fwrite(a, sizeof(float), cant, fp)){ perror(errorEscribir); exit(1); } }else{ perror(errorAbrir); exit(1); } if(!fclose(fp)){ perror(errorCerrar); exit(1); } } [/c]   Parte Segunda: [c] //UNSAM - Informatica //Ejercicio de Parcial Segunda parte #include "stdio.h" #include "stdlib.h" #define ARCHIVO "ambiente.dat" //Prototipo de los metodos del programa void menu(float a[5][5]); void inicializarMatriz(float a[5][5]); int leerArchivo(float a[5][5]); //Returnea la catidad de elementos leidos void mostrarMatriz(float a[5][5]); float promedio(float a[5][5]); float mostrarMinimo(float a[5][5], int &x, int &y); float promedioSensor(float a[5][5], int sensor); float promedioIntervalo(float a[5][5], int inicio, int fin); //Programa Principal int main(void){ float mat[5][5]; inicializarMatriz(mat); mostrarMatriz(mat); leerArchivo(mat); mostrarMatriz(mat); menu(mat); } //Decalracion de Metodos/Funciones void menu(float a[5][5]){ int opcion=0; int inicio, fin, sensor,i,j; float minimo=0.0; do{ printf("\n### MENU ###\n"); printf("1- Promedio de la matriz\n"); printf("2- Minimo\n"); printf("3- Promedio de un sensor\n"); printf("4- Promedio de un intervalo\n"); printf("5- Salir\n"); scanf("%d", &opcion); switch(opcion){ case 1: printf("El promedio es: %f\n", promedio(a)); break; case 2: minimo = mostrarMinimo(a,i,j); printf("El minimo es: M[%d][%d]=%f\n",i,j,minimo); break; case 3: printf("Ingrese el sensor al cual quiere calcularle el promedio: "); scanf("%d", &sensor); printf("El promedio del sensor %d es: %f\n", sensor, promedioSensor(a, sensor)); break; case 4: printf("Ingrese el inicio del intervalo: "); scanf("%d", &inicio); printf("Ingrese el fin del intervalo: "); scanf("%d", &fin); printf("El promedio del intervalo [%d,%d] es: %f\n", inicio, fin, promedioIntervalo(a, inicio, fin)); break; case 5: printf("Adios!\n"); break; default: printf("Opcion incorrecta! vuelva a intentarlo...\n"); } }while(opcion!=5); } void inicializarMatriz(float a[5][5]){ int i,j; for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ a[i][j] = 0; } } } int leerArchivo(float a[5][5]){ //Returnea la catidad de elementos leidos FILE *fp; int cant=0; //Errores char errorLeer[30] = "Error al leer el archivo: \n"; char errorAbrir[30] = "Error al abrir el archivo: \n"; if(fp = fopen(ARCHIVO,"r+")){ if(cant=fread(a,sizeof(float),6*6,fp)){ printf("Lectura exitosa!\n"); }else{ perror(errorLeer); exit(1); } }else{ perror(errorAbrir); exit(1); } fclose(fp); return cant; } void mostrarMatriz(float a[5][5]){ int i,j; float val=0.0; for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ printf("El valor de MAT[%d][%d]: %f\n", i, j, a[i][j]); } } } float promedio(float a[5][5]){ int i,j; float suma=0.0; float promedio=0.0; for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ suma = suma + a[i][j]; } } promedio = suma / (6*6); return promedio; } float mostrarMinimo(float a[5][5],int &x, int &y){ int i,j; float minimo; int pos1,pos2; minimo = a[0][0]; for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ if(minimo>a[i][j]){
minimo = a[i][j];
pos1 = i;
pos2 = j;
}
}
}

x = pos1;
y = pos2;

return minimo;
}

float promedioSensor(float a[5][5], int sensor){
int i;
float suma=0.0;
float promedio=0.0;

for(i=0;i<=5;i++){ suma = suma + a[sensor][i]; } promedio = suma / 6.0; return promedio; } float promedioIntervalo(float a[5][5], int inicio, int fin){ int i,j; float suma=0.0; float promedio=0.0; float cant; for(i=inicio;i<=fin;i++){ for(j=0;j<=5;j++){ suma = suma + a[i][j]; } } cant = (fin - inicio + 1) * 6; promedio = suma / cant; return promedio; } [/c] return 0;

Parcial Resuelto – Informática

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
Aclaración: Uso valor máximo 10 ya que no modifica la resolución del ejercicio. Se puede resolver de una manera mucho mas sencilla pero trate de hacerlo lo mas completo posible para que sirva como caso de estudio.

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&#91;i&#93;=0;
     }
}
  
void loadVector(int vec&#91;&#93;, 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&#91;%d&#93;: ", i);
         scanf("%d", &vec&#91;i&#93;);
         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&#91;%d&#93;: ", i);
               scanf("%d", &vec&#91;i&#93;);
               i++;
           }
         }while((i<=tam) && (opc==1));
         tam = i;
     }
}
  
void loadValor(int vec&#91;&#93;, int &tam){
     int i=0;
     int opc=0;
  
         printf("Ingrese un valor para vec&#91;%d&#93;: ", tam);
         scanf("%d", &vec&#91;tam&#93;);
         tam++;
}
  
void showVector(int vec&#91;&#93;, int tam){
     int i=0;
  
     for(i=0;i<tam;i++){
         printf("\nEl valor de vec&#91;%d&#93; es: %d\n", i, vec&#91;i&#93;);
     }
}
  
int suma(int vec&#91;&#93;, int tam){
    int i=0;
    int suma=0;
  
    for(i=0;i<tam;i++){
        suma = suma + vec&#91;i&#93;;
    }
  
    return suma;
}
  
float promedio(int vec&#91;&#93;, 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&#91;&#93;, int tam){
     int i=0,j=0;
  
     for(i=0;i<tam-1;i++){
         for(j=0;j<tam-1-i;j++){
             if(vec&#91;j&#93;>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&#91;i&#93;<minimo){
            minimo=vec&#91;i&#93;;
        }
    }
  
    return minimo;
}
  
int maximo(int vec&#91;&#93;, int tam){
    int i=0;
    int maximo=vec&#91;0&#93;;
  
    for(i=0;i<tam;i++){
        if(vec&#91;i&#93;>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!