En este ejemplo de aplicación de sentencias selectivas múltiples tomaremos un ejercicio del libro: "Fundamentos de programacíon Piensa en C" (Cairó) el cual dice:
Escribe un programa en C que, al recibir como dato un
arreglo unidimensional de tipo entero de N elementos, determine si el arreglo
es palíndrome. Por ejemplo, el arreglo VEC que se muestra a continuación es
palíndrome:
2
4
5
4
2
Dato: VEC[N] (arreglo unidimensional de tipo entero
de N elementos, 1 ≤ N ≤ 100).
Aplicando los pasos para realizar un diagrama de flujo:
Paso 1: Definición del problema.
Se quiere
realizar un programa que lea un arreglo unidimensional y evalúe el mismo si es
palíndromo. El número de elementos que el arreglo contiene son definidos por el
usuario y debe estar entre 1 y 100. El programa imprime un mensaje: “El arreglo
sí es palíndromo” si el caso es afirmativo o “El arreglo no es palíndromo” si
el caso es negativo.
Paso 2: Planeación de la solución.
Datos de entrada: Número de elementos
que tiene el arreglo, elementos que tiene el arreglo VEC (números enteros).
Datos de salida: Mensaje de
información (caracteres).
Datos adicionales: Ninguno.
Proceso:
Lo primero que
se debe saber es el tamaño del arreglo que es ingresado por el usuario. El
programa lee el tamaño y lo evalúa, si este no está en el rango del 2 al 100
imprime un mensaje que dice "Ingrese un numero entre el rango 2 y 100. Si
el valor está dentro del rango procede a utilizar una sentencia for para generar
el vector cuya dimensión ya fue establecida. Después evalúa utilizando una
sentencia for si el elemento del primer índice es igual al elemento del ultimo,
si esto es verdadero se utiliza una variable "bandera" que se declara
igual a 1, este proceso se repite hasta que se hayan comparado todos los
elementos del vector. Después el programa utiliza una sentencia if para evaluar
esa variable "bandera" la cual si es igual a 0 imprime un mensaje que
dice: "El arreglo no es palindrome" caso contrario imprime un mensaje
que dice: "El vector si es palindrome".
Diagrama de flujo:
Programa en lenguaje C:
/*CABECERA
Nombres: Juan Diego Mantilla
Fecha: 04-Diciembre-2014
Descripción: Programa que evalua si un arreglo que es ingresado por el usuario de n elementos es palindrome o no. El programa lee el tamaño del arreglo y lo evalua, si este no esta en el rango del 2 al 100 imprime un mensaje que dice "Ingrese un numero entre el rango 2 y 100. Si el valor esta dentro del rango procede a utilizar una sentencia for para generar el vector cuya dimension ya fue establecida. Despues evalua utilizando una sentencia for si el elemento del primer indice es igual al elemento del ultimo, si esto es verdadero se utiliza una variable "bandera" que se declara igual a 1, este proceso se repite hasta que se hayan comparado todos los elementos del vector. Despues el programa utiliza una sentencia if para evaluar esa variable "bandera" la cual si es igual a 0 imprime un mensaje que dice: "El arreglo no es palindrome" caso contrario imprime un mensaje que dice: "El vector si es palindrome".
*/
#include <stdio.h>
#define MAX 100
main()
{
int vec[MAX], bandera;
int i, n, j, k;
printf("Ingrese el tamaño del arreglo:");
scanf("%d",&n);
if(n>1&&n<=100)
{
for(i=0;i<n;i++)
{
printf("Ingrese un valor del arreglo:");
scanf("%d",&vec[i]);
}
k=n-1;
for(j=0,k;vec[j]==vec[k];j++,k++)
{
bandera=1;
}
if(bandera==0)
{
printf("\n\nEl arreglo no es palindrome");
}
else
{
printf("\n\nEl arreglo si es palindrome");
}
}
else
{
printf("Ingrese un numero entre el rango 2 y 100");
Un arreglo o vector en lenguaje C es un conjunto de datos que se almacenan en la memoria de manera continua con el mismo nombre. Para diferenciar los elementos de un arreglo se utilizan índices detras del nombre del arreglo y encerrados por [ ].
Existen diferentes tipos de arreglos los cuales son:
ARREGLOS UNIDIMENSIONALES (Arreglos de una dimensión):
Un arreglo unidimensional básicamente es una lista de variables, todas de un mismo tipo a las que se hace referencia por medio de un nombre común. Los datos que el arreglo contiene se los denomina "elementos del arreglo" o "valores almacenados"
Estructura de un arreglo unidimensional:
Para entender mejor la estructura de un arreglo unidimensional se tiene este gráfico que representa la estructura del mismo:
Elementos de un arreglo unidimensional:
Nombre del vector:Es el nombre del arreglo que va a contener "n" elementos.
Indice: Son los espacios o ubicaciones de memoria en los que están los elementos del arreglo. Casi siempre se empieza desde el cero.
Valores almacenados: Son los elementos que están dentro de los espacios de memoria del arreglo.
Nota: El numero de elementos que contiene un arreglo siempre es una constante, nunca una variable.
Arreglo Unidimensional en código C:
Declaración del arreglo: La declaración de un arreglo es lo primero que se debe hacer siempre cuando se maneja estos elementos en programación. La declaración de arreglos se lo realiza de la siguiente manera:
Cuando se va a trabajar con arreglos casi siempre se trabaja con las sentencias for. Para tener mas información acerca de esta sentencia seguir este link: Juan Diego Mantilla: Sentencias repetitivas en lenguaje C. Aquí hay un vídeo donde se explican detalladamente algunos ejemplos sobre arreglos unidimensionales.
ARREGLOS BIDIMENSIONALES (Arreglos de dos dimensiones):
Los arreglos bidimensionales son aquellos que tienen dos dimensiones y, en consecuencia se manejan con dos índices, se puede ver también como un arreglo de arreglos.
Son estructuras de datos que agrupan muchos datos del mismo tipo, en donde cada elemento se puede trabajar individualmente y se puede referenciar con un mismo nombre. Se usan para representar datos que pueden verse como una tabla con filas y columnas. Es decir, son matrices.
Estructura de un arreglo unidimensional:
Para entender mejor la estructura de un arreglo bidimensional se tiene este gráfico que representa la estructura del mismo:
Elementos de un arreglo bidimensional:
Nombre del vector:Es el nombre del arreglo que va a contener "n" elementos.
Subíndices: Son los espacios o ubicaciones de memoria en los que están los elementos del arreglo. Siempre en la escritura de un arreglo bidimensional los primeros subíndices corresponden a las filas y los otros subíndices corresponden a las columnas.
Valores almacenados: Son los elementos que están dentro de los espacios de memoria del arreglo.
Nota: Al igual que en los arreglos unidimensionales, el numero de elementos que contiene un arreglo siempre es una constante, nunca una variable.
Arreglo Bidimensional en código C:
Declaración del arreglo: Al igual que en los arreglos unidimensionales, la declaración es lo primero que se debe hacer siempre cuando se maneja estos elementos en programación. La declaración de arreglos se lo realiza de la siguiente manera:
Al igual que con los arreglos unidimensionales, para la estructura del arreglo bidimensional casi siempre se trabaja con las sentencias for. Aquí hay un vídeo donde se explican detalladamente algunos ejemplos sobre arreglos unidimensionales.
EXISTEN MÁS TIPOS DE ARREGLOS EN LENGUAJE C. LOS CUALES SE IRÁN ACTUALIZANDO EN ESTA ENTRADA DENTRO DE UN TIEMPO.
Referencias:
CS.BUAP. (2014). Matrices(Arreglos Bidimensionales). Recuperado el 30 de Noviembre del 2014 de: http://www.cs.buap.mx/~mtovar/doc/Matrices.pdf
ProyectoC++. (2014). Arreglos Bidimensionales(Matrices). Recuperado el 30 de Noviembre del 2014 de: http://lenguajecmasmas.wordpress.com/2007/10/01/arreglos-bidimensionales-matrices/
SlideShare. (2014). Fundamentos de programación (Arreglos). Recuperado el 30 de Noviembre del 2014 de: http://es.slideshare.net/javi2401/arreglos-en-c-presentation
En este ejemplo de aplicación de sentencias selectivas múltiples tomaremos un ejercicio del libro: "Fundamentos de programacíon Piensa en C" (Cairó) el cual dice:
Se dice que un número N es primo si los únicos enteros positivos que lo dividen son exactamente 1 y N. Construye un diagrama de flujo y el correspondiente programa en C que lea un número entero positivo NUM y escriba todos los números primos menores a dicho número.
Dato: NUM (variable de tipo entero que representa al número entero positivo que se ingresa).
Aplicando los pasos para realizar un diagrama de flujo:
Paso
1: Definición del problema.
Se quiere realizar un programa
que al ingresar un numero entero positivo el programa imprima los números
primos que sean menores a dicho numero ingresado.
Paso
2: Planeación de la solución.
Datos de
entrada: Un número entero positivo
Datos de
salida: Números primos inferiores al número ingresado.
Datos
adicionales: Ninguno.
Proceso:
Lo primero que se debe hacer es
conocer el número que va a servir de límite para calcular los números primos,
después el programa procede a evaluar si el número es mayor que 0, si esta
condición no se cumple imprime “Numero invalido”. Si la condición es verdadera
se procede a declarar contador 2 igual a 1 y contador de la división igual a 0.
El programa después evalúa si el contador dos es menor o igual que el contador,
si esta condición es verdadera procede a evaluar el residuo que hay entre el
contador y el contador 2 y este mismo debe ser igual a cero. Si esto se cumple
el contador de la división aumenta uno, también el contador dos aumenta uno.
Este proceso se repite hasta que el contador 2 sea mayor al contador, cuando
esto ocurre se evalúa si el contador de la división es menor que dos e imprime
el contador y después aumenta el mismo en uno. Este proceso se repite hasta que
el contador sea mayor que el número ingresado. Se utiliza sentencias do if, do
while y while para realizar este programa de repeticiones. El programa imprime
los números que pasaron todas estas evaluaciones, es decir los números primos.
Diagrama de flujo:
Programa en lenguaje C:
/*CABECERA
Nombres: Juan Diego Mantilla
Fecha: 22-Noviembre-2014
Descripción: Lo primero que se debe hacer es conocer el número que va a servir de límite para calcular los números primos, después el programa procede a evaluar si el número es mayor que 0, si esta condición no se cumple imprime "Numero invalido". Si la condición es verdadera se procede a declarar contador 2 igual a 1 y contador de la división igual a 0. El programa después evalúa si el contador dos es menor o igual que el contador, si esta condición es verdadera procede a evaluar el residuo que hay entre el contador y el contador 2 y este mismo debe ser igual a cero. Si esto se cumple el contador de la división aumenta uno, también el contador dos aumenta uno. Este proceso se repite hasta que el contador 2 sea mayor al contador, cuando esto ocurre se evalúa si el contador de la división es menor que dos e imprime el contador y después aumenta el mismo en uno. Este proceso se repite hasta que el contador sea mayor que el número ingresado. Se utiliza sentencias do if, do while y while para realizar este programa de repeticiones. El programa imprime los números que pasaron todas estas evaluaciones, es decir los números primos.
Las sentencias repetitivas son aquellas que repiten una serie de bloques de instrucciones un numero de veces. En lenguaje C se las denomina como "bucle" o "ciclo".La sentencia o grupo de sentencias que se repiten en un bloque se denomina cuerpo del bucle y cada repetición del cuerpo del bucle se llama iteración del bucle.Para ver mas acerca de este tema seguir este link: Juan Diego Mantilla: Introducción a las sentencias repetitivas. Dicho esto se puede clasificar a las sentencias repetitivas en lenguaje C de la siguiente forma:
Sentencia WHILE:
Un bucle while tiene una condición del bucle (una expresión lógica) que controla la secuencia de repetición. La posición de esta condición del bucle es delante del cuerpo del bucle.
Estructura:
while (condición)
{
Sentencia1;
Sentencia2:
Sentencia3;
......
......
Sentencian;
}
Estructura de la sentencia WHILE en diagrama de flujo:
Sentencia DO-WHILE
La sentencia do-while se utiliza para especificar un bucle condicional que se ejecuta al menos una vez. Esta situación se suele dar en algunas circunstancias en las que se ha de tener la seguridad de que una determinada acción se ejecutará una o varias veces, pero siempre se ejecuta al menos una vez.
Estructura:
do{
Sentencia1;
Sentencia2:
Sentencia3;
......
......
Sentencian;
}while(condición);
Estructura de la sentencia DO-WHILE en diagrama de flujo:
Sentencia FOR:
La sentencia for (bucle for) es un método para ejecutar un bloque de sentencias un número fijo de veces. El bucle for se diferencia del bucle while en que las operaciones de control del bucle se sitúan en un solo sitio: la cabecera de la sentencia.
Estructura:
for(Inicializacion; Condición; Incremento)
{
Sentencia1;
Sentencia2:
Sentencia3;
......
......
Sentencian;
}
Inicialización: Inicializa la variables de control del bucle. Se pueden utilizar variables de
control del bucle simples o múltiples.
Condición: Contiene una expresión lógica que hace que el bucle realice las iteraciones de las sentencias, mientras que la expresión sea verdadera.
Incremento: Incrementa o disminuye la variable o variables de control del bucle.
Estructura de la sentencia FOR en diagrama de flujo: La sentencia for no se puede explicar en un diagrama de flujo ya que no hay figura que represente a esta sentencia. Aunque hay autores que representan esta sentencia usando la figura de condición agregándole una línea en un lado.
Resumen:
A continuación se presenta un resumen de las diferencias entre diagramas de flujos de las sentencias IF, WHILE y DO-WHILE, adicionalmente se adjunta vídeos explicativos que sirven para entender mejor este tema.
En este ejemplo de aplicación de sentencias selectivas múltiples tomaremos un ejercicio del libro: "Fundamentos de programacíon Piensa en C" (Cairó) el cual dice:
En algunas oficinas del gobierno pagan horas extra a los
burócratas, además del salario correspondiente. Escribe un diagrama de flujo y
su correspondiente programa en C que permita calcular la cantidad a pagar a un
trabajador tomando en cuenta su salario y las horas extra trabajadas. Las horas
extra se calculan en función de la tabla 2.8. Cada trabajador puede tener como
máximo 30 horas extra, si tienen más, sólo se les pagarán las primeras 30. Los
trabajadores con categoría 4 o mayor a 4 no pueden recibir este beneficio.
TABLA 2.8:
CATEGORÍA TRABAJADOR
HORAS EXTRA
1
$40
2
$50
3
$85
Aplicando los pasos para realizar un diagrama de flujo:
Paso 1: Definición del problema.
Se quiere
realizar un programa que calcule el salario total de un empleado de acuerdo a
su categoría y a las horas extras trabajadas. El programa debe evaluar el nivel
y las horas extras para calcular el salario total a pagar. Solamente se pagan
hasta un límite de 30 horas extras. Los empleados de categoría 4 en adelante no
tienen ningún privilegio de pago por horas extras. Se imprime el salario total
a pagar ya contando el valor de las horas extras.
Paso 2: Planeación de la solución.
Datos de entrada: Números enteros
positivos (salario, categoría y horas extras).
Datos de salida: Numero entero positivo (Salario total).
Datos adicionales: Valor de hora extra según categoría 1: 40$, categoría 2: 50$,
categoría 3: 85$
Proceso:
Lo primero que
se debe hacer es conocer el valor del salario del empleado, su categoría y su
número de horas extras trabajadas. El programa utiliza un seleccionador para
clasificar la información. Y de acuerdo a eso realiza lo siguiente:
Si es de categoría 1 el
programa procede a evaluar el número de horas extra trabajadas, si el empleado
excede las 30 horas trabajadas el programa suma 1200 al valor de su salario,
obteniendo así el salario total del empleado. Si el número de horas es menor a
30 el programa multiplica el número de horas trabajadas por 40, finalmente ese
resultado lo suma al salario ingresado obteniendo así el salario total.
Si es de categoría 2 el
programa procede a evaluar el número de horas extra trabajadas, si el empleado
excede las 30 horas trabajadas el programa suma 1500 al valor de su salario,
obteniendo así el salario total del empleado. Si el número de horas es menor a
30 el programa multiplica el número de horas trabajadas por 50, finalmente ese
resultado lo suma al salario ingresado obteniendo así el salario total.
Si es de categoría 3 el
programa procede a evaluar el número de horas extra trabajadas, si el empleado
excede las 30 horas trabajadas el programa suma 2250 al valor de su salario,
obteniendo así el salario total del empleado. Si el número de horas es menor a
30 el programa multiplica el número de horas trabajadas por 85, finalmente ese
resultado lo suma al salario ingresado obteniendo así el salario total.
Si es de categoría 4 o
cualquier otro valor el programa procede a tomar como salario total al salario
ingresado por el usuario ya que los empleados de categoría 4 en adelante no
poseen beneficios.
Se imprime el salario total del empleado.
Diagrama de flujo:
Programa en lenguaje C:
/*CABECERA
Nombre: Juan Diego Mantilla
Fecha: 12-Noviembre-2014
Descripción:
Programa para realizar el calculo del salario de un empleado. El usuario ingresa por teclado el salario del empleado, el numero de horas extra trabajadas y la categoria del empleado (numeros enteros positivos). El programa evalua con la sentencia switch a que categoria pertenece.
Si es de categoria 1 el programa procede a evaluar el numero de horas extra tabajadas, si el empleado excede las 30 horas trabajadas el programa suma 1200 al valor de su salario, obteniendo asi el salario total del empleado. Si el numero de horas es menor a 30 el programa multiplica el numero de las horas extras trabajadas por 40, finalmente ese resultado lo suma al salario ingresado obteniendo asi el salario total.
Si es de categoria 2 el programa procede a evaluar el numero de horas extra tabajadas, si el empleado excede las 30 horas trabajadas el programa suma 1500 al valor de su salario, obteniendo asi el salario total del empleado. Si el numero de horas es menor a 30 el programa multiplica el numero de las horas extras trabajadas por 50, finalmente ese resultado lo suma al salario ingresado obteniendo asi el salario total.
Si es de categoria 3 el programa procede a evaluar el numero de horas extra tabajadas, si el empleado excede las 30 horas trabajadas el programa suma 2250 al valor de su salario, obteniendo asi el salario total del empleado. Si el numero de horas es menor a 30 el programa multiplica el numero de las horas extras trabajadas por 85, finalmente ese resultado lo suma al salario ingresado obteniendo asi el salario total.
Si es de categoria 4 o cualquier otro valor el programa procede a tomar como salario total al salario ingresado por el usuario ya que los empleados de categoria 4 en adelante no poseen beneficios.
El programa imprime el salario total del empleado.
*/
#include <stdio.h>
main()
{
int sal, cate, horas, hxv, st;
printf("CALCULO DE SALARIOS SEGUN LAS HORAS EXTRA TRABAJADAS\n\n");
printf("Ingrese el salario del empleado:");
scanf("%d",&sal);
printf("Ingrese el numero de horas extra trabajadas:");
Las sentencias selectivas múltiples son aquellas que nos permiten evaluar mas de dos condiciones en las cuales cada una de ellas tienen un bloque de instrucciones. Para ver mas acerca de este tema seguir este link: Juan Diego Mantilla: Introducción a las sentencias selectivas multiples. Dicho esto se debe recordar que estas sentencias son se mucha importancia para cuando se quiera evaluar mas de dos condiciones y así evitar un anidamiento de sentencias condicionales dobles. A continuación se explica la estructura de una sentencia selectiva múltiple en lenguaje C.
Estructura de una sentencia selectiva múltiple:
switch (selector)
{
case etiqueta : sentencias;
break;
case etiqueta : sentencias;
break;
default: sentencias;
break;
}
Siempre que se termine una etiqueta se debe colocar un "break" para que así el programa salga de la sentencia switch una vez haya terminado de cumplir con el bloque de instrucciones de dicha etiqueta. Si no se lo coloca el programa seguiría cumpliendo con el resto de etiquetas.
Siempre se debe poner "default" al final de todas las etiquetas para que así se realice algo por defecto cuando niguna de las etiquetas corresponde al selector.
Finalmente se muestra un video sobre las sentencias selectivas múltiples en lenguaje C. Usando el programa DEV-C++