Principios de Programación final1

download Principios de Programación final1

of 111

Transcript of Principios de Programación final1

Principios de Programacin

Unidad I Introduccin a la programacin

1.1. Definicin del problema 1. Definicin del problema Requiere que el problema sea definido y comprendido claramente para que pueda ser analizado con todo detalle. Fases de la programacin: 1.- ANALISIS: Cuando se tiene y piensa la idea o problema a ejecutar. 2.- DISEO: Se plantea un algoritmo con los pasos a dibujar o realizarse. 3.- IMPLEMENTACION: Los pasos de algoritmo se transforma en un cdigo pascal y se plasman en el programa 4.- PRUEBAS: Se corre el programa y se registra su efectividad. 5.- DEPURACION: despus de haber corrido el programa se hacen las correcciones necesarias. 6.- RETROALIMENTACION Y LIBERACION: Despus de haber corregido los errores se regresa al paso 4 en caso de haber existido. Introduccin a la Programacin Este libro est hecho para personas que no tienen nociones sobre programacin, para orientarlas en el tema y encaminarlas a los conceptos bsicos de la programacin y al desarrollo de programas utilizando algunos lenguajes de programacin. Programacin Se llama Programacin a la implementacin de un algoritmo en un determinado lenguaje de programacin, para realizar un programa. Algoritmo es una secuencia no ambigua, finita y ordenada de instrucciones que han de seguirse para resolver un problema. Programa (Software en ingls) es una secuencia de instrucciones que una computadora puede interpretar y ejecutar. El proceso de creacin de software es materia de la ingeniera del software, una de las ramas propias de la Ingeniera Informtica. Segn Niklaus Wirth un programa est formado por algoritmos y estructura de datos. Se han propuesto diversas tcnicas de programacin, cuyo objetivo es mejorar tanto el proceso de creacin de software como su mantenimiento. Entre ellas se pueden mencionar las programaciones lineales, estructurada, modular y orientada a objetos.

Lenguajes de Programacin Lenguaje de programacin es el idioma utilizado para controlar el comportamiento de una mquina, particularmente una computadora. Consiste en un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Hay muchos lenguajes de programacin, pero para programar no es necesario conocer todos los lenguajes, es igual que cuando hablamos, podemos comunicarnos en espaol aunque no sepamos alemn. Aunque la palabra debera ser idioma ya que lenguaje realmente abarca todos los idiomas pero en computacin equivocadamente se usa el trmino lenguaje cuando el trmino correcto es idiomas de programacin. En la actualidad los lenguajes de programacin estn escritos para ser compresibles por el ser humano, a este cdigo se le llama cdigo fuente, pero no es comprendido por la mquina ya que esta solo maneja el lenguaje binario. La compilacin es el proceso de traducir un programa en cdigo fuente a programa en cdigo objeto (que usa el lenguaje binario), el programa encargado de compilar se llama compilador. La mayoria de software de programacin trae su propio compilador. Tipos de lenguajes de programacin Los lenguajes de programacin se clasifican en varios tipos, los hay por nivel, y por la forma como se ejecutan. Por nivel: Hay lenguajes de programacin de alto nivel y lenguajes de bajo nivel. Los lenguajes de alto nivel permiten que con pocas palabras se logre hacer lo mismo que se logra con un lenguaje de bajo nivel. Ejemplos de lenguajes de alto nivel: C++, Python, Java Ejemplos de lenguaje de bajo nivel: assembler Por la forma como se ejecutan Hay lenguajes compilados e interpretados. Los lenguajes compilados necesitan de un programa especial que lea el cdigo fuente y cree un archivo binario ejecutable para una plataforma especfica. Ejm: C++, Pascal. Los lenguajes interpretados necesitan de un programa que traduzca en directo el cdigo fuente escrito a instrucciones de la plataforma en la que se ejecutan. Ejm: Python, Visual Basic Script. Los primeros son ms rpidos, mientras que los segundos son ms lentos, esto debido a que al compilar un programa las ordenes son ms entendibles para la computadora, mientras que al interpretarlo la mquina primero debe leer el cdigo y convertir al paso las instrucciones a instrucciones de mquina entendibles para ella. Entorno de Desarrollo Integrado Entorno de Desarrollo Integrado (en ingls Integrated Development Environment 'IDE'): Es un programa compuesto por un conjunto de herramientas para un programador. Estos IDE son programas que sirven para programar, ya sea en un lenguaje de programacin o en varios lenguajes. Los IDE que permiten crear programas en muchos lenguajes de programacin permiten usar un solo programa para trabajar en varios lenguajes de programacin, es decir no limitan al programador.

1.2. Anlisis de los Datos 2. Anlisis del problema El propsito del anlisis de un problema es ayudar al programador para llegar a una cierta comprensin de la naturaleza del problema. El problema debe estar bien definido si se desea llegar a una solucin satisfactoria. Para poder definir con precisin el problema se requiere que las especificaciones de entrada, proceso y salida sean descritas con detalles. Entrada, son todos los datos que hay que ingresar para la resolucin del problema. Proceso, son los diferentes procedimientos en los cuales usare los datos proporcionados por el usuario en el paso anterior para resolver el problema. Salida, la resolucin del problema. Una buena definicin del problema, junto con una descripcin detallada de las especificaciones de entrada y salida, son los requisitos ms importantes para llegar a una solucin eficaz. El anlisis del problema exige una lectura previa del problema a fin de obtener una idea general de lo que se solicita . la segunda lectura deber servir para responder a las preguntas: Qu informacin debe proporcionar la resolucin del problema? Qu datos se necesitan para resolver el problema?

La respuesta a la primera pregunta indicara los resultados deseados o las salidas del problema. La respuesta a la segunda pregunta indicara que datos proporcionan o las entradas del problema. En esta fase debemos aprender a analizar la documentacin de la empresa, investigar, observar todo lo que rodea el problema. 1.3. Diseo de la solucin 3. Diseo de la solucin Una computadora no tiene la capacidad para solucionar ms que cuanto se le proporcionan los sucesivos pasos a realizar. Estos pasos sucesivos que indican las instrucciones a ejecutar por la maquina constituyen, como ya sabemos el algoritmo. La informacin proporcionada al algoritmo constituye su entrada y la informacin producida por el algoritmo constituye su salida. Los problemas complejos se pueden resolver ms eficazmente con la computadora cuando se rompen en sub problemas que sean ms fciles de solucionar que el original. La descomposicin del problema original en sub problemas ms simples y a continuacin dividir estos sub problemas en otros ms simples que puedan ser implementados para su solucin en la computadora de denomina diseo descendente (top - down design ).

Es preciso representar el algoritmo mediante una determinada herramienta de programacin: diagramas de flujo, pseudocdigo o diagramas N - S. 1.4. Codificacin 4. Codificacin Es el algoritmo traspasado a la computadora a travs de un lenguaje de programacin, debe ser escrito de acuerdo a las reglas gramaticales o sintaxis del mismo. Generamos un algoritmo el cual se denomina cdigo, y al pasarlo a un lenguaje de programacin se le llama cdigo fuente 1 .5. Prueba y Depuracin 5. Compilacin y ejecucin Compilacin, el lenguaje de programacin seleccionado revisa que ya no halla errores en el cdigo fuente. Ejecucin, ejecutar el programa despus del ser compilado. 6. Verificacin y pruebas Revisar que el programa de los resultados que el usuario quiere, hay que revisar si hay algn error el cual puede ser de tipo lgico, de semntica o ejecucin. 7. Depuracin Corregir los errores encontrados en la etapa anterior, si hubiese algn error se tiene que regresar hasta la etapa que sea necesaria para que la solucin sea la que el usuario requiere. 1.6. Documentacin 8. Documentacin Son todos los comentarios, referencias desde que se dio el problema hasta que se encontr la solucin. a) documentacin interna, es el encabezado, descripcin, declaracin del problema, son todos los comentarios que puedan llegar a servir dentro del cdigo fuente. b) documentacin externa, son los manuales que se hacen para una mejor ejecucin del programa, ah se explicara cmo usar el programa. 1.7. Mantenimiento 9. Capacitacin Una vez que tenemos lo manuales viene la capacitacin de usuarios, como no a todos les interesa los mismo porque hay diferentes tipos de usuarios, se tienen que dividir de acuerdo a sus conveniencias.

10. Implantacin o implementacin del sistema Hay diferentes formas de implementar el sistema: Depende del tamao del sistema Si existiera un sistema se tiene que poner el nuevo y quitar el que ya estaba. Trabajar primero con el sistema viejo(si existe), y despus empezar a trabajar con el nuevo. Sistemas implantados por regiones. Trabajar con el sistema viejo (si existe) y con el sistema nuevo simultneamente despus quitar el sistema viejo. Ir quitando el sistema viejo(si existe) poco a poco e ir implantando el sistema nuevo.

11. Mantenimiento El mantenimiento preventivo es que hagamos lo posible por no caer en errores, la actualizacin si el usuario tiene la necesidad de quitar o poner algo; tngase en cuenta que cuando surge mantenimiento tenemos que volver a hacer todos los pasos anteriores revisando que todas la condiciones sean favorables alrededor del sistema.

UNIDAD II

ALGORITMOS

2.1. Definicin y caractersticas de los algoritmos. Definicin formal En general, no existe ningn consenso definitivo en cuanto a la definicin formal de algoritmo. Muchos autores los sealan como listas de instrucciones para resolver un problema abstracto, es decir, que un nmero finito de pasos convierten los datos de un problema (entrada) en una 1 2 3 4 5 6 solucin (salida). Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versin modificada de la 7 criba de Eratstenes que nunca termine de calcular nmeros primos no deja de ser un algoritmo. A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando 8 9 modelos matemticos como mquinas de Turing entre otros. Sin embargo, estos modelos estn sujetos a un tipo particular de datos como son nmeros, smbolos o grficas mientras que, en 3 1 general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. En general, la parte comn en todas las definiciones se puede resumir en las siguientes tres propiedades 7 siempre y cuando no consideremos algoritmos paralelos: Tiempo secuencial. Un algoritmo funciona en tiempo discretizado paso a paso, definiendo as una secuencia de estados "computacionales" por cada entrada vlida (la entrada son los datos que se le suministran al algoritmo antes de comenzar). Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementacin (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo. Exploracin acotada. La transicin de un estado al siguiente queda completamente determinada por una descripcin fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de trminos del estado actual. En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigedad y sin hacer referencia a una computadora en particular, y adems tiene un lmite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definicin abarca tanto a algoritmos prcticos como aquellos que solo funcionan en teora, por ejemplo el mtodo de Newton y la eliminacin de Gauss-Jordan funcionan, al menos en principio, con nmeros de precisin infinita; sin embargo no es posible programar la precisin 10 infinita en una computadora, y no por ello dejan de ser algoritmos. En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda funcin calculable se puede programar en una mquina de Turing (o equivalentemente, 10 en un lenguaje de programacin suficientemente general): Aritmetizabilidad. Solamente operaciones innegablemente calculables estn disponibles en el paso inicial. 2.2. Reglas para la construccin de Algoritmos. Medios de expresin de un algoritmo Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocdigo y diagramas de flujo evita

Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocdigo y diagramas de flujo evita muchas ambigedades del lenguaje natural. Dichas expresiones son formas ms estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programacin especfico. La descripcin de un algoritmo usualmente se hace en tres niveles: 1. Descripcin de alto nivel. Se establece el problema, se selecciona un modelo matemtico y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 2. Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que encuentran la solucin. 3. Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin especfico o algn objeto capaz de llevar a cabo instrucciones. Tambin es posible incluir un teorema que demuestre que el algoritmo es correcto, un anlisis de complejidad o ambos. Sistemas formales La teora de autmatas y la teora de funciones recursivas proveen modelos matemticos que formalizan el concepto de algoritmo. Los modelos ms comunes son la mquina de Turing, mquina de registro y funciones -recursivas. Estos modelos son tan precisos como un lenguaje mquina, careciendo de expresiones coloquiales o ambigedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementacin. Implementacin Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito elctrico o un aparato mecnico y elctrico. Algunos algoritmos inclusive se disean especialmente para implementarse usando lpiz y papel. El algoritmo de multiplicacin tradicional, el algoritmo de Euclides, la criba de Eratstenes y muchas formas de resolver la raz cuadrada son slo algunos ejemplos. Variables Son elementos que toman valores especficos de un tipo de datos concreto. La declaracin de una variable puede realizase comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables: 1. Mediante una sentencia de asignacin. 2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read'). Ejemplo: ... i:=1; read(n); while i < n do begin (* cuerpo del bucle *)

i := i + 1 end; ... Estructuras secuenciales La estructura secuencial es aquella en la que una accin sigue a otra en secuencia. Las operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso. La asignacin de esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona ser reconocida con el nombre de la variable que recibe el valor. La asignacin se puede clasificar de la siguiente forma: 1. Simples: Consiste en pasar un valor constante a una variable (a 15) 2. Contador: Consiste en usarla como un verificador del nmero de veces que se realiza un proceso (a a + 1) 3. Acumulador: Consiste en usarla como un sumador en un proceso (a a + b) 4. De trabajo: Donde puede recibir el resultado de una operacin matemtica que involucre muchas variables (a c + b*2/4). Un ejemplo de estructura secuencial, como obtener la rea de un tringulo: Inicio ... float b, h, a; printf("Diga la base"); scanf("%f", &b); printf("Diga la altura"); scanf("%f", &h); a = (b*h)/2; printf("El rea del tringulo es %f", a) ... Fin Algoritmos como funciones Artculo principal: Teora de la computabilidad

Esquemtica de un algoritmo solucionando un problema de ciclo hamiltoniano. Un algoritmo se puede concebir como una funcin que transforma los datos de un problema (entrada) en los datos de una solucin (salida). Ms an, los datos se pueden representar a su vez 1 9 11 como secuencias de bits, y en general, de smbolos cualesquiera. Como cada secuencia de bits representa a un nmero natural (vase Sistema binario), entonces los algoritmos son en esencia funciones de los nmeros naturales en los nmeros naturales que s se pueden calcular. Es decir que todo algoritmo calcula una funcin codificacin de un problema o de una solucin. donde cada nmero natural es la

En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando entran a un bucle infinito. Cuando esto ocurre, el algoritmo nunca devuelve ningn valor de salida, y podemos

decir que la funcin queda indefinida para ese valor de entrada. Por esta razn se considera que los algoritmos son funciones parciales, es decir, no necesariamente definidas en todo su dominio de definicin. Cuando una funcin puede ser calculada por medios algortmicos, sin importar la cantidad de memoria que ocupe o el tiempo que se tarde, se dice que dicha funcin es computable. No todas las funciones entre secuencias datos son computables. El problema de la parada es un ejemplo. 2.3. Tipos de algoritmos. Tipos de algoritmos segn su funcin Algoritmo de ordenamiento Algoritmo de bsqueda

Tcnicas de diseo de algoritmos Algoritmos voraces (greedy): seleccionan los elementos ms prometedores del conjunto de candidatos hasta encontrar una solucin. En la mayora de los casos la solucin no es ptima. Algoritmos paralelos: permiten la divisin de un problema en subproblemas de forma que se puedan ejecutar de forma simultnea en varios procesadores. Algoritmos probabilsticos: algunos de los pasos de este tipo de algoritmos estn en funcin de valores pseudoaleatorios. Algoritmos determinsticos: el comportamiento del algoritmo es lineal: cada paso del algoritmo tiene nicamente un paso sucesor y otro antecesor. Algoritmos no determinsticos: el comportamiento del algoritmo tiene forma de rbol y a cada paso del algoritmo puede bifurcarse a cualquier nmero de pasos inmediatamente posteriores, adems todas las ramas se ejecutan simultneamente. Divide y vencers: dividen el problema en subconjuntos disjuntos obteniendo una solucin de cada uno de ellos para despus unirlas, logrando as la solucin al problema completo. Metaheursticas: encuentran soluciones aproximadas (no ptimas) a problemas basndose en un conocimiento anterior (a veces llamado experiencia) de los mismos. Programacin dinmica: intenta resolver problemas disminuyendo su coste computacional aumentando el coste espacial. Ramificacin y acotacin: se basa en la construccin de las soluciones al problema mediante un rbol implcito que se recorre de forma controlada encontrando las mejores soluciones. Vuelta atrs (backtracking): se construye el espacio de soluciones del problema en un rbol que se examina completamente, almacenando las soluciones menos costosas.

2.4. Ejercicios con algoritmos. Ejemplo de algoritmo El problema consiste en encontrar el mximo de un conjunto de nmeros. Para un ejemplo ms complejo vase Algoritmo de Euclides.

Descripcin de alto nivel Dado un conjunto finito C de nmeros, se tiene el problema de encontrar el nmero ms grande. Sin prdida de generalidad se puede asumir que dicho conjunto no es vaco y que sus elementos estn numerados como . Es decir, dado un conjunto todo elemento x que pertenece al conjunto C. se pide encontrar m tal que para

Para encontrar el elemento mximo, se asume que el primer elemento (c0) es el mximo; luego, se recorre el conjunto y se compara cada valor con el valor del mximo nmero encontrado hasta ese momento. En el caso que un elemento sea mayor que el mximo, se asigna su valor al mximo. Cuando se termina de recorrer la lista, el mximo nmero que se ha encontrado es el mximo de todo el conjunto. Descripcin formal El algoritmo puede ser escrito de una manera ms formal en el siguiente pseudocdigo:

Algoritmo Encontrar el mximo de un conjunto funcin max(C) //C es un conjunto no vaco de nmeros// n | C | // | C | es el nmero de elementos de C// m c0 para i 1 hasta n hacer si ci > m entonces m ci devolver m

Sobre la notacin: "" representa una asignacin: m x significa que la variable m toma el valor de x; "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el mximo de C).

Implementacin En lenguaje C++: int max(int c[], int n) {

int i, m = c[0]; for (i = 1; i < n; i++) if (c[i] > m) m = c[i]; return m; EJERCICIOS 1.1 X(X-1) 1. 2. 3. 4. 5. 6. 7. Inicio Var; x, y :Enteros X=0, Z=0 Dame X Z=X-1 S Z 0 entonces vea 5 sino X = X * Z Fin

1.2 (x) + (x+1)..... x = 100 1. 2. 3. 4. 5. 6. Inicio Var; x : Enteros x=1 x=x+1 S x = 200 1. 2. 3. 4. 5. 6. 7. 8. 1.4 X Inicio Var; x, z, Suma :Enteros x = 0, z = 0, suma=0 Dame X z=z+2 Suma= Suma + (x + z) Si Suma es >= 200 vea a 8 sino vea a 5 Finx-y

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 1.5

Inicio Var; X,Y,Z : Enteros X=0, Y=0, Z=0 Dame X Dame Y Si Y > X entonces vea 5 sino vea 7 Z=X W = (x - y) - 1 Si W= 0 entonces vea 10 sino vea 11 Z=1 Z=Z*X Si w 0 entonces vea 7 sino vea 10 Fin

Ao Bisiesto

1. 2. 3. 4. 5. 6. 7. 8. 1.6

Inicio a, z : Entero Dame A z = a mod 4 Si z = 0 entonces vea 6 si no vea 7 Imprime el ao es bisiesto vea 8 Imprime el ao no es bisiesto vea 8 Fin

Nmero Mayor, Medio y menor 1. 2. 3. 4. 5. 6. 7. 8. 9. Inicio a, b : Reales Dame a Dame b S a > b entonces vea 7 S no entonces vea 8 Imprime "a" es mayor que b vea 9 Imprime "b" es mayor que a vea 9 Fin

1.7

Distinguir si es o no es nmero primo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Inicio a,n,b : Entero Dame a S (n > 100) o (n < 1) entonces vea 3 S (n = 1) o (n =2) entonces vea 11 a=1 a=a+1 b = n mod a Si (b = 0) entonces vea 7, sino vea 10 N es primo vea 12 N no es primo ve a 12 Fin

1.8

x!/1 + x!/3 + x!/2 + x!/5 + x!/4 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Inicio Var Fac, x,z, y :entero w:Real Dame X fac = x z=x z=z-1 fac = fac * z S z 1 entonces vea 6 X = -2 x = x + 3 vea 11 x = x - 1 S x= 1 entonces w=w + (fac/x) x = x + 2 fin si si no vea 13 S x = Mayor que (Q) < = Menor que (Q) " = Mayor o igual (Q) " = Menor o igual (Q) < > = Diferente desigual = Igual OPERADORES LGICOS: AND= NOT= OR= OPERADORES ARITMETICOS: + = Suma - = Resta * = Multiplicacin / = Divisin ^ = Exponente o potencia Ejemplos: TASG = TASG + ASD NETO = TASG - TDED ISLR = SDO * 2% PROM = TNOTAS / N ALUMNOS 1.- Diagrama de Flujo que calcule el 13,5% de cualquier nmero; lo muestre por impresora. - Identificacin de variables y anlisis de proceso. N= 0

C= 13,5% R= N * 13,5% R= N*C 1.- Algoritmo y Diagrama de Flujo para calcular la masa de un objeto que se mueve con una fuerza y una aceleracin, donde: F= m.a, Imprimir el resultado con su respectivo mensaje. - Identificacin de variables y anlisis de proceso. F= m * a m= f / a 1.- Algoritmo y Diagrama de Flujo para calcular el rea de un crculo donde: a= * r2 - Identificacin de variables y anlisis de proceso. a= 0 r= 0 = 3,14 A.- Algoritmo que describe el proceso de verificar el Por qu?, de tu solvencia de examen dice: No puede presentar. 1.- Inicio. 2.- Leer solvencia. 3.- Verificar la causa del problema. 4.- Si el problema es falta de pago. 5.- Cancelo la mensualidad. 6.- Entonces, puedo presentar. 7.- Si el problema es falta de nota 8.- Entonces, no puedo presentar 9.- Error en el Departamento de Control de Estudios. 10.- Soluciono el problema. 11.- Entonces, puedo presentar. 12.- Fin. B.- Algoritmo que ayude a verificar porqu el torniquete del Metro de Caracas, me impide salir.

1.- Inicio 2.- Si el torniquete est DAADO. 3.- Entonces, voy a otro torniquete, puedo salir. 4.- Si el importe del ticket es menor. 5.- Entonces, pago la diferencia. 6.- Si el ticket est deteriorado. 7.- Entonces, me dirijo al Operador, puedo salir. 8.- Fin. c.- Algoritmo que descarte Por qu , el CPU del computador que se te asign en el Laboratorio no enciende. 1.- Inicio 2.- Verifico la causa del problema. 3.- Si el problema es falta de energa elctrica. 4.- Entonces, no puedo utilizar el computador, fin. 5.- Si el problema es porque no est enchufado. 6.- Enchufo el cable soluciono el problema. 7.- Si el problema es de carcter tcnico. 8.- Entonces no puedo utilizar el computador, fin. 9.- Si el problema es que el computador est Daado. 10.- Entonces, utilizo otro computador. 11.- Fin. 3.1.1. Aritmticos Operadores aritmticos Sinopsis Los operadores aritmticos se usan para realizar clculos de aritmtica de nmeros reales y de aritmtica de punteros. C++ dispone de los siguientes: + Dos posibilidades: Suma binaria ; ms unitario .

++ -* / %

Incremento unitario (dos clases) Dos posibilidades: Resta binaria menos unitario . Decremento unitario (dos clases ) Multiplicacin (este smbolo tiene tambin otros usos ) Divisin Resto o mdulo . Nota: la aritmtica de nmeros reales es la clsica de la escuela primaria. La de punteros es una aritmtica un tanto especial y rudimentaria .

Observaciones Los operadores aritmticos pertenecen a dos grupos: unos aceptan operandos de tipo numrico; otros aceptan operandos de tipo puntero-a-tipoX [3]. Adems son de dos tipos; unarios (que aceptan un solo operando) y binarios (que aceptan dos). La clasificacin es la siguiente: Operadores aritmticos unarios: + ++ -Ms unitario. Incremento unitario (dos clases) menos unitario. Decremento unitario (dos clases)

Operadores aritmticos binarios: + * / % Suma binaria. Resta binaria. Multiplicacin Divisin. Resto o mdulo.

Estos ltimos pueden combinarse con el de asignacin = para dar origen a operadores compuestos son los siguientes: += -= *= /= %= Asigna suma Asigna diferencia (resta) Asigna producto Asigna divisin Asigna resto (mdulo)

Tenga en cuenta que existen distintos operadores enmascarados bajo los mismos smbolos + y -. Es un caso de sobrecarga incluida en el propio lenguaje . Como en el resto de los casos de

sobrecarga, el compilador deduce por el contexto de que versin del operador se trata. Como veremos inmediatamente, en C++ es perfectamente vlida una expresin del tipo: int x = *ptr+-*++ptr; En el ejemplo siguiente se muestran los casos posibles: int ai[] = {2, 3}; int* ptr = ai; int r1 = +ai[0]; // L.3: ms unitario sobre tipo numrico int r2 = -ai[1] // L.3: menos unitario sobre tipo numrico int r3 = ai[0] + ai[1]; // L.4: 2 + 3 suma binaria (de enteros) int r4 = ai[1] ai[0] // L.5: 3 2 resta binaria (de enteros) int r5 = ai[0] + -ai[1]; // L.6: 2 +(-3) suma binaria seguida de menos unitario int r6 = *ptr + -*++ptr; // L.7: Suma binaria (de enteros) a + (-b)

En L.7 coexisten tres operadores aritmticos no homogneos (de izquierda a derecha): + Suma binaria entre valores numricos tipo int . Los valores *ptr y -*++ptr Negacin unitaria de un valor numrico tipo int ; el valor *(++ptr)

++ Preincremento de un puntero-a-int . Equivale a suma binaria de puntero y entero: ++ptr == ptr = ptr + 1 Nota: aunque vlida, la sentencia de L.7 es un ejemplo de expresin peligrosa y desaconsejada. En se ha presentado una explicacin del sorpresivo resultado ( 0 ) que se obtiene para L.6. Suma y resta binaria En el primer caso: suma y resta binaria, caben dos posibilidades sintcticas: a- expresin-suma + expresin-de-multiplicacin b- expresin-suma - expresin-de-multiplicacin Operador Suma binaria Las posibilidades para los operandos en la expresin A + B son los siguientes: 1. A y B son tipos aritmticos, enteros o fraccionarios. En este caso ambos operandos estn sujetos a las posibles conversiones aritmticas estndar y el resultado es la suma aritmtica de ambos. Ejemplo: int int z = x + y; x // z == 30 = 10, y = 20;

2. A es un entero y B es un puntero a objeto. Ejemplo:

int arr[5] = int* ptr = int x = *(2 + ptr); // x == 3

{1, &arr[0];

2, //

3, Seala

4, a

5}; 1

3. A es un puntero a objeto y B es un entero. En estos dos ltimos casos se aplican las reglas de aritmtica de puntero. Ejemplo: int z = *(ptr + 3); Operador Resta binaria. Las posibilidades para los operandos en la expresin A - B son los siguientes: 1. A y B son de tipo aritmtico, entero o fraccionario; las posibilidades son las mismas que en el caso 1 de la suma binaria expuesta anteriormente. El resultado es la resta aritmtica de ambos operandos. Ejemplo: int int z = x - y; x // z == -10 = 10, y = 20; // x == 4

2. A y B son punteros a objetos de tipos compatibles. Ejemplo: int arr[5] = int* pt1 = int* pt2 = int x = pt2 - pt1; // x == 4 {1, &arr[0]; &arr[4]; 2, // // 3, Seala Seala 4, a a 5}; 1 5

3. A es un puntero a objeto y B es un entero. En estos dos ltimos casos se aplican las reglas de aritmtica de punteros Ejemplo: int arr[5] = int* ptr = int x = *(ptr - 2); // x == 3 Operadores Unitarios Cuando los operadores + y - se utilizan como operadores unitarios, las posibilidades sintcticas son: + - {1, &arr[4]; 2, // 3, seala 4, a 5}; 5

En ambos casos debe ser de tipo numrico. Los resultados son respectivamente: Valor del operando expresin-cast despus de cualquier promocin interna que sea necesaria. Valor negativo del operando expresin-cast despus de cualquier promocin interna que se necesite.

Nota: recuerde que cuando + y - se utilizan como operadores unitarios, tienen mayor precedencia que cuando se utilizan como suma y resta binarias ( Ejemplo int x = int r1 = int r2 = + int r3 = int r4 = + (x - y); // r4 == 4 7, (y (y (x x); y); x); y // // // = r1 r2 r3 == == == 3; 4 -4 -4 4.9.0a).

Operadores multiplicacin y divisin Los operadores binarios * (multiplicacin) y / (divisin) realizan sus operaciones aritmticas correspondientes con todos los tipos numricos (enteros y fraccionarios). Sintaxis Expresin-de-multiplicacin * expresin-cast Expresin-de-multiplicacin / expresin-cast Operador mdulo El operador binario % (operador de mdulo) devuelve el resto de la divisin de dos enteros, no puede ser utilizado con nmeros fraccionarios float o double [2]. Sintaxis expresin-de-multiplicacin % expresin-cast Ejemplo int resto = cout x == 5 y n == 4

El predecremento resta uno antes de la evaluacin de la expresin. x = --n ; // -> x == 4 y n == 4

En ambos casos, el operando debe ser una variable, no una expresin. Por ejemplo: (x+y)++ es ilegal. 7.1 Para evidenciar la diferencia entre preincremento y postincremento, observe las salidas que se obtienen con este pequeo programa segn se van ejecutando las diversas lneas. Para interpretarlas correctamente debe tener en cuenta la precedencia de los operadores y recordar que, en todos los casos, el argumento recibido por printf es un puntero-a-carcter (char*). Tambin deben recordarse las reglas de mbito de los argumentos pasados a funciones. char * s = "Hola mundo"; printf("Letra: \"%c\"\n", *s); printf("Letra: \"%c\"\n", *s+1); // Letra "H" // Letra "I"

printf("Letra: \"%c\"\n", *(s+1)); // Letra "o" printf("Letra: \"%c\"\n", *s++); printf("Letra: \"%c\"\n", *s); printf("Letra: \"%c\"\n", *++s); printf("Letra: \"%c\"\n", *s); // Letra "H" // Letra "o" // Letra "l" // Letra "l

3.1.2. Relacinales Operadores relacionales Sinopsis Los operadores relacionales, tambin denominados operadores binarios lgicos y de comparacin, se utilizan para comprobar la veracidad o falsedad de determinadas propuestas de relacin (en realidad se trata respuestas a preguntas). Las expresiones que los contienen se denominan expresiones relacionales. Aceptan diversos tipos de argumentos, y el resultado, que es la respuesta a la pregunta, es siempre del tipo cierto/falso, es decir, producen un resultado booleano Si la propuesta es cierta, el resultado es true (un valor distinto de cero), si es falsa false (cero). C++ dispone de los siguientes: < > = == != Menor que Mayor que Menor o igual que Mayor o igual que Igual que (identidad) Desigual que (desigualdad)

Sintaxis expresin-relacional expresin-relacional expresin-relacional expresin-relacional expresin-de-igualdad expresin-de-igualdad Comentario

< shift-expresion > shift-expresion = shift-expresion == expresin-relacional != expresin-relacional

Como puede verse, todos ellos son operadores binarios (utilizan dos operandos), de los cuales, dos de ellos son de igualdad: == y !=, y sirven para verificar la igualdad o desigualdad entre valores aritmticos o punteros. Estos dos operadores pueden comparar ciertos tipos de punteros, mientras que el resto de los operadores relacionales no pueden utilizarse con ellos. Observe que los operadores == y != tienen una menor precedencia que el resto de los operadores relacionales < y >, =. El operador de desigualdad != tiene otra forma estndar de designacin mediante la palabra clave not_eq Cualquiera que sea el tipo de los operandos, por definicin, un operador relacional, produce un bool (true o false) como resultado, aunque en determinadas circunstancias puede producirse una conversin automtica de tipo a valores int (1 si la expresin es cierta y 0 si es falsa).

Ejemplo de comprobacin: #include int main() { float f = 12.1, g = 12.2; cout