3. PROGRAMACIÓNESTRUCTURADA El término de programación estructurada se refiere a un conjunto de técnicas que han ido evolucionando desde los primeros trabajos de Dijktra. Estas técnicas aumentan considerablemente la productividad del programa reduciendo el tiempo requerido para escribir, verificar, depurar y mantener los programas
4. PROGRAMACIÓNESTRUCTURADA La programación estructurada utiliza un número limitado de estructuras de control que minimiza la complejidad de los problemas y por consiguiente reduce los errores. La programación estructurada es el conjunto de técnicas que incorporan: El diseño descendente Los recursos abstractos Las estructuras básicas
5. PROGRAMACIÓNESTRUCTURADA RECURSOS ABSTRACTOS Recursos abstractos (simplicidad): consiste en descomponer una determinada acción compleja, en función de un número de acciones más simples, capaces de ser resueltas con mayor facilidad y que constituirán las instrucciones.
6. PROGRAMACIÓNESTRUCTURADA DISEÑO DESCENDENTE El diseño descendente (Top – Down) es el proceso mediante el cual un programa se descompone en una serie de niveles o pasos sucesivos de refinamiento. La metodología descendente consiste en efectuar una relación entre las sucesivas etapas de estructuración de modo que se relacionen unas con otras mediante entradas y salidas de información.
7. PROGRAMACIÓNESTRUCTURADA Es decir, se descompone el problema en etapas o estructuras jerárquicas, de modo que se puede considerar cada estructura desde dos puntos de vista: qué hace y como lo hace. Nivel n vista desde el exterior ¿Qué hace? Nivel n vista desde el interior ¿Cómo lo hace?
8. PROGRAMACIÓNESTRUCTURADA ESTRUCTURAS BÁSICAS Un programa propio puede ser escrito utilizando solamente tres tipos de estructuras de control: —secuenciales, selectivas y repetitivas. TEOREMA DE BOHN JACOPINI Teorema de la programación estructurada o de BohnJacopini; que demuestra que un programa propio puede ser escrito utilizando solamente tres tipos de estructuras de control: Secuenciales. Selectivas. Repetitivas.
9.
10. Existen caminos desde la entrada hasta la salida que se pueden seguir y que pasan por todas las partes del programa.
13. ESTRUCTURAS BÁSICAS SALIDAS BÁSICAS INTRODUCCIÓN Una de las características más sobresalientes de C++ es la flexibilidad en la utilización de las entradas y salidas (E/S) así como la facilidad para su tratamiento. C++ fue diseñado para ser compatible con C. Por consiguiente el C++ tiene disponible todas las funciones típicas de entrada y salida del C incluyendo getchar(), putchar(), scanf() y printf(). Ya que los programadores disponen de la biblioteca stdio.
14. ESTRUCTURAS BÁSICAS BIBLIOTECA iostream C++ incorpora una nueva biblioteca de funciones de E/S (Entrada/Salida): la biblioteca iostream. La biblioteca iostream es una implementación orientada a objetos y se fundamenta en forma similar a la biblioteca stdio en el concepto de flujos. A nivel abstracto un flujo (stream) es un modo de representar el flujo o secuencia de datos de una fuente (productor) a un destino o buzón (consumidor).
15. ESTRUCTURAS BÁSICAS Así por ejemplo: Cuando se ingresa caracteres por el teclado, se puede pensar en caracteres que fluyen o se trasladan desde el teclado a las estructuras de datos de su programa. Para acceder a la biblioteca iostream se debe incluir en cada programa el archivo de cabecera iostream.h, mediante la directiva del preprocesador #include.
16. ESTRUCTURA DE UNPROGRAMA EN C #include <iostream.h> Este archivo de cabecera contiene información de diferentes funciones de E/S y proporciona la manipulación de los buffer. Define también los objetos predefinidos de flujo cin, cout, cerry clogque se pueden utilizar en nuestros programas. C++ realiza todas las entradas y salidas como flujos de caracteres. Si su programa recibe entrada del teclado, de un archivo de disco, de un MÓDEM o de un ratón, C++ ve solo un flujo de caracteres.
17. ESTRUCTURAS BÁSICAS C++ no tiene que conocer cual es el tipo de dispositivo que proporciona la entrada; el sistema operativo maneja los dispositivos específicos y los programas manejan caracteres de datos sin preocuparse del dispositivo. La instrucción usingnamespace especifica que los miembros de un namespace van a utilizarse frecuentemente en un programa. Esto permite al programador tener acceso a todos los miembros del namespace y escribir instrucciones más concisas como: cout<<"hola"; en vez de: std::cout<<"hola";
18. ESTRUCTURAS BÁSICAS cout Se utilizará cout como el flujo de salida conectado a la salida estándar (pantalla). Cuando un programa comienza la ejecución, automáticamente abre los archivos de dispositivos y los conecta a los objetos cin, cout y cerr y los asocia con los operadores específicos. El operador de inserción (<<) transmite sus argumentos (situados) a la derecha hacia el flujo cout (a la izquierda del operador).
19. SENTENCIA EN C PALABRAS RESERVADAS Una Palabra reservada o clave (keyword) es una palabra o identificador que tiene un significado particular para un Lenguaje de programación. Ejemplo: break case catch char class const const_cast continue Default delete deprecated dllexport dllimport do double dynamic_cast else enum explicit extern false float for friend
20. SENTENCIA EN C CONSTANTES Valor numérico o carácter que no ocupa memoria fuera del código del programa. Ejemplo: los números 5, 17 y 0xB1; y los caracteres A, q y !. CADENAS Cualquier secuencias de valores (byte, palabras, palabras dobles, etc.). Ejemplo: “El C ++ es divertido para programar”. Dentro de las cadenas también pueden contener los llamados caracteres de escape o secuencia de escape.
22. SENTENCIA EN C El operador << es una buena elección para representar la operación de salida, se puede concatenar diferentes operadores en una sola línea y utilizar la misma sintaxis para visualizar todos los tipos de datos básicos en un flujo. El operador << convierte automáticamente la representación interna de la variable en una representación de textos. Ejemplo: cout << 45; // Visualiza 45 cout << 1.23457 // Visualiza 1.23457 cout << “Hola” // Visualiza Hola
23. SENTENCIA EN C Al final de un cout se puede colocar un carácter de nueva línea de modo que el cursor se mueva una línea debajo de la siguiente manera: cout<< “Aprendo C++”; cout<<“”; cout<< “Aprendo c++”<<“”; cout << “Aprendo C++ ”;
24. SENTENCIA EN C Secuencias de escape Las secuencias de caracteres en las que el primero es la barra invertida, se denominaron secuencias de escape y aunque originariamente se utilizaron para la representación de los caracteres de control, por extensión pueden representarse de este modo todos los códigos ASCII. Además se dispone de algunos símbolos predefinidos para los caracteres más frecuentes. Por ejemplo, se utiliza para representar el carácter nueva línea (decimal 10). Los símbolos utilizados se muestran en la tabla adjunta
25. SENTENCIA EN C Secuencia Valor Símbolo Que Hace 0x07 BEL Sonido audible (bell) 0x08 BS Retroceso (backspace) 0x0C FF Salto de formato (formfeed) 0x0A LF Saltar una línea (linefeed) 0x0D CR Retorno de carro (carriagereturn) 0x09 HT Tabulación horizontal (H Tab) 0x0B VT Tabulación vertical (V Tab) 0x5c Barra invertida (backslash) amp;apos; 0x27 ' Apóstrofo (comilla simple) amp;quot; 0x22 " Doble comilla 0x3F ? Interrogación
26. SENTENCIA EN C PROGRAMA EJEMPLO: #include <iostream.h> void main() { intedad=18; float peso=64.50; char inicial = ’l’; cout<< “Mi edad es “<< edad; cout <<“”; cout<<“Mi ”; cout<<“peso es”; cout<<peso<<“”; cout<<“Mi inicial es “<< inicial<<“”; }
27. MANIPULADORES La bibliotecaiostreamtienevariosoperadoresparticularesllamadosmanipuladores que le permitecontrolarprecisamente el formato de los datosvisualizados. Situando un manipulador en la cadena de operadores <<, se puede modificar el estado de flujo. Una característica importante de un flujo es que debe tratar con valores numéricos en diferentes bases numéricas.
28. MANIPULADORES La biblioteca iostream tiene tres manipuladores (dec, hex, oct) para controlar la conversión de un valor cuando se desea verlo en pantalla. La conversión por defecto es la base 10 Por ejemplo: #include <iostream.h> ….. int i=100; cout << dec << i << endl; //visualiza 100 cout << hex << i << endl; //visualiza 64 cout << oct << i << endl; //visualiza 144
29. FUNCIONES Control del formato Los manipuladores setw () y setprecision () controlan la anchura y la precisión de los datos impresos. Pertenecen a la librería iomanip.h Por ejemplo: cout << 20; cout << 30; cout << 40; La salida sin formato es: 203040
30. FUNCIONES Utilizando setw() int i=100; //estableciendo una anchura de 6 cout <<setw(6)<< dec << i << endl; cout << setw(6)<<hex << i << endl; cout << setw(6)<<oct << i << endl; Ahora la salida sería: 100 64 144
31. FUNCIONES Otro ejemplo int i=100; //estableciendo una anchura de 10 cout <<setw(10)<< 123 << endl; cout << setw(10)<<12345 << endl; cout << setw(10)<<1234567 << endl; Ahora la salida sería: 123 12345 12314567
32. FUNCIONES El manipulador setprecision() determina cuantos dígitos de precisión se visualizan, es especialmente útil para valores de coma flotante que limitan el número de posiciones decimales visualizadas. Por ejemplo: cout <<3.14159 << endl; cout << setprecision(3)<<3.14159 << endl; Ahora la salida sería: 3.14159 3.142
33. ENTRADAS BÁSICAS Cin El objeto cin actúa como el teclado y combinando con el operador >> produce una pausa en un programa y espera a que el usuario introduzca por teclado datos. Con un solo cin se puede obtener uno o mas valores (al igual como sucede con cout que puede visualizar uno o más valores), siempre que separe los valores que siguen a cin con operadores >> adicionales.
35. OPERADORES Para obtener múltiples valores con un solo cin, requiere que el usuario debe escribir un caracter espacio en blanco entre los valores. Recuerde que en la terminología del C++ un espacio en blanco es cualquier pulsación de las teclas tabulación, espaciador o return (enter o intro). Por consiguiente en respuesta a la sentencia: cin>>a>>b>>c; //lee 3 valores de teclado
36.
37. OPERADORES En cualquiera de los tres casos el efecto será el mismo. IMPORTANTE: Si se introduce 5, 8, 6 El compilador C++ no considera la coma como espacio en blanco y en consecuencia solo se pone 5 en a y las otras variables almacenarán basura en ellas.
38. EXPRESIONES Para evitar el error de introducir caracteres no blancos como separadores, es bueno visualizar en pantalla mensajes de advertencia al usuario tales como: cout << “por favor, introduzca tres números ”; cout << “separe el valor con un blanco, ”; cout << “nunca con comas ”; cin >> a>> b >> c;
39. EXPRESIONES En caso de duda, será preferible situar un cin en cada una de las líneas: cout << “introduzca el primer valor ”; cin >> a; cout << “cual es el segundo valor ”; cin >> b; cout << “cual es el tercer valor”; cin >> c;
40. INSTRUCCIÓN DE ASIGNACIÓN = El operador de asignación es una etiqueta que permita asignar un valor a una variable que se encuentra en la memoria principal. La estructura de una instrucción de asignación:
41. EXPRESIONES Donde : valor: Puede ser una constante, un identificador de variable o una expresión aritmética o el nombre de una función. Ejemplos: A = 20; La constante 20 es asignada a la variable A P = A; El valor que contiene almacenada la variable A es asignada a la variable P
42. EXPRESIONES R = X + Y; El valor resultante de la expresión aritmética formada por dos identificadores de variable es asignada a la variable R Z= suma(a); El valor que devuelve la función SUMA es asignado a la variable Z
43. EXPRESIONES ASIGNACION MÚLTIPLE Aunque parezcan un poco extrañas al principio las asignaciones, al igual que las otras operaciones, dan un resultado que puede asignarse a su vez a otra expresión. De la misma forma que (a + b) es evaluada y su resultado puedo copiarlo en otra variable: c = (a + b) ; una asignación (a = b) da como resultado el valor de b , por lo que es lícito escribir c = ( a = b );
44. EXPRESIONES ASIGNACION A UNA MISMA VARIABLE El hecho de que estas operaciones se realicen de derecha a izquierda también permite realizar instrucciones del tipo: a = a + 17 ; significando esto que al valor que tenia anteriormente a , se le suma la constante y luego se copia el resultado en la variable . Como este último tipo de operaciones es por demás común, existe en C un pseudocódigo , con el fin de abreviarlas .
45. EXPRESIONES Así una operación aritmética o de bit cualquiera (simbolizada por OP ) a = (a) OP (b) ; puede escribirse en forma abreviada como : a OP= b ; Por ejemplo : a += b ; /* equivale : a = a + b */ a *= b ; /* equivale : a = a * b */ a /= b ; /* equivale : a = a / b */ a %= b ; /* equivale : a = a % b */ Nótese que el pseudooperador debe escribirse con los dos símbolos seguidos, por ejemplo +=, y no será aceptado +(espacio) = .
46. TIPOS DE INSTRUCCIONES ASIGNACIÓN CONDICIONAL El significado del mismo es el siguiente: lvalue = (operación relacional ó lógica) ? (rvalue 1) : (rvalue 2) ; de acuerdo al resultado de la operación condicional se asignará a lvalue el valor de rvalue 1 ó 2 . Es decir: Si aquella es CIERTA será lvalue = rvalue 1 y Si diera FALSO, lvalue = rvalue 2 . .
47. TIPOS DE INSTRUCCIONES Ejemplo: Si se desea asignar a c el menor de los valores a ó b , se debe escribir lo siguiente: c = (a < b) ? a : b ;
48. EXPRESIONES Los operadores de asignación están resumidos en la siguiente tabla;. TABLA OPERADORES DE ASIGNACION
49. EXPRESIONES OPERADORES DE INCREMENTO Y DECREMENTO Los operadores de incremento y decremento son sólo dos y están descriptos en la TABLA TABLA OPERADORES DE INCREMENTO Y DECREMENTO
50. ENTRADAS Y SALIDAS BASICAS Para visualizar rápidamente la función de los operadores mencionados, tenemos las sentencias: a = a + 1 ; a++ ; tienen una acción idéntica , de la misma forma que a = a - 1 ; a-- ; es decir incrementa y decrementa a la variable en una unidad .
51. ENTRADAS Y SALIDAS BASICAS Si bien estos operadores se suelen emplear con variables int , pueden ser usados sin problemas con cualquier otro tipo de variable . Así si a es un float de valor 1.05 , luego de hacer a++ adoptará el valor de 2.05 y de la misma manera si b es una variable del tipo char que contiene el caracter 'C' , luego de hacer b-- su valor será 'B' Si bien las sentencias i++ ; ++i ; son absolutamente equivalentes, en la mayoría de los casos la ubicación de los operadores incremento ó decremento indica CUANDO se realiza éste.
52. ENTRADAS Y SALIDAS BASICAS Ejemplo: int i = 1 , j , k ; j = i++ ; k = ++i ; Donde j es igualado al valor de i y POSTERIORMENTE a la asignación i es incrementado por lo que j será igual a 1 e i igual a 2 , luego de ejecutada la sentencia . En la siguiente instrucción i se incrementa ANTES de efectuarse la asignación tomando el valor de 3 , él que luego es copiado en k .
53. ENTRADAS Y SALIDAS BASICAS CONVERSIÓN AUTOMÁTICA DE TIPOS Cuando dos ó mas tipos de variables distintas se encuentran DENTRO de una misma operación ó expresión matemática, ocurre una conversión automática del tipo de las variables.
54. ENTRADAS Y SALIDAS BASICAS En todo momento de realizarse una operación se aplica la siguiente secuencia de reglas de conversión (previamente a la realización de dicha operación): 1) Las variables del tipo char ó short se convierten en int. 2) Las variables del tipo float se convierten en double. 3) Si alguno de los operandos es de mayor precisión que los demás , estos se convierten al tipo de aquel y el resultado es del mismo tipo. 4) Si no se aplica la regla anterior y un operando es del tipo unsigned el otro se convierte en unsigned y el resultado es de este tipo.
55. COMPILACION Y ENLAZADO EN C Las reglas 1 a 3 no presentan problemas, sólo nos dicen que previamente a realizar alguna operación las variables son promovidas a su instancia superior. Esto no implica que se haya cambiado la cantidad de memoria que la aloja en forma permanente . Otro tipo de regla se aplica para la conversión en las asignaciones. Si se define los términos de una asignación como,"lvalue" a la variable a la izquierda del signo igual y "rvalue" a la expresión a la derecha del mismo, es decir: "lvalue" = "rvalue" ;
56. COMPILACION Y ENLAZADO EN C Posteriormente al cálculo del resultado de "rvalue" (de acuerdo con las reglas antes descriptas), el tipo de este se iguala al del "lvalue". El resultado no se verá afectado si el tipo de "lvalue" es igual ó superior al del "rvalue", en caso contrario se efectuará un truncamiento ó redondeo, según sea el caso. Por ejemplo, el pasaje de float a int provoca el truncamiento de la parte fraccionaria, en cambio de double a float se hace por redondeo. .
57. COMPILACION Y ENLAZADO EN C Librería math ANSI C Contiene los prototipos de las funciones y otras definiciones para el uso y manipulación de funciones matemáticas. Funciones acosasin atan atan2 ceilcoscoshexp fabsfloorfmodfrexp ldexp log log10 modf pow sin sinhsqrt tan tanh
58. COMPILACION Y ENLAZADO EN C Función pow ANSI C Calcula x elevado a la potencia de y. Puede producirse un error de dominio si x es negativo e y no es un valor entero. También se produce un error de dominio si el resultado no se puede representar cuando x es cero e y es menor o igual que cero. Un error de recorrido puede producirse. Sintaxis: double pow(double x, double y); Valor de retorno: La función pow retorna el resultado de xy.
59. COMPILACION Y ENLAZADO EN C Ejemplo: #include <iostream.h> #include <math.h> int main() { double x = 6.54321, y = 0.56789; cout<<”pow(“<<x<<”,”<<y<<” ) = “<< pow(x,y); return 0; }
60. EXPRESIONES Función sqrt ANSI C Calcula la raíz cuadrada del valor no negativo de x. Puede producirse un error de dominio si x es negativo. Sintaxis double sqrt(double x); Valor de retorno: La función sqrt retorna el resultado de la raíz cuadrada de x.
62. EXPRESIONES Función sin ANSI C Calcula el seno de x (medido en radianes). Sintaxis: double sin(double x); Valor de retorno: La función sin retorna el seno, en radianes.