Ahora voy a continuar presentando diferencias entre Visual Basic y C# a la hora de manipular arreglos.
Se trata de otro ejercicio del curso Programador .NET de Becas Control+F, y en este caso se utiliza un generador de números pseudoaleatorios para evitarse el trabajo de ingresar los datos.
Para ello el Framework facilita una clase Random que permite generar estos números con un método donde se le indica los límites inferior y superior que se desea generar, en la documentación de este método se indica que el límite superior debe ser uno más que el valor que se desa generar.
Ejemplo en C#
1: /// <summary>
2: /// A cuarenta alumnos se les preguntó el nivel de calidad de los alimentos
3: /// de la cafetería para alumnos en una escala de 1 a 10 (1 significa terrible
4: /// y 10 significa excelente). Coloque las cuarenta respuestas en una arreglo
5: /// entero y resuma los resultados de la encuesta. Realice el Histograma
6: /// (utilice nuevamente asteriscos (*) para realizar el grafico)
7: /// </summary>
8: static void Ejercicio2()
9: {
10: Console.Clear();
11: Console.WriteLine("Laboratorio 3 - Ejercicio 2");
12:
13: int[] valores = new int[40];
14: Random generador = new Random(); // Objeto para generar números pseudoaleatorios
15:
16: for (int i = 0; i < 40; ++i)
17: {
18: valores[i] = generador.Next(1, 11);
19: }
20: // Inicializar el arreglo con la cuenta de valores
21: int[] histograma = new int[11];
22: for (int i = 0; i < histograma.Length; ++i)
23: {
24: histograma[i] = 0;
25: }
26: // Contar cuantas veces aparece cada calificación
27: for (int i = 0; i < valores.Length; ++i)
28: {
29: (histograma[valores[i]])++;
30: }
31:
32: for (int i = 1; i < histograma.Length; ++i)
33: {
34: Console.Write("Valor {0,2} - {1,2} veces : ", i, histograma[i]);
35: for (int j = 0; j < histograma[i]; ++j)
36: {
37: Console.Write("*");
38: }
39: Console.WriteLine();
40: }
41:
42: Console.ReadKey();
43: }
Vean en la línea 29 cómo se utiliza el dato que se encuentra en un arreglo (valor[i]) como subindice para acceder a un elemento del arreglo histograma.
Por esa razón es que la dimensión del arreglo histograma es de 11, para que se pueda acceder a la posicón 10. Por supuesto que se podría utilizar algo como (histograma[valores[i]-1])++ y dejar el arreglo en 10 pero queda más claro de esa manera.
Parecería que hacer esto en Visual Basic resulta más comprensible, veamos el código
Ejemplo en Visual Basic
1: ''' <summary>
2: ''' A cuarenta alumnos se les preguntó el nivel de calidad de los alimentos
3: ''' de la cafetería para alumnos en una escala de 1 a 10 (1 significa terrible
4: ''' y 10 significa excelente). Coloque las cuarenta respuestas en una arreglo
5: ''' entero y resuma los resultados de la encuesta. Realice el Histograma
6: ''' (utilice nuevamente asteriscos (*) para realizar el grafico)
7: ''' </summary>
8: Sub Ejercicio2()
9: Console.Clear()
10: Console.WriteLine("Laboratorio 3 - Ejercicio 2")
11:
12: Dim valores(40) As Integer
13: Dim generador As Random = New Random() '' Objeto para generar números pseudoaleatorios
14: Dim i, j As Integer
15:
16: For i = 0 To 39
17: valores(i) = generador.Next(1, 11)
18: Next
19: '' Inicializar el arreglo con la cuenta de valores
20: Dim histograma(10) As Integer
21: For i = 0 To histograma.Length - 1
22: histograma(i) = 0
23: Next
24: '' Contar cuantas veces aparece cada calificación
25: For i = 0 To valores.Length - 1
26: histograma(valores(i)) += 1
27: Next
28:
29: For i = 1 To histograma.Length - 1
30: Console.Write("Valor {0,2} - {1,2} veces : ", i, histograma(i))
31: For j = 0 To histograma(i)
32: Console.Write("*")
33: Next
34: Console.WriteLine()
35: Next
36:
37: Console.ReadKey()
38: End Sub
Observen que para recorrer el arreglo utilizamos el método Length de este objeto, pero tuvimos que restarle uno porque el For ... Next de Visual Basic va hasta ese valor, que es uno más de lo que se definió.
Conclusión me quedo con la modalidad de C#, seguramente los desarrolladores acostumbrados a Visual Basic opinen distinto.
Finalmente les muestro el mísmo ejercicio pero obviando el arreglo de valores.
1: /// <summary>
2: /// A cuarenta alumnos se les preguntó el nivel de calidad de los alimentos
3: /// de la cafetería para alumnos en una escala de 1 a 10 (1 significa terrible
4: /// y 10 significa excelente). Coloque las cuarenta respuestas en una arreglo
5: /// entero y resuma los resultados de la encuesta. Realice el Histograma
6: /// (utilice nuevamente asteriscos (*) para realizar el grafico)
7: /// </summary>
8: static void Ejercicio2_bis()
9: {
10: Console.Clear();
11: Console.WriteLine("Laboratorio 3 - Ejercicio 2 bis");
12:
13: Random generador = new Random(); // Objeto para generar números pseudoaleatorios
14: // Inicializar el arreglo con la cuenta de valores
15: int[] histograma = new int[11];
16: for (int i = 0; i < histograma.Length; ++i)
17: {
18: histograma[i] = 0;
19: }
20: // Contar cuantas veces aparece cada calificación
21: for (int i = 0; i < 40; ++i)
22: {
23: (histograma[generador.Next(1, 11)])++;
24: }
25:
26: for (int i = 1; i < histograma.Length; ++i)
27: {
28: Console.Write("Valor {0,2} - {1,2} veces : ", i, histograma[i]);
29: for (int j = 0; j < histograma[i]; ++j)
30: {
31: Console.Write("*");
32: }
33: Console.WriteLine();
34: }
35:
36: Console.ReadKey();
37: }
Esto sería factible si el arreglo de valores no se desea guardar, lo que en general no ocurre; pero sirve como ejemplo.