Ir al contenido principal

Introducción a C: Estructuras de control...

Llegamos a la cuarta y última parte de esta introducción a C donde nos centramos en las nociones básicas para empezar a programar en este lenguaje, en las próximas entradas abordaremos temas específicos, resolveremos problemas y pondremos a su disposición enunciados para que pongan en práctica los conocimientos adquiridos.

En esta entrada, nos centraremos en las estructuras de control en C. Si comprendieron el funcionamiento de las mismas en pseudocódigo no tendrán muchos problemas para usarlas en este lenguaje.

A tener en cuenta:

*Hay que recordar que las llaves "{ }" marcan el principio y final de cada bloque, por lo que hay que ser cuidadosos más adelante cuando se nos presente un problema en que debamos utilizar estructuras anidadas (estructuras de control dentro de otras estructuras). 

*Recomendamos el uso de identación (sangría) para entender mejor el código y generar un buen hábito a la hora de programar, tal como explicamos en pseudocódigo; aunque para el compilador en C la identación es totalmente superflua. 

Estructuras de selección:

Recordando las estructuras de selección en pseudocódigo, nos encontrábamos generalmente con sisi...sino y según que nos resultarán muy familiares en C ya que sus equivalentes: if, if...elseswitch ya que tienen una estructura muy similar.

IF: 

Como podemos ver, esta estructura es prácticamente igual que en pseudocódigo, donde tenemos una condición y si esta se cumple realizará una serie de instrucciones. Hay que recordar que cada instrucción debe finalizar en " ; " o tendremos un error de sintaxis al momento de la compilación. 

*NOTA: Cuando el if tiene una sola línea de instrucciones, puede prescindirse de las llaves. Pero tengan mucho cuidado si se trata de estructuras anidadas.
  

IF...ELSE:


En este caso, si la condición se cumple ejecuta la instrucción1 (que no necesariamente tiene que ser una sola sino que pueden ser varias), en caso contrario ejecuta instrucción2.





SWITCH:

En la estructura switch, evaluaremos los casos que corresponden a los valores que puede tomar una variable declarada anteriormente. Estos casos se escribirán como "case valor: " seguido de las instrucciones a realizarse. 

En el caso que var tenga dicho valor, entrará en ese caso del switch y ejecutará las instrucciones correspondientes. 

El caso default engloba todos los valores diferentes a los de los casos anteriores y ejecutará las instrucciones que se indiquen.

La palabra reservada break se utiliza en cada caso, para modificar el flujo de control dentro del programa, de manera que si ingresó a algún caso, luego salga de la estructura sin evaluar las demás posibilidades. 






Estructuras iterativas:

En pseudocódigo, vimos las estructuras mientras y hacer nombrando además una variante de esta última que nombramos para. Ahora en C, veremos dos que mantienen similitudes con mientras y para: while y for y una tercera que será una combinación entre el hacer y el mientras: do...while.

WHILE:


Como nuestro ya conocido mientras, la estructura while realiza iteraciones de las instrucciones hasta que deje de cumplirse la condición especificada.




FOR: 

En el for, declaramos una variable auxiliar que irá marcando la cantidad de veces que se realizará la iteración. Esta variable irá desde un valor de inicio hasta un valor final, incrementando de la manera que especifiquemos. 
En la imagen vemos var++ que, como vimos en la entrada destinada a los operadores, incrementa la variable en una unidad, en caso que quisiéramos que el incremento sea de tres en tres, en lugar de eso colocaríamos var=var + 3 y de la misma manera en otros casos.

DO...WHILE:

En esta estructura, se realizan las instrucciones mientras se cumpla la condición especificada, en caso contrario sale de la estructura. 
A diferencia de las otras estructuras, el do...while asegura que siempre las instrucciones se ejecutarán al menos una vez.



Aquí terminamos esta serie de entradas introductorias a C, espero que les sirva para empezar en el mundo de la programación en este lenguaje. Cualquier duda pueden realizarla por comentarios en el blog o a través de facebook.

En las próximas entradas resolveremos algunos problemas utilizando todo lo aprendido.


Comentarios

Entradas populares de este blog

C: Conversiones de tipo (casting) en C...

El casting o simplemente cast  nos permite hacer una conversión explícita de un tipo de dato a otro, a criterio del programador siempre y cuando estos tipos sean compatibles. Este cast se realiza a través de un operador de conversión de tipos (type casting operator) y es un recurso a tener en cuenta ya que hay situaciones en que nos puede resultar de gran utilidad. Hacer uso de un cast es tan sencillo como poner (tipo de dato)  delante de la expresión o variable a convertir. Veamos un ejemplo: Declaramos una variable de tipo int con un identificador tan creativo como "a" y le realizamos diferentes cast a a para mostrarlo como si fuera un float, un double y un char en un printf. Lo que obtendríamos en pantalla sería lo siguiente: Donde tenemos el valor de nuestro a, a convertido en float y double (mostrándolo con 3 cifras decimales) y a convertido en char. Si vemos este último caso, al hacer la conversión de "a" a char toma a como el código ascii de

C: Ejemplos: Congruencia de Zeller (nivel básico) ...

La Congruencia de Zeller es un algoritmo que se atribuye al matemático alemán Julius Christian Johannes Zeller que vivió en el siglo XIX. Este algoritmo nos permite determinar el día de la semana que le corresponde a una fecha determinada del calendario Gregoriano. La fórmula que nosotros usaremos (con algunas modificaciones respecto de la original para poder usarla en  informática) es la siguiente: Donde h es el día de la semana (entre 0 y 6), J es año/100 (la centuria) y K es año mod 100 (el año de la centuria). Y hay que tener en cuenta que los meses de enero y febrero cuentan como el mes 13 y 14 del año anterior. Ahora que tenemos la fórmula, programemos el algoritmo en C mediante el uso de una función: Analicemos el código paso a paso: Tenemos en cuenta el caso de enero y febrero: Dijimos que estos meses corresponden a los meses 13 y 14 del año anterior por lo que los asignamos como corresponde (mes + 12 , que dará 13 para enero y 14 para febrero) y le rest

Algoritmos: Resolución de problemas y refinamientos en pseudocódigo...

En otras entradas, vimos las partes que debe tener nuestro algoritmo en pseudocódigo y las estructuras que utilizaremos para resolverlo. Ahora llega el turno de implementar todo en conjunto para dar origen a nuestra creación. Pero ¿cómo resolvemos un problema así? Para hacerlo, utilizaremos lo que llamamos refinamientos sucesivos. Este concepto consiste en dividir el problema en subproblemas más pequeños y a estos, a su vez, en otros más pequeños; y así sucesivamente hasta que la solución de los últimos sea trivial, sencillo de resolver. Luego usaremos todas las soluciones obtenidas para armar la solución de nuestro problema mayor. Este principio, tiene base en parte de la técnica divide and conquer (dependiendo de la traducción: "divide y vencerás") que es una de las muchas técnicas de resolución de algoritmos existentes. Como vemos, al dividir el problema en otros más pequeños y más fáciles de resolver, podemos pasar de un problema complicado a uno cuya solución es much