Download taller de lenguajes de programación y c++
Document related concepts
Transcript
Taller de algoritmo Programación c++ 30/03/2013 Yefrin Gómez romo Docente Sandy romero cuello Uniguajira Ing. sistemas – diurna - mañana I semestre Riohacha – guajira TALLER DE LENGUAJES DE PROGRAMACIÓN Y C++ 1. Que es un lenguaje de programación y cuál es su objetivo 2. Como se clasifican los lenguajes de programación de ejemplos 3. Haga un cuadro comparativo entre lenguaje de programación estructurado y lenguaje de programación orientado a objetos. 4. Que es el lenguaje C++ y cuáles son sus fortalezas y características fundamentales. En la actualidad cuantas versiones de C++ 5. Como es la estructura de un programa en C++, identifique cada uno de sus elementos. De un ejemplo de un programa. 6. Cuáles son los tipos de datos que existen en C++ 7. Que es una librería en C++ , enuncie las más importantes y diga para que sirven 8. Como se declara una librería. Como se declara una variable, una constante. 9. Como se asigna en C++ 10. Como se lee y se escribe en C++ con la librería stdio.h 11. Como se lee y se escribe en C++ con la librería iostream.h 12. Como se representan las primitivas secuenciales, condicionales incluyendo el DD y los ciclos repetitivos, para, mientras que y haga hasta. 13. Pase los cinco primeros algoritmos que tiene en su libreta a C++ Nota: El trabajo es individual y es en físico puede ser impreso o a manuscrito, para reforzar la investigación véase el video que aparece en la wiki. Solución 1 - Lenguaje de programación Un lenguaje de programación es un idioma artificial diseñado para expresar procesos que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana. Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación. También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos: • El desarrollo lógico del programa para resolver un problema en particular. • Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa). • Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina. • Prueba y depuración del programa. • Desarrollo de la documentación. Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos). Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa. Objetivos Didácticos Pues el auténtico objetivo de las mismas es mostrar los rangos, las posibilidades y tipos de lenguajes que hay. •Que el alumno conozca las características y propiedades de los distintos tipos de lenguajes de programación. • Que el alumno adquiera experiencia en el uso de al menos un lenguaje de programación de cada uno de los tipos mostrados. • Que el alumno aumente su capacidad para aprender nuevos lenguajes. • Adquisición del conocimiento necesario para elegir el lenguaje más adecuado a cada situación. • Preparar al alumno para la comprensión de los temas relacionados con la implementación de los lenguajes de programación 2 - Como se clasifican los lenguajes de programación de ejemplos Los lenguajes de programación se pueden clasificar según varios criterios. He encontrado doce en total: Nivel de abstracción, propósito, evolución histórica, manera de ejecutarse, manera de abordar la tarea a realizar, paradigma de programación, lugar de ejecución, concurrencia, interactividad, realización visual, determinismo y productividad. Hay que tener en cuenta también, que en la práctica, la mayoría de lenguajes no pueden ser puramente clasificados en una categoría, pues surgen incorporando ideas de otros lenguajes y de otras filosofías de programación, pero no importa al establecer las clasificaciones, pues el auténtico objetivo de las mismas es mostrar los rangos, las posibilidades y tipos de lenguajes que hay. 1. Nivel de abstracción. Según el nivel de abstracción, o sea, según el grado de cercanía a la máquina: Lenguajes de bajo nivel: La programación se realiza teniendo muy en cuenta las características del procesador. Ejemplo: Lenguajes ensamblador. Lenguajes de nivel medio: Permiten un mayor grado de abstracción pero al mismo tiempo mantienen algunas cualidades de los lenguajes de bajo nivel. Ejemplo: C puede realizar operaciones lógicas y de desplazamiento con bits, tratar todos los tipos de datos como lo que son en realidad a bajo nivel (números), etc. Lenguajes de alto nivel: Más parecidos al lenguaje humano. Manejan conceptos, tipos de datos, etc., de una manera cercana al pensamiento humano ignorando (abstrayéndose) del funcionamiento de la máquina. Ejemplos: Java, Ruby. Hay quien sólo considera lenguajes de bajo nivel y de alto nivel, (en ese caso, C es considerado de alto nivel). Lenguaje maquina: Los ordenadores sólo entienden un lenguaje específico para cada máquina, que se denomina código máquina o Lenguaje Máquina. Este lenguaje utiliza un código binario (símbolos “0" y “1"). Las órdenes que se dan a un ordenador han de ir codificadas en instrucciones, y estas forman los programas. Las instrucciones tienen dos partes diferenciadas: código de operación y código de operando: CODOP CODOPERANDO En la primera, se codifica la operación que realiza la instrucción. Este código de operación siempre es único para cada instrucción. En la segunda se indica la dirección de memoria en la que se encuentra el operando, hasta un máximo de tres, sobre el o los que se aplicarán en la operación. Puesto que cada tipo de ordenador tiene su código máquina específico, para programar en este lenguaje el programador debe conocer la arquitectura física de la computadora con cierto detalle (registros de la CPU, palabras de memoria,...). La estructura del lenguaje máquina está totalmente adaptada a los circuitos de la computadora y muy alejada del lenguaje que empleamos normalmente para expresar y analizar los problemas que hoy día son resolubles con la computadora. Por ejemplo, para hacer cálculos aritméticos disponemos de un “lenguaje” matemático fácil de comprender y claro, que no se parece en nada al código máquina necesario para hacer dichos cálculos. 2. Propósito. Según el propósito, es decir, el tipo de problemas a tratar con ellos: Lenguajes de propósito general: Aptos para todo tipo de tareas: Ejemplo: C. Lenguajes de propósito específico: Hechos para un objetivo muy concreto. Ejemplo: Csound (para crear ficheros de audio). Lenguajes de programación de sistemas: Diseñados para realizar sistemas operativos o drivers. Ejemplo: C. Lenguajes de script: Para realizar tareas varias de control y auxiliares. Antiguamente eran los llamados lenguajes de procesamiento por lotes (batch) o JCL (“Job Control Lenguajes”). Se subdividen en varias clases (de Shell, de GUI, de programación web, etc.). Ejemplos: bash (shell), mIRC script, Java Script (programación web). 3. Evolución histórica. Con el paso del tiempo, se va incrementando el nivel de abstracción, pero en la práctica, los de una generación no terminan de sustituir a los de la anterior: Lenguajes de primera generación (1GL): Código máquina. Lenguajes de segunda generación (2GL): Lenguajes ensamblador. Lenguajes de tercera generación (3GL): La mayoría de los lenguajes modernos, diseñados para facilitar la programación a los humanos. Ejemplos: C, Java. Lenguajes de cuarta generación (4GL): Diseñados con un propósito concreto, o sea, para abordar un tipo concreto de problemas. Ejemplos: NATURAL, Matemática. Lenguajes de quinta generación (5GL): La intención es que el programador establezca el qué problema ha de ser resuelto y las condiciones a reunir, y la máquina lo resuelve. Se usan en inteligencia artificial. Ejemplo: Prolog. 4. Manera de ejecutarse. Según la manera de ejecutarse: Lenguajes compilados: Un programa traductor traduce el código del programa (código fuente) en código máquina (código objeto). Otro programa, el enlazador, unirá los ficheros de código objeto del programa principal con los de las librerías para producir el programa ejecutable. Ejemplo: C. Lenguajes interpretados: Un programa (intérprete), ejecuta las instrucciones del programa de manera directa. Ejemplo: Lisp. También los hay mixtos, como Java, que primero pasan por una fase de compilación en la que el código fuente se transforma en “bytecode”, y este “bytecode” puede ser ejecutado luego (interpretado) en ordenadores con distintas arquitecturas (procesadores) que tengan todos instalados la misma “máquina virtual” Java. 5. Manera de abordar la tarea a realizar. Según la manera de abordar la tarea a realizar, pueden ser: Lenguajes imperativos: Indican cómo hay que hacer la tarea, es decir, expresan los pasos a realizar. Ejemplo: C. Lenguajes declarativos: Indican qué hay que hacer. Ejemplos: Lisp, Prolog. Otros ejemplos de lenguajes declarativos, pero que no son lenguajes de programación, son HTML (para describir páginas web) o SQL (para consultar bases de datos). 6. Paradigma de programación. El paradigma de programación es el estilo de programación empleado. Algunos lenguajes soportan varios paradigmas, y otros sólo uno. Se puede decir que históricamente han ido apareciendo para facilitar la tarea de programar según el tipo de problema a abordar, o para facilitar el mantenimiento del software, o por otra cuestión similar, por lo que todos corresponden a lenguajes de alto nivel (o nivel medio), estando los lenguajes ensambladores “atados” a la arquitectura de su procesador correspondiente. Los principales son: Lenguajes de programación procedural: Divide el problema en partes más pequeñas, que serán realizadas por subprogramas (subrutinas, funciones, procedimientos), que se llaman unas a otras para ser ejecutadas. Ejemplos: C, Pascal. Lenguajes de programación orientada a objetos: Crean un sistema de clases y objetos siguiendo el ejemplo del mundo real, en el que unos objetos realizan acciones y se comunican con otros objetos. Ejemplos: C++, Java. Lenguajes de programación funcional: La tarea se realiza evaluando funciones, (como en Matemáticas), de manera recursiva. Ejemplo: Lisp. Lenguajes de programación lógica: La tarea a realizar se expresa empleando lógica formal matemática. Expresa qué computar. Ejemplo: Prolog. Hay muchos paradigmas de programación: Programación genérica, programación reflexiva, programación orientada a procesos, etc. 7. Lugar de ejecución. En sistemas distribuidos, según dónde se ejecute: Lenguajes de servidor: Se ejecutan en el servidor. Ejemplo: PHP es el más utilizado en servidores web. Lenguajes de cliente: Se ejecutan en el cliente. Ejemplo: Java Script en navegadores web. 8. Concurrencia. Según admitan o no concurrencia de procesos, esto es, la ejecución simultánea de varios procesos lanzados por el programa: Lenguajes concurrentes. Ejemplo: Ada. Lenguajes no concurrentes. Ejemplo: C. 9. Interactividad. Según la interactividad del programa con el usuario u otros programas: Lenguajes orientados a sucesos: El flujo del programa es controlado por la interacción con el usuario o por mensajes de otros programas/sistema operativo, como editores de texto, interfaces gráficos de usuario (GUI) o kernels. Ejemplo: Visual Basic, lenguajes de programación declarativos. Lenguajes no orientados a sucesos: El flujo del programa no depende de sucesos exteriores, sino que se conoce de antemano, siendo los procesos batch el ejemplo más claro (actualizaciones de bases de datos, colas de impresión de documentos, etc.). Ejemplos: Lenguajes de programación imperativos. 10. Realización visual. Según la realización visual o no del programa: Lenguajes de programación visual: El programa se realiza moviendo bloques de construcción de programas (objetos visuales) en un interfaz adecuado para ello. No confundir con entornos de programación visual, como Microsoft Visual Studio y sus lenguajes de programación textuales (como Visual C#). Ejemplo: Mind script. Lenguajes de programación textual: El código del programa se realiza escribiéndolo. Ejemplos: C, Java, Lisp. 11. Determinismo. Según se pueda predecir o no el siguiente estado del programa a partir del estado actual: Lenguajes deterministas. Ejemplos: Todos los anteriores. Lenguajes probabilísticos o no deterministas: Sirven para explorar grandes espacios de búsqueda, (como gramáticas), y en la investigación teórica de hipercomputación. Ejemplo: mutt (generador de texto aleatorio). 12. Productividad. Según se caractericen por tener virtudes útiles o productivas, u oscuras y enrevesadas: Lenguajes útiles o productivos: Sus virtudes en cuanto a eficiencia, sencillez, claridad, productividad, etc., motiva que sean utilizados en empresas, administraciones públicas y/o en la enseñanza. Ejemplos: Cualquier lenguaje de uso habitual (C, Java, C++, Lisp, Python, Ruby,…). Lenguajes esotéricos o exóticos: Inventados con la intención de ser los más raros, oscuros, difíciles, simples y/o retorcidos de los lenguajes, para diversión y entretenimiento de frikis programadores. A veces exploran nuevas ideas en programación. Ejemplo: Brainfuck. Traductores: Para facilitar el trabajo de programación y hacer los programas más legibles, resolviendo las limitaciones que presentan los lenguajes máquina, se han desarrollado lenguajes de programación que permiten utilizar una simbología y terminología próximas a las tradicionalmente utilizadas en la descripción de problemas. Estos lenguajes se denominan genéricamente lenguajes simbólicos. Como la computadora únicamente puede interpretar y ejecutar código máquina, existen programas traductores, que traducen o trasladan programas desde el lenguaje simbólico al lenguaje máquina. En general existen traductores para convertir programas escritos en un lenguaje a otro. El programa inicial se denomina programa fuente, y el programa obtenido tras el proceso de traducción programa objeto. Traductor de lenguaje “A” a lenguaje “B” Programa “MEDIA” en lenguaje “B” COMPUTADOR Programa “MEDIA” en lenguaje “A” Programa fuente Programa objeto Ensambladores y macroensambladores: (lenguaje de bajo nivel) Los lenguajes ensambladores permiten al programador: Escribir las instrucciones utilizando, en vez de códigos binarios o intermedios, una notación simbólica o mnemotécnica para representar los códigos de operación. Normalmente los códigos mnemotécnicos están constituidos por tres o cuatro letras que, en forma abreviada, indican la operación a realizar. Usualmente, debido al origen anglosajón de los fabricantes de computadoras, los mnemotécnicos son abreviaturas en inglés. Por ejemplo: la Suma se suele representar como ADD (suma en inglés), SUB (sustracción), MOV (movimiento), NOT (negación lógica), CALL (llamada a un procedimiento), RET (retorno de procedimiento. Utilizar, para los datos, direcciones simbólicas de memoria en lugar de direcciones binarias absolutas. Así, por ejemplo, los datos pueden ser referenciados mediante identificadores, tales como I, SUMA, PROD, CONT, AUX, etc. Existen sentencias declarativas (también denominadas seudoinstrucciones o directivas) para indicar al traductor la correspondencia entre direcciones simbólicas y direcciones de memoria. Con estas seudoinstruciones, el traductor crea una tabla con cuya ayuda, al generar las instrucciones máquina, sustituye las direcciones simbólicas por las direcciones binarias correspondientes. Lenguajes de alto nivel: Compiladores e intérpretes: Los lenguajes ensambladores se suelen denominar lenguajes de segunda generación, en contraposición a los lenguajes máquina, que fueron los de la primera generación. Los lenguajes de alto nivel se consideran lenguajes de tercera generación. Los lenguajes de alto nivel no obligan al usuario a conocer los detalles de la computadora que utiliza. Con estos lenguajes las operaciones se expresan con sentencias o frases muy parecidas al lenguaje matemático o al lenguaje natural, utilizados habitualmente por las personas (igual que para los ensambladores, predomina el uso de palabras o términos en inglés). Las características de los lenguajes de alto nivel son: Las instrucciones se expresan por medio de caracteres alfabéticos, numéricos y caracteres especiales (+, =, /, etc.). El usuario puede definir las variables que desee, dándoles los nombres que considere oportuno (TOTAL, CONTADOR, RESULTADO, etc.), siendo las reglas para denominación de las mismas muy poco restrictivas. La asignación de memoria para variables y constantes las hace directamente el traductor. Los lenguajes de alto nivel apenas dependen de la máquina. Hay lenguajes más trasladables que otros. Por ejemplo, al existir muchos dialectos del BASIC, con frecuencia es necesario adaptar partes de los programas para pasarlos de una computadora a otra. Hay lenguajes casi “independientes de la computadora”. En general, cuanto mejor definido (sin ambigüedades) y diseñado esté un lenguaje, menos dependiente de la máquina será. Entre sus actividades, el American National Standard Institute (ANSI) se encarga de realizar normalizaciones de lenguajes para garantizar la translabilidad de los programas. 3. Haga un cuadro comparativo entre lenguaje de programación estructurado y lenguaje de programación orientado a objeto: LEUNGUJE DE PROGRAMACION ESTRUCTURADO LENGUAJE DE PROGRAMACION ORIENTEDA A OBJETOS La programación estructurada utiliza un número limitado de estructuras de control que minimizan la complejidad de los problemas y que reducen los errores. Ésta incorpora entre otros elementos: el diseño descendente, recursos abstractos y estructuras básicas. Se le conoce como paradigma o modelo de programación, esto significa que no es un lenguaje especifico o una tecnología si no una forma de programar mediante instrucciones. Un lenguaje es descrito como estructurado en bloque cuando tiene una sintaxis para encerrar estructuras entre palabras clave tipo corchete, o la de llaves {...} de C++ La programación orientada a objetos, intenta simular el mundo real a través del significado de objetos que contiene características y funciones La programación estructurada es una forma de escribir programación de ordenador de forma clara, para ello utiliza únicamente tres estructuras: Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase de algoritmo propio del secuencial, selectiva e iterativa. usuario. 4- Que es el lenguaje C++ y cuáles son sus fortalezas y características fundamentales. En la actualidad cuantas versiones de C++ C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. C++ es un lenguaje imperativo orientado a objetos derivado del C [1]. En realidad un superconjunto de C, que nació para añadirle cualidades y características de las que carecía. El resultado es que como su ancestro, sigue muy ligado al hardware subyacente, manteniendo una considerable potencia para programación a bajo nivel, pero se la han añadido elementos que le permiten también un estilo de programación con alto nivel de abstracción. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido. Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma. Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT. Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear nuevos tipos que se comporten como tipos fundamentales. El nombre C++ fue propuesto por Rick Mascitti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C. Fortalezas - Lenguaje de programación orientado a objetos. - Lenguaje muy didáctico, gracias a este lenguaje puedes aprender muchos otros lenguajes con gran facilidad, como C#, Java, Visual Basic, Java script, PHP, entre otros. - Es muy potente en lo que se refiere a creación de sistemas complejos, un lenguaje muy robusto. - Permite elaborar aplicaciones sencillas como un "Hello World!" hasta sistemas operativos y mucho más, todo eso dependiendo del manejo del lenguaje. - Actualmente, puede compilar y ejecutar código de C, ya viene con librerías para realizar esta labor. - Es un lenguaje muy empleado, existen muchos tutoriales en línea, libros, códigos fuentes abiertos... hay material de sobra y basta para aprender lo necesario y mucho más con este lenguaje. - Existen muchos algoritmos cuyo pseudocódigo se encuentra ya desarrollado en C++, de manera que puedes tomarlo y amoldarlo a tu solución (porque el que veas un fragmento de código no asegura que sea correcto al 100%). Características del lenguaje C++ Las principales características del Lenguaje C son: 1.-Tiene un conjunto completo de instrucciones de control. 2.-Permite la agrupación de instrucciones. 3.-Incluye el concepto de puntero (variable que contiene la dirección de otra variable). 4.-Los argumentos de las funciones se transfieren por su valor. 5.- E/S no forma parte del lenguaje, sino que se proporciona a través de una biblioteca de funciones. Permite la separación de un programa en módulos que admiten compilación independiente. Originalmente el Lenguaje C estuvo muy ligado al sistema operativo UNIX como se había mencionado antes que, en su mayor parte, está escrito en C. Más adelante se comenzó a utilizar en otros sistemas operativos para programar editores, compiladores, etc. Aunque se le conoce como un lenguaje de programación de sistemas, no se adapta mal al resto de aplicaciones. De hecho, hoy en día un alto porcentaje de software para ordenadores personales está escrito en Lenguaje C. Por ejemplo, el sistema operativo MS-DOS. Algunas de las características más importantes que definen el lenguaje y que han permitido que sea tan popular, como lenguaje de programación son: Tamaño pequeño. Uso extensivo de llamadas a funciones. Comandos breves (poco tecleo). Lenguaje estructurado. Programación de bajo nivel (nivel bit) Implementación de apuntadores - uso extensivo de apuntadores para la memoria, arreglos, estructuras y funciones Las diversas razones por la cual se ha convertido en un lenguaje de uso profesional son: El uso de constructores de alto nivel. El poder manejar actividades de bajo-nivel. El generar programas eficientes. La posibilidad de poder ser compilado en una variedad de computadoras, con pocos cambios (portabilidad). Un punto en contra es que tiene una detección pobre de errores, lo cual en ocasiones es problemático para los principiantes Versiones de c++ En general los programas en c++ son compatibles, los que tienen cierta diferencia son los compiladores. Compilador, es un programa, que entiende el código y lo transforma en órdenes de máquina, El compilador tiene su sistema de detección de errores y su ayuda. Hay compiladores que solo procesan sobre consola es decir sobre la base del msdos o similar, otros permiten procesar en ventanas (Windows) e incorporar objetos visuales a lo que es codificación. Esta es una lista de compiladores que hay: Xcode Borland c++ Codewarrior c++ Comeau C++ Cygwin (GNU C++) MINGW – Minimalist GNU for Windows Dev C++ (IDE que usa MinGW) wx-Dev C++ (IDE basado en Dev C++) Digital Mars C++ DJ Delorie's C++ development system for DOS/Windows (GNU C++) Edison Design Group C++ Front End Green Hills C++ HP C++ para UNIX y HP C++ para OpenVMS. IBM C++ Intel C++ The LLVM Compiler Infrastructure. Mentor Graphics/Microtec Research C++ Microsoft Visual C++ Microsoft Visual Studio Express Editions Paradigm C++ The Portland Group C++ SGI C++ Sun C++ Sun Studio. WindRiver's Diab C++ ZinjaI Y seguro hay más, todos ellos basados en el desarrollo de C++ y con sus diferencias entre uno y otro. 5 - Como es la estructura de un programa en C++, identifique cada uno de sus elementos. De un ejemplo de un programa. Estructura de un programa en c++ #include<iostream.h> #include<conio.h> Llamado de las diferentes librerías Llamado a la función principal main, que es como nuestro inicio main(){ char nom[30]; Declaración de variables en este caso de tipo carácter cout<<"Digite su nombre"; cin>>nom; cout para escribir y cin para leer Cout<<"Como Estas "<<nom; getch(); Función tipo carácter, espera que presione una tecla return 0; Directiva de retorno return 0 Cuerpo del programa } Con una llave se indica el final del programa Todo programa escrito en C consta de una o más funciones, una de las cuales se llama main. El programa siempre comenzará por la ejecución de la función main. Cada función debe contener: Una cabecera de función, que consta del nombre de la función, seguido de una lista opcional. Una lista de declaración de argumentos, si se incluyen estos en la cabecera. Una sentencia compuesta, que contiene el resto de la función. Los argumentos son símbolos que representan información que se le pasa a la función desde otra parte del programa. (También se llaman parámetros a los argumentos). Cada sentencia compuesta se encierra con un par de llaves, {.....}. Las llaves pueden contener combinaciones de sentencias elementales (denominadas sentencias de expresión) y otras sentencias compuestas. Así las sentencias compuestas pueden estar anidadas, una dentro de otra. Cada sentencia de expresión debe acabar en punto y coma (;). Los comentarios pueden aparecer en cualquier parte del programa, mientras estén situados entre los delimitadores /*................ */ (por ejemplo: /*esto es un ejemplo*/). Los comentarios son útiles para identificar los elementos principales de un programa o simplemente para orientar a un posible usuario de ese código. Todo fichero fuente en C sigue la siguiente estructura; para verla más claramente pondremos un ejemplo con sus correspondientes comentarios, que nos vayan explicando cada una de las partes, muchas de las cosas que se vean, no se conocen aún, pero nos servirán para hacernos una idea de cómo se estructura un programa: Ejemplo: #include <stdio.h> #include <conio.h> Un ejemplo sencillo de un programa que intercambia el valor de 2 números: #include <iostream.h> Int main () { int x, y; int aux; cin >> x >> y; aux = x; x = y; y = aux; cout << x <<y; return 0; } Directiva de preprocesamiento Biblioteca de E/S por consola Este programa usa la definición de cout para escribir por consola Cabecera de la función Cuerpo de la función {…} /*#Include del sistema: Se deben especificar todos los ficheros de cabecera (ficheros con extensión .h) correspondientes a las librerías de funciones utilizadas. Son librerías implementadas y listas para que nosotros las usemos, con sólo llamar a la función que tenga implementada dentro dicha librería. Por ejemplo: la instrucción printf está incluida dentro de stdio.h, por tanto, cuando decidamos usarla, tendremos que poner en esta sección: #include <stdio.h> */ #include <lista.h> /* #Include de la aplicación: Ficheros de cabecera creados para el fichero fuente. Se puede decir que estos son los que yo he creado, que son invocados escribiendo su nombre seguido de .h. (Más tarde explicaremos cómo se crean). Si lo pongo entre signos: < > (como lo tenemos en este ejemplo), dicha librería será buscada en el directorio del compilador INCLUDE que contiene las librerías. Si por el contrario pongo: #include "lista.h", entonces, dicha librería será buscada 1º en el directorio actual, y luego, si no está, será buscada en el directorio del compilador INCLUDE*/ Extern void salida (void); /* Extern variables globales externas: Variables globales que voy a definir en otros módulos que voy a usar en este módulo. A salida le hemos asignado el tipo de almacenamiento extern, pues tiene que ser accedida desde otro archivo distinto de aquel en que es definida; por tanto, ha de ser una función externa. */ #define CIERTO 1 #define FALSO 0 /* #define definición de macros y constantes simbólicas.*/ typedef struct { int dia; int mes; int ano; }FECHA; /* typedef definición de tipos: me sirve para crearme un tipo distinto de los preestablecidos de partida.*/ int suma (int , int); /* Declaración de los prototipos de las funciones implementados en este módulo: La declaración de una función le da información al compilador de una función que va a ser utilizada pero que todavía no ha sido implementada. En particular le dice al compilador qué tipo de datos requiere y cuál devuelve la función. En el ejemplo, la función con nombre suma recibe dos números enteros y da como salida otro número entero.*/ Extern int a, b, c; /* Declaración de variables globales de este módulo: extern declaración de funciones externas a este módulo: Funciones que se utilizan en este módulo y que están implementadas en otro módulo. Static declaración de las funciones internas no visibles para otros módulos: Funciones que se implementan en este módulo y que no pueden ser utilizadas en otros módulos. */ Main() { ............ ............ } Int suma (int x,int y) { ........... ........... } /* Implementación de las funciones: Se implementan todas las funciones del módulo incluida la función main().*/ 6 - Cuáles son los tipos de datos que existen en C++ Todos los programas gestionan algunos tipos de información que normalmente se pueden representar utilizando uno de los ocho (8) tipos de datos básicos de C y C++: texto o char, valores enteros o int, valores de coma flotante o flota, valores en como flotante de doble precisión o doublé (long double), enumerados o enum, s i n v a l o r o void, punteros y booleanos. 1.Texto (tipo de dato char) está constituido por caracteres simples, como a, Z, ¿, 3 y cadenas, como “Esto es una prueba” (normalmente, de 8 bits o un byte por carácter, con un rango de 0 a 255). 2. Los valores enteros ( t i p o d e d a t o int) s o n aquellos números q u e s e a p r e n d i e r o n a c o n t a r ( 1 , 4 , - 2 , 1 3 5 4 ) ; normalmente, tienen un tamaño de 16 bits, 2 bytes o una palabra, con rango de -32768 a 32767. En Windows 98 Windows NT, los valores enteros tienen un tamaño de 32 bits con un rango de -2147483648 a 2147483647. 3. Los valores en coma flotante (tipo de dato float) son números que tienen una parte fraccional, como por ejemplo pi(3,14159), y exponentes (7,563 1021). También se conocen como números reales (normalmente, son de 32 bits, 4 byteso 2 palabras, con un rango de +/-3,4E-38 a 3,4E+38). 4. Los valores en coma flotante de doble precisión (tipo de dato double) tienen un rango superior (normalmente de 64 bits, 8 bytes ó 4 palabras, con un rango de 1, 7E-308 a 1, 7E+308). Los valores en coma flotante Long doublé (doble precisión largos) son incluso más precisos (normalmente, tamaño de 80 bits ó 5 palabras, con un rango de+/-1,18E-4932 a 1,18E-4932). 5 .los tipos de datos enumerados (tipo de dato enum) permiten al usuario definir tipos de datos. 6. El tipo void se utiliza para especificar valores que ocupan cero bits y no tienen valor (este tipo también se puede utilizar para la creación de punteros genéricos. 7. El tipo de dato puntero no contiene información en el mismo sentido que el resto de los tipos de datos; en su lugar, cada puntero contiene la dirección de la posición de memoria que almacena el dato actual. 8. El tipo de dato bool, al que se le puede asignar las constantes true (Verdadero) y false (falso) RANGO DE LOS TIPOS DE DATOS Tipo Rango mínimo Rango máximo Char 0 255 Short -128 127 -32768 32767 Int Unsigned int 0 65535 Long -2147483648 2147483637 Float 3.4*(10-38) 3.4*(1038) Double 1.7*(10-308) 1.7*(10308) Long double 1.7*(10-308) 1.7*(10308) 7 - Que es una librería en C++ , enuncie las más importantes y diga para que sirven Librería en c++ Junto con los compiladores de C y C++, se incluyen ciertos archivos llamados bibliotecas más comúnmente librerías. Las bibliotecas contienen el código objeto de muchos programas que permiten hacer cosas comunes, como leer el teclado, escribir en la pantalla, manejar números, realizar funciones matemáticas, etc. Las bibliotecas están clasificadas por el tipo de trabajos que hacen, hay bibliotecas de entrada y salida, matemáticas, de manejo de memoria, de manejo de textos y como imaginarás existen muchísimas librerías disponibles y todas con una función específica. En C++, se conoce como librerías (o bibliotecas) a cierto tipo de archivos que podemos importar o incluir en nuestro programa. Estos archivos contienen las especificaciones de diferentes funcionalidades ya construidas y utilizables que podremos agregar a nuestro programa, como por ejemplo leer del teclado o mostrar algo por pantalla entre muchas otras más. Al poder incluir estas librerías con definiciones de diferentes funcionalidades podremos ahorrarnos gran cantidad de cosas, imaginemos por ejemplo que cada vez que necesitemos leer por teclado, debamos entonces crear una función que lo haga (algo realmente complejo), al poder contar con las librerías en C++, podremos hacer uso de una gran variedad de funciones que nos facilitaran la vida y aumentarán la modularidad de nuestros códigos. Las librerías no son únicamente archivos externos creados por otros, también es posible crear nuestras propias librerías y utilizarlas en nuestros programas. Las librerías pueden tener varias extensiones diferentes, las más comunes son: .lib, .bpl, .a, .dll, .h y algunas más ya no tan comunes. En conclusión, las librearías son archivos (no siempre externos) que nos permiten llevar a cabo diferentes tareas sin necesidad de preocuparnos por cómo se hacen sino simplemente entender cómo usarlas. Las librearías en C++ permiten hacer nuestros programas más modulares y reutilizables, facilitando además crear programas con funcionalidades bastante complejas en unas pocas líneas de código. Las librerías no son únicamente archivos externos creados por otros, también es posible crear nuestras propias librerías y utilizarlas en nuestros programas. Las librerías pueden tener varias extensiones diferentes, las más comunes son: lib, .bpl, .a, .dll, .h y algunas más ya no tan comunes. Las librerías o cabeceras de programa permiten el manejo de funciones básicas, que admite el reconocimiento de palabras claves del propio sistema. <iostream.h>, que permite el manejo de entrada y/o salida mediante dos objetos de flujo de datos cout<< y cin>>. <conio.h>, quien trae las funciones básicas como posicionamiento o limpieza de pantalla entre otras. <math.h>, que permite la utilización de funciones matemáticas. <stdio.h> que permite el manejo de entrada y/o salida mediante dos objetos de flujo de datos printf y scanf. Otras: <windows.h>, <string.h>, <stdlib.h> Algunas Librerías en c++ Librería fstream: Flujos hacia/desde ficheros. Permite la manipulación de archivos desde el programar, tanto leer como escribir en ellos. Librería iosfwd: Contiene declaraciones adelantadas de todas las plantillas de flujos y sus typedefs estándar. Por ejemplo ostream. Librería iostream: Parte del a STL que contiene los algoritmos estándar, es quizá la más usada e importante (aunque no indispensable). Librería list: Parte de la STL relativa a contenedores tipo list; listas doblemente enlazadas Librería math: Contiene los prototipos de las funciones y otras definiciones para el uso y manipulación de funciones matemáticas. Librería memory: Utilidades relativas a la gestión de memoria, incluyendo asignadores y punteros inteligentes (auto_ptr). Librería new: Manejo de memoria dinámica Librería numeric: Parte de la librería numérica de la STL relativa a operaciones numéricas. Librería ostream: Algoritmos estándar para los flujos de salida. Librería queue: Parte de la STL relativa a contenedores tipo queue (colas de objetos). Librería stdio: Contiene los prototipos de las funciones, macros, y tipos para manipular datos de entrada y salida. Librería stdlib: Contiene los prototipos de las funciones, macros, y tipos para utilidades de uso general. Librería string: Arte de la STL relativa a contenedores tipo string; una generalización de las cadenas alfanuméricas para albergar cadenas de objetos. Muy útil para el fácil uso de las cadenas de caracteres, pues elimina muchas de las dificultades que generan los char Librería typeinfo: Mecanismo de identificación de tipos en tiempo de ejecución Librería vector: Parte de la STL relativa a los contenedores tipo vector; una generalización de las matrices unidimensionales C/C++ 8 - Como se declara una librería. Como se declara una variable, una constante. Sintaxis para declarar Librerías en C++ La declaración de librerías, tanto en C como en C++, se debe hacer al principio de todo nuestro código, antes de la declaración de cualquier función o línea de código, debemos indicarle al compilador que librerías usar, para el saber qué términos estarán correctos en la escritura de nuestro código y cuáles no. La sintaxis es la siguiente: #include <nombre de la librería> o alternativamente #include "nombre de la librería". Cualquiera de las 2 formas es válida en C++ (no estoy seguro si en C sea válido), ten en cuenta que siempre el nombre de la librería debe ir entre " y " o entre < y >. En tu código puedes declarar todas las librerías que quieras, pero en realidad no tienen sentido, declarar una librería que no vas a usar en tus programas, sin embargo no existe límite para esto. ¿Cómo declarar una librería en C++? Veamos a continuación como se haría la declaración de unas cuantas librerías conocidas, recuerda que ese pueden declarar todas las librerías necesarias y siempre debe hacerse al comienzo del código fuente ? 1 #include "iostream" 2 #include "string" 3 #include <math.h> 4 #include <conio.h> 5 6 Using namespace std; Con esto debió quedar claro, como declarar librerías C++ al interior de un código fuente. Lo único adicional, es la línea que dice using namespace std; esta línea nos ayuda a declarar un espacio de nombre que evita tener que usarlo cada que accedemos a alguna función específica de una librería. Teniendo este namespace declarado podemos llamar por ejemplo el comando cout >>, que pertenece a la librería iostream, sin embargo sin este namespace sería std::cout >>, imagina tener que hacer esto cada vez que uses algún comando o función de las librerías, sería bastante tedioso. Como declarar una variable Variable: int numero; char letra; Long enterolargo; float numeroflotante; Como declarar un constante Constantes def: Una constante es un dato cuyo valor no puede cambiar durante la ejecución del programa. Recibe un valor en el momento de la compilación y este permanece inalterado durante todo el programa. Constantes declaradas También llamadas constantes con nombre, son las que se declaran en la sección const asignándoles un valor directamente. Por ejemplo: Const Pi = 3.141592; (* valor real *) Min = 0; (* entero *) Max = 99; (* entero *) Saludo = 'Hola'; (* cadena caract. *) 9 - Como se asigna en C++ Operadores de asignación §1 Sinopsis C++ dispone de los siguientes operadores de asignación: = Asignación *= Asigna producto /= Asigna división %= Asigna resto (módulo) += Asigna suma -= Asigna diferencia (resta) <<= Asigna desplazamiento izquierda >>= Asigna desplazamiento derecha &= Asigna AND entre bits ^= Asigna XOR entre bits |= Asigna OR entre bits §2 Sintaxis: <expr-unaria> <operador-de-asignación> <expr-derecha> Ejemplo: x = 3; x += 3; x &= 3; §3 Comentario Todos ellos son operadores binarios, de los cuales, = es el único de asignación simple, los demás son operadores de asignación compuestos. Los seis primeros aceptan operandos de distinto tipo, mientras que los cinco últimos: <<=, >>=, &=, ^= y |=, implican manejo de bits ( 4.9.3), por lo que sus operandos deben ser tipos int en sus distintas variantes. §3.1 No olvidar que las expresiones de asignación producen un resultado. El tipo resultante es el de la <expr-unaria> (izquierda); el valor que se aplica es el determinado por <expr-derecha> (el Rvalue 2.1.5). El valor resultante de <exprunaria> después de la asignación, es el resultado de la expresión (el Lvalue 2.1.5). Así pues, cualquiera que sea su sentido concreto, todos implican la "copia" de un bloque de memoria (que contiene el "resultado") en algún sitio (la dirección indicada por el Rvalue). Ejemplo: Int num; float f = 3.14; num = f + 1; En este caso, el valor 4.14, resultado de <expr-derecha>, se aplica a num. Teniendo en cuenta que el tipo resultante debe ser el de num (un int en este caso), se realiza automáticamente una conversión del float 4.14 a int (con pérdida de precisión si es necesario), con el resultado de que num recibe el valor 4 y el resultado de la asignación es un int de valor 4. §3.2 Esta propiedad de las asignaciones de producir un resultado, es justamente la que permite expresiones de asignación compuesta del tipo: A = B = C = D; y es ampliamente utilizada en la programación de C++. Considere el bucle del siguiente ejemplo: While ( (ch = getchar () )!= 27) ; Aprovechando que en este caso, el resultado de la asignación es un char, se utiliza directamente en la cláusula del while, resultando que el bucle se ejecuta indefinidamente hasta que se pulse la tecla ESC (escape). §3.3 En general las sentencias de asignación tienen la forma: variable = expresion La parte izquierda (que tiene que ser un Lvalue no constante) adquiere el valor señalado en la expresión de la derecha, pero se mantiene el tipo original de la variable de la parte izquierda. En caso necesario se realiza una conversión de tipo (con pérdida de precisión en su caso) del izquierdo al derecho. Nota: observe que el operador C++ de asignación simple (=) se distingue de otros lenguajes como Pascal que utilizan el símbolo:= para este operador. Observe también que la asignación simple (=) utiliza un símbolo distinto del operador relacional de igualdad (==). §4 Las variables se pueden inicializar en el mismo momento de la declaración (asignándoles un valor). Este es el único caso en que se puede asignar una constante [2]. Ejemplo: int primero = 0; char ch = ‘a’; float balance = 123.456; char string [10] = "1234567890"; const float pi = 3.14159 ; §5 En la expresión E1 = E2, E1 debe ser un Lvalue modificable, en caso contrario puede obtenerse un mensaje de error: Lvalue required [1]. Por ejemplo, una vez declarado char a[10], ninguna de las dos sentencias que siguen es válida: a = "0123456789"; a[10] = "0123456789"; La expresión de asignación en sí misma no es un Lvalue. §6 Si @ es un operador compuesto, la expresión E1 @= E2 equivale a E1 = E1 @ E2. Por ejemplo: E1 += E2 equivale a E1 = E1 + E2. Ejemplos x *= y /* equivalentes */ x = x * y x *= y + 2 /* equivalentes */ x = x * (y + 2) Ejemplo operativo: #include <iostream> using namespace std; int main() { // =============== int sec = 3628; cout << sec << " segundos son "; int h = sec / (60*60); cout << h << " hora y "; sec %= 60*60; int m = sec / 60; cout << m << " minutos y "; sec %= 60; cout << sec << " segundos" << endl; } Salida: 3628 segundos son 1 hora y 0 minutos y 28 segundos §7 Tanto para las asignaciones simples como compuestas, ambos operandos E1 y E2 deben cumplir alguna de las siguientes condiciones (asumimos que E1 está a la izquierda del operador y E2 es el de la derecha): • E1 es de tipo aritmético, cualificado o no y E2 es un tipo aritmético. • E1 es una estructura o unión cualificada o no, pero de tipo compatible con E2. • E1 y E2 son punteros a versiones no cualificadas de tipos compatibles, el tipo de objeto señalado por E1 tiene todos los calificadores del tipo de objeto señalado por E2. • E1 o E2 es un puntero a objeto o tipo incompleto, y el otro es un puntero a una versión cualificada o no cualificada de void. El tipo de objeto señalado por E1 tiene todos los calificadores del objeto señalado por E2. • E1 es un puntero y E2 es un puntero nulo. • No puede haber espacios entre los operadores compuestos (+ =) • Hay ciertas condiciones, en que los operadores de asignación no pueden aplicarse cuando se trata de propiedades de clases ( 4.9.2a). Ejemplos char* = 0; // asignación de nulo a puntero a carácter char *= 0; // char = char * 0 Precauciónes !! Es relativamente frecuente confundir el orden de escritura de estos operadores. Recuerde que, en todos los casos de asignación compuesta, el símbolo "=" va a la derecha!!. Considere el siguiente ejemplo: #include <iostream.h> void main() { // ============== int x = 2, y = 4; int* z = &x; x =& y; // Error !! x &= y; // Ok. z =& y; // Ok. Asignar un puntero!! cout << "x = " << x << endl; // Comprobaciones. cout << "y = " << y << endl; cout << "z = " << z << endl; } Salida (después de eliminada la sentencia errónea): x=0 y=4 z = 0065FDFC 10 - como se lee y se escribe en c++ con la librería stdio.h Lectura: scanf(“%d”,&variable); Escritura: printf(“La variable es: %d”,variable); las librerías son son archivos que en C contienen las funciones que son las acciones que C nos permite hacer estas son las librerías más usadas por que son librerías estándares de entrada y salidas de datos tenemos la librerías stdio.h se agrega asi: #include<stdio.h> 11 - como se lee y se escribe en c++ con la librería iostream.h Lectura: cin>> variable; Escritura: cout<<”su variable es:”<<variable; < IOSTREAM.H> Las operaciones de entrada y salida no forman parte del conjunto de sentencias de C++, sino que pertenecen al conjunto de funciones y clases de la biblioteca estándar de C++. Ellas se incluyen en los archivos de cabecera iostream.h por lo que siempre que queramos utilizarlas deberemos introducir la línea de código #include <iostream.h> Esta biblioteca es una implementación orientada a objetos y está basada en el concepto de flujos. A nivel abstracto un flujo es un medio de describir la secuencia de datos de una fuente a un destino o sumidero. Así, por ejemplo, cuando se introducen caracteres desde el teclado, se puede pensar en caracteres que fluyen o se trasladan desde el teclado a las estructuras de datos del programa. Los objetos de flujo que vienen predefinidos serán: cin, que toma caracteres de la entrada estándar (teclado); cout, pone caracteres en la salida estándar (pantalla); cerr y clog ponen mensajes de error en la salida estándar. Estos objetos se utilizan mediante los operadores << y >>. El operador << se denomina operador de inserción; y apunta al objeto donde tiene que enviar la información. Por lo tanto la sintaxis de cout será: cout<<variable1<<variable2<<...<<variablen; No olvidemos que las cadenas de texto son variables y se ponen entre " " (comillas dobles). Por su parte >> se denomina operador de extracción, lee información del flujo cin (a la izquierda del operador) y las almacena en las variables indicadas a la derecha). La sintaxis sería la siguiente: cin>>variable1>>...>>variablen; Un ejemplo de código utilizando ambos objetos podría ser el siguiente: #include <iostream.h> ... main () { int i; cout<<"Introduce un número"; cin>>i; ... } ... Que mostraría por pantalla la frase "Introduce un número" y posteriormente almacenaría el valor introducido por teclado en la variable i. 12 - como se representan las primitivas secuenciales, condicionales dependiendo DD los ciclos respetivos, para, mientras que y haga hasta Las estructuras de operación de programas son un grupo de formas de trabajo, que permiten, mediante la manipulación de variables, realizar ciertos procesos específicos que nos lleven a la solución de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en: • SECUENCIALES La estructura secuencial es aquella en la que una acción 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 asignación 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. Una estructura secuencial se representa de la siguiente forma: Inicio Accion1 Accion2 . . AccionN - Asignación La asignación 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 asignación se puede clasificar de la siguiente forma: SIMPLES: Consiste en pasar un valor constante a una variable (a ? 15) CONTADOR: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ? a + 1) ACUMULADOR: Consiste en usarla como un sumador en un proceso (a ? a + b) DE TRABAJO: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ? c + b*2/4) - Entrada Todo algoritmo tiene por objetivo principal reducir los resultados pudiendo o no incorporar información del medio externo (datos), al ambiente o sistema que observa. Esta incorporación de valores del exterior nos lleva a definir una acción algorítmica primitiva de Lectura o Entrada. Se usará para ello la palabra Leer, seguida de la variable o lista de variables. Esta acción tiene el mismo efecto que una asignación, sólo que ésta última utiliza valores del ambiente del algoritmo; en cambio la lectura asigna valores desde el exterior. Sin estación, la ejecución de un algoritmo producirá siempre la misma respuesta. Las acciones de lectura y asignación permiten “definir variables” en un algoritmo - Salida La acción primitiva que permite a un algoritmo comunicar resultados o salida de información al medio exterior que representará por la palabra clave Escribir. Se destacan algunas diferencias entre las acciones de lectura y escritura. La lectura se utiliza solamente a través de variables; y por lo tanto, si se lee una variable que ya fue definida en el algoritmo, implicará un acceso destructivo; esto es, la variable perderá su valor para tomar el del nuevo dato que se ingrese. En cambio, si se escribe resultados a través de variables el ejecutante realizará un proceso no destructivo a dichas variables, pues solo necesita conocer su contenido para ejecutar la escritura. Aquí las variables conservan sus valores después de la acción. Las acciones de lectura y escritura son conocidas como acciones de entrada/salida o abreviadamente E/S. Condicionales dependiendo DD los ciclos respetivos, para, mientras que y haga hasta BLOQUE DEPENDIENDO DE (DD): Este bloqué se utiliza cuando se pueden tomar muchos caminos a partir del valor que tenga asignado una variable, es muy útil en algunos casos pero su uso está condicionado a que la herramienta de programación lo acepte, su estructura es la siguiente DD (variable) [valor 1]: “instrucciones que se ejecutan cuando la variable tiene asignado el valor 1” [valor 2]: “instrucciones que se ejecutan cuando la variable tiene asignado el valor 2” . . [valor n]: “instrucciones que se ejecutan cuando la variable tiene asignado el valor n” FIN DD Ejemplo: Inicio Lea “Ingrese una opción numérica de 1 a 4”;OP DD (OP) 1: Imprima “usted seleccionó la opción uno” 2: Imprima “usted seleccionó la opción dos” 3: Imprima “usted seleccionó la opción tres” 4: Imprima “usted seleccionó la opción cuatro” Fin DD Fin Este algoritmo solicita al usuario ingresar un número entre 1 y 4, y entrega un letrero que indica cual opción seleccionó el usuario CICLO PARA El ciclo para ejecuta un bloque de instrucciones un número determinado de veces. Este número de veces está determinado por una variable contadora (de tipo entero) que toma valores desde Un límite inferior hasta un límite superior. En cada ciclo después de ejecutar el bloque de Instrucciones, la variable contadora es incrementada en 1 automáticamente y en el momento en Que la variable sobrepasa el límite superior el ciclo termina. El valor final de la variable contadora depende del lenguaje de programación utilizado, por lo tanto, no es recomendable diseñar algoritmos que utilicen el valor de la variable contadora de un ciclo para, después de ejecutar el mismo. De la definición de ciclo para se puede inferir que el bloque de instrucciones no se ejecuta si el límite inferior es mayor al límite superior. La forma general del ciclo para es la siguiente: PSEUDOCODIGO Para (<variable> := <lim_inf> hasta <lim_sup>) Hacer <bloque instrucciones> fin_para Donde <variable> es la variable contadora del ciclo, la cual debe ser de tipo entero. <lim_inf> es el valor inicial que toma la variable contadora. <lim_sup> es el último valor que toma la Variable contadora; cuando el valor de la variable contadora supere este valor, el ciclo termina. <bloque instrucciones> es el conjunto de instrucciones que se ejecuta en cada iteración, mientras la variable contadora no sobrepase el <lim_sup>. Casos: • Cuando <lim_inf> es menor que <lim_sup> ocurre lo siguiente: 1. La variable contadora se vuelve igual a <lim_inf> 2. Se ejecuta <bloque de instrucciones> 3. Se incrementa automáticamente en 1 la variable contadora del ciclo. 4. Si el valor de contador del ciclo es menor o igual que <lim_sup> se vuelve de nuevo al paso 2. De otro modo se abandona el ciclo. • Es de anotar que el valor final de la variable contadora queda incrementada por encima del <lim_sup> para que pueda finalizar el ciclo para variable:= lim_inf, hasta lim_sup ENTRADA SALIDA 14 • Cuando <lim_inf> es mayor que <lim_sup> el ciclo termina sin ejecutarse nunca. El. <bloque de instrucciones>. Tenga en cuenta que no se genera error al correr el programa Ejemplo: Para (x:=5 hasta 4) hacer. Esta línea de código nunca se ejecuta. • Es de anotar que los lenguajes de programación tienen una variable a esta instrucción para que el valor pueda ir en descenso. • Tanto <lim_inf> como <lim_sup> pueden ser expresiones como en el siguiente Ejemplo: para(j:=x+1 hasta 2*y) hacer. En este caso se calculan primero los valores de las expresiones (x+1) y (2*y) empleando para esto los valores actuales de x y y para utilizarlos como <lim_inf> y <lim_sup> respectivamente. CICLO MIENTRAS El ciclo mientras Permite ejecutar un bloque de instrucciones mientras que una expresión lógica dada se cumpla, es decir, mientras su evaluación dé como resultado verdadero. La expresión lógica se denomina condición y siempre se evalúa antes de ejecutar el bloque de instrucciones. Si la condición no se cumple, el bloque no se ejecuta. Si la condición se cumple, el bloque se ejecuta, después de lo cual la instrucción vuelve a empezar, es decir, la condición se vuelve a evaluar. En el caso en que la condición evalúe la primera vez como falsa, el bloque de instrucciones no será ejecutado, lo cual quiere decir que el número de repeticiones o iteraciones de este bloque será cero. Si la condición siempre evalúa a verdadero, la instrucción se ejecutará Indefinidamente, es decir, un número infinito de veces. La forma general del ciclo mientras es la siguiente: Diagrama PSEUDOCODIGO Mientras <condición> hacer <bloque instrucciones> fin_mientras Donde, <condición> es la expresión lógica que se evalúa para determinar la ejecución o no del bloque de instrucciones, y <bloque instrucciones> es el conjunto de instrucciones que se ejecuta si la condición evalúa a Verdadero. CICLO HAGA-MIENTRAS El ciclo haga-mientras es similar al ciclo mientras, la diferencia radica en el momento de evaluación de la condición. En el ciclo haga-mientras la condición se evalúa después de ejecutar el bloque de instrucciones, por lo tanto, el bloque se ejecuta por lo menos una vez. Este bloque se ejecuta nuevamente si la condición evalúa a verdadero, y no se ejecuta más si se evalúa como falso. La forma general del ciclo haga-mientras es la siguiente: Haga <bloque instrucciones> Mientras <condición> Donde, <bloque instrucciones> es el conjunto de instrucciones que se ejecuta y <condición> es la expresión lógica que determina si el bloque se ejecuta. Si la <condición> se evalúa como verdadero el bloque es ejecutado de nuevo y si es evaluada como falso no es ejecutado. Después de ejecutar el bloque de acciones se evalúa la <condición>. Ejemplos Ejemplo 1. El problema de calcular la suma de los números naturales desde 1 hasta n (enunciado anteriormente), se puede solucionar usando el ciclo haga-mientras. A continuación se describe el algoritmo solución: 1 n: entero /* se define la variable para el número */ 2 suma: entero /* se define la variable para la suma */ 3 i: entero /* se define la variable para recorrer los números entre 0 y n */ 4 escribir ( “Ingrese el número: ” ) 5 leer (n) /* lee el primer número */ 6 suma:=0 /* inicia la suma en cero */ 7 :=1 /* empieza la variable que recorre los números en i 1 */ 8 haga 9 suma := suma + i /* en cada iteración suma el número i */ 10 i := i + 1 /* incrementa i en 1 para tomar el siguiente número en la próxima iteración */ 11 mientras (i <= n) 12 escribir ( “La suma es: ”, suma ) 13. Pase los cinco primeros algoritmos que tiene en su libreta a C++. Hacer un algoritmo que lea el sexo de una persona y me diga si es hombre o mujer: /*Programa para leer un sexo y decir si es hombre o mujer */ #include<iostream.h> #include<conio.h> main(){ int sexo; cout<<"Diga su sexo por favor:\n 1 Para Masculino \n 2 Para Femenino \n ---> "; cin>>sexo; if(sexo==1){ cout<<"Eres un hombre"; }else if(sexo==1){ cout<<"Eres mujer"; }else cout<<"\nOpcion No valida \n ENTER para salir"; getch(); return 0; } Hacer un algoritmo que lea un color en español y los escribas en ingles solo teniendo en cuenta los colores primarios: /*Pasar un color primario a ingles*/ #include<iostream.h> #include<conio.h> #include<stdio.h> main(){ char color[100]; int a=2,b=2,c=2; cout<<"Diga Que Color Primario Quiere Pasar Al Ingles :"; gets(color); a = strcmp(color,"rojo"); b = strcmp(color,"azul"); c = strcmp(color,"amarillo"); if(a==0){ cout<<"Red"; }else if(b==0){ cout<<"Blue"; }else if(c==0){ cout<<"Yellow"; }else{ cout<<"No es un color primario"; } getch(); return 0; } Hacer un algoritmo que me permita leer el nombre de una persona y saludar a esa persona por su nombre: /*Saludar por el nombre */ #include<iostream.h> #include<conio.h> main (){ char nom[30]; Cout<<"Digite su nombre"; Cin>>nom; Cout<<"Como Estas "<<nom; getch (); Return 0; } Hacer un algoritmo que lea una vocal y nos diga que vocal leyó: /* Decir una vocal */ #include<iostream.h> #include<conio.h> main(){ char vocal; cout<<"Digite la vocal que desea leer: "; cin>>vocal; cout<<"So vocal Fue: "<<vocal; getch(); return 0; } Hacer un algoritmo que me permita leer dos números, los sume y escriba el resultado: /*Leer dos números y sumarlos*/ #include<iostream.h> #include<conio.h> main(){ int numero1,numero2,suma; cout<<"Ingrese el primer numero: "; cin>>numero1; cout<<"\nIngrese el segundo numero: "; cin>>numero2; suma=numero1+numero2; cout<<"\nLa suma es: "<<suma; cout<<"\n Es decir: "<<numero1<<"+"<<numero2<<"="<<suma; getch(); return 0; }