En este post me interesa mostrar un par de aspectos básicos que me llaman la atención en la programación con Visual Basic y C#
Más allá de mi preferencia por los lenguajes de programación C#, C++ o simplemente C; cuando se desarrolla en la plataforma .NET siempre es posible encontrarse con código escrito en Visual Basic. De manera que debemos conocer algunas pequeñas diferencias que se encuentran. A medida que encuentre estos tips iré comentándolos.
En el siguiente ejercicio lo que me llama la atención es cómo Visual Basic tiene la capacidad de convertir una cadena de texto en un entero directamente desde la consola, lo que en C# debe especificarse con Convert.ToInt32(...)
Otra cosa que es importante destacar es la posibilidad que brinda Visual Basic de realizar divisiones enteras o no, esto lo pueden ver en el resultado de las líneas 19 y 20 del código en Visual Basic, esto tampoco es posible en C# que al dividir enteros presenta un resultado entero. Por supuesto que si deseamos el resultado con decimales hay que hacer una conversión (cast) entonces la división se realizará en ese otro tipo de dato.
Ejercicio 1 en Visual Basic
1: ''' <summary>
2: ''' Escriba un programa que solicite al usuario que introduzca dos números,
3: ''' tome los dos números del usuario, e imprima la suma, el producto,
4: ''' la diferencia, el cociente y el módulo del número
5: ''' </summary>
6: Sub Ejercicio1()
7: Console.Clear()
8: Console.WriteLine("Laboratorio 1 - Ejercicio 1")
9:
10: Dim num1, num2 As Integer
11: Console.WriteLine("Ingrese dos números")
12: Console.Write("Número 1: ")
13: num1 = Console.ReadLine()
14: Console.Write("Número 2: ")
15: num2 = Console.ReadLine()
16: Console.WriteLine("Suma : {0}", num1 + num2)
17: Console.WriteLine("Producto : {0}", num1 * num2)
18: Console.WriteLine("Diferencia : {0}", num1 - num2)
19: Console.WriteLine("Cociente : {0}", num1 / num2)
20: Console.WriteLine("Cociente(*): {0}", num1 \ num2)
21: Console.WriteLine("Módulo : {0}", num1 Mod num2)
22: Console.ReadKey()
23: End Sub
Ejercicio 1 en C#
1: /// <summary>
2: /// Escriba un programa que solicite al usuario que introduzca dos números,
3: /// tome los dos números del usuario, e imprima la suma, el producto,
4: /// la diferencia, el cociente y el módulo del número
5: /// </summary>
6: static void Ejercicio1()
7: {
8: Console.Clear();
9: Console.WriteLine("Laboratorio 1 - Ejercicio 1");
10:
11: int num1, num2;
12: Console.WriteLine("Ingrese dos números");
13: Console.Write("Número 1: ");
14: num1 = Convert.ToInt32(Console.ReadLine());
15: Console.Write("Número 2: ");
16: num2 = Convert.ToInt32(Console.ReadLine());
17: Console.WriteLine("Suma : {0}", num1 + num2);
18: Console.WriteLine("Producto : {0}", num1 * num2);
19: Console.WriteLine("Diferencia : {0}", num1 - num2);
20: Console.WriteLine("Cociente : {0}", num1 / num2);
21: Console.WriteLine("Módulo : {0}", num1 % num2);
22: Console.ReadKey();
23: }
El siguiente ejercicio permite mostrar una alternativa o técnica para validar el ingreso efectivo de un tipo de dato. En este caso se pretende ingresar un número entero y se utiliza un bucle que itera hasta que se produce el ingreso efectivo del número.
He codificado el mismo ejercicio en C# y en Visual Basic, observen que salvo las pequeñas diferencias de sintáxis son iguales. Sin embargo Visual Basic tiene la posibilidad de utilizar el "Do ... Loop Until ..." que no necesita de la negación porque es similar a la estructura que nos enseñan en pseudocódigo "Repetir ... Hasta que ...", mientras que la estructura de C# sería algo como "Repetir ... Mientras ..." lo que la mayoría de las veces confunde a los que no están acostumbrados.
Ejercicio 7 en C#
/// <summary>
/// Escriba un programa que entre un número de cinco digitos, separe el número
/// en sus dígitos individuales e imprima los digitos separados unos de otros
/// mediante tres espacios.
/// Por ejemplo, si el usuario escribe 42339 el programa debería imprimir 4 2 3 3 9
/// </summary>
static void Ejercicio7()
{
Console.Clear();
Console.WriteLine("Laboratorio 1 - Ejercicio 7");
int num1, dig1, dig2, dig3, dig4, dig5;
//num1 = Convert.ToInt32(Console.ReadLine());
do
{
Console.Write("Ingrese un Número: ");
} while (!Int32.TryParse(Console.ReadLine(), out num1));
dig5 = num1 % 10;
dig4 = (num1 / 10) % 10;
dig3 = (num1 / 100) % 10;
dig2 = (num1 / 1000) % 10;
dig1 = (num1 / 10000) % 10;
Console.WriteLine("Digitos: {0} {1} {2} {3} {4}", dig1, dig2, dig3, dig4, dig5);
Console.ReadKey();
}
Ejercicio 7 en Visual Basic
''' <summary>
''' Escriba un programa que entre un número de cinco digitos, separe el número
''' en sus dígitos individuales e imprima los digitos separados unos de otros
''' mediante tres espacios.
''' Por ejemplo, si el usuario escribe 42339 el programa debería imprimir 4 2 3 3 9
''' </summary>
Sub Ejercicio7()
Console.Clear()
Console.WriteLine("Laboratorio 1 - Ejercicio 7")
Dim num1, dig1, dig2, dig3, dig4, dig5 As Integer
''num1 = Convert.ToInt32(Console.ReadLine())
Do
Console.Write("Ingrese un Número: ")
Loop While Not Integer.TryParse(Console.ReadLine(), num1)
dig5 = num1 Mod 10
dig4 = (num1 \ 10) Mod 10
dig3 = (num1 \ 100) Mod 10
dig2 = (num1 \ 1000) Mod 10
dig1 = (num1 \ 10000) Mod 10
Console.WriteLine("Digitos: {0} {1} {2} {3} {4}", dig1, dig2, dig3, dig4, dig5)
Console.ReadKey()
End Sub
Para probarlo deben cambiar en el código anterior las siguientes líneas
Do
Console.Write("Ingrese un Número: ")
Loop Until Integer.TryParse(Console.ReadLine(), num1)