viernes, 16 de marzo de 2018

Compiladores


Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o simplemente texto. Este proceso de traducción se conoce como compilación.1
Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.

Partes de un compilador



Básicamente, un compilador cuenta con dos partes fundamentales: El Front End y el Back End. Estas partes se complementan para lograr el objetivo del compilador. A continuación, describiremos cada una de estas partes:
  • Front End: El Front End es la parte del compilador que interactúa con el usuario y por lo general, es independiente de la plataforma en la que se trabaja. Se encarga de realizar el análisis del código fuente a compilar y verifica que este sea válido, así como también, genera el árbol de derivación y rellena los valores de la tabla de símbolos.
  • Back End: Esta parte del compilador es la encargada de generar el código en formato de máquina, a partir del trabajo hecho por el Front End.

Compiladores más usados

Los 5 lenguajes de programación más populares de la actualidad son: Java, C, C++, Pyhton y C#.  Así lo asegura el Índice TIOBE  en su última actualización de junio 2017. La novedad es que el lenguaje de programación Kotlin salta a los 50 más populares. Probablemente te preguntes qué se supone que debas interpretar por lenguaje de programación "más popular". A continuación, te explicamos.

El Índice TIOBE es un índice elaborado por una empresa de software holandesa que se especializa en la evaluación y seguimiento de la calidad de los programas informáticos. Actualmente, la empresa revisa en tiempo real más de 300 millones de códigos de diversos programas informáticos por día actualizando mes a mes su índice.

1. Java

Reconocido por su legibilidad y simplicidad, Java es uno de los lenguajes de programación más adoptados: más 9 millones de desarrolladores lo usan y está presente en 7 mil millones de dispositivos en todo el mundo. Desde 2001 se mantiene en las primeras posiciones, llegando al número puesto número 2 como la más baja de todas en marzo de 2015. Su enorme popularidad se debe a su poder de permanencia, cuestión que asegura el funcionamiento a largo plazo de las aplicaciones que lo utilizan. 
Asimismo, cabe destacar que el manejo de Java está incluido dentro de las 20 habilidades más valoradas por los empleadores en 2016, según un estudio elaborado por LinkedIn. 

 2. C

Creado entre 1969 y 1972 en los Laboratorios Bell, es uno de los más utilizados en el mundo. Si bien es ejecutado en la mayoría de los sistemas operativos, es de propósito general, con lo cual es muy flexible. Es muy popular para el desarrollo de aplicaciones de escritorio, como el conocido editor gráfico GIMP. 

3. C++
Conocido por el nombre “C Plus Plus”, este lenguaje de programación orientado a objetos surge como una continuación y ampliación del C. Hay una gran cantidad de programas escritos en C++, como por ejemplo los paquetes de Adobe.

4. Python

Un lenguaje de programación multiplataforma y multiparadigma, que también es de propósito general. Esto significa que soporta la orientación a objetos, la programación imperativa y funcional. Su simpleza, legibilidad y similitud con el idioma inglés lo convierten en un gran lenguaje ideal para principiantes.

5. C# 
También llamado “C Sharp”, este lenguaje de programación orientado a objetos fue desarrollado en el año 2000 por Microsoft para ser empleado en una amplia gama de aplicaciones empresariales ejecutadas en el framework .NET. C Sharp es una evolución del C y C++ que se destaca por su sencillez y modernidad.

6. Visual Basic. NET

Pasó del número 9 en junio de 2016 al sexto lugar en 2017. Es utilizado por una gran cantidad de personas a lo largo del mundo que no cuentan con conocimientos profundos como desarrolladores, quienes encuentran en visual basic, además de una sintaxis sencilla, la posibilidad de automatizar sus propios procesos y crear sus propias aplicaciones web. Es visto como uno de los lenguajes más amigables para los que recién comienzan, sobre todo a comparación de C#.

7. JavaScript

Antes que nada, no confundir con Java. Son lenguajes distintos. Javascript es un lenguaje de programación que puede ser utilizado para crear programas que luego son acoplados a una página web o dentro de programas más grandes. Sirve para crear efectos y realizar acciones interactivas. Podemos ver funcionando este lenguaje en servicios como el chat, calculadoras, buscadores de información y un sin fin de utilidades más.

8. PHP

Creado en 1994 por el programador canadiende Rasmus Lerdorf, nunca pretendió ser un lenguaje de programación, sino que fue creado con la intención de contar con un conjunto de herramientas para el mantenimiento de las páginas web . Es de fácil acceso para nuevos programadores y a su vez ofrece a los más experientes muchas posibilidades.

9. Perl

Creado Larry Wall, Pearl es una sigla que significa Practical Extraction and Report Language. Es un lenguaje de propósito general que sirve practicamente para todo, como puede ser la generación y tratamiento de ficheros, para analizar datos y textos, y muchas otras cosas más. Si bien hay proyectos complejos y completos escritos en Pearl, son los menos.

10. Assembly language (ASL)

Assembly language (lenguaje ensamblador) saltó de la posición número 12 en 2016 al número 10 en 2017. Se trata de un lenguaje de programación de bajo nivel utilizado para interactuar con hardware informático. Utiliza comandos estructurados, en sustitución de los números, permitiendo a las personas tener una mayor legibilidad de los códigos. Si bien es más sencillo de leer que el código binario se trata de un lenguaje difícil que muchas veces es sustituido por uno superior, como por ejemplo C. 

Code Blocks

Code::Blocks es un IDE libre multiplataforma y de código abierto que soporta múltiples compiladores, que incluye GCCClang y Visual C++. Se desarrolló en C++ usando wxWidgets como el kit de herramientas GUI. Utilizando una arquitectura de complemento, sus capacidades y características están definidas por los complementos proporcionados. A la fecha octubre de 2017, Code::Blocks está orientado hacia CC++ y Fortran. Tiene un sistema de compilación personalizado y un soporte de construcción opcional. Cabe mencionar que Code::Blocks está licenciado bajo la Licencia pública general de GNU.
Code::Blocks está siendo desarrollado para WindowsLinux y macOS y ha sido portado a FreeBSDOpenBSD2​ y Solaris.
Debido a que Dev-C++ es un IDE para los lenguajes C y C++ y está creado en Delphi, surgió la idea y necesidad de crear un IDE hecho en los lenguajes adecuados: C y C++. Con esta motivación se creó Code::Blocks.

Net Beans

NetBeans es un entorno de desarrollo integrado libre, hecho principalmente para el lenguaje de programación Java. Existe además un número importante de módulos para extenderlo. NetBeans IDE​ es un producto libre y gratuito sin restricciones de uso.
NetBeans es un proyecto de código abierto de gran éxito con una gran base de usuarios, una comunidad en constante crecimiento, y con cerca de 100 socios en todo el mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en junio de 2000 y continúa siendo el patrocinador principal de los proyectos (Actualmente Sun Microsystems es administrado por Oracle Corporation).
La plataforma NetBeans permite que las aplicaciones sean desarrolladas a partir de un conjunto de componentes de software llamados módulos. Un módulo es un archivo Java que contiene clases de java escritas para interactuar con las APIs de NetBeans y un archivo especial (manifest file) que lo identifica como módulo. Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos módulos. Debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fácilmente por otros desarrolladores de software.
El NetBeans IDE soporta el desarrollo de todos los tipos de aplicación Java (J2SE, web, EJB y aplicaciones móviles). Entre sus características se encuentra un sistema de proyectos basado en Ant, control de versiones y refactoring.
NetBeans IDE 6.5.2, la cual fue publicada el 19 de noviembre de 2008, extiende las características existentes del Java EE (incluyendo Soporte a Persistencia, EJB 3 y JAX-WS). Adicionalmente, el NetBeans Enterprise Pack soporta el desarrollo de Aplicaciones empresariales con Java EE 5, incluyendo herramientas de desarrollo visuales de SOA, herramientas de esquemas XML, orientación a web servicies (for BPEL), y modelado UML. El NetBeans C/C++ Pack soporta proyectos de C/C++, mientras el PHP Pack, soporta PHP 5.

Compilador portable


Fue muy influyente en su tiempo como uno de los primeros compiladores que podía ser fácilmente adaptado con el fin de generar código para diferentes arquitecturas de computadora. A principios de los 80, la mayoría de los compiladores de C estaban basados en pcc. El compilador ha tenido una larga vida, siendo incluido desde la versión 4.3BSD-Reno en 1990 hasta que el compilador de C de GNU lo substituyó en 4.4BSD.El Portable C Compiler o Compilador de C Portable (también conocido como pcc o, algunas veces, como pccm - máquina de compilador de C portable) fue uno de los primeros compiladores para el lenguaje de programación C escrito por Stephen C. Johnson de los Laboratorios Bell a mediados de los 70, basado, en parte, en las ideas de un trabajo previo de Alan Snyder en 1973.

Las claves para el éxito del pcc fueron sus capacidades de portabilidad y diagnóstico.
  • El compilador fue diseñado de tal manera que solamente unos pocos ficheros de su código fuente eran dependientes de la máquina.
  • Era robusto ante los errores de sintaxis de forma que rehusaba compilar programas inválidos.
  • Aislaba el código dependiente de la máquina que era necesario reescribir manualmente en lenguaje ensamblador de la máquina de destino.
  • Auto-optimizaba en la primera pasada.
Estas características eran novedosas en los tiempos en los que pcc fue escrito. El primer compilador de C, escrito por Dennis Ritchie usando como método un analizador sintáctico descendente recursivo estaba fuertemente ligado al PDP-11, y dependía de un optimizador -dependiente de la máquina- que mejoraba el código en una segunda pasada. Por el contrario, el compilador multi-pasada de Johnson tenía en cuenta el número de accesos a memoria en las secuencias de código de cada expresión generando el código con el menor número de accesos a memoria.

Interprete de lenguajes de programación
Intérprete o interpretador es un programa informático capaz de analizar y ejecutar otros programas. Los intérpretes se diferencian de los compiladores o de los ensambladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.
Usando un intérprete, un solo archivo fuente puede producir resultados iguales incluso en sistemas sumamente diferentes (ejemplo. una PC y una PlayStation 4). Usando un compilador, un solo archivo fuente puede producir resultados iguales solo si es compilado a distintos ejecutables específicos a cada sistema.
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce, por ejemplo, en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos), y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).
Para mejorar el desempeño, algunas implementaciones de programación de lenguajes de programación pueden interpretar o compilar el código fuente original en una más compacta forma intermedia y después traducir eso al código de máquina (ej. PerlPythonMATLAB, y Ruby). Algunos aceptan los archivos fuente guardados en esta representación intermedia (ej. Python, UCSD Pascal y Java).
En la actualidad, uno de los entornos más comunes de uso de los intérpretes es en los navegadores web, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma.

viernes, 9 de marzo de 2018

Práctica con ciclos

Hacer un programa que imprima las tablas de multiplicar del 1 al 10

#include<stdio.h>

main()

{
int multiplicando=1;
int multiplicador=1;
int resultado;

printf("\n **********Tablas de multiplicar**********");

while (multiplicando<=10)

{

while (multiplicador<=10)

{

resultado = multiplicando * multiplicador;

printf("\n %d",multiplicando);
printf(" * %d",multiplicador);
printf(" = %d",resultado);
multiplicador = multiplicador + 1 ;
}

multiplicando = multiplicando + 1 ;
}

return 0;

}



Programa que imprime todos los números pares que hay entre 1 y el 100


include<stdio.h> 
int main() 

int c; 

c = 0; 

while(c < 100) 
c = c + 1; 

if (c % 2 == 0) 

printf("\n%i", c); 

return; 




Programa que imprime todos los números impares entre el 1 y el 100



#include <iostream> 
int main() 
int i; //para el for 
for(i=1;i<100;i++) 
if((i%2)!=0) //si el residuo de i/2 es diferente a 0 entonces es impar y lo manda a imprimir... 
cout<<i<<endl; 





Que imprima la tabla de multiplicar solicitud por el usuario



#include <stdio.h>

int main()
{
    char seguir;
    int i, numero;

    do
    {
        printf( "\n   Introduzca un n%cmero entero: ", 163 );
        scanf( "%d", &numero );

        printf( "\n   La tabla de multiplicar del %d es:\n", numero );

        /* Inicio del anidamiento */

        for ( i = 1 ; i <= 10 ; i++ )
            printf( "\n   %d * %d = %d", i, numero, i * numero );

        /* Fin del anidamiento */

        printf( "\n\n   %cDesea ver otra tabla (s/n)?: ", 168 );
        fflush( stdin );
        scanf( "%c", &seguir );

    } while ( seguir != 'n' );

    return 0;
}



Que solicite 2 números (el primero menor que el segundo) e imprima la suma de los cuadrados de todo los números desde el primero hasta el segundo

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
            int num, cont, x;
           
            printf("Introduzca número: ");
            scanf("%d",&num);
           
            cont=0;
           
            for (x=1;x<=num;x++)
            {
        if (num%x==0)
        {
           cont++;
        }
    }
           
            if (cont==2 || num==1 || num==0)
            {
     printf("Es primo\n");
    }
    else
    {
     printf("No es primo\n");
    }               
           
    system("PAUSE");     
    return 0;

}

Ciclos en C++

Los ciclos o también conocidos como bucles, son una estructura de control esencial al momento de programar. Tanto C como C++ y la mayoría de los lenguajes utilizados actualmente, nos permiten hacer uso de estas estructuras. Un ciclo o bucle permite repetir una o varias instrucciones cuantas veces lo necesitemos, por ejemplo, si quisiéramos escribir los números del uno al cien no tendría sentido escribir cien líneas mostrando un numero en cada una, para esto y para muchísimas cosas más, es útil un ciclo, permitiéndonos hacer una misma tarea en una cantidad de líneas muy pequeña y de forma prácticamente automática.
Existen diferentes tipos de ciclos o bucles, cada uno tiene una utilidad para casos específicos y depende de nuestra habilidad y conocimientos poder determinar en qué momento es bueno usar alguno de ellos. Tenemos entonces a nuestra disposición los siguientes tipos de ciclos en C++:
  • Ciclo for en C++
  • Ciclo while en C++
  • Ciclo do-while en C++
Ciclo "for"

Los ciclos "for" son lo que se conoce como estructuras de control de flujo cíclicas o simplemente estructuras cíclicas, estos ciclos, como su nombre lo sugiere, nos permiten ejecutar una o varias líneas de código de forma iterativa, conociendo un valor especifico inicial y otro valor final, además nos permiten determinar el tamaño del paso entre cada "giro" o iteración del ciclo.
Para comprender mejor el funcionamiento del ciclo for, pongamos un ejemplo, supongamos que queremos mostrar los números pares entre el 50 y el 100, si imaginamos un poco como seria esto, podremos darnos cuenta que nuestro ciclo deberá mostrar una serie de números como la siguiente: 50 52 54 56 58 60 ... 96 98 100. Como podemos verificar, tenemos entonces los componentes necesarios para nuestro ciclo for, tenemos un valor inicial que sería el 50, tenemos también un valor final que sería el 100 y tenemos un tamaño de paso que es 2 (los números pares). Estamos ahora en capacidad de determinar los componentes esenciales para un ciclo "for".
La sintaxis de un ciclo "for" es simple en C++, en realidad en la mayoría de los lenguajes de alto nivel es incluso muy similar, de hecho, con tan solo tener bien claros los 3 componentes del ciclo "for" (inicio, final y tamaño de paso) tenemos prácticamente todo hecho.
for(int i = valor inicial; i <= valor final; i = i + paso) { .... .... Bloque de Instrucciones.... .... .... }
Vamos ahora a ver línea por línea el anterior código para comprender todo y quedar claros. Posteriormente veremos un ejemplo con valores reales.

Línea 1:

En esta línea está prácticamente todo lo esencial de un ciclo for. La sintaxis es simple, tenemos una variable de control llamada i que es tipo entero (int), cabe notar que la variable se puede llamar como nosotros lo deseemos y puede ser del tipo de queramos también, sin embargo en la mayoría de los casos se usa la "i" como nombre y el entero como tipo, pero somos libres de modificar esto a nuestro gusto. Esta variable "i" se le asigna un valor inicial que puede ser cualquier número correspondiente al tipo de dato asignado. Posteriormente lo que haremos será especificar hasta donde irá nuestro ciclo por medio del valor final, ten en cuenta que cada uno de estos componentes es separado por un punto y coma ";", también es importante saber que la condición final puede ser cualquier cosa, mayor, menor, mayor o igual, menor o igual, sin embargo no tiene sentido que la condición sea por ejemplo un igual, pues nuestra variable de control siempre va a cambiar entre valores, menores o mayores que el valor final deseado, si fuera un igual no tendríamos un error de sintaxis, pero nuestro "for" básicamente no haría nada de nada. Finalmente el ultimo componente de esta primer línea es el tamaño del paso, este componente se especifica aumentando en la cantidad deseada la variable de control.

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como seguramente ya sabrás indica que allí comienza el bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta llave no es del todo obligatoria, sin embargo si no la ponemos solo se ejecutara dentro de nuestro ciclo la primera línea inmediatamente posterior a la declaración del ciclo, de modo que si deseamos que se ejecuten varias líneas dentro de nuestro ciclo, debemos usar las llaves

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de líneas necesarias incluso, como veremos más adelante dentro de estas podría haber uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo.

Línea 8:

En esta última línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya sabrás esta nos indica que allí termina el bloque del ciclo for y se dará por terminada la ejecución de este para continuar ejecutando el resto del algoritmo.
No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy seguro que con un par de ejemplos que veremos a continuación, te va a quedar todo claro.
Ejemplo:
#include "iostream"

using namespace std;
int main()
{

for(int i=50;i<=100;i+=2)
{//Notemos que escribir i+=2 es similar a escribir i = i + 2
cout << i << endl;
}
system("PAUSE");
return 0;
}


Ciclo "while"

Los ciclos while son también una estructura cíclica, que nos permite ejecutar una o varias líneas de código de manera repetitiva sin necesidad de tener un valor inicial e incluso a veces sin siquiera conocer cuando se va a dar el valor final que esperamos, los ciclos while, no dependen directamente de valores numéricos, sino de valores booleanos, es decir su ejecución depende del valor de verdad de una condición dada, verdadera o falso, nada más. De este modo los ciclos while, son mucho más efectivos para condiciones indeterminadas, que no conocemos cuando se van a dar a diferencia de los ciclos for, con los cuales se debe tener claro un principio, un final y un tamaño de paso.
Para comprender mejor el funcionamiento del ciclo while, pongamos un buen ejemplo, imaginemos que por algún motivo, queremos pedirle a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un número mayor a 100. Como vemos, aquí no podríamos utilizar un ciclo for, pues no tenemos ni idea de cuándo al usuario se le va a ocurrir ingresar un número mayor que 100, es algo indeterminado para nosotros, sin embargo el ciclo while nos permite ejecutar una acción de forma infinita hasta que se cumpla alguna condición especifica, en nuestro caso sería que el numero ingresado sea mayor a 100. De modo que si el usuario nos ingresa de manera sucesiva los siguientes numero 1,50,99, 49, 21, 30, 100 ..., nuestro programa no finalizara, pues ninguno de estos números es mayor que 100, sin embargo si nos ingresara el numero 300, el programa finalizaría inmediatamente.
La sintaxis de un ciclo while es incluso más simple y "legible" que la del ciclo for en C++, pues simplemente requerimos tener clara una condición de parada. En realidad, en la mayoría de los lenguajes de alto nivel la manera de escribir un ciclo while (la sintáxis) es incluso muy similar, así que con tan solo tener bien clara una condición de finalización para el ciclo tendremos prácticamente todo hecho.
while(condición de finalización) //por ejemplo numero == 100
{
....
....
Bloque de Instrucciones....
.... .... }
Vamos entonces a ver línea por línea el anterior código para comprender todo y quedar claros. Posteriormente veremos el ejemplo planteado anteriormente y su solución.

Línea 1:

En esta línea está prácticamente todo lo esencial de un ciclo while. La sintaxis es bastante simple. Tenemos al interior de los paréntesis una condición cualquiera, es decir por ejemplo "==. >, <, >=, <=, !=" o algunas mas que se nos puedan ocurrir, esta condición que especifiquemos allí, es la que permitirá que el ciclo se siga ejecutando hasta que en algún momento esta misma condición deje de cumplirse, de esta forma si por ejemplo estamos verificando que un numero_cualquiera == 50, el ciclo se ejecutara solo cuando numero_cualquiera sea igual a 50, en cuanto su valor cambie a cualquier otro el ciclo while finalizara y continuara con el resto de la ejecución del programa. De esta forma, es evidente que la condición que allí ingresemos siempre deberá tomar un valor booleano (true o false).

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que allí comienza un bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta llave no es del todo obligatoria, sin embargo si no la ponemos solo se ejecutara dentro de nuestro ciclo while la primera línea inmediatamente posterior a la declaración del ciclo, de modo que si deseamos que se ejecuten varias líneas dentro de nuestro ciclo, debemos usar las llaves

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de líneas necesarias incluso, como veremos más adelante dentro de estas podría haber uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo.

Línea 8:

En esta última línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya debemos saber esta nos indica que allí termina el bloque del ciclo while y se dará por terminada la ejecución de este para continuar ejecutando el resto del algoritmo.
No te preocupes si no comprendiste muy bien lo que acabo de escribir, estoy seguro que con un par de ejemplos que veremos a continuación, te va a quedar todo claro.
Ejemplo:
#include "iostream"
using namespace std;
int main()
{
int numero;
cout << "Ingrese un numero ";
cin >> numero;
while(numero <= 100)
{
cout << "Ingrese un numero ";
cin >> numero;
}
system("PAUSE");
return 0;
}

Ciclo do-while


Los ciclos do-while son una estructura de control cíclica, los cuales nos permiten ejecutar una o varias líneas de código de forma repetitiva sin necesidad de tener un valor inicial e incluso a veces sin siquiera conocer cuando se va a dar el valor final, hasta aquí son similares a los ciclos while, sin embargo el ciclo do-while nos permite añadir cierta ventaja adicional y esta consiste que nos da la posibilidad de ejecutar primero el bloque de instrucciones antes de evaluar la condición necesaria, de este modo los ciclos do-while, son más efectivos para algunas situaciones especificas. En resumen un ciclo do-while, es una estructura de control cíclica que permite ejecutar de manera repetitiva un bloque de instrucciones sin evaluar de forma inmediata una condición especifica, sino evaluándola justo después de ejecutar por primera vez el bloque de instrucciones.
Para comprender mejor el funcionamiento del ciclo while, usemos de nuevo el ejemplo de la sección anterior sobre el ciclo while. Imaginemos entonces que por algún motivo, queremos pedirle a un usuario una serie de números cualquiera y que solo dejaremos de hacerlo cuando el usuario ingrese un número mayor a 100. Como vimos anteriormente, esto se puede hacer por medio de un ciclo while, pero vamos ahora a ver como lo podemos hacer usando un ciclo do-while mejorando así un poco nuestro algoritmo, evitando ciertos comandos, tal como se dijo con el ciclo while, en efecto aquí estamos en la situación de no tener ni idea de cuándo al usuario se le va a ocurrir ingresar un número mayor que 100, pues es algo indeterminado para nosotros, sin embargo el ciclo while y en efecto el do-while nos permite ejecutar cierta acción de forma infinita hasta que se cumpla alguna condición especifica, en nuestro caso sería que el numero ingresado sea mayor a 100. De modo que si el usuario nos ingresa de manera sucesiva los siguientes numero 1,50,99, 49, 21, 30, 100 ..., nuestro programa no finalizara, pues ninguno de estos números es mayor que 100, sin embargo si nos ingresara el numero 300, el programa finalizaría inmediatamente.
Vamos a ver ahora como es la sintaxis de un ciclo do-while en C++, así estaremos listos para usarlos en nuestros programas de ahora en adelante cada vez que lo necesitemos.

La sintaxis de un ciclo do-while es un tanto más larga que la del ciclo while en C++, sin embargo no se hace más complicado, de hecho con tan solo tener bien clara una condición de finalización para el ciclo tendremos prácticamente todo terminado.
 
do
{
....
....
Bloque de Instrucciones....
.... .... }
while(condición de finalización); //por ejemplo numero != 23
Vamos entonces a ver línea por línea el anterior código para comprender todo y quedar claros. Posteriormente veremos el ejemplo planteado anteriormente y su solución.

Línea 1:

Esta línea es por decirlo así, la parte novedosa del ciclo do-while, esta expresión no evalúa ninguna condición ni nada, simplemente da paso directo al bloque de instrucción y luego permite la evaluación de la condición.

Línea 2:

En la línea 2 tenemos una llave abriendo "{" lo cual como sabemos indica que allí comienza un bloque de instrucciones que se ejecutaran cada vez que el ciclo de un "giro". Esta llave no es del todo obligatoria, sin embargo si no la ponemos solo se ejecutará dentro de nuestro ciclo la primera línea inmediatamente posterior a la instrucción do, de modo que si deseamos que se ejecuten varias líneas dentro de nuestro ciclo, debemos usar las llaves. En lo personal, es preferible poner siempre las llaves sin importar cuantas líneas se vayan a ejecutar, es una buena práctica de programación y te puede evitar dolores de cabeza

Línea 3 a 7:

En estas líneas es donde estarán todas las operaciones que queramos llevar a cabo de manera iterativa durante la ejecución del ciclo, este bloque podrá tener la cantidad de líneas necesarias incluso, como veremos más adelante dentro de estas podría haber uno o más ciclos, así que podrías tener todo un programa dentro de un ciclo.

Línea 8:

En esta última línea hacemos uso de la llave cerrando "}", una vez más como seguramente ya debemos saber esta nos indica que allí termina el bloque de instrucciones que se ejecutarán de manera cíclica y se dará por terminada la ejecución de este para continuar ejecutando el resto del algoritmo.

Línea 9:

La línea 9 en el ciclo do-while, tiene la misma importancia y función que l alinea 1 en la sección del ciclo while, cabe resaltar que simplemente evalúa la condición y define si se cumple o no para seguir con la ejecución del ciclo o con la del resto del algoritmo, de este modo podemos ver que el ciclo while y el do-while son muy similares, con la pequeña diferencia en que en uno se evalúa la condición desde el principio y en la otra al final de cada ciclo.
Ejemplo:

#include "iostream"

using namespace std;
int main()
{
int numero;
do
{
cout <<  "Ingrese un numero ";
cin >> numero;
}
while(numero <= 100);
system("PAUSE");
return 0;

}



Fuente:
  • https://www.programarya.com/Cursos/C++/Ciclos/Ciclo-for
  • https://www.programarya.com/Cursos/C++/Ciclos/Ciclo-while
  • https://www.programarya.com/Cursos/C++/Ciclos/Ciclo-do-while



Tablas de multiplicar

#include <iostream> using namespace std; int imprime_tabla(int opcion); int main() { int opcion=0; cout << "Tablas de...