ESTRUCTURAS DE CONTROL: BUCLES EN C++

3,563 views
3,375 views

Published on

Published in: Education
2 Comments
0 Likes
Statistics
Notes
  • estoy tratandode buscar un buen libro de c++ que me ensegne a crear juegos. si alguien me puede ayudar.
    tengo conocimientos de visual basic, y respecto a c++ tengo un po de conocimientos pero devo reforsar la parte orientada a objetos.
    aunque tengo un po de conocimentos en poo ya que estuve en un curso de c# por un agno pero la verdad es que no me gusta la plataforma framework ademas se la potencia que tiene c++, en la que tambien puedo insertar codigo asm
    bueno si alguien me puede ayudar con respecto a un buen tutorial de c++ para juegos, tengo instalado el codeblocks con las librerias alegro, sdl...................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • no conocia este sitio, realmente bueno
    aqui me encontre con varios libros de c++ principalmente el de deitel
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
3,563
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
29
Comments
2
Likes
0
Embeds 0
No embeds

No notes for slide

ESTRUCTURAS DE CONTROL: BUCLES EN C++

  1. 1. FUNCIONESSugerencias y herramientas para crear para crear y presentar diapositivas enformato panorámico
  2. 2. Contenido Concepto de función Funciones numéricas Estructura de una función Funciones de fecha y hora Prototipos de funciones Funciones de utilidad Parámetros de una función Visibilidad de una función bld d d f Funciones en línea: macros Compilación separada Ámbito (alcance) Clases d almacenamiento Cl de l i Variable registro (register) Concepto y uso de funciones de Recursividad biblioteca Resumen Funciones de carácter Ejercicios
  3. 3. Introducción Una función es un mini programa dentro de un programa. p g p g Las funciones contienen varias sentencias bajo un solo nombre, que un programa puede utilizar una o mas veces para ejecutar dichas sentencias Si se agrupan funciones en bibliotecas otros programas pueden utilizar las funciones, por esta razón se puede ahorrar tiempo de desarrollo. Y dado que las bibliotecas contienen rutinas presumiblemente comprobadas, se incrementa la f fiabilidad del programa completo
  4. 4. Concepto de función C fue diseñado como un lenguaje de programación estructurado, también llamado programación modular. El programa se divide en muchos módulos (rutinas pequeñas denominadas funciones) que aíslan mejor los funciones), problemas y producen programas que son mucho mas fácil de mantener El medio para escribir un programa es escribir funciones independientes para cada tarea que haga el programa
  5. 5. Estructura de una función Una función es sencillamente, un conjunto de sentencias que j q se pueden llamar desde cualquier parte de un programa. Las funciones en C no se pueden anidar. Esto significa que una f función no se puede declarar dentro de otra ffunción. La razón para esto es permitir un acceso muy eficiente a los datos En C todas las funciones son externas o globales, es decir p pueden ser llamadas desde cualquier punto del programa q p p g
  6. 6. Cont
  7. 7. Ejemplo int cuadrado(int n) float suma (int num_elementos) { { int cuadrado=0, q=0; int indice; while (q <= 1000) /*el cuadrado ha de ser menor de 1000 */ float total = 0.0; { printf("n t Introduce %d números q = n*n; realesn",num_elementos); printf("E1 cuadrado de: %d es %d n",n,q); for (indice = 0; indice < num_elementos; n++ ; ++ indice++) i di ++) } { return 0; float x; } scanf("%f",&x); " " total+=x; }
  8. 8. Cont Nombre de una función; un nombre de una función comienza con una letra o subrayado(_) y puede contener tantas letras números o subrayados como letras, desee
  9. 9. Cont Tipo de dato de retorno.- si la función no devuelve un valor int, se debe especificar el tipo de dato devuelto por la función; cuando devuelve un valor int, se puede omitir ya que C asume que todas las funciones son enteras. El tipo debe ser uno de los tipos simples de C, tales como int, char o float, o un tipo struct
  10. 10. Cont Muchas funciones no devuelven resultados. La razón es que se utilizan como subrutinas para realizar una tarea concreta Una función que no devuelve concreta. resultados, a veces se denomina procedimiento. Para indicar al compilador que una función no devuelve resultados, se utiliza el tipo de retorno void
  11. 11. Cont Resultado de una función.- una función puede devolver un único valor. El resultado se muestra con una sentencia return cuya sintaxis l l d i i i es; Return(expresion) Return; El valor devuelto (expresión) puede ser cualquier tipo de dato excepto una función o un array p y Si el tipo de retorno es void, la sentencia return se puede escribir como return; sin ninguna expresión de retorno, o bien de modo alternativo se puede omitir la sentencia return
  12. 12. Cont Llamada a una función; las funciones, para poder ser ejecutadas, han de ser llamadas o invocadas. invocadas Cualquier expresión puede contener una llamada o una función f ió que redirija el control di ij l l del programa a la función nombrada
  13. 13. Ejemplo #include <stdio.h> return ; #include <stdlib.h> } void func1 (void) int main() { { puts ("Segunda función") ; puts("Primera función llamada main()"); return; func1(); /* Segunda función llamada */ } void func2 (void) func2(); /* Tercera función llamada */ (); / / { puts ("main se termina") ; puts ("Tercera función") ; system("PAUSE"); return ; return 0; /* Devuelve control al sistema */ ;/ / } }
  14. 14. Ejemplo #include <stdio.h> int main() { #include <stdlib.h> int m, n; int max(int x, int y) do { { scanf ("%d %d", &m &n) ; ( %d %d &m, printf("Maximo de %d,%d es %dn",m,n,max(m, if (x < y) n)); /*llamada a max*/ return y; } while (m != 0) ; else system("PAUSE"); return x; return 0; } }
  15. 15. Ejemplo #include <stdio.h> int main() { #include <stdlib.h> double num1, num2, med; printf("introducir dos números reales:"); double media(double scanf ("%lf %lf",&num1,&num2) ; x1, double x2) med = media(num1, num2); { printf ("El valor medio es %.4lf n", med) ; system("PAUSE"); return(x1 + x2)/2; return 0; } }
  16. 16. Prototipos de funciones La declaración de una función se denomina prototipo. Los prototipos de una función contienen la cabecera de la función con la diferencia de que los función, prototipos terminan con un punto y coma. Los L prototipos d l ll t ti de las llamadas en un programa se d incluyen en la cabecera del programa para que así sean reconocidas en todo el programa id d l
  17. 17. Sintaxis Cua do u a e dad Cuando una entidad se declara, se proporciona un nombre y se dec a a, p opo c o a u o b e listan sus características. Una definición indica que existe un lugar en un programa donde existe realmente la entidad definida, mientras que una declaración es solo una indicación de que algo existe en alguna posición
  18. 18. 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 () float entrada(); /* prototipo o declaración */ { int main () float m; { do { float b, h; scanf ("%f" & ) ; f ("%f", &m) printf ("n Base del rectangulo: " ) ; } while (m<=0.0) ; b = entrada() ; return m; printf ("n Altura del rectangulo: " ) ; } h = entrada() ; / /* calcula el area de un rectángulo */ g / printf("n Area del rectangulo: %.2fn",area_rectangulo(b,h)); float area_rectangulo(float b, float a) system("PAUSE"); { return 0; return (b*a); } }
  19. 19. Declaración de una función Antes de que una función pueda ser invocada, debe ser declarada Una declaración de una función contiene solo la cabecera d l f ió (ll b de la función (llamado t bié prototipo) d también t ti ) Tipo resultado nombre (tipo1 param1, tipo2 param2,…); Los nombres de los parámetros se pueden omitir Char* copiar (char*,int); Char* copiar (char* buffer, int n); p ( , );
  20. 20. Prototipos con un numero no especificadode parámetros Un formato especial de prototipo es aquel que tiene un p p p q q numero no especificado de argumentos, que se representa por puntos suspensivos (…) Int muestras (int a,….); Int printf (const char *formato,…) Para implementar una función con lista variable de parámetros es necesario utilizar macros que están definidas d fi id en el archivo d cabecera < td l hi de b <stdarg.h> h>
  21. 21. Ejemplo #include <stdio.h> #include <stdlib.h> double mx,actual; #include <stdarg.h> va_list puntero; void maximo(int n, ... ) ; int i; int main (void) va_start(puntero,n); { mx = actual = va_arg(puntero,double); puts("ttPRIMERA BUSQUEDA DEL MAXIMOn"); printf("ttArgumento actual: %.2lfn",actual); maximo(6,3.0,4.0,-12.5,1.2,4.5,6.4); for (i=2; i<=n; i++) puts ("nttNUEVA BUSQUEDA DEL MAXIMOn") ; { maximo(4,5.4,17.8,5.9,-17.99); actual = va_arg(puntero,double); system("PAUSE"); printf("ttArgumento actual: %.2lfn",actual); return 0; if (actual > mx) } { void maximo(int n, ... ) mx = actual; { } printf("ttMáximo de la lista de %d números es %.2lfn",n,mx); } va_end(puntero); printf("ttMáximo de la lista de %d números es %.2lfn",n,mx); } va_end(puntero); }
  22. 22. Parámetros de una función C siempre utiliza el método de parámetros por valor para p p p p pasar variables a funciones. Para que una función devuelva un valor a través de un argumento hay que pasar la dirección de la variable y que el argumento correspondiente de la función sea un puntero, es la forma de conseguir en C un paso de parámetro por referencia g p p p El método por defecto de pasar parámetros es por valor, a menos que se pasen arrays. Los arrays se pasan siempre por dirección
  23. 23. Paso de parámetros Por valor Paso por valor (también llamado paso por copia significa que cuando 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ámetros Por referencia Cuando una función debe modificar el valor del parámetro pasado y devolver este valor modificando a la función llamadora, se ha de utilizar el método de paso de parámetro por referencia o dirección
  24. 24. Ejemplo /*Muestra el paso de parámetros por valor DemoLocal(n); Se puede cambiar la variable del parámetro en p ede ariable la función printf("Despues de llamada a DemoLocal, n = %dn",n); system("PAUSE"); pero su modificación no puede salir al exterior*/ return 0; #include <stdio.h> } #include <stdlib.h> void DemoLocal(int valor) void DemoLocal(int valor); { int main () printf ( "Dentro de DemoLocal, valor = %dn" , valor) ; { valor = 999; int n = 10; printf ("Dentro de DemoLocal, valor = %dn" , valor) ; printf("Antes de llamar a DemoLocal, n = } %dn",n);
  25. 25. Diferencias entre paso de variables porvalor y por referencia Las reglas que se han de seguir cuando se transmiten variable por valor y por referencia son l siguientes; l f i las i i Los parámetros valor reciben copias de los valores de los argumentos que se les pasan La asignación a parámetros valor de una función nunca cambian el valor del argumento original pasado a los parámetros Los parámetros para el paso por referencia (declarados con *, punteros) reciben l di ) ib la dirección d l argumentos pasados; a estos l ió de los d les debe de preceder el operador &, excepto los arrays; En una función, las asignaciones a parámetros referencia (punteros) cambia los valores de los argumentos originales
  26. 26. Parámetro const de una función Con el objetivo de añadir seguridad adicional a las funciones se puede añadir a una descripción de un parámetro el especificador const que indica al const, compilador que solo es de lectura en el interior de la función Si se intenta escribir en este parámetro función. se producirá un mensaje de error de compilación
  27. 27. Funciones en línea, Macros con argumento línea Las funciones en línea sirven para aumentar la velocidad de su programa. Su uso es conveniente cuando la función es una expresión, su código es pequeño y se utiliza muchas veces en el programa Para una macro con argumentos (funciones en línea), el compilador inserta realmente el código en el punto en p g p que se llama, esta acción hace que el programa se ejecute mas rápidamente, ya que no ah de ejecutar el código asociado con la llamada a la función
  28. 28. sintaxis #define NombreMacro (parámetros sin tipos) expresion_texto Regla; la definición de una macro solo puede ocupar una línea. línea Se puede prolongar la línea con el carácter al final de la línea
  29. 29. 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); ( %f &altura); volumen = VOLCONO(radio, altura); printf("nEl volumen del cono es: %.2fn",volumen); system("PAUSE"); return 0; }
  30. 30. Ámbito (alcance) El ámbito o alcance de una variable determina cuales son las funciones que reconocen ciertas variables. Si una función reconoce una variable, la variable es visible en esa ffunción. El ámbito es la zona de un programa en la que es visible una variable. Existen cuatro tipos de ámbitos: programa archivo fuente función y bloque Se programa, fuente, bloque. puede designar una variable para que este asociada a uno de estos ámbitos.
  31. 31. Ámbito del programa Las variables que tienen ámbito de programa pueden ser referenciadas por cualquier f ió en el programa completo; tales f i d l i función l l l variables se llaman variable globales. Para hacer una variable global, declárela simplemente al principio de un programa, fuera de cualquier función Int g,h; Main()() { .. }
  32. 32. Ámbito del archivo fuente Una variable que se declara fuera de cualquier función y cuya declaración contiene l palabra reservada static tiene á bi d d l ió i la l b d i i ámbito de archivo fuente. La variables con este ámbito se pueden referenciar desde el punto del programa en que están declaradas hasta el final del archivo fuente Static int i; Void func (void) ( ) { … }
  33. 33. Ámbito de una función Una variable que tiene ámbito de una función se puede referenciar desde d d cualquier parte d l f ió L variables d l d l i de la función. Las i bl declaradas dentro 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 la función en que están definidas Void calculo (void) { Double x,r,t; /*ámbito de la función*/ … }
  34. 34. Ámbito de bloque Una variable declarada en un bloque tiene ámbito de bloque y puede ser referenciada en cualquier parte del bloque desde el punto en que esta declarada bloque, hasta el final del bloque. Las variables locales declaradas dentro de una función tienen ámbito de bloque de la función; no son visibles fuera del bloque Void func1 (int x) ( ) { Int i; For(i x; For(i=x; i<x10; i++) Printf (“i=%dn”,i*i); }
  35. 35. Clases de almacenamiento Los especificadores de clases (tipos) de almacenamiento permiten modificar el ámbito de una variable Los especificadores pueden ser uno variable. de los siguientes auto, extern, register, static y typedef
  36. 36. Cont…Cont Variables automáticas; las variables que se declaran dentro de una función se dice que son automáticas (auto), significando que se les asigna espacio en memoria automáticamente a la entrada de la función Variables externas; a veces se presenta el problema de que una función necesita utilizar una variable que otra función inicializa. inicializa Una solución es declarar la variable local con la palabra reservada extern. Cuando una variable se declara externa, se indica al compilador que el espacio de la variable esta d fi id en otro l i bl definida lugar
  37. 37. Cont..Cont Variables de registro; otro tipo de variable C es la variable registro. Precediendo a la declaración de una variable con la palabra reservada register, se sugiere al compilador que la variable se almacene en uno de los registros hardware g del microprocesador Variables estáticas; las variables estáticas son opuestas en su significado a las variables automáticas Las variables automáticas. estáticas no se borran cuando la función termina y en consecuencia retienen sus valores entre llamadas a una función f ió
  38. 38. Ejemplo,Ejemplo aplicación de una variable static #include <stdio.h> #include <stdlib.h> #incl de <stdlib h> return 0; long int fibonacci (); } int main() long int fibonacci () { { int n,i; static int x = 0; printf ("nCuantos numeros de fibonacci ? : " ) ; scanf ( "%d" , &n) ; static int y = 1; printf ("nSecuencia de fibonacci : 0,1n") ; y=y+x; for (i=2; i<n; i++) x = y - x; printf ("%ldn",fibonacci()); return y; system("PAUSE"); ("PAUSE") }
  39. 39. Concepto y uso de funciones de biblioteca Todas las versiones de C ofrecen con una biblioteca estándar de fusiones que proporcionan soporte para operaciones utilizadas con mas frecuencia Las funciones estándar o predefinidas se dividen en grupos; t d todas llas f i funciones que pertenecen al t l mismo grupo se declaran en el mismo archivo de cabecera b
  40. 40. Cont..Cont Los nombres de los archivos de cabecera estándar utilizados se muestran a continuación
  41. 41. Funciones de carácter El archivo de cabecera <CTYPE H> b <CTYPE.H> define un grupo de funciones/macros de p manipulación de caracteres Todas las funciones devuelven un resultado de valor verdadero (distinto de cero) o falso (cero)
  42. 42. Comprobación alfabética y de dígitos
  43. 43. 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; }
  44. 44. Funciones de prueba de caracteres especiales
  45. 45. Funciones de conversión de caracteres Existen funciones para cambiar caracteres mayúsculas a minúsculas o viceversa
  46. 46. Ejemplo #include <stdio.h> case V: #include <stdlib.h> #incl de <stdlib h> puts ("Es un enfermero") ; #include <ctype.h> break; int main() case H: { puts ("Es una maestra ) ; ( Es maestra") char resp; /*respuesta del usuario */ break; char c; default: printf ("¿Es un varón o una hembra (V/H)?: " ) ; puts("No es ni enfermero ni maestra") ; scanf ("%c",&resp) ; break; } resp=toupper(resp); system("PAUSE"); switch (resp) return 0; { }
  47. 47. Funciones numéricas Virtualmente cualquier operación aritmética es posible q p p en un programa C. las funciones matemáticas disponibles son las siguientes: Matemáticas Trigonométricas Logarítmicas Exponenciales Aleatorias Al i
  48. 48. Funciones matemáticas
  49. 49. Funciones trigonométricas
  50. 50. Funciones logarítmicas y exponenciales
  51. 51. Funciones aleatorias Los números aleatorios son de gran utilidad en numerosas aplicaciones y requieren un trato especial en cualquier lenguaje de programación programación. Las funciones usuales de la biblioteca estándar C son; rand randon randomize y srand estas rand, randon, srand.estas sunciones se encuentran en el archivo stdlib.h
  52. 52. Funciones de fecha y hora Las funciones time,clock, _strdate y _strtime devuelven la hora actual como el numero de segundos transcurrido desde la medianoche del 1 de enero de 1970 Clock (void); la función clock determina el tiempo de procesador Time(hora); obtiene la hora actual Local time (hora); convierte la fecha y hora en una estructura de tipo tm Mktime(t) Mkti (t) convierte l f h en f i t la fecha formato d calendario t de l d i
  53. 53. 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 scanf ("%d",&x ); 15.*/ }while (x<=3 || x>=15); #include <time.h> for (n=x,fact=1; x; x--) #include <stdio.h> fact *=x; =x; #include <stdlib.h> fin = clock() ; int main (void) printf ("nF actorial de %d! = %ld",n,fact) ; { printf("n Unidades de tiempo de proceso: %f,t En float inicio, fin; segundos: %fn", %fn int n, x; (fin-inicio), (fin-inicio) /CLK_TCK); long int fact; system("PAUSE"); inicio = clock() ; return 0; do { }
  54. 54. Funciones de utilidad Abs (n), labs(n); devuelve el valor absoluto de n Div(num,denom); calcula el cociente y el resto de num dividido por denom y almacena el resultado en quor y rem, miembros de int de la estructura div_t Ldiv(num,denom); Ldiv(num denom); calcula el cociente y el resto de num dividido por denom, y almacena los resultados en quot y rem miembros de long de la estructura ldiv t ldiv_t
  55. 55. Visibilidad de una función Existen dos tipos de clases de almacenamiento en C: p auto y static. Una variable auto es aquella que tiene una duración automática. No existe cuando el programa comienza la ejecución, se crea en algún punto durante la ejecución y desaparece antes que el programa termine la ejecución Una variable static es aquella que tiene una duración fija
  56. 56. Variables locales frente a variables globales Una variable local es una variable que se define dentro de una función Una variable global es U i bl l b l una variable que puede ser utilizada por todas p las funciones de un programa dado, incluyendo main ()
  57. 57. Variables estáticas y automáticas Las variables locales se denominan variables automáticas (auto), significado que se pierde cuando termina la función Se puede utilizar auto función. para declarar una variable Las L variables estáticas ( t ti ) mantienen su valor i bl táti (static) ti l después de que la función se a terminado
  58. 58. Resumen Como regla general, son preferibles las variables g g , p locales a las globales. Si realmente es necesario o deseable que alguna variable sea global, es preferible hacerla estática, lo que significa que será <<local>> f en relación al archivo en que esta definida Se S puede h d hacer una f ió i i ibl f función invisible fuera d un de archivo fuente utilizando la palabra reservada static con la cabecera y el prototipo de la función
  59. 59. Compilación separada Los programas grandes son mas fá il fáciles d de gestionar si se dividen en varios archivos fuente, también llamados módulos, cada uno de los cuales puede contener una o mas funciones Estos funciones. módulos se compilan y enlazan posteriormente con un enlazador
  60. 60. Variables registro (register) Una variable registro(register) es similar a una variable local, pero en lugar de ser almacenada en la pila, se almacena directamente en un registro del procesador. g p para declarar una variable registro, se hace preceder la misma con la palabra reservada register; La ventaja de las variables registro es su mayor rapidez de manipulación
  61. 61. Recursividad La función recursiva es una función que se llama así misma. La recursividad o recursión directa es el proceso por el que una función se llama así misma desde el propio cuerpo de la función. La recursividad o recursión directa implica mas de una función
  62. 62. Ejemplo printf ( "El numero %d es impar. " , n) ; system("PAUSE"); printf ( "El numero %d es impar. " , n) ; return 0; system("PAUSE"); } return 0; int par(int n) } { int par(int n) if (n == 0) { return 1; /* es par */ if (n == 0) else return 1; /* es par */ return impar(n-1); else } return impar(n-1); int impar(int n) } { int impar(int n) if (n == 0) { return 0; /* es impar */ if (n == 0) else return 0; /* es impar */ return par(n-1); else } return par(n-1); }
  63. 63. Ejercicios Escriba una función que convierta una temperatura de grados Celsius a grados Fahrenheit Escribir una función de redondeo que acepte un valor real C tid d y un valor entero d i l y d l Cantidad l t decimales devuelva l el valor cantidad redondeado al numero especificado de decimales Escribir una función que tenga un argumento de tipo entero y devuelva una letra P si el numero es positivo y la letra l l t N si es cero o negativo i ti
  64. 64. Problemas Escribir un programa que utilice una función para convertir coordenadas polares a rectangulares Escribir una función que determine si una cadena de caracteres es un palíndromo Escribir un programa, mediante funciones, que visualice un calendario (el usuario indica únicamente el mes y el año) Dado el valor de un ángulo escribir una función que muestre el valor de todas las funciones trigonométricas correspondientes al mismo
  65. 65. Patrón de prueba de pantalla panorámica (16:9) Prueba de la relación de aspecto (Debe parecer circular) 4x316x9

×