Función polinomial. Función cuadrática. Forma del vértice de una función cuadrática.
FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es...
-
Upload
alta-amparo -
Category
Documents
-
view
218 -
download
0
Transcript of FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es...
FUNCIONES EN C
SOBRE FUNCIONES
. . .Caja
negra
in_1
in_N
out_1
In_2
Función:• Nombre. (Con el cual es invocada).• Entradas . (Parámetros de la función). • Salida. (Valor de retorno si tiene).
capitan_planeta(agua, tierra, aire, fuego, corazon);
Por sus poderes reunidos yo soy,…EL CAPITAN PLANETA
MAPA DE MEMORIA
float f;
MAPA DE MEMORIA Y APUNTADORES
#include <stdio.h> int main() { int i; int *p; /* a pointer to an integer */ p = &i; *p=5; printf("%d %d\n", i, *p); return 0; }
APUNTADORES Y VECTORESOperador desreferencia (*):1.Declarar una como apuntador:
tipo *nombreApuntador <=direccion>;
2.Desreferenciar el apuntador (acceder a la direccion de memoria (Ya sea para leer o escribir) apuntada por el apuntador).
Leer: variable = *nombreApuntador; // Puede ir dentro de una //expresion el lado derechoEscribir: *nombreApuntador = valor; //Puede ser tambien una //constante o expresion //cualquiera lo que haya al lado //derecho.
Operador referencia (&)Usado para obtener una direccion de memoria:
&nombreVariable
APUNTADORES#include <stdio.h>
void printArray(int *, int);
int main() { int a = 3,b,c; int *p1 = NULL; int *p2 = &a; int *p3 = p2; *p3 = a + 1; p1 = &c; *p1 = 2*(*p1 + *p2) - 3; p3 = &b; b = *p2 - 1; *p1 = p2; *p2 = &c; return 0;}
VECTORES Y APUNTADORES• Para un vector:
El nombre de un vector es la dirección de la posición 0 del vector:
int A[5] = {3,2,5,0,6,10,8,-1};
Según lo anterior: A &A[0]
3 2 5 0 6 10 8 -1
p1 p2
*p1 *p2
p1 = A; p2 = &A[3];
ARITMETICA DE APUNTADORES• Como un apuntador solo almacena direcciones de memoria las únicas
operaciones validas son la + y -.• También son validas operaciones los operadores unitarios ++ y --.• Para apuntadores cambia un poco el significado de estas operaciones
respecto al caso de las variables.
Variables
Suponga una variable entera a que inicialmente tiene el valor de 5: ¿Cuál sera el resultado despues de la operaciónes a++ y a-=3?
int a = 5;a++;a-=3;
Apuntadores
Suponga que se tiene un apuntador cuyo valor inicial es la direccion 1780 (asignada a una variable cualquiera x): ¿Cuál sera el resultado despues de la operaciónes p++ y p-=3?
int *p = x;p++;p-=3;
ARITMETICA DE APUNTADORES• El incremento o decremento en apuntadores dependerá del tipo de dato
que esta siendo apuntado
Suponga que se tiene un apuntador a un entero cuyo valor inicial es la direccion 100 (asignada a una variable cualquiera x): ¿Cuál sera el resultado despues de la operaciónes p++ y p-=3?
int *p = x;p++;p-=3;
tipo Tamaño en bytes
char 1
short 2
int 2 o 4
long 4
long long 8
float 4
double 8
Realice lo mismo que en el caso anterior pero asumiendo que ahora se apunta a un dato tipo long long:long long *p = x;p++;p-=3;
ALGO SOBRE LA PRESEDENCIA Y LOS APUNTADORES
Prioridad Asociatividad() De adentro hacia afuera
++,-- D I
*,/ I D
+,- I D
Algunas expresiones:•(*p)++, (*p)--, ++(*p),--(*p) •*p++,*p--•*++p;*--p
Ojo con los vectores:•p+=i;•*(p+i)=2;
ARREGLOS Y APUNTADORES
Usando subindicesint i;int b[5];for(i=0;i<5;i++){ b[i]=i+1;}
Usando apuntadoresint i;int b[5];int *p = b; //int *p = &b[0];for(i=0;i<5;i++){ *p++ = i + 1;}
Usando apuntadoresint i;int b[5];int *p = b; //int *p = &b[0];for(i=0;i<5;i++){ *(p+ i) = i+ 1;}
PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR REFERENCIA Y POR VALOR
Declaración
void intercambiar1(int,int); void intercambiar2(int *,int *);
Definición
void intercambiar1(int x, int y){ int aux; aux = x; x = y; y = aux;}
void intercambiar2(int *x, int *y){ int aux; aux = *x; *x = *y; *y = aux;}
Invocación
int a = 3,b = 5;intercambiar1(a,b);
int a = 3,b = 5;intercambiar2(&a,&b);
PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR VALOR
#include <stdio.h>
void swap(int i, int j) { int t; t=i; i=j; j=t; }
void main() { int a,b; a=5; b=10; printf("%d %d\n", a, b); swap(a,b); printf("%d %d\n", a, b);}
PRINCIPALES DIFERENCIAS ENTRE EL PASO DE PARAMETROS POR REFERENCIA
#include <stdio.h>
void swap(int *i, int *j) { int t; t = *i; *i = *j; *j = t; }
void main() { int a,b; a=5; b=10; printf("%d %d\n",a,b); swap(&a,&b); printf("%d %d\n",a,b); }
TODO JUNTO – SOLO CODIGO A LO LOCOHacer una función muestre los elementos de un array
Usando subindices
void copyArraySub(int A[],int l){ int i; for(i = 0;i<l;i++) { printf(«%d »,A[i]); } printf(«\n»);}
Usando Apuntadores
void copyArrayPtr(int *p,int l){ int i; for(i = 0;i<l;i++) { printf(«%d »,*p); p1++; } printf(«\n»);}
TODO JUNTO – SOLO CODIGO A LO LOCOHacer una función que copie un arreglo a otro
Usando subindices
void copyArraySub(int A[],int B[],int l){ int i; for(i = 0;i<l;i++) { A[i] = B[i]; }}
Usando Apuntadores
void copyArrayPtr(int *p1,int *p2,int l){ int i; for(i = 0;i<l;i++) { *p1 = *p2; p1++; p2++; }}