Beruflich Dokumente
Kultur Dokumente
Estructuras de Repeticion
Programacin Estructurada
La programacin estructurada es un paradigma que consiste en la organizacin de un cdigo en bloques conformados por estructuras del tipo: Secuencial (asignacin, lectura, escritura) Decisin o seleccin (simple, doble, mltiple) Repeticin (Repita mientras, Hacer-Mientras, Repita para)
Abraham Zamudio
Estructuras de Repeticion
Estructura de repeticin o lazo (Bucles) Permite que un conjunto de sentencias (bloque) de un programa puedan ser ejecutadas repetidamente segn el resultado de una expresin lgica. Tipos de estructuras de repeticin Repeticin condicional o controlada por un centinela: REPITA-MIENTRAS y HACER MIENTRAS. Repeticin controlada por un contador: REPITA -PARA. Conceptos Bsicos Contador Acumulador
Abraham Zamudio 3
Estructuras de Repeticion
Contador Variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso o accin. Se debe realizar primeramente una operacin de inicializacin y posteriormente los correspondientes incrementos o Decrementos.
Abraham Zamudio 4
Estructuras de Repeticion
Operaciones sobre un Contador Inicializacin: contador = valor inicial Incremento/decremento: contador = contador + valor_constante contador = contador valor_constante Ejemplo // inicializacin int i=0, j=1000; i++; // incremento j--; //decremento i+=15; // incremento j-=10; //decremento Cuntas iteraciones hacen falta para que j llegue a 0 (cero)?
Abraham Zamudio 5
Estructuras de Repeticion
Acumulador Variable cuyo valor se incrementa o decrementa en una cantidad variable cada vez que se produce un determinado suceso o accin. Se debe realizar primeramente una operacin de inicializacin y posteriormente los correspondientes incrementos o Decrementos.
Abraham Zamudio 6
Estructuras de Repeticion
Operaciones sobre un Acumulador Inicializacin: acumulador = valor inicial Acumulacin: acumulador = acumulador + valor acumulador = acumulador * valor acumulador = acumulador - valor acumulador = acumulador / valor
Abraham Zamudio 7
Estructuras de Repeticion
Ejemplo float iterador = 0, nota = 15.5; unsigned multiplicador = 1; // valor distinto de cero - Acumular (Incrementos) iterador = iterador + nota; multiplicador = multiplicador * nota; multiplicador *= nota; - Acumular (Decrementos) iterador = iterador nota; multiplicador /= nota;
Abraham Zamudio 8
Abraham Zamudio
Esta sentencia permite ejecutar repetidamente, mientras se cumpla una determinada condicin, una sentencia o bloque de sentencias. La forma general es como sigue: while (expresion_de_control) sentencia;
Abraham Zamudio
10
Las sentencias (una o ms) del cuerpo del lazo se ejecutan mientras la condicin (expresin lgica) es cierta. Cuando la condicin es falsa, termina la ejecucin del lazo. Abraham Zamudio
12
Se pregunta al principio por la condicin, por tanto el lazo se ejecuta cero (si la primera vez la condicin es falsa) o mas veces. Si la condicin nunca se hace falsa, el programa entra en un lazo infinito, es decir, las sentencias del cuerpo del lazo se ejecutarn indefinidamente.
Abraham Zamudio
13
Abraham Zamudio
14
Abraham Zamudio
15
Abraham Zamudio
16
Hay que estar pendientes de INICIALIZAR las variables que intervienen en la condicin antes de ejecutar el lazo por primera vez, ya que lo primero que hace la estructura es evaluar la condicin.
Abraham Zamudio 17
18
Abraham Zamudio
20
22
Abraham Zamudio
23
Abraham Zamudio
24
Abraham Zamudio
26
Abraham Zamudio
27
Abraham Zamudio
28
Abraham Zamudio
29
Abraham Zamudio
30
Abraham Zamudio
31
Abraham Zamudio
32
Abraham Zamudio
33
Abraham Zamudio
34
Abraham Zamudio
35
Abraham Zamudio
38
Abraham Zamudio
39
Abraham Zamudio
40
Abraham Zamudio
41
Abraham Zamudio
42
Abraham Zamudio
43
else { // impar CI++; AI += num; } conta++; } while (conta < 10); if (CI != 0) { media =(float)AI/(float)CI; printf(%i %i %i,AP,CP,media); } else { printf(%i %i,AP,CP); printf(No hay numeros impares\n); } }
Abraham Zamudio 44
Abraham Zamudio
45
Abraham Zamudio
46
do { numero ++; if (numero % 2 ==0) nPar += numero; else nImpar += numero; } while (numero < n); printf(Suma de numeros pares %i\n,nPar); printf(Suma de numeros impares %i\n,nImpar); }
Abraham Zamudio 47
Abraham Zamudio
48
Abraham Zamudio
49
Abraham Zamudio
50
Abraham Zamudio
51
For es quizs el tipo de bucle mas verstil y utilizado del lenguaje C. Su forma general es la Siguiente:
for (inicializacion; expresion_de_control; actualizacion) sentencia;
Abraham Zamudio
52
Abraham Zamudio
56
Abraham Zamudio
57
Abraham Zamudio
58
Abraham Zamudio
59
Abraham Zamudio
60
Abraham Zamudio
61
Abraham Zamudio
62
Abraham Zamudio
63
Abraham Zamudio
64
Abraham Zamudio
66
Abraham Zamudio
67
Abraham Zamudio
69
Abraham Zamudio
70
Abraham Zamudio
71
Abraham Zamudio
73
Abraham Zamudio
75
#include <stdio.h> #define MAX 500 int main() { int i, j; for (i = 1; i <= MAX; i++) for (j = 1; j <= i; j++) { if (sqrt(float(i*i+j*j)) - int(sqrt(float(i*i+j*j))) == 0.0) printf("triplete: %i, %i, %i, i, j , i*i+j*j); } } Abraham Zamudio
76
Abraham Zamudio
77
Abraham Zamudio
78
Manejo de Archivos en C
El problema de los datos utilizados por un programa, es qu todos los datos se eliminan cuando el programa termina. En la mayora de los casos se desean utilizar datos que no desaparezcan cuando el programa finaliza. De cara a la programacin de aplicaciones, un archivo no es ms que una corriente (tambin llamada stream) de bits o bytes que posee un final (generalmente indicado por una marca de fin de archivo). Para poder leer un archivo, se asocia a ste un flujo (tambin llamado secuencia) que es el elemento que permite leer los datos del archivo. En C un archivo puede ser cualquier cosa, desde un archivo de disco a un terminal o una impresora. Se puede asociar un flujo a un archivo mediante una operacin de apertura del archivo
Abraham Zamudio
80
Manejo de Archivos en C
La realidad fsica de los datos es que stos son nmeros binarios. Como es prcticamente imposible trabajar utilizando el cdigo binario, los datos deben de ser reinterpretados como enteros, caracteres, cadenas, estructuras, etc.
Abraham Zamudio
81
Manejo de Archivos en C
En el siguiente slide se intenta representar la realidad de los datos de un fichero. En el ejemplo, el fichero guarda datos de trabajadores. Desde el punto de vista humano hay salarios, nombres, departamentos, etc. Desde el punto de vista de la programacin hay una estructura de datos compuesta por un campo de tipo String, un entero, un double y una subestructura que representa fechas.
Abraham Zamudio 82
Manejo de Archivos en C
Abraham Zamudio
83
Abraham Zamudio
84
Archivos de acceso directo. Se puede acceder a cualquier dato del archivo conociendo su posicin en el mismo. Dicha posicin se suele indicar en bytes. En general los archivos binarios se utilizan mediante acceso directo.
Abraham Zamudio
85
Manejo de Archivos en C
Estructura FILE y punteros a archivos En el archivo de cabecera stdio.h se define una estructura llamada FILE. Esa estructura representa la cabecera de los archivos. La secuencia de acceso a un archivo debe poseer esta estructura. Un programa requiere tener un puntero de tipo *FILE a cada archivo que se desee leer o escribir. A este puntero se le llama puntero de archivos.
Abraham Zamudio 86
Manejo de Archivos en C
Apertura de Archivos : La apertura de los archivos se realiza con la funcin fopen. Esta funcin devuelve un puntero de tipo FILE al archivo que se desea abrir. El prototipo de la funcin es:
Abraham Zamudio
87
Manejo de Archivos en C
nombreArchivo es una cadena que contiene la ruta hacia el archivo que se desea abrir. modo es otra cadena cuyo contenido puede ser:
Abraham Zamudio
88
Manejo de Archivos en C
Abraham Zamudio
89
Manejo de Archivos en C
Un archivo se puede abrir en modo texto o en modo binario. En modo texto se leen o escriben caracteres, en modo binario se leen y escriben cualquier otro tipo de datos. La funcin fopen devuelve un puntero de tipo FILE al archivo que se est abriendo. En caso de que esta apertura falle, devuelve el valor NULL (puntero nulo). El fallo se puede producir porque el archivo no exista (slo en los modos r), porque la ruta al archivo no sea correcta, porque no haya permisos suficientes para la apertura, porque haya un problema en el sistema
Abraham Zamudio 90
Manejo de Archivos en C
cierre de archivos: La funcin fclose es la encargada de cerrar un archivo previamente abierto. Su prototipo es:
pArchivo es el puntero que seala al archivo que se desea cerrar. Si devuelve el valor cero, significa que el cierre ha sido correcto, en otro caso se devuelve un nmero distinto de cero.
Abraham Zamudio 91
Manejo de Archivos en C
Abraham Zamudio
92
Manejo de Archivos en C
#include <stdio.h> #include <string.h> int main() { FILE *fp; fp = fopen("prueba.htm", "w"); /* Abrir archivo para escritura */ fprintf(fp, "<HTML> \n"); fprintf(fp, "<BODY> \n"); fprintf(fp, "Esta es la primera linea de texto. \n"); fprintf(fp, "<CENTER>Esta es la segunda linea</CENTER> \n"); fprintf(fp, "Y esta es la <B>tercera linea de texto.</B> \n"); fclose(fp); /* Cerrar el archivo antes de terminar el programa */ printf("Se ha creado el archivo: prueba.htm \n"); return 0; }
Abraham Zamudio 93
Manejo de Archivos en C
Abraham Zamudio
94
Manejo de Archivos en C
Abraham Zamudio
95
Manejo de Archivos en C
Abraham Zamudio
96
Manejo de Archivos en C
Matriz1.DAT
Matriz2.DAT
Manejo de Archivos en C
#include<stdio.h> #include<stdlib.h> main(){ FILE *fp1, *fp2, *fs; float a[10][10],b[10][10],c[10][10],uno,dos; int n, m, i, j; if((fp1 = fopen("Matriz1.DAT","r"))==NULL) { printf("EL ARCHIVO Matriz1.dat NO EXISTE"); } else{ if((fp2 = fopen("Matriz2.DAT","r"))==NULL) { printf("EL ARCHIVO Matriz2.dat NO EXISTE"); } else{ n = 2; m = 3; for(i=0;i<n;i++) { for(j=0;j<m;j++) { fscanf(fp1,"%f",&uno); a[i][j]=uno; fscanf(fp2,"%f",&dos); b[i][j]=dos; c[i][j]=a[i][j] + b[i][j]; } } } } fclose(fp1); fclose(fp2); Abraham Zamudio
Esta primera parte del ejemplo es para cargar las matrices de entrada que se encuentran fisicamente en dos archivos de texto : Matriz1.DAT Matriz2.DAT
98
Manejo de Archivos en C
printf("La matriz uno es\n"); for(i=0;i<n;i++) { for(j=0;j<m;j++) {printf(" %.2f ",a[i][j]);}printf("\n"); } printf("La matriz dos es\n"); for(i=0;i<n;i++) { for(j=0;j<m;j++) {printf(" %.2f ",b[i][j]);}printf("\n"); } printf("La matriz suma es :\n"); for(i=0;i<n;i++) { for(j=0;j<m;j++) {printf(" %.2f ",c[i][j]);}printf("\n"); } printf("\n"); fs = fopen("MatrizR.txt","w"); for(i=0;i<n;i++) { for(j=0;j<m;j++) { fprintf(fs, " %.2f ",c[i][j]);} fprintf(fs, "\n"); } } Abraham Zamudio 99
En esta segunda parte del ejemplo se utilizan las matrices creadas a partir de los archivos .DAT para hacer operaciones con ellas
Manejo de Archivos en C
Abraham Zamudio
100