Módulo Algoritmia y Programación
Módulo Algoritmia y Programación
Módulo Algoritmia y Programación
Expresiones 3
Expresiones aritméticas 3
Operadores aritméticos 3
Expresiones Lógicas 5
Operadores relacionales 5
Operadores lógicos 6
Operaciones matemáticas 8
Sintaxis en C# 29
Estructura de Decisión Múltiple 31
Diagrama de flujo 32
Sintaxis en C# 32
Estructuras de Repetición 35
La estructura 35
Diagrama de flujo 36
Forma 1: Ciclo FOR 40
Forma 2: Ciclo WHILE 46
Forma 3: Ciclo DO - WHILE 51
Métodos 62
Elementos 62
Diseño (flujograma) 63
Sintaxis en C# 64
Invocación o llamado al método 70
Estructuras Estáticas 72
Arreglos 72
Arreglos Unidimensionales (Vectores) 73
Operaciones sobre arreglos unidimensionales 74
Declaración 74
Inicialización de un Arreglo 78
Arreglos Bidimensionales (Matrices) 87
Operaciones sobre arreglos bidimensionales (Matrices) 88
Declaración 88
Inicialización 89
Recorrido de una matriz 91
ALGORITMIA Y PROGRAMACIÓN
I. Expresiones
Se entiende como expresiones, sentencias que involucran el uso de
constantes, variables y operadores. Las expresiones se clasifican de acuerdo
al tipo de datos y operadores que emplean, lo cual implica también el tipo de
resultado que se obtiene en su desarrollo o evaluación.
Expresiones aritméticas
Una expresión aritmética es aquella que incluye variables numéricas (enteras o
reales), constantes numéricas y operadores aritméticos.
Operadores aritméticos
+ Operador de suma
- Operador de resta
* Operador de multiplicación
/ Operador de división
Prioridad: Un aspecto importante para revisar cuando se estudian los
operadores aritméticos en cada lenguaje es la prioridad. La prioridad
corresponde a las reglas que indican cuál operación debe realizarse primero
en una expresión aritmética; aunque estas reglas pueden variar de un lenguaje
a otro, en general la mayor prioridad la tienen los operadores de
multiplicación y división, después seguirán los de suma y resta.
El uso de paréntesis permite saltar las reglas de prioridad para obligar a que se
desarrolle una operación primero, dado que las operaciones incluidas en
paréntesis tendrían la mayor prioridad en la expresión.
Ejemplo:
Como se puede observar en el ejemplo anterior, el uso de paréntesis cambia
completamente el resultado de una expresión, así que debe tenerse mucho
cuidado al momento de escribir expresiones aritméticas para verificar que las
Observe que: En los lenguajes de programación, se tiene muy en cuenta los
tipos de datos empleados en las operaciones, aunque puede variar, en
términos generales si se operan números enteros (sin parte decimal) el
resultado será un número entero; pero si se operan números reales (que
incluyen parte decimal) o una combinación entre reales y enteros, el resultado
será un número real.
Considerando lo anterior, el resultado de operaciones como la división puede
variar, así:
Expresiones Lógicas
Las expresiones lógicas pueden emplear datos de diferentes tipos (lógicos o
numéricos), emplean operadores lógicos o relacionales y obtienen como
resultado un valor lógico (verdadero o falso).
Operadores relacionales
Los operandos (datos]) que se pueden emplear, en general corresponden a
números, aunque algunos lenguajes permiten comparar otro tipo de datos
como caracteres o cadenas.
El resultado de una operación que involucra operadores relacionales será de
tipo lógico (verdadero o falso)
Ejemplo:
3>4 tendrá como resultado Falso
5 < 20 tendrá como resultado verdadero
Los operadores lógicos permiten enlazar expresiones lógicas a través de las
conexiones lógicas que se emplean comúnmente. Los operadores lógicos
comúnmente empleados son:
Conexión lógica Operador Símbolo en C#
Conjunción AND &&
Disyunción OR ||
Negación NOT !
Estos operadores trabajan siguiendo la lógica de las tablas de verdad que se
presentan a continuación:
AND Verdadero Falso
Verdadero Verdadero Falso
Falso Falso Falso
Observe que: para la conjunción (AND) el único caso en que puede ser
verdadero, es que las dos partes de la expresión sean verdaderas, cualquier
otra combinación sería falsa.
OR Verdadero Falso
Curso: Algoritmia y Programación 6
Escrito por: Lyda Peña.
== !=
&&
||
Como siempre, los paréntesis permiten saltar los niveles de prioridad.
Ejemplo:
Para el siguiente caso:
3 + 4 < 10 && 56 – 3 > 100 || 4 * 6 -2 <=22
La solución, atendiendo las prioridades establecidas, quedaría de la siguiente
forma:
1. Se resuelven divisiones y multiplicaciones:
3 + 4 < 10 && 56 – 3 > 100 ||24 -2 <=22
2. Se resuelven sumas y restas (de izquierda a derecha):
7 < 10 && 53 > 100 ||22 <=22
3. Se resuelven los operadores relacionales:
Verdadero && Falso || Verdadero
4. Se resuelven las operaciones de conjunción (AND, &&)
Falso || verdadero
5. Se resuelven las operaciones disyunción (OR, ||)
Verdadero
La solución de la expresión es: Verdadero.
Operaciones matemáticas
especificado.
Pow(double x, double y) Retorna un número (x) elevado a la potencia especificada
(y)
Round (decimal x) Redondea un número decimal al entero más próximo.
Sin (double x) Retorna el seno del ángulo especificado.
Sqrt(double x) Retorna la raíz cuadrada del número indicado.
Tan(double x) Retorna la tangente del ángulo especificado.
Para emplear cualquiera de estas funciones se debe anteponer Math. al
nombre del método correspondiente, esto le especifica al lenguaje que el
método que se desea usar está en una clase llamada Math.
Ejemplo:
X = Math.sqrt(64);
Esta expresión dejaría en x el valor de 8 (raíz cuadrada de 64)
Estos métodos pueden ser involucrados dentro de una expresión.
Ejemplo:
58 – Math.sqrt(64) < 100
En este caso, se resuelve primero el método, luego la resta y finalmente la
comparación; lo que daría como resultado Verdadero
Además del proceso definido (pasos), los algoritmos tienen otros dos
elementos que los caracterizan: las entradas y la(s) salida(s). Las entradas o
elementos de entrada o datos de entrada son aquellas cosas o datos que se
requieren para poder realizar el algoritmo a cabalidad. La salida son los
elementos o datos que se obtienen una vez se ejecuten los pasos del
algoritmo.
La diferencia básica entre un algoritmo y un programa es que este último
está escrito en un lenguaje de programación, de forma que pueda ser
interpretado y ejecutado por un computador.
Cuando vamos a programar, nuestro cerebro ejecuta la misma secuencia de
pasos que aplica en cualquier situación problemática: primero, entender el
problema con todas sus condiciones y características; segundo, buscar una
solución que se ajuste a dichas condiciones y características; tercero, poner en
ejecución la solución hallada; cuarto, verificar si la solución cumple con lo que
2
se indicó que debería hacer .
1
Real Academia Española. Diccionario. 2015. Disponible en: http://www.rae.es/recursos/diccionarios/drae [consultado: Julio 20 de
2015]
2
En desarrollo de software, esta característica se conoce como corrección, un algoritmo correcto, es un algoritmo que efectivamente
cumple lo que se supone que debería hacer.
Curso: Algoritmia y Programación 10
Escrito por: Lyda Peña.
Ejemplo:
Tenemos una situación problema: “Es necesario llegar desde la UAO hasta
Chipichape”.
Primero: entendamos el problema, es claro hay que encontrar una forma de
llegar desde la UAO hasta Chipichape, pero hay algunas restricciones que
tenemos que considera: ¿hay restricción de dinero para el transporte? ¿hay
restriccion de tiempo para el transporte? ¿cuántas personas deben
transportarse?
Ahora sí, teniendo claro el problema, entramos al paso dos: buscar alternativas
de solución.
Una vez seleccionada la alternativa, procedemos al Tercer paso, implementar
la solución. En este caso, la implementación consiste en determinar cuáles
rutas del MIO se deberán tomar desde la UAO hasta Chipichape y en cuáles
estaciones se debe hacer cambio de ruta.
Antes de enviar a las tres personas a aventurarse por las calles de Cali,
podemos adelantar el paso Cuatro: Probar la solución. Probar es verificar si
Curso: Algoritmia y Programación 11
Escrito por: Lyda Peña.
con las entradas que hemos definido y los pasos que se han establecido
logramos el resultado esperado; entonces, se puede hacer una revisión sobre
el mapa, para verificar si las rutas seleccionadas con intercambio en las
estaciones definidas permiten que las personas lleguen desde la UAO hasta
Chipichape.
Una vez se comprueba que la solución diseñada es apropiada, podemos
generalizar, cualquier persona que tenga el mismo problema con las mismas
restricciones, podrá utilizar nuestra solución.
Estas mismas etapas son las que seguiremos en la elaboración de algoritmos,
lo que sucede, es que como todo proceso en Ingeniería, tiene sus
particularidades en la forma de realizarlo y comunicarlo.
Actividad 1 : Análisis
Otra forma de comprender la etapa de análisis es preguntarse ¿Qué debe
hacer el programa? y ¿Qué condiciones se deben cumplir durante la ejecución
Curso: Algoritmia y Programación 12
Escrito por: Lyda Peña.
para lograrlo?
Ahora, ¿De dónde se obtiene esa información?, la respuesta es muuuy simple,
de la persona que necesita el programa. Durante el proceso de aprendizaje, es
común que los profesores entreguen por escrito la definición del problema, y
de allí básicamente se obtiene la información que se requiere. En situaciones
reales, debe preguntarse a la(s) persona(s) que requieren el programa sobre
todos los aspectos que este deberá incluir.
Para efectos del curso, en la etapa de análisis se establecerán los datos de
entrada y los datos de salida.
● Datos de entrada: Son aquellos datos que se requiere conocer para
que el programa pueda funcionar apropiadamente. Generalmente se
asocian con las “cosas” que se preguntará al usuario.
Un buen programador es consciente que al preguntar un dato, el
usuario puede contestar de cualquier forma, por ello, debe asegurar
que la información ingresada sea apropiada para el desarrollo del
programa, para ello se emplea la validación de datos, por ahora
solamente nos centraremos en establecer cuáles son los valores válidos
para un dato de entrada, más adelante veremos cómos se hace la
validación.
● Datos de salida: Corresponden a los datos o información que el
usuario espera que el programa le presente.
Ejemplo:
● Datos de Entrada: Para el desarrollo del programa, es necesario
conocer los siguientes datos:
○ Número de horas totales programadas en el curso.
○ Número de horas que ha faltado el estudiante
○ Calificación del primer examen
○ Calificación del segundo examen
○ Calificación del tercer examen
○ Calificación del cuarto examen
Los dos primeros datos permitirán calcular el porcentaje de faltas que
ha tenido el estudiante y de esta manera determinar su nota; si no ha
perdido la asignatura por faltas, los otros cuatro datos permitirán hacer
el cálculo de la definitiva.
Observe que datos como el porcentaje que determina que el
estudiante ha perdido la asignaturas por faltas o la nota que se asigna
en caso de pérdida por faltas, no se incluyen en los datos de entrada
porque ya se conocen (20% y 1.5 respectivamente).
● Datos de Salida: Al finalizar el programa se espera que se presente el
siguiente dato:
○ Nota definitiva del estudiante
Observe que: Aunque durante el proceso (programa) deberá calcularse el
porcentaje de inasistencias que ha tenido el estudiante, este dato no será
Actividad 2: Diseño
El diseño de un programa, es realmente el algoritmo del mismo y como tal,
contempla las tres secciones mencionadas: entradas, proceso y salidas. Las
entradas y salidas se definieron en el paso anterior, así que ahora nos
concentramos en el proceso.
Proceso: Se refiere a todas las instrucciones necesarias para que el
computador pueda cumplir el objetivo propuesto para el programa. Este
proceso debe describirse en forma de algoritmo, es decir pasos ordenados,
claros y completos que al ser seguidos de forma rigurosa permiten la
ejecución del objetivo propuesto.
Existen múltiples formas de representar el proceso de un algoritmo, se puede
hacer con lenguaje natural (español o inglés), con lenguaje estructurado
(pseudocódigo) o lenguaje gráfico (flujograma). Para nuestro caso se emplea
el flujograma, que tiene dos grandes ventajas: es estándar y es gráfico, lo que
permite mayor comprensión para los lectores.
FlujoGrama
Durante este curso se emplea la notación de flujograma o diagrama de flujo
para presentar el diseño de un programa. El flujograma es una representación
gráfica de las instrucciones que se llevarán a cabo en el programa. A
continuación se presentan los símbolos a emplear.
Símbolo Utilización
Inicio / Fin
Indica los extremos del proceso principal. Dentro del símbolo se deberá escribir la
palabra Inicio o Fin.
Si este símbolo es utilizado en un subproceso, en el Inicio se deberán escribir las
entradas, y en el Fin, se deberá escribir la salida.
Solamente deberá aparecer un símbolo de inicio y un símbolo de fin para cada
proceso.
Lectura de Datos
Este símbolo se emplea para especificar los datos que se deben leer o ingresar para la
ejecución del programa. Dentro del símbolo se escriben los datos a leer.
Proceso
Especifica los cálculos requeridos, tales como: evaluación de fórmulas, incrementos,
entre otros. Para cada cálculo se debe especificar la variable donde quedará
almacenado el valor .
Decisión
Este símbolo permite mostrar decisiones que se deben tomar durante la realización
del algoritmo, dentro del rombo se escribirá la pregunta o expresión lógica que genera
la decisión.
Este símbolo se puede emplear para tomar decisiones, en cuyo caso, saldrá del
símbolo dos caminos, uno marcado como SI y otro como NO, para indicar las
instrucciones que se deben realizar cuando la expresión sea verdadera o falsa,
respectivamente.
Salida
Se emplea este símbolo para indicar la información que se va a presentar al usuario.
Línea de Flujo
Indica la secuencia de las instrucciones. Debe tenerse cuidado que las flechas sean
rectas (horizontales o verticales) y que no se cruzan unas con otras en el diagrama.
Método
Con este símbolo se realiza la invocación o llamado a un subproceso, al interior del
cuadro se escribe el nombre del subproceso que se va a invocar.
Adicionalmente, se debe especificar los parámetros enviados al subproceso entre
paréntesis y la variable en la cual es asignado el valor que éste devuelve.
Conector
Este símbolo permite conectar varias flechas en la misma página.
Conector de página.
Si el diseño de un programa ocupa varias páginas, se puede emplear este conector
para indicar la secuencia de instrucciones, si existen varios conectores, es conveniente
enumerarlos para evitar alguna confusión.
Comentario
Este símbolo permite incluir comentarios o notas adicionales sobre el algoritmo. Se
sugiere utilizar este símbolo (junto al símbolo de Inicio) para incluir el nombre de los
procesos.
Ejemplo:
A manera de ejemplo, se presenta el siguiente diagrama como una propuesta
3
de solución :
NOTA: como todo proceso de diseño en Ingeniería, pueden presentarse
diferentes propuestas para la solución de un problema, sin embargo, debe
asegurarse que todos los pasos se cumplan y la salida sea la esperada.
3
Los flujogramas de ejemplo que se presentan en este documento, así como los que se presentarán posteriormente durante el curso,
han sido realizados empleando la herramienta Microsoft Visio 2010. Los estudiantes son libres de emplear esta u otra herramienta e
incluso hacer sus diagramas a mano, siempre y cuando respeten los símbolos definidos.
Curso: Algoritmia y Programación 17
Escrito por: Lyda Peña.
Actividad 3: Implementación
Para el desarrollo de nuestro curso, se emplea el lenguaje de programación
Visual C#, por lo cual, se presentará la sintaxis específica de este lenguaje al
tiempo que se presentan los conceptos generales.
1. Variables
Las variables en programación son equivalentes a las variables que se
emplean en matemáticas, son palabras (a veces de una sola letra) que
representan valores que pueden variar a lo largo del programa. Las
variables en programación tienen dos características propias: nombre y
el tipo.
El nombre de la variable, conocido también como identificador, es el
que permite hacer referencia a la variable en cualquier parte del
programa. Cada lenguaje define algunos limitantes para la selección del
nombre de las variables, sin embargo, algunas normas generales de
buena programación son las siguientes:
● Una variable debe nombrarse con una o varias palabras que
indiquen el dato que contiene, por ejemplo: nombre, teléfono,
salario, temperatura, etc.
● El nombre de una variable no puede incluir espacios ni caracteres
especiales. Si el nombre se compone de varias palabras, pueden
enlazarse con subrayado o simplemente poner las palabras
seguidas una de otra, por ejemplo: salario_total,
temperaturaMedia, promedio_Semestral.
Curso: Algoritmia y Programación 18
Escrito por: Lyda Peña.
● El nombre de la variable debe empezar por una letra,
posteriormente puede incluir números. Si el nombre de una
variable inicia con un número, el computador puede entender
que se trata de un número y no de una variable. Por ejemplo,
semestre5, login123, etc.
El tipo de la variable, se refiere al tipo de dato que la variable podrá
almacenar. La mayoría de los lenguajes requieren que se establezca el
tipo de la variable y que no se cambie durante toda la ejecución del
programa. Adicionalmente, cada lenguaje tiene limitaciones propias
para cada tipo de datos (como el rango de datos válidos). Los tipos de
datos más generales son los siguientes:
● Entero: indica que las variables guardarán números negativos,
positivos o cero SIN parte decimal. En C# existen varios tipos
enteros: sbyte, short, int, long; la diferencia entre un tipo y otro es
el tamaño disponible para almacenar datos. El tipo de dato entero
más común es el int, que tiene un tamaño de 4 bytes y permite
almacenar números entre -2.147’483.648 y 2.147’483.647
● Reales o decimales: indica que las variables guardarán números
negativos, positivos o cero incluyendo parte decimal. En C#
existen dos tipo de datos reales: float y double. Al igual que con
los enteros, la diferencia entre ellos se basa en el tamaño
disponible. El tipo más común en los reales es el float que tiene 7
dígitos de precisión.
● Booleano: es un tipo de dato especial que permite almacenar
valores de verdad (verdadero o falso). En C# se emplea el tipo
bool y los únicos valores que puede tomar son True o False.
● Caracteres: indica que la variable almacenará caracteres únicos,
que pueden ser letras (‘a’,’F’,’z’), números como símbolos y no
como cantidad (‘3’, ‘9’,’0’) o caracteres especiales, que
corresponden a esos caracteres que se disponen y que no son
letras ni números (‘)’, ‘#’, ‘]’). Cuando se emplea un número como
símbolo (carácter) no es posible hacer operaciones aritméticas
con él. En C#, este tipo se denomina char y sus valores, siempre
se presentan entre comillas simples.
Curso: Algoritmia y Programación 19
Escrito por: Lyda Peña.
3. Operador de asignación
La definición de una variable supone que en alguna parte del proceso
establecido, la variable debe tomar un valor o cambiar el que tiene, una
forma de realizar esta operación es asignándole dicho valor, para ello se
emplea un operador específico. El operador de asignación empleado
por cada lenguaje puede diferir pero el más común es el operador =.
A través del operador de asignación se asigna el valor a la derecha del
operador (que podría ser una variable o constante) a la variable que se
encuentra a la izquierda del operador.
Ejemplo:
total = 35.6 asigna el valor 35.6 a la variable total
Curso: Algoritmia y Programación 20
Escrito por: Lyda Peña.
4. Expresiones
Como se explicó en la unidad anterior, las expresiones son sentencias
que toman un valor particular; en programación se distinguen las
expresiones aritméticas, que dan como resultado un valor numérico y
las expresiones lógicas que dan como resultado un valor de verdad
(dentro de las expresiones lógicas se incluyen las relacionales).
5. Operaciones
El último elemento constituyente de un programa de computadora son
efectivamente las operaciones o instrucciones que se pueden emplear.
Operaciones de lectura: son las operaciones con las que se permite al
usuario hacer el ingreso de los datos para que el programa funcione.
Repeticiones o ciclos: Permiten definir un conjunto de instrucciones que
se repetirán mientras se cumpla una condición establecida.
6. Método
Un método o procedimiento se puede entender como una porción de
programa que realiza una tarea específica. Un método puede llamarse o
invocarse en cualquier momento dentro de un programa, en ese
momento se ejecutan las instrucciones del método y una vez termine se
regresa a continuar la ejecución del programa.
Al realizar el llamado o invocación al método, es posible enviar datos
que este requiera para realizar su operación, de forma similar, al
terminar la ejecución del método, se puede retornar un dato al
programa principal para que continúe su labor.
Actividad 4: Pruebas
Contrario a lo que se puede pensar, las pruebas no están diseñadas para
probar que el programa funciona bien, por el contrario, las pruebas se diseñan
intentando que el programa falle. Si al ejecutar las pruebas, el programa no
falla, se puede asegurar que bajo esas condiciones, el programa funciona bien,
pero no se puede asegurar que el programa funcionará bien bajo todas las
circunstancias.
Cada prueba se ejecuta verificando si la salida obtenida es la esperada, si es
así, se indica que la prueba es aprobada, de no ser así, debe empezar un
proceso de revisión del programa para encontrar la causa del error y corregir,
una vez realizado este proceso se ejecutan nuevamente todas las pruebas
para verificar que se corrigió efectivamente el error y que no se insertó otro
error en el proceso.
Un programa desarrollado en un lenguaje visual, tendrá dos componentes: al
interfaz gráfica (conocida como GUI por sus siglas en inglés – Graphic User
Interface) y el código o instrucciones del programa.
Lo que sí es importante es que dentro de la clase se ubican diferentes
métodos que responden a los eventos de los elementos incorporados en la
GUI, en general serán de la misma forma: tienen el nombre del elemento
(button1, label1, etc.) y la acción a la que responden (click).
4
Una librería es un conjunto de módulos o programas que ya se encuentran escritos en el lenguaje de
programación y pueden ser empleados por los programadores cuando lo requieran.
Curso: Algoritmia y Programación 24
Escrito por: Lyda Peña.
Estructura General:
Como convención en nuestro curso la estructura general de los programas es
que hay un botón que inicia la ejecución del programa (botón de calcular,
ejecutar, etc.), dentro del método correspondiente se realizará un llamado al
método principal() y dentro de este se ubicaran las instrucciones necesarias:
NOTA: En programas complejos el método o módulo principal se encarga de
operaciones de lectura y escritura y delega las instrucciones de
procesamiento a otro(s) método(s).
Operaciones:
Cuando se trabaja con cajas de texto, debe tenerse en cuenta que son eso:
cajas de texto y por tanto, lo que se ingresa o se muestra en ellas es texto (o
cadenas). Para trabajar con los datos que se han ingresado, deben
transformarse al tipo requerido, de la siguiente forma.
Para escribir o mostrar datos en la pantalla, generalmente usaremos cajas de
texto deshabilitadas (Enabled=false), para evitar que el usuario ingrese datos
en ellas.
Estas son dos operaciones de uso común con las interfaces gráficas, la primera
permite cerrar la ventana o pantalla que se está ejecutando y la segunda
permite limpiar los datos contenidos en una caja de texto.
5
La declaración de una variable implica darle un nombre e indicar el tipo de dato que va a almacenar.
Curso: Algoritmia y Programación 26
Escrito por: Lyda Peña.
Estructuras de decisión
Diagrama de flujo
● El contenido del rombo debe ser una expresión lógica, que tenga como
resultado Falso o Verdadero.
● Del rombo, salen solamente dos caminos; cada uno de los cuales debe
estar marcado con SI o NO.
● En cada lado del rombo se pueden incluir todo tipo de instrucciones
(lectura, proceso, salida, incluso otras decisiones).
● En algún punto y en todo caso, antes de terminar el programa, deben
Curso: Algoritmia y Programación 28
Escrito por: Lyda Peña.
Sintaxis en C#
En C#, una estructura de decisión se define con la palabra clave if. La
estructura general de la instrucción es la siguiente:
if ( condición )
{
// instrucciones que se ejecutan si la condición es verdadera.
}
else
{
// instrucciones que se ejecutan si la condición es falsa.
}
● La condición debe estar escrita entre paréntesis y debe corresponder a
una expresión lógica (cuyo resultado sea Verdadero o Falso).
● Una vez se abre una llave, todas las instrucciones que se escriban se
consideran dentro del mismo bloque (verdadero o falso) hasta que se
cierre la llave respectiva.
● La palabra clave else y el bloque respectivo, no son obligatorios. Ya que
una decisión puede no tener instrucciones para realizar cuando la
condición sea Falsa.
● La palabra clave else (si se incluye) debe escribirse inmediatamente
después de la llave que cierra el bloque de instrucciones verdadero.
A continuación se presentan algunos ejemplos de utilización de la estructura
de decisión.
if ( radio > 0 )
{
longitud = 2 * 3.1416 * radio ;
}
Ejemplo 2: Dada la edad de una persona, imprimir un mensaje sólo si ella
cumple con la mayoría de edad.
if ( edad >= 18 ){
salida.text=”La persona tiene la mayoría de edad”;
}
Ejemplo 3: Calcular la longitud de una circunferencia si el radio es positivo y,
en caso contrario, se proporciona un mensaje de error.
}
C# como otros lenguajes ha definido lo que se denomina una estructura de
decisión múltiple, que permite evaluar los diferentes valores que puede tomar
una variable (o expresión) y de acuerdo a ello, realizar diferentes operaciones.
NOTA: Toda operación que se pueda realizar empleando estructuras de
decisión múltiple, igualmente puede presentarse con estructuras de decisión
Curso: Algoritmia y Programación 31
Escrito por: Lyda Peña.
básicas, sin embargo está la estructura de decisión múltiple es más eficiente
en escritura y ejecución.
Diagrama de flujo
Sintaxis en C#
// . . . . . .
case valorN:
// Bloque de instrucciones que se ejecuta si la expresión
// toma el valor valorN
break;
default:
// Bloque de instrucciones que se ejecuta si la expresión
// NO toma ninguno de los valores arriba indicados
/ Llave de fin de la estructura de decisión múltiple
} /
● La expresión o variable que se incluye en el paréntesis, debe ser del
mismo tipo de cada uno de los valores que se incluyen en los
diferentes casos.
● El uso de la palabra clave break, al final de cada caso es muy
apropiado. Esta sentencia, rompe el proceso de ejecución y lo traslada
después de la estructura, es decir, cuando se encuentre la palabra
break, el programa continúa ejecutando las instrucciones que hay
después de la llave que cierra la sentencia switch.
● Los casos no requieren ningún orden específico.
● Solamente se puede emplear esta estructura en casos de igualdad, es
decir cuando la variable o expresión en el paréntesis sea igual al
valor1, o igual al valor2, etc. Para casos de rangos (mayor que, menor
que, etc.) no se podría emplear esta estructura.
● La sentencia default no es obligatoria, aunque es bastante útil para
saber cuándo se ha obtenido un valor que no se consideró en la lista
de casos definidos.
● El último caso incluido (sea default u otro), no requiere la sentencia
break, ya que en ese punto termina la estructura de decisión.
Observe que las únicas llaves incluidas son las que abren y cierran la
sentencia switch. En cada uno de los casos no se requiere el uso de llaves.
Ejemplo 1: si mes es el cardinal de un mes del año (1 para enero, 2 para
switch ( mes ) {
case 1: salida.Text= “31” ;
break;
case 2: salida.Text= “28 días, 29 días si el año es bisiesto”;
break;
case 3: salida.Text= “31” ;
break;
case 4: salida.Text= “30” ;
break;
case 5: salida.Text= “31” ;
break;
case 6: salida.Text= “30” ;
break;
case 7: salida.Text= “31” ;
break;
case 8: salida.Text= “31” ;
break;
case 9: salida.Text= “30” ;
break;
case 10: salida.Text= “31” ;
break;
case 11: salida.Text= “30” ;
break;
case 12: salida.Text= “31” ;
break;
default:
salida.Text= “Mes incorrecto” ;
}
Estructuras de Repetición
La respuesta a esta pregunta es bastante fácil, cuando se requiere desarrollar
el mismo conjunto de instrucciones (1, 2 o más instrucciones) más de una vez.
Por Ejemplo:
● Se requiere calcular la nota definitiva de 20 estudiantes de una
asignatura.
● Se requiere calcular el valor del paquete turístico para todos los
clientes que compren en un día.
● Se requiere que el programa permita al jugador realizar tantos
intentos como desee para pasar de un nivel a otro.
● Si el usuario digita 3 veces la clave incorrecta, debe bloquearse la
cuenta.
La estructura
1- Condición: la repetición siempre es controlada por una condición; en
algunos casos, se repite cuando la condición sea verdadera y se termina
el proceso cuando la condición es falsa; en otros casos, se repite cuando
la condición sea falsa y se termina el proceso cuando la condición es
Verdadera. Pero independiente de esto, se debe entender que la
condición será la que controle el ciclo de repetición.
2- Instrucciones: Se entiende aquí el conjunto de instrucciones que se
desea repetir, estas pueden ser de cualquier tipo: lecturas, escrituras,
procesos de cálculo, llamado a métodos, estructuras de decisión e
incluso, otras estructuras de repetición.
Diagrama de flujo
Los ciclos en el flujograma se identifican fácilmente porque incluyen una
condición y una flecha dirigida hacia arriba, que implica el reprocesamiento de
algunas operaciones. Como se dijo anteriormente, la flecha hacia arriba puede
corresponder al camino negativo de la decisión o por el camino positivo,
dependiendo de la forma de la estructura.
Para este caso los Datos de Entrada son los 100 números y el Dato de Salida es
la suma de ellos.
NOTA: hay varias formas de realizar este algoritmo, una que es dispendiosa
pero válida, es leer 100 variables diferentes y sumarlas; pero como no se
quiere hacer un trabajo tan arduo, lo que se puede hacer es leer un número,
sumarlo sobre una variable y repetir las operaciones 100 veces.
Para lograr las 100 repeticiones, emplearemos algo que todos usamos a diario:
contar, una variable nos ayudará a contar desde 1 hasta 100, cuanto termine,
sabremos que se han completado 100 veces.
Una solución con ciclo mientras o para (while / for)
Ciclo haga mientas (do while) Ciclo mientras (while)/ para (for)
comparando el ciclo haga mientras vs mientras/para
Sintaxis en C#
En el lenguaje de programación Visual C# se han definido tres formas
diferentes para escribir estructuras de repetición, aunque las tres formas son
válidas y útiles para cualquier caso de repetición, hay unas formas que son
más pertinentes ante ciertas situaciones que otras. La estructura de repetición
establecida en el flujograma puede “traducirse” con cualquiera de las formas
del lenguaje de programación.
// instrucciones a repetir
}
La estructura incluye tres bloques dentro del paréntesis, cada uno de los
cuales se separa con punto y coma:
OBSERVAR QUE: Cuando se emplee una estructura for debe tenerse cuidado
con los siguientes aspectos:
● El bloque de instrucciones a repetir, tal como todos los bloques en
Visual C#, debe estar entre llaves {…}
● En el encabezado de la estructura, se incluye entre paréntesis, tres
secciones, separadas por punto y coma. Las tres secciones deben
mantenerse, aunque no tenga instrucciones.
Utilización: La estructura for es empleada comúnmente para los casos en los
que se conoce previamente el número de repeticiones que se van a ejecutar.
Ejemplo 1: Se requiere un programa que muestre los números de 1 a 5
Prueba escritorio:
Código fuente en C#
tbnumero.Text = i.ToString();
}
En este caso la variable i, es una variable que permite controlar el ciclo, como
se puede observar en la primer parte del ciclo (instrucciones iniciales) se
declara la variable i que se inicia en 1; en la parte final (instrucciones finales) se
incrementa el valor de la variable i en 1, es decir, si tiene como valor 1 cambia
a 2, si tiene como valor 2 pasa a 3 y así sucesivamente. La condición es que la
variable sea menor o igual a 5, recuerde que en este tipo de ciclos, se repiten
las instrucciones mientras la condición sea verdadera, en este caso, dado que
la variable se inició en 1 y va incrementando de uno en uno, el ciclo se repetirá
cuando i tenga los valores de 1, 2, 3, 4, 5 en el momento que la variable tome
el valor 6, la condición se torna falsa y por tanto, el ciclo termina.
Ejemplo 2: Se requiere un programa que lea 10 números enteros y al final
indique cuántos fueron positivos (mayores que cero), cuantos negativos
(menores que cero) y cuántos cero (iguales a cero).
Prueba escritorio
0 0 0 0 0
1 1 1 5 1
2 2 2 -3 2
3 3 3 0 3
4 10 4
25 5
-1 6
2 7
-1 8
0 9
0 10
int positivos=0;
int negativos = 0;
int ceros = 0;
int numero = 0;
for (int num=0; num<10; num = num +1) {
numero=int.Parse(Interaction.InputBox("digite el número: "));
if (numero > 0 ) {
positivos = positivos +1;
}//fin if
else {
if (numero < 0) {
negativos = negativos +1;
}//fin if
Curso: Algoritmia y Programación 43
Escrito por: Lyda Peña.
}//fin else
}//fin for
tbnumerosPositivos.Text = positivos.ToString();
tbnumerosNegativos.Text = negativos.ToString();
tbnumerosCeros.Text = ceros.ToString();
La instrucción I nteraction.InputBox(string,string, string, int,int) permite que se lean datos a través de una ventana
emergente, pero requiere que se incluya la instrucción u sing Microsoft.VisualBasic; en la parte inicial del
programa y se incluya VisualBasic en References de la aplicación.
Observe que: en este caso, se tienen 4 variables que, bajo ciertas
circunstancias, van aumentando de 1 en 1, a este tipo de variables se les
conoce como contadores, porque su valor va incrementando cada vez en un
valor constante, en este caso 1. La variable num, incrementa en cada
ejecución del ciclo y por ello, se dice que va contando la cantidad de veces que
se ha repetido el ciclo; de forma análoga, la variable positivos cuenta la
cantidad de números positivos (solamente incrementa cuando el número es
mayor a 0), la variable negativos cuenta la cantidad de números negativos
(solamente incrementa cuando el número es menor a 0) y la variable ceros
cuenta la cantidad de ceros que se digite (solamente incrementa cuando el
número no es mayor a cero y no es menor a cero).
NOTA: En este caso, el contador de los números (num) se inicia en 0, por esto
la condición es <10 y no <=10; de forma que el ciclo se repetirá cuando num
tenga valores de 0,1,2,3,4,5,6,7,8 y 9 (10 veces en total). El ciclo termina
cuando la variable num toma el valor de 10 ya que la condición num < 10 da
como resultado falso.
…
int edad;
double edadtotal = 0;
double edadpromedio;
for(int estudiante =0; estudiante < 150; estudiante = estudiante + 1){
edad= int.Parse(Interaction.InputBox("digite la edad: "));
edadtotal = edadtotal + edad;
}//Fin del for
promedio = edadtotal / 150.0;
…
Aquí, se requiere hacer una sumatoria de todas las edades para luego
dividirlas sobre el total de personas (150) y de esa forma obtener el promedio
de las edades. Este programa ha incorporado un contador (estudiante) que
ayuda a controlar la cantidad de veces que se va a repetir, en este caso,
Se utiliza, además, otra variable edadtotal, que va sumando los valores de las
edades leídas, esta variable inicia en 0, si la primera edad leída es 20, edadtotal
tomará el valor de 20, si la segunda edad leída es 15, edadtotal tomará valor
de 35 (20+15), si la tercera edad leída es 18, edadtotal tomará el valor de 53 (35
+ 18) y así sucesivamente; las variables que tienen esta función se conocen
como acumuladores, ya que su propósito es acumular o hacer la sumatoria de
un dato particular y su valor se incrementa en una cantidad variable (en este
caso, la edad).
while (condición) {
//Instrucciones a repetir
}
Al igual que en la estructura anterior, la estructura while se repite cuando
(mientras) la condición es verdadera, en el momento que el valor de la
condición cambia a falso, se termina el ciclo y el programa continúa
ejecutando las instrucciones que se encuentren después de la estructura.
En un ciclo while, no se define un espacio explícito para las instrucciones que
inician las variables involucradas en el ciclo (iniciación), ni para hacer el cambio
de valor de dichas variables (finalización), no obstante deben incluirse este tipo
de instrucciones, para asegurar el correcto desarrollo del ciclo.
OBSERVACIÓN: Por regla general, los ciclos de repetición se pueden
desarrollar con cualquier de las estructuras del lenguaje. A continuación se
presentan los mismos ejemplos que se revisaron previamente, pero
Prueba escritorio:
int i=1;
while (i<= 5) {
tbnumero.Text = i.toString();
i = i + 1;
}
Ejemplo 2: Se requiere un programa que lea 10 números enteros y al final
indique cuántos fueron positivos, cuantos negativos y cuántos cero.
int positivos=0;
int negativos = 0;
int ceros = 0;
int numero = 0;
int num=0;
while (num<10) {
numero=int.Parse(Interaction.InputBox("digite el número:");
if (numero >0 ) {
positivos = positivos +1;
}//Fin del if
else{
if (numero < 0) {
negativos = negativos +1;
}//Fin del if
else{
Curso: Algoritmia y Programación 48
Escrito por: Lyda Peña.
En este caso, debe prestarse especial atención a que el incremento de la
variable de control (num) se realice por fuera de cualquier decisión, para
asegurar que sin importar el resultado de las decisiones se incremente la
variable.
…
int edad;
double edadtotal = 0;
double edadpromedio;
int estudiante = 0;
Curso: Algoritmia y Programación 49
Escrito por: Lyda Peña.
Sin embargo, hay otro tipo de aplicaciones que resultan más fáciles de
desarrollar con una estructura while que con una estructura for. Por ejemplo,
aquellas donde no se sabe de antemano cuántas veces se van a repetir las
instrucciones, sino que depende de alguna variable leída o calculada durante
el ciclo.
Ejemplo 4: Se quieren leer y sumar tantos números como el usuario desee.
Prueba de escritorio:
0 0 S
10 10 S
25 35 S
-5 30 N
Código fuente en C#
En este caso no se puede saber (y no es necesario saberlo) previamente
cuántas veces se va a repetir el ciclo, se ejecutan las acciones y al final se
pregunta al usuario si quiere ingresar otro número, se repetirá mientras el
usuario digite S, si digita cualquier otro carácter, el ciclo terminará.
do {
//Instrucciones a repetir
}while (condición);
Este ciclo maneja dos palabras clave: do que marca el inicio del ciclo y va
seguido de la llave de apertura del bloque y while, escrito a continuación de la
llave que cierra el bloque, va seguido de la condición y debe cerrarse con
punto y coma.
Al igual que las otras estructuras presentadas, este ciclo se repite cuando
(mientras) la condición sea verdadera. Sin embargo, tiene una diferencia
fundamental con las otras estructuras y es que, en este caso, el ciclo siempre
se ejecuta al menos una vez. Debido a que la condición se escribe al final, las
instrucciones del ciclo siempre se ejecutarán al menos por una vez, después
de lo cual se revisa la condición y entonces podría terminar el ciclo. En los
ciclos for y while, la condición se encuentra al inicio de la estructura, por lo cual
es posible que al empezar el ciclo la condición sea falsa y por lo tanto no se
ejecuten ni siquiera una vez.
Utilización: Al igual que las estructuras while, el do-while se puede emplear
cuando se tienen ciclos en los que se conoce o no con antelación el número de
veces que se va a repetir el ciclo. Adicionalmente, por su condición particular
esta clase de estructura es muy útil cuando se quiere ejecutar las instrucciones
al menos una vez, por ejemplo para la validación de datos de lectura.
Prueba de escritorio:
i tbnumero.tex
1 1
2 2
3 3
4 4
5 5
Ejemplo 2: Se requiere un programa que lea 10 números enteros y al final
indique cuántos fueron positivos, cuantos negativos y cuántos cero.
Curso: Algoritmia y Programación 54
Escrito por: Lyda Peña.
int positivos=0;
int negativos = 0;
int ceros = 0;
int numero = 0;
int num=0;
do
{
numero= int.Parse(Interaction.InputBox("digite el número: "));
if (numero >0 )
{
positivos = positivos +1;
}//Fin del if
else
{
if (numero < 0)
{
negativos = negativos +1;
}//Fin del if
else
{
ceros = ceros +1;
}//Fin else
}//Fin else
num = num + 1;
}while (num<10);//Fin del do while
int edad;
double edadtotal;
double edadpromedio;
int estudiante = 0;
do{
edad= int.Parse(Interaction.InputBox("digite la edad: "));
edadtotal = edadtotal + edad;
estudiante = estudiante + 1;
}while (estudiante < 150);//Fin del do while
promedio = edadtotal / 150.0;
…
Ejemplo 4: Se quieren leer y sumar tantos números como el usuario desee.
Prueba de escritorio:
numero numeroTota otro
l
0 0
10 10 S
15 25 S
0 25 S
-1 24 N
Para este caso, el uso de la estructura do-while tiene una ventaja, no es
necesario asignar valor a la variable de control (otro) antes de iniciar el ciclo, ya
que la lectura de la variable se realiza antes de terminar el ciclo y por tanto, en
el momento que se evalúa la condición, la variable ya tiene un valor válido.
Un caso en el que es muy útil este tipo de estructuras es cuando se requiere
validar un dato de entrada, para verificar que el valor ingresado se encuentre
dentro del rango de datos aceptados para el programa; la idea es que si el
usuario no ingresa el valor apropiado, se pida nuevamente el dato hasta tanto
el valor ingresado se encuentre en el rango válido. Por ejemplo:
Prueba de escritorio:
numest
-5
0
2
Código fuente en C#
int numest;
do {
numest= int.Parse(Interaction.InputBox("digite el número: ")
}while (numest <= 0 );//Fin del do while
Ejemplo 6: La nota ingresada debe estar entre 0.0 y 5.0
Nuevamente, debe hacerse la pregunta, ¿en qué caso debe repetir la lectura?
Respuesta: cuando la nota ingresada no esté entre 0.0 y 5.0, es decir, sea
menor a 0.0 o mayor a 5.0
Prueba de escritorio:
nota
-2
10
-3
3,5
Código fuente en C#
double nota;
do{
nota = double.Parse(Interaction.InputBox("digite la nota: "));
}while ((nota < 0.0) || (nota > 5.0));//Fin del do while.
Ejemplo 7: El estado civil puede ser S, C ó D.
Ante la pregunta sobre cuándo repetir el ciclo, sería cuando el estado civil sea
diferente de S, diferente de C y diferente de D.
Prueba de escritorio:
estado
m
a
casado
C
Código fuente en C#
char estado;
do {
estado = char.Parse(Interaction.InputBox("¿estado civil: ?"));
}while((estado != ´S´) && (estado !=´C´) && (estado !=´D´));
//Fin del do wile.
Ejemplo 8: El programa puede ser Ingeniería o Economía.
En este caso, el ciclo debe repetirse cuando el programa ingresado sea
diferente a Ingeniería y diferente a Economía.
Prueba de escritorio:
programa
Industrial
Ing
Ec
Ingeniería
Código fuente en C#
String programa;
do {
programa = Interaction.InputBox("¿estado civil: ?");
}while(((!programa.equals(“Ingeniería”))&&(!programa.equals(“Economía”)));
V. Métodos
Como se mencionó previamente, los métodos se pueden considerar
mini-programas, que tienen una función o propósito específico, en este
sentido, los métodos tienen unos aspectos que los identifican:
• Un método tiene un único propósito u objetivo, un método realiza una
única tarea de forma completa.
• Un método puede ser llamado o invocado desde múltiples puntos del
programa. Al llamar un método lo que ocurre es que se ejecutan las
operaciones que éste incluye y una vez termine se continúa la ejecución
del programa en el punto donde había quedado.
• No es común que se tengan operaciones de lectura o escritura en un
método, ya que el método, en general se emplea para realizar ciertas
operaciones precisas. En caso de ser requerido, pueden hacerse
operaciones de lectura y/o escritura en un método, pero no es común.
Utilización: Los métodos son bastante útiles cuando se dispone de una
operación que es común y que puede ser empleada en múltiples ocasiones,
por ejemplo, las funciones que se pueden ejecutar con la calculadora (log, sen,
cos, tan,…), es más fácil tener el método y llamarlo, que tener que escribir las
instrucciones cada vez que se quiere ejecutar la operación.
Elementos
al interior del método. Un método puede incluir cualquier clase de
instrucciones: cálculos, decisiones, ciclos, llamado a otro método, etc;
aunque como ya se especificó, no es común que existan operaciones de
lectura y escritura en un método.
Diseño (flujograma)
En el flujograma el llamado a un método se representa como una caja con
doble línea vertical a cada lado, dentro de la cual se escribe el nombre del
método, con los datos que se le envían y el dato que se recibe como respuesta.
El método tiene su propio flujograma, que presenta el proceso que se lleva a
cabo dentro del método, la única diferencia con el flujograma principal es que
el punto de entrada al método se nombra como ENTRADA y no inicio, el punto
de salida del programa se nombra como SALIDA y no fin.
En la entrada se pueden incluir los datos que se deben pasar al método como
parámetros de entrada y en la salida se puede indicar el nombre de la variable
que se devuelve como resultado del método.
Ejemplo:
Sintaxis en C#
En Java los métodos tienen dos partes esenciales, el encabezado (también
llamado cabezote, signatura o firma del método) y el cuerpo del método.
• La signatura del método incluye cuatro partes: (1) el modificador de
acceso del método (visibilidad) , (2) el tipo de retorno, que corresponde
al tipo de dato que el método va a devolver, si no devuelve ningún dato,
se escribirá void, (3) el nombre de método, que sigue los mismos
principios de cualquier identificado: debe iniciar con una letra, no tener
espacios ni caracteres especiales, (4) tipo y nombre de los parámetros,
para cada dato de entrada debe incluirse el tipo y un nombre de
variable que será empleado en las instrucciones al interior del método.
6
La signatura entonces, tendría la siguiente estructura :
Ejemplo 1: Realizar un método que compara dos números enteros e indique el
de mayor valor.
En este caso, el método requiere como parámetros de entrada, dos números
enteros; el dato a regresar (o retornar) es, a su vez, un número entero. La
signatura del método quedaría de la siguiente forma:
6
Los signos de < > se emplean para indicar que es en este sitio se incluye un valor variable.
Curso: Algoritmia y Programación 64
Escrito por: Lyda Peña.
después de la palabra clave public, se incluye int, haciendo referencia al tipo
de dato que el método va a retornar, después el nombre del método:
calcular_mayor y finalmente entre paréntesis y separados por coma, los
parámetros de entrada (dos números enteros).
Ejemplo 2: Se requiere un método que lea 10 números reales y retorne su
promedio.
En este caso, se podrían ingresar los 10 números como parámetro pero es
bastante engorroso, es más fácil leerlos dentro del método y hacer el cálculo
requerido.
Observe que: En este método no se requieren parámetros de entrada, sin
embargo deben incluirse los paréntesis respectivos.
Observe que: En este caso, no se debe retornar ningún valor, por lo
tanto el método se declara como void en el encabezado y no hay
sentencia de retorno (return).
Otra solución:
Observe que: En este caso, si se debe retornar un valor, por lo tanto el
método se declara como string en el encabezado y si hay sentencia de
retorno (return).
Invocación o llamado al método
Una vez definido el método se puede llamar o invocar desde otra parte del
programa; para ello, se utiliza el nombre del método, incluyendo valores o
variables del mismo tipo de los parámetros de entrada definidos en el método;
adicionalmente, si el método retorna algún valor, debe asignarse el resultado a
una variable del tipo definido.
int primero=4;
calcular_mayor(34,8);
int n1=56, n2 = 58;
calcular_mayor(n1,n2);
Aquí se entiende estructura de datos como un agrupamiento de elementos.
La forma más simple es agrupar elementos de igual tipo de dato y asociar un
número de orden, o índice de posición, a cada elemento: esto es lo que
ocurre en las estructuras de datos denominadas a rreglos.
a. Arreglos
● Finita: todo arreglo tiene un límite; es decir, debe determinarse
cuál será el número máximo de elementos que podrán
almacenarse en el arreglo.
● Homogénea: todos los elementos de un arreglo son del mismo
tipo de dato (todos enteros, todos reales, etc.), pero nunca una
combinación de distintos tipos de dato.
● Todos sus elementos están referenciados bajo un mismo
nombre.
● Cada elemento del arreglo se puede acceder mediante índices
(con los valores 0, 1, 2, 3, … , n - 1, donde n es el número máximo
de elementos que puede contener el arreglo), los cuales se
encierran entre corchetes [ ] después del nombre del arreglo, por
ejemplo emails[7] se refiere al elemento (un email) con índice 7
del arreglo e mails.
Cada una de las casillas de un arreglo tiene asociado un número
que la identifica de manera única. A este número se le llama índice.
En lenguajes como C, C++, C# y java, la primera casilla del arreglo
tiene índice 0, la segunda tiene índice 1, la tercera índice 2, y así
sucesivamente. Es muy importante tener presente que si el arreglo
puede almacenar hasta N elementos, la última casilla tendrá índice
(N - 1), donde N también se conoce como la dimensión o tamaño del
vector; es decir, el número máximo de elementos que puede
almacenar.
Figura X. Representación gráfica de un vector
Para el ejemplo de la figura:
Declaración
En el pseudo-lenguaje, un arreglo se declara usando el siguiente
formato o plantilla:
<NOMBRE>[ ] : arreglo [<N>]
donde:
<NOMBRE> → Corresponde al nombre o identificador del arreglo
unidimensional
arreglo → indica que se va a trabajar con un arreglo; es decir, con
una variable que puede guardar uno o más valores(multivalor).
[<N>] → es la dimensión o tamaño del arreglo.
En lenguajes como C# en la declaración de un arreglo
unidimensional o vector se tienen dos opciones.
De nuevo, se ha declarado y creado un arreglo llamado letras, el
cual puede almacenar hasta 15 elementos de tipo char.
Gráficamente:
De esta forma el arreglo se declara y crea, pero aún no se ha
guardado nada en él. Sin embargo, tenga presente que, por
defecto u omisión, cada una de las celdas almacena el valor cero
(0) para arreglos de tipo entero (Int), cero punto cero (0.0) para
arreglos arreglos de tipo real (double). y el valor null para
arreglos de tipo texto (String).
Donde e1, e2,...,eN son N elementos de tipo tipo Tipo. Por
ejemplo, para declarar y crear un arreglo con las vocales, en el
flujograma sería:
En el lenguaje C# sería:
En este caso se declara y crea un arreglo llamado vocales, el cual
tiene almacenadas las vocales:
Tenga presente que los datos de tipo carácter, como en el
ejemplo, requieren las comillas simples, y los datos de tipo String
requieren las comillas dobles.
Ejemplo 2:
Si se necesita guardar los nombres de algunas ciudades de
colombia:
flujograma:
C#
“Medellín”, “Pasto”};
Ejemplo 3:
Si se necesita guardar las ventas diarias de una tienda durante la
última semana, en el flujograma puede declarar y crear el
siguiente arreglo:
flujograma:
En el lenguaje C# sería:
Ejemplo 4:
Si se quiere guardar los nombres y la nota definitiva de 15
estudiantes se pueden declarar y crear los siguientes arreglos:
flujograma:
En el lenguaje C# sería:
Ejemplo 5:
Si se necesita guardar los días de la semana, se puede crear y
declarar el siguiente arreglo:
Flujograma:
En el lenguaje C# sería:
Inicialización de un Arreglo
La inicialización es el mecanismo mediante el cual le asignamos
datos a un arreglo. En la segunda opción de inicialización, vimos
cómo declarar y asignar datos a un arreglo. Ahora veremos cómo
asignar información a un arreglo que se ha declarado y creado,
pero no se le ha asignado información (primera opción de
inicialización).
Para guardar un elemento en un arreglo, se usa la instrucción de
asignación, teniendo en cuenta que para acceder a una celda del
arreglo, debe referenciarse mediante su índice.
Si se quiere guardar el valor de la primera venta, con valor de
$15800, se hace lo siguiente:
ventas[0] = 15800;
Ejemplo 6:
Retomando el ejemplo de los nombres y notas de los 15
estudiantes, se quiere un programa que permita pedir esos
nombres y notas.
flujograma:
arreglo. length.
En el ejemplo anterior, para obtener el tamaño del arreglo
nombres sería:
nombres.length
Ejemplo 7:
Ahora suponga que se quiere mostrar un reporte con el nombre y
nota de cada uno de los estudiante, junto con el promedio de los
15 estudiantes.
flujograma:
Para estas dos nuevas necesidades, se crean dos subprocesos: el
primero llamado calcularPromedio, al cual se le envía el arreglo de
notas y devuelve el promedio de las notas de los estudiantes. El
segundo subproceso llamado generarReporte, se le envían los
arreglos de nombres y notas, y devuelve un reporte de tipo texto
con un listado de los nombres y notas de los estudiantes.
Subproceso calcularPromedio:
Flujograma
Ajuste nota: se quiere hacer un ajuste del 10% a la nota de los
estudiantes. Se debe tener en cuenta que la nota no puede ser
mayor que 5.0. Para dar solución a esta situación, podemos crear
un nuevo subproceso con nombre a justeNota.
Este método recibe un arreglo de tipo real con las notas de los
estudiantes y no devuelve nada, ya que el envío de los arreglos a
los métodos se da por referencia; es decir, lo que se envía es la
dirección en memoria, donde se encuentran los datos, y al hacer
Observe que en el llamado al subproceso ajusteNota sólo se
indica el nombre del subproceso y, entre paréntesis, va el arreglo
enviado(en este caso notas). Como el subproceso ajusteNota no
devuelve nada, no se tiene una variable para recibir algún
resultado. Sin embargo, el envío del arreglo es por referencia, y
en el subproceso ajusteNota, se modificarán los datos del arreglo
notas.
double promedio;
String reporte;
nombres = new String[15];
notas = new double[15];
tbPromedio.Text = promedio.ToString();
tbReporte.Text = reporte;
Podemos imaginar una matriz como una tabla compuesta por filas
y columnas, donde la intercesión de una fila con una columna
corresponde con una celda (espacios de memoria), o casillas, en
cada una de las cuales se puede guardar un elemento de una
colección. A cada fila y columna se le asocia un índice. En el caso
del ejemplo siguiente, tenemos 4 filas por 3 columnas, cada una
con sus respectivos índices: 0, 1, 2 y 3 para las filas; y 0, 1 y 2 para
las columnas.
El tamaño de una matriz es el máximo número de elementos que
se pueden guardar en ella, el cual es igual al número de filas
multiplicado por el número de columnas de la misma. En el caso
del ejemplo, el tamaño de la matriz m es 12 = 4 filas * 3 columnas, y
corresponde a las 12 casillas representadas en la figura.
En el lenguaje de programación C#, el tamaño de una matriz se
obtiene con la la propiedad Length escrita después del nombre de
la matriz y el operador punto (.). En nuestro ejemplo, la siguiente
Curso: Algoritmia y Programación 88
Escrito por: Lyda Peña.
instrucción de C# asigna el tamaño de la matriz m en la variable
tamaño de tipo entero:
Declaración
En el pseudo-lenguaje, una matriz se declara y crea usando el
siguiente formato o plantilla:
donde:
<NOMBRE> → Corresponde al nombre del arreglo bidimensional
arreglo → indica que se está creando un arreglo.
[<F>,<C>] → es la dimensión del arreglo, donde F es el número de
filas y C es el número de columnas. F y C deben tomar valores
enteros mayores o iguales que 1.
Curso: Algoritmia y Programación 89
Escrito por: Lyda Peña.
En el flujograma:
En el lenguaje de programación C# la declaración de la matriz real
ventas, su creación y dimensionamiento se pueden implementar
así:
Inicialización
Un arreglo bidimensional puede ser declarado e inicializado con
En el flujograma:
En este caso:
fila 0 fila 1 fila 2
La representación gráfica de este arreglo bidimensional letras
sería:
Observemos la matriz letras. Si se la recorre por filas y se
guardan sus elementos en una variable de tipo texto, daría como
resultado:
a b c d e f g h i
a d g b e h c f i
letras f c datos
{{'a', 'b', 'c'}, {'d', 'e', 'f'}, {'g', 'h', 'i'} } 0 0 “”
1 1 a
2 2 a b
3 3 a b c
0 a b c d
1 a b c d e
2 a b c d e f
3 a b c d e f g
Curso: Algoritmia y Programación 93
Escrito por: Lyda Peña.
0 a b c d e f g h
1 a b c d e f g h i
2
3
Ejercicio: ahora que ya sabe cómo es el recorrido por filas,
modifique el flujograma para que realice un recorrido por
columnas. Recuerde hacer la prueba de escritorio.
Se requiere un programa para simular la cantidad de lluvia
(precipitación), que cumpla con los siguientes requerimientos.