Escolar Documentos
Profissional Documentos
Cultura Documentos
Escuela Informtica
Fundamentos de
Programacin
Texto Gua de la
Escuela Informtica
Fundamentos de
Programacin
Autores:
Orlando Erazo Moreta
Andrea Ziga
Washington Chiriboga
2
PREFACIO
El presente texto gua pretende introducir de una manera clara, sencilla y simplificada, los
conceptos de la lgica para desarrollar programas para computadoras, a todas las personas
que se encuentren interesadas en esta disciplina, pero muy en particular a los estudiantes
que cursan la unidad de aprendizaje de Fundamentos de Programacin en la carrera de
Ingeniera en Sistemas.
Se ha desarrollado esta obra pensando en que los lectores son estudiantes nuevos en la
disciplina de programacin, as como tambin en aquellos que ya han tenido o tienen
alguna experiencia en este campo.
CONTENIDO
Tema
Pgs.
PORTADA
PORTADILLA
PREFACIO
CONTENIDO
INTRODUCCIN
11
13
1.3.
21
1.4.
22
1.5.
Tipos de campos
24
Ejercicios propuestos
26
CAPTULO 2. ALGORITMOS
28
2.1.
Problemas y modelos
28
2.2.
29
2.3.
Algoritmos
30
2.4.
35
Ejercicios resueltos
41
Ejercicios propuestos
42
45
3.1.
Algoritmos bsicos
46
3.2.
48
3.3.
49
4
3.4.
52
3.5.
Estructuras adicionales
55
Ejercicios resueltos
58
Ejercicios propuestos
62
64
4.1.
64
La plataforma .NET
65
67
69
4.2.
70
4.2.1. Tipos
71
4.2.2. Constantes
72
4.2.3. Variables
73
4.2.4. Expresiones
74
4.2.5. Operadores
75
4.3.
76
Sentencias
Ejercicios resueltos
78
Ejercicios propuestos
81
82
5.1.
Procedimientos
85
5.2.
Funciones
86
5.3.
88
Ejercicios resueltos
89
Ejercicios propuestos
90
91
92
6.2.
Cadenas de caracteres
95
6.3.
97
5
100
Ejercicios resueltos
102
Ejercicios propuestos
105
BIBLIOGRAFA
106
ANEXOS
Anexo 1: Ejercicios Propuestos
107
INTRODUCCIN
Cuando un msico escucha una meloda que acaba de componer o cuando un escultor
retoca el ltimo detalle de su obra maestra, est ante un logro personal, pero que fue hecho
pensando en los dems. Est ante el fruto de su trabajo, que tuvo que realizar para pasar de
una idea o modelo que estaba slo en su imaginacin, a algo perceptible por los otros. Y
ese logro causa una gran satisfaccin.
pensando en ese dichoso algoritmo. Nos iremos a dormir (probablemente muy tarde,
porque habremos dedicado parte de nuestro tiempo libre a aprender nuevas tecnologas) y
despertaremos pensando en el algoritmo o, incluso, con la solucin en la mente. Pero
cunado escribamos la ltima lnea del cdigo que implementa ese algoritmo y lo veamos
funcionando, obtendremos una gran satisfaccin. Una satisfaccin que slo puede entender
otro programador.
Pero como es de esperar, para iniciarse en este arte de escribir programas para
computadoras, necesitar comprender correctamente una serie de conceptos, desarrollar la
lgica de programacin, aprender un lenguaje de programacin y, sobre todo, mucha
Para finalizar el texto, en el captulo 6 se dan a conocer algunas de las estructuras de datos
elementales, haciendo nfasis en los arreglos de una y dos dimensiones, y su
implementacin en el lenguaje C#.
CAPTULO 1
CONCEPTOS BSICOS DE ALMACENAMIENTO DE
INFORMACIN
Mucho se habla de que la computadora est influyendo dentro de nuestra privacidad y
sustituyendo mano de obra, creando desempleo, etc. Estos aspectos no pueden discutirse,
sin conocer a fondo lo que es una computadora, pero a medida que se avanza en su
conocimiento, es posible emitir un concepto inteligente. Hay que tener en cuenta que una
computadora no puede hacer algo a menos que el ser humano le diga qu hacer. Debemos
controlar la computadora y no ella a nosotros.
Desde un punto de vista simple, una computadora procesa datos y los convierte en
informacin significativa.
informacin, existe diferencia entre ellos. Los datos constan de hechos en bruto y figuras.
La informacin, por otra parte, son datos procesados.
significativos; los datos en su forma original (en bruto) no. La figura 1 muestra el modelo
fundamental de datos: los datos entran a la computadora (por una parte llamada entrada), la
computadora procesa esos datos y la informacin significativa es el resultado (se presentan
en una parte denominada salida).
Datos
Entrada
Computadora
Proceso
Informacin
Salida
Los datos, por s mismos, no sirven para nada y no son tiles para las personas que los
manipulan y necesitan tomar decisiones con ellos. Por ejemplo, el presidente de una
9
Es el trabajo del
El
Una computadora necesita tanto del hardware como del software para poder ser usada real
y prcticamente. El hardware de la computadora sin el software que le acompaa es como
si tuviramos un libro con pginas en blanco. La portada, contraportada y las pginas
10
interiores constituyen el hardware del libro, pero el libro no es til sin ningn texto, el
software.
Otro trmino que suele utilizar al hablar de software es sistema, aunque la palabra sistema
por s sola no tiene nada que ver son el software. Un sistema es un conjunto de elementos
que interactan de alguna manera, como puede ser el sistema digestivo o el sistema solar.
Otro ejemplo de sistema, son los sistemas de informacin, sin que esto tampoco implique
un software. Por ejemplo, un sistema contable es un conjunto de mtodos y herramientas
que permiten mantener la informacin sobre los movimientos econmicos y los bienes de
una empresa, pero se pueden utilizar libros en papel para alcanzar el objetivo. Finalmente,
un sistema de informacin basado en computadora es la implementacin con herramientas
computacionales (programas y datos) de un sistema de informacin. Por lo tanto, como
sinnimo de software podemos utilizar sistema de informacin basado en computadora.
Por otro lado, los trminos programa y sistema suelen utilizarse indistintamente, pero no
est bien, generalmente, podemos decir que un sistema es un grupo de programas que
interactan para realizar ciertas tareas. Un programa es una unidad mucho ms pequea,
independiente y sencilla que un sistema.
11
que puede tener dos estados encendido, o apagado, donde el estado encendido se representa
mediante uno y el apagado mediante cero.
Byte.- Es un conjunto de ocho BITS consecutivos que se tratan como una sola entidad.
Tambin se le conoce como el nmero de BITS necesarios para representar un carcter en
la memoria de la computadora.
Registro.-Es un conjunto de campos que se refieren a una misma actividad que se desea
procesar; por ejemplo, toda la informacin sobre un artculo de inventario, la informacin
que contiene una lista de clase sobre un estudiante (cdigo, nombres, direccin, etc.).
Base de datos.- Una base de datos o banco de datos es un conjunto de datos pertenecientes
a un mismo contexto y almacenados sistemticamente para su posterior uso. En este
sentido, una biblioteca puede considerarse una base de datos compuesta en su mayora por
12
El programador.
Un programador es, bsicamente, una persona que ejerce la programacin; es decir, que se
dedica a escribir programas para computadoras. Los programadores tambin reciben el
nombre de desarrolladores de software; tcnicamente podemos usar uno u otro trmino.
13
Consiste de un
Lenguajes mquina.
Antes de continuar con estos tipos de lenguajes es necesario hablar de las instrucciones.
14
instrucciones, cada una de las cuales especifica ciertas operaciones que debe ejecutar la
computadora.
Lenguajes mquina.- Los lenguajes mquina son aquellos que estn escritos en lenguajes
directamente inteligibles por la mquina (computadora), ya que sus instrucciones son
cadenas binarias (cadenas o series de caracteres-dgitos- O y 1) que especifican una
operacin, y las posiciones (direccin) de memoria implicadas en la operacin se
denominan instrucciones de mquina o cdigo mquina. El cdigo mquina es el conocido
cdigo binario.
15
Los inconvenientes -en la actualidad- superan a las ventajas, lo que hace prcticamente no
recomendables los lenguajes mquina. Estos inconvenientes son:
Poca fiabilidad.
Los programas slo son ejecutables en el mismo procesador (CPU, Unidad Central de
Proceso).
Para evitar los lenguajes mquina, desde el punto de vista del usuario, se han creado otros
lenguajes que permiten escribir programas con instrucciones similares al lenguaje humano
(por desgracia casi siempre ingls, aunque existen raras excepciones). Estos lenguajes se
denominan de alto y bajo nivel.
Lenguajes de bajo nivel.- Los lenguajes de bajo nivel son ms fciles de utilizar que los
lenguajes mquina, pero, al igual, que ellos, dependen de la mquina en particular. El
lenguaje de bajo nivel por excelencia es el ensamblador (assembly languaje). Las
instrucciones en lenguaje ensamblador son instrucciones conocidas como nernotcnicos.
Por ejemplo, nemotcnicos tpicos de operaciones aritmticas son: en ingls, ADD, SUB,
DIV, etc.; en espaol, SUM, RES, DIV, etc.
Programa fuente en
Lenguaje ensamblador
(assembly)
Programa
ENSAMBLADOR
(assembler)
Programa objeto en
cdigo mquina
Lenguajes de alto nivel.- Los lenguajes de alto nivel son los ms utilizados por los
programadores. Estn diseados para que las personas escriban y entiendan los programas
de un modo mucho ms fcil que los lenguajes mquina y ensambladores. Otra razn es
que un programa escrito en lenguaje de alto nivel es independiente de la mquina; esto es,
las instrucciones del programa de la computadora no dependen del diseo del hardware o
de una computadora en particular. En consecuencia, los programas escritos en lenguaje
de alto nivel son portables o transportables, lo que significa la posibilidad de poder ser
ejecutados con poca o ninguna modificacin en diferentes tipos de computadoras; al
contrario que los programas en lenguaje mquina o ensamblador, que slo se pueden
ejecutar en un determinado tipo de computadora.
18
Transportabilidad.
Al igual que sucede con los lenguajes ensambladores, los programas fuente tienen que ser
traducidos por los programas traductores, llamados en este caso compiladores e intrpretes.
Los lenguajes de programacin de alto nivel existentes hoy son muy numerosos. Algunos
ejemplos son: C/C++, Java, Visual BASIC, C#, PHP, JavaScript.
Traductores de lenguaje
Los traductores de lenguaje son programas que traducen a su vez los programas fuente
escritos en lenguajes de alto nivel a cdigo mquina.
19
Compiladores.
Intrpretes.
Usando un intrprete, un solo archivo fuente puede producir resultados iguales incluso en
sistemas sumamente diferentes (ej. una PC y un PlayStation 3). Usando un compilador, un
solo archivo fuente puede producir resultados iguales solo si es compilado a distintos
ejecutables especficos a cada sistema.
20
Los programas interpretados suelen ser ms lentos que los compilados debido a la
necesidad de traducir el programa mientras se ejecuta, pero a cambio son ms flexibles
como entornos de programacin y depuracin (lo que se traduce, por ejemplo, en una
mayor facilidad para reemplazar partes enteras del programa o aadir mdulos
completamente nuevos), y permiten ofrecer al programa interpretado un entorno no
dependiente de la mquina donde se ejecuta el intrprete, sino del propio intrprete (lo que
se conoce comnmente como mquina virtual).
1.3.
Los principales tipos de informacin, entre otros, que se manejan en una computadora son:
Numrica:es toda aquella informacin con o sin decimales (entera o real) con la cual se
pueden hacer clculos aritmticos o matemticos.
21
Lgica (booleana):Este tipo de informacin slo tiene dos posibles valores: falso o
verdadero. Al igual que el tipo de informacin anterior, ste tampoco puede ser
utilizado para efectuar clculos matemticos.
1.4.
Con el objetivo de que el procesador pueda obtener los datos de la memoria central ms
rpidamente, la mayora de los procesadores actuales utilizan con frecuencia una memoria
denominada cach, que sirve para almacenamiento intermedio de datos entre el procesador
y la memoria principal. La memoria cach se incorpora casi siempre al procesador.
se denominan tambin palabras, aunque no guardan analoga con las palabras del lenguaje).
El nmero de celdas de memoria de la memoria central, dependiendo del tipo y modelo de
computadora, hoy en da, suele ser millones o miles de millones. Cada celda de memoria
consta de un cierto nmero de bits (normalmente 8, un byte).
Direcciones de memoria.
Existen dos conceptos importantes asociados a cada celda o posicin de memoria: su
direccin y su contenido. Cada celda o byte tiene asociada una nica direccin que indica
su posicin relativa en memoria y mediante la cual se puede acceder a la posicin para
almacenar o recuperar informacin.
Siempre que una nueva informacin se almacena en una posicin, se destruye (desaparece)
cualquier informacin que en ella hubiera y no se puede recuperar.
La direccin es
La memoria central de una computadora puede tener desde unos centenares de millares de
butes hasta millones de bytes. Como el byte es una unidad elemental de almacenamiento,
se utilizan mltiplos para definir el tamao de la memoria central (Kilobyte, Megabyte,
Gigabyte, Terabyte)
23
Direcciones
Contenido
999
998
997
01000001
.
.
.
3
2
00000101
00000011
00000010
1.5.
Tipos de campos
Para que una computadora pueda hacer clculos debe tener almacenados en la memoria
principal los valores con los cuales ha de trabajar; por lo tanto, se necesita un espacio
interno para guardar esos valores en forma temporal.
Esos espacios internos de la memoria son grupos de bits denominados campos; a stos se
les asigna una nica direccin de memoria y su capacidad o valor mximo que se puede
almacenar en ellos depender del tamao del grupo.
Campos variables.
Son todos aquellos campos que permiten que el contenido almacenado en el espacio de
memoria asignado, pueda ser alterado en el transcurso de la ejecucin del programa; o sea,
en un momento tiene un valor y ms adelante puede tener otro distinto, pero nunca ms de
24
B1
C1AZ
NOMBRE
SALARIOHORA
Si se quiere dar nombre a una variable que va a almacenar un pago, por ejemplo,
perfectamente lo podemos llamar K, pero sera ms evidente si la denominamos PAG o
ms directamente PAGO. Tampoco estos nombres deben ser tan excesivamente largos
debido a que dificultan la escritura del algoritmo.
Al momento de dar el nombre a las variables tampoco se pueden emplear las palabras
reservadas (propias de cada lenguaje de programacin) pues tienen un sentido definido,
como por ejemplo if, while, else, switch, etc.
Para que una variable est perfectamente definida, habr que especificar: su nombre, el tipo
de dato (numricos, alfanumrico, booleano) y el valor que va tomar en un principio
(inicializacin).
25
Campos constantes.
40,6
ANAISABEL
-10
.V.
Ejercicios propuestos
1. Con sus propias palabras, explique cada uno de los siguientes trminos.
Si es
Informtica
Computacin
Ingeniera de Sistemas
Dato
Informacin
Sistema
Sistema de informacin
Programa
Lenguaje de programacin
Instruccin
Cdigo fuente
Lenguaje mquina
Lenguaje ensamblador
Traductor
Compilador
26
2.
Intrprete
Ensamblador
Editor
Campo
Registro
Archivo
Base de datos
Variable
Constante
Direccin de memoria
Bit
Byte
3.
4.
5.
Indicar cules de los siguientes identificadores son vlidos o no, explicando el porque
de su afirmacin:
a) YROJO
b) X-ROJO
c) 2blanco
d) N/4
e) Promedio
f) Suma *10
g) Total suma
h) Nmero_alumnos
i) X$
j) _alumnos
k) x1_y3
27
l) Promedio_Notas
a) 123
b) 12.4
c) 0.1234
d) Verdadero
e) Falso
f) a
g) Ab
h) Buenos das!&%$.
i) *
j) @
k) 3.141592
l) 0.00001
28
CAPTULO 2
ALGORITMOS
2.1.
Problemas y modelos
Una gran parte del trabajo del programador es precisamente saber qu problema se va a
resolver. Al abordar los problemas, por lo general, stos no tienen una especificacin
simple y precisa de ellos. De hecho, problemas como crear una receta digna de un
gastrnomo o preservar la paz mundial pueden ser imposibles de formular de manera que
admitan una solucin por computador; aunque se crea que el problema puede resolverse en
un computador, es usual que la distancia entre varios de sus parmetros sea considerable.
A menudos slo mediante experimentacin es posible encontrar valores razonables para
estos parmetros.
Se puede recurrir a casi cualquier rama de las matemticas y de las ciencias para obtener un
modelo de cierto tipo de problemas. En el caso de problemas de naturaleza esencialmente
numrica, esto puede lograrse a travs de conceptos matemticos tan familiares como las
ecuaciones lineales. Tratndose de problemas de procesamiento de smbolos y textos, se
pueden construir modelos con cadenas de caracteres.
29
Cuando ya se cuenta con un modelo matemtico adecuado del problema, puede buscarse
una solucin en funcin de ese modelo. El objetivo inicial consiste en hallar una solucin
en forma de algoritmo. Posteriormente, este algoritmo puede ser implementado en algn
lenguaje de programacin obtenindose un programa que resuelve nuestro problema
planteado.
2.2.
Diseo: una vez analizado el problema, se disea una solucin que conducir a un
algoritmo que resuelva el problema (diseo del algoritmo); es decir, cmo el programa
resolver la tarea solicitada.
30
sern ignorados, pero sirven para hacer los programas ms fciles de comprender.
Recuerde que como programador debe escribir cdigos sencillos.
Documentacin: escritura de las diferentes fases del ciclo de vida del software,
esencialmente el anlisis, diseo y codificacin, unidos a manuales de usuario y de
referencia, as como normas para el mantenimiento.
2.3.
Algoritmos
Es comn ver estudiantes que por ligereza omiten uno o varios pasos y luego se dan cuenta
de que han invertido su tiempo en lo equivocado, porque no han verificado si lo que estn
haciendo es correcto o no.
31
La palabra algoritmo es muy antigua; toma su nombre del famoso matemtico y astrnomo
rabe Alkhwarzmi (siglo IX), quien escribi un tratado sobre manipulacin de nmeros y
ecuaciones
32
Salida. Todo algoritmo debe proporcionar uno o ms valores como resultado, una vez
se ha ejecutado la secuencia de pasos que lo conforman.La salida es la respuesta dada
por el algoritmo o el conjunto de valores que el programador espera se le
proporcionen.Estos resultados pueden ser de cualquier tipo: uno o ms valores
numricos, valores lgicos o caracteres, etc. La facilidad o complejidad de un algoritmo
no la determinan la cantidad de datos que se desean obtener. Un algoritmo puede tener
un alto grado de complejidad y, sin embargo, producir un solo valor como resultado.
Eficacia. Los pasos del algoritmo deben ser suficientes para lograr el cometido del
algoritmo, es decir, el algoritmo debe ser eficaz.
Formas de representacin.
Como los algoritmos no estn relacionados nicamente con la programacin de
computadoras, es necesario contar con mtodos independientes para expresarlos y, por lo
tanto, transmitirlos a otras personas. En la actualidad existen varias formas de expresar un
algoritmo, como son, el lenguaje natural, el pseudocdigo, los diagramas de flujo, algunos
diagramas del lenguaje de modelado UML, etc.
33
1. Inicio.
2. Obtener (leer) el primer y el segundo nmero.
3. Sumar los dos nmeros.
4. Almacenar (asignar) el resultado anterior en la variable suma.
5. Presentar (mostrar) el valor de la suma.
6. Fin
Decisin
Conector
Figura 4. Smbolos de un diagrama de flujo.
34
Los smbolos o bloques para diagramar existen en gran cantidad y de diversas formas.
En la figura 4, se exponen algunos de ellos.
N1, N2
SUMA = N1 + N2
SUMA
Fin
Inicio
Entero N1, N2, SUMA;
Leer N1;
Leer N2;
SUMA = N1 + N2;
Escribir SUMA;
Fin
35
2.4.
Existen dos tipos de datos. Simples (sin estructura) y compuestos (estructurados). Los
datos estructurados se estudian en el captulo 6 y son conjuntos de partidas de datos simples
con relaciones definidas entre ellos.
36
Rango de valores
Tamao
(bits)
Sin signo
Con signo
0 a 255
-128 a +127
16
0 a 65535
-32768 a +32767
32
0 a 4294967295
-2147483648 a +2147483647
Por ejemplo, si necesita una variable para guardar la edad de una persona
bastar con utilizar un tipo de dato entero de 8 bits, pero si necesita ingresar su
sueldo debera cambiar a una de 16 bits.
Los tipos de datos reales a su vez pueden clasificarse en dos, como se puede
apreciar en la tabla 2:
Tipo
Tamao
(bits)
Intervalo aproximado
Simple
32
-3.4 10 38 a +3.4 10 38
Doble
64
Datos tipo carcter y texto (cadena). Los datos de tipo carcter contienen un solo
carcter, que puede ser:
Lgicos. El tipo lgico tambin denominado booleano- es aquel que slo puede tomar
uno de dos valores: verdadero (true) o falso (false). Este tipo de datos se utiliza para
representar alternativas (si/no) a determinadas condiciones.
38
Operadores y expresiones.
Todos los smbolos que representan enlaces entre cada uno de los argumentos (operandos)
que intervienen en una operacin se llaman operadores, y se utilizan para construir
expresiones.
Cada expresin toma un valor que se determina tomando los valores de las variables y
constantes implicadas y la ejecucin de las operaciones indicadas.
Aritmticos. Para tratar los nmeros se utilizan operadores aritmticos, que, junto con
las variables numricas forman expresiones aritmticas.
operadores aritmticos:
Smbolo
Significado
Suma
Resta
Multiplicacin
Divisin (real)
Potenciacin
DIV ( \ )
MOD ( % )
Divisin (entera)
Resto de la divisin
Ejemplos:
Expresin
Resultado
423 + 5
428
423 - 5
418
12 * 11
132
23 / 5
4.6
2^4
16
23 \ 5
23 % 5
Smbolo
Significado
<
Menor que
>
Mayor que
==
Igual que
<=
>=
! = (<>)
Diferente
Ejemplos:
Expresin
Resultado
4<5
True
4>5
False
2 * 3 = = 5 +1
True
-2 <= 0
True
40
-1 >= 0
False
2 ! = -2
True
Lgicos. Combinan sus operandos de acuerdo con las reglas del clculo proposicional
(revisar U. A. Lgica Matemtica) con el fin de producir un nuevo valor que se
convierta en el valor de la expresin. La tabla 5 define los operadores lgicos.
Smbolo
Significado
AND
Conjuncin
OR
Disyuncin
NOT
Negacin
Ejemplos:
Expresin
Resultado
True
False OR False
False
NOT False
True
Prioridad de operadores.
Antes de evaluar una expresin se debe tener presente que estas se deben sujetar a una
jerarqua de operadores, esto evita que se produzcan ambigedades en la ejecucin de los
clculos. Con cada operador se asocia una prioridad; los operadores que tienen mayor
prioridad se procesan primero y si existen varios operadores con la misma prioridad se
contina procesando de izquierda a derecha.
Parntesis.
Potencias.
Productos y divisiones.
Sumas y restas.
Relacionales.
Lgicos.
Los operadores que se utilizan para efectuar operaciones de tipo complejo tales como: raz
cuadrada, valor absoluto, redondeo, etc., se denominan funciones internas, estndar o
incorporadas y pueden recibir como argumentos1 expresiones, variables o constantes de
tipo real o entero.
FUNCION
abs (x)
arctan (x)
cos (x)
exp (x)
ln (x)
log (x)
round (x)
DESCRIPCIN
Valor absoluto de x
Arco tangente de x
Coseno de x
Exponencial de x
Logaritmo natural de x
Logaritmo en base 10 de x
Redondeo de x
TIPO DE DATO
DEL
ARGUMENTO (X)
Entero o real
Entero o real
Entero o real
Entero o real
Entero o real
Entero o real
Real
TIPO DE DATO
DEL
RESULTADO
Entero o real
Real
Real
Real
Real
Real
Entero
Se denomina argumento al valor que se le pasa a una funcin con el fin de que dicha funcin pueda cumplir
con su objetivo.
42
sen (x)
sqr (x)
sqrt (x)
tan (x)
Seno de x
Cuadrado de x
Raz cuadrada de x
Tangente de x
Entero o real
Entero o real
Entero o real
Entero o real
Real
Real
Real
Real
EJEMPLO
abs (-3)
arctan (12.34)
cos (0.7854)
exp (3.1)
in (20)
log (15)
round (3.75)
sen (0.5236)
sqr (6.2)
sqrt (15.4)
tan (15)
RESULTADO
3
1.899357
0.7061055
22.197913
2.9957323
1.176091259
4
0.5000011
38.44
3.9242834
-0.8559934
Evaluacin de expresiones.
Una vez que se conocen las reglas de prioridad asociadas con los operadores, la evaluacin
de las expresiones es muy fcil, simplemente se evala la expresin de izquierda a derecha
para cada clase de operadores que estn presentes.
Adems se debe considerar la necesidad del uso de parntesis para agrupar trminos de una
expresin, ejecutando primero los parntesis ms internos y luego los parntesis ms
externos.
43
Ejercicios resueltos
Escribir un algoritmo que muestre los pasos necesarios para cambiar una llanta
pinchada de un carro. Una posible solucin sera:
1. Iniciar.
2. Sacar la llanta y herramientas de la maleta del carro.
3. Sacar la llanta pinchada.
4. Colocar la llanta buena.
5. Guardar la llanta pinchada y la herramienta.
6. Subirse al carro.
7. Reanudar el viaje.
8. Terminar.
5 * * 2 = 25
25 / 5*20 = 100
100 - 5 = 95
Solucin:
(A + B)/(C - A) + 20
44
Expresin
Resultado
( Z > 50 ) AND L
!L
Ejercicios propuestos
1) Haga un procedimiento que describa los pasos para cruzar una calle por un puente
peatonal.
2) Describa los pasos necesarios para llevar una amiga(o) al cine.
3) Describa los pasos para cambiar una bombilla quemada.
4) Escribir un algoritmo para la bsqueda de una palabra en un diccionario.
5) Escribir un algoritmo para realizar un depsito bancario
Considere dos casos:
Sobre una Cuenta de Ahorro
Sobre una Cuenta Corriente
6) Escribir un algoritmo para encender un computador
7) Elabore un procedimiento que muestre los pasos necesarios para hacer una llamada
telefnica, donde no se sabe el nmero del telfono, pero s el nombre de la persona.
8) Haga un procedimiento que muestre los pasos para cambiar la llanta pinchada de una
bicicleta.
9) Muestre los pasos necesarios para hacer un desayuno de huevos duros, hasta servirlos.
10) Obtener el resultado de las siguientes expresiones:
a) 4.5/2 (2+4)
b) 8 / 3 div 4 2
c) 6 * -(2 9)/3
d) round (5 + 4 * mod 5 + abs (2 *3 + (6 div 2)))
e) 6/3*2/ -A/sqr(3)/3n B/2*4+(7div C)+(7 Mod C) Si A=4,B=7 y C = 2
f) (1.5<2) o (2>6)
45
a. X 2 + 4YZ
b. X + Y + 3X + 4Y
Z
5
2
c. 4 X 2 X + 8
cd
b + ( b 2 4ac)
d.
2a
e. 4
3
f . A BC ( D ) 3
g. (A 3 ) 2 BC
DE
12) Escriba las siguientes expresiones algortmicas como expresiones algebraicas:
a. B * *2 X * Y
b. 5 * X * *2 X * *3 * 5
c. (A + B) / (C A )
d. X * Y + Y * *(1 / 2)
CAPTULO 3
ESTRUCTURAS E INSTRUCCIONES EN LA PROGRAMACIN
ESTRUCTURADA
En la actualidad, dado el tamao considerable de las memorias centrales y las altas
velocidades de los procesadores, el estilo de escritura de los programas se vuelve una de las
caractersticas ms sobresalientes en las tcnicas de programacin. La legibilidad de los
algoritmos y posteriormente de los programas exige que su diseo sea fcil de comprender
y su flujo lgico fcil de seguir. La programacin modular ensea la descomposicin de un
programa en mdulos ms simples de programar, y la programacin estructurada permite la
escritura de programas fciles de leer y modificar. En un programa estructurado el flujo
lgico se gobierna por las estructuras de control bsicas:
1. Secuenciales.
2. Seleccin (condicin).
3. Repetitivas (iterativas).
En este captulo se introducen los tres tipos estructuras, representando losa algoritmos
mediantepseudocdigo y diagramas de flujo, aunque se presta ms atencin a los segundos.
El trmino flujo de control se refiere al orden en que se ejecutan las sentencias del
programa. Otros trminos utilizados son secuenciacin y control de flujo. A menos que se
especifique expresamente, el flujo normal de control de todos los programas es el
secuencial. Este trmino significa que las sentencias se ejecutan en secuencia, una despus
de otra, en el orden en que se sitan dentro del programa. Las estructuras de seleccin,
repeticin e invocacin permiten que el flujo secuencial del programa sea modificado en un
modo preciso y definido con anterioridad.
47
3.1.
Algoritmos bsicos
Accin1
Accin2
AccinN
Tenga presente que puede asignar a una variable un valor, una constante, otra variable o
una expresin. El lado izquierdo de un enunciado de asignacin siempre ser una
variable y el lado derecho corresponde al nuevo valor que tendr dicha variable.
48
Pseudocdigo:
Variable valor
Variable = valor
Variable = valor;
Figura 6. Asignacin.
Por otro lado, en una asignacin solamente la parte izquierda cambia de valor, las
variables de la parte derecha conservan sus valores, despus de ejecutarse el enunciado
y se pueden utilizar ms tarde.
Pseudocdigo:
Variable
Pseudocdigo:
Mensaje
Mensaje
Escribir Mensaje;
Escribir Var1, Var2;
Var1, Var2
Var1, Var2
3.2.
INICIO
Entero B, H, A;
rea de un tringulo
B, H
A=(B*H)/2
Fin
Elabore un algoritmo que permita al usuario introducir a travs del teclado dos nmeros
en las variables A y B, e imprimirlas. Luego, intercambiar los valores de las variables e
imprimir el contenido final de las variables (figura 10).
50
Inicio
INICIO
Entero B, A, aux;
Intercambio de variables
Ingrese A y B
Leer A, B;
Escribir Contenido original: , A, B;
A, B
Aux = A;
A = B;
B = Aux;
Contenido original: , A, B
Aux = A
A=B
B = Aux
Luego de intercambio: , A, B
Fin
3.3.
En las estructuras selectivas se evala una condicin y en funcin del resultado de la misma
se realiza una opcin u otra. Las condiciones se especifican usando expresiones lgicas.
La representacin de una estructura selectiva se hace con una figura geomtrica en forma
de rombo (su significado es si, entonces, sino). Las estructuras selectivas o alternativas
pueden presentarse de varias formas:
51
Condicin
SI ( Condicin ) ENTONCES
Acciones;
FIN_SI
Si
Acciones
Condicin
No
Acciones 1
Acciones 2
Pseudocdigo:
SI ( Condicin ) ENTONCES
Acciones 1;
SINO
Acciones 2;
FIN_SI
Figura 12. Condicional doble.
52
Si dentro de una de las alternativas del bloque de decisin, existen otros bloques de
decisin, se tiene un bloque de decisin anidado (figura 13). La introduccin dentro de
una alternativa de otros bloques de decisin nos permite probar mltiples condiciones
para escoger una determinada alternativa.
Condi1
No
Si
Si
Condi2
Acciones 1
No
Acciones 2
Acciones 3
Acciones 4
Figura 13. Bloque de decisin anidada.
Tambin podemos utilizar bloques de decisin cuyas condiciones estn constituidas por
condiciones simples, relacionadas mediante los operadores lgicos And, Or y Not.
Estos bloques se denominan condiciones compuestas (figura 14).
Si
Condicin1
AND/OR
Condicin2
No
Acciones 2
Acciones 1
3.4.
Las computadoras estn especialmente diseadas para todas aquellas aplicaciones en las
cuales una operacin o conjunto de ellas deben repetirse muchas veces. Un tipo muy
importante de estructura es el algoritmo necesario para repetir una o varias acciones un
nmero determinado de veces. Un programa que lee una lista de nmeros puede repetir la
misma secuencia de mensajes al usuario e instrucciones de lectura hasta que todos los
nmeros se hayan ledo.
Las estructuras que repiten una secuencia de instrucciones un nmero determinado de veces
se denominan bucles, lazos o ciclos de repeticin, y se denomina iteracin al hecho de
repetir la ejecucin de una secuencia de acciones.
La estructura repetitiva mientras (while) es aquella en que el cuerpo del bucle se repite
mientras se cumple una determinada condicin. Cuando se ejecuta la instruccin mientras,
la primera cosa que sucede es que se evala la condicin (una expresin booleana). Si se
evala false, no se toma ninguna accin y el programa prosigue en la siguiente instruccin
del bucle. Si la expresin booleana es verdadera, entonces se ejecuta el cuerpo del bucle,
despus de lo cual se evala de nuevo la expresin booleana. Este proceso se repite una y
otra vez mientras la expresin booleana (condicin) sea verdadera. La figura 15 ilustra un
ciclo mientras como diagrama de flujo y pseudocdigo.
Pseudocdigo:
Mientras ( Condicin )
No
Condicin
Acciones
FIN_MIENTRAS
Si
Acciones (repetir)
Variables tipo contador. Muchas veces en los procesos repetitivos es necesario hacer
el conteo de sucesos o acciones internas del ciclo; este proceso de conteo se hace con
una variable que se va incrementando cada vez que el ciclo se repite.
Como tambin aparece al lado derecho, antes de utilizarlo se hace necesario asignarle
un valor inicial, por ejemplo: ACUMULADOR = 0.
55
Variables tipo bandera. La bandera es una variable que generalmente usa dos valores
excluyentes o diferentes, su contenido es uno cualquiera de dos valores definidos por el
programador, el cual ordena cuando cambia su contenido.
Los valores escogidos para la bandera pueden ser de cualquier tipo de dato, por
ejemplo:numrico (0 y 1, 1 y 2, etc.), lgico True y False, carcter o texto (S y N,
SI y NO, 0 y 1, ENCONTRADO y NO ENCONTRADO).
56
3.5.
Estructuras adicionales
Aunque cualquier programa apropiado se puede elaborar utilizando solamente las tres
estructuras bsicas de control descritas antes, el uso de stas se convierte en soluciones
particulares de la implementacin de la estructura decisin lgica o mientras. Es necesario
analizar en cules de estos casos particulares se puede utilizar la estructura adicional,
teniendo en cuenta que lo que ellas hagan tambin se puede solucionar con una de las
estructuras bsicas.
57
En forma general se puede decir, que si el valor del controlador es i, se ejecutar una sola
vez la secuencia correspondiente al caso i y que la secuencia por defecto se ejecutar si est
presente, para cualquier valor del controlador que no coincida con ningn caso.
Variable
Val_1
Acciones1
Val_2
Acciones2
ValN
AccionesN
[Default]
AccionesD
La diferencia como se implementa esta clase de ciclos con la estructura mientras, es que el
PARA maneja la inicializacin del contador y su incremento en forma automtica, es decir,
lo hace la estructura.
58
Acciones (repetir)
La diferencia especial entre la estructura hacer mientras que y la estructura mientras es que
en la primera la secuencia de instrucciones se ejecuta por lo menos una vez, antes de
evaluar la condicin de repeticin y, en la estructura mientras la condicin de terminacin
es evaluada primero y, por lo tanto, el grupo de instrucciones o campo de la sentencia
puede ser o no ejecutado.
59
Acciones (repetir)
Si
Condicin
No
Figura 18.Ciclo hacer-mientras que (do-while).
Ejercicios resueltos
Elaborar un algoritmo que, dados los dos lados diferentes de un rectngulo, encuentre el
permetro y el rea del mismo.
INICIO
Entero L1, L2, P, A;
Leer L1, L2;
P = 2 * L1 + 2 * L2;
A = L1 * L2;
EscribirEL PERIMETRO ES:, P;
EscribirEL AREA ES:, A;
FIN_INICIO
60
INICIO
LeerEDJUAN;
EDALBER = 2 * EDJUAN / 3;
EDANA = 4 * EDJUAN / 3;
EDMAMA = EDJUAN + EDALBER + EDANA;
EscribirLAS EDADES SON: ALBERTO =, EDALBER,
JUAN =, EDJUAN, ANA =, EDANA, MAMA =, EDMAMA;
FIN_INICIO
INICIO
LeerA, B;
SI ( A> B ) ENTONCES
Escribir A ES MAYOR QUE B;
SINO
SI ( A = = B ) ENTONCES
Escribir A ES IGUAL A B;
SINO
Escribir A ES MENOR QUE B;
FIN_SI
FIN_SI
FIN_INICIO
61
X=0
si
X=1
si
A <= Y < B
X=2
si
B <= Y < C
X=3
si
C <= Y
62
Disear un algoritmo que encuentre la suma de los primeros cinco nmeros naturales.
INICIO
NUM=0;
SUMA=0;
Mientras ( NUM< 5 )
NUM=NUM+1;
SUMA=SUMA+NUM;
FIN_MIENTRAS
Escribir "LA SUMA ES:", SUMA; (5) Termina el ciclo cuando NUM = 5
FIN_INICIO
INICIO
Leer NT;
TER = 17;
CONT =1; BAN = 1;
Mientras ( CONT<= NT )
EscribirTER;
SI ( BAN == 1 ) ENTONCES
TER = TER 2;
BAN = 2;
SINO
TER = TER + 3;
BAN = 1;
FIN_SI
CONT=CONT + 1;
FIN_MIENTRAS
FIN_INICIO
63
Ejercicios propuestos
1) Hacer un seguimiento (prueba de escritorio) del siguiente grupo de instrucciones.
INICIO
SUMA = 0;
X = 20;
SUMA = SUMA + X;
Y = 40;
X = X + Y ** 2;
SUMA = SUMA + X / Y;
EscribirEL VALOR DE LA SUMA ES:, SUMA;
FIN_INICIO
% descuento
02
0%
35
10%
6 10
15%
11 en adelante
20%
Determinar cunto pagar una persona que compre manzanas en esa frutera.
64
65
20) Escribir un programa en pseudocdigo que calcula la masa del aire de un neumtico de
automvil utilizando la frmula: M = (P * V) / (T + 460) * 0.37, donde: P es la presin
es psi, V es el volumen en pies cbicos, T la temperatura en grados Fahrenheit y M es
la masa del aire en libras.
21) Escribir un programa en pseudocdigo que permita calcular el espacio que recorre una
persona en un tiempo dado T a una velocidad constante V, aplicando la frmula: E = V
* T, donde: Y es el espacio recorrido por la persona en metros por segundo y T es el
tiempo empleado en segundos.
22) Escribir un programa en pseudocdigo que lea el peso actual, las caloras quemadas por
da, las caloras ingeridas por da y el peso deseado por una persona. Todo esto para
calcular e imprimir el nmero de das que tardar la persona en alcanzar el peso
deseado mediante la relacin: 3000 caloras corresponden a 1 libraperdida.
23) Qu visualizar y cuntas veces se ejecuta el siguiente bucle?
i 1;
Mientras (i<6) do
Inicio
Escribir (i);
ii + 1;
Fin;
24) Escribir un programa en pseudocdigo que lea un caracter desde el teclado y deduzca si
est situado antes o despus de la letra `m en orden alfabtico.
25) Escribir un programa en pseudocdigo que lea dos caracteres y deduzcan si estn en
orden alfabtico.
26) Escribir un programa en pseudocdigo que permita contar el nmero de letras `i que se
encuentran en una frase que se ingresa caracter por caracter a travs del teclado
terminado con un punto.
27) Escribir un programa en pseudocdigo para calcular independientemente la suma de los
nmeros pares impares comprendidos entre 1 y 100.
28) Escribir un programa en pseudocdigo para generar los n primeros trminos de la serie
de Fibonacci (1, 1, 2, 3, 5, 8, 13, etc).
29) Considerar que la serie de Fibonacci se define de la siguiente manera:
66
41) Escribir un programa en pseudocdigo que permita calcular la hora que ser dentro de
un segundo, a partir de una hora introducida por teclado en el siguiente formato: H:
horas, M: horas, M: minutos y S: segundos.
42) Escribir un programa en pseudocdigo que efecte la suma de dos nmeros ledos
desde el teclado en funcin de la respuesta S/N al mensaje Desea sumar (S) o restar
(R) .
43) Escribir un programa en pseudocdigo para leer un dato numrico comprendido solo
entre 1 y 5 (incluidos). Este algoritmo es til para seleccionar opciones de men.
44) Escribir un programa en pseudocdigo que permita repetir continuamente la frase
`Desea continuar < S/N > hasta que la entrada por teclado sea S o N.
45) Escribir un programa en pseudocdigo para calcular los cuadrados de una serie de
nmeros ingresados por teclado y deducir cuntos nmeros se han ledo.
46) Escribir un programa en pseudocdigo para leer las edades de los alumnos de una clase
y calcular su media. Para terminar el usuario deber ingresar la edad 0 (cero).
47) Escribir un programa en pseudocdigo para calcular la raz cuadrada de los nmeros
ingresados por teclado. Si es positivo visualizar el resultado, caso contrario visualizar el
mensaje `raz imaginaria y visualizar su valor. Para terminar el usuario debe ingresar 0
(cero).
68
CAPTULO 4
INTRODUCCIN AL FRAMEWORK DE .NET
En este captulo veremos cules son los principales conceptos que demos conocer para
iniciar como programadores .NET.
Para dar los primeros pasos, comenzaremos por analizar las principales caractersticas que
nos ofrece la plataforma de desarrollo .NET. Nos introduciremos en el conocimiento de las
herramientas y conceptos con los cuales tendremos que familiarizarnos para empezar a
desarrollar.
4.1.
La plataforma .NET
69
Base Class Library (BCL) o biblioteca base. Proporciona todos los componentes y
clases necesarios para el desarrollo de aplicaciones en la plataforma. stos incluyen la
mayora de las funcionalidades que los programadores aplican de manera cotidiana y,
adems, un conjunto de clases especficas de acuerdo con la tecnologa que se va a
utilizar en la creacin de aplicaciones. Todos estos componentes estn divididos en tres
grupos principales:
Windows Forms.
ADO.NET.
especificaciones del CLR y de las BCL para el desarrollo de las aplicaciones, y siguen
un estndar denominado CommonLanguageSpecification (CLS), lo que hace que sean
completamente compatibles entre s.
Existen muchos lenguajes para programar en .NET, como Visual Basic .NET, C# (CSharp), NET.COBOL, y otros.
cualquier lenguaje que cumpla con ella puede ser utilizado para desarrollar en .NET.
Herramientas y documentacin.
72
Dentro de Visual Studio, podemos realizar aplicaciones Windows y Web, servicios Web y
bibliotecas de componentes, adems acceder a bases de datos y muchas opciones ms, con
cualquier lenguaje de la plataforma provisto por Microsoft (VB.NET, C#, C++, etc.). la
idea de este IDE es que el programador no tenga que cambiar de aplicacin para realizar
todas las tares involucradas en el desarrollo de un sistema.
Como parte entorno de desarrollo de Visual Studio, podemos destacar las siguientes
secciones (figura 22):
a. Barra de herramientas. Aqu se encuentran las barras de herramientas que dan acceso
a los comandos ms comunes. De acuerdo con la tarea que estemos realizando, esta
seccin cambiar segn sean necesarios.
74
e. rea de trabajo.
e
b
4.2.
Hasta ahora conocimos la plataforma .NET y Visual Studio, sus principales caractersticas,
componentes y modo de funcionamiento. Ahora llega el turno del lenguaje C#.
C# fue creado por Microsoft con el propsito de ser el mejor lenguaje de programacin que
exista para escribir aplicaciones destinadas a la plataforma .NET. Combina la facilidad de
desarrollo propia de Visual Basic con el podero del lenguaje C++, un lenguaje con el cual
se ha escrito la mayor parte de la historia del software y de los sistemas operativos de todos
75
Lo primero que debemos saber es que podremos crear una gran diversidad de programas
utilizando este lenguaje: desde aplicaciones de consola, aplicaciones para Windows o
aplicaciones Web, hasta software para dispositivos mviles, drivers, y libreras para
Windows.
El compilador comprende que todo forma parte de la misma instruccin, hasta que
encuentra el punto y coma.
4.2.1. Tipos
Los tipos de datos que podemos usar en Visual C# son los mismos tipos de datos definidos
en .NET Framework y por tanto estn soportados por todos los lenguajes que usan esta
tecnologa. Estos tipos comunes se conocen como el CommonTypeSystem, (CTS), que
traducido viene a significar el sistema de tipos comunes de .NET. El hecho de que los tipos
de datos usados en todos los lenguajes .NET estn definidos por el propio Framework nos
asegura que independientemente del lenguaje que estemos usando, siempre utilizaremos el
mismo tipo interno de .NET, si bien cada lenguaje puede usar un nombre (o alias) para
referirse a ellos, aunque lo importante es que siempre sern los mismos datos,
independientemente de cmo se llame en cada lenguaje. Esto es una gran ventaja, ya que
nos permite usarlos sin ningn tipo de problemas para acceder a ensamblados creados con
76
otros lenguajes, siempre que esos lenguajes sean compatibles con los tipos de datos de
.NET.
Los tipos de datos de .NET los podemos definir en dos grupos:Tipos por valor y tipos por
referencia.
Veamos en la tabla 6 los tipos de datos definidos en .NET Framework y los alias utilizados
en Visual C#.
.NET Framework
C#
System.Boolean
bool
System.Byte
byte
System.Int16
short
System.Int32
int
System.Int64
long
System.Single
float
System.Double
double
System.Decimal
decimal
System.Char
char
System.String
string
System.Object
object
System.DateTime
N.A. (DateTime)
System.SByte
sbyte
System.UInt16
ushort
System.UInt32
uint
System.UInt64
ulong
4.2.2. Constantes
Para usar las constantes con nombre debemos declararlas previamente, para ello
utilizaremos la instruccin const, tal como vemos en este ejemplo:
77
constintmaximo = 12345678;
Como podemos comprobar, tenemos que utilizar una instruccin para indicar que es una
constante, (const), seguida del tipo de datos y el valor que le asignaremos a esa constante.
Siempre que tengamos que indicar un valor constante, ya sea para indicar el mximo o
mnimo permitido en un rango de valores o para comprobar el trmino de un bucle,
deberamos usar una constante en lugar de un valor literal, de esta forma si ese valor lo
usamos en varias partes de nuestro cdigo, si en un futuro decidimos que dicho valor debe
ser diferente, nos resultar ms fcil realizar un solo cambio que cambiarlo en todos los
sitios en los que lo hemos usado, adems de que de esta forma nos aseguramos de que el
cambio se realiza adecuadamente y no tendremos que preocuparnos de las consecuencias
derivadas de no haber hecho el cambio en todos los sitios que deberamos.
4.2.3. Variables
En la declaracin de las variables en Visual C#, siempre hay que indicar el tipo de datos
que tendr la variable, por la sencilla razn de que las variables definidas en C# siempre se
harn usando el tipo de datos sin necesidad de utilizar ninguna instruccin especial que
indique que es una declaracin.
En el siguiente ejemplo, estamos declarando una variable de tipo int y otra de tipo double:
int i;
double m;
int a, b, c;
78
Cuando declaramos variables en C#, estas estarn en un estado "no iniciado", es decir, no
tendrn ningn valor inicial asignado de forma automtica.Por tanto, si queremos que en
C# tengan un valor inicial, tendremos que asignarlos de forma expresa.Por ejemplo:
int a = 10;
Si queremos declarar ms de una variable pero con tipos diferentes tendremos que
separarlas con un punto y coma, que es la forma de decirle al compilador que es una nueva
instruccin.
Como es natural, a una variable podemos asignarle el contenido de una constante "con
nombre" que previamente hayamos declarado, esa asignacin tambin podemos hacerla al
declarar la variable:
constintmaximo = 12345678;
int i = maximo;
4.2.4. Expresiones
Para escribir expresiones en C# debe escribir el nombre de la variable que tomar el valor,
seguido del operador = (no confundirlo con el operador lgico de igualdad) y a su
derecha el valor o clculo correspondiente. Por ejemplo:
miVariable = 57;
79
4.2.5. Operadores
C# proporciona un amplio conjunto de operadores, algunos de los cuales se presentan en la
tabla 7.
Smbolo
Significado
Aritmticos
Suma
Resta
Multiplicacin
Divisin (real)
Resto de la divisin
++
Incremento
--
Decremento
Relacionales
<
Menor que
>
Mayor que
==
Igual que
<=
>=
!=
Diferente
Lgicos
&&
Conjuncin
||
Disyuncin
Negacin
Tabla 7. Operadores en C#
80
4.3.
Sentencias
Sentencia if.
if
if( condicin )
{
//bloque de cdigo que se ejecuta si la condicin es verdadera
}
ifelse
if(condicin)
{
//bloque de cdigo que se ejecuta si la condicin es verdadera
}
else //caso contrario
{
//bloque de cdigo que se ejecuta si la condicin es falsa
}
ifelseifelse
if(condicin)
{
//bloque de cdigo que se ejecuta si la condicin es verdadera
}
elseif(condicin) //caso contrario
{
81
Sentencia switch
switch( variable )
{
case valor1:
//bloque de cdigo a ejecutar para el primer caso
break;
case valor2:
//bloque de cdigo a ejecutar para el segundo caso
break;
default:
//bloque de cdigo a ejecutar para el caso por defecto
break;
}
Sentencia while
while( condicin )
{
//bloque de cdigo a ejecutar
}
82
Sentencia dowhile
do
{
//bloque de cdigo a ejecutar
} while( condicin );
Sentencia for
for(variable=valorInicial; condicin; incremento o decremento)
{
//bloque de cdigo a ejecutar
}
Ejercicios resueltos
Elaborar un algoritmo que, dados los dos lados diferentes de un rectngulo, encuentre el
permetro y el rea del mismo.
83
edades
son.
Alberto={0},
Juan={1},
Ana={2},
Mam={3}",EDALBER,EDJUAN,EDANA,EDMAMA);
int A,B;
Console.WriteLine("Ingrese dos nmeros:");
A = Convert.ToInt32(Console.ReadLine());
B = Convert.ToInt32(Console.ReadLine());
if (A > B)
{
Console.WriteLine("A ES MAYOR QUE B");
}
else
{
84
if (A == B)
Console.WriteLine("A ES IGUAL A B");
else
Console.WriteLine("A ES MENOR QUE B");
}
Disear un algoritmo que encuentre la suma de los primeros cinco nmeros naturales.
}
else
{
TER = TER + 3;
BAN = 1;
}
CONT = CONT + 1;
}
Ejercicios propuestos
Implemente los programas correspondientes para cada uno de los algoritmos propuestos en
el captulo 3.
86
CAPTULO 5
MODULARIDAD Y REDUCCIN DE COMPLEJIDAD
A lo largo del texto se han tratado los problemas como un todo, como si fuesen un solo
mdulo. Una de las grandes ventajas que tiene la programacin estructurada es la divisin
de problemas grandes en subproblemas y, a su vez, stos tambin pueden dividirse en
problemas ms pequeos. Esta tcnica le permite dar ms entendibilidad y facilidad en la
construccin y correccin de los errores que se presentan en la solucin de un problema
determinado. Cada una de las divisiones que se hacen para obtener la solucin de un
problema se denomina mdulo y stos son implementados por medio de los subprogramas.
El subprograma, por ser un algoritmo, debe cumplir con las mismas caractersticas de ste y
hacer tareas similares como aceptar datos, escribir datos y hacer clculos; sin embargo, es
utilizado para un propsito especfico. El subprograma recibe datos del algoritmo o
87
subalgoritmo que lo invoca y ste le devuelve resultados. Su labor puede compararse con la
de un jefe que le da instrucciones a un empleado (Subprograma), para que realice una
determinada labor y as poder continuar con su trabajo; se detiene mientras su subalterno
realiza la tarea y cuando ste le devuelve los resultados reanuda su labor. As mismo,
cuando un algoritmo invoca un subprograma le cede el control de ejecucin a ste, por lo
tanto, detiene la ejecucin de la prxima instruccin hasta que el subprograma se ejecute, le
entregue resultados y le devuelva el control de ejecucin.
Un subprograma puede ser invocado tantas veces como se necesite y, a su vez, los
subprogramas pueden invocar a otros subprogramas, como puede verse en la figura
siguiente.
En la figura 21 las flechas indican el flujo de ejecucin del algoritmo; observe que cuando
se ejecuta una instruccin de llamada a un subprograma, el algoritmo llamante se detiene,
ya que no solamente le transfiere informacin al subprograma sino tambin el control de
ejecucin; esto hace que se active el subprograma, se les d valor a las variables que lo
conforman y se ejecuten una a una las instrucciones. Una vez que finaliza su ejecucin,
tiene la informacin requerida por el algoritmo llamante; por lo tanto, se la entrega y
devuelve el control de ejecucin a la instruccin siguiente o a la misma instruccin desde
donde fue llamado, dependiendo de la clase de subprograma.
En la figura 23 tambin se muestra que un algoritmo puede invocar las veces que sea
necesario al mismo subprograma y que un subprograma puede, a su vez, invocar a otros
subalgoritmos.
88
<Instrucciones 1>
<Llamada uno a A>
<Instruccin 3>
Pasa
informacin
cede control
Retorna
control e
informacin
Subprograma
A
<Instrucciones>
Pasa
informacin
cede control
Retorna
control e
informacin
<Instruccin i>
Subprograma
B
Llamada a C
Pasa
informacin
cede control
Retorna
control e
informacin
<Instruccin i>
Cede control
Retorna
control
Subprograma
C
<Instrucciones>
Subprograma
A
<Instrucciones>
<Instruccin n>
La divisin de los subprogramas se hace con base en el nmero o cantidad de valores que el
subprograma le enva al programa o subprograma llamante. As distinguiremos entre
procedimientos y funciones.
89
5.1.
Procedimientos
El nombre dado al subprograma debe cumplir con las normas para conformar nombres de
variables.
Los parmetros son una lista de campos variables separados por comas y son utilizados
para establecer la comunicacin entre el mdulo que lo activa y el subprograma. Unos
parmetros sern de recibo (almacenan la informacin que les enva el mdulo que los
invoca) y otros de envo de informacin (la transfieren a quien invoca el subprograma).
Los parmetros de reciboson las variables que van a recibir informacin del mdulo que
los invoca, similares a los datos de entrada que se han detectado en los algoritmos
anteriores, con la diferencia de que a los datos de entrada se les transfiere informacin a
travs de una instruccin de lectura y a los parmetros de recibo se les da informacin a
travs del mdulo que invoca el subprograma; o sea, que es un asignamiento de
informacin automtica desde las variables que envan informacin, desde el mdulo
llamante, hacia los parmetros de recibo del subprograma.
Los parmetros de envo son los parmetros que envan informacin al mdulo que invoca
al subprograma, semejante a los datos de salida de los algoritmos, con la diferencia de que
90
los parmetros de envo le entregan la informacin a las variables que la reciben dentro del
mdulo llamante.
El subprograma no inicia ni termina por s mismo; por lo tanto, necesita ser activado
(hacerlo funcionar, invocarlo, llamarlo) desde un mdulo externo. Esto se hace cuando el
mdulo llamante necesita la ayuda para una labor especfica que hace el mdulo
subordinado. La activacin se hace a travs de la siguiente instruccin.
Nombre (Argumentos)
Los argumentos son nombres de campos(constantes o variables), que usa el mdulo y que
tienen una correspondencia biunvoca con los parmetros con los cuales se construy el
subprograma; por lo tanto, estos deben ser iguales en nmero y en tipo de dato que los
parmetros, ya que a cada argumento le corresponde un parmetro y viceversa.
Los argumentos tambin son de dos clases: unos que envan informacin al subprograma y
otros que reciben informacin.
5.2.
Funciones
Son subprogramas que le devuelven al programa o subprograma que los invoca un nico
valor. El valor que stas devuelven lo hacen a travs de una variable involucrada en una
instruccin de retorno, dentro del conjunto de instrucciones, o en el nombre de sta; por lo
tanto, este tipo de subprogramas en su encabezamiento slo tienen parmetros de recibo.
Las funciones devuelven el control de ejecucin a la misma instruccin desde donde se
llaman.
91
92
El valor que devuelve la funcin (sentencia return) debe ser asignado a una variable, la cual
debe ser del mismo tipo de dato del valor que devuelve la funcin (no puede existir
incompatibilidad de tipos de datos):
Una variable de tipo de valor contiene directamente los datos, a diferencia de una variable
de tipo de referencia, que contiene una referencia a los datos. Por lo tanto, pasar una
variable de tipo de valor a un mtodo significa pasar una copia de la variable al
mtodo.Cualquier cambio en el parmetro que se produzca dentro del mtodo no afectar a
los datos originales almacenados en la variable.
El paso de parmetros por referencia permite a los miembros de funciones cambiar el valor
de los parmetros y hacer que ese cambio persista en el entorno que procede de la
llamada.Para pasar un parmetro por referencia, utilice una de las palabras clave refoout.
En este tema, para simplificar, slo se utiliza la palabra clave ref.
Tipo_datonombre_Parmetro
refTipo_datonombre_Parmetro
93
Ejercicios resueltos
Elaborar una funcin que encuentre el valor mayor en un conjunto de 3 nmeros reales
diferentes.
94
Ejercicios propuestos
Implemente los programas correspondientes para cada uno de los algoritmos propuestos en
el captulo 3, utilizando procedimientos y/o funciones.
95
CAPTULO 6
FUENTES ELEMENTALES DE DATOS
En los captulos anteriores se ha manejado el concepto de campo variable como uno o ms
caracteres, a los que se le asigna un espacio en memoria donde se puede guardar en forma
temporal un nico valor, bien sea numrico, carcter o lgico.
Los datos siempre que estn relacionados se pueden organizar en estructuras, de tal manera
que podemos tener un conjunto de datos numricos, lgicos, o caracteres manejados a
travs de un mismo nombre de variable. Una estructura de datos es la organizacin que
reciben los datos para que sean tratados como una unidad.
Existen varias formas de organizar los datos o valores que maneja un algoritmo, los ms
comunes son los arreglos y los archivos de datos.
Un arreglo es un conjunto finito de componentes del mismo tipo, los cuales se diferencian o
relacionan a travs de un subndice.
Todas las componentes pertenecientes, llamadas tambin elementos del arreglo, estn una a
continuacin de otra, tienen el mismo tamao o espacio en memoria, son todas de un
mismo tipo de dato y, por lo tanto, tienen igual forma de almacenamiento.
Para manejar en forma independiente cada componente del arreglo se usa un ndice, que es
una expresin de tipo entero (sin decimales) que indica cul de los elementos del arreglo
queremos relacionar. Siempre que se quiere trabajar o mencionar una componente es
96
necesario adicionar el ndice al nombre genrico del arreglo; es ste el que hace
independiente una de otra.
Ejemplos de ndices:
IDX
k+i
i * jota 1
Cuando al nombre del arreglo se le adiciona el ndice, bien sea entre parntesis o corchetes,
la componente al cual hace referencia el ndice es tomada como una variable simple, igual a
las que en captulos anteriores se han venido tratando; por lo tanto, puede estar involucrada
en una expresin, en una entrada o salida de datos, o en una asignacin.
Donde el nombre es el que se ha escogido para todos los elementos del arreglo, y cada
rectngulo representa las componentes o elementos que lo conforman.
Si los valores 30, 15, 20, 60 y 80 representan las edades de cinco personas y queremos
tener almacenada esta informacin en memoria para ser utilizada en un proceso por
computadora, perfectamente podemos guardarla en cinco nombres de variables distintas
como EDAD1, EDAD2, EDAD3, EDAD4 y EDAD5; pero qu pasa si no son cinco sino
mil edades, o ms de mil?, sin duda que se convierte en un proceso engorroso y difcil de
manejar, pero que se puede solucionar almacenando esa informacin en un arreglo, que en
este caso sera de una dimensin. Si se escoge el nombre EDAD como nombre del arreglo
para identificar el conjunto de las 5 edades, internamente en memoria se separan cinco
espacios (direcciones de memoria) adyacentes para almacenar en el momento oportuno la
informacin requerida. Si un programa utiliza la variable tipo arreglo EDAD, despus de la
compilacin suceder lo siguiente:
MEMORIA
EDAD[0]
<BASURA> Direccin X
EDAD[1]
<BASURA> Direccin X + 1
EDAD[2]
<BASURA> Direccin X + 2
EDAD[3]
<BASURA> Direccin X + 3
EDAD[4]
<BASURA> Direccin X + 4
Donde cada elemento del vector EDAD se puede procesar como si fuese una variable
simple, al ocupar cada uno una posicin de memoria diferente; esto implica que en los
arreglos el acceso a un elemento se hace en forma directa, es decir, que cualquier elemento
se puede referenciar sin necesidad de accesar los anteriores a l.
Las siguientes dos instrucciones muestran la independencia que tiene cada una de las
variables que pertenecen al arreglo, al adicionar el ndice.
Si los valores de las tres variables descritas en la instruccin de la lectura son en su orden
30, 20 y 80, al ejecutarse las instrucciones anteriores suceder lo siguiente:
MEMORIA
EDAD[0]
30
Direccin X
EDAD[1]
<BASURA>
Direccin X + 1
EDAD[2]
20
Direccin X + 2
EDAD[3]
<BASURA>
Direccin X + 3
EDAD[4]
80
Direccin X + 4
En general se puede decir que EDAD[ i] hace referencia al contenido que tiene la
componente o elemento ubicado en la posicin i del arreglo EDAD, donde 0 i 4.
Los arreglos pueden ser utilizados como acumuladores o contadores, inicializando cada uno
de sus elementos. Por ejemplo, llevar cero a cada uno de los elementos del arreglo EDAD.
INDICE = 0;
while (INDICE <= 4)
{
EDAD [INDICE] = 0;
INDICE = INDICE + 1;
}
No olvide que, al igual que cualquier otra variable, primero debe declarar un arreglo antes
de utilizarlo. Su declaracin se realiza de la siguiente manera:
Tipo_dato [ ] nombre_Vector;
99
La declaracin especifica que todos los elementos del vector son del mismo tipo de dato.
Mediante los corchetes se indica al compilador de C# que quiere crear una variable de tipo
arreglo unidimensional y finalmente el nombre que tendr.
byte [ ] EDAD ;
EDAD = new byte[5];
Debe recordar especificar el tipo del arreglo cuando use la palabra clave new, aunque ya se
haya especificado el tipo cuando la declar. Si olvida hacerlo, obtendr un mensaje de
error del compilador.
6.2.
Cadenas de caracteres
Una cadena es un objeto de tipo String cuyo valor es texto. Internamente, el texto se
almacena como una coleccin de slo lectura de objetos Char.
En C#, la palabra clave string es un alias de String. Por lo tanto, String y string son
equivalentes y puede utilizar la convencin de nomenclatura que prefiera. La clase String
proporciona numerosos mtodos para crear, manipular y comparar cadenas de forma
segura. Adems, el lenguaje C# sobrecarga algunos operadores para simplificar operaciones
comunes de las cadenas
Puede declarar e inicializar cadenas de varias maneras, como se muestra en los ejemplos
siguientes:
string mensaje1;
100
stringstr = "test";
char x = str[2]; // x = 's';
Utilice literales de cadena regulares cuando tenga que incrustar caracteres de escape
proporcionados por C#, como se muestra en el ejemplo siguiente:
Columna 2
Columna 3
101
Utilice cadenas textuales para mayor comodidad y una mejor legibilidad cuando el texto
de la cadena contiene caracteres de barra diagonal inversa, por ejemplo en rutas de
acceso de archivo.
stringfilePath = @"C:\Users\scoleridge\Documents\";
6.3.
Bsqueda.
La bsqueda consiste en encontrar un determinado valor dentro de un conjunto de datos,
para recuperar alguna informacin asociada con el valor buscado.
Existen diferentes formas de hacer esta operacin. Es una tcnica sencilla para buscar un
elemento dentro de un arreglo, y consiste en recorrer todo el vector elemento a elemento
desde el primero hasta el ltimo. Si se encuentra el valor buscado, el proceso devolver la
posicin donde se encuentra dicho elemento, de lo contrario se enviar un mensaje que
informe que el valor buscado no se encuentra dentro del arreglo.
Ordenacin.
Otra operacin muy comn con arreglos es la ordenacin. La ordenacin se refiere a la
operacin de organizar los elementos de un vector en algn orden dado: ascendente o
102
80
55
35
21
15
55
80
35
21
15
55
35
80
21
15
55
35
21
80
15
55
35
21
15
80
103
35
55
21
15
80
35
21
55
15
80
35
21
15
55
80
Tercera pasada:
21
35
15
55
80
21
15
35
55
80
55
80
Cuarta pasada:
15
21
35
Insercin.
Esta operacin consiste en adicionar un nuevo elemento al arreglo. Se debe tener en cuenta
que no se sobrepase el tamao dado en la definicin del arreglo. La operacin puede darse
con un arreglo desordenado u ordenado. Si el arreglo est desordenado la operacin es
simple, se incrementa en uno el nmero de elementos y en esa posicin (N+1), se inserta el
nuevo elemento.
Borrado.
Consiste en eliminar un elemento del arreglo; puede darse cuando el arreglo est
desordenado u ordenado. Para hacer el proceso hay que:
Enviar un mensaje en caso de que el elemento a borrar no est dentro del arreglo.
Puede mirarse una matriz como un vector de vectores; por lo tanto, es un conjunto de
componentes en el que se necesitan dos subndices para identificar un elemento que
pertenezca al arreglo.
Filas
0
1
2
3
4
Figura 26. Representacin grfica de una matriz (A).
105
El arreglo anterior tiene 35 elementos, todos ellos con el nombre A y se diferencian entre s
por dos ndices; el primero indica la fila donde est ubicado el elemento y el segundo la
columna. El elemento A[2, 4] hace referencia al contenido del elemento ubicado en la fila 2
columna 4.
Cualquier elemento del arreglo puede referenciarse en forma directa, siempre que al
nombre del arreglo se le adicionen los dos ndices. La instruccin LEA: A[0, 0], A[4, 6],
A[2, 4], A[4, 2], A[2, 2] tiene como efecto entrar 5 valores al arreglo A; si estos valores
son: 10, 15, 40, 99 y -1, y el almacenamiento interno ser (figura 27):
Columnas
0
Filas
10
1
2
-1
40
3
4
99
15
Para llevar informacin a todo el arreglo se puede hacer de dos formas: una ser llenando
primero la fila uno, luego la fila 2, hasta la fila N; y la otra sera llenando primero la
columna uno, luego la dos y as sucesivamente hasta llenar la columna M, todo depender
106
de la forma como se encuentren dispuestos los datos en el archivo de entrada. Por ejemplo:
llevar informacin a la matriz A del ejemplo anterior.
Para resolver el problema se necesitan dos ciclos, uno externo que controle las filas y otro
interno que por cada valor que tome la variable de control del ciclo externo recorra todas
las columnas.El algoritmosera:
Tenga presente que, al igual que los vectores, primero debe declarar una matriz antes de
utilizarla. Su declaracin se realiza de la siguiente manera:
Tipo_dato[ , ] Nombre_Matriz;
Nombre_Matriz = new Tipo_dato[filas, columnas];
Ejercicios resueltos
bidimensional para las notas. Adems deber crear los procedimientos y/o funciones
que considere necesarios, pasando como parmetros los arreglos antes mencionados,
segn corresponda.
107
ingresar(nomina,notas);
Console.WriteLine("\nLISTADO DE ALUMNOS");
Console.WriteLine("Nombres\tN1\tN2\tN3");
mostrar(nomina,notas);
notas[i, j] = Convert.ToSingle(Console.ReadLine());
}
}
}
Console.WriteLine();
}
}
109
Ejercicios propuestos
1) Elaborar un programa que entre 5 valores y los almacene en un vector e imprimir el
vector.
3) Usando el arreglo anterior, escribir los elementos cuyos valores sean mltiplos de 3.
4) Elabore un programa que entre una serie de valores, los almacene en un vector y sume
los elementos de las posiciones pares e impares por separado.
5) Hacer un programa que calcule el promedio de los elementos de un vector y forme dos
nuevos arreglos, uno con los elementos menores o iguales al promedio y otro con los
superiores. Imprima los dos nuevos arreglos.
6) Elaborar un programa que lea una matriz por filas y la imprima por columnas
7) Elaborar un programa que lea el orden de una matriz y sus elementos y encuentre los
elementos mayor y menor y sus posiciones.
10) Elaborar un algoritmo que llene una matriz de orden N con ceros, excepto las dos
diagonales que deben contener unos.
110
BIBLIOGRAFA
Ferguson, Jeff. . Et. Al. (2003). La Biblia de C#. Anaya Multimedia. Espaa.
acato, Jos. (1998). Cmo disear algoritmos para computadoras. Editorial Parra.
Ecuador.
111