|
|||||
ÉPOCA II. ENERO 1993 CURSO DE C. CAPITULO III © Warlord Bien. En el número anterior vimos algunas sentencias de entrada y salida de datos, así como la orden if-else. Veamos hoy, algunas similares. Empecemos con la orden SWITCH. Veamos un ejemplo:
Creo que se entiende. El ordenador comprueba la variable dada (que no tiene por qué ser carácter) y comprueba si está en la lista de los "case"que hemos dado. En caso contrario hace default (no necesario). Como veis, cada "case" debe llevar un break al final que le diga que ha acabado. Otro comando similar es el WHILE. Su estructura es: while (condición) sentencia;
Otro similar es DO/WHILE. Su estructura es:
Veamos el ejemplo anterior con do/while:
Podéis observar que en todos estos ejemplos hemos utilizado el comando "Break". Este simplemente fuerza a que el programa continúe en la siguiente sentencia. Una orden similar es la de "continue", aunque en vez de forzar a que continúe, lo que hace es que se salta todas las órdenes que le sigan hasta que termine la iteració. Un "poné": Este programa sólo mostrará los números pares:
En los casos de los bucles "while" y "do/while", una sentencia continue provoca que el programa salte directamente a la parte condicional y después continúe el proceso del bucle. Una orden que creo aún no he comentado es el "goto". En todos lados te recomiendan que no lo utilices. La razón es sencilla. El C se estructuró de modo que fuera innecesario el uso de esta orden. Sin embargo, se incluyó como "reminiscencia" de otros lenguajes de su época. Así pues, nunca debe utilizarse, salvo en casos excepcionales, como puede ser para salir de un bucle. De todos formas, su utilización es así: x=1; bucle: x++; if(xz100) goto bucle: fácil, ¿no?. Como creo sabéis, un array es simplemente un conjunto de caracteres alfanuméricos, es decir en un programa se definen así: tipo nombrevar[tamaño]. Un ejemplo concreto sería: int ejemplo[10] ¡y siempre comienzan en el 0!, es decir, el anterior tendría 11 elementos. Es muy útil saber cuanta memoria nos va a ocupar un array de este tipo. Para hallarla se utiliza la orden: bytes_totales=sizeof(tipo)*longitud En el ejemplo anterior, sería: tamaño=sizeof(int)*11 Hay que tener mucho cuidado con este tipo de estructuras. A veces, definimos un array con 10 elementos y descuidadamente podemos querer meter hasta 100. Es decir, que si por error escribiéramos:
Evidentemente, está mal. Y no existe datos[i] cuando i>10. Lo peor del tema es que el programa no te dará ningún tipo de error (ni al compilar ni al ejecutar, así que cuidado con lo que haces. ¿ok?. Un caso particular son los arrays de caracteres, que se denominan "cadenas" Hay muchos comandos que actúan sobre las cadenas. Simplemente, voy a enumerar algunos: gets(nombre del array): Lee una cadena desde el teclado strcopy(a,b): copia el contenido de la cadena a en la b. strcat(a,b): AÑADE b al final de a strcmp(a,b). Comprueba las dos cadenas y devuelve 0 si son iguales. Devolverá un numero positivo si a es mayor que b o negativo en caso contrario. Pero ojo, cuando digo mayor o menor, al estar tratando con caracteres, me refiero al orden lexicográfico. strlen(a): devuelve la longitud de la cadena a topupper(s[i]):Devuelve el carácter guardado en la posición i pero en mayúsculas. tolower(s[i]): Ídem pero en minúsculas. Un caso más complicado de arrays, son los bidimensionales. Se definen así: tipo nombre[tam1][tam2]; ejemplo: int t,i,num[3][4]; char nombre_apellidos[20][30]; En el caso de que sean cadenas (ie, arrays de caracteres), podemos usar las órdenes anteriores, pero eso sí, sólo pueden manejarse líneas. Por ejemplo, podríamos hacer esto: gets nombre_apellidos[2]; pero no: gets nombre_apellidos[2][3]; En realidad, podemos formar arrays de la dimensión que queramos: tipo nombre[tamaño1][tamaño2].....[tamaño n]; Los arrays se pueden inicializar, además de como vimos antes, de otras formas curiosas. Así:
Para finalizar por hoy, voy a recordaros algo de lo que dije en el primer capítulo sobre punteros, aunque algo ampliado. Os recuerdo que los operadores punteros eran 2:
Como ya dijimos, los punteros se definían así: tipo *nombre variable; Podemos asignar punteros a punteros e incluso sumar enteros a punteros, (como p1=p1+9) Como ya hemos hablado de "arrays", también podemos crear punteros a arrays, así: ejemplo: char str[80],*p1; p1=str; Esto pone en p1 la dirección del primer elemento de str. Así, si quisiéramos acceder a str[4], tendríamos que hacerlo mediante *(p1+4). En el siguiente capítulo, profundizaremos mas sobre el tema. ¡hasta pronto! |
| Envía esta página web a un amigo: Esta opción está desactivada temporalmente, rogamos disculpen las molestias |
|