ESTRUCTURAS DE CONTROL: BUCLES EN C++

65
FUNCIONES Sugerencias y herramientas para crear para crear y presentar diapositivas en formato panorámico

Transcript of ESTRUCTURAS DE CONTROL: BUCLES EN C++

Page 1: ESTRUCTURAS DE CONTROL: BUCLES EN C++

FUNCIONES Sugerencias y herramientas para crear para crear y presentar diapositivas en formato panorámico

Page 2: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Contenido Contenido Concepto de función Funciones numéricasEstructura de una funciónPrototipos de funcionesParámetros de una función

Funciones de fecha y horaFunciones de utilidad

b l d d d fParámetros de una funciónFunciones en línea: macrosÁmbito (alcance)Cl d l i

Visibilidad de una funciónCompilación separadaVariable registro (register)Clases de almacenamiento

Concepto y uso de funciones de biblioteca

Variable registro (register)RecursividadResumen

Funciones de carácter Ejercicios

Page 3: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Introducción Introducción Una función es un mini programa dentro de un programa.p g p gLas funciones contienen varias sentencias bajo un solonombre, que un programa puede utilizar una o mas vecespara ejecutar dichas sentenciaspara ejecutar dichas sentenciasSi se agrupan funciones en bibliotecas otros programaspueden utilizar las funciones, por esta razón se puedepueden utilizar las funciones, por esta razón se puedeahorrar tiempo de desarrollo. Y dado que las bibliotecascontienen rutinas presumiblemente comprobadas, se

fincrementa la fiabilidad del programa completo

Page 4: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Concepto de función Concepto de función C fue diseñado como un lenguaje de programaciónestructurado, también llamado programación modular.El programa se divide en muchos módulos (rutinaspequeñas denominadas funciones) que aíslan mejor lospequeñas denominadas funciones), que aíslan mejor losproblemas y producen programas que son mucho masfácil de mantenerEl medio para escribir un programa es escribirfunciones independientes para cada tarea que haga elprogramaprograma

Page 5: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Estructura de una funciónEstructura de una funciónUna función es sencillamente, un conjunto de sentencias quej qse pueden llamar desde cualquier parte de un programa.Las funciones en C no se pueden anidar. Esto significa que

f funa función no se puede declarar dentro de otra función. Larazón para esto es permitir un acceso muy eficiente a losdatosdatosEn C todas las funciones son externas o globales, es decirpueden ser llamadas desde cualquier punto del programap q p p g

Page 6: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContCont

Page 7: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo int cuadrado(int n){

float suma (int num_elementos){int cuadrado=0, q=0;while (q <= 1000) /*el cuadrado ha de ser menor de 1000 */

{

int indice;

float total = 0.0;{q = n*n;printf("E1 cuadrado de: %d es %d \n",n,q);++

printf("\n \t Introduce %d números reales\n",num_elementos);

for (indice = 0; indice < num_elementos; i di ++)n++ ;

}return 0;}

indice++)

{

float x;

" "}

scanf("%f",&x);

total+=x;

}

Page 8: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContCont

Nombre de una función; un nombre de una funciónNombre de una función; un nombre de una funcióncomienza con una letra o subrayado(_) y puedecontener tantas letras números o subrayados comocontener tantas letras, números o subrayados comodesee

Page 9: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContContTipo de dato de retorno.- si la función no devuelve unvalor int, se debe especificar el tipo de dato devueltopor la función; cuando devuelve un valor int, se puedeomitir ya que C asume que todas las funciones sonomitir ya que C asume que todas las funciones sonenteras. El tipo debe ser uno de los tipos simples de C,tales como int, char o float, o un tipo struct

Page 10: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContCont

Muchas funciones no devuelven resultados. La razónMuchas funciones no devuelven resultados. La razónes que se utilizan como subrutinas para realizar unatarea concreta Una función que no devuelvetarea concreta. Una función que no devuelveresultados, a veces se denomina procedimiento.Para indicar al compilador que una función noPara indicar al compilador que una función nodevuelve resultados, se utiliza el tipo de retornovoidvoid

Page 11: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContContResultado de una función.- una función puede devolver un único

l El l d i i ivalor. El resultado se muestra con una sentencia return cuya sintaxises;

Return(expresion)Return;

El valor devuelto (expresión) puede ser cualquier tipo de datoexcepto una función o un arrayp ySi el tipo de retorno es void, la sentencia return se puede escribircomo return; sin ninguna expresión de retorno, o bien de modoalternativo se puede omitir la sentencia returnalternativo se puede omitir la sentencia return

Page 12: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContContLlamada a una función; lasfunciones, para poder serejecutadas, han de serllamadas o invocadasllamadas o invocadas.Cualquier expresión puedecontener una llamada o unaf ió di ij l lfunción que redirija el controldel programa a la funciónnombrada

Page 13: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h> return ;#include <stdlib.h>void func1 (void){

;}int main(){

puts ("Segunda función") ;return;}void func2 (void)

{puts("Primera función llamada main()");func1(); /* Segunda función llamada */func2(); /* Tercera función llamada */void func2 (void)

{puts ("Tercera función") ;return ;

(); / /puts ("main se termina") ;system("PAUSE");return 0; /* Devuelve control al sistema */;

}

; / /}

Page 14: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h> int main()

#include <stdlib.h>int max(int x, int y){

{int m, n;do {scanf ("%d %d" &m &n) {

if (x < y)return y;

scanf ( %d %d , &m, &n) ;printf("Maximo de %d,%d es %d\n",m,n,max(m, n)); /*llamada a max*/}y;

elsereturn x;}

while (m != 0) ;system("PAUSE");return 0;}} }

Page 15: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h> int main()

#include <stdlib.h>double media(double

{double num1, num2, med;printf("introducir dos números reales:");double media(double

x1, double x2){

scanf ("%lf %lf",&num1,&num2) ;med = media(num1, num2);printf ("El valor medio es %.4lf \n", med) ;{

return(x1 + x2)/2;}

system("PAUSE");return 0;}}

Page 16: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Prototipos de funciones Prototipos de funciones

La declaración de una función se denominaLa declaración de una función se denominaprototipo. Los prototipos de una función contienen lacabecera de la función con la diferencia de que loscabecera de la función, con la diferencia de que losprototipos terminan con un punto y coma.L t ti d l ll dLos prototipos de las llamadas en un programa seincluyen en la cabecera del programa para que así

id d lsean reconocidas en todo el programa

Page 17: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Sintaxis Sintaxis

Cuando una entidad se declara, se proporciona un nombre y seCua do u a e dad se dec a a, se p opo c o a u o b e y selistan sus características. Una definición indica que existe un lugar enun programa donde existe realmente la entidad definida, mientrasque una declaración es solo una indicación de que algo existe enalguna posición

Page 18: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h>

#include <stdlib.h> /* prototipos válidos */ /* devuelve número positivo */

float area_rectangulo(float b, float a);/* declaración */

float entrada(); /* prototipo o declaración */

int main ()

{

float entrada ()

{

float m;

do {

f ("%f" & ) float b, h;

printf ("\n Base del rectangulo: " ) ;

b = entrada() ;

printf ("\n Altura del rectangulo: " ) ;

h = entrada() ;

scanf ("%f", &m) ;

} while (m<=0.0) ;

return m;

}

/* calcula el area de un rectángulo */h = entrada() ;

printf("\n Area del rectangulo: %.2f\n",area_rectangulo(b,h));

system("PAUSE");

return 0;

}

/ g /

float area_rectangulo(float b, float a)

{

return (b*a);

}}

Page 19: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Declaración de una función Declaración de una función Antes de que una función pueda ser invocada, debe serdeclaradaUna declaración de una función contiene solo la

b d l f ió (ll d t bié t ti )cabecera de la función (llamado también prototipo)Tipo resultado nombre (tipo1 param1, tipo2 param2,…);

Los nombres de los parámetros se pueden omitir Los nombres de los parámetros se pueden omitir Char* copiar (char*,int);Char* copiar (char* buffer, int n);p ( , );

Page 20: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Prototipos con un numero no especificado de parámetros de parámetros

Un formato especial de prototipo es aquel que tiene unp p p q qnumero no especificado de argumentos, que serepresenta por puntos suspensivos (…)

Int muestras (int a,….);Int printf (const char *formato,…)

Para implementar una función con lista variable deparámetros es necesario utilizar macros que estánd fi id l hi d b < td h>definidas en el archivo de cabecera <stdarg.h>

Page 21: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h>

#include <stdlib.h> double mx,actual;

#include <stdarg.h>

void maximo(int n, ... ) ;

int main (void)

{

puts("\t\tPRIMERA BUSQUEDA DEL MAXIMO\n");

va_list puntero;

int i;

va_start(puntero,n);

mx = actual = va_arg(puntero,double);

printf("\t\tArgumento actual: %.2lf\n",actual);

maximo(6,3.0,4.0,-12.5,1.2,4.5,6.4);

puts ("\n\t\tNUEVA BUSQUEDA DEL MAXIMO\n") ;

maximo(4,5.4,17.8,5.9,-17.99);

system("PAUSE");

return 0;

for (i=2; i<=n; i++)

{

actual = va_arg(puntero,double);

printf("\t\tArgumento actual: %.2lf\n",actual);

if (actual > mx)

}

void maximo(int n, ... )

{

printf("\t\tMáximo de la lista de %d números es %.2lf\n",n,mx);

va_end(puntero);

{

mx = actual;

}

}

printf("\t\tMáximo de la lista de %d números es %.2lf\n",n,mx);

} va_end(puntero);

}

Page 22: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Parámetros de una función Parámetros de una función C siempre utiliza el método de parámetros por valor parap p p ppasar variables a funciones. Para que una función devuelvaun valor a través de un argumento hay que pasar ladirección de la variable y que el argumentodirección de la variable y que el argumentocorrespondiente de la función sea un puntero, es la formade conseguir en C un paso de parámetro por referenciag p p pEl método por defecto de pasar parámetros es por valor, amenos que se pasen arrays. Los arrays se pasan siemprepor dirección

Page 23: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Paso de parámetrosPaso de parámetrosPor valor

Paso por valor (también llamado paso por copia significa quecuando C compila la función y el código que llama a la función,la función recibe una copia de los valores de los parámetrosla función recibe una copia de los valores de los parámetros

Por referenciaCuando una función debe modificar el valor del parámetroCuando una función debe modificar el valor del parámetropasado y devolver este valor modificando a la funciónllamadora, se ha de utilizar el método de paso de parámetropor referencia o direcciónpor referencia o dirección

Page 24: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo /*Muestra el paso de parámetros por valorSe p ede cambiar la ariable del parámetro en

DemoLocal(n);Se puede cambiar la variable del parámetro en la funciónpero su modificación no puede salir al exterior*/#include <stdio.h>

printf("Despues de llamada a DemoLocal, n = %d\n",n);

system("PAUSE");

return 0;

}#include <stdlib.h>void DemoLocal(int valor);int main (){

}

void DemoLocal(int valor)

{

printf ( "Dentro de DemoLocal, valor = %d\n" , valor) ;{int n = 10;printf("Antes de llamar a DemoLocal, n = %d\n",n);

valor = 999;

printf ("Dentro de DemoLocal, valor = %d\n" , valor) ;

}

Page 25: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Diferencias entre paso de variables por valor y por referenciavalor y por referencia

Las reglas que se han de seguir cuando se transmiten variable porl f i l i ivalor y por referencia son las siguientes;Los parámetros valor reciben copias de los valores de los argumentosque se les pasanLa asignación a parámetros valor de una función nunca cambian el valordel argumento original pasado a los parámetrosLos parámetros para el paso por referencia (declarados con *,

) ib l di ió d l d lpunteros) reciben la dirección de los argumentos pasados; a estos lesdebe de preceder el operador &, excepto los arrays;En una función, las asignaciones a parámetros referencia (punteros)cambia los valores de los argumentos originalescambia los valores de los argumentos originales

Page 26: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Parámetro const de una función Parámetro const de una función

Con el objetivo de añadir seguridad adicional a lasCon el objetivo de añadir seguridad adicional a lasfunciones se puede añadir a una descripción de unparámetro el especificador const que indica alparámetro el especificador const, que indica alcompilador que solo es de lectura en el interior dela función Si se intenta escribir en este parámetrola función. Si se intenta escribir en este parámetrose producirá un mensaje de error de compilación

Page 27: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones en línea Macros con argumentoFunciones en línea, Macros con argumento

Las funciones en línea sirven para aumentar lavelocidad de su programa. Su uso es convenientecuando la función es una expresión, su código espequeño y se utiliza muchas veces en el programapequeño y se utiliza muchas veces en el programaPara una macro con argumentos (funciones en línea), elcompilador inserta realmente el código en el punto enp g pque se llama, esta acción hace que el programa seejecute mas rápidamente, ya que no ah de ejecutar elcódigo asociado con la llamada a la funcióncódigo asociado con la llamada a la función

Page 28: ESTRUCTURAS DE CONTROL: BUCLES EN C++

sintaxissintaxis#define NombreMacro (parámetros sin tipos) expresion_textoRegla; la definición de una macro solo puede ocupar unalínea Se puede prolongar la línea con el carácter \ al finallínea. Se puede prolongar la línea con el carácter \ al finalde la línea

Page 29: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h>

#include <stdlib.h>

#define Pi 3.141592

#define VOLCONO(radio,altura) ((Pi*(radio*radio)*altura)/3.0)

int main()

{

float radio, altura, volumen;

printf ("\nIntroduzca radio del cono: " ) ;

scanf ( "%f", &radio) ;

printf ("Introduzca altura del cono: " ) ;

scanf ("%f" &altura);scanf ( %f ,&altura);

volumen = VOLCONO(radio, altura);

printf("\nEl volumen del cono es: %.2f\n",volumen);

system("PAUSE");

return 0;

}

Page 30: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ámbito (alcance)Ámbito (alcance)El ámbito o alcance de una variable determina cualesson las funciones que reconocen ciertas variables. Si unafunción reconoce una variable, la variable es visible en

fesa función. El ámbito es la zona de un programa en laque es visible una variable. Existen cuatro tipos deámbitos: programa archivo fuente función y bloque Seámbitos: programa, archivo fuente, función y bloque. Sepuede designar una variable para que este asociada auno de estos ámbitos.

Page 31: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ámbito del programaÁmbito del programaLas variables que tienen ámbito de programa pueden ser

f i d l i f ió l l lreferenciadas por cualquier función en el programa completo; talesvariables se llaman variable globales. Para hacer una variableglobal, declárela simplemente al principio de un programa, fuerade cualquier funciónde cualquier funciónInt g,h;Main()(){..}}

Page 32: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ámbito del archivo fuenteÁmbito del archivo fuenteUna variable que se declara fuera de cualquier función y cuyad l ió i l l b d i i á bi ddeclaración contiene la palabra reservada static tiene ámbito dearchivo fuente. La variables con este ámbito se pueden referenciardesde el punto del programa en que están declaradas hasta elfinal del archivo fuentefinal del archivo fuenteStatic int i;Void func (void)( ){…}}

Page 33: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ámbito de una función Ámbito de una función Una variable que tiene ámbito de una función se puede referenciard d l i d l f ió L i bl d l ddesde cualquier parte de la función. Las variables declaradasdentro del cuerpo de la función se dice que son locales a la función.Las variables locales no se pueden utilizar fuera del ámbito de lafunción en que están definidasfunción en que están definidasVoid calculo (void){{Double x,r,t; /*ámbito de la función*/…}}

Page 34: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ámbito de bloque Ámbito de bloque Una variable declarada en un bloque tiene ámbito de bloque y puede serreferenciada en cualquier parte del bloque desde el punto en que esta declaradareferenciada en cualquier parte del bloque, desde el punto en que esta declaradahasta el final del bloque. Las variables locales declaradas dentro de una funcióntienen ámbito de bloque de la función; no son visibles fuera del bloqueVoid func1 (int x)( ){Int i;For(i=x; i<x10; i++)For(i x; i<x10; i++)Printf (“i=%d\n”,i*i);}

Page 35: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Clases de almacenamiento Clases de almacenamiento

Los especificadores de clases (tipos) deLos especificadores de clases (tipos) dealmacenamiento permiten modificar el ámbito deuna variable Los especificadores pueden ser unouna variable. Los especificadores pueden ser unode los siguientes auto, extern, register, static ytypedeftypedef

Page 36: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContCont…Variables automáticas; las variables que se declaran dentrode una función se dice que son automáticas (auto),significando que se les asigna espacio en memoriaautomáticamente a la entrada de la funciónVariables externas; a veces se presenta el problema de queuna función necesita utilizar una variable que otra funcióninicializa Una solución es declarar la variable local con lainicializa. Una solución es declarar la variable local con lapalabra reservada extern. Cuando una variable se declaraexterna, se indica al compilador que el espacio de la

i bl d fi id lvariable esta definida en otro lugar

Page 37: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContCont..Variables de registro; otro tipo de variable C es la variableregistro. Precediendo a la declaración de una variable conla palabra reservada register, se sugiere al compilador quela variable se almacene en uno de los registros hardwaregdel microprocesadorVariables estáticas; las variables estáticas son opuestas ensu significado a las variables automáticas Las variablessu significado a las variables automáticas. Las variablesestáticas no se borran cuando la función termina y enconsecuencia retienen sus valores entre llamadas a unaf iófunción

Page 38: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo aplicación de una variable staticEjemplo, aplicación de una variable static#include <stdio.h>#incl de <stdlib h> return 0;#include <stdlib.h>long int fibonacci ();int main(){

return 0;}long int fibonacci (){{

int n,i;printf ("\nCuantos numeros de fibonacci ? : " ) ;scanf ( "%d" , &n) ;

{static int x = 0;static int y = 1; printf ("\nSecuencia de fibonacci : 0,1\n") ;

for (i=2; i<n; i++)printf ("%ld\n",fibonacci());

("PAUSE")

y = y + x ;x = y - x;return y;

system("PAUSE"); }

Page 39: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Concepto y uso de funciones de biblioteca Concepto y uso de funciones de biblioteca

Todas las versiones de C ofrecen con una bibliotecaTodas las versiones de C ofrecen con una bibliotecaestándar de fusiones que proporcionan soportepara operaciones utilizadas con mas frecuenciapara operaciones utilizadas con mas frecuenciaLas funciones estándar o predefinidas se dividen en

t d l f i t lgrupos; todas las funciones que pertenecen almismo grupo se declaran en el mismo archivo de

bcabecera

Page 40: ESTRUCTURAS DE CONTROL: BUCLES EN C++

ContCont..

Los nombres de los archivos de cabecera estándar Los nombres de los archivos de cabecera estándar utilizados se muestran a continuación

Page 41: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones de carácter Funciones de carácter El archivo de

b <CTYPE H>cabecera <CTYPE.H>define un grupo defunciones/macros demanipulación depcaracteresTodas las funcionesdevuelven un resultadode valor verdadero(distinto de cero) ofalso (cero)

Page 42: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Comprobación alfabética y de dígitosComprobación alfabética y de dígitos

Page 43: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo /*solicita iniciales y comprueba que es alfabetica*/

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

int main ()

{

char inicial;

printf("¿Cuál es su primer carácter inicial?: " ) ;

scanf ( "%c" , &inicial) ;

while (!isalpha(inicial))

{

puts ("Carácter no alfabético ") ;

printf ("¿Cuál es su siguiente inicial?: " ) ;

scanf ("%c",&inicial) ;

}

puts ("!Terminado!");

system("PAUSE");

return 0;

}

Page 44: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones de prueba de caracteres especiales Funciones de prueba de caracteres especiales

Page 45: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones de conversión de caracteres Funciones de conversión de caracteres

Existen funciones para cambiar caracteresExisten funciones para cambiar caracteresmayúsculas a minúsculas o viceversa

Page 46: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo #include <stdio.h>#incl de <stdlib h>

case 'V':#include <stdlib.h>#include <ctype.h>int main(){

puts ("Es un enfermero") ;

break;

case 'H':

puts ("Es una maestra") ;{char resp; /*respuesta del usuario */char c;printf ("¿Es un varón o una hembra (V/H)?: " ) ;

puts ( Es una maestra ) ;

break;

default:

puts("No es ni enfermero ni maestra") ;

scanf ("%c",&resp) ;resp=toupper(resp);switch (resp){

break;

}

system("PAUSE");

return 0;{

}

Page 47: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones numéricas Funciones numéricas Virtualmente cualquier operación aritmética es posibleq p pen un programa C. las funciones matemáticasdisponibles son las siguientes:

MatemáticasTrigonométricasLogarítmicasExponencialesAl i Aleatorias

Page 48: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones matemáticas Funciones matemáticas

Page 49: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones trigonométricasFunciones trigonométricas

Page 50: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones logarítmicas y exponenciales Funciones logarítmicas y exponenciales

Page 51: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones aleatorias Funciones aleatorias

Los números aleatorios son de gran utilidad enLos números aleatorios son de gran utilidad ennumerosas aplicaciones y requieren un tratoespecial en cualquier lenguaje de programaciónespecial en cualquier lenguaje de programación.Las funciones usuales de la biblioteca estándar Cson; rand randon randomize y srand estasson; rand, randon, randomize y srand.estassunciones se encuentran en el archivo stdlib.h

Page 52: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones de fecha y hora Funciones de fecha y hora Las funciones time,clock, _strdate y _strtime devuelven lahora actual como el numero de segundos transcurrido desdela medianoche del 1 de enero de 1970Clock (void); la función clock determina el tiempo de Clock (void); la función clock determina el tiempo de procesadorTime(hora); obtiene la hora actualLocal time (hora); convierte la fecha y hora en una estructura de tipo tmMkti (t) i t l f h f t d l d iMktime(t) convierte la fecha en formato de calendario

Page 53: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo /*En este ejercicio se determind el tiempo del procesddor para printf ( " Factorial de (3 <x< 15) : " ) ;

calcular el factorial de un número requerido, entre 3 y 15.*/

#include <time.h>

#include <stdio.h>

scanf ("%d",&x );

}while (x<=3 || x>=15);

for (n=x,fact=1; x; x--)

fact *=x;#include <stdlib.h>

int main (void)

{

float inicio, fin;

fact =x;

fin = clock() ;

printf ("\nF actorial de %d! = %ld",n,fact) ;

printf("\n Unidades de tiempo de proceso: %f,\t En segundos: %f\n"float inicio, fin;

int n, x;

long int fact;

inicio = clock() ;

{

segundos: %f\n ,

(fin-inicio), (fin-inicio) /CLK_TCK);

system("PAUSE");

return 0;

}do { }

Page 54: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Funciones de utilidad Funciones de utilidad Abs (n), labs(n); devuelve el valor absoluto de nAbs (n), labs(n); devuelve el valor absoluto de nDiv(num,denom); calcula el cociente y el resto de numdividido por denom y almacena el resultado en quor ydividido por denom y almacena el resultado en quor yrem, miembros de int de la estructura div_tLdiv(num denom); calcula el cociente y el resto de numLdiv(num,denom); calcula el cociente y el resto de numdividido por denom, y almacena los resultados en quoty rem miembros de long de la estructura ldiv ty rem miembros de long de la estructura ldiv_t

Page 55: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Visibilidad de una función Visibilidad de una función Existen dos tipos de clases de almacenamiento en C:pauto y static. Una variable auto es aquella que tieneuna duración automática. No existe cuando elprograma comienza la ejecución, se crea en algúnpunto durante la ejecución y desaparece antes que elprograma termine la ejecuciónprograma termine la ejecuciónUna variable static es aquella que tiene una duraciónfijafija

Page 56: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Variables locales frente a variables globales Variables locales frente a variables globales

Una variable local es unavariable que se definedentro de una funciónU i bl l b lUna variable global esuna variable que puedeser utilizada por todasplas funciones de unprograma dado,incluyendo main ()incluyendo main ()

Page 57: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Variables estáticas y automáticas Variables estáticas y automáticas

Las variables locales se denominan variablesLas variables locales se denominan variablesautomáticas (auto), significado que se pierdecuando termina la función Se puede utilizar autocuando termina la función. Se puede utilizar autopara declarar una variableL i bl táti ( t ti ) ti lLas variables estáticas (static) mantienen su valordespués de que la función se a terminado

Page 58: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Resumen Resumen Como regla general, son preferibles las variablesg g , plocales a las globales. Si realmente es necesario odeseable que alguna variable sea global, es preferible

fhacerla estática, lo que significa que será <<local>>en relación al archivo en que esta definidaS d h f ió i i ibl f dSe puede hacer una función invisible fuera de unarchivo fuente utilizando la palabra reservada staticcon la cabecera y el prototipo de la funcióncon la cabecera y el prototipo de la función

Page 59: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Compilación separada Compilación separada Los programas grandes

fá il dson mas fáciles degestionar si se dividen envarios archivos fuente,también llamadostambién llamadosmódulos, cada uno de loscuales puede conteneruna o mas funciones Estosuna o mas funciones. Estosmódulos se compilan yenlazan posteriormentecon un enlazador

Page 60: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Variables registro (register)Variables registro (register)Una variable registro(register) es similar a una variableUna variable registro(register) es similar a una variablelocal, pero en lugar de ser almacenada en la pila, sealmacena directamente en un registro del procesador.g ppara declarar una variable registro, se hace precederla misma con la palabra reservada register;la misma con la palabra reservada register;La ventaja de las variables registro es su mayorrapidez de manipulaciónrapidez de manipulación

Page 61: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Recursividad Recursividad

La función recursiva es una función que se llama asíLa función recursiva es una función que se llama asímisma. La recursividad o recursión directa es elproceso por el que una función se llama así mismaproceso por el que una función se llama así mismadesde el propio cuerpo de la función. Larecursividad o recursión directa implica mas de unarecursividad o recursión directa implica mas de unafunción

Page 62: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejemplo Ejemplo printf ( "El numero %d es impar. " , n) ;

system("PAUSE"); printf ( "El numero %d es impar. " , n) ;

return 0;

}

int par(int n)

{

if (n == 0)

system("PAUSE");

return 0;

}

int par(int n)

{

return 1; /* es par */

else

return impar(n-1);

}

int impar(int n)

if (n == 0)

return 1; /* es par */

else

return impar(n-1);

}

{

if (n == 0)

return 0; /* es impar */

else

return par(n-1);

int impar(int n)

{

if (n == 0)

return 0; /* es impar */

else

} return par(n-1);

}

Page 63: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Ejercicios Ejercicios Escriba una función que convierta una temperatura degrados Celsius a grados FahrenheitEscribir una función de redondeo que acepte un valor

l C tid d l t d i l d lreal Cantidad y un valor entero decimales y devuelvael valor cantidad redondeado al numero especificadode decimalesEscribir una función que tenga un argumento de tipoentero y devuelva una letra P si el numero es positivo yl l t N i tila letra N si es cero o negativo

Page 64: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Problemas Problemas Escribir un programa que utilice una función para convertircoordenadas polares a rectangularesEscribir una función que determine si una cadena decaracteres es un palíndromocaracteres es un palíndromoEscribir un programa, mediante funciones, que visualice uncalendario (el usuario indica únicamente el mes y el año)Dado el valor de un ángulo escribir una función que muestreel valor de todas las funciones trigonométricascorrespondientes al mismocorrespondientes al mismo

Page 65: ESTRUCTURAS DE CONTROL: BUCLES EN C++

Patrón de prueba de pantalla panorámica (16:9)

Prueba de la relación de

aspecto

(Debe parecer circular)

16x9

4x3