Repaso C Ficheros, memoria dinámica, … Pablo San Segundo (C-206)

Slides:



Advertisements
Presentaciones similares
Tema #10. FICHEROS.
Advertisements

Lenguaje C++.
FICHEROS.
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Universidad Domingo Savio Facultad de Ciencias y Tecnología de la Información Carrera Ingeniería en Redes y Telecomunicaciones Materia : Programación I.
Fundamentos de la Programación Estructurada
Programación, Algoritmos y Estructuras de Datos
Estructuras externas de Datos: Archivos
Tipos de Datos Básicos y Estructurados
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Programación Científica
Funciones y procedimientos
Estructuras dinámicas de datos, TAD Lista, parte 2
Archivos Programación.
Informática Ingeniería en Electrónica y Automática Industrial
Asignatura: Lenguaje de Programación de Sistemas PPT No.05 Programa vespertino de Ingeniería (E) en Sistemas Computacionales Profesor: José Estay Araya.
Archivos. fopen(...) Para comenzar a utilizar un archivo primero se debe abrir, invocando a la función fopen(...) FILE * fopen(char* nombre_arch, char*
Lenguaje C.
PROGRAMACION II.  Es un conjunto de datos no necesariamente del mismo tipo, los cuales se podrán manipular o realizar cualquier operación sobre cada.
Características de “C”
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
Ejemplo Supongamos que queremos realizar un sistema que trabaje con figuras geométricas planas. El sistema debe poder mostrar información de una figura.
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
Cadenas y apuntadores Programación.
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Archivos.
Estructuras-Archivos
Programación I Teoría VIII: Entrada/Salida
Estructuras.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Informática Ingeniería en Electrónica y Automática Industrial
Valor X Valor Y Punto (0,0) Coordenadas.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Manejo de archivos de datos en C
Introducción Entrada/Salida L.P.S.I.
Informática Ingeniería en Electrónica y Automática Industrial
Introducción a los punteros Prof. Domingo Hernández.
Archivos Programación I MC Beatriz Beltrán Martínez.
Teoría – Alejandro Gonzalez
Unidad II Introducción a la programación en C++
Entrada y salida Gestión de ficheros.
Introducción a la Ingeniería de Sistemas
Informática Ingeniería en Electrónica y Automática Industrial
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Alto Nivel. Y Es un compilador. YContiene un conjunto de palabras.
Acerca del curso Nombre del curso Créditos: Profesor Teoría:
Capitulo 4 Arreglos o Arrays Unidimensionales Bidimensionales Strings
Empleando apuntadores una función puede entregar múltiples resultados / /Esta función no funciona #include void intercambiaValores(float a, float b) {
PRINCIPIOS DE PROGRAMACIÓN
1 TÉCNICAS DE PROGRAMACIÓN Lenguaje C Tercera Clase (Segunda de C)
Computación I. CI-2125 Tema VIII
Algoritmo.
CLASE 10. AGENDA 1 Repaso 2 Operadores 3 Directivas 14 Entrada y Salida de Datos.
Laboratorio de programación
Repaso de archivos #include int main(void) { FILE *fp; fp=fopen(“prueba.txt”, “w”); if (fp==NULL) { printf(“Error al abrir el archivo\n”); printf(“No lo.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
MEMORIA DINÁMICA.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
TIPOS DE DATOS PARCIAL III Punteros. Un puntero es una variable que hace referencia a una dirección de memoria Sintaxis: Tipo_Dato *nombre_variable_puntero;
Características de “C” Esta conformado por un Ambiente Integrado. Es un Lenguaje de Nivel medio.Es un compilador. Contiene un conjunto de palabras reservadas.
Visual Basic Prof.: Carol Briones García. Uso de Archivos  Definición  Es un conjunto de información que se almacena en algún medio de escritura que.
Tema 1. Estructuras de datos Objetivo: Objetivo: El alumno resolverá problemas de almacenamiento, recuperación y ordenamiento de datos y las técnicas de.
Archivos. Introducción Los datos que hemos tratado hasta el momento han residido en la memoria principal. Sin embargo, las grandes cantidades de datos.
PROF. RAFAEL MONTENEGRO B. UNELLEZ-APURE Introducci Ó n a los Arreglos (“arrays”) en C++
Sobrecarga de operadores Pablo San Segundo (C-206)
Introducción al Lenguaje C (II) Cadenas de caracteres, archivos de cabecera, lectura y escritura Fundamentos de Programación Departamento de Lenguajes.
Programación I :: Prof. Yeniffer Peña Conceptos Avanzados de Programación Presentación.
Estructuras Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 25.
Programación en C - manejo de Archivos
Transcripción de la presentación:

Repaso C Ficheros, memoria dinámica, … Pablo San Segundo (C-206)

Ejemplo: Centroide de una nube de puntos #define NUM_PUNTOS 4 struct punto_t{ double x; double y; }; struct punto_t centroide(struct punto_t * v, int size){ struct punto_t pres; double x_med=0; double y_med=0; int p; for(p=0; p<size; p++){ x_med+=v[p].x; y_med+=v[p].y; } pres.x=x_med/size; pres.y=y_med/size; return pres; } EJERCICIO I Implemente un programa que compute el centroide de 4 puntos con salida por consola EJERCICIO II Añada entrada por teclado de los 4 puntos

Entrada/salida a fichero  FILE * fopen ( const char * filename, const char * mode )  int fclose ( FILE * stream )  Escritura  int fprintf ( FILE * stream, const char * format,... )  int fputs ( const char * str, FILE * stream )  Lectura  int fscanf ( FILE * stream, const char * format,... )  char * fgets ( char * str, int num, FILE * stream )  Estado  Error  int ferror ( FILE * stream )  End of file:  int feof ( FILE * stream ) r, w, a, r+, w+, a+ retorno: 0 si OK, EOF si error retorno: num. campos rellenados si OK #include

Ejercicio: nube de puntos en fichero EJERCICIO Modifique el código anterior para que lea de un fichero de texto “datos.txt” los puntos sobre los que calcular el centroide. Fichero: datos.txt

Solución parcial FILE * f=fopen("datos.txt", "r"); if(f==NULL){ puts("file not found\n"); return -1; } //typical loop for reading while(!feof(f)){ //reads line and checks stream state fgets(line, SIZE_OF_LINE, f); if(ferror(f)){ puts("error"); break; } //protocol sscanf(line, "%lf %lf", &x, &y); v[index].x=x; v[index++].y=y; } EJERCICIO Implemente la función de prototipo, siguiente: int read (const char * filename, struct punto_t * v, int size ) ;

Reserva de memoria dinámica  void * malloc (size_t size )  void free (void * ptr ) #include EJERCICIO Implemente el programa anterior del centroide de la nube de puntos. Reserve memoria dinámica y libere adecuadamente la memoria al terminar. La entrada de las coordenadas de los puntos se hará por consola. RESERVA DE MEMORIA struct punto_t* pv = (struct punto_t*)malloc(sizeof(struct punto_t)*NUM_PUNTOS); /*…*/ free(pv); ENTRADA DE DATOS POR CONSOLA for(p=0; p<NUM_PUNTOS; p++){ printf("Introduzca las coordenadas X Y del punto\n"); scanf("%d %d", &x, &y); pv[p].x=x; pv[p].y=y; }

Ejercicio: Reserva de memoria para una matriz bidimensional EJERCICIO Reserve memoria dinámicamente para una matriz de enteros (n x m) RESERVA DE MEMORIA int** matrix=0; matrix= (int**) malloc(n*sizeof(int*)); for(i=0; i<n; i++){ matrix[i]=(int *) malloc(m*sizeof(int)); } LIBERACIÓN DE MEMORIA int i; for(i=0; i<n; i++){ free(matrix[i]); } free(matrix);

Ejercicio-Lectura de una lista Implemente un programa que lea el protocolo del fichero de texto mostrado a continuación, e imprima los datos por pantalla. Nota: Es imprescindible gestionar correctamente la liberación de recursos y posibles errores c … c n d num1 d num2 …

Solución parcial FILE * f=fopen("fichero.txt", "r"); if(f==NULL){ puts("file not found\n"); return -1; } //typical loop for reading while(!feof(f)){ //reads line and checks stream state fgets(line, SIZE_OF_LINE, f); if(ferror(f)){ puts("error"); break; } //protocol sscanf(line, "%c", &token); if(token=='c'){ continue; }else if(token== 'n'){ sscanf(line, "%c %d", &token, &num_data); //… }else if(token== 'd'){ sscanf(line, "%c %d", &token, &data); //… printf("%d\n", data); }else{ puts("error"); break; } EJERCICIO Implemente la función de prototipo, siguiente: int* read (const char * filename, int* nData); Nota: implemente el protocolo con lógica switch-case

Ejercicio-Lectura de una matriz Implemente un programa que lea una matriz bidimensional de un fichero de texto con el protocolo que aparece en pantalla. La primera fila del fichero contendrá la dimensión de la matriz; el resto de filas se corresponderán con las filas de la matriz. Una vez leída, se mostrará en pantalla. Nota: Es imprescindible gestionar correctamente la liberación de recursos antes de finalizar Ejemplo tipo de archivo matriz.txt filas columnas

Solución (1/2)  void print_matrix (int n, int m, int ** matrix)  void free_matrix(int n, int m, int** matrix)  int ** read_matrix (const char* filename, int* n, int* m)  apertura de fichero  bucle principal de lectura y protocolo  reserva dinámica de memoria  lectura en modo texto de cada fila

Solución: parte de read_matrix (2/2) while(!feof(f)){ //protocol (extracts headers) fscanf(f, "%c",&token); if(token=='d'){ fgets(line, SIZE_OF_LINE, f); if(sscanf(line, "%d %d",n, m)!=2){ puts("error when reading dimension"); return NULL; } //***dynamic allocation of memory }else if(token=='r'){ //reads elements one by one, for each row for(i=0; i<(*m); i++){ fscanf(f, "%d", &matrix[row][i]); } //read what is left of the line fgets(line, SIZE_OF_LINE, f); row++; }else{ puts("unrecognized input"); return 0; } } Cuestión Implemente el protocolo con lógica switch-case int ** read_matrix (const char* filename, int* n, int* m)

FIN

Operadores de bits Cuestion I b & (~b + 1) = ? MáscaraOperador AND& NOT~ XOR^ OR| Implemente un programa que permita asignar propiedades simbólicas booleanas simultáneamente a una misma variable. Por ejemplo: alumno GUAPO, GENEROSO, RUBIO… #define GUAPO 0x001 #define GENEROSO 0x010 #define RUBIO 0x100 int is_guapo(unsigned int alumno){ return alumno & GUAPO; } int is_generoso(unsigned int alumno){ return alumno & GENEROSO; } int is_rubio(unsigned int alumno){ return alumno & RUBIO; } int set_all(unsigned int* alumno){ *alumno=(GUAPO|GENEROSO|RUBIO); } /*…*/ Cuestion II b & (-b) = ? Cuestion III b ^ (b-1) = ?