0% encontró este documento útil (0 votos)
137 vistas150 páginas

Manual de Programación I

El documento presenta una introducción a la programación que incluye definiciones de algoritmos, sus características y estructura. Explica la metodología para descomponer un algoritmo en cuatro pasos: definición del problema, análisis, diseño y verificación. Además, analiza conceptos como identificadores, tipos de datos, variables, constantes y operadores. Por último, introduce estructuras algorítmicas como la secuencial, condicional y repetitiva.

Cargado por

brandonpro2003ht
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
137 vistas150 páginas

Manual de Programación I

El documento presenta una introducción a la programación que incluye definiciones de algoritmos, sus características y estructura. Explica la metodología para descomponer un algoritmo en cuatro pasos: definición del problema, análisis, diseño y verificación. Además, analiza conceptos como identificadores, tipos de datos, variables, constantes y operadores. Por último, introduce estructuras algorítmicas como la secuencial, condicional y repetitiva.

Cargado por

brandonpro2003ht
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 150

PROGRAMACIÓN I

Contenido
TEMA1: INTRODUCCIÓN A LA PROGRAMACIÓN 3

1. Introducción a los Algoritmos 3

1.1. Definición de los Algoritmos 3

1.2. Características 3

1.3. Estructura 3

1.4. Metodología para la descomposición de un algoritmo 4

1.4.1. Definición del problema: 4

1.4.2. Análisis: 5

1.4.3. Diseño: 5

1.4.4. Verificación: 5

2. Análisis del Problema 6

2.1. Identificadores: 6

2.2. Tipos de datos: 6

2.2.1. Numéricos: 7

2.2.2. Alfanuméricos: 7

2.2.3. Lógicos: 7

2.3. Variables: 7

2.4. Constantes: 7

2.5. Operadores y expresiones: 8

2.5.1. Aritméticos: 8

2.5.2. Relacionales: 9

2.5.3. Lógicos: 9

2.5.4. Jerarquía de Operadores: 10

3. Diseño de Algoritmo (alternativas de solución) 11


1
PROGRAMACIÓN I
3.1. Diagrama de flujo 11

3.2. Pseudocódigo 13

3.3. Prueba de escritorio: 13

3.4. Algoritmos secuenciales 14

3.5. Actividad de retroalimentación 14

Conclusiones 15

2. TEMA2. ESTRUCTURAS ALGORÍTMICAS 16

2.1. Estructura Secuencial 16

2.1.1. Problemas propuestos de Estructuras secuencial 16

2.2. Estructura Condicional 17

2.3. Condicional simple 17

2.4. Condicional Compuesto 18

2.4.1. Problemas propuestos 20

2.5. Condicional Anidado 20

2.5.1. Problemas propuestos 22

2.6. Condiciones compuestas con operadores lógicos 22

2.6.1. Problemas propuestos 25

2.7. Condicionales múltiples 25

2.8. Múltiples (En caso de) 26

2.9. Estructuras Repetitivas 27

2.9.1. ESTRUCTURA REPETITIVA WHILE. 27

2.9.1.1. Problemas propuestos 37

2.9.2. Estructura Repetitiva For 38

2.9.2.1. Problemas propuestos 45

2.9.3. Estructura repetitiva do while 46

2
PROGRAMACIÓN I
2.9.3.1. Problemas propuestos 52

3. TEMA3. LENGUAJE DE PROGRAMACIÓN C SHARP 52

3.1. Introducción al Lenguaje de Programación C# 52

3.2. Microsoft Visual Studio 60

3.3. Crear y Ejecutar un proyecto en lenguaje de Programación C# 60

3.4. Explicación de la Estructura de un Programa en C# 62

3.5. using System, Namespace (espacio de nombres) 62

3.6. Console 62

3.7. WriteLine 62

3.8. ReadLine 63

3.9. ReadKey 63

3.10. Conversiones de tipos de datos en C# 63

3.11. Ejemplos 64

3.12. Clase Math 68

Practico 1 70

Practico 2 71

Práctico 3 73

3
PROGRAMACIÓN I
1. INTRODUCCIÓN A LA PROGRAMACIÓN

1.1. Definición de los Algoritmos


La palabra algoritmo se deriva de la traducción al latín de la palabra árabe
alkhowarizmi, nombre de un matemático astrónomo árabe que escribió un tratado
sobre manipulación de números y ecuaciones en el siglo IX.

Un algoritmo es una serie de pasos organizados, que describe el proceso que se


debe seguir, para dar solución a un problema específico. (Fadul, 2004).

Como tal pensar en un algoritmo, es pensar la forma en la que podemos resolver


un problema paso a paso, si no se resuelve un paso del problema no se puede
pasar al siguiente.

1.2. Características
Los algoritmos se caracterizan principalmente porque son:

● Precisos: La palabra preciso indica que se distingue con claridad, de igual


manera un algoritmo es claro en cada uno de sus pasos.

● Definido: El algoritmo está delimitado, solo procesa la información y las


operaciones que tiene, no realiza operaciones “fantasma”, si se realiza el
algoritmo dos o más veces con los mismos datos siempre dará el mismo
resultado.

● Finito: Refiriéndose esta característica a que un algoritmo siempre va a


tener un fin, mediante esta característica el algoritmo se culmina la
estructura de un algoritmo.

1.3. Estructura
Los algoritmos son pilares en la informática, así como del desarrollo de sistemas,
por lo cual la siguiente estructura no es solo de los algoritmos, es como tal la
estructura del tratamiento automático de la información también conocido como
procesamiento de datos.

4
PROGRAMACIÓN I
● 1. Entrada: En los procesos informáticos, la entrada representa todos los
datos que necesita el algoritmo para ser procesados, es la alimentación
necesaria para que se puedan procesar los datos, pueden ser datos que
introduzca el usuario del algoritmo o bien que se obtengan de alguna otra
fuente.

● 2. Proceso: Formalmente un proceso es "Una unidad de actividad que se


caracteriza por la ejecución de una secuencia de instrucciones, un estado
actual, y un conjunto de recursos del sistema asociados". (Stallings), es
decir, un proceso es la ejecución paso a paso de las instrucciones, cabe
mencionar que un proceso consiste en un conjunto de pasos y nunca un
paso puede saltarse otro.

● 3. Salida: Son los resultados que se desean obtener en la ejecución del


algoritmo, cabe mencionar que aquí debe obtenerse la o las respuestas que
resuelvan la problemática planteada para resolver mediante el algoritmo.

1.4. Metodología para la descomposición de un algoritmo


Una metodología es un conjunto de métodos utilizados para la investigación
científica, en este paradigma, la metodología es la que permite diseñar los
algoritmos que servirán para resolver los problemas específicos.

1.4.1. Definición del problema:


Citando a Einstein, “si tuviera una hora para salvar el mundo, se iba a gastar
cincuenta y cinco minutos definiendo el problema, y sólo cinco minutos para
encontrar la solución”, invertir tiempo en la definición del problema nos ayuda a no
gastar tiempo replanteando el algoritmo. Este paso de la metodología debemos
plantearnos la pregunta ¿Cuál es el problema en concreto?, visualizar la
delimitación del problema, ¿Hasta dónde abarcará la solución del problema? y si
es posible resolver el algoritmo o no, se sugiere documentar todo en un formato
similar al siguiente

5
PROGRAMACIÓN I
Tabla 1 Definición del Problema
Nombre del
Problema
Delimitación
Resultado
deseado
1.4.2. Análisis:
Una vez identificado y delimitado el problema, esta fase tiene el objetivo de dividir
el problema en sus componentes y examinar de qué manera pueden unirse, en
esta fase se deben contestar las siguientes preguntas:

o ¿Qué se necesita para resolver el problema?


o ¿Qué pasos son necesarios para resolver el problema?
o ¿Qué se debe obtener para resolver el problema?

Una vez resueltas estas preguntas, es muy útil escribirlas en papel o en un medio
electrónico con la finalidad de consultarlas cuando en las siguientes fases de la
metodología, se sugiere la siguiente tabla:

Tabla 2 Análisis del Problema


Proceso
Datos de entrada Salida
(¿Qué pasos son
(¿Qué necesito para (¿Qué se obtiene al
necesarios para resolver el
resolver el problema) resolver el problema)
problema?)
1.4.3. Diseño:

El eminente matemático Donald E. Knuth, expresa en su famosa obra: El arte de


programar computadoras, lo siguiente: "El proceso de preparar programas para
una computadora digital tiene un atractivo especial, no sólo porque puede ser
recompensado económica y científicamente, sino también porque puede ser una
experiencia estética como la poesía y la música." Haciendo uso de alternativas de

6
PROGRAMACIÓN I
solución como lo son diagramas de flujo y pseudocódigo se indican los pasos que
deberá seguir el algoritmo para obtener la solución del problema.

1.4.4. Verificación:
Definido como la acción de comprobar o examinar la verdad de algo, aplicado al
tema actual, es la fase que nos permite saber si el algoritmo cumplió o no su
objetivo, para realizar la comprobación se le dan variables de entrada al algoritmo
y se observan los resultados que arroja, por otra parte y haciendo uso de papel y
lápiz se realiza una prueba de escritorio que consiste en realizar las operaciones
que el algoritmo debe realizar y se comprueban los resultados obtenidos del
algoritmo contra los resultados obtenidos en la prueba de escritorio, en caso de
que ambos coincidan, se concluye que el algoritmo funciona para resolver el
problema planteado, en caso contrario se debe volver a la fase de definición del
problema para buscar el error. Para esta fase se sugiere el siguiente formato:

Tabla 3 Verificación

Variables de entrada Operaciones Realizadas Resultado Obtenido

Y responder la pregunta: ¿El resultado de la prueba de escritorio es el mismo que


el arrojado por el algoritmo?, en caso de que la respuesta sea positiva, tendremos
un algoritmo funcional.

1.5. Análisis del Problema

Como se mencionó anteriormente, esta fase tiene la finalidad de dividir el


problema en sus componentes y examinar de qué manera pueden unirse, los
componentes principales son:

1.5.1. Identificadores:
Al igual que en algebra, los algoritmos funcionan mediante valores que
pueden ser introducidos por los usuarios o valores que pueden contener los
procesos, esos valores deben ser nombrados de alguna manera con la

7
PROGRAMACIÓN I
finalidad de poder identificados y usarlos, en pocas palabras es el nombre
que se la da a las variables y constantes que se usan en el algoritmo.

1.5.2. Tipos de datos:

Dicho mexicano dice,” Hasta en los perros hay razas” de igual manera en la
informática hasta en los valores (variables y constantes) hay tipos, a
diferencia de la rama canina, la raza en este caso son tipos y los tipos de
datos más comunes son:

1.5.3. Numéricos:

Son aquellos valores que solo pueden contener números, ya sean enteros,
fraccionarios, positivos, negativos, reales o imaginarios con la finalidad de
realizar operaciones aritméticas comunes.

1.5.4. Alfanuméricos:

Es una secuencia de caracteres que pueden ser números, letras o signos,


estos pueden ser nombres, direcciones y en comparación con los
numéricos, no se pueden realizar operaciones aritméticas con estos.

1.5.5. Lógicos:

Son aquellos que solo pueden tener un valor, verdadero o falso, ya que
representan el resultado de una comparación de valores

1.5.6. Variables:

Son valores que van cambiando durante la ejecución de los procesos del
algoritmo, en estas variables se van a guardar las operaciones que el algoritmo
realice para resolver el problema. Cada variable tiene un identificador, pues es el
nombre con el que se encuentra y un tipo de dato, que indica que datos podrá
guardar que pueden ser números, letras o valores cierto o falso.

8
PROGRAMACIÓN I
1.5.7. Constantes:

Son datos que su valor no va a cambiar durante todo el desarrollo del algoritmo,
las constantes pueden tener o no un identificador, pues estos valores pueden
escribirse directamente al usar las operaciones o bien asignarle un identificador,
las constantes también tienen un tipo de dato.

1.6. Operadores y expresiones:


Son símbolos que tienen una función predefinida (suma, resta, multiplicación etc.)
y que recibe sus argumentos de manera infija (luzumisu, s.f.), los operadores más
utilizados son:
1.6.1. Aritméticos:
Son los operadores que permiten realizar operaciones aritméticas y se
enlistan en la siguiente tabla:
Operador Acción Ejemplo
+ Suma X = 5 + 4 | x= 9
- Resta X = 10 – 3 | x=7
* Multiplicación X=3*2|x=6
/ División X = 10 / 2 | x = 5
% División Modular X = 1 / 3 | x = .66
++ Incremento X = 1; X++ | x = 2
-- Decremento X = 1; X-- | x = 0
^ Potencia X=2 ^3|x=8
Ilustración 1 Tabla de Operadores Aritméticos

9
PROGRAMACIÓN I
1.6.2. Relacionales:
Estos operadores permiten evaluar la relación entre un par de operando
(constantes o variables) y permiten devolver valores de cierto o falso.
Operador Acción
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual / idéntico
!= Diferente / distinto
Ilustración 2 Tabla de Operadores relacionales

1.6.3. Lógicos:
Son operadores que permiten conectar un par de propiedades, es decir,
nos permiten obtener una respuesta lógica de la comparación de dos
operaciones.
Operador Acción
&& Conjunción, and, Y
|| Disyunción, or, O
! Negación, no
Ilustración 3 Tabla de Operadores Lógicos

● Los operadores lógicos tienen un conjunto de reglas llamadas tablas de


verdad, las cuales permiten obtener el valor lógico a partir de dos
operaciones a continuación se muestran las tablas de verdad de AND,
OR Y NOT
Operador Operador 2 Resultado
T T T
T F F
F T F
F F F

10
PROGRAMACIÓN I
Ilustración 4 Tabla de verdad de AND

Operador Operador 2 Resultado


T T T
T F T
F T T
F F F
Ilustración 5 Tabla de verdad de OR

Operador Resultado
T F
F T
Ilustración 6 Tabla de verdad de NOT

o Las T significan “True” por su significado en ingles de Verdadero


y F por “False” tomando el valor de falso. Para poner más en
contexto las operaciones lógicas, se muestra un ejemplo

(10 + 20) > (5 * 3) AND (10 -1) = 9


30 > 15 AND 9 = 9
T AND T
True
Ilustración 7 Ejemplo del uso de tablas de verdad

1.6.4. Jerarquía de Operadores:


Para realizar operaciones como la anterior, se debe seguir un orden para la
realización de operaciones:

▪ Operadores Matemáticos

▪ Paréntesis

▪ Potencias y Raíces

11
PROGRAMACIÓN I
▪ Multiplicaciones y Divisiones

▪ Sumas y restas

▪ Operadores Relacionales

▪ <,>,<=,>=,==,!=

▪ Operadores Lógicos

▪ Not

▪ AND , OR

Ilustración 8 Jerarquía de Operadores

Primero se realizan las operaciones que se encuentran ente paréntesis, si


hay más de una operación dentro de un paréntesis de aplica el mismo
criterio para realizar las operaciones en el orden indicado, posteriormente
las potencias y raíces, multiplicaciones y divisiones, sumas y restas en ese
orden, si un operador se encuentra dos veces, se realiza la operación que
se encuentre primero de izquierda a derecha, posteriormente y también de
izquierda a derecha se aplican los operadores relacionales y por último los
operadores lógicos.

1.7. Diseño de Algoritmo (alternativas de solución)

Mediante las herramientas de diseño de algoritmos se pueden desarrollar los


mismos, las alternativas de diseño de algoritmos son principalmente dos:

1.7.1. Diagrama de flujo

● Representan de forma visual el flujo de los datos a través del tratamiento de


información. Los diagramas de flujo describen que operaciones y en que
secuencia se requieren para solucionar un problema dado

12
PROGRAMACIÓN I
● Los diagramas de flujo se dibujan generalmente usando algunos símbolos
estándares. Algunos símbolos estándares, que se requieren con frecuencia
para diagramar programas de computadora se muestras a continuación

Ilustración 9 Elementos de un diagrama de flujo

o Reglas para la creación de Diagramas

▪ Los Diagramas de flujo deben escribirse de arriba hacia abajo,


y/o de izquierda a derecha.

▪ Los símbolos se unen con líneas, las cuales tienen en la punta


una flecha que indica la dirección que fluye la información
procesos, se deben de utilizar solamente líneas de flujo
horizontal o verticales (nunca diagonales).

▪ Se debe evitar el cruce de líneas, para lo cual se quisiera


separar el flujo del diagrama a un sitio distinto, se pudiera
realizar utilizando los conectores. Se debe tener en cuenta

13
PROGRAMACIÓN I
que solo se van a utilizar conectores cuando sea
estrictamente necesario.

▪ No deben quedar líneas de flujo sin conectar

▪ Todo texto escrito dentro de un símbolo debe ser legible,


preciso, evitando el uso de muchas palabras.

▪ Todos los símbolos pueden tener más de una línea de


entrada, a excepción del símbolo final.

▪ Solo los símbolos de decisión pueden y deben tener más de


una línea de flujo de salida (unam.mx, s.f.).

1.7.2. Pseudocódigo

● Es una técnica que sirve para escribir programas de computadora en


lenguaje natural de tal manera que se facilite la comprensión, prueba y
posterior codificación en un lenguaje de programación específico

● Ventajas de utilizar un Pseudocódigo a un Diagrama de Flujo

o Ocupa menos espacio en una hoja de papel.


o Permite representar en forma fácil operaciones repetitivas complejas.
o Es muy fácil pasar de pseudocódigo a un programa en algún
lenguaje de programación.
o Si se siguen las reglas se puede observar claramente los niveles que
tiene cada operación.

1.7.3. Prueba de escritorio:


Todo algoritmo debe ser probado antes de ser ejecutado para tener la certeza de
que lograremos el objetivo. La forma de probarlo es siguiente cada uno de los
pasos que indica el algoritmo. A esto le llamaremos prueba de escritorio. En la
prueba de escritorio, un algoritmo bien hecho siempre debe funcionar

14
PROGRAMACIÓN I
o Al poner en marcha los pasos del algoritmo para determinar si
logrará o no el objetivo, tal vez se tengan que hacer algunas
modificaciones hasta logar el objetivo esperado. El algoritmo debe
ser lo suficientemente detallado para que no exista duda alguna al
ejecutarse. (Chehaibar, 2007).

1.8. Algoritmos secuenciales


En este tipo de estructura las instrucciones se realizan o se ejecutan una después
de la otra y, por lo general, se espera que se proporcione uno o varios datos, los
cuales son asignados a variables para que con ellos se produzcan los resultados
que representen la solución del problema que se planteó.

Los algoritmos tienen como fin actuar sobre los datos proporcionados por el
usuario, a los que se les aplican procesos con el fin de generar la información o un
resultado (Delgado).

1.9. Actividad de retroalimentación


Se requiere de un algoritmo que calcule el sueldo semanal o mensual de un
trabajador de construcción, al empleado le pagan $50 pesos la hora y cada día
trabaja durante 8 horas.

FASE 1 DEFINICIÓN DEL PROBLEMA

Tabla 1 Definición del Problema

Nombre del
Sueldo de un trabajador
Problema
Obtener el sueldo semanal o mensual a partir del pago por
Delimitación
horas y el número de horas trabajadas
Resultado
Sueldo semanal del trabajador
deseado

Fase 2 Análisis del Problema

15
PROGRAMACIÓN I
Datos de entrada Proceso Salida
(¿Qué necesito para (¿Qué pasos son necesarios para (¿Qué se obtiene al
resolver el problema) resolver el problema?) resolver el problema)

Pago por hora


Sueldo = (Pago por hora*Número de
Número de horas
horas trabajadas en un día)*Número Sueldo Semanal
trabajadas en un día
de días trabajados
Número de días trabajados

Inicio del algoritmo


Fase 3 Diseño del Algoritmo
Inicio
Variable de entrada

CantDias Constantes
pago_hora=50
horas_dia=8
Const pago_hora=50
Const horas_dia=8
Operación o proceso, se lo
asignamos a la variable sueldo
Sueldo=pago_horas*pago_dia*CantDias
Mostramos sueldo

Sueldo
Fin del algoritmo

Fin

Fase 4 Verificación

Variables de entrada Operaciones Realizadas Resultado Obtenido


CantDias=7 Sueldo = (50*8)*7 2800
1.10. Conclusiones
El diseño de algoritmos es realmente un arte que ayuda al desarrollo de la
inteligencia lógico matemática, el hecho de resolver problemas no solo de índole
lógico matemática permite aclarar el panorama y elegir la mejor opción para

16
PROGRAMACIÓN I
resolver la problemática. Las definiciones y metodología aquí mostrada, así como
conceptos permiten entender todos los elementos de un algoritmo y que de esta
forma se puedan diseñar los propios para resolver prácticamente cualquier
problemática bien planteada.

17
PROGRAMACIÓN I
PRACTICOS PROPUESTOS
Practico 1
1. ¿Qué es un algoritmo?

2. La Estructura de un algoritmo está definido por entrada, proceso y


salida

V o F

3. Un algoritmo es:

a. Un conjunto de operaciones que se usan para resolver un problema


específico.
b. Conjunto de programas informáticos
c. Un conjunto de software libre

4. ¿Cuál es la metodología para dar solución a problemas mediante


algoritmos?

5. ¿Qué se hace en el análisis del problema?

6. ¿Cuál es la característica de un buen algoritmo?

7. ¿Dado un determinado problema computacional, quien debe idear una


solución y expresarla usando un algoritmo?

18
PROGRAMACIÓN I
Practico 2

1. El operador lógico and(&&), permite evaluar varias condiciones y da


como verdadero si todas las condiciones son verdadero

a. Verdadero

b. Falso

2. El operador lógico or( | | ), permite evaluar varias condiciones y da


como verdadero si al menos una condición es verdadero

a. Verdadero

b. Falso

3. El operador ! niega una condición en el lenguaje C#

a. Verdadero

b. Falso

4. Una condición se denomina cuando comparamos dos variables

a. Verdadero

b. Falso

5. Una variable es

a. Un lugar de almacenamiento, cuyo contenido podrá variar durante el


proceso y finalmente se obtendrán los resultados con los datos
contenidos de ellos.
b. Un lugar de almacenamiento, cuyo contenido no podrá variar durante el
proceso y finalmente se obtendrán los resultados con los datos
contenidos de ellos.
c. Ninguna de las anteriores

19
PROGRAMACIÓN I
6. Los operadores relacionales se utilizan siempre en:

a. Operaciones de comparación
b. Operaciones de suma y resta
c. Operaciones de multiplicación y división

7. El resultado de esta expresión es

a=5; b=5; c=3 [(a ≥ b ¿∧¿(a>c )¿∨¿(b=¿ c )

a. Verdadero
b. Falso

8. La forma correcta de definir y asignar un valor entero una variable es


int a=10;

a. Verdadero

b. Falso

9. Indicar cuales son los operadores aritméticos

10. Indicar cuales son los operadores Relacionales e indicar el nombre

11. Escriba que valor lógico devuelve cada expresión lógica

!(a==c) &&(c>b) Ejemplos:


Sea: a = 10 b = 12 c = 13

20
PROGRAMACIÓN I
12. Describa los diferentes tipos de Datos y de ejemplo para cada tipo de
dato

Encierre el inciso de la respuesta correcta

13. Los operadores de relación son: >, >=, <, <=, ==, ¡=

a. Faso
b. Verdadero
14. Los Operadores lógicos son

a. + - * /
b. > >= < <= == !=
c. && || !
d. Ninguna
15. La siguiente expresión lógica que resultado devuelve

a=12; ( a !=5 )∧¿(a> 10)

a. Falso

b. Verdadero

21
PROGRAMACIÓN I
Práctico 3

Encerrar el inciso correcto con una forma circulo o indicar con una flecha el
inciso correcto

Ingresar datos desde teclado


22
PROGRAMACIÓN I
4

7. Escribir el diagrama de flujo para el siguiente algoritmo

2. ESTRUCTURAS ALGORÍTMICAS
1.1. Estructura Secuencial

Cuando en un problema sólo participan operaciones,


entradas y salidas se la denomina una estructura
secuencial.
Problema: Realizar la carga de dos números enteros por
teclado e imprimir su suma y su producto.

23
PROGRAMACIÓN I
Diagrama de flujo:

Tenemos dos entradas num1 y num2 (recordar cuáles son los nombres de
variables correctas), dos operaciones: realización de la suma y del producto de los
valores ingresados y dos salidas, que son los resultados de la suma y el producto
de los valores ingresados. En el símbolo de impresión podemos indicar una o más
salidas, eso queda a criterio del programador, lo mismo para indicar las entradas
por teclado.

Problemas propuestos de Estructuras secuencial

1. Realizar la carga del lado de un cuadrado, mostrar por pantalla el perímetro


del mismo (El perímetro de un cuadrado se calcula multiplicando el valor del
lado por cuatro)
2. Escribir un programa en el cual se ingresen cuatro números, calcular e
informar la suma de los dos primeros y el producto del tercero y el cuarto.
3. Realizar un programa que lea cuatro valores numéricos e informar su suma
y promedio.
4. Se debe desarrollar un programa que pida el ingreso del precio de un
artículo y la cantidad que lleva el cliente. Mostrar lo que debe abonar el
comprador.

24
PROGRAMACIÓN I
5. Un vendedor recibe un sueldo base más un 10% extra por comisión de sus
ventas, el vendedor desea saber cuánto dinero obtendrá por concepto de
comisiones por las tres ventas que realiza en el mes y el total que recibirá
en el mes tomando en cuenta su sueldo base y comisiones.
6. Un alumno desea saber cuál será su calificación final en la materia de
Algoritmos. Dicha calificación se compone de los siguientes porcentajes:

● 55% del promedio de sus tres calificaciones parciales.

● 30% de la calificación del examen final.

● 15% de la calificación de un trabajo final.

7. Dado un número de dos cifras, diseñe un algoritmo que permita obtener el


número invertido. Ejemplo, si se introduce 23 que muestre 32.
8. Dadas dos variables numéricas A y B, que el usuario debe teclear, se pide
realizar un algoritmo que intercambie los valores de ambas variables y
muestre cuanto valen al final las dos variables.
9. Diseñar un algoritmo que lea cuatro variables y calcule e imprima su
producto, su suma y su media aritmética
10. Dados los catetos de un triángulo rectángulo, calcular su hipotenusa.
11. Una tienda ofrece un descuento del 15% sobre el total de la compra y un
cliente desea saber cuánto deberá pagar finalmente por su compra

1.2. Estructura Condicional


No todos los problemas pueden resolverse empleando estructuras secuenciales.
Cuando hay que tomar una decisión aparecen las estructuras condicionales.

En nuestra vida diaria se nos presentan situaciones donde debemos decidir.

● ¿Elijo la carrera A o la carrera B?

● ¿Me pongo este pantalón?

25
PROGRAMACIÓN I
● Para ir al trabajo, ¿elijo el camino A o el camino B?

● Al cursar una carrera, ¿elijo el turno mañana, tarde o noche?

1.2.1. Condicional simple


Cuando se presenta la elección tenemos la opción de realizar una actividad o no
realizar ninguna.
Hay que tener en cuenta que al
Representación gráfica: disponer una condición debemos
seleccionar que operador relacional
se adapta a la pregunta.

Operadores Relacionales:
> (mayor)
< (menor)
>= (mayor o igual)
<= (menor o igual)
== (igual)
!= (distinto)

Podemos observar: El rombo representa la condición. Hay dos opciones que se


pueden tomar. Si la condición da verdadera se sigue el camino del verdadero, o
sea el de la derecha, si la condición da falsa se sigue el camino de la izquierda.

Se trata de una estructura CONDICIONAL SIMPLE porque por el camino del


verdadero hay actividades y por el camino del falso no hay actividades.

Por el camino del verdadero pueden existir varias operaciones, entradas y salidas,
inclusive ya veremos que puede haber otras estructuras condicionales.

Problema:

Ingresar el sueldo de una persona, si supera los 3000 pesos mostrar un mensaje
en pantalla indicando que debe abonar impuestos.

26
PROGRAMACIÓN I
Diagrama de flujo:

1.2.2. Condicional Compuesto


Podemos observar lo siguiente: Siempre se hace la carga del sueldo, pero si el
sueldo que ingresamos supera 3000 pesos se mostrará por pantalla el mensaje
"Esta persona debe abonar impuestos", en caso que la persona cobre 3000 o
menos no aparece nada por pantalla.
Cuando se presenta la elección tenemos la opción de realizar una actividad u otra.
Es decir, tenemos actividades por el verdadero y por el falso de la condición. Lo
más importante que hay que tener en cuenta que se realizan las actividades de la
rama del verdadero o las del falso, NUNCA se realizan las actividades de las dos
ramas.

27
PROGRAMACIÓN I
Representación gráfica:

En una estructura condicional compuesta tenemos entradas, salidas, operaciones,


tanto por la rama del verdadero como por la rama del falso.

Problema:

Realizar un programa que solicite ingresar dos números distintos y muestre por
pantalla el mayor de ellos.

Diagrama de flujo:

28
PROGRAMACIÓN I
Se hace la entrada de num1 y num2 por teclado. Para saber cuál variable tiene un
valor mayor preguntamos si el contenido de num1 es mayor (>) que el contenido
de num2, si la respuesta es verdadera vamos por la rama de la derecha e
imprimimos num1, en caso que la condición sea falsa vamos por la rama de la
izquierda (Falsa) e imprimimos num2.
Como podemos observar nunca se imprimen num1 y num2 simultáneamente.
Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya
que tenemos actividades por la rama del verdadero y del falso.
Problemas propuestos
A. Realizar un programa que lea por teclado dos números, si el primero es
mayor al segundo informar su suma y diferencia, en caso contrario informar
el producto y la división del primero respecto al segundo.
B. Se ingresan tres notas de un alumno, si el promedio es mayor o igual a
siete mostrar un mensaje "Promocionado".
C. Se ingresa por teclado un número positivo de uno o dos dígitos (1..99)
mostrar un mensaje indicando si el número tiene uno o dos dígitos. (Tener
en cuenta que condición debe cumplirse para tener dos dígitos, un número
entero)

1.2.3. Condicional Anidado


Decimos que una estructura condicional es anidada cuando por la rama del
verdadero o el falso de una estructura condicional hay otra estructura condicional.

29
PROGRAMACIÓN I
El diagrama de flujo que se presenta contiene dos estructuras condicionales. La
principal se trata de una estructura condicional compuesta y la segunda es una
estructura condicional simple y está contenida por la rama del falso de la primera
estructura.

Es común que se presenten estructuras condicionales anidadas aún más


complejas.

Problema:

Confeccionar un programa que pida por teclado tres notas de un alumno, calcule
el promedio e imprima alguno de estos mensajes:

Si el promedio es >=7, mostrar "Promocionado". Por falso preguntar nuevamente

Si el promedio es >=4, mostrar "Regular". Por falso mostrar "Reprobado".

Diagrama de flujo:

30
PROGRAMACIÓN I

Analicemos el siguiente diagrama. Se ingresan tres valores por teclado que


representan las notas de un alumno, se obtiene el promedio sumando los tres
valores y dividiendo por 3 dicho resultado (Tener en cuenta que si el resultado es
un valor real solo se almacena la parte entera).

Primeramente, preguntamos si el promedio es superior o igual a 7, en caso


afirmativo va por la rama del verdadero de la estructura condicional mostramos un
mensaje que indica "Promocionado" (con comillas indicamos un texto que debe
imprimirse en pantalla).

31
PROGRAMACIÓN I
En caso que la condición nos dé falso, por la rama del falso aparece otra
estructura condicional, porque todavía debemos averiguar si el promedio del
alumno es superior o igual a cuatro o inferior a cuatro.

Estamos en presencia de dos estructuras condicionales compuestas.

Problemas propuestos
A. Se cargan por teclado tres números distintos. Mostrar por pantalla el mayor
de ellos.
B. Se ingresa por teclado un valor entero, mostrar una leyenda que indique si
el número es positivo, nulo o negativo.
C. Confeccionar un programa que permita cargar un número entero positivo de
hasta tres cifras y muestre un mensaje indicando si tiene 1, 2, o 3 cifras.
Mos-trar un mensaje de error si el número de cifras es mayor.
D. Un postulante a un empleo, realiza un test de capacitación, se obtuvo la
siguiente información: cantidad total de preguntas que se le realizaron y la
cantidad de preguntas que contestó correctamente. Se pide confeccionar
un programa que ingrese los dos datos por teclado e informe el nivel del
mismo según el porcentaje de respuestas correctas que ha obtenido, y
sabiendo que:

Nivel máximo: Porcentaje>=90%.


Nivel medio: Porcentaje>=75%.
Nivel regular: Porcentaje>=50%.
Fuera de nivel: caso contrario
1.2.4. Condiciones compuestas con operadores lógicos

Operadores lógicos (&&, ||, !).

Estos dos operadores se emplean fundamentalmente en las estructuras


condicionales para agrupar varias condiciones simples.

Operador &&

32
PROGRAMACIÓN I

Traducido se lo lee como ?Y?. Si la Condición 1 es verdadera Y la condición 2 es


verdadera luego ejecutar la rama del verdadero.

Cuando vinculamos dos o más condiciones con el operador ?&&?, las dos
condiciones deben ser verdaderas para que el resultado de la condición
compuesta de Verdadero y continúe por la rama del verdadero de la estructura
condicional.

Las utilizaciones de operadores lógicos permiten en muchos casos plantear


algoritmos más cortos y comprensibles.

Problema:

Confeccionar un programa que lea por teclado tres números distintos y nos
muestre el mayor.

33
PROGRAMACIÓN I

F V

Este ejercicio está resuelto sin emplear operadores lógicos en un concepto


anterior del tutorial. La primera estructura condicional es una ESTRUCTURA
CONDICIONAL COMPUESTA con una CONDICION COMPUESTA.

Podemos leer de la siguiente forma:

Si el contenido de la variable num1 es mayor al contenido de la variable num2 Y si


el contenido de la variable num1 es mayor al contenido de la variable num3
entonces la CONDICION COMPUESTA resulta Verdadera.
34
PROGRAMACIÓN I
Si una de las condiciones simples da falso la CONDICION COMPUESTA da Falso
y continua por la rama del falso.

Es decir que se mostrará el contenido de num1 si y sólo si num1>num2 y


num1>num3.
En caso de ser Falsa la condición, analizamos el contenido de num2 y num3 para
ver cual tiene un valor mayor.

En esta segunda estructura condicional no se requieren operadores lógicos al


haber una condición simple.

Operador ||

Traducido se lo lee como ?O?. Si la condición 1 es Verdadera O la condición 2 es


Verdadera, luego ejecutar la rama del Verdadero.

Cuando vinculamos dos o más condiciones con el operador ?Or", con que una de
las dos condiciones sea Verdadera alcanza para que el resultado de la condición
compuesta sea Verdadero.

Problema:

Se carga por teclado un número comprendido entre 1 y 3. Mostrar un mensaje si


corresponde al primer.
Ejemplo:

35
PROGRAMACIÓN I

F V

36
PROGRAMACIÓN I
Problemas propuestos

1. Se ingresan tres valores por teclado, si todos son iguales se imprime la


suma del primero con el segundo y a este resultado se lo multiplica por el
tercero.

2. Se ingresan por teclado tres números, si todos los valores ingresados son
menores a 10, imprimir en pantalla la leyenda "Todos los números son
menores a diez".

3. Se ingresan por teclado tres números, si al menos uno de los valores


ingresados es menor a 10, imprimir en pantalla la leyenda "Alguno de los
números es menor a diez".

4. Escribir un programa que pida ingresar la coordenada de un punto en el


plano, es decir dos valores enteros x e y (distintos a cero).
Posteriormente imprimir en pantalla en que cuadrante se ubica dicho punto.
(1º Cuadrante si x > 0 Y y > 0 , 2º Cuadrante: x < 0 Y y > 0, etc.)

5. De un operario se conoce su sueldo y los años de antigüedad. Se pide


confeccionar un programa que lea los datos de entrada e informe:
a) Si el sueldo es inferior a 500 y su antigüedad es igual o superior a 10
años, otorgarle un aumento del 20 %, mostrar el sueldo a pagar.
b)Si el sueldo es inferior a 500 pero su antigüedad es menor a 10 años,
otorgarle un aumento de 5 %.
c) Si el sueldo es mayor o igual a 500 mostrar el sueldo en pantalla sin
cambios.

6. Escribir un programa en el cual: dada una lista de tres valores numéricos


distintos se calcule e informe su rango de variación (debe mostrar el mayor
y el menor de ellos)

37
PROGRAMACIÓN I
1.2.5. Condicionales múltiples
Las estructuras de comparación múltiples, son tomas de decisión especializadas
que permiten comparar una variable contra distintos posibles resultados,
ejecutando para cada caso una serie de instrucciones específicas. La forma
común es la siguiente:

Pseudocódigo: Diagrama de flujo:

1.2.6. Múltiples (En caso de)


Las estructuras de comparación múltiples, es una toma de decisión especializada
que permiten evaluar una variable con distintos posibles resultados, ejecutando
para cada caso una serie de instrucciones específicas. La forma es la siguiente:

Pseudocódigo: Diagrama de flujo:

38
PROGRAMACIÓN I

Veamos algunos ejemplos donde se aplique todo lo anterior:

Dado un numero entre 1 y 7 escriba su correspondiente día de la semana así:


por el caso 1, mostrar Lunes, por el caso 2, mostrar Martes, por el caso 3, mostrar
Miércoles, por el caso 4, mostrar Jueves, por caso 5, mostrar Viernes, por caso 6,
mostrar Sábado, por caso 7 mostrar Domingo.

Pseudocódigo

INICIO
Dia: ENTERO
ESCRIBA un número para escribir su día
LEA Dia
En-caso-de Dia haga
Caso 1: ESCRIBA Lunes
Caso 2: ESCRIBA Martes
Caso 3: ESCRIBA Miércoles
Caso 4: ESCRIBA Jueves
Caso 5: ESCRIBA Viernes
Caso 6: ESCRIBA Sábado
Caso 7: ESCRIBA Domingo
SINO: ESCRIBA Escribió un numero fuera del rango 1-7
Fin-Caso
FIN

39
PROGRAMACIÓN I
1.3. Estructuras Repetitivas
Hasta ahora hemos empleado estructuras SECUENCIALES y CONDICIONALES.
Existe otro tipo de estructuras tan importantes como las anteriores que son las
estructuras REPETITIVAS.

Una estructura repetitiva permite ejecutar una instrucción o un conjunto de


instrucciones varias veces.

Una ejecución repetitiva de sentencias se caracteriza por:

● La o las sentencias que se repiten.

● El test o prueba de condición antes de cada repetición, que motivará que se

repitan o no las sentencias.

1.3.1. ESTRUCTURA REPETITIVA WHILE.


Representación gráfica de la estructura while:

No debemos confundir la representación gráfica de la estructura repetitiva while


(Mientras) con la estructura condicional if (Si)

Funcionamiento: En primer lugar, se verifica la condición, si la misma resulta


verdadera se ejecutan las operaciones que indicamos por la rama del Verdadero.

A la rama del verdadero la graficamos en la parte inferior de la condición. Una


línea al final del bloque de repetición la conecta con la parte superior de la
estructura repetitiva.

40
PROGRAMACIÓN I
En caso que la condición sea Falsa continúa por la rama del Falso y sale de la
estructura repetitiva para continuar con la ejecución del algoritmo.

El bloque se repite MIENTRAS la condición sea Verdadera.

Importante: Si la condición siempre retorna verdadero estamos en presencia de


un ciclo repetitivo infinito. Dicha situación es un error de programación, nunca
finalizará el programa.

Problema 1:

Realizar un programa que imprima en pantalla los números del 1 al 100.

Sin conocer las estructuras repetitivas podemos resolver el problema empleando


una estructura secuencial. Inicializamos una variable con el valor 1, luego
imprimimos la variable, incrementamos nuevamente la variable y así
sucesivamente.

41
PROGRAMACIÓN I

Si continuamos con el diagrama no nos alcanzarían las próximas 5 páginas para


finalizarlo. Emplear una estructura secuencial para resolver este problema produce
un diagrama de flujo y un programa en Java muy largo.

Ahora veamos la solución empleando una estructura repetitiva while:

42
PROGRAMACIÓN I

Es muy importante analizar este diagrama:

La primera operación inicializa la variable x en 1, seguidamente comienza la


estructura repetitiva while y disponemos la siguiente condición ( x <= 100), se lee
MIENTRAS la variable x sea menor o igual a 100.

Al ejecutarse la condición retorna VERDADERO porque el contenido de x (1) es


menor o igual a 100. Al ser la condición verdadera se ejecuta el bloque de
instrucciones que contiene la estructura while. El bloque de instrucciones contiene
una salida y una operación.

Se imprime el contenido de x, y seguidamente se incrementa la variable x en uno.

La operación x=x + 1 se lee como "en la variable x se guarda el contenido de x


más 1". Es decir, si x contiene 1 luego de ejecutarse esta operación se
almacenará en x un 2.
43
PROGRAMACIÓN I
Al finalizar el bloque de instrucciones que contiene la estructura repetitiva se
verifica nuevamente la condición de la estructura repetitiva y se repite el proceso
explicado anteriormente.

Mientras la condición retorne verdadero se ejecuta el bloque de instrucciones; al


retornar falso la verificación de la condición se sale de la estructura repetitiva y
continua el algoritmo, en este caso finaliza el programa.

Lo más difícil es la definición de la condición de la estructura while y qué bloque de


instrucciones se van a repetir. Observar que si, por ejemplo, disponemos la
condición x >=100 ( si x es mayor o igual a 100) no provoca ningún error sintáctico
pero estamos en presencia de un error lógico porque al evaluarse por primera vez
la condición retorna falso y no se ejecuta el bloque de instrucciones que
queríamos repetir 100 veces.

No existe una RECETA para definir una condición de una estructura repetitiva,
sino que se logra con una práctica continúa solucionando problemas.

Una vez planteado el diagrama debemos verificar si el mismo es una solución


válida al problema (en este caso se debe imprimir los números del 1 al 100 en
pantalla), para ello podemos hacer un seguimiento del flujo del diagrama y los
valores que toman las variables a lo largo de la ejecución:

100

44
PROGRAMACIÓN I
101 Cuando x vale 101 la condición de la estructura repetitiva retorna falso,

en este caso finaliza el diagrama.

Importante: Podemos observar que el bloque repetitivo puede no ejecutarse


ninguna vez si la condición retorna falso la primera vez.

La variable x debe estar inicializada con algún valor antes que se ejecute la
operación x=x + 1 en caso de no estar inicializada aparece un error de
compilación.

Problema 2:

Escribir un programa que solicite la carga de un valor positivo y nos muestre


desde 1 hasta el valor ingresado de uno en uno.

Ejemplo: Si ingresamos 30 se debe mostrar en pantalla los números del 1 al 30.

Es de FUNDAMENTAL importancia analizar los diagramas de flujo y la posterior


codificación en c# de los siguientes problemas, en varios problemas se presentan
otras situaciones no vistas en el ejercicio anterior.

Diagrama de flujo:

45
PROGRAMACIÓN I

Leemos un valor en n

X inicializamos en 1

F Cuando la condición sea falsa, entonces sale del ciclo repetiti

V Mientras x sea menor que n, entonces ejecuta la rama de V

Muestra el valor de x

Incrementa x en 1, luego vuelve a la condición

Podemos observar que se ingresa por teclado un valor para la variable n. El


operador puede cargar cualquier valor.

Si el operador carga 10 el bloque repetitivo se ejecutará 10 veces, ya que la


condición es ?Mientras x<=n ?, es decir ?mientras x sea menor o igual a 10?; pues
x comienza en uno y se incrementa en uno cada vez que se ejecuta el bloque
repetitivo.

A la prueba del diagrama la podemos realizar dándole valores a las variables; por
ejemplo, si ingresamos 5 el seguimiento es el siguiente:

n x

5 1 (Se imprime el contenido de x)

46
PROGRAMACIÓN I
2 " "

3 " "

4 " "

5 " "

6 (Sale del while porque 6 no es menor o igual a 5)

● Contadores: Se utilizan para llevar el control del número de ocasiones en que se

realiza una operación o se cumple una condición. Con los incrementos


generalmente de uno en uno. Un contador se debe inicializar, generalmente en
cero.

Int c=0;

c =c + 1;

● Acumuladores: Forma que toma una variable y que sirve para llevar la suma

acumulativa de una serie de valores que se van leyendo o calculando


progresivamente. Un acumulador se debe inicializar en cero

Int suma=0;

Suma=suma+b;

Una cuenta de ahorros puede representarse en un algoritmo mediante un


acumulador, pues el ahorrista no siempre podrá ahorrar una cantidad fija en la
cuenta, un día deposita 10, otro día deposita 30, otro deposita 5.

La variable x recibe el nombre de CONTADOR. Un contador es un tipo especial de


variable que se incrementa o decrementa con valores constantes durante la
ejecución del programa.

El contador x nos indica en cada momento la cantidad de valores impresos en


pantalla.

47
PROGRAMACIÓN I

Problema 3:

Desarrollar un programa que permita la carga de 10 valores por teclado y nos


muestre posteriormente la suma de los valores ingresados y su promedio.

48
PROGRAMACIÓN I

Condición que controla las


veces que se repetirá

La variable suma es un
acumulador, que va
acumulando el contenido
de la variable valor

La variable x es un
contador, que
incrementa de 1 en 1

Diagrama de flujo:

En este problema, a semejanza de los anteriores, llevamos un CONTADOR


llamado x que nos sirve para contar las vueltas que debe repetir el while.

49
PROGRAMACIÓN I
También aparece el concepto de ACUMULADOR (un acumulador es un tipo
especial de variable que se incrementa o decrementa con valores variables
durante la ejecución del programa)

Hemos dado el nombre de suma a nuestro acumulador. Cada ciclo que se repita
la estructura repetitiva, la variable suma se incrementa con el contenido ingresado
en la variable valor.

La prueba del diagrama se realiza dándole valores a las variables:

valor suma x promedio

0 0

(Antes de entrar a la estructura repetitiva estos son los valores).

5 5 1

16 21 2

7 28 3

10 38 4

2 40 5

20 60 6

5 65 7

5 70 8

10 80 9

2 82 10

8 90 11

50
PROGRAMACIÓN I
Este es un seguimiento del diagrama planteado. Los números que toma la variable
valor dependerá de qué cifras cargue el operador durante la ejecución del
programa.

El promedio se calcula al salir de la estructura repetitiva (es decir primero


sumamos los 10 valores ingresados y luego los dividimos por 10)

Hay que tener en cuenta que cuando en la variable valor se carga el primer valor
(en este ejemplo 5) al cargarse el segundo valor (16) el valor anterior 5 se pierde,
por ello la necesidad de ir almacenando en la variable suma los valores
ingresados.

Problema 4:

Una planta que fabrica perfiles de hierro posee un lote de n piezas.


Confeccionar un programa que pida ingresar por teclado la cantidad de piezas a
procesar y luego ingrese la longitud de cada perfil; sabiendo que la pieza cuya
longitud esté comprendida en el rango de 1,20 y 1,30 son aptas. Imprimir por
pantalla la cantidad de piezas aptas que hay en el lote.

Diagrama de flujo:

51
PROGRAMACIÓN I

Podemos observar que dentro de una estructura repetitiva puede haber


estructuras condicionales (inclusive puede haber otras estructuras repetitivas que
veremos más adelante)

En este problema hay que cargar inicialmente la cantidad de piezas a ingresar


( n ), seguidamente se cargan n valores de largos de piezas.
Cada vez que ingresamos un largo de pieza (largo) verificamos si es una medida

52
PROGRAMACIÓN I
correcta (debe estar entre 1.20 y 1.30 el largo para que sea correcta), en caso de
ser correcta la CONTAMOS (incrementamos la variable cantidad en 1)

Al contador cantidad lo inicializamos en cero porque inicialmente no se ha cargado


ningún largo de medida.
Cuando salimos de la estructura repetitiva porque se han cargado n largos de
piezas mostramos por pantalla el contador cantidad (que representa la cantidad de
piezas aptas)

En este problema tenemos dos CONTADORES:

x (Cuenta la cantidad de piezas cargadas hasta el momento)


cantidad(Cuenta los perfiles de hierro aptos)
Problemas propuestos

Ha llegado la parte fundamental, que es el momento donde uno desarrolla


individualmente un algoritmo para la resolución de problemas.

El tiempo a dedicar a esta sección EJERCICIOS PROPUESTOS debe ser mucho


mayor que el empleado a la sección de EJERCICIOS RESUELTOS.
La experiencia dice que debemos dedicar el 80% del tiempo a la resolución
individual de problemas y el otro 20% al análisis y codificación de problemas ya
resueltos por otras personas.
Es de vital importancia para llegar a ser un buen PROGRAMADOR poder resolver
problemas en forma individual.

1. Escribir un programa que solicite ingresar 10 notas de alumnos y nos


informe cuántos tienen notas mayores o iguales a 51 y cuántos menores.

2. Se ingresan un conjunto de n alturas de personas por teclado. Mostrar la


altura promedio de las personas.

3. En una empresa trabajan n empleados cuyos sueldos oscilan entre $100 y


$500, realizar un programa que lea los sueldos que cobra cada empleado e
informe cuántos empleados cobran entre $100 y $300 y cuántos cobran
más de $300. Además, el programa deberá informar el importe que gasta la
empresa en sueldos al personal.

53
PROGRAMACIÓN I
4. Realizar un programa que imprima 25 términos de la serie 11 - 22 - 33 - 44,
etc. (No se ingresan valores por teclado)

5. Mostrar los múltiplos de 8 hasta el valor 500. Debe aparecer en pantalla 8 -


16 - 24, etc.

6. Realizar un programa que permita cargar dos listas de 15 valores cada una.
Informar con un mensaje cuál de las dos listas tiene un valor acumulado
mayor (mensajes "Lista 1 mayor", "Lista 2 mayor", "Listas iguales")
Tener en cuenta que puede haber dos o más estructuras repetitivas en un
algoritmo.

7. Desarrollar un programa que permita cargar n números enteros y luego nos


informe cuántos valores fueron pares y cuántos impares.
Emplear el operador ?%? en la condición de la estructura condicional:

si (valor%2==0) //Si la condición da verdadero luego es par.

54
PROGRAMACIÓN I
1.3.2. Estructura Repetitiva For

Cualquier problema que requiera una estructura repetitiva se puede resolver


empleando la estructura while. Pero hay otra estructura repetitiva cuyo planteo es
más sencillo en ciertas situaciones.

En general, la estructura for se usa en aquellas situaciones en las cuales


CONOCEMOS la cantidad de veces que queremos que se ejecute el bloque de
instrucciones. Ejemplo: cargar 10 números, ingresar 5 notas de alumnos, etc.
Conocemos de antemano la cantidad de veces que queremos que el bloque se
repita. Veremos, sin embargo, que en el lenguaje Java la estructura for puede
usarse en cualquier situación repetitiva, porque en última instancia no es otra cosa
que una estructura while generalizada.

Representación gráfica:

En su forma más típica y básica, esta estructura requiere una variable entera que
cumple la función de un CONTADOR de vueltas. En la sección indicada como
"inicialización contador", se suele colocar el nombre de la variable que hará de
contador, asignándole a dicha variable un valor inicial. En la sección de
"condición" se coloca la condición que deberá ser verdadera para que el ciclo
continúe (en caso de un falso, el ciclo se detendrá). Y finalmente, en la sección de
"incremento contador" se coloca una instrucción que permite modificar el valor de
la variable que hace de contador (para permitir que alguna vez la condición sea
falsa)

55
PROGRAMACIÓN I
Cuando el ciclo comienza, antes de dar la primera vuelta, la variable del for toma
el valor indicado en la sección de de "inicialización contador". Inmediatamente se
verifica, en forma automática, si la condición es verdadera. En caso de serlo se
ejecuta el bloque de operaciones del ciclo, y al finalizar el mismo se ejecuta la
instrucción que se haya colocado en la tercera sección.

Seguidamente, se vuelve a controlar el valor de la condición, y así prosigue hasta


que dicha condición entregue un falso.

Si conocemos la cantidad de veces que se repite el bloque es muy sencillo


emplear un for, por ejemplo, si queremos que se repita 50 veces el bloque de
instrucciones puede hacerse así:

La variable del for puede tener cualquier nombre. En este ejemplo se la ha


definido con el nombre f.
Analicemos el ejemplo:

● La variable f toma inicialmente el valor 1.

● Se controla automáticamente el valor de la condición: como f vale 1 y esto

es menor igual que 50, la condición da verdadero.

● Como la condición fue verdadera, se ejecutan la/s operación/es.

● Al finalizar de ejecutarlas, se retorna a la instrucción f++, por lo que la

variable f se incrementa en uno.

56
PROGRAMACIÓN I
● Se vuelve a controlar (automáticamente) si f es menor o igual a 50.

Como ahora su valor es 2, se ejecuta nuevamente el bloque de instrucciones e


incrementa nuevamente la variable del for al terminar el mismo.
- El proceso se repetirá hasta que la variable f sea incrementada al valor 51.
En este momento la condición será falsa, y el ciclo se detendrá.

La variable f PUEDE ser modificada dentro del bloque de operaciones del for,
aunque esto podría causar problemas de lógica si el programador es inexperto.

La variable f puede ser inicializada en cualquier valor y finalizar en cualquier valor.


Además, no es obligatorio que la instrucción de modificación sea un incremento
del tipo contador (f++).
Cualquier instrucción que modifique el valor de la variable es válida. Si por ejemplo
se escribe f=f+2 en lugar de f++, el valor de f será incrementado de a 2 en cada
vuelta, y no de a 1. En este caso, esto significará que el ciclo no efectuará las 50
vueltas sino sólo 25.

Problema 1:

Realizar un programa que imprima en pantalla los números del 1 al 100.

Diagrama de flujo:

57
PROGRAMACIÓN I
Podemos observar y comparar con el problema realizado con el while. Con la
estructura while el CONTADOR x sirve para contar las vueltas. Con el for el
CONTADOR f cumple dicha función.

Inicialmente f vale 1 y como no es superior a 100 se ejecuta el bloque, imprimimos


el contenido de f, al finalizar el bloque repetitivo se incrementa la variable f en 1,
como 2 no es superior a 100 se repite el bloque de instrucciones.

Cuando la variable del for llega a 101 sale de la estructura repetitiva y continúa la
ejecución del algoritmo que se indica después del círculo.

La variable f (o como sea que se decida llamarla) debe estar definida como una
variable más.

Problema 2:

: Desarrollar un programa que permita la carga de 10


valores por teclado y nos muestre posteriormente la
suma de los valores ingresados y su promedio. Este
problema ya lo desarrollamos, lo resolveremos
empleando la estructura for.

Diagrama de flujo:

En este caso, a la variable del for (f) sólo se la


requiere para que se repita el bloque de
instrucciones 10 veces.

Programa:

58
PROGRAMACIÓN I
El problema requiere que se carguen 10 valores y se sumen los mismos.
Tener en cuenta encerrar entre llaves bloque de instrucciones a repetir dentro del
for.
El promedio se calcula fuera del for luego de haber cargado los 10 valores.

Problema 3:

Escribir un programa que lea 10 notas de alumnos y nos informe cuántos tienen
notas mayores o iguales a 7 y cuántos menores.

Para resolver este problema se requieren tres contadores:

aprobados (Cuenta la cantidad de alumnos aprobados)


reprobados (Cuenta la cantidad de reprobados)
f (es el contador del for)
Dentro de la estructura repetitiva debemos hacer la carga de la variable nota y
verificar con una estructura condicional si el contenido de la variable nota es
mayor o igual a 7 para incrementar el contador aprobados, en caso de que la
condición retorne falso debemos incrementar la variable reprobados.

Diagrama de flujo:

59
PROGRAMACIÓN I

Los contadores aprobados y reprobados deben imprimirse FUERA de la estructura


repetitiva.
Es fundamental inicializar los contadores aprobados y reprobados en cero antes
de entrar a la estructura for.
Importante: Un error común es inicializar los contadores dentro de la estructura
repetitiva. En caso de hacer esto los contadores se fijan en cero en cada ciclo del
for, por lo que al finalizar el for como máximo el contador puede tener el valor 1.

60
PROGRAMACIÓN I
Problema 4:

Escribir un programa que lea 10 números enteros y luego muestre cuántos valores
ingresados fueron múltiplos de 3 y cuántos de 5. Debemos tener en cuenta que
hay números que son múltiplos de 3 y de 5 a la vez.

Diagrama de flujo:

61
PROGRAMACIÓN I

Tengamos en cuenta que el operador matemático % retorna el resto de dividir un


valor por otro, en este caso: valor%3 retorna el resto de dividir el valor que

62
PROGRAMACIÓN I
ingresamos por teclado, por tres.
Veamos: si ingresamos 6 el resto de dividirlo por 3 es 0, si ingresamos 12 el resto
de dividirlo por 3 es 0. Generalizando: cuando el resto de dividir por 3 al valor que
ingresamos por teclado es cero, se trata de un múltiplo de dicho valor.

Ahora bien ¿por qué no hemos dispuesto una estructura if anidada? Porque hay
valores que son múltiplos de 3 y de 5 a la vez. Por lo tanto con if anidados no
podríamos analizar los dos casos.
Es importante darse cuenta cuando conviene emplear if anidados y cuando no
debe emplearse.

Problema 5:

Escribir un programa que lea n números enteros y calcule la cantidad de valores


mayores o iguales a 1000.
Este tipo de problemas también se puede resolver empleando la estructura
repetitiva for. Lo primero que se hace es cargar una variable que indique la
cantidad de valores a ingresar.
Dicha variable se carga antes de
entrar a la estructura repetitiva
for.
La estructura for permite que el
valor inicial o final dependa de
una variable cargada
previamente por teclado.

Diagrama de flujo:

Tenemos un contador llamado


cantidad y f que es el contador
del for.
La variable entera n se carga
previo al inicio del for, por lo que

63
PROGRAMACIÓN I
podemos fijar el valor final del for con la variable n.
Por ejemplo si el operador carga 5 en n la estructura repetitiva for se ejecutará 5
veces.
La variable valor se ingresa dentro de la estructura repetitiva, y se verifica si el
valor de la misma es mayor o igual a 1000, en dicho caso se incrementa en uno el
contador cantidad.
Fuera de la estructura repetitiva imprimimos el contador cantidad que tiene
almacenado la cantidad de valores ingresados mayores o iguales a 1000.

Problemas propuestos

Ha llegado nuevamente la parte fundamental, que es el momento donde uno


desarrolla individualmente un algoritmo para la resolución de un problema.

1. Confeccionar un programa que lea n pares de datos, cada par de datos


corresponde a la medida de la base y la altura de un triángulo. El programa
deberá informar:
a) De cada triángulo la medida de su base, su altura y su superficie.
b) La cantidad de triángulos cuya superficie es mayor a 12.

2. Desarrollar un programa que solicite la carga de 10 números e imprima la


suma de los últimos 5 valores ingresados.

3. Desarrollar un programa que muestre la tabla de multiplicar del 5 (del 5 al


50)

4. Confeccionar un programa que permita ingresar un valor del 1 al 10 y nos


muestre la tabla de multiplicar del mismo (los primeros 12 términos)
Ejemplo: Si ingreso 3 deberá aparecer en pantalla los valores 3, 6, 9, hasta
el 36.

64
PROGRAMACIÓN I

5. Realizar un programa que lea los lados de n triángulos, e informar:


a) De cada uno de ellos, qué tipo de triángulo es: equilátero (tres lados
iguales), isósceles (dos lados iguales), o escaleno (ningún lado igual)
b) Cantidad de triángulos de cada tipo.
c) Tipo de triángulo que posee menor cantidad.

6. Escribir un programa que pida ingresar coordenadas (x,y) que representan


puntos en el plano.
Informar cuántos puntos se han ingresado en el primer, segundo, tercer y
cuarto cuadrante. Al comenzar el programa se pide que se ingrese la
cantidad de puntos a procesar.

7. Se realiza la carga de 10 valores enteros por teclado. Se desea conocer:


a) La cantidad de valores ingresados negativos.
b) La cantidad de valores ingresados positivos.
c) La cantidad de múltiplos de 15.
d) El valor acumulado de los números ingresados que son pares.

8. Se cuenta con la siguiente información:


Las edades de 50 estudiantes del turno mañana.
Las edades de 60 estudiantes del turno tarde.
Las edades de 110 estudiantes del turno noche.
Las edades de cada estudiante deben ingresarse por teclado.
a) Obtener el promedio de las edades de cada turno (tres promedios)
b) Imprimir dichos promedios (promedio de cada turno)
c) Mostrar por pantalla un mensaje que indique cual de los tres turnos tiene
un promedio de edades mayor.

1.3.3. Estructura repetitiva do while

La estructura do while es otra estructura repetitiva, la cual ejecuta al menos una


vez su bloque repetitivo, a diferencia del while o del for que podían no ejecutar el
bloque.

65
PROGRAMACIÓN I
Esta estructura repetitiva se utiliza cuando conocemos de antemano que por lo
menos una vez se ejecutará el bloque repetitivo.
La condición de la estructura está abajo del bloque a repetir, a diferencia del while
o del for que está en la parte superior.

Representación gráfica:

El bloque de operaciones se repite MIENTRAS que la condición sea Verdadera.


Si la condición retorna Falso el ciclo se detiene. En Java, todos los ciclos repiten
por verdadero y cortan por falso.
Es importante analizar y ver que las operaciones se ejecutan como mínimo una
vez.

Problema 1:

Escribir un programa que solicite la carga de un número entre 0 y 999, y nos


muestre un mensaje de cuántos dígitos tiene el mismo. Finalizar el programa
cuando se cargue el valor 0.

Diagrama de flujo:

66
PROGRAMACIÓN I

No hay que confundir los rombos de las estructuras condicionales con los de las
estructuras repetitivas do while.

En este problema por lo menos se carga un valor. Si se carga un valor mayor o


igual a 100 se trata de un número de tres cifras, si es mayor o igual a 10 se trata
de un valor de dos dígitos, en caso contrario se trata de un valor de un dígito. Este
bloque se repite hasta que se ingresa en la variable valor el número 0 con lo que
la condición de la estructura do while retorna falso y sale del bloque repetitivo
finalizando el programa.

Programa:

67
PROGRAMACIÓN I

Problema 2:

Escribir un programa que solicite la carga de números por teclado, obtener su


promedio. Finalizar la carga de valores cuando se cargue el valor 0.

Cuando la finalización depende de algún valor ingresado por el operador conviene


el empleo de la estructura do while, por lo menos se cargará un valor (en el caso
más extremo se carga 0, que indica la finalización de la carga de valores)

Diagrama de flujo:

68
PROGRAMACIÓN I

Es importante analizar este diagrama de flujo.


Definimos un contador cant que cuenta la cantidad de valores ingresados por el
operador (no lo incrementa si ingresamos 0)

69
PROGRAMACIÓN I
El valor 0 no es parte de la serie de valores que se deben sumar.
Definimos el acumulador suma que almacena todos los valores ingresados por
teclado.
La estructura repetitiva do while se repite hasta que ingresamos el valor 0. Con
dicho valor la condición del ciclo retorna falso y continúa con el flujo del diagrama.
Disponemos por último una estructura condicional para el caso que el operador
cargue únicamente un 0 y por lo tanto no podemos calcular el promedio ya que no
existe la división por 0.
En caso que el contador cant tenga un valor distinto a 0 el promedio se obtiene
dividiendo el acumulador suma por el contador cant que tiene la cantidad de
valores ingresados antes de introducir el 0.

El contador cant DEBE inicializarse antes del ciclo, lo mismo que el acumulador
suma. El promedio se calcula siempre y cuando el contador cant sea distinto a 0.

Problema 3:

Realizar un programa que permita ingresar el peso (en kilogramos) de piezas. El


proceso termina cuando ingresamos el valor 0. Se debe informar:
a) Cuántas piezas tienen un peso entre 9.8 Kg. y 10.2 Kg.?, cuántas con más de
10.2 Kg.? y cuántas con menos de 9.8 Kg.?
b) La cantidad total de piezas procesadas.

Diagrama de flujo:

70
PROGRAMACIÓN I

Los tres contadores cont1, cont2, y cont3 se inicializan en 0 antes de entrar a la


estructura repetitiva.
A la variable suma no se la inicializa en 0 porque no es un acumulador, sino que
guarda la suma del contenido de las variables cont1, cont2 y cont3.

71
PROGRAMACIÓN I
La estructura se repite hasta que se ingresa el valor 0 en la variable peso. Este
valor no se lo considera un peso menor a 9.8 Kg., sino que indica que ha
finalizado la carga de valores por teclado.

Problemas propuestos

1. Realizar un programa que acumule (sume) valores ingresados por teclado


hasta ingresar el 9999 (no sumar dicho valor, indica que ha finalizado la
carga). Imprimir el valor acumulado e informar si dicho valor es cero, mayor
a cero o menor a cero.

2. En un banco se procesan datos de las cuentas corrientes de sus clientes.


De cada cuenta corriente se conoce: número de cuenta y saldo actual. El
ingreso de datos debe finalizar al ingresar un valor negativo en el número
de cuenta.
Se pide confeccionar un programa que lea los datos de las cuentas
corrientes e informe:
a) De cada cuenta: número de cuenta y estado de la cuenta según su
saldo, sabiendo que:

Estado de la cuenta 'Acreedor' si el saldo es >0.


'Deudor' si el saldo es <0.
'Nulo' si el saldo es =0.
b) La suma total de los saldos acreedores.

72
PROGRAMACIÓN I
3. TEMA3. LENGUAJE DE PROGRAMACIÓN C SHARP
2.1. Introducción al Lenguaje de Programación C#

C#1 (pronunciado si sharp en inglés) es un "lenguaje de programación" orientado a


objetos desarrollado y estandarizado por Microsoft como parte de su
plataforma .NET.

Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la


plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros
lenguajes.

El nombre C Sharp fue inspirado por la notación musical, donde '#' (sostenido, en
inglés sharp) indica que la nota (C es la nota do en inglés) es un semitono más
alta, sugiriendo que C# es superior a C/C++. Además, el signo '#' se compone de
cuatro signos '+' pegados.2

Historia

Durante el desarrollo de la plataforma .NET, las bibliotecas de clases fueron


escritas originalmente usando un sistema de código gestionado llamado Simple
Managed C (SMC). En enero de 1999, Anders Hejlsberg formó un equipo con la
misión de desarrollar un nuevo lenguaje de programación llamado Cool (Lenguaje
C orientado a objetos). Este nombre tuvo que ser cambiado debido a problemas
de marca, pasando a llamarse C#.3 La biblioteca de clases de la plataforma .NET
fue migrada entonces al nuevo lenguaje.

Hejlsberg lideró el proyecto de desarrollo de C#. Anteriormente, ya había


participado en el desarrollo de otros lenguajes como Turbo Pascal, Delphi y J++.

Tipos de datos

C# contiene veinte categorías generales de tipos de datos integrados: tipos de


valor y tipos de referencia. El término tipo de valor indica que esos tipos
contienen directamente sus valores.

73
PROGRAMACIÓN I
Tipos para definir números enteros:

Tipo de datos de enteros


Tipo Equivalente BCL Tamaño Rango Significado
8-bit (1- Entero sin
byte System.Byte 0 a 255
byte) signo
8-bit (1- Entero con
sbyte System.SByte -128 a 127
byte) signo
16-bit (2- Entero corto
short System.Int16 -32.768 a 32.767
byte) con signo
16-bit (2- Entero corto
ushort System.UInt16 0 a 65.535
byte) sin signo
32-bit (4- Entero medio
int System.Int32 -2.147.483.648 a 2.147.483.647
byte) con signo
32-bit (4- Entero medio
uint System.UInt32 0 a 4.294.967.295
byte) sin signo
64-bit (8- -9.223.372.036.854.775.808 a Entero largo
long System.Int64
byte) 9.223.372.036.854.775.807 con signo
64-bit (8- Entero largo
ulong System.UInt64 0 a 18.446.744.073.709.551.615
byte) sin signo

Los tipos de coma flotante pueden representar números con componentes


fraccionales. Existen dos clases de tipos de coma flotante: float y double. El
tipo double es el más utilizado porque muchas funciones matemáticas de la
biblioteca de clases de C# usan valores double. Quizá, el tipo de coma flotante
más interesante de C# es decimal, dirigido al uso de cálculos monetarios. La
aritmética de coma flotante normal está sujeta a una variedad de errores de
redondeo cuando se aplica a valores decimales. El tipo decimal elimina estos
errores y puede representar hasta 28 lugares decimales.

74
PROGRAMACIÓN I
Tipo de datos de coma flotante
Equivalente BC Tamañ Significad
Tipo Rango
L o o
Coma
32-bit
float System.Single ±1.401298E45 a ±3.402823E+38 flotante
(4-byte)
corto
Coma
64-bit
double System.Double ±4.94065645841246E324 a flotante
(8-byte)
largo
128-bit Coma
decimal System.Decimal (16- 7.9228162514264337593543950335 a flotante
byte) monetario

Los caracteres en C# no tienen un tamaño de 8 bits como en muchos otros


lenguajes de programación, sino que usan un tamaño de 16 bits. Este tipo de dato
se llama char y utiliza la codificación Unicode. No existen conversiones
automáticas de tipo entero a char.

Tipo de datos de caracteres

Tipo Equivalente BCL Tamaño Rango Significado

16-bit (2- Carácter


char System.Char '\u0000' a '\uFFFF'
byte) unicode

Para los tipos de datos lógicos no existen conversiones automáticas de tipo entero
a bool.

Tipo de datos lógicos

Equivalente BC
Tipo Tamaño Rango Significado
L

bool System.Boolean 8-bit (1-byte) true o false Verdadero o falso

Literales

En ocasiones, resulta más sencillo usar un sistema numérico en base 16 en lugar


de 10, para tal caso C# permite especificar números enteros en
formato hexadecimal, y se define anteponiendo 0x, por ejemplo: 0xFF, que
equivale a 255 en decimal.

75
PROGRAMACIÓN I
C# tiene caracteres denominados secuencias de escape para facilitar la escritura
con el teclado de símbolos que carecen de representación visual.

C#, al igual que C++, define un tipo de cadena de caracteres. Dentro de la cadena
de caracteres se pueden usar secuencias de escape. Una cadena de caracteres
puede iniciarse con el símbolo @ seguido por una cadena entre comillas ("), en tal
caso, las secuencias de escape no tienen efecto, y además la cadena puede
ocupar dos o más líneas.

Enteros
decimal 245, [0..9]+
hexadecimal 0xF5, 0x[0..9, A..F, a..f]+
entero largo 12L
entero largo sin signo 654UL
Coma flotante
float 23.5F, 23.5f; 1.72E3F, 1.72E3f, 1.72e3F, 1.72e3f
double 23.5, 23.5D, 23.5d, 1.72E3, 1.72E3D
decimal 9.95M
Caracteres
char 'a', 'Z', '\u0231'
Cadenas
String "Hello, world"; "C:\\Windows\\", @"C:\Windows\"
Secuencias de escape
Alerta (timbre) \a
Retroceso \b
Avance de página \f
Nueva línea \n
Retorno de carro \r
Tabulador horizontal \t
Tabulador vertical \v
Nulo \0
Comilla simple \'
Comilla doble \"
Barra inversa \\

76
PROGRAMACIÓN I
Variables

Las variables son identificadores asociados a valores. Se declaran indicando el


tipo de dato que almacenará y su identificador.

Un identificador puede:

● empezar por "_".

● contener caracteres Unicode en mayúsculas y minúsculas (sensible a


mayúsculas y minúsculas).

Un identificador no puede:

● empezar por un número.

● empezar por un símbolo, ni aunque sea una palabra clave.

● contener más de 511 caracteres.

Declarar una variable:

int miNumero; // Declaramos la variable, pero no la inicializamos con ningún


valor.

Para asignar un valor a una variable, se indica el identificador de la misma,


seguido del símbolo igual (=) y el valor que queremos que almacene:

miNumero = 5; // Asignamos el valor '5' a la variable creada.

Se puede declarar y asignar un valor al mismo tiempo:

int miNumero = 5; // Declaramos la variable, y asignamos el valor '5'.

77
PROGRAMACIÓN I
También puedes declarar una variable sin especificar el tipo de dato, utilizando el
mecanismo de inferencia mediante la palabra clave var donde el compilador
determina el tipo de dato que se le asignará a la variable y sólo es permitida para
variables locales, no para parámetros o datos miembro.

var cadena = "Esto es un string";


var numero1 = 5;
var numero2 = 4.5;
var numero3 = 4.5D;
var objeto = new Object();
var resultado = Math.Pow(5, 2);

Constantes

Las constantes son valores inmutables, y por tanto no se pueden cambiar.

const

Cuando se declara una constante con la palabra clave const, también se debe
asignar el valor. Tras esto, la constante queda bloqueada y no se puede cambiar.
Son implícitamente estáticas (static).

const double PI = 3.1415;

78
PROGRAMACIÓN I
Operadores

Categoría Operadores
Aritméticos +-*/%
Lógicos ! && ||
Concatenación +
Incremento, decremento ++ --
Desplazamiento << >>
Relacional == != < > <= >=
Asignación = ^= <<= >>=
Acceso a miembro .
Indexación []
Conversión ()
Condicional ? : ??
Creación de objeto new
Información de tipo as is sizeof typeof

● Los operadores aritméticos funcionan igual que en C y C++.

● El resultado de los operadores relacionales y lógicos es un valor de tipo bool.

● Los operadores de cortocircuito evalúan el segundo operando solo cuando es


necesario.

● Los operadores a nivel de bits no se pueden aplicar a


tipos bool, float, double o decimal.

79
PROGRAMACIÓN I
Instrucciones de control

if-else

if (i == 2)

// ...

else if (i == 3)

// ...

else

// ...

switch
switch (i)

case 1:

...

break;

case 2:

case 3:

...

break;

80
PROGRAMACIÓN I
default:

...

break;

for
for (int i = 0; i < 10; i++)

// ...

81
PROGRAMACIÓN I
while

i=1;

while (i < 10)

// ...

do-while

do

// ...

} while (true);

foreach

foreach (char c in charList)

// ...

● Las instrucciones if-else, for, while, do-


while, switch, return, break, continue son, básicamente, iguales que en C, C++
y Java.

82
PROGRAMACIÓN I
● La instrucción foreach, al igual que en Java, realiza un ciclo a través de los
elementos de una matriz o colección. En este ciclo se recorre la colección y la
variable recibe un elemento de dicha colección en cada iteración.

● La instrucción goto se sigue utilizando en C# a pesar de la polémica sobre su


uso.
2.2. Microsoft Visual Studio

Es un entorno de desarrollo integrado (IDE, por sus siglas en inglés)


para Windows, Linux y macOS. Es compatible con múltiples lenguajes de
programación, tales como C++, C#, Visual
Basic .NET, F#, Java, Python, Ruby y PHP, al igual que entornos de desarrollo
web, como ASP.NET MVC, Django, etc.

Visual Studio permite a los desarrolladores crear sitios y aplicaciones web, así
como servicios web en cualquier entorno compatible con la plataforma .NET (a
partir de la versión .NET 2002). Así, se pueden crear aplicaciones que se
comuniquen entre estaciones de trabajo, páginas web, dispositivos móviles,
dispositivos embebidos y videoconsolas, entre otros.

Normalmente, un IDE consiste de un editor de código fuente, herramientas de


construcción automáticas y un depurador. La mayoría de los IDE tienen auto-
completado inteligente de código (IntelliSense). Algunos IDE contienen
un compilador, un intérprete, o ambos, tales como NetBeans y Eclipse; otros no,
tales como SharpDevelop y Lazarus.

2.3. Crear y Ejecutar un proyecto en lenguaje de Programación C#

1. Inicie Visual Studio.


2. En la barra de menús, elija Archivo, Nuevo, Proyecto.

3. Aparece el cuadro de diálogo Nuevo proyecto .


4. Expanda Instalado, Plantillas, Visual C# y, luego, elija Aplicación de
consola.

83
PROGRAMACIÓN I
5. Clic en examinar para seleccionar la dirección donde desea crear el
proyecto
6. En el cuadro Nombre, escriba un nombre para el proyecto y, después, elija
el botón Aceptar.

7. El proyecto nuevo aparece en el Explorador de soluciones.


8. Si Program.cs no está abierto en el Editor de código, abra el menú
contextual de Program.csen el Explorador de soluciones y elija Ver
código.

1 2

4 3

84
Ejecutar programa
PROGRAMACIÓN I
Ojo cada sentencia en C# termina con un
punto y coma

2.4. Explicación de la Estructura de un Programa en C#

● using System

● La directiva using System nos permitirá usar miembros de este espacio de

nombres sin poner la palabra System delante.

● Si no se escribe esto sería necesario escribir la instrucción:

85
PROGRAMACIÓN I

Al ejecutar el programa con F5 o


pulsando el botón ejecutar, escribe
en pantalla el mensaje “Mi primer
programa”.

Al presionar cualquier tecla termina la


ejecución del programa

2.5. using System, Namespace (espacio de nombres)

Los espacios de nombres tienen las propiedades siguientes:

● Organizan proyectos de código de gran tamaño.

● Se delimitan mediante el operador ..

● La directiva using obvia la necesidad de especificar el nombre del espacio de


nombres para cada clase.

● El espacio de nombres global es el espacio de nombres


"raíz": global::System siempre hará referencia al espacio de
nombres System de .NET.
2.6. Console
Es una clase que no existe en el espacio de nombres global, sino en el espacio de
nombres System.
2.7. WriteLine
Es un método de la clase Consola, que sirve para imprimir en la pantalla el
mensaje que deseemos, en este caso “Primer Programa”.

86
PROGRAMACIÓN I
2.8. ReadLine
Es un método de la clase Consola, sirve para leer un dato desde teclado y ese
valor leído es string. Ejemplo: si ingresamos 5, ese valor es “5”, quiere decir string
o texto. Por lo tanto si lo vamos a recibir en una variable de tipo entero, ese valor
“5” se debe convertir a entero.
2.9. ReadKey
Es un método que sirve para pausar para ver el resultado
2.10. Conversiones de tipos de datos en C#
La conversión de datos se usa en C# de manera explícita,

En c# siempre se ingresan todos los valores con formato texto por lo que se hace
necesaria la conversión de tipos, ejemplo:

Nota: cuando se captura datos por medio de ReadLine, los datos son de tipo
String, por lo que tenemos que convertir esos datos a números, para ello se hace
uso de parse.

Otra forma es

Definir una variable y Asignar un Valor Int a=10;


Definir una variable y leer un valor

87
PROGRAMACIÓN I

Definir una variable nombre

Imprime el mensaje en pantalla

Lee el valor ingresado en la variable nombre

Concatena con el signo más a la palabra “Hola” lo que tie


variable nombre y luego vuelve a concatenar con la palab
“Bienvenido a C#”.
Pausa para ver el resultado Muestra por pantalla “Hola José Bienvenido a C#”.

Ejemplos

88
PROGRAMACIÓN I

89
PROGRAMACIÓN I

90
PROGRAMACIÓN I

91
PROGRAMACIÓN I

2.11. Clase Math


En muchas ocasiones en nuestras aplicaciones, necesitamos realizar ciertas
operaciones matemáticas, como calcular el seno de un ángulo, hallar la raíz
cuadrada de un número, elevar un numero a un determinado exponente y muchas
otras operaciones matemáticas. para esto Visual Studio incluye la clase math, la
cual nos brindan todas estas funcionalidades.

Sintaxis. - Para llamar a sus métodos simplemente se pone la palabra math,


punto y la operación que queremos realizar.

Algunas Funciones

92
PROGRAMACIÓN I

Ejemplos

ceil(), floor() y round() redondean un número con parte decimal


proporcionado; ceil()redondea hacia arriba, floor() hacia abajo, y round() hacia el
natural más cercano por arriba o por abajo:

93
PROGRAMACIÓN I
4. CREANDO E INVOCANDO MÉTODOS
3.1. Definición de Métodos
Un método no es más que un procedimiento o acción escrito dentro de una
clase y se compone de datos y un comportamiento y que puede ser reutilizado en
cualquier clase.

Esta es la sintaxis común para escribir un método:

[modificador de acceso] <tipo de retorno> <nombre>([parámetros])

[implementación]

Las partes marcadas con [] son opcionales y las que están entre <> son
necesarias:

3.2. Modificadores de Acceso


modificador de acceso, es una palabra reservada que especifica cuales de los
otros objetos tendrán acceso al método, puede ser:

● public. Todos tienen acceso.

● protected. Solo las clases derivadas tienen acceso.

● internal. Solo clases contenidas en el mismo ensamblado tienen acceso.

● private. Solo la clase que lo define tiene acceso él.

Si se omite, el valor por default es private.

94
PROGRAMACIÓN I
Además, también podemos añadir el modificador static para especificar que un
método debe ser llamado desde la clase misma, sin necesidad de crear una
instancia de la clase.

3.3. Tipo de Retorno


Tipo de retorno, se usa para declarar si el método retornará algo como parte de
su ejecución. Los valores posibles pueden ser muchos
(int,double,float,decimal,char,string,date,etc.), y dependen de la lógica del negocio.
Un método puede regresar tipos por valor o referencia, pero solo puede retornar
un solo tipo. En caso de que no exista necesidad de regresar algún valor,
debemos escribir void.

3.4. Nombre del método

Nombre, esta es una parte esencial de la definición de un método. El nombre es


un identificador que no debe comenzar por un número ni contener caracteres que
no sean alfanuméricos o guiones bajos.
Por convención, en C# los nombres de método comienzan con mayúscula, aunque
tú puedes escribirlos como quieras.

3.5. Lista de Parámetros

lista de parámetros, los métodos pueden recibir información del objeto que los
llama a través de los parámetros, la lista de parámetros está definida por el
método mediante la especificación del tipo de dato y el identificador de este, si es
necesario que el método reciba más de un parámetro estos se separan por una
coma.

3.6. Implementación

implementación, es un conjunto de sentencias que definen el comportamiento del


método.

Ejemplos

95
PROGRAMACIÓN I
Uno de los más grandes ejemplos de métodos es el método Main, que es el punto
de entrada de cualquier programa escrito en este lenguaje. Por ejemplo:

Main:

public static void Main(string[] args) ...

Que especifica que:

● el método Main es público

● no necesitamos instanciar la clase para llamarlo

● no regresa ningún valor

● recibe un arreglo de cadenas como argumento

En C# las subrutinas se conocen como métodos, se codifican como parte de una


clase y se clasifican en

96
PROGRAMACIÓN I

97
PROGRAMACIÓN I
Int: tipo de Resta: nombre recibe dos parámetros
dato a devolver del método a y b de tipo entero

No lleva el modificador de acceso, por lo


tanto, es private, quiere decir que este
método restar, solo puede ser usado desde
la misma clase.
Retorna: a + b

Llamada a un método

Llamamos desde el botón btnRestar en el evento click

Se lo asignamos a una variable resul de tipo entero lo que


retorna el método resta que recibe como parámetro a y b

Método Divide

Devuelve un tipo double, tiene por nombre Divide, los parámetros son a y b,
ambos del tipo double, y el cuerpo del método es simplemente "return a/b;". Para
llamar a un método, debemos simplemente poner el nombre del método y sus
argumentos dentro de un paréntesis separado por comas. Para llamar al método
Divide declarado antes, simplemente debemos escribir Divide(8, 2); esos valores 8
y 2 podemos enviarle desde una variable cualquiera.

Escriba las partes del siguiente método

98
PROGRAMACIÓN I
Escriba como se llama la llamada al método divide desde botón btnDividir,
enviar los valores para sus parámetros desde un txtNumero1 y txtNumero2

99
PROGRAMACIÓN I
3.7. Pasando valores (Parámetros) a los métodos
La declaración formal de parámetros también define variables. Hay cuatro tipos de
parámetros: parámetros por valor, por referencia, parámetros de salida, y arreglos
de parámetros

Paso por valor

El paso de parámetros por valor es usado por defecto para pasar parámetros a
métodos. Cuando se pasa un parámetro por valor a un método realmente se está
pasando una copia de dicho parámetro, por lo que las modificaciones que le
hagamos al parámetro dentro del método no afectarán al valor del parámetro
original.

Llamada al método modificaVariable

Aunque el valor del parámetro a, haya sido modificado dentro del método, este
parámetro solamente tiene una copia del valor del parámetro que pasamos al
método; por lo que cuando imprimimos el valor del parámetro vemos que éste
parámetro ha mantenido su valor original.

Paso de Parámetros por Referencia

El paso de parámetros por referencia es la contraposición lógica al paso por valor.


En el paso por referencia no se realiza ninguna copia del objeto, sino que lo que
se le pasa al método es una referencia del objeto, por lo tanto cualquier

100
PROGRAMACIÓN I
modificación sobre el parámetro dentro de la función afectará al parámetro
original.

La palabra clave ref debe de ser usada tanto en la declaración formal del método
como como en la llamada.

Sumar dos valores y el resultado devolver en una variable por referencia, esta
variable debe inicializar en cero. el método sumaReferencia retornará el resultado
en su parámetro por referencia. Por lo tanto, no usa la palabra return y es un
void.

Llamada al método

como retorna vacío no le asignamos a una variable, el


valor retornado está en la variable r

101
PROGRAMACIÓN I
3.8. Modificadores public y static
El modificador public lo hemos utilizado anteriormente. Se puede utilizar en la
declaración de cualquier método o variable, y como es de esperar, produce el
efecto de que el campo afectado se vuelve público, esto es, se puede utilizar
desde otras clases.

Crear un proyecto con el nombre Metodos

Agregar una clase en dicho método con el nombre clsMetodos

Clic derecho en el proyecto->Agregar->clase, luego asigne un nombre

Escribir el método sumar dentro de la clase clsMetodos

Nombre del Proyecto

Método suma de la clase

Public: quiere decir que se puede acceder


Nombre de la clase desde cualquier clase
Static no necesita instanciar la clase clsMetodos
Int que el método retorna un entero
Suma nombre del método
Int a, int b son los parámetros del método

Llamada del método desde el formulario

Cuando el método es static se debe escribir el nombre de


la clase separado por punto luego el nombre del método

102
PROGRAMACIÓN I
Método que no estático

Llamada de un método que no es static desde el formulario

En este caso se debe instanciar un objeto de la clase clsMetodos se usa la


palabra reservada new, luego se escribe el objeto separado por punto y el nombre
del método

3.9. Sobrecarga de métodos

La sobrecarga de métodos consiste en poner varios métodos con el mismo


nombre en la misma clase, pero siempre que su lista de argumentos sea distinta.
Ojo, repito, siempre que su lista de argumentos sea distinta, es decir, no puede
haber dos métodos que se llamen igual con la misma lista de argumentos, aunque
devuelvan datos de distinto tipo. El compilador sabría a cuál de todas las
sobrecargas nos referimos por los argumentos que se le pasen en la llamada, pero
no sería capaz de determinar cuál de ellas debe ejecutar si tienen la misma lista
de argumentos.

int Suma(int x, int y)


{
return x + y;
}
int Suma(int x, int y, int z)
{
return x + y + z;
}

103
PROGRAMACIÓN I
3.10. Espacios de nombres.

Al igual que en un sistema operativo las carpetas ayudan a organizar los archivos
en un disco duro, en C# los espacios de nombres ayudan a organizar las clases.
De esta manera se evitan posibles conflictos en el caso de iguales nombres de
clases o métodos, pero de distintos fabricantes, programadores o incluso el mismo
Framework, ya que se diferencian entre ellos por el distinto espacio de nombres
en que están incluidos.

Según lo anterior, un espacio de nombres define un ámbito único que permite la


creación de tipos globalmente únicos reunidos en conjuntos en función de la labor
que desempeñen. Al igual que, por ejemplo, en nuestro disco duro tenemos una
carpeta que se llama 'Fotos' en la cual guardamos únicamente fotografías, en C#
crearemos nuestros propios espacios de nombres que contendrán clases que
realizarán tareas enfocadas a una misma problemática. Al igual que no se nos
ocurriría guardar documentos de texto en esa carpeta 'Fotos' del disco duro, pues
su localización sería un problema, tampoco se nos ocurrirá guardar clases en un
ámbito de espacio de nombres diferente al que por naturalidad le correspondería.
En el Framework, por ejemplo, el espacio de nombres 'System.IO' contiene los
elementos necesarios para el trabajo con archivos, y únicamente ese tipo de
elementos; evidentemente, los programadores de Microsoft no han incluido clases
de trabajo matemático en el espacio de nombres 'System.IO', porque de manera
natural no sería allí donde iríamos a buscarlas, sino al espacio de nombres
'System.Math'.

Hay que tener en cuenta que los espacios de nombres deben estar creados de
una manera jerárquica. Por ejemplo, dentro de nuestra carpeta del disco duro
'Fotos', tendremos otras subcarpetas que podrían ser 'Fotos de viajes', 'Fotos de
familia', etc. De la misma forma, el Framework posee espacios de nombres
creados con una jerarquía muy estricta, y todos tienen como espacio de nombre
original el 'System'. De él derivan, por ejemplo, 'System.IO', 'System.Windows',
'System.Windows.Forms', 'System.Web', 'System.Web.UI', etc.

104
PROGRAMACIÓN I
Para la creación de un espacio de nombres se utiliza la palabra 'namespace'. El
siguiente código fuente crea un espacio de nombres 'System' que empaqueta las
clases 'ClassA' y 'ClassB' y el espacio de nombres 'Windows', que a su vez
empaqueta el espacio de nombres 'Forms' que incluye las clases 'ClassC' y
'ClassD':

namespace System
{
class ClassA { }
class ClassB { }
namespace Windows
{
namespace Forms
{
class ClassC { }
class ClassD { }
}
}
}

Teniendo en cuenta que el espacio de nombres 'Windows' no tiene ninguna clase,


la simplificación lógica de lo anterior sería lo siguiente:

namespace System
{
class ClassA { }
class ClassB { }
namespace Windows.
Forms
{
class ClassC { }
class ClassD { }
}
}

En todos los ejemplos vistos hasta ahora, cuando invocábamos al método


'WriteLine' de la clase 'Console' lo hacíamos con la expresión completa
'System.Console.WriteLine', en la cual especificábamos el espacio de nombres en
el cual está incluida la clase 'Console' De la misma manera, en el ejempo anterior,
para invocar a la clase 'ClassA' lo haremos con la expresión 'System.ClassA', y

105
PROGRAMACIÓN I
para invocar a la clase 'ClassC' lo haremos con la expresión
'System.Windows.Forms.ClassC'.

Directriz 'using'.

Es muy elevado el número de clases contenidas en el Framework, por lo que sería


muy tedioso la escritura de las rutas completas de los espcios de nombres cada
vez que deseamos invocar un método de una clase. Para ello existe la directriz
'using', que actúa como una abreviación a la hora de las invocaciones.

using System;
public class Program
{
public static void Main()
{
Console.WriteLine("Usando directriz
'using'.");
Console.ReadKey();
}
}

Como ves, ahora en el memoento de la invocación de los métodos 'WriteLine' y


'ReadKey' ya no hemos incluido el espacio de nombres 'System' porque ya ha sido
incluido por la directriz 'using', y no será necesario para ninguna invocación de
todos y cada uno de los métodos contenidos en las clases pertenecientes al
espacio de nombres 'System'. Es un ahorro de trabajo considereable a la hora de
acceder a los elementos del Framework y, con el tiempo, cuando tus programas
sean muy extensos, será también un ahorro a la hora de invocar tus métodos
contenidos en tus propios espacios de nombres.

Además, es posible establecer tantas directrices 'using' como espacios de


nombres deseemos incluir:
106
PROGRAMACIÓN I
using System;
using System.IO;
public class Program
{
public static void Main()
{
Console.WriteLine("Usando directriz
'using'.");
Directory.CreateDirectory(@"C:\
CarpetaEspecial");
Console.ReadKey();
}
}

En este caso, similar al anterior, hemos incluido también el espacio de nombres


'System.IO', a través del cual tenemos acceso directo a la clase 'Directory'
perteneciente a dicho espacio de nombres, e invocamos al método
'CreateDirectory' para crear una carpeta llamada "CarpetaEspecial" en la raíz del
disco duro. Nos hemos ahorrado pues, en las dos líneas del método 'Main', el
tener que teclear 'System.' y 'System.IO.'.

EJERCICIOS DE METODOS
1. Escribir un método que permita sumar dos números, que reciba como parámetro
dos valores y retorne la suma del mismo.
2. Escribir un método que permita calcular la potencia un número elevado a otro
número, que reciba como parámetro dos valores y retorne la potencia del mismo.
3. Escribir un método que reciba como parámetro dos números por valor y otras 3
variables por referencia, en el cual devolver como resultado la suma, resta y
potencia de dichos valores.
Escribir un método para el siguiente enunciado, enviar como parámetro el sueldo y las
tres ventas, devolver como resultado el sueldo total y la comisión.
4. Un vendedor recibe un sueldo base más un 10% extra por comisión de sus
ventas, el vendedor desea saber cuánto dinero obtendrá por concepto de
comisiones por las tres ventas que realiza en el mes y el total que recibirá
en el mes tomando en cuenta su sueldo base y comisiones.
5. Crear un menú usando la estructurar repetitivo do while y swith case para dos
ejercicios de secuenciales, dos de condicionales y dos de repetitivas for, dos de
repetitivas while.

107
PROGRAMACIÓN I
5. UNIDAD : TIPOS DE DATOS ESTRUCTURADOS
5.1. Introducción

Los tipos de datos estructurados se denominan así porque en su mayor parte


están destinados a contener múltiples valores de tipos de datos más simples,
primitivos. También se les llama muchas veces "tipos objeto" porque se usan para
representar objetos.

Los tipos de datos estructurados más comunes son: vectores y matrices (array),
cadenas de caracteres (string), registros y uniones, aunque estos últimos no los
vamos a ver en este curso.

CADENAS

Definir una cadena string cadena=”Hola como estas”;

VECTORES

108
PROGRAMACIÓN I
Definición

Columnas
MATRICES

Filas

Definir una Matriz

109
PROGRAMACIÓN I

5.2. Cadenas

Las cadenas de caracteres se delimitan entre comillas dobles, en lugar de simples


como los caracteres individuales. En la declaración, sin embargo, no se indica
explícitamente que se quiere crear un nuevo objeto de tipo String, esto es algo
que infiere automáticamente el compilador.

Las cadenas, por tanto, son objetos que disponen de métodos que permiten
operar sobre la información almacenada en dicha cadena. Así, encontraremos
métodos para buscar una subcadena dentro de la cadena, sustituirla por otra,
dividirla en varias cadenas atendiendo a un cierto separador, convertir a
mayúsculas o minúsculas, obtener la longitud de la cadena,Longitud:
etc. indica la cantidad de
caracteres que tiene una cadena.
Declaración de una cadena
Int longitud=cadena.Length;
string cadena = "Hola Mundo!";
La variable longitud tiene
almacenado 11
String = H O L A M U N D O !
cadena

0 1 2 3 4 5 6 7 8 9 10

Índice o posición de las letras de una cadena, comienza desde cero

Acceder a una posición de una cadena y obtener la letra en una variable de tipo
char.

Se escribe el nombre de la cadena, el corchete de apertura y cierre, luego se


indica la posición. Ejemplo cadena[3], en este ejemplo hace referencia a la
posición o índice 3 de la cadena, cadena[3](cadena sub tres) tiene la letra A.

//la variable letra1 almacena H

// la variable letra2 almacena O

110
PROGRAMACIÓN I
5.2.1. Funciones de Cadenas

Este lenguaje de programación tiene algunas funciones para tratar las


cadenas (string), que nos pueden ser muy útiles.

-Obtener la longitud de la cadena:

En este ejemplo longitud valdrá 15.

Recorrer una cadena con el ciclo repetitivo for y mostrar en un messageBox

-Saber si una cadena contiene otra cadena:

En este ejemplo contiene valdrá "True".

-Obtener el índice de un carácter específico:

En este ejemplo índice valdrá 2 y devuelve el índice de la primera 'a'.

-Eliminar parte de la cadena:

En este ejemplo la variable corte valdrá "Frase". La función Remove, elimina parte
de la cadena, desde la posición indicada (5) hasta el final.

111
PROGRAMACIÓN I
-Reemplazar un carácter por otro:

En este ejemplo la variable nueva valdrá "Fr*se de prueb*". Sustituye el carácter


'a' por '*'.

-Recortar la cadena:

En este ejemplo la variable trozo valdrá "de". Extrae parte de la cadena


empezando por la posición indicada con el primer valor (6) y con una longitud de
2, indicado con el segundo valor.
-Eliminar espacios antes y después de la cadena:

Comparar dos cadenas:


bool b = "texto" == "texto"; // Retornará 'true', ya que ambas cadenas contienen
"texto"

Concatenar cadenas:
string texto = "Cadena de" + " caracteres"; // Nótese el espacio antes de
"caracteres", si no se pusiera, aparecería junto: "decaracteres"

ToLower: devuelve una copia de la cadena en minúsculas.


string cadena = "ABC";

string cadena = cadena.ToLower(); // Retornará "abc"

ToUpper: devuelve una copia de la cadena en mayúsculas.


string cadena = "abc";

string cadena = cadena.ToUper(); // Retornará "ABC"

112
PROGRAMACIÓN I
5.2.2. Ejemplos de Cadenas

Crear una nueva solución con el nombre slncadena y el nombre del proyecto con
el nombre Cadena

Diseñar el siguiente formulario.

En la propiedad name
del textBox1, escribir
txtCadena

Label3 asignar como


nombre lblLongitud

Textbox2 asignar como


nombre txtResultado

Definir la cadena en forma global

Doble clic en Cargar Cadena para generar el evento_click

Mostrar longitud de la cadena

113
PROGRAMACIÓN I
Convertir la cadena a Mayúscula y mostrar en txtResultado

5.2.3. Cadenas Orientado a Objeto


Ejemplo: en el proyecto cadena Agregar una clase con el nombre clsCadena

Agregar un nuevo formulario, luego copiar el contenido del Form1 a Form2

114
PROGRAMACIÓN I

Llamar a la clase clsCadena desde Form2


Instanciar un objeto cadena de tipo
clsCadena de forma global

En la propiedad cadena del objeto


asignar lo que se escribe en txtCadena

115
PROGRAMACIÓN I
PRACTIO 2 DE CADENAS
Crear un proyecto con el nombre Cadena y nombre de la solución slnCadena

1. Insertar MenuStrip y Agregar las siguientes opciones


2. Diseñar el siguiente formulario
3. Definir una variable global cadena de tipo string
4. Programar o implementar para cada una de las opciones.

En la propiedad name
del textBox1, escribir
txtCadena

Label3 asignar como


nombre lblLongitud

Textbox2 asignar como


nombre txtResultado

5. En el proyecto cadena, agregar una clase con el nombre clsCadena


6. Agregar una propiedad Cadena de tipo string, Usar los métodos get y set para
asignar y obtener el valor.
7. Agregar métodos a la clase clsCadena para cada una de las opciones del
menú Strip
8. Agregar un nuevo formulario, luego copiar el contenido del Form1 a Form2

116
PROGRAMACIÓN I

5.3. Colecciones - List, ArrayList


Las colecciones de clases de C# son un conjunto de clases diseñadas
específicamente para agrupar objetos y llevar a cabo tareas con ellos.

Tanto la list‹T› como la ArrayList y otras clases de la Collections tienen


propiedades muy similares a los arrays de C# (para más detalles sobre estos
busquen nueva el tema Matrices y confirmen). Una ventaja fundamental de estas
clases sobre los arrays es que puedan crecer y reducir el número de objetos
almacenados.

La clase list‹T› está contenida en System.Collections.Generic, mientras que la


clase ArrayList figura en el System.Collections.

La sintaxis para crear una colección list‹T› es la siguiente:

List‹tipo› nombreLista = new List‹tipo›();

ArrayList es un objeto creado de una manera similar, aunque sin el argumento


de tipo:

ArrayList nombreLista = new ArrayList();

Crear una nueva solución con el nombre slnLista, el nombre del proyecto
Lista

Definir una Variable global ListaColores

117
PROGRAMACIÓN I
Con esta sintaxis ahora podemos crear una list‹T› denominada ListaColores:

using System.Collections.Generic;

Añadir artículos a las listas


Una vez que una lista se ha creado hay una serie de métodos que pueden ser
llamados a realizar tareas en la lista. En este caso para agregar elementos a la
ListaColores, se utiliza el método Add().
cada vez que haga clic en el botón añadirá un a las lista

Acceso a los elementos

A los elementos individuales en una lista se puede acceder mediante el índice del
valor de la partida (teniendo en cuenta que el primer punto del índice es 0, el
segundo índice 1 y así sucesivamente). El valor del índice se encuentra entre
corchetes tras el nombre de la lista. Por ejemplo, para acceder al segundo punto
del objeto ListaColores:

MessageBox.Show(ListaColores[1]);

Un elemento de la lista puede cambiar su valor de manera similar usando el índice


combinado con el operador de asignación. Por ejemplo, para cambiar el color de
verde a mamey:

ListaColores[2] = "Verde";

118
PROGRAMACIÓN I
El uso de un foreach.

El foreach nos servirá para recorrer un listado de tipo de datos (int, double, string,
etc.) o un listado de listados de objetos (entiéndase como objeto una clase creada
previamente con sus respectivas variables y propiedades).

Al recorrer mediante el foreach, no necesitamos validar cuantos elementos


componen nuestro arreglo, la instrucción funcionará hasta que lea el último
elemento del arreglo o hasta que nosotros mediante una validación interrumpamos
el flujo del ciclo.

foreach (‘Tipo’ Nombre in Listado)


{
// Instrucciones.
}

Agregar el botón btnMostrarListaForeach


Todos los elementos de una lista se pueden acceder mediante un bucle foreach.
Por ejemplo:
foreach (string color in ListaColores)
{
MessageBox.Show(color);
}

foreach: quiere decir para cada elemento(color) en la ListaColores

Inserción de artículos en una lista

Anteriormente se utilizó el método Add() para añadir elementos a una lista. El


método Add(), sin embargo, sólo añade elementos al final de una lista. A veces es
necesario añadir un nuevo tema en una ubicación específica en una
lista. Insert() es el método para este fin específico. Insert()recibe dos argumentos,
un entero que indica el índice de localización de la inserción y el tema que se

119
PROGRAMACIÓN I
incluirá en ese lugar. Por ejemplo, para insertar un elemento en la posición 2 de la
lista seria:

ListaColores.Insert(2, "Blanco");

Ordenando Listas

El método Sort permite ordenar los elementos de la lista, una vez se añaden
nuevos elementos aplicar el método Sort

ListaColores.Sort();

Búsqueda de elementos en una lista

Se proveen un buen número de métodos con las clases listas y la ArrayList. El


método más básico es el Contains(), en el cual cuando se pide a un
objeto ArrayList o List devuelve true si el tema se encuentra en la lista, o false si
no se encuentra.

El IndexOf() devuelve el valor de un índice de un elemento de la lista. Por


ejemplo, el código siguiente muestra el valor de salida de 2, que es el índice de la
posición de "Amarillo" en la cadena:

List‹string› ListaColores = new List‹string›();


ListaColores.Add("Red");
ListaColores.Add("Green");
ListaColores.Add("Amarillo");
ListaColores.Add("Morado");
ListaColores.Add("Mamey");
MessageBox.Show(ListaColores.IndexOf("Amarillo"));

120
PROGRAMACIÓN I
Si el elemento no se encuentra en la lista devuelve -1.

Esta técnica podría utilizarse para reemplazar un valor con otro. Por ejemplo, sin
conocer de antemano el valor del índice del "Amarillo" cadena podemos cambiar a
"Negro":

ListaColores[ListaColores.IndexOf("Amarillo")] = "Negro";

El LastIndexOf() método devuelve el valor del índice del último elemento de la


lista para que coincida con el punto especificado. Esto es particularmente útil
cuando la lista contiene elementos duplicados.

Método Count

La propiedad Count, por otra parte, identifica cuantos artículos se encuentran


actualmente almacenados en la lista.

Borrado de elementos

Todos los elementos de una lista podrán ser borrados mediante el método Clear():

ListaColores.Clear();

Clear() Elimina los elementos de la lista y establece la propiedad Count a cero.

Otros métodos cuando la lista es de tipo entero o double:

Sum: Calcula la sumatoria de todos los


elementos de la lista.
Average: Calcula el promedio de todos los
elementos de la lista.
Max: Devuelve el valor máximo
Min: Devuelve el valor mínimo.
Mostrar en el ListBox1 ListaColores.

121
PROGRAMACIÓN I

PRACTIO 3

List, ArrayList

Practico 3 Ejemplo Listas


1. Agregar un nuevo formulario Form2, luego
diseñe lo siguiente.
2. Definir como global una Lista de tipo string con el
nombre ListaNombres
3. Mostrar el contenido de la lista ordenado en el
ListBox.
4. Mostrar el contenido de la lista con un
messageBox, recorrer la lista con foreach.

Ejemplo

1. Agregar un nuevo formulario Form3, luego diseñe lo siguiente.


2. Definir como global una Lista de tipo int con el nombre ListaNumeros
3. Mostrar el contenido de la lista ordenado en el ListBox.
4. Al hacer en el boton calcular que devuelva la suma de los elementos de la lista,
el promedio, valor Maximo, valor minimo.

122
PROGRAMACIÓN I

123
PROGRAMACIÓN I
PRACTICO 4 EJEMPLO DE ARRAYLIST CON CLASES
Ejemplo de ArrayList con Clases

1. Crear un proyecto con el nombre RegistrarEmpleado


2. Agregar una clase con el nombre empleado y definir sus propiedades del
empleado

Asigna el contenido de la lista en el listBox


Crear el siguiente formulario

DateTimePicker

DataGridView1

124
PROGRAMACIÓN I
LISTAS

Que es una lista


Cual es la diferencia entre una List<tipo> y un ArrayList
Defina una lista de tipo entero con el nombre listaNotas
Añadir dos valores a la listaNotas
Escriba como se obtiene la cantidad de elementos que tiene la lista
Cuál es el método para ordenar la listaNotas
Escriba la estructura repetitiva for para obtener el valor de cada casilla de una lista y
mostrar en un messagebox.
Escriba la estructura repetitiva foreach para obtener el valor de cada casilla de una lista y
mostrar en un messagebox.
Defina una lista de tipo string con el nombre listaColores
¿Cuál es propiedad que retorna la cantidad de elementos de la lista?

Mostar la listaColores en un listBox1 usando la propiedad dataSource

PRACTICO TEORICO DE LISTAS PARA SU CUADERNO


1. Que es una lista
2. Cual es la diferencia entre una List<tipo> y un ArrayList
3. Defina una lista de tipo entero con el nombre listaNotas
4. Añadir dos valores a la listaNotas
5. Escriba como se obtiene la cantidad de elementos que tiene la lista
6. Cuál es el método para ordenar la listaNotas
7. Escriba la estructura repetitiva for para obtener el valor de cada casilla de una lista
y mostrar en un messagebox.
8. Escriba la estructura repetitiva foreach para obtener el valor de cada casilla de una
lista y mostrar en un messagebox.
9. Defina una lista de tipo string con el nombre listaColores
10. ¿Cuál es propiedad que retorna la cantidad de elementos de la lista?
11. Mostar la listaColores en un listBox1 usando la propiedad dataSource

125
PROGRAMACIÓN I

Definir una variable ListaEmpleado de tipo ArrayList

Vaciar datos del datagridview

Asignar datos de la ListaEmpleado al


datagridview

Función de tipo bool que verifica si el


ID del empleado ya existe. Si existe
retorna verdadero; si no existe
retorna falso.

Crear un método que permita limpiar los TextBox

126
PROGRAMACIÓN I
6. ARREGLOS DE UNA Y DOS DIMENSIONES
6.1. Definición de Vectores

¿Qué es un vector? Un vector (o arreglo unidimensional) es una estructura de


datos en la cual se almacena un conjunto de datos de un mismo tipo. Es decir que
un arreglo es una lista de n elementos que posee las siguientes características:

● Se identifica por un único nombre de variable

● Sus elementos se almacenan en posiciones contiguas de memoria

● Se accede a cada uno de sus elementos en forma aleatoria

Vector

Una variable i que


comienza en cero y
se desplaza hasta 4 Longitud o
dimensión

Declaración de un Vector de tipo entero

tipo[] variable;

int[] vector;

En C# podemos indicar el tamaño del arreglo luego de la declaración. Esto nos


permite decidir qué tamaño va a tener el arreglo según lo que necesitemos.

vector = new int[100]; //la variable vector almacenará 100 elementos

127
PROGRAMACIÓN I
vector = new int[6]; //ahora almacenará 6 elementos

Asignar un Valor a una posición del Vector

vector[0]=46;

Obtener un Valor de una posición del Vector

Int elemento=vector[0];

Para saber cuántos elementos tiene un vector, use la propiedad Length

int longitud=vector.Length;

Para desplazarse por cada casilla del vector use las estructuras repetitivas como
for, while, foreach, do while, etc.

Declaración de un Vector de tipo string

String[] nombres;

Nombres=new string[10];

6.2. Cargar un Vector

Cargar datos randómicos en el Vector

El código siguiente muestra cómo agregar elementos en un Vector utilizando for.


En cada iteración se genera un dato randómico, luego le asignamos el valor
generado al vector en la posición(índice) i.

128
PROGRAMACIÓN I

6.3. Mostrar un Vector

Podemos recuperar estos valores del Vector mediante el uso de un bucle for.
Escribiendo el nombre y la posición vector[i]

Ordenar un Vector

Puede ordenar los vectores en orden ascendente y descendente. Podemos usar el


método Array.Sort(vector)

También podemos utilizar el método de Array.Reverse(vector) para invertir la


secuencia de los elementos en el conjunto unidimensional entero.

6.4. Ejemplo de Vectores


Crear una solución con el nombre slnVector, nombre del proyecto Vector

Diseñar el siguiente Formulario

Definir el vector en forma global

129
PROGRAMACIÓN I

130
PROGRAMACIÓN I
Mostrar el vector en un dataGridView

6.4.1. Vectores Orientado a Objetos

Agregar un nuevo Form2, en el proyecto Vector y Diseñar el siguiente


formulario

131
PROGRAMACIÓN I

En el proyecto vector agregar una clase


con el nombre clsVector

132
PROGRAMACIÓN I

133
PROGRAMACIÓN I

134
PROGRAMACIÓN I
6.5. Matrices
6.6. Definición de una Matriz
Una matriz es una estructura de datos que permite almacenar un conjunto
de datos del mismo tipo. Con un único nombre se define la matriz y por medio de
dos sub índices hacemos referencia a cada elemento de la misma (componente).
Las filas y columnas comienzan a numerarse a partir de cero, similar a los
vectores.

COLUMNAS

Col 0 Col 1 Col 2 Col 3 Col 4

Fila 0

Fila 1
FILAS

Fila 2

Hemos graficado una matriz de 3 filas y 5 columnas. Para hacer referencia a cada
elemento debemos indicar primero la fila y luego la columna, por ejemplo, en el
componente 1,4 se almacena el valor 97. En este ejemplo
almacenamos valores enteros. Todos los elementos de la matriz deben ser del
mismo tipo (int, float, string etc.)

Declarar o definir una matriz

Sintaxis para declarar y crear los arreglos bidimensionales

135
PROGRAMACIÓN I
int [,] Matriz;

Matriz = new int[ 3, 4 ]; // En este ejemplo estamos creando una matriz de 3


filas y 4 columnas.

Matrices de tipo enteros:


int[,] MatrizNumeros=new int[3,4]
Matrices de tipo string
string[,] MatrizString = new string[5,4];

Crear una solución con el nombre slnMatrices, el nombre del proyecto


PMatriz, luego diseñe el siguiente Formulario.

Definir una Matriz en


forma Global

136
PROGRAMACIÓN I
Ejemplo Cargar una matriz de n filas y m columnas, mostrar en un
DataGridView

6.7. Cargar una Matriz

Al igual que en los arreglos de una dimensión se utilizaba un bucle (generalmente


for) para cargar u operar los elementos de un vector, así también en las matrices
vamos a utilizar bucles, con la diferencia que ahora utilizaremos un for para las
filas y otro for para las columnas (for anidados).

137
PROGRAMACIÓN I
6.8. Mostrar una Matriz

6.9. Ejemplo con Matrices

138
PROGRAMACIÓN I

139
PROGRAMACIÓN I

140
PROGRAMACIÓN I
6.10. Matrices Orientado a Objetos
En el proyecto Matriz, agregar un nuevo Form2, luego copiar todo el diseño del
Form1

En el proyecto matriz agregar una clase con el nombre clsMatriz

141
PROGRAMACIÓN I

142
PROGRAMACIÓN I

143
PROGRAMACIÓN I
7. MÉTODOS DE ORDENAMIENTO Y BÚSQUEDA.

ORDENAMIENTO.
Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es
la clasificación u ordenación de los mismos. Se considera ordenar al proceso de
reorganizar un conjunto dado de objetos en una secuencia determinada. Cuando
se analiza un método de ordenación, hay que determinar cuántas comparaciones
e intercambios se realizan para el caso más favorable, para el caso medio y para
el caso más desfavorable.

La colocación en orden de una lista de valores se llama Ordenación. Por ejemplo,


se podría disponer una lista de valores numéricos en orden ascendente o
descendente, o bien una lista de nombres en orden alfabético. La localización de
un elemento de una lista se llama búsqueda.

Tal operación se puede hacer de manera más eficiente después de que la lista ha
sido ordenada.
Existen varios métodos para ordenamiento, clasificados en tres formas:

● Intercambio

● Selección

● Inserción.

En cada familia se distinguen dos versiones: un método simple y directo, fácil de


comprender, pero de escasa eficiencia respecto al tiempo de ejecución, y un
método rápido, más sofisticado en su ejecución por la complejidad de las
operaciones a realizar, pero mucho más eficiente en cuanto a tiempo de ejecución.
En general, para arreglos con pocos elementos, los métodos directos son más
eficientes (menor tiempo de ejecución) mientras que para grandes cantidades de
datos se deben emplear los llamados métodos rápidos.

144
PROGRAMACIÓN I

145
PROGRAMACIÓN I
Intercambio
El método de intercambio se basa en comparar los elementos del arreglo e
intercambiarlos si su posición actual o inicial es contraria inversa a la deseada.
Pertenece a este método el de la burbuja clasificado como intercambio directo.
Aunque no es muy eficiente para ordenar listas grandes, es fácil de entender y
muy adecuado para ordenar una pequeña lista de unos 100 elementos o menos.
Una pasada por la ordenación de burbujeo consiste en un recorrido completo a
través del arreglo, en el que se comparan los contenidos de las casillas
adyacentes, y se cambian si no están en orden. La ordenación por burbujeo
completa consiste en una serie de pasadas ("burbujeo") que termina con una en la
que ya no se hacen cambios porque todo está en orden.

Ejemplo:
Supóngase que están almacenados cuatro números en un arreglo con casillas de
memoria de x[1] a x[4]. Se desea disponer esos números en orden creciente. La
primera pasada de la ordenación por burbujeo haría lo siguiente:
Comparar el contenido de x[1] con el de x[2]; si x[1] contiene el mayor de los
números, se intercambian sus contenidos.
Comparar el contenido de x[2] con el de x[3]; e intercambiarlos si fuera necesario.
Comparar el contenido de x[3] con el de x[4]; e intercambiarlos si fuera necesario.

Al final de la primera pasada, el mayor de los números estará en x[4].

146
PROGRAMACIÓN I

147
PROGRAMACIÓN I

Quicksort.
Si bien el método de la burbuja era considerado como el peor método de
ordenación simple o menos eficiente, el método Quicksort basa su estrategia en la
idea intuitiva de que es más fácil ordenar una gran estructura de datos
subdividiéndolas en otras más pequeñas introduciendo un orden relativo entre
ellas. En otras palabras, si dividimos el array a ordenar en dos subarrays de forma
que los elementos del subarray inferior sean más pequeños que los del subarray
superior, y aplicamos el método reiteradamente, al final tendremos el array inicial
totalmente ordenado. Existen además otros métodos conocidos, el de ordenación
por montículo y el de shell.

Selección.
Los métodos de ordenación por selección se basan en dos principios básicos:
Seleccionar el elemento más pequeño (o más grande) del arreglo.

148
PROGRAMACIÓN I
Colocarlo en la posición más baja (o más alta) del arreglo.
A diferencia del método de la burbuja, en este método el elemento más pequeño
(o más grande) es el que se coloca en la posición final que le corresponde.

Inserción.
El fundamento de este método consiste en insertar los elementos no ordenados
del arreglo en subarreglos del mismo que ya estén ordenados. Dependiendo del
método elegido para encontrar la posición de inserción tendremos distintas
versiones del método de inserción.

BÚSQUEDA.
La búsqueda es una operación que tiene por objeto la localización de un elemento
dentro de la estructura de datos. A menudo un programador estará trabajando con
grandes cantidades de datos almacenados en arreglos y pudiera resultar
necesario determinar si un arreglo contiene un valor que coincide con algún valor
clave o buscado.
Siendo el array de una dimensión o lista una estructura de acceso directo y a su
vez de acceso secuencial, encontramos dos técnicas que utilizan estos dos
métodos de acceso, para encontrar elementos dentro de un array: búsqueda lineal
y búsqueda binaria.

Búsqueda Secuencial:
La búsqueda secuencial es la técnica más simple para buscar un elemento en un
arreglo. Consiste en recorrer el arreglo elemento a elemento e ir comparando con
el valor buscado (clave). Se empieza con la primera casilla del arreglo y se
observa una casilla tras otra hasta que se encuentra el elemento buscado o se
han visto todas las casillas. El resultado de la búsqueda es un solo valor, y será la
posición del elemento buscado o cero. Dado que el arreglo no está en ningún
orden en particular, existe la misma probabilidad de que el valor se encuentra ya
sea en el primer elemento, como en el último. Por lo tanto, en promedio, el
programa tendrá que comparar el valor buscado con la mitad de los elementos del
arreglo.
El método de búsqueda lineal funciona bien con arreglos pequeños o para

149
PROGRAMACIÓN I
arreglos no ordenados. Si el arreglo está ordenado, se puede utilizar la técnica de
alta velocidad de búsqueda binaria, donde se reduce sucesivamente la operación
eliminando repetidas veces la mitad de la lista restante.

Búsqueda Binaria

La búsqueda binaria es el método más eficiente para encontrar elementos en un


arreglo ordenado. El proceso comienza comparando el elemento central del
arreglo con el valor buscado. Si ambos coinciden finaliza la búsqueda. Si no
ocurre así, el elemento buscado será mayor o menor en sentido estricto que el
central del arreglo. Si el elemento buscado es mayor se procede a hacer
búsqueda binaria en el subarray superior, si el elemento buscado es menor que el
contenido de la casilla central, se debe cambiar el segmento a considerar al
segmento que está a la izquierda de tal sitio central.

150

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy