Programación I Teoría II

Slides:



Advertisements
Presentaciones similares
Ejemplo de Programa C++
Advertisements

Funciones y recursividad
LOGROS DEL PERÍODO Utiliza de forma correcta las funciones para entrada y salida de datos en c++. Utiliza los elementos básicos de un programa en c++.
Repaso para la construcción del intérprete 2012
Procedimientos y Funciones
Informática I Código Semestre Para Ingeniería Electrónica e Ingeniería de Telecomunicaciones Profesor: Sebastián Isaza.
Programación I Teoría I
Programación I Teoría III
Programación I Teoría IV
Funciones. Programación, Algoritmos y Estructuras de Datos.
Historia La base del C proviene del BCPL (lógica programable en codigo binario), escrito por Martin Richards, y del B escrito por Ken Thompson en 1970.
FUNCIONES EN C.
INFORMATICA I Arreglos 2 CLASE 18.
INFORMATICA I Funciones CLASE 13.
Programación 1 Presentación de c++
ESTRUCTURA DEL LENGUAJE C
Principios y Herramientas de Programación
Prof. Franklin Cedeño. FUNCIONES EN C++ Cuando tratamos de resolver un problema, resulta muy útil utilizar la filosofía de “divide y vencerás”. Esta estrategia.
Programación Estructurada
Introducción al lenguaje C++
Encapsulamiento y Abstracción
Funciones Funciones De biblioteca Definidas por el usuario
SOBRECARGA DE FUNCIONES
Unidad 3 Punteros.
Ejemplos en C /* Ejemplos L/E en C con printf y scanf */ #include #include main(){ int i; int i; char nombre[30]; char nombre[30]; printf ("\nIntroduce.
17/09/2014Catedra de Programacion I1 Programación I Funciones.
COMPUTACION 2009 C lase 11 9/17/2014 Computación - Fac. Ingeniería - UNMDP2 Paradigma de programación estructurada  La programación estructurada trata.
Acciones y funciones Concepto
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
Funciones en lenguaje C
Funciones y procedimientos
Funciones Computación.
FUNCIONES EN C.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación I Teoría VI: Recursividad
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Programa “Coordenadas” Ing. Arturo Díaz Vargas Departamento de Sistemas División de Ciencias Básicas e Ingeniería UNIVERSIDAD AUTONOMA METROPOLITANA.
Lenguaje C.
Semana 5 Subprogramas..
Tema 7c Entrada y salida de funciones. Funciones Funcion Entradas SalidasTareas.
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.
FUNCIONES EN C.
Estructura de un programa en C
Funciones1 PROGRAMACIÓN ESTRUCTURADA EN PSEUDÓCODIGO Profr. Miguel Rodríguez Hernández PROGRAMACIÓN MODULAR O FUNCIONAL.
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Prog. Univ. Rodríguez Rey, Pablo Funciones Programación I.
Archivos.
Elaborado por Fernando Torre - Universidad Simón Bolívar ARREGLOS CI Computación I Universidad Simón Bolívar Dpto. de Computación y Tecnología de.
Programación Orientada a Aspectos (POA)
Descomposición Modular. Funciones
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Tecnólogo en Informática Estructura de Datos y Algoritmos.
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
Trazado. 1 Intercambio sin error #include void intercambio(int *, int *); /* prototipo */ main(){ int a=1,b=2; printf("a=%d b=%d\n",a,b); intercambio(&a,&b);
Definición de subprogramas en C
Conceptos Avanzados de Programación
Programación I Técnico Universitario en Web Dpto. de Informática FCFMyN - UNSL -10-
Radio Volumen esfera m. m #include.
Fundamentos de Programación
INTRODUCCION A LA PROGRAMACION
LENGUAJE “C” Programación.
Una función es un bloque de instrucciones que se ejecuta al ser llamada desde algún punto del programa, con nombre, que ejecuta una tarea específica y.
TIPOS DE DATOS PARCIAL III FUNCIONES. Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman ciertos valores.
Integrantes:  Gómez Desire  Orgelys Linares  Oriannys Linares  Sánchez Alfredo  Wendher Villasmil.
Encapsulamiento Miguel Ángel Rojas Aguilar Esthela Carmina Carranza Cabrera.
Lenguaje de Programación II PLAN DE EVALUACIÓN CONTENIDO MODALIDAD DE EVAL. PONDERACIÓN INTRODUCCIÓN BÁSICA AL LENGUAJE DE PROGRAMACIÓN.
OBJETIVOS DEFINIR LA ESTRUCTURA DE ARREGLOS. DECLARAR ARREGLOS EN C.
Programación Modular Programación de Computadoras - Hugo Vega Grupo2: Reina Rodríguez Miriam Salluca.
Transcripción de la presentación:

Programación I Teoría II http://proguno.unsl.edu.ar proguno@unsl.edu.ar

Modularidad Funciones en C

Modularidad Principio para resolución de problemas: Modularidad Módulo “Dividir para reinar” Modularidad Módulo Función Procedimiento Subrutina Subprograma …

Modularidad Ventajas Partes de un módulo Re-uso de código Abstracción: concentrarse en aspectos esenciales y no accidentales. Visión de caja negra (encapsulamiento). Partes de un módulo Una Definición Una o más Invocaciones o llamadas

Las funciones en C Funciones pre-definidas agrupadas en bibliotecas Ejemplos: Manejo de strings (string.h) Funciones matemáticas (math.h) I/O (por ej. scanf, printf) (stdio.h) … Funciones definidas por el usuario Una Definición de la función + [declaración del prototipo] Una ó más invocación(es)

#include <stdio. h> int potencia(int, int); /. prototipo #include <stdio.h> int potencia(int, int); /* prototipo */ main() { int i ; for (i = 0; i <= 10 ; i++) printf(“%d %d %d \n”, i, potencia(2, i), potencia(3, i)); return 0; }

/* Función que eleva la base n a la potencia m (m >= 0)*/ int potencia(int n, int m) { int i, p;   p = 1; for (i = 0; i < m; i++) p = p * n; return p; }

Definición de una función en C

Definición de una función en C Tipo del Valor de Retorno Cuando la función no retorna nada se coloca void void imprimeNumerosDesdeHasta(int x, int y){ for (int i = x; i <= y; i++) printf(“%d\n”, i); } Si se omite tipo-de-retorno se asume int potencia(int n, int m){ int i, p;  p = 1; for (i = 1; i <= m; i++) p = p * n; return p;

Definición de una función en C Lista de parámetros formales (opcionales) Si la función no tiene parámetros formales se coloca void int flip(void){ /* genera un número ramdom */ … }

Definición de una función en C Valor retornado en el cuerpo de la función Se usa sentencia return para devolver valor del tipo de retorno de la función. Puede no devolver nada (la función retorna tipo void). return; Sin sentencia return, retorna cuando encuentra }

Definición de una función en C Definición del prototipo de la función Es idéntico al encabezado de la definición de la función, aunque los identificadores de los parámetros pueden ser distintos o incluso omitirse. Es usado por el compilador para controlar las invocaciones a la función. Ejemplos: int potencia(int, int); int potencia(int n, int m); int potencia(int a, int b);

Invocación a una función en C identificador(lista-opcional-de-parametros-actuales) Ejemplos: void fillChar(int, char); /* prototipo*/ int flip(void); /* prototipo */ char lowerToUpper(char); /* prototipo */ ... char c = ‘a’; int i = flip(); flip(); /* el valor retornado se ignora */ printf(“%c”, lowerToUpper(c)); fillChar(10, ‘*’);

Alcance o ámbito de los identificadores El alcance o ámbito de un identificador determina en qué parte del programa el identificador está definido y puede usarse. Reglas de ámbito o alcance en C: Alcance de archivo; Alcance de bloque; Alcance de prototipo; Alcance de función.

Alcance de Archivo Tienen alcance de archivo los identificadores declarados por fuera de una función. Son accesibles en el archivo desde el punto de su declaración y hasta el final del archivo. Conocidos como globales Variables globales; Definiciones de funciones y de prototipos de funciones.

#include <stdio.h> int global = 3; /* variable global */ void cambiaGlobal() { global = 5; } int main() printf(“%d\n”, global); cambiaGlobal(); return 0;

Alcance de Bloque Tienen alcance de bloque los identificadores declarados dentro de un bloque o de una lista de parámetros formales. Son accesibles sólo desde el punto de su declaración o definición y hasta el final del bloque que los contiene. Conocidos como identificadores locales Variables locales. En C no hay funciones anidadas, en consecuencia no hay funciones locales.

#include <stdio.h> int cubo(int); /* prototipo */ int variable_global = 1; void main (void) { int c = cubo(5); variable_global = 3; printf(“5 al cubo=%d, 3 al cubo=%d \n”, c, cubo(3)); resultado = 9; /* error !!! */ } int cubo(int n) int resultado = n * n * n; variable_global = 2; c = 9; /* error !!!*/ return resultado;

#include <stdio.h> int main() { int j,i; printf("ingrese el valor de i:"); scanf("%d",&i); printf("ingrese el valor de j:"); scanf("%d",&j); if (j) { int j = 0; printf("i = %d, j = %d\n", i, j); } else { int i = 0; return 0;

Alcance de Prototipo Tienen alcance de prototipo los identificadores usados dentro de una lista de parámetros en la declaración de un prototipo. Su ámbito es sólo la lista de parámetros, no interfiriendo con las variables de otros puntos del programa.

#include <stdio.h> /* variable x con alcance de archivo */ int x = 4; /* variable x con alcance de prototipo*/ long mifunc(int x, long y); int main(void){ /* variable x con alcance de bloque */ int x = 5; printf("%d\n",x); }

Alcance de Función Los únicos identificadores con este alcance son las etiquetas (un identificador seguido por :). Su declaración es implícita (en el lugar que se las usa por primera vez). Son accesibles o conocidas en toda la función en donde aparecen. Usadas en conjunción con la sentencia goto. Nosotros no usaremos goto ni etiquetas.

Tiempo de Vida o Permanencia de los Identificadores Período durante el cual un identificador existe en la memoria de la computadora. No necesariamente coincide con su alcance. Identificadores globales Estática (desde que se inicia la ejecución del programa y hasta que finaliza). Identificadores locales Automática (desde que se inicia la ejecución del bloque y hasta que termina). Se puede forzar la permanencia estática usando el modificador static cuando se declara el identificador

#include <stdio.h> int f(void) { static int x = 0; /* local y estática */ x++; return x; } int main(void) { int j; for (j = 0; j < 5; j++) { printf("Valor de f(): %d\n", f()); return 0;

El tipo Puntero

Punteros en C Un puntero es un apuntador a un lugar de la memoria que puede almacenar datos de un determinado tipo. Una variable de tipo puntero contiene una dirección en donde se encuentra almacenado un dato de un determinado tipo. Ejemplos de declaraciones en C: char *p; /* puntero a char */ int *ptr; /* puntero a int */ float *punt; /* puntero a float*/

Referencia directa vs. Referencia indirecta Punteros en C Referencia directa vs. Referencia indirecta cont referencia de forma directa al valor 3 ptr lo referencia de forma indirecta. int cont, *ptr; ptr cont 3

Operaciones con Punteros en C Inicializaciones int i = 10; int *p = NULL; int *p = 0; i 10 5600 p NULL 7200

Operaciones con Punteros en C Operador de Dirección & 10 7200 5600 q 8040 int i = 10; int *p = &i; int *q = p;

Operador de Desreferenciación o de Indirección * Permite acceder al valor apuntado por una variable de tipo puntero. printf(“valor apuntado por p %d\n”, *p); *p = *p * 5; printf(“valor apuntado por q %d\n”, *q); printf(“valor de i %d\n”, i);

Pasaje de Parámetros Los módulos se comunican entre sí por medio de los datos que intercambian a través del uso de parámetros. Parámetros Formales (en la definición). Actuales o reales (en la invocación). Pasajes de parámetros Por dirección o referencia o variable. Por valor o constante.

Pasaje de Parámetros Pasaje por valor Pasaje por referencia Se pasa una copia del dato, pero no el dato mismo. Se pasa la dirección de memoria en la que se encuentran los datos. El módulo puede modificar la copia, pero nunca el dato original. El módulo accede a los datos libremente para leerlos y/o escribirlos. Seguro pero ineficiente cuando hay que pasar datos estructurados (grandes). Inseguro y obliga al programador a ser muy cuidadoso, pero es una forma muy eficiente de pasar estructuras de datos grandes y complejas.

Pasaje de Parámetros en C En C, sólo hay pasaje por valor pero… Se puede simular el pasaje por referencia usando tipos punteros y pasando la dirección del parámetro actual…

Pasaje de Parámetros en C En el siguiente ejemplo, la función intercambia, dadas dos variables enteras, debería intercambiar sus valores…

#include <stdio.h> void intercambia(float x, float y){ float temp; temp = x; x = y; y = temp; } main(){ float a = 1.0; float b = 2.0; printf(“a = %f, b = %f\n”, a, b); intercambia(a, b);

Pasaje de Parámetros en C La función intercambia, ¿hizo lo que se pretendía? ¿Por qué? ¿Cómo resolvemos el problema?

¿Cómo solucionamos este problema? Simulando el Pasaje por Dirección Pasamos la dirección del o los parámetros que queremos que se modifiquen en la función, por lo tanto esos parámetros tendremos que declararlos de tipo puntero ya que lo que pasaremos es una dirección. Dentro de la función podremos modificar o acceder a los valores apuntados usando el operador de desreferenciación *.

#include <stdio.h> void intercambia(float *x, float *y){ float temp; temp = *x; *x = *y; *y = temp; } main(){ float a = 1.0; float b = 2.0; printf(“a = %f, b = %f\n”, a, b); intercambia(&a, &b);

Asignación Dinámica de la Memoria Hasta ahora, hemos visto que en C existen las permanencias o tiempos de vida: Estática Automática Los punteros tienen una permanencia Asignada o dinámica: se asigna o desasigna memoria en tiempo de ejecución

Asignación Dinámica de la Memoria malloc Toma como argumento el número de bytes que se solicitan y retorna un puntero a la memoria asignada, o si no hay suficiente memoria para asignar, retorna NULL. sizeof Recibe como operando un tipo de dato y retorna el tamaño que ocupa en memoria un objeto del tipo de dato al cual se le aplicó el operador. float *pFloat =(float*)malloc(sizeof(float));

Asignación Dinámica de la Memoria free Desasigna la memoria apuntada por el puntero al que se le aplica, la cual es retornada al sistema y en consecuencia la misma podrá ser reasignada en el futuro. float *pFloat = (float*)malloc(sizeof(float)); ... free(pFloat); /*libera memoria */