Descomposición funcional. Parte. Programación Estructurada. M.Sc. Ana María Salgado G.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Descomposición funcional. Parte. Programación Estructurada. M.Sc. Ana María Salgado G."

Transcripción

1 Descomposición funcional. Parte II Programación Estructurada 2013 M.Sc. Ana María Salgado G.

2 Más sobre funciones Todo programa C está formado además de por la función main, que es el punto de entrada y de salida del programa, por otras funciones, las cuales se comunican entre sí pasándose argumentos siempre que sean requeridos. Vamos a centrarnos en cuestiones más específicas como pasar argumentos a funciones que sean, matrices, estructuras y punteros, o bien devolver estos tipos de datos. Pasar una matriz como argumento a una función En C todos los arrays se pasan por referencia(dirección). Cuando se llama a una función y se utiliza un array como parámetro, se debe tener cuidado de no modificar los arrays en una función llamada. C trata automáticamente la llamada a la función como si hubiera situado el operador de dirección & delante del nombre del array. #include <stdio.h> #include <string.h> void cambiar(char c[4]); int main() char palabra[4] = "ABC"; cambiar(palabra); puts(palabra); return 0; void cambiar(char c[4]) puts(c); strcpy(c,"ama"); Cuando se pasa un array a una función, se pasa realmente sólo la dirección de la celda de memoria donde comienza el array. Este valor se representa por el nombre del array. La función puede cambiar entonces el contenido del array accediendo directamente a las celdas de memoria en donde se almacenan los elementos del array. Los elementos del array se pueden cambiar como si se pasara por referencia. Cuando pasamos un array a una función lo que se escribe como argumento en la llamada a esa función es el nombre del array, es decir, el argumento que se pasa es la dirección del array, por lo que el parámetro formal correspondiente tiene que ser también un array, el cual, después de la llamada, queda inicializado con esa dirección. M.Sc. Ana María Salgado G. Página 2

3 Los arrays son siempre pasados por referencia, porque no se pasa una copia de todos sus elementos. Tanto la función que invoca, como la función invocada trabajan sobre el mismo espacio de memoria(sobre el mismo array). #include <stdio.h> #define L 10 void leerarray(double a[], int *); void imprimirarray(const double [], int); int main() double a[l]; int n; leerarray(a, &n); printf("\nel array a tiene %d elementos, estos son\n",n); imprimirarray(a,n); return 0; void leerarray(double a[], int *num) int n ; puts("introduzca datos. Para terminar pulsar 0.\n"); for(n = 0; n < L; n++) printf("%d: ",n); scanf("%lf",&a[n]); if(a[n] == 0) break; *num = n; void imprimirarray(const double a[], int n) int i; for(i = 0; i<n; i++) printf("\t%d: %g\n",i,a[i]); M.Sc. Ana María Salgado G. Página 3

4 Cuando se declara un array unidimensional como parámetro de una función, no se requiere que se especifique su dimensión(no se hace una reserva de memoria para una copia total del array), ya que lo que se pasa es la dirección del array. int leer(tficha bibli[ ], int NMAX); Precauciones Cuando se utiliza una variable array como argumento, la función receptora puede no conocer cuántos elementos existen en el array. Sin su conocimiento una función no puede utilizar el array. Aunque la variable array puede apuntar al comienzo de él, no proporciona ninguna indicación de dónde termina el arreglo. La función SumaDeEnteros() suma los valores de todos los elementos de un array y devuelve el total. int SumaDeEnteros(int *ArrayEnteros) int main() int lista[5] = 10, 11, 12, 13, 14; SumaDeEnteros(lista); Aunque SumaDeEnteros() conoce dónde comienza el array, no conoce cuántos elementos hay en el array, en consecuencia, no sabe cuántos elementos hay que sumar. Se pueden utilizar dos métodos alternativos para permitir que una función conozca el número de argumentos asociados con un array que se pasa como argumento de una función: Situar un valor de señal al final del array, que indique a la función que se ha de detener el proceso en ese momento. Pasar un segundo argumento que indica el número de elementos del array. Todas las cadenas utilizan el primer método ya que terminan en nulo. Una segunda alternativa es pasar el número de elementos del array siempre que se pasa el array como un argumento. El array y el número de elementos se convierten entonces en una pareja de argumentos que se asocian con la función llamada. La función SumaDeEnteros(), por ejemplo, se puede actualizar así: int SumaDeEnteros(int ArrayEnteros[], int noelementos) M.Sc. Ana María Salgado G. Página 4

5 El segundo argumento, noelementos, es un valor entero que indica a la función int SumaDeEnteros() cuántos elementos se procesarán en el array ArrayEnteros. Este método suele ser el utilizado para arrays de elementos que no son caracteres. Ejemplo: /********************** Programa Alumnos **********************/ // Versión con punteros #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define N 100 /* número máximo de alumnos */ typedef struct char matricula[10]; char apellidos[30]; char nombre[20]; char direccion[30]; ficha; int leer(ficha *, const int); void buscar(ficha *, char *, int, int); int menu(void); void main( ) static ficha lista[n]; char dato[30]; /* dato a buscar */ int opcion; /* opción elegida en el menú */ int n = 0; /* número de alumnos leídos */ while (1) /* bucle infinito. Se sale con break. */ opcion = menu( ); if (opcion!= 4) switch (opcion) case 1: /* entrada de los datos de los alumnos */ n = leer(lista, N); break; case 2: /* búsqueda por el número de matrícula */ system("cls"); printf("número de matrícula "); gets(dato); buscar(lista, dato, n, opcion); break; M.Sc. Ana María Salgado G. Página 5

6 case 3: /* Búsqueda por los apellidos */ system("cls"); printf("apellidos... "); gets(dato); buscar(lista, dato, n, opcion); break; else break; /**************************************************************** Función para visualizar el menú ****************************************************************/ int menu(void) int op; do system("cls"); printf("\n\t1. Entrada de datos de alumnos\n"); printf("\n\t2. Busqueda por nro. de matricula\n"); printf("\n\t3. Busqueda por apellidos\n"); printf("\n\t4. Fin\n"); printf("\n\nteclee la opcion deseada: "); scanf("%d", &op); fflush(stdin); while (op < 1 op > 4); return (op); /**************************************************************** Función para leer los datos correspondientes a un alumno ****************************************************************/ int leer(ficha *lista, const int NMAX) int n = 0; char resp = 's'; M.Sc. Ana María Salgado G. Página 6

7 while (tolower(resp) == 's' && n < NMAX) do system("cls"); printf("alumno numero %d\n\n", n+1); printf("numero de matrícula: "); gets(lista[n].matricula); printf("apellidos... "); gets(lista[n].apellidos); printf("nombre... "); gets(lista[n].nombre); printf("dirección... "); gets(lista[n].direccion); printf("\n\n Datos correctos? s/n "); fflush(stdin); resp = getchar(); while (tolower(resp)!= 's'); n++; printf("\n\n Más datos a introducir? s/n "); resp = getchar(); fflush(stdin); return (n); /**************************************************************** Función para buscar si existe o no un dato ****************************************************************/ void buscar(ficha *lista, char *x, int alumnos, int opcion) const int NO = 0; const int SI = 1; int existe = NO, i = 0; char resp; switch(opcion) case 2: /* búsqueda por número de matrícula */ while (!existe && i < alumnos) if (strcmp(lista[i++].matricula, x) == 0) existe = SI; break; case 3: /* Búsqueda por apellidos */ while (!existe && i < alumnos) if (strcmp(lista[i++].apellidos, x) == 0) existe = SI; break; M.Sc. Ana María Salgado G. Página 7

8 if (existe) printf("\n%s\n%s %s\n%s\n", lista[i-1].matricula, lista[i-1].apellidos, lista[i- 1].nombre, lista[i-1].direccion); else printf("\n%s no existe", x); printf("\n\npulse <Entrar> para continuar "); resp = getchar( ); fflush(stdin); Si el array es multidimensional, no es necesario especificar la primera dimensión, pero sí las restantes. void CopiarArray(float destino[ ][COLS], float origen[ ][COLS]); El nombre de un array y un puntero no son lo mismo, pero en lugar del nombre de una array unidimensional, podemos usar un puntero que almacene la dirección de comienzo del array para acceder a los elementos del mismo. El identificador de un array y un puntero no son lo mismo, lo que imposibilita en el caso de arrays de dos dimensiones utilizar en lugar del nombre del array, un puntero a un puntero que almacene la dirección de comienzo del array para acceder a los elementos del mismo. /************** Fusionar dos listas clasificadas **************/ /* Versión con punteros */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define NML 120 /* número máximo de líneas */ #define CPL 60 /* caracteres por línea */ int fusionar(char **, int, char **, int, char **, const int); void Error(void); void main( ) /* Inicializamos las listas a clasificar con el fin de no tener * que leer los datos y realizar así una prueba rápida. */ static char *listaactual[ ] = "Ana", "Carmen", "David", "Francisco", "Javier", "Jesús", "José", "Josefina", "Luís", "María", "Patricia", "Sonia" ; M.Sc. Ana María Salgado G. Página 8

9 static char *listanueva[ ] = "Agustín", "Belén", "Daniel", "Fernando", "Manuel", "Pedro", "Rosa", "Susana" ; /* Calcular el número de elementos de los arrays anteriores */ const int dima = sizeof(listaactual)/sizeof(listaactual[0]); const int dimn = sizeof(listanueva)/sizeof(listanueva[0]); /* Definir el array resultante de fusionar los anteriores */ static char **listafinal; // referencia el array resultante int ind, r; /* Asignar memoria para el array de punteros listafinal */ listafinal = (char **)malloc((dima+dimn) * sizeof(char *)); if (listafinal = = NULL) Error( ); /* Inicializa el array de punteros. Esto evita problemas al liberar memoria, en el supuesto de un error por falta de memoria */ for (ind = 0; ind < dima+dimn; ind++) listafinal[ind] = NULL; /* Fusionar listaactual y listanueva y almacenar en resultado en * listafinal. La función "fusionar" devuelve un 0 si no se * pudo realizar la fusión. */ r = fusionar(listaactual, dima, listanueva, dimn, listafinal, NML); /* Escribir el array resultante */ if (r) for (ind = 0; ind < dima+dimn; ind++) printf("%s\n", listafinal[ind]); else Error( ); /* Liberar la memoria ocupada por el array listafinal */ for (ind = 0; ind < dima+dimn; ind++) free(listafinal[ind]); free(listafinal); M.Sc. Ana María Salgado G. Página 9

10 /**************************************************************** F U S I O N A R ****************************************************************/ int fusionar(char **listaa, int dima, char **listan, int dimn, char **listaf, const int nml) int ind = 0, inda = 0, indn = 0, indf = 0; while (inda < dima && indn < dimn) if (strcmp(listaa[inda], listan[indn]) < 0) listaf[indf] = (char *)malloc(strlen(listaa[inda]) + 1); if (listaf[indf] = = NULL) return 0; strcpy(listaf[indf++], listaa[inda++]); else listaf[indf] = (char *)malloc(strlen(listan[indn]) + 1); if (listaf[indf] = = NULL) return 0; strcpy(listaf[indf++], listan[indn++]); /* Los dos lazos siguientes son para prever el caso de que, * lógicamente una lista finalizará antes que la otra. */ for (ind = inda; ind < dima; ind++) listaf[indf] = (char *)malloc(strlen(listaa[inda]) + 1); if (listaf[indf] = = NULL) return 0; strcpy(listaf[indf++], listaa[ind]); for (ind = indn; ind < dimn; ind++) listaf[indf] = (char *)malloc(strlen(listan[indn]) + 1); if (listaf[indf] = = NULL) return 0; strcpy(listaf[indf++], listan[ind]); return(1); void Error(void) puts("longitud no válida de la lista resultante"); exit(1); M.Sc. Ana María Salgado G. Página 10

11 Pasar una estructura a una función Una estructura puede ser pasada a una función por valor o por referencia. Cuando pasamos una estructura por valor, el parámetro actual que representa la estructura se copia en el correspondiente parámetro formal, produciéndose un duplicado. Si alguno de los miembros del parámetro formal se modifica, los cambios no afectan al parámetro actual correspondiente. Si pasamos la estructura por referencia, lo que recibe la función es el lugar de la memoria donde se localiza dicha estructura. /**************** Operaciones con complejos ****************/ #include <stdio.h> typedef struct float real; float imag; tcomplejo; void SumarComplejos(tcomplejo c1, tcomplejo c2, tcomplejo *p); void main( ) tcomplejo ca, cb, cc; printf("\nintroducir datos de la forma: x yi\n"); printf("ca = "); scanf("%f %f", &ca.real,&ca.imag); fflush(stdin); printf("cb = "); scanf("%f %f", &cb.real,&cb.imag); fflush(stdin); SumarComplejos(ca, cb, &cc); printf("resultado: %g%+gi\n", cc.real, cc.imag); void SumarComplejos(tcomplejo c1, tcomplejo c2, tcomplejo *p) p->real = c1.real + c2.real; p->imag = c1.imag + c2.imag; M.Sc. Ana María Salgado G. Página 11

12 Función que retorna un puntero Cuando una función retorna un puntero a un objeto, el objeto debe persistir después de finalizar la función. /**************** Operaciones con complejos ****************/ #include <stdio.h> #include <stdlib.h> typedef struct float real; float imag; tcomplejo; tcomplejo *SumarComplejos(tcomplejo c1, tcomplejo c2); void main( ) tcomplejo ca, cb, *pcr; printf("\nintroducir datos de la forma: x yi\n"); printf("ca = "); scanf("%f %f", &ca.real,&ca.imag); fflush(stdin); printf("cb = "); scanf("%f %f", &cb.real,&cb.imag); fflush(stdin); pcr = SumarComplejos(ca, cb); printf("resultado: %g%+gi\n", pcr->real, pcr->imag); tcomplejo *SumarComplejos(tcomplejo c1, tcomplejo c2) tcomplejo cx; cx.real = c1.real + c2.real; cx.imag = c1.imag + c2.imag; return &cx; El programa anterior presenta resultados inesperados. La función SumarComplejos, utiliza un complejo local cx del cual retorna su dirección. Cuando la función finalice el complejo cx se destruirá automáticamente, con lo que el puntero pcr que apunta al resultado, estará apuntando a un objeto inexistente. M.Sc. Ana María Salgado G. Página 12

13 La solución radica en hacer que la función SumarComplejos cree un objeto que persista a lo largo de la ejecución del programa, asignando memoria dinámicamente para el objeto. /**************** Operaciones con complejos ****************/ #include <stdio.h> #include <stdlib.h> typedef struct float real; float imag; tcomplejo; tcomplejo *SumarComplejos(tcomplejo c1, tcomplejo c2); void main( ) tcomplejo ca, cb, *pcr; printf("\nintroducir datos de la forma: x yi\n"); printf("ca = "); scanf("%f %f", &ca.real,&ca.imag); fflush(stdin); printf("cb = "); scanf("%f %f", &cb.real,&cb.imag); fflush(stdin); pcr = SumarComplejos(ca, cb); printf("resultado: %g%+gi\n", pcr->real, pcr->imag); /* Liberar la memoria asignada */ free(pcr); tcomplejo *SumarComplejos(tcomplejo c1, tcomplejo c2) tcomplejo *pcx; /* Asignar memoria para el complejo suma */ pcx = (tcomplejo *)malloc(sizeof(tcomplejo)); if ( pcx = = NULL ) printf("memoria insuficiente\n"); exit(-1); pcx->real = c1.real + c2.real; pcx->imag = c1.imag + c2.imag; return pcx; M.Sc. Ana María Salgado G. Página 13

14 Funciones recursivas Una función recursiva es aquella que se llama a sí misma. El compilador C permite cualquier número de llamadas recursivas a una función. Cada vez que la función es llamada, los parámetros formales son inicializados. Se utiliza una función recursiva, cuando el proceso a programar es por definición recursivo. Por ejemplo, el cálculo del factorial de un número por definición es un proceso recursivo. n! = n(n-1)! /************* Cálculo del factorial de un número *************/ #include <stdio.h> unsigned long factorial(int n); void main( ) int numero; unsigned long fac; do printf(" Número? "); scanf("%d", &numero); while (numero < 0 numero > 12); fac = factorial(numero); printf("\nel factorial de %d es %ld\n", numero, fac); unsigned long factorial(int n) if (n == 0) return 1; else return n*factorial(n-1); Para n = 4, el proceso seguido por la función es: Nivel de recursión Proceso de ida Proceso de vuelta 0 factorial(4) * factorial(3) 4 * * factorial(2) 3 * * factorial(1) 2 * * factorial(0) 1 * 1 factorial(0) 1 M.Sc. Ana María Salgado G. Página 14

15 El uso de la recursión debe evitarse cuando haya una solución obvia por iteración. La llamada a una función recursiva consume mucho espacio de pila debido a que por cada llamada las variables que intervienen en la función son salvadas en la pila para posteriormente poder iniciar la vuelta. Funciones predefinidas en c Funciones matemáticas: Las declaraciones para estas funciones están en el fichero math.h Los argumentos y el resultado son de tipo double. En muchos casos utilizaremos conversión cast para convertir explícitamente los argumentos al tipo deseado. Ejemplo: a = tan((double)valor); Las funciones matemáticas se clasifican en: Funciones trigonométricas Funciones hiperbólicas. Funciones exponencial y logarítimica. Funciones varias. cos: La función cos da como resultado el coseno de x ( x en radianes). #include <math.h> double cos(double x); sin: La función sin da como resultado el seno de x ( x en radianes). #include <math.h> double sin(double x); tan: La función tan da como resultado la tangente de x ( x en radianes). #include <math.h> double tan(double x); cosh: La función cosh da como resultado el coseno hiperbólico de x ( x en radianes). #include <math.h> double cosh(double x); sinh: La función sinh da como resultado el seno hiperbólico de x ( x en radianes). #include <math.h> double sinh(double x); tanh: La función tanh da como resultado la tangente hiperbólica de x ( x en radianes). #include <math.h> double tanh(double x); exp Da como resultado el valor de e x ( e = ) #include <math.h> double exp(double x); M.Sc. Ana María Salgado G. Página 15

16 log Da como resultado el logaritmo natural de x. #include <math.h> double log(double x); log10 Da como resultado el logaritmo en base 10 de x. #include <math.h> double log10(double x); ceil Resultado: un valor double, que representa el entero más pequeño que es mayor o igual que x. #include <math.h> double ceil(double x); double x = 2.8, y = -2.8; printf( %g %g\n,ceil(x),ceil(y)); fabs Calcula el valor absoluto de x( siendo x un valor real en doble precisión). Las funciones abs y labs calculan el valor absoluto de un int y un long respectivamente. #include <math.h> double fabs(double x); floor Resultado: un valor double, que representa el entero más grande que es menor o igual que x. double floor(double x); double x = 2.8, y = -2.8; printf( %g %g\n,floor(x),floor(y)); pow Resultado: x y. Si x es 0 e y es negativo o si x e y son 0 o si x es negativo e y no es entero, se obtiene un error(argumento fuera del dominio da la función). Si x y da un resultado superior al valor límite para el tipo double, el resultado es el valor límite( e+308) double pow(double x); double x = 2.8, y = -2.8; printf( %g\n,pow(x,y)); sqrt Calcula la raíz cuadrada de x. Si x es negativo, ocurre un error(argumento fuera del dominio de la función). #include <math.h> double sqrt(double x); M.Sc. Ana María Salgado G. Página 16

17 Números seudoaleatorios rand Da como resultado un número seudoaleatorio entero, entre 0 y el valor máximo para un int. #include <stdlib.h> int rand(void); Funciones de fecha y hora time Resultado: el número de segundos transcurridos desde las 0 horas del 1 de Enero de #include <time.h> time_t time(time_t *seg); ctime Convierte un tiempo almacenado como un valor de tipo time_t, en una cadena de caracteres de la forma: Thu Jul 08 12:01: #include <time.h> char *ctime(const time_t *seg); Devuelve un puntero a la cadena de caracteres resultante o un puntero nulo si seg representa un dato anterior al 1 de Enero de #include <stdio.h> #include <time.h> main( ) time_t segundos; printf("el numero de segundos transcurridos desde el 01/01/1970 es %ld\n",time(&segundos)); printf("la fecha actual es %s",ctime(&segundos)); El tipo time_t está definido así: typedef long time_t; Funciones para manipular bloques de memoria memset Permite iniciar un bloque de memoria. #include <string.h> void *memset(void *destino, int b, size_t nbytes); destino: dirección del bloque de memoria que se desea inicializar. b: valor empleado para iniciar cada byte del bloque. nbytes: número de bytes del bloque que se iniciará. M.Sc. Ana María Salgado G. Página 17

18 double a[10][10]; memset(a, 0, sizeof(a)); memcpy Copia un bloque de memoria en otro. #include <string.h> void *memcpy(void *destino, const void *origen, size_t nbytes); destino: es la dirección del bloque de memoria destino de los datos. origen: es la dirección del bloque de memoria origen de los datos. nbytes: número de bytes que se copiarán desde el origen al destino. double a[10][10], b[10][10]; memcpy(b, a, sizeof(a)); memcmp Compara byte a byte dos bloques de memoria. #include <string.h> int memcmp(void *bm1, const void *bm2, size_t nbytes); bm1, bm2: son las direcciones de los bloques de memoria a comparar. nbytes: número de bytes que se compararán. double a[10][10], b[10][10]; if(memcmp(a, b, sizeof(a)) == 0) printf( Las matrices contienen los mismos datos\n ); else printf( Las matrices no contienen los mismos datos\n ); Ejercicios resueltos 1. Realice un programa que utilice la siguiente función: struct fraccion *MultiplicarFracciones(struct fraccion f1, struct fraccion f2); Haga uso de la siguiente estructura: struct fraccion int numerador; int denominador; ; M.Sc. Ana María Salgado G. Página 18

19 /**************** Operaciones con fracciones ****************/ /* fraccion.c */ #include <stdio.h> #include <stdlib.h> struct fraccion int numerador; int denominador; ; struct fraccion *MultiplicarFracciones(struct fraccion f1, struct fraccion f2); void main() struct fraccion f1, f2, *fr; printf("fraccion # 1: \n"); printf("numerador = "); scanf("%d",&f1.numerador); fflush(stdin); printf("denominador = "); scanf("%d",&f1.denominador); fflush(stdin); printf("\nfraccion # 2: \n"); printf("numerador = "); scanf("%d",&f2.numerador); fflush(stdin); printf("denominador = "); scanf("%d",&f2.denominador); fflush(stdin); fr = MultiplicarFracciones(f1,f2); printf("resultado: %d/%d\n", fr->numerador, fr->denominador); /* Liberar la memoria asignada */ free(fr); M.Sc. Ana María Salgado G. Página 19

20 struct fraccion *MultiplicarFracciones(struct fraccion f1, struct fraccion f2) struct fraccion *producto; /* Asignar memoria para el racional producto */ producto = (struct fraccion *)malloc(sizeof(struct fraccion)); if ( producto == NULL ) printf("memoria insuficiente\n"); exit(-1); producto->numerador = f1.numerador * f2.numerador; producto->denominador = f1.denominador * f2.denominador; return producto; 2. Dado un array constituido de números enteros que contiene N elementos, siendo N >=1, realice una función recursiva que calcule la suma de todos los elementos del array. //recur2.c #include <stdio.h> void main( ) int numeros[25]; int N, i; printf("cuantos numeros tiene el arreglo? \n"); scanf("%d",&n); printf("introduzca el arreglo: "); for(i = 0; i < N; i++) scanf("%d",&numeros[i]); printf("%d \n", sumarray(numeros,0,n)); int sumarray(int numeros[ ], int posicion, int N) if(posicion == N - 1) return numeros[posicion]; else return(numeros[posicion] + sumarray(numeros, posicion + 1, N)); M.Sc. Ana María Salgado G. Página 20

21 3. El calendario Gregoriano actual obedece a la reforma del calendario juliano que ordenó el Papa Gregorio XIII en Se decidió, después de algunas modificaciones, que en los sucesivo fuesen bisiestos todos los años múltiplos de 4, pero que de los años seculares(los acabados en dos ceros) sólo fuesen bisiestos aquellos que fuesen múltiplos de 400. Construir un programa para que dada una fecha(día, mes y año) devuelva como resultado el día correspondiente de la semana. /********************************************************* CALENDARIO PERPETUO *********************************************************/ /* Dada una fecha (dia, mes, año) * indicar el día correspondiente de la semana. */ #include <stdio.h> #include <stdlib.h> void LeerFecha (int *dia, int *mes, int *anyo); void EntradaDatos(int *dia, int *mes, int *anyo); int DatosValidos(int dia, int mes, int anyo); int AnyoBisiesto(int anyo); void EscribirFecha( int dd, int mm, int aa); int DiaSemana(int dia, int mes, int anyo); void main(void) /* Función Principal */ int dia, mes, anyo; LeerFecha(&dia, &mes, &anyo); EscribirFecha(dia, mes, anyo); /********************************************************* FUNCIONES *********************************************************/ void LeerFecha(int *dia, int *mes, int *anyo) int datos_validos; do EntradaDatos(dia, mes, anyo); datos_validos = DatosValidos(*dia, *mes, *anyo); while (!datos_validos); M.Sc. Ana María Salgado G. Página 21

22 void EntradaDatos(int *dia, int *mes, int *anyo) printf("día (1-31) "); scanf("%d", dia); printf("mes (1-12) "); scanf("%d", mes); printf("año ( >) "); scanf("%d", anyo); int DatosValidos(int dia, int mes, int anyo) int r, anyob, mesb, diab; anyob = (anyo >= 1582); mesb = (mes >= 1) && (mes <= 12); switch (mes) case 2: if (r = AnyoBisiesto(anyo)) diab = (dia >= 1) && (dia <= 29); else diab = (dia >= 1) && (dia <= 28); break; case 4: case 6: case 9: case 11: diab = (dia >= 1) && (dia <= 30); break; default: diab = (dia >= 1) && (dia <= 31); if (!(diab && mesb && anyob)) printf("\ndatos NO VALIDOS\n\n"); printf("pulse <Entrar> para continuar "); r = getchar( ); fflush(stdin); return (0); else return (1); int AnyoBisiesto(int anyo) int verdad = 1, falso = 0; if ((anyo % 4 == 0) && (anyo % 100!= 0) (anyo % 400 == 0)) return (verdad); else return (falso); M.Sc. Ana María Salgado G. Página 22

23 void EscribirFecha(int dd, int mm, int aa) int d; static char dia[7][10] = "Sábado", "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes" ; static char mes[12][11] = "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ; d = DiaSemana(dd, mm, aa); printf("\n%s %d de %s de %d\n",dia[d], dd, mes[mm-1], aa); int DiaSemana(int dia, int mes, int anyo) if (mes <= 2) mes = mes + 12; anyo = anyo - 1; return ((dia+2*mes+3*(mes+1)/5+anyo+anyo/4-anyo/100+anyo/400+2)%7); 4. El siguiente ejercicio, lee dos tablas de enteros, calcula la suma de los elementos correspondientes, e imprime la nueva tabla que contiene esta suma. #include <stdio.h> #define MAXFIL 20 #define MAXCOL 30 /*Calcular la suma de los elementos de dos tablas de enteros */ main( ) int nfilas, ncols; static int a[maxfil][maxcol], b[maxfil][maxcol],c[maxfil][maxcol]; /* prototipos de funcion */ void leerentrada(int a[ ][MAXCOL], int nfilas, int ncols); void calcularsuma(int a[ ][MAXCOL], int b[ ][MAXCOL], int c[ ][MAXCOL], int nfilas, int ncols); void sacarsalida(int c[ ][MAXCOL], int nfilas, int ncols); M.Sc. Ana María Salgado G. Página 23

24 printf("cuantas filas?"); scanf("%d",&nfilas); printf("cuantas columnas?"); scanf("%d",&ncols); printf("\n\nprimera tabla: \n"); leerentrada(a,nfilas,ncols); printf("\n\nsegunda tabla: \n"); leerentrada(b,nfilas,ncols); calcularsuma(a,b,c,nfilas,ncols); printf("\n\nsumas de los elementos: \n\n"); sacarsalida(c,nfilas,ncols); void leerentrada(int a[ ][MAXCOL], int m, int n) int fila,col; for(fila = 0; fila < m ; ++fila) printf("\nintroducir datos para la fila no. %2d \n",fila+1); for(col = 0; col < n; col++) scanf("%d",&a[fila][col]); return; void calcularsuma(int a[ ][MAXCOL], int b[ ][MAXCOL], int c[ ][MAXCOL], int m, int n) int fila,col; for(fila = 0; fila < m ; ++fila) for(col = 0; col < n; col++) c[fila][col] = a[fila][col] + b[fila][col]; return; void sacarsalida(int a[ ][MAXCOL], int m, int n) int fila,col; for(fila = 0; fila < m ; ++fila) for(col = 0; col < n; col++) printf("%d\t",a[fila][col]); printf("\n"); M.Sc. Ana María Salgado G. Página 24

25 return; 5. El cálculo de los números de Fibonacci es un ejemplo de una definición matemática recursiva que se enuncia así: el número de Fibonacci f(i), siendo i el número de orden(0, 1, 2, 3, 4, 5,...) del número a calcular, es igual al número de Fibonacci f(i 1) más el número de Fibonacci f(i 2), sabiendo que f(0) es 0 y f(1) = 1. f(0) = 0 f(1) = 1 f(2) = f(1) + f(0) f(3) = f(2) + f(1)... f(i) = f(i - 1) + f(i 2) Realizar un programa que pregunte: cuántos números de Fibonacci, a partir del primero, se quieren calcular?, almacene esos números en una matriz del tamaño necesario y finalmente los muestre. Para ello se deberá utilizar una función recursiva con el prototipo indicado a continuación: int fibonacci(int n); La función fibonacci devolverá como resultado el número de Fibonacci cuyo número de orden(0, 1, 2,...) sea n. Una ejecución del programa podría ser: Cuántos números de Fibonacci, a partir del primero, se quieren calcular? n = 10 // fibonacci.c // #include <stdio.h> #include <stdlib.h> int fibonacci(int); int main() int n = 0, i = 0, *f; printf(" Cuántos números de Fibonacci, a partir del "); printf("primero, se quieren calcular?\n"); M.Sc. Ana María Salgado G. Página 25

26 do printf("n = "); i = scanf("%d", &n); fflush(stdin); while ( i == 0 n < 1); // Crear una matriz dinámicamente f = (int *)malloc(n * sizeof(int)); if (f == NULL) printf("insuficiente memoria\n"); return -1; // Obtener los números de la serie for (i = 0; i < n; i++) f[i] = fibonacci(i); // Visualizar la matriz for (i = 0; i < n; i++) printf("%5d", f[i]); printf("\n"); // Liberar la memoria asignada a la matriz free(f); return 0; int fibonacci(int n) if ( n == 0 ) return 0; else if ( n == 1 ) return 1; else return fibonacci(n-1) + fibonacci(n-2); M.Sc. Ana María Salgado G. Página 26

27 Ejercicios propuestos 1. Escribir una función que calcule el máximo de los primeros n elementos de un array especificado. Use la siguiente función prototipo: double maximo(const double a[], int n); 2. Realice un programa que introduzca una lista de 10 números enteros y calcule su suma y el valor máximo. Utilice los siguientes prototipos: int SumaDeEnteros(const int ArrayEnteros[], int noelementos); int máximo(const int ArrayEnteros[], int noelementos); 3. Diseñe una función que convierta los caracteres de sus argumentos a mayúsculas. Use el prototipo: void convierte_mayus(char cad[]); Utilice un bucle en la definición de la función, que termine cuando se alcance el fin de cadena(carácter nulo). 4. Haciendo uso de la siguiente estructura: struct info_persona char nombre[20]; char calle[30]; char ciudad[25]; char provincia[25]; char codigopostal[6]; ; Y de los prototipos de funciones: void entrada_pna(struct info_persona *pp); void ver_info(struct info_persona p); Lea e imprima los campos de la estructura haciendo uso de las funciones anteriores. M.Sc. Ana María Salgado G. Página 27

28 5. Realice la simulación y salida del siguiente programa: #include <stdio.h> void contar(int cima); void main(void) contar(10); return; void contar(int cima) if(cima >1) contar(cima - 1); printf("%d ",cima); 6. Dados dos números a (número entero) y b(número natural mayor o igual que cero). Realice una función recursiva para determinar a^b 7. Realice un programa para reordenar una lista de n enteros en una secuencia de valores algebraicos crecientes. El programa contendrá un array unidimensional de enteros llamado x, en el que se reordenará un elemento cada vez. La reordenación empezará recorriendo todo el array para encontrar el menor de los números, el cual será intercambiado con el primer elemento del array, colocando así el menor elemento en el principio de la lista. El resto de los n - 1 elementos del array se recorrerán para encontrar el menor, que se intercambiará con el segundo número. El resto de los n 2 números se recorrerán buscando el menor, que se intercambia con el tercer número, y así sucesivamente, hasta que el array completo sea reordenado. La función prototipo a utilizar es: void reordenar(int n, int x[ ]); Donde n indica la cantidad de enteros a introducir, y el array x es el arreglo donde se almacenarán dichos números. M.Sc. Ana María Salgado G. Página 28

29 Una salida típica podría ser: Cuantos números serán introducidos? 6 i = 1 x = 595 i = 2 x = 78 i = 3 x = i = 4 x = 891 i = 5 x = -29 i = 6 x = -7 Lista de números reordenada: i = 1 x = i = 2 x = -29 i = 3 x = -7 i = 4 x = 78 i = 5 x = 595 i = 6 x = Modificar el ejercicio anterior, de tal forma, que la función prototipo sea: void reordenar(int n, int *x); Utilice un array unidimensional de enteros como parámetro actual en la llamada a dicha función. En otra ejecución, use como parámetro actual un puntero a entero. Qué sucede con cada uno de los cambios? 9. Las torres de Hanoi son un conocido juego de niños, se juega con tres pivotes y un cierto número de discos de distintos tamaños. Los discos tienen un agujero en el centro, con lo que se pueden apilar en cualquiera de los pivotes. Inicialmente, los discos se amontonan en el pivote extremo de la izquierda por tamaño decreciente, es decir, el más grande abajo y el más pequeño arriba, como se ilustra en la figura Izquierda Centro Derecha M.Sc. Ana María Salgado G. Página 29

30 El objeto del juego es conseguir llevar los discos del pivote más a la izquierda al de más a la derecha, sin colocar nunca un disco sobre otro más pequeño. Sólo se puede mover un disco cada vez, y cada disco debe encontrarse siempre en uno de los pivotes. La estrategia a seguir es considerar uno de los pivotes como origen, y el otro como destino. El tercer pivote se utilizará para almacenamiento auxiliar, con lo que podemos mover los discos sin poner ninguno sobre otro más pequeño. Supongamos que hay n discos, numerados del más pequeño al más grande. Si los discos se encuentran apilados inicialmente en el pivote izquierdo, el problema de leer los n discos al pivote derecho se puede formular de la siguiente forma recursiva: Mover los n 1 discos superiores del pivote izquierdo al del centro. Mover el n-ésimo disco(el más grande) al pivote de la derecha. Mover los n 1 discos del pivote del centro al de la derecha. Recuerde utilizar recursividad. M.Sc. Ana María Salgado G. Página 30

Departamento de Computación UNAN - LEON. Funciones

Departamento de Computación UNAN - LEON. Funciones Una función es una colección independiente de declaraciones y sentencias, enfocadas a realizar una tarea específica. Todo programa C consta al menos de una función, la función main, por donde empieza siempre

Más detalles

Ejercicios sobre Descomposición Funcional, Parte II. tcomplejo SumarComplejos(tcomplejo, tcomplejo); que sume dos números complejos.

Ejercicios sobre Descomposición Funcional, Parte II. tcomplejo SumarComplejos(tcomplejo, tcomplejo); que sume dos números complejos. Ejercicios sobre Descomposición Funcional, Parte II 1. Escribir un programa que haga uso de las siguientes funciones: tcomplejo SumarComplejos(tcomplejo, tcomplejo); que sume dos números complejos. tcomplejo

Más detalles

Descomposición funcional (Parte II)

Descomposición funcional (Parte II) 2012 Descomposición funcional (Parte II) Ing. Ileana Camacho Pasar un array a una función Cuando pasamos un array a una función lo que se escribe como argumento en la llamada a esa función es el nombre

Más detalles

Ingeniería Electrónica, Telecomunicaciones y Ambiental. Anexo Teórico Informática para el Práctico 2

Ingeniería Electrónica, Telecomunicaciones y Ambiental. Anexo Teórico Informática para el Práctico 2 Anexo Teórico para el Práctico 2 Repaso de expresiones y formatos de printf/scanf Expresiones aritméticas Operador Nombre Ejemplo + Suma a = b + 4 - Resta a = 3 4 * Multiplicación a = b * c / División

Más detalles

TEMA 7. ARRAYS (LISTAS Y TABLAS).

TEMA 7. ARRAYS (LISTAS Y TABLAS). TEMA 7. ARRAYS (LISTAS Y TABLAS). En capítulos anteriores se han descrito las características de los tipos de datos básicos o simples (carácter, entero y coma flotante). Asimismo, se ha aprendido a definir

Más detalles

Realizar el ejercicio anterior utilizando Punteros

Realizar el ejercicio anterior utilizando Punteros PUNTEROS Y ARRAYS En C existe una relación entre punteros y arrays tal que cualquier operación que se pueda realizar mediante la indexación de un arrays, se puede realizar también con punteros. Para clarificar

Más detalles

Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase

Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase Práctico 2: Funciones y Punteros en C La teoría general para este práctico puede consultarse en los Capítulos 4 y 5 Notas de Clase 1. Ejecute el siguiente programa y diga que hace la función calcula: #include

Más detalles

funciones printf scanf

funciones printf scanf FUNCIONES EN C FUNCIONES Los módulos en C se llaman funciones. Hemos estado utilizando funciones de la biblioteca estandar stdio.h como por ejemplo printf y scanf. Comenzaremos viendo algunas funciones

Más detalles

Programcaión Básica. Arreglos y Estructuras de Datos (2)

Programcaión Básica. Arreglos y Estructuras de Datos (2) Programación Básica Arturo Vega González a.vega@ugto.mx Division de Ciencias e Ingenierías Universidad de Guanajuato Campus León Sesión 7 Universidad de Guanajuato, DCI, Campus León 1 / 29 Contenido 1

Más detalles

Tema 3. Estructuras de control

Tema 3. Estructuras de control Tema 3. Estructuras de control 3.1. Secuencial 3.2. Selección 3.3. Repetición 2 Objetivos Objetivos del tema: Conocer y saber la utilidad de las tres estructuras de control (secuencial, alternativa y repetitiva)

Más detalles

Tema 7: Recursividad

Tema 7: Recursividad Tema 7: Recursividad Objetivos: en este tema estudiaremos funciones recursivas; esto es, funciones que se invocan a sí mismas. Estas funciones son equivalentes a estructuras tipo bucle pero permiten especificar

Más detalles

SUBPROGRAMAS FUNCIONES

SUBPROGRAMAS FUNCIONES SUBPROGRAMAS FUNCIONES 1 INTRODUCCIÓN En la mayoría de los casos, un determinado problema complejo lo podemos (y debemos) dividir en problemas más sencillos. (Módulos o Subprogramas) TÉCNICA DE DISEÑO

Más detalles

Punteros. Programación en C 1

Punteros. Programación en C 1 Punteros Programación en C 1 Índice Variables y direcciones de memoria. Punteros definición, declaración e inicialización. Punteros declaración, asignación y dereferencia. Puntero nulo, tipo void. Aritmética

Más detalles

Tipos de datos y operadores en C++

Tipos de datos y operadores en C++ Tipos de datos y operadores en C++ El tipo de dato determina la naturaleza del valor que puede tomar una variable. Un tipo de dato define un dominio de valores y las operaciones que se pueden realizar

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

1. Presentación del lenguaje C Creado en 1972 por D. Ritchie Lenguaje de propósito general Portátil o transportable (generalmente) Inicialmente de niv

1. Presentación del lenguaje C Creado en 1972 por D. Ritchie Lenguaje de propósito general Portátil o transportable (generalmente) Inicialmente de niv Introducción al lenguaje C Informática Belarmino Pulido Junquera Índice 1. Presentación del lenguaje C 2. Estructura de un programa en C 3. Instrucciones del pre-procesador procesador 4. Tipos de datos

Más detalles

Programación I Funciones

Programación I Funciones 1 Funciones Iván Cantador 2 Funciones: definición, sintaxis, ejemplos (I) Una funciónes un bloque de sentencias identificado con un nombre que se ejecutan de manera secuencial ofreciendo una funcionalidad

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

Introducción al lenguaje C

Introducción al lenguaje C Introducción al lenguaje C Ampliación de Informática Belarmino Pulido Junquera Índice 1. Presentación del lenguaje C 2. Estructura de un programa en C 3. Tipos de datos escalares 4. Operadores básicos

Más detalles

Tema 18: Memoria dinámica y su uso en C

Tema 18: Memoria dinámica y su uso en C Tema 18: Memoria dinámica y su uso en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1

Más detalles

1000+(4/100)*1000 =1000 * (1+4/100) =1000 * 1.04 = Al finalizar el segundo año, el 4% se aplica sobre los 1040, y obtenemos:

1000+(4/100)*1000 =1000 * (1+4/100) =1000 * 1.04 = Al finalizar el segundo año, el 4% se aplica sobre los 1040, y obtenemos: Nombre: Apellidos: Grupo: Nº. Matrícula Ejercicio 1 (2,5 puntos 30 minutos) Al ingresar capital en un banco, pongamos 1000, éste nos ofrece un porcentaje anual de interés, por ejemplo el 4%. Al cabo de

Más detalles

PUNTEROS (APUNTADORES)

PUNTEROS (APUNTADORES) 2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Algoritmo y Estructura de Datos. PUNTEROS (APUNTADORES) TEMA 4: PUNTEROS (APUNTADORES)

Más detalles

Universidad del Papaloapan

Universidad del Papaloapan Universidad del Papaloapan Materia: Programación Estructurada Tema: Punteros Expositor: M. C. Bertha López Azamar Tuxtepec, Oaxaca. Enero/2005-2006 1 PUNTEROS M. C. Bertha López Azamar Un tema muy ligado

Más detalles

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador. Departamento de Práctica Nº 9: Rango y precisión de representación de números en el ordenador. Uso de punteros Objetivos de la práctica: - Entender la representación de números (enteros y reales) en el

Más detalles

TEMA 4. ESTRUCTURAS DE CONTROL

TEMA 4. ESTRUCTURAS DE CONTROL M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 4. ESTRUCTURAS DE CONTROL Grado en Ingeniería en Tecnologías Industriales Programación CONTENIDOS 4.1.

Más detalles

CAPITULO 6: FUNCIONES

CAPITULO 6: FUNCIONES CAPITULO 6: FUNCIONES 1. INTRODUCCIÓN Un problema de programación en C se resuelve descomponiéndolo en varias partes. Cada una de estas partes se puede asociar a una función que resuelva su fracción correspondiente

Más detalles

Funciones Definición de función

Funciones Definición de función Funciones Definición de función Una función es un bloque de código que realiza una tarea específica. Una función es una porción de programa, identificable mediante un nombre, que realiza determinadas tareas

Más detalles

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Unidad Académica Profesional Tianguistenco Ingeniería de Software Estructura de Datos

Más detalles

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C Sesión 2 Contenidos: 1. Punteros 2. Arrays 3. Estructuras (registros) y uniones 4. Funciones Ejercicios Algoritmos y

Más detalles

EJEMPLOS DE ESTRUCTURAS EN C

EJEMPLOS DE ESTRUCTURAS EN C ASIGNATURA: EJEMPLOS DE ESTRUCTURAS EN C ALGORITMO Y ESTRUCTURA DE DATOS EJEMPLOS DE ESTRUCTURAS EN C 2012 D E P A R T A M E N T O D E COMPUTACIÓN UNAN-LEÓN ESTRUCTURAS EN C 1. Crear un programa que contenga

Más detalles

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE) Repaso Lenguaje C OBJETOS Variables Constantes Variable: objeto del ambiente cuyo contenido puede cambiar. Constante: objeto cuyo contenido no puede cambiar. Variables: - un nombre que la identifica. Deben

Más detalles

Repaso 02: Apuntadores y manejo de memoria dinámica

Repaso 02: Apuntadores y manejo de memoria dinámica Repaso 02: Apuntadores y manejo de memoria dinámica Solicitado: Ejercicios 02: Programación con memoria dinámica M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom

Más detalles

GUIA DE LABORATORIO # 13 Arreglos unidimensionales y bidimensionales

GUIA DE LABORATORIO # 13 Arreglos unidimensionales y bidimensionales OBJETIVO GUIA DE LABORATORIO # 13 Arreglos unidimensionales y bidimensionales Entender el concepto y funcionamiento de los arreglos Realizar programas en C, haciendo uso de arreglos, a través de su recorrido

Más detalles

Programación I Teoría III.

Programación I Teoría III. Programación I Teoría III http://proguno.unsl.edu.ar proguno@unsl.edu.ar DATOS ESTRUCTURADOS Estructuras de Datos Hasta ahora hemos trabajado con Datos simples enteros reales Caracteres punteros Sin embargo,

Más detalles

Formato para Prácticas de Laboratorio

Formato para Prácticas de Laboratorio PROGRAMA EDUCATIVO PLAN DE ESTUDIO CLAVE DE UNIDAD DE APRENDIZAJE NOMBRE DE LA UNIDAD DE APRENDIZAJE TRONCO COMUN 2009-2 11214 PROGRAMACION PRÁCTICA No. 4 LABORATORIO DE NOMBRE DE LA PRÁCTICA Licenciado

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

Más detalles

Objetivos. El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria.

Objetivos. El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria. Objetivos El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria. Al final de esta práctica el alumno podrá: 1. Acceder a localidades de

Más detalles

Laboratorio de Informática GRADO EN FÍSICA

Laboratorio de Informática GRADO EN FÍSICA Objetivos de la práctica: - Aplicar el método de diseño descendente para obtener programas modulares. - Aprender el uso de funciones y la correcta modularización de programas. - Adquirir destreza en el

Más detalles

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/ DECLARACION DE ESTRUCTURAS ESTRUCTURAS La estructura es una colección de variables, la cual puede poseer distintos tipos de datos (a diferencia de los arreglos que solamente pueden tener un solo tipo de

Más detalles

Programación Estructurada. Sesión 2:El lenguaje de programación C

Programación Estructurada. Sesión 2:El lenguaje de programación C Programación Estructurada Sesión 2:El lenguaje de programación C Contextualización Una parte importante del lenguaje C son las palabras reservadas, son identificadores con un significado predefinido. Estas

Más detalles

Sentencias de salto: break, continue, goto Sentencia de Salto: break

Sentencias de salto: break, continue, goto Sentencia de Salto: break 1.9.4. Sentencias de salto: break, continue, goto 1.9.4.1.- Sentencia de Salto: break La sentencia break se utiliza para terminar la ejecución de bucles o salir de una sentencia switch. Se puede utilizar

Más detalles

Introducción general al Lenguaje C (2010/2011)

Introducción general al Lenguaje C (2010/2011) Luis Valencia Cabrera lvalencia@us.es (http://www.cs.us.es/~lvalencia) Ciencias de la Computacion e IA (http://www.cs.us.es/) Introducción general al Lenguaje C (2010/2011) Universidad de Sevilla Índice

Más detalles

Tipos de datos y Operadores Básicos

Tipos de datos y Operadores Básicos Módulo I: Conceptos Básicos Tema 1. Qué es un ordenador? Tema 2. Cómo se representan los datos en un ordenador? Tema 3. Qué es un lenguaje de programación? Tema 4. Cómo se hace un programa informático?

Más detalles

LENGUAJE. Tema 4 Vectores, Matrices y Cadenas de caracteres.

LENGUAJE. Tema 4 Vectores, Matrices y Cadenas de caracteres. LENGUAJE Tema 4 Vectores, Matrices y Cadenas de caracteres. VECTORES UNIDIMENSIONALES Los vectores (array o arreglo) unidimensionales son secuencias de valores del mismo tipo que se almacenan en localidades

Más detalles

Índice. Estructuras de datos en Memoria Principal. Vectores. Matrices. Cadenas de caracteres. Estructuras. Estructuras de datos en Memoria Externa

Índice. Estructuras de datos en Memoria Principal. Vectores. Matrices. Cadenas de caracteres. Estructuras. Estructuras de datos en Memoria Externa Índice Estructuras de datos en Memoria Principal Vectores Matrices Cadenas de caracteres Estructuras Estructuras de datos en Memoria Externa Ficheros Tema: Estructuras de Datos 2 Estructuras Una estructura

Más detalles

Lenguaje de Programación: C++ Repaso de Material C++

Lenguaje de Programación: C++ Repaso de Material C++ UG Lenguaje de Programación: C++ Repaso de Material C++ Universidad de Guanajuato Octubre 2010 Variables Tipos de Variables Operadores Variable Para poder leer algo, necesitamos un lugar donde poner lo

Más detalles

Estructuración del programa en partes más pequeñas y sencillas

Estructuración del programa en partes más pequeñas y sencillas Introducción Estructuración del programa en partes más pequeñas y sencillas Modularización Propósito único Identificable Reusable Mayor claridad: programación, depuración, etc. Construcción de librerías

Más detalles

Tipos de Arreglos. Notación Algoritmica de los Arreglos multidimensionales tipo_dato nombre[dim 1. , dim 2. ,..., dim n

Tipos de Arreglos. Notación Algoritmica de los Arreglos multidimensionales tipo_dato nombre[dim 1. , dim 2. ,..., dim n Matrices Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Tipos de

Más detalles

PUNTEROS (Apuntadores)

PUNTEROS (Apuntadores) PUNTEROS (Apuntadores) Unidad III INTRODUCCIÓN A PUNTEROS. CONCEPTOS BÁSICOS. DECLARACIÓN DE PUNTEROS. PUNTEROS Como una colección de posiciones de memoria consecutivas. En ella se almacenan los distintos

Más detalles

LABORATORIO 6 FUNCIONES

LABORATORIO 6 FUNCIONES LABORATORIO 6 FUNCIONES 1 OBJETIVOS Al finalizar esta actividad, serás capaz de: Utilizar funciones matemáticas predefinidas dentro de cualquier función (no sólo en la función main). Entender que de la

Más detalles

Manejo de memoria en C

Manejo de memoria en C Manejo de memoria en C Todas las variables, en el lenguaje C, se definen dentro de alguna función, fuera de esa función no es posible acceder a ellas. Al entrar a una función, a cada una de las variables

Más detalles

PROBLEMA 1. Rellena el hueco 1 (línea 23). Realiza la reserva de memoria para almacenar los n puntos.

PROBLEMA 1. Rellena el hueco 1 (línea 23). Realiza la reserva de memoria para almacenar los n puntos. PROBLEMA 1. El siguiente programa tiene algunos huecos en blanco que tienes que rellenar para que funcione correctamente. En cada hueco va una única línea de C, salvo en el cuerpo de la función calcula_area_triangulo,

Más detalles

Objetivos. Conocer y saber utilizar diferentes tipos de datos. estructurados: cómo se definen. cómo están organizadas sus componentes

Objetivos. Conocer y saber utilizar diferentes tipos de datos. estructurados: cómo se definen. cómo están organizadas sus componentes Objetivos Conocer y saber utilizar diferentes tipos de datos estructurados: cómo se definen cómo están organizadas sus componentes cómo se accede a ellas y sus operaciones y algoritmos básicos Tema: Estructuras

Más detalles

Principal material bibliográfico utilizado

Principal material bibliográfico utilizado Vectores y Punteros Principal material bibliográfico utilizado www.jorgesanchez.net Fundamentos de Programación C/C++ - Ernesto Peñaloza Romero. Lenguaje C Adolfo Beltramo, Nélida Matas. En C el primer

Más detalles

Codificación en C. Como pasar de Pseudocódigo a C (con pequeños trucos de C++)

Codificación en C. Como pasar de Pseudocódigo a C (con pequeños trucos de C++) Codificación en C Como pasar de Pseudocódigo a C (con pequeños trucos de C++) Plantilla Librerias Constantes Algoritmo #include #include #define PI 3.1416 int main(void){ /*Variables*/

Más detalles

Punteros. Índice. 1. Qué es un puntero y por que son importantes.

Punteros. Índice. 1. Qué es un puntero y por que son importantes. Punteros Índice 1. Qué es un puntero y por que son importantes. 2. Punteros a tipos básicos. 3. Punteros sin tipo. 4. Memoria dinámica. 5. Punteros a estructuras. 6. Punteros a matrices. 7. Punteros a

Más detalles

Una expresión es una combinación de uno o más operandos y operadores para obtener un resultado.

Una expresión es una combinación de uno o más operandos y operadores para obtener un resultado. 1.6. EXPRESIONES CONCEPTO: Una expresión es una combinación de uno o más operandos y operadores para obtener un resultado. Los operandos pueden ser constantes, variables, otras expresiones e incluso funciones.

Más detalles

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas Unidad IV Arreglos y estructuras M.C. Juan Carlos Olivares Rojas 4.1 Concepto de arreglo Agenda 4.2 Manejo de cadenas 4.3 Concepto de estructuras 4.4 Concepto de unión 4.5 Empleo de apuntadores 4.1 Concepto

Más detalles

Tipos de Datos en C. Palabras reservadas en C

Tipos de Datos en C. Palabras reservadas en C Tipos de Datos en C Tipo Tamaño de bits Rango char 8-128 a 127 unsigned char 8 0 a 255 signed char 8-128 a 127 int 16 32768 a 32767 unsigned int 16 0 a 65535 signed int 16 Igual que int short int 16 Igual

Más detalles

directamente indirectamente

directamente indirectamente PUNTEROS EN C PUNTEROS Permiten simular el pasaje de parámetros por referencia. Permiten crear y manipular estructuras de datos dinámicas. Su manejo es de fundamental importancia para poder programar en

Más detalles

Descripción de un Programa

Descripción de un Programa Unidad 2 Descripción de un Programa 1 El Lenguaje C (1) El lenguaje C fue creado en 1972 por Ken L. Thompson y Dennis M. Ritchie en los Laboratorios Bell. Es evolución de un lenguaje más antiguo: B (a

Más detalles

Estructuras y Uniones

Estructuras y Uniones 1 Estructuras y Uniones Estructuras. Las estructuras ( struct ) son agrupaciones de una o más variables de tipos posiblemente diferentes, agrupadas bajo un mismo nombre. Esto permite un manejo más cómodo

Más detalles

Computación I: Fundamentos

Computación I: Fundamentos Computación I: Fundamentos Unidad III-Fundamentos de la Programación de Computadores 2º Semestre, 2010 M.Eng. José Miguel Rubio L. jose.rubio.l@ucv.cl 1 El Lenguaje de Programación C 2 Índice Estructura

Más detalles

Informática I (2014-2) Taller Lenguaje C Prof. Sebastián Isaza Departamento de Ingeniería Electrónica Facultad de Ingeniería Universidad de Antioquia

Informática I (2014-2) Taller Lenguaje C Prof. Sebastián Isaza Departamento de Ingeniería Electrónica Facultad de Ingeniería Universidad de Antioquia Informática I (2014-2) Taller Lenguaje C Prof. Sebastián Isaza Departamento de Ingeniería Electrónica Facultad de Ingeniería Universidad de Antioquia Preguntas sobre teoría 1. Es C un lenguaje interpretado

Más detalles

PROGRAMACION ESTRUCTURADA: Tema 3. Funciones

PROGRAMACION ESTRUCTURADA: Tema 3. Funciones PROGRAMACION ESTRUCTURADA: Tema 3. Funciones Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx Contenido 1. Definiciones

Más detalles

#include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; }

#include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; } /*1. Crear una función que calcule el cubo de un número real (float). El resultado deberá ser otro número real. Probar esta función para calcular el cubo de 3.2 y el de 5. */ float cubica(float numero)

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Formato para Prácticas de Laboratorio

Formato para Prácticas de Laboratorio Fecha de efectividad: 2017-1 CARRERA PLAN DE ESTUDIO CLAVE ASIGNATUR A NOMBRE DE LA ASIGNATURA Tronco Común 2009-2 11214 Programación PRÁCTICA No. 4 LABORATORIO DE NOMBRE DE LA PRÁCTICA Programación DURACIÓ

Más detalles

Dobles: Es el caso de la instrucción if-else (punto 1.2).

Dobles: Es el caso de la instrucción if-else (punto 1.2). 1 1.Introducción Las estructuras de control son instrucciones que nos permiten controlar el flujo de ejecución del programa. Las instrucciones de control se pueden agrupar en instrucciones condicionales

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles

1. factorial(4) := 4 * factorial(3) Se invoca a si misma y crea una segunda variable cuyo nombre es

1. factorial(4) := 4 * factorial(3) Se invoca a si misma y crea una segunda variable cuyo nombre es 5. Recursividad en Pascal En Pascal, a un procedimiento o función le es permitido no sólo invocar a otro procedimiento o función, sino también invocarse a sí mismo. Una invocación de éste tipo se dice

Más detalles

INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C

INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C Programación en Entornos Multitarea Curso 2006/2007 Introducción C: lenguaje de medio nivel 32 palabras clave Eficiencia de ejecución del código generado Portabilidad

Más detalles

Estructura de Datos ARREGLOS

Estructura de Datos ARREGLOS Estructura de Datos ARREGLOS ESTRUCTURAS DE INFORMACIÓN Una estructura de datos o de información es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen

Más detalles

Sintaxis de los aspectos generales de un lenguaje de programación

Sintaxis de los aspectos generales de un lenguaje de programación Sintaxis de los aspectos generales de un lenguaje de programación por Iván Cruz Un lenguaje de programación cuenta con una estructura y sintaxis que debe ser utilizada exactamente como se indique para

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Tipo de Dato: Arreglos

Tipo de Dato: Arreglos Tipo de Dato: Arreglos Unidimensionales Prof. Judith Barrios Albornoz Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Semestre A_2013 Este

Más detalles

APELLIDOS NOMBRE GRUPO CALIFICACIÓN FECHA

APELLIDOS NOMBRE GRUPO CALIFICACIÓN FECHA Hoja 1/10 Duración: una hora y media Resultados de aprendizaje que se evalúan en este examen: R2: Saber emplear las estructuras de control de flujo de programación para implementar algoritmos sencillos.

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

Más detalles

Primera Parte: Preguntas Cortas. Fundamentos de Informática 1ºIIND Examen Teoría Septiembre Grupo: A B C D E. Advertencias:

Primera Parte: Preguntas Cortas. Fundamentos de Informática 1ºIIND Examen Teoría Septiembre Grupo: A B C D E. Advertencias: Fundamentos de Informática 1ºIIND Examen Teoría Septiembre 2005 Nombre Grupo: A B C D E Apellidos: Preguntas Cortas Programar código Nota final Preguntas cortas (5 puntos) Prob.1 (2 punto) Prob.2 (1,5

Más detalles

Bucles anidados. M.Sc. Ana María Salgado G. UNAN - LEON 24/04/2012

Bucles anidados. M.Sc. Ana María Salgado G. UNAN - LEON 24/04/2012 2012 Bucles anidados M.Sc. Ana María Salgado G. UNAN - LEON 24/04/2012 Bucles anidados Los bucles anidados constan de un bucle externo con uno o más bucles internos. Cada vez que se repite el bucle externo,

Más detalles

PUNTEROS EN C (APUNTADORES)

PUNTEROS EN C (APUNTADORES) 2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Programación Estructurada PUNTEROS EN C (APUNTADORES) TEMA 10: PUNTEROS (APUNTADORES)

Más detalles

BUCLES ANIDADOS EN LENGUAJE C

BUCLES ANIDADOS EN LENGUAJE C 3/5/2013 UNAN - LEON BUCLES ANIDADOS EN LENGUAJE C M.Sc. Ana María Salgado G. Bucles anidados Los bucles anidados constan de un bucle externo con uno o más bucles internos. Cada vez que se repite el bucle

Más detalles

Punteros. Lenguaje C ANSI

Punteros. Lenguaje C ANSI Punteros. Lenguaje C ANSI Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección

Más detalles

Capítulo 11 INTRODUCCIÓN A LA CODIFICACIÓN EN C. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Capítulo 11 INTRODUCCIÓN A LA CODIFICACIÓN EN C. Presentación resumen del libro: EMPEZAR DE CERO A PROGRAMAR EN lenguaje C Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C" Autor: Carlos Javier Pes Rivas (correo@carlospes.com) Capítulo 11 INTRODUCCIÓN A LA CODIFICACIÓN EN C 1 OBJETIVOS Aprender a

Más detalles

Fundamentos de programación

Fundamentos de programación Fundamentos de programación Estructuras de Control Estructuras de control Estructuras de control Estructura secuencial Estructura alternativa Sentencias if, if else Sentencias if else anidadas El operador

Más detalles

Programación. Test Autoevaluación Tema 6

Programación. Test Autoevaluación Tema 6 Programación Test Autoevaluación Tema 6 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordóñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

Programación 1 Grado de Ingeniería Robótica

Programación 1 Grado de Ingeniería Robótica Programación 1 Grado de Ingeniería Robótica Tema 6: Datos estructurados Índice (sesión 11/11/2015): Arrays estáticos Cadenas de caracteres Funciones de la librería string.h Punteros Declaración de punteros

Más detalles

Preliminares: programación con C++

Preliminares: programación con C++ Preliminares: programación con C++ JUAN CARLOS CONDE RAMÍREZ INTRODUCTION TO PROGRAMMING Archivos y Comentarios Todo programa en lenguaje C++ debe tener la siguiente extensión: file.c, file.cc file.cpp

Más detalles

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.

Más detalles

Funciones. Programación en C 1

Funciones. Programación en C 1 Funciones Programación en C 1 Índice Estrategia de programación Uso y beneficios de las funciones. Sintaxis de la definición de una función y prototipado. Paso de argumentos a una función. Funciones y

Más detalles

Ejercicios Tema 6. Funciones

Ejercicios Tema 6. Funciones Ejercicios Tema 6. Funciones 1. Programa que calcule el cuadrado de todos los números comprendidos entre dos dados. Usar una función a la que se le pasa como parámetro un valor y retorna su cuadrado. 2.

Más detalles

Programación 1 Tema 5. Instrucciones simples y estructuradas

Programación 1 Tema 5. Instrucciones simples y estructuradas Programación 1 Tema 5 Instrucciones simples y estructuradas Índice Instrucciones simples Instrucciones estructuradas 2 Instrucción ::= 3 Instrucciones.

Más detalles

Introducción a la Programación en C Funciones

Introducción a la Programación en C Funciones Christopher Expósito-Izquierdo cexposit@ull.edu.es Airam Expósito-Márquez aexposim@ull.edu.es Israel López-Plata ilopezpl@ull.edu.es Belén Melián-Batista mbmelian@ull.edu.es José Marcos Moreno-Vega jmmoreno@ull.edu.es

Más detalles

Programación En Lenguaje C

Programación En Lenguaje C Programación En Lenguaje C Introducción Básica para Primero de Bachillerato TECNOLOGÍA DE LA INFORMACIÓN IES PALAS ATENEA Lenguaje C Estructurado Secuencial De alto Nivel Altamente portable Necesita un

Más detalles

Introducción a la Programación

Introducción a la Programación Introducción a la Programación Fundamentos de Programación Ingeniería Informática en Sistemas de Información Alicia Troncoso 1 Contenido l Introducción l Mi primer programa l Etapas a seguir en la programación

Más detalles

Algoritmos y Programación I

Algoritmos y Programación I Algoritmos y Programación I ARREGLOS Y ESTRUCTURAS EN C Arreglos Un arreglo o vector es un conjunto de datos del mismo tipo, almacenados de forma contigua (es decir uno al lado del otro) en memoria principal.

Más detalles

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados

Más detalles

UNIDAD 4 ESTRUCTURAS Y UNIONES

UNIDAD 4 ESTRUCTURAS Y UNIONES UNIDAD 4 ESTRUCTURAS Y UNIONES Programación Primavera 2010 Contenido Definición de estructura Procesamiento de una estructura Tipos de datos definidos por el usuario (typedef) Estructuras y apuntadores

Más detalles

Algoritmos y estructuras de datos

Algoritmos y estructuras de datos Algoritmos y estructuras de datos Estructuras, apuntadores y memoria dinámica Francisco Javier Zaragoza Martínez Universidad Autónoma Metropolitana Unidad Azcapotzalco Departamento de Sistemas 11 de mayo

Más detalles