25 noviembre 2014

C++ para C# 2: Condiciones y bucles

Ahora vamos a ver una serie de cosas que sí se parecen mucho en C# y C++: la comprobación de condiciones y las estructuras repetitivas. Vamos a ver un único fuente en C# que use la mayoría de estas estructuras, junto con variables de tipo "int" y "char", y luego miraremos los (pocos) cambios al convertirlo a C++.

using System;
 
class CondicionesBucles
{
 
    public static void Main()
    {
        int num1=5, num2=-3;
 
        if (( num1 > 0) && (num2 > 0))
            Console.WriteLine ("Los dos numeros son positivos");
        else if (( num1 > 0) || (num2 > 0))
            Console.WriteLine ("Uno es positivo");
        else
            Console.WriteLine ("Ninguno es positivo");
 
        // ----------------
 
        char letter = 'e';
 
        switch(letter)
        {
            case 'A':
                    Console.Write("A Mayusc");
                    goto case 'a';
            case 'E':
            case 'I':
            case 'O':
            case 'U':
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                    Console.WriteLine("Es una vocal");
                    break;
            case '.':
                    Console.WriteLine("Es un punto");
                    break;
            default:
                    Console.WriteLine("No es vocal ni punto");
                    break;
        }
 
        // ----------------
        int a=3, b=-5;
        int cantidadDePositivos =
             (a>0) && (b>0)  ? 2
                :  (a>0) || (b>0)  ? 1 : 0;
        Console.WriteLine("Positivos: {0}",
            cantidadDePositivos);
 
        // ----------------
        int first = 5;
        int last = 12;
        int i;
 
        // --- for ---
        for (i = first; i <= last; i++)  {
            Console.Write("{0} ",i);   
 
        }
        Console.WriteLine();
 
        // --- while ---
        i = first;
        while ( i <= last)  {
            Console.Write("{0} ",i);   
            i++;
        }
        Console.WriteLine();
 
        // --- do...while ---
        i = first;
        do  {
            Console.Write("{0} ",i);   
            i++;
        }
        while ( i <= last);
        Console.WriteLine();
 
   }
}


En C++ sería muy similar:


// Condiciones y bucles
#include <iostream>
using namespace std;
 
int main () 
{
    int num1=5, num2=-3;
 
    if (( num1 > 0) && (num2 > 0))
        cout << "Los dos numeros son positivos" << endl;
    else if (( num1 > 0) || (num2 > 0))
        cout << "Uno es positivo" << endl;
    else
        cout << "Ninguno es positivo" << endl;
 
    // ----------------
 
    char letter = 'e';
 
    switch(letter)
    {
        case 'A':
                cout << "A Mayusc" << endl;
        case 'E':
        case 'I':
        case 'O':
        case 'U':
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
                cout << "Es una vocal" << endl;
                break;
        case '.':
                cout << "Es un punto" << endl;
                break;
        default:
                cout << "No es vocal ni punto" << endl;
                break;
    }
 
    // ----------------
    int a=3, b=-5;
    int cantidadDePositivos =
         (a>0) && (b>0)  ? 2
            :  (a>0) || (b>0)  ? 1 : 0;
    cout << "Positivos: " <<
        cantidadDePositivos << endl;
 
    // ----------------
    int first = 5;
    int last = 12;
    int i;
 
    // --- for ---
    for (i = first; i <= last; i++)  
    {
        cout <<  i << " " ; 
    }
    cout << endl;
 
    // --- while ---
    i = first;
    while ( i <= last)  
    {
        cout << i << " " ; 
        i++;
    }
    System.out.println();
 
    // --- do...while ---
    i = first;
    do  
    {
        cout <<  i << " "; 
        i++;
    }
    while ( i <= last);
 
    cout << endl;
 
    return 0;
}


Los parecidos son:


  • El tipo de datos "int" representa un número entero, igual que en C#, y se le pueden dar valores en el momento de declarar o después. El manejo del tipo "char" también es igual que en C#.
  • Las condiciones se pueden comprobar con "if" (sencillas), "switch" (múltiples) y con el operador condicional (abreviadas).
  • Podemos repetir bloques de programa usando "for", "while" y "do-while", de igual manera que en C#.


Las diferencias (porque apenas hay dos que no nos hayamos encontrado antes):


  • Cuando un "case" de la orden "switch" delega en otro distinto, en C++ no hace falta indicar "goto case": si no hay un "break" al final, el control pasa automáticamente al siguiente caso (lo que puede dar lugar a errores difíciles de descubrir en caso de que "olvidemos" algún "break").
  • Si queremos escribir varias cosas en pantalla usando una misma orden, no se usa {0}, {1} y sucesivos, sino que separamos los distintos elementos con "<<".


¿Y ahora qué? En la siguiente sesión hablaremos de las cadenas de texto y de cómo leer desde teclado, para pasar después a hablar de arrays y structs, y más adelante a funciones. (También puedes leer la toma de contacto).