Vous êtes sur la page 1sur 23

3

3.1 3.2 3.3 3.4 3.5 3.6 3.7


lunes 17 de octubre de 2011

Subprogramas

Diseo estructurado y modular Declaracin de subprogramas y su interfaz Precondiciones y postcondiciones de algoritmos mbitos de visibilidad Tipos de parmetro (in, out e in-out) en C/C++ Punteros Ejemplos y ejercicios de subprogramacin

Qu son

Trozos de cdigo con un nombre que pueden ser llamados/invocados/ejecutados desde otras partes del programa

lunes 17 de octubre de 2011

Cmo se construyen

tipo

nombre

(parmetros)

{cdigo}

tipo int void

nombre

(parmetros)

{el cdigo}

factorial (int n) {int f=1; for} imprimearr (TVector a) {for}

lunes 17 de octubre de 2011

procedimiento

en C

void nombre (parmetros)


{
} programa;

tipo nombre (parmetros)


funcin {

}
lunes 17 de octubre de 2011

programa; return algotipo;

diferencia entre procedimiento y funcin

Los procedimientos:
no devuelven nada

escribe(n)

main() { escribe(2); }

lunes 17 de octubre de 2011

diferencia entre procedimiento y funcin

Los procedimientos:
no devuelven nada

escribe(n)

Las funciones:
devuelven un valor
x

main() { escribe(2); }

factorial(x)

main() { f = factorial(3); cout << factorial(2+2); }

lunes 17 de octubre de 2011

res

Dnde se escriben

Se escriben junto al programa principal (no dentro)


#include <iostream> using namespace std; void pintastericos() { for ( int i = 0; i < 80; ++i ) cout << '*'; } int main() { pintastericos(); return 0; }
lunes 17 de octubre de 2011

Alternativa con prototipos


#include <iostream> using namespace std; // prototipos void saltalinea(); int main() { saltalinea(); return 0; } void saltalinea() { cout << endl; }

lunes 17 de octubre de 2011

Parmetros

Se puede enviar informacin a los subprogramas: parmetros

escribe(n)

lunes 17 de octubre de 2011

Parmetros de entrada, por copia o valor


void saltalineas(int n); void pintast(int n); int main() { pintast(80); saltalineas(2); int alt=12; pintast(80+alt); return 0; } void saltalineas(int n) { for ( int i = 0; i < n; ++i ) cout << endl; } void pintast(int n) { for ( int i = 0; i < n; ++i ) cout << '*'; }

lunes 17 de octubre de 2011

funciones

factorial(x)

Las funciones devuelven un nico valor de


un slo tipo.
res

lunes 17 de octubre de 2011

funciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
lunes 17 de octubre de 2011

// factorial.cpp // juanfc 2009-11-07 // funcin para calcular el factorial de un nmero #include <iostream> using namespace std; int fact(int n) { int f = 1; for ( int i = i; i <= n; ++i ) f *= i; return f; } int main() { int h = 10; cout << "El fact(" << h << ") es: " << fact(h) << endl; cout << fact(20) + fact(30) << endl; return 0; }

factorial(x)

res

pre y postcondiciones

Cuando se crea un subprograma deben conocerse


int fact(int n) { // pre: n 0 int f = 1; for ( int i = 2; i <= n; ++i ) f *= i; return f; // post: f = 1*2**n = f! }
lunes 17 de octubre de 2011

las conciones en que se ejecuta (precondiciones) y las que se garantizan tras su ejecucin (postcondiciones)

Ejemplo
x

factorial(x)

lunes 17 de octubre de 2011

res

Hacer una funcin que evale

empleando una serie de hasta trminos. La funcin recibir los dos parmetros y y devolver el valor calculado. Recordar que:

funcin funcin funcin

parmetros por referencia


A veces se necesita que la funcin devuelva ms de un valor No se podra con un return Slo puede haber un valor en un return
ecu2gra do(oat a,

lunes 17 de octubre de 2011

oat b,

oat c)

parmetros por referencia


Mediante las funciones se puede enviar info a la funcin y recoger de ella un solo resultado, as que es necesario desarrollar una tcnica distinta la solucin est en hacer que los parmetros sean no slo vas de envo de datos sino tambin de recogida de resultados de la funcin

lunes 17 de octubre de 2011

parmetros por referencia


tendramos que ampliar, pues, la forma en que se reciben los parmetros ecu2grado( a, b, c, x1, x2)
void ecu2grado(oat a, oat b, oat c, oat& x1, oat& x2)

lunes 17 de octubre de 2011

ejercicio

hacer un procedimiento que intercambie el contenido de sus dos parmetros enteros

lunes 17 de octubre de 2011

parmetros en C/C++
void ecu2grado(const oat a, const oat b, const oat c, oat& x1, oat& x2)

en el ejemplo de la ecu2grado debemos o bien recibir otro parmetro o bien devolver un valor que indique qu tipo de solucin hemos encontrado

lunes 17 de octubre de 2011

Parmetros por defecto

En C++ es posible poner valores por defecto a los


parmetros formales. Siempre los ltimos parmetros void pintaLin(int n=1) { }

lunes 17 de octubre de 2011

Sobrecarga

En C++ es posible denir dos veces la misma

funcin pero diriendo slo en algn detalle de la signatura. Esto se llama sobrecarga. El compilador decide a cul llamar segn se use con unos parmetros u otros. no siempre puede

lunes 17 de octubre de 2011

Punteros

hay variables especiales capaces de guardar la


direccin en memoria de dnde estn otras variables: punteros
int *pint; int n = 10; pint = &n; *pint = 33; cout << n;
lunes 17 de octubre de 2011

// ???

punteros y arrays

En realidad, aunque no se indica as, los nombres de


los arrays en C son punteros a los datos

int a[N];
a[0] a[1] a[2] a[3] a[4] a[N-1]

a es un puntero al bloque, guarda la direccin de comienzo del array


lunes 17 de octubre de 2011

Vous aimerez peut-être aussi