Clase 11- fundamentos de la programacion
Upcoming SlideShare
Loading in...5
×
 

Clase 11- fundamentos de la programacion

on

  • 1,442 views

clases u

clases u

Statistics

Views

Total Views
1,442
Views on SlideShare
1,442
Embed Views
0

Actions

Likes
1
Downloads
29
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Clase 11- fundamentos de la programacion Clase 11- fundamentos de la programacion Presentation Transcript

    • Evaluación escrita Indique como se realiza la declaración y la llamada a una función Indique como se declara y asigna valores a un array Describa las ventajas de usar estructuras y como se declaran
    • Ejercicios Elabore un programa que lea una cadena de 50 caracteres y convierta las vocales en mayúsculas Elabore un programa que obtenga el determinante de una matriz 3x3 ingresada por el usuario
    • PUNTEROS((APUNTADORES) )Sugerencias y herramientas para crear para crear y presentar diapositivas enformato panorámico
    • Contenido Direcciones en memoria Aritmética de punteros p Concepto de puntero Punteros constantes frente (apuntador) a punteros a constantes Puntero null y void P t ll id Punteros como argumento Punteros a punteros de funciones Punteros a Arrays Punteros a funciones Arrays de punteros Punteros a estructuras Punteros a cadenas Ejercicios j
    • Dirección de memoria Cuando una variable se declara, se asocian tres , atributos fundamentales con la misma: su nombre, su tipo y su dirección de memoria Int n; Asocia al nombre n, el tipo int y la dirección de alguna p g posición de memoria donde se almacena el valor de n
    • Cont…Cont Al valor de la variable se accede por medio de su p nombre. Por ejemplo, se puede imprimir el valor de n con la sentencia; Printf (“%d”,n); A la dirección de la variable se accede por medio del operador de dirección &. Por ejemplo, se puede imprimir la dirección de n con la sentencia: Printf (“%p”,&n); P i tf (“% ” & )
    • Ejemplo 10 1 10.1 Obtener el valor y la dirección de una variable #include # l d <stdio.h> d h #include <stdlib.h> int main () { int n=75; printf("n=%dn",n); printf( &n=%pn &n); printf("&n=%pn",&n); system("pause"); return 0; }
    • Concepto de puntero (apuntador) Un puntero es una variable que contiene una dirección de memoria El tipo de variable que almacena una dirección se denomina puntero Los punteros se rigen por estas reglas básicas: Un puntero es una variable como cualquier otra; Una variable puntero contiene una dirección que apunta a otra posición en memoria En esa posición se almacenan los datos a los que apunta el puntero Un puntero apunta a una variable de memoria
    • Ejemplo 10 2 10.2 #include <stdio.h> #include <stdlib.h> #i l d < dlib h> int main () { int 75 i n=75; int*p=&n; printf("n=%d, &n=%p, p=%pn",n,&n,p); printf("&p=%pn",&p); i tf("& % " & ) system("PAUSE"); return 0; }
    • Declaración de punteros Al igual que cualquier variable, las variables punteros g q q , p han de ser declaradas antes de utilizarlas. La declaración de una variable puntero debe indicar al compilador el tipo de dato al que apunta el puntero; para ello se hace preceder a su nombre con un asterisco (*) <tipo de dato apuntado>*<identificador de puntero> Float*f; Fl t*f
    • Inicialización de punteros La inicialización de un puntero proporciona a ese puntero la dirección del dato correspondiente. Para asignar una dirección de memoria a un puntero se utiliza el operador de referencia &. &valor Int i; Int *p; P=&i; /*asigna la dirección de i a p*/ *p=50; /*asigna un valor a la dirección de memoria / p 50; / asigna memoria*/
    • Indireccion de punteros #include <stdio.h> El uso de un puntero #include <stdlib h> <stdlib.h> char c; para obtener el valor int main() al que apunta es decir, apunta, decir { char *pc; su dato apuntado se pc=&c; for(c=A;c<=Z;c++) denomina indireccionar printf("%c",*pc); printf("n"); el puntero system("pause"); return 0; }
    • Punteros null y void Un puntero nulo no apunta a ninguna parte, no direcciona ningún dato valido en memoria lid i #define NULL 0 Otra forma de declarar un puntero nulo es asignar un valor de 0 Int *ptr=0; Los punteros nulos se utilizan con frecuencia en programas con arrays de punteros En C se puede declarar un puntero de modo que apunte a cualquier tipo de dato, es decir, no se asigna a un tipo de dato especifico. El método es declarar el puntero como puntero void* denominado puntero genérico Void *prt
    • Punteros a punteros Un puntero puede apuntar a otra variable puntero. Este concepto se utiliza con mucha frecuencia en programas complejos de C. para declarar un puntero a un puntero p j p p p se hace preceder a la variable con dos asteriscos (**) Int valor_e=100;; Int *ptr1=&valor_e; Int **ptr5=&ptr1; ptr5 &ptr1;
    • Punteros y Arrays Se pueden direccionar arrays como si fueran p y punteros y punteros como si fueran arrays. La posibilidad de almacenar y acceder a punteros y arrays, implica que se pueden almacenar cadenas de datos en elementos de arrays. Sin punteros eso no es posible, ya que no existe el tipo de dato cadena en C. no existen variables de cadena, únicamente constantes d cadena ú i de d
    • Nombres de arrays como punteros Un nombre de un array es simplemente un puntero. Supongamos que se tiene la siguiente declaración de un array: In lista[5]={10 20 30 40 50} lista[5]={10,20,30,40,50} Si se manda a visualizar lista[0] se vera 10 y si se manda a visualizar *lista. Como un nombre de un array es un puntero, también se vera 10 0 Dado que un nombre de un array contiene la dirección del primer elemento del array se debe indireccionar el puntero array, para obtener el valor del elemento
    • Arrays de punteros Si se necesita reservar muchos punteros a muchos p valores diferentes, se puede declara un array de punteros. Un array de punteros es un array que contiene como elementos punteros, cada uno de los cuales apunta a un tipo de dato especifico. La linea siguiente reserva un array de diez variables puntero a enteros: Int *ptr[10]; ptr[10];
    • Inicialización de un array de punteros a cadenas La inicialización de un array de punteros a cadenas se puede realizar con una declaración similar a esta; Char *nombres_meses[12]={“enero”,”febrero”,”marzo”,” * b [12]={“ ” ”f b ”” ”” abril”,”mayo”,”junio”,”julio”,”agosto”,”septiembre”,” octubre”,”noviembre”,”diciembre”}; b ” ” i b ” ”di i b ”}
    • Punteros de cadenas Los punteros se pueden utilizar en lugar de índices p p g de arrays. Considérese la siguiente declaración de un array de caracteres que contiene las letras del alfabeto; Char alfabeto[27]=“ABCDE….z”; [ ] ; P=&alfabeto[0] Printf( %cn p); Printf(“%cn”,*p);
    • Aritmética de punteros Al contrario que un nombre de un array, que es un puntero constante y no se puede modificar, un puntero es una variable que se puede modificar. d difi t i bl d difi Como consecuencia, se pueden realizar ciertas operaciones aritméticas sobre punteros A un puntero se le puede sumar o restar un entero n; esto hace que apunte n posiciones adelante, o atrás del actual. Las operaciones no validas son; suma, multiplicación o división entre dos punteros Float m[20]; Float *r; r=m; r++
    • Ejemplo conversión de caracteres 10 8 10.8 Convierte caracteres de minúsculas a mayúsculas
    • Punteros constantes frente a punteros a constantes Un puntero constante es un puntero que no se puede cambiar, pero que los datos apuntados por el puntero pueden ser cambiados Por otra parte un cambiados. parte, puntero a una constante se puede modificar para apuntar a una constante diferente pero los datos diferente, apuntados por el puntero no se pueden cambiar
    • Punteros constantes Para crear un puntero constante diferente de un array, se debe utilizar el siguiente formato: <Tipo de dato>*const<nombre puntero>=<dirección de variable>; Int x; Int y; Int *const p1=&x; *p1=y, es legal ya que se cambia el contenido de memoria p1=&y , no es legal ya que se cambia el valor del puntero
    • Punteros a constantes El formato para definir un puntero a una constante es; p p ; Const<tipo de dato elemento>*<nombre puntero>=<dirección de constante>; Const int x=25; Const int y=50; Const int *p1=&x; P1=&y, p1 apunta a otra constante *p1=15, * 1 15 crea un error de compilación d il ió
    • Punteros constantes a constantes El ultimo caso a considerar es crear punteros constantes a constantes utilizando el formato siguiente; Const <tipo de dato elemento> *const <nombre puntero>=<direccion de constante>; Const int x=25; Const int *const p1=&x; p ; P1 es un entero constante que apunta a una constante entera x, cualquier intento de modificar p1 o bien *p1 producirá un error
    • Punteros como argumentos de funciones Cuando se pasa una variable a una función (paso por valor) no se puede cambiar el valor de esa variable. Sin embargo, si se pasa un puntero a una variable a una función (paso p por dirección) se puede cambiar el valor de la variable ) p Void func1 (int *s, int t) int i, j; { i=5; *s=6; * 6 j=7; j 7 t=25; func1 (&i, j); }
    • Punteros a funciones Es posible crear punteros que apunten a funciones. En lugar p p q p g de direccionar datos, los punteros de funciones apuntan a código ejecutable. Al igual que los datos, las funciones se almacenan en memoria y tienen direcciones iniciales En C se iniciales. pueden asignar las direcciones iniciales de funciones a p punteros. Tales funciones se pueden llamar en un modo p indirecto, es decir mediante un puntero cuyo valor es igual a la dirección inicial de la función en cuestión Tipo_de_retorno (* Ti d (*punteroFuncion) ( li d parametros>); F i ) (<lista de )
    • Cont…Cont Un puntero a una función es simplemente un puntero cuyo p p p y valor es la dirección del nombre de la función. Dado que el nombre es, en si mismo, un puntero; un puntero a una función es un puntero a un puntero constante
    • Inicialización de un puntero a una función La sintaxis general para inicializar un puntero a una función es: punteroFuncion = una función double calculo (int*v unsigned n) /*prototipo de función*/ (int*v; n); double (*qf) (int*, unsigned); /*puntero a función*/ Int r[5]={3,5,6,7,1} { } double x; qf=calculo; /*asigna dirección de la función*/ x=qf(r,5); /*llamada a la función con el p ntero a función*/ =qf(r 5) f nción puntero f nción*/
    • Ejemplo 10 6 10.6 Se desea ordenar un array de numero reales, la ordenación se va a realizar con la función qsort()
    • Arrays de punteros de funciones Ciertas aplicaciones requieren disponer de numerosas p q p funciones, basadas en el cumplimiento de ciertas condiciones. Un método para implementar tal aplicación es utilizar una sentencia switch con muchos selectores casecase. Otra solución es utilizar un array de punteros de función. Se p puede seleccionar una función de la lista y llamarla La sintaxis general de un array de punteros de función es: tipoRetorno (*PunteroFunc[LongArray])(<lista de parametros>)
    • Punteros a estructuras Un puntero también puede apuntar a una estructura. Se p p p puede declarar un puntero a una estructura tal como se declara un puntero a cualquier otro objeto y se declara un puntero estructura tal como se declara cualquier otra variable estructura: especificando un puntero en lugar del nombre de la variable estructura Strcuct persona *p; /*se crea un puntero de estructura*/ p=&empleado;
    • Ejemplo 10 9 10.9 En este ejemplo se declara el tipo estructura t_persona, que se asocia con el tipo persona para facilidad de escritura Un array de esta estructura escritura. se inicializa con campos al azar y se muestran por pantalla
    • Ejercicios Escribir un programa en que se lean 20 líneas de texto, cada línea con un máximo d 80 caracteres. M á i de Mostrar por pantalla el numero d ll l de vocales que tiene cada línea Se requiere evaluar las funciones f(x), g(x) y z(x) para todos los valores de x en el intervalo 0<=x<=3.5 con incrementos de 0.2. escribir un programa que evalué dichas funciones, utilizar un array de punteros a función. Las funciones son las siguientes; F(x)=3*ex-2x G(x)=-x*Sin(x)+1.5 ( ) ( ) Z(x)=x3-2x+1
    • Patrón de prueba de pantalla panorámica (16:9) Prueba de la relación de aspecto (Debe parecer circular) 4x316x9