[C con Clase] Varias dudas con switch

Steven Davidson steven en conclase.net
Lun Mar 5 00:15:27 CET 2007


Hola Elis,

El pasado 2007-03-04 13:53:06, Elis Brito escribió:

EB> Buenas, tengo cierta duda de la estructura switch, no tengo lenguaje c o 
EB> turbo c para compilar mis programas y me baso mas que todo en pura teoria. 
EB> Necesito saber si es posible trabajar en la estructura switch con variables 

Sí puedes usar variables de tipo 'float'. Por ejemplo,

float fNum;

cin >> fNum;

switch( fNum )
{
  case 1.0f:
    // Hacer algo aquí
  break;

  case -1.0f:
    // Hacer otra cosa aquí
  break;

  case 0.0f:
    // Hacer algo más por aquí
  break;

  default:
    // Hacer algo por defecto para cualesquier otros valores
}

EB> de tipo float? también si puedo utilizar la estructura switch para arreglos 
EB> bidimensionales y cuales serian las distintas opciones para sumar, restar y 
EB> sacar promedio a los elementos de una matriz.
EB> 

Hay que tener cuidado con arrays. Ten presente que, al manipular arrays, el lenguaje no manipula sus contenidos, sino sus direcciones de memoria, que es exactamente lo que es un array. Por ejemplo,

char szCadena[128];

cin >> szCadena;

switch( szCadena )
{
  case "HOLA":
    // Hacer algo aquí
  break;

  case "ADIOS":
    // Sentencias
  break;

  case "SI":
    // Más sentencias
  break;

  case "NO":
    // Y más sentencias
  break;

  default:
    // Por defecto
}

En este caso, siempre se ejecutarán las sentencias por defecto - bajo la etiqueta 'default'. Esto es porque se compararían la dirección de memoria de 'szCadena' con las direcciones de memoria de las otras cadenas literales. Como tales cadenas son únicas, sus direcciones de memoria son diferentes y por tanto 'switch' no llegará a ninguna de las etiquetas indicadas; excepto por 'default'. Ocurre lo mismo con arrays bidimensionales; estaríamos comparando direcciones de memoria y no sus contenidos.

Tendrás que usar algún algoritmo para comparar los contenidos para determinar si son iguales o no. Esto implicará ir elemento por elemento de cada array comparándolos.

En cuanto a las operaciones de matrices, tienes que definir a qué te refieres con "matriz". Si es en términos matemáticos, entonces es cuestión de implementar las operaciones ya existentes para tratar matrices: suma, resta, multiplicación, etc.. La cuestión de "promedio" no tiene mucho sentido al hablar de matrices tanto en términos matemáticos como informáticos. Claro que si tienes algo en mente al referirte a promedios, entonces adelante con su implementación.


Espero que todo esto te ayude.

Steven


Más información sobre la lista de distribución Cconclase