Libro de Programacion
Libro de Programacion
Escuela Informtica
Fundamentos de
Programacin
Texto Gua de la
Escuela Informtica
Fundamentos de
Programacin
Autores:
Orlando Erazo Moreta
Andrea Ziga
Washington Chiriboga
- 2014 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.
Para un ptimo aprovechamiento se recomienda, en cada captulo hacer una lectura o
revisin rpida a fin de obtener una visin global de la temtica. En una segunda lectura,
hacerlo con mayor detenimiento, comprendiendo y asimilando cada tema expuesto,
llegando al nivel de los detalles expuestos.
Se espera con la ayuda de este texto, el estudiante logre introducirse en el manejo de un
lenguaje de alto nivel, como lo es Visual C#, implemente algoritmos sencillos y adquiera
las bases necesarias para iniciarse en el desarrollosoftware orientado a satisfacer las
necesidades de procesamiento de informacin y soporte a las decisiones estratgicas de las
organizaciones.
CONTENIDO
Tema
PORTADA
PORTADILLA
PREFACIO
CONTENIDO
INTRODUCCIN
Pgs.
1
2
3
4
7
9
11
13
21
22
24
26
CAPTULO 2. ALGORITMOS
2.1. Problemas y modelos
2.2. Pasos para la solucin de un problema a travs del computador
2.3. Algoritmos
2.4. Valor de los smbolos en un modelo algortmico
Ejercicios resueltos
Ejercicios propuestos
29
29
30
31
36
44
45
47
48
50
51
54
57
60
64
69
69
70
72
74
75
76
77
4
4.2.3. Variables
4.2.4. Expresiones
4.2.5. Operadores
4.3. Sentencias
Ejercicios resueltos
Ejercicios propuestos
78
79
80
83
86
87
90
91
93
94
95
96
97
100
102
100
107
110
BIBLIOGRAFA
ANEXOS
Anexo 1: Ejercicios Propuestos
111
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.
El desarrollo de software al igual que la msica, la escultura o la pintura es una
actividad creativa y, hasta si se quiere, artstica. Es una actividad en la que una persona (el
programador) debe plasmar una idea en un programa que alguien usar luego. Y es muy
probable que esa idea sea algo totalmente novedoso, algo que nadie antes ha visto. Y ver
esa idea traducida en software produce una sensacin de gran satisfaccin al saber que hizo
algo diferente, algo creado con sus propias manos (y mucho razonamiento).
Ser programador no es fcil, pero es divertido. Desarrollar software es, definitivamente,
una tarea compleja. Deberemos ser capaces de interpretar al usuario (inicialmente el
docente), de entender qu es lo que necesita (aunque muchas veces l mismo no sabe qu es
lo que necesita). Pasaremos largas horas pensado un algoritmo que resuelva el problema de
nuestro cliente de la mejor manera.
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
6
CAPTULO 1
CONCETOS 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
Es el trabajo del
El
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.
Esta unidad de aprendizaje est dedicada exclusivamente al software, por lo que no se
revisar la parte correspondiente al hardware, cuyo estudio se lleva a cabo en Fundamentos
de Computacin.
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.
Campo.- Un campo es un espacio de almacenamiento para un dato en particular; es un
grupo de caracteres que se pueden tratar como una unidad de informacin simple. En las
bases de datos, un campo es la mnima unidad de informacin a la que se puede acceder; un
campo o un conjunto de ellos forman un registro, donde pueden existir campos en blanco,
siendo ste un error del sistema. En las hojas de clculo los campos son llamados celdas. La
mayora de los campos tienen atributos asociados a ellos. Por ejemplo, algunos campos son
numricos mientras otros almacenan texto, tambin vara el tamao de estos.
Adicionalmente, cada campo tiene un nombre.
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.).
Archivo.- Es una unidad de software utilizada para almacenar informacin en forma
masiva, relacionada con una determinada entidad, persona o cosas. Ejemplo: suponga que
la compaa A tiene 100 clientes y que se mantiene la siguiente informacin acerca de cada
uno de ellos: nombre, direccin, balance de crdito, descuento permitido. La informacin
individual de cada cliente se denomina registro y un conjunto de registros formar un
archivo, es decir, un archivo de datos de los registros de los clientes. Los archivos pueden
tenerse en varias formas y en diferentes medios de almacenamiento.
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
documentos y textos impresos en papel e indexados para su consulta. En la actualidad, y
debido al desarrollo tecnolgico de campos como la informtica y la electrnica, la mayora
11
de las bases de datos estn en formato digital (electrnico), que ofrece un amplio rango de
soluciones al problema de almacenar datos.
Existen programas denominados sistemas de gestin de bases de datos, abreviado SGBD
(DBMS), que permiten almacenar y posteriormente acceder a los datos de forma rpida y
estructurada
Consiste de un
Lenguajes mquina.
Lenguaje de bajo nivel (ensamblador).
Lenguajes de alto nivel.
Antes de continuar con estos tipos de lenguajes es necesario hablar de las instrucciones.
Los diferentes pasos (acciones) de un algoritmo se expresan en los programas como
instrucciones, sentenciaso proposiciones (normalmente el trmino instruccin se suele
referir a los lenguajes mquina ybajo nivel, reservando la sentencia o proposicin para los
lenguajes de alto nivel). Por consiguiente, unprograma consta de una secuencia de
instrucciones, cada una de las cuales especifica ciertas operacionesque debe ejecutar la
computadora.
13
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 elconocido
cdigo binario.
Las instrucciones en lenguaje mquina dependen del hardware de la computadora y, por
tanto, diferirnde una computadora a otra. El lenguaje mquina de un PC (computadora
personal) ser diferentede un sistema HP (Hewlett Packard), Compaq o un sistema de IBM.
14
Para evitar los lenguajes mquina, desde el punto de vista del usuario, se han creado otros
lenguajesque permiten escribir programas con instrucciones similares al lenguaje humano
(por desgracia casisiempre 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, queellos, dependen de la mquina en particular. El
lenguaje de bajo nivel por excelencia es el ensamblador (assemblylanguaje). Las
instrucciones en lenguaje ensamblador son instrucciones conocidas como nernotcnicos.
Por ejemplo, nemotcnicos tpicos de operaciones aritmticas son: eningls, ADD, SUB,
DIV, etc.; en espaol, SUM, RES, DIV, etc.
Una instruccin tpica de suma sera:ADD M, N, P
Esta instruccin poda significar: sumar el nmero contenido en la posicin de memoria M
al nmero almacenado en la posicin de memoria N y situar el resultado en la posicin de
memoria P. Evidentemente,es mucho ms sencillo recordar la instruccin anterior con un
nemotcnico que su equivalenteen cdigo mquina:
0110 1001 1010 1011
15
Programa fuente en
Lenguaje ensamblador
(assembly)
Programa
ENSAMBLADOR
(assembler)
Programa objeto en
cdigo mquina
otros lenguajes.
La escritura de programas se basa en reglas sintcticas similares a los lenguajes
humanos. Nombres de las instrucciones, tales como READ, WRITE, CLEAR, etc.
17
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 lenguajesde alto nivel a cdigo mquina.
Los traductores se dividen en:
Compiladores.
Intrpretes.
18
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.
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.
20
21
Contenido
999
998
997
01000001
.
.
22
.
3
2
1
0
00000101
00000011
00000010
5
3
2
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.
Los campos pueden ser de dos clases: variables y constantes.
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
un valor al mismo tiempo. Esta clase de campos, que en lo sucesivo se denominarn
simplemente variables, se identifican por un nombre con el cual actan durante todo el
transcurso del proceso, por lo tanto, deben ser nicos. El nombre dado a la variable
constituye un IDENTIFICADOR, y debe iniciar con una letra seguida, si se quiere, de
letras o dgitos. Es el programador quien da nombre a sus variables teniendo en cuenta la
regla anterior.
23
B1
C1AZ
NOMBRE
SALARIOHORA
Campos constantes.
Es otra forma de manejar el grupo de elementos asignados en memoria, pero que a
diferencia de las variables su contenido no puede cambiar durante el proceso. Esta clase de
campos se identifica directamente por la informacin que tiene almacenada y es asignada
desde el momento en que se hace la compilacin. Pueden existir campos constantes, o
simplemente constantes, de tipo numrico, carcter o lgico. Por ejemplo:
24
40,6
ANAISABEL
-10
.V.
Ejercicios propuestos
1.
Con sus propias palabras, explique cada uno de los siguientes trminos. Si es
necesario consulte otras fuentes.
2.
Informtica
Computacin
Ingeniera de Sistemas
Dato
Informacin
Sistema
Sistema de informacin
Programa
Lenguaje de programacin
Instruccin
Cdigo fuente
Cdigo (programa) objeto
Lenguaje mquina
Lenguaje ensamblador
Traductor
Compilador
Intrprete
Ensamblador
Editor
Campo
Registro
Archivo
Base de datos
Variable
Constante
Direccin de memoria
Bit
Byte
Qu tipos de datos se conoce? Escribir una breve descripcin y cinco ejemplos de
3.
4.
5.
l) 0.00001
27
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.
Si es posible expresar ciertos aspectos de un problema con un modelo formal, por lo
general resulta beneficioso hacerlo, pues una vez que el problema se formaliza, pueden
buscarse soluciones en funcin de un modelo preciso y determinar si ya existe un programa
que resuelve tal problema; aun cuando no sea tal el caso, ser posible averiguar lo que se
sabe acerca del modelo y usar sus propiedades como ayuda para elaborar una buena
solucin.
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.
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
28
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.
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
30
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.
31
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.
Inicio.
Obtener (leer) el primer y el segundo nmero.
Sumar los dos nmeros.
Almacenar (asignar) el resultado anterior en la variable suma.
Presentar (mostrar) el valor de la suma.
Fin
relacionadas por medio de segmentos de recta, con flechas que determinan el orden
lgico de un algoritmo, en donde la forma de una figura geomtrica indica la accin a
seguir.
Inicio / fin
Entrada de datos
Proceso
Pantalla
Impresora
Figura 4. Smbolos de un diagrama de flujo.
Los smbolos o bloques para diagramar existen en gran cantidad y de diversas formas.
Decisin
En la figura 4, se exponen algunos de ellos.
Ejemplo: Elaborar un diagrama de flujoConector
para calcular la suma de dos nmeros.
Inicio
N1, N2
SUMA = N1 + N2
SUMA
Pseudocdigo. Consiste en una serie de
normas sintcticas y gramaticales, parecidas a
las de un lenguaje de programacin, pero sin tanta rigidez, y con cierta libertad en el
uso y en la combinacin de las palabras.
Fin
Ejemplo: Disear un algoritmo utilizando pseudocdigos para calcular suma de dos
nmeros.
Inicio
33
2.4.
34
Rango de valores
Sin signo
Con signo
0 a 255
-128 a +127
0 a 65535
-32768 a +32767
0 a 4294967295
-2147483648 a +2147483647
Tabla 1. Tipo de datos enteros.
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.
Tamao
(bits)
32
64
Intervalo aproximado
-3.4 10 38 a +3.4 10 38
5,0 10 324 a 1,7 10 308
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.
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.
36
Aritmticos. Para tratar los nmeros se utilizan operadores aritmticos, que, junto con
las variables numricas forman expresiones aritmticas.
operadores aritmticos:
Smbolo
+
*
/
^
DIV ( \ )
MOD ( % )
Significado
Suma
Resta
Multiplicacin
Divisin (real)
Potenciacin
Divisin (entera)
Resto de la divisin
Resultado
428
418
132
4.6
16
4
3
Smbolo
<
>
==
<=
>=
! = (<>)
Significado
Menor que
Mayor que
Igual que
Menor o igual que
Mayor o igual que
Diferente
Resultado
True
False
True
True
False
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
Tabla 5. Operadores lgicos.
Ejemplos:
Expresin
True AND True
False OR False
NOT False
Resultado
True
False
True
Prioridad de operadores.
38
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.
La prioridad de los operadores a la hora de evaluar cualquier expresin es:
Parntesis.
Potencias.
Productos y divisiones.
Sumas y restas.
Relacionales.
Lgicos.
DESCRIPCIN
TIPO DE DATO
DEL
TIPO DE DATO
DEL
abs (x)
arctan (x)
cos (x)
exp (x)
ln (x)
log (x)
round (x)
sen (x)
sqr (x)
sqrt (x)
tan (x)
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
Seno de x
Cuadrado de x
Raz cuadrada de x
Tangente de x
ARGUMENTO (X)
Entero o real
Entero o real
Entero o real
Entero o real
Entero o real
Entero o real
Real
Entero o real
Entero o real
Entero o real
Entero o real
RESULTADO
Entero o real
Real
Real
Real
Real
Real
Entero
Real
Real
Real
Real
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.
40
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.
Resultado
V
F
F
41
!L
(Z > 100) AND (X< 3) AND ( ! L )
F
F
Ejercicios propuestos
1) Haga un procedimiento que describa los pasos para cruzar una calle por un puente
2)
3)
4)
5)
peatonal.
Describa los pasos necesarios para llevar una amiga(o) al cine.
Describa los pasos para cambiar una bombilla quemada.
Escribir un algoritmo para la bsqueda de una palabra en un diccionario.
Escribir un algoritmo para realizar un depsito bancario
Considere dos casos:
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)
g) (4 es impar) y (`A >`B) o (5>2) y no ((2>3) y (4<2))
h) z ((j mod 3) + y )) < (4n (8 mod 3)) Si z= -3 E 2, j= -2, y=-2.87
i) trunc (- (3 *z + x)) / (5 mod i) <=(z x /10) n (1 / 2) Si z =-0.8 E 2, i =8 y x = -11.5
j) no (1.87>x)y(x>=z+(sqrt(49)mod4)) Si x vale 7 y z= round (ln(20))
11) Escriba las siguientes expresiones algebraicas como expresiones algortmicas:
42
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)
43
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.
3.1.
Algoritmos bsicos
Accin1
Accin2
AccinN
Variable = valor
Variable valor
Pseudocdigo:
Variable = valor;
45
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.
Cuando la variable de la izquierda se encuentra tambin en la derecha formando parte
de una expresin, esta variable cambia de valor tanto en la izquierda como en la derecha
despus de ejecutarse la asignacin.
Variable
Pseudocdigo:
Tipo_dato variable; //Primero declarar la variable
Leer Variable;
Var1, Var2
Mensaje
Var1, Var2
Pseudocdigo:
Escribir Mensaje;
Escribir Var1, Var2;
46
3.2.
INICIO
Entero B, H, A;
Escribir rea de un tringulo;
Escribir Ingrese base y altura;
A = ( B * H ) / 2;
Escribir rea del tringulo: , A;
FIN_INICIO
B, H
A=(B*H)/2
rea
del tringulo:
, A al usuario introducir a travs del teclado dos nmeros
Elabore un
algoritmo
que permita
Inicio
INICIO
Entero
B, A, aux; los valores de las variables e
en las variables A y B, e imprimirlas. Luego,
intercambiar
Escribir Intercambio de variables;
Fin
Intercambio
definal
variables
imprimir
el contenido
de las variables
(figura
10). A y B;
Escribir
Ingrese
Ingrese A y B
A, B
Leer A, B;
Escribir Contenido original: , A, B;
Aux = A;
A = B;
B = Aux;
Escribir Luego de intercambio: , A, B;
FIN_INICIO
Contenido original: , A, B
Aux = A
A=B
B = Aux
Luego de intercambio: , A, B
Fin
47
3.3.
Condicin
No
Pseudocdigo:
SI ( Condicin ) ENTONCES
Acciones;
FIN_SI
Si
Acciones
48
No
Condicin
Acciones 1
Acciones 2
Pseudocdigo:
SI ( Condicin ) ENTONCES
Acciones 1;
SINO
Acciones 2;
FIN_SI
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
49
Acciones 4
Acciones 3
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 1
Acciones 2
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.
50
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.
No
Condicin
Pseudocdigo:
Mientras ( 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.
El contador es una variable que se incrementa o disminuye en un valor constante cada
que ocurre una accin o suceso. La forma general de los contadores es la siguiente:
CONTADOR = CONTADOR + <valor constante>
51
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.
La bandera es utilizada dentro de la programacin como un seleccionador de una de dos
alternativas a seguir dentro del algoritmo. Antes de llegar a la expresin que se utilice
para bifurcar la ejecucin, la bandera debe tener asignado uno de los dos valores.
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).
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.
Estructura caso o seleccin mltiple (case, switch).
Esta estructura permite seleccionar una, dentro de un conjunto de alternativas, con base en
el valor almacenado en un campo variable denominado selector o campo controlador de la
estructura. Es una estructura selectiva mltiple donde, de acuerdo con el valor que tenga el
controlador, se realiza una determinada tarea una sola vez, es decir, no repite la ejecucin
de la tarea o secuencia. De acuerdo al valor que tenga el controlador el control de ejecucin
53
del programa pasa a uno de varios puntos de ste, evitando as una serie de preguntas
(estructura decisin lgica o un anidamiento de las mismas).
Al llegar a la estructura se evala el valor almacenado en la variable utilizada como
controlador, para determinar cul de las secuencias se efecta. Una secuencia se ejecutar
s, y slo s, uno de los rtulos (casos) correspondientes coincide con el valor actual del
controlador. Por tanto, el valor actual del controlador determina cul de las secuencias se va
a ejecutar. Si el valor del controlador no coincide con ninguno de los rtulos descritos y la
secuencia por defecto est presente, entonces sta ser ejecutada. Si esta secuencia no est
presente (es opcional usarla) y el valor del controlador no coincide con ninguno de los
rtulos, no ser ejecutada ninguna de las secuencias; por lo tanto, continuar con la
estructura siguiente.
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.
La figura 16 muestra la forma de representar una estructura de seleccin mltiple a travs
de un diagrama de flujo.
Variable
Val_1
Acciones1
Val_2
Acciones2
ValN
Acciones
N
[Default]
Acciones
D
54
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.
Al entrar a la estructura se ejecuta la secuencia de instrucciones una vez y se evala la
condicin; si sta es falsa, se sale de la estructura y contina con la instruccin siguiente; y
si es verdadera, se repite la ejecucin de la secuencia y vuelve a evaluar la condicin; el
proceso se repite mientras que la condicin sea verdadera.
La secuencia, entonces, se ejecutar repetidamente mientras que la expresin lgica sea
cierta, asegurndose que la secuencia se ejecuta por lo menos una vez. Las instrucciones no
se repiten cuando la condicin es falsa.
En la siguiente figura (18) se muestra la representacin del ciclo hacer-mientras.
Acciones (repetir)
Si
Condicin
No
Ejercicios resueltos
56
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
FIN_INICIO
si
X=1
si
A <= Y < B
X=2
si
B <= Y < C
X=3
si
C <= Y
58
Disear un algoritmo que encuentre la suma de los primeros cinco nmeros naturales.
INICIO
NUM=0;
(1) Inicializa el contador
SUMA=0;
(2) Inicializa el acumulador
Mientras ( NUM< 5 )
NUM=NUM+1;
(3) Modifica la expresin
SUMA=SUMA+NUM;
(4) Actualiza el acumulador
FIN_MIENTRAS
Escribir "LA SUMA ES:", SUMA; (5) Termina el ciclo cuando NUM = 5
FIN_INICIO
Ejercicios propuestos
1) Hacer un seguimiento (prueba de escritorio) del siguiente grupo de instrucciones.
INICIO
SUMA = 0;
X = 20;
SUMA = SUMA + X;
59
Y = 40;
X = X + Y ** 2;
SUMA = SUMA + X / Y;
EscribirEL VALOR DE LA SUMA ES:, SUMA;
FIN_INICIO
2) Escriba un algoritmo que, dados dos valores A y B, encuentre:
A B, A + B, A * B y A / B
3) Elabore un algoritmo que lea un nmero y obtenga su cuadrado y su cubo.
4) Elabore un algoritmo que lea un nmero negativo e imprima el nmero y el positivo del
mismo.
5) Disee un algoritmo que entre la ordenada (Y) y la abscisa (X) de un punto de un plano
cartesiano y, determine si pertenece o no a la recta Y = 3X + 5.
6) Una frutera ofrece las manzanas con descuento segn la siguiente tabla:
No. de manzanas compradas
% descuento
02
0%
35
10%
6 10
15%
11 en adelante
20%
Determinar cunto pagar una persona que compre manzanas en esa frutera.
7) Un proveedor de computadores ofrece descuento del 10%, si cuesta $1 000 o ms.
Adems, independientemente, ofrece el 5% de descuento si la marca es ABACO.
Determinar cunto pagar, con IVA incluido, un cliente cualquiera por la compra de una
computadora.
8) Elaborar un algoritmo que encuentre el mayor valor entre un grupo de datos positivos.
9) Hacer un algoritmo que encuentre la suma de los valores mayor y menor entre un grupo
de datos positivos.
10) Elaborar un algoritmo que encuentre el factorial de los nmeros comprendidos entre 1 y
N.
11) Escribir un programa pseudocdigo que calcule e imprima en pantalla el cuadrado de
243 y la raz cuadrada de 256.
12) Escribir un programa en pseudocdigo que lea desde teclado dos nmeros e imprima su
suma y resta.
60
61
i 1;
Mientras (i<6) do
Inicio
Escribir (i);
i i + 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).
Considerar que la serie de Fibonacci se define de la siguiente manera:
El primer elemento de la serie es una unidad (1)
Los dems elementos se forman de la siguiente manera:
1 = 1 + 0
2 = 1 + 1
3 = 2 + 1
5 = 3 + 2
8 = 5 + 3
13 = 8 + 5
.............................
an = an-1 + an-2
29) Escribir un programa en pseudocdigo que permita calcular los mltiplos de 4
comprendidos entre 4 y n. donde n es un valor lmite ingresado por teclado.
30) Escribir un programa en pseudocdigo que acepte 10 nmeros enteros por teclado,
visualice la suma de los nmeros pares ingresados, cuntos nmeros pares existen en la
lista y cul es la medida aritmtica de los nmeros impares.
62
63
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.
Tambin conoceremos las herramientas, caractersticas y funciones del entorno de
desarrollo con que trabajaremos, as como tambin las instrucciones bsicas para realizar
nuestras primeras aplicaciones en modo consola.
4.1.
La plataforma .NET
64
robustas y flexibles.
Proporciona un nico modelo de programacin consistente para el desarrollo de
diferentes modelos de aplicaciones (Windows, Web, de consola, mviles) y para
65
o runtime es el denominado
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.
ASP.NET y Servicios Web XML.
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.
66
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.
68
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.
b. Lista de errores. Aqu estn las ventanas de errores, la de tareas y la de salida.
c. Cuadro de herramientas.Presenta la caja de herramientas, que contiene todos los
controles y componentes que podemos utilizar cuando realizamos aplicaciones. Segn
el tipo de programa, se llenar con los controles y componentes apropiados para cada
uno.
d. Explorador de soluciones y ventana de propiedades. El primero presenta todos los
proyectos y archivos con que estamos trabajando; y el segundo, las propiedades de
todos los elementos del entorno.
e. rea de trabajo.
69
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
los tiempos. En lneas generales, podemos decir que es un lenguaje de programacin
orientado a objetos simple y poderoso.
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.
70
.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
Tabla 6.Tipos de datos de .NET y su equivalencia en C#.
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:
const int maximo = 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.
72
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;
Tambin podemos declarar ms de una variable en la misma sentencia. Lo nico que
tendremos que hacer es separar las variables con comas. Por ejemplo, el siguiente cdigo
definimos tres variables del tipo int:
int a, b, c;
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;
En esa misma lnea podemos declarar y asignar ms variables, simplemente separndolas
con comas:
int b = 12, c = 15;
73
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:
const int maximo = 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;
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
74
-<
>
==
<=
>=
!=
&&
||
!
Decremento
Relacionales
Menor que
Mayor que
Igual que
Menor o igual que
Mayor o igual que
Diferente
Lgicos
Conjuncin
Disyuncin
Negacin
Tabla 7. Operadores en C#
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
75
ifelseifelse
if(condicin)
{
//bloque de cdigo que se ejecuta si la condicin es verdadera
}
elseif(condicin) //caso contrario
{
//bloque de cdigo que se ejecuta si la condicin anterior es falsa y la
actual es verdadera
}
else //caso contrario
{
//bloque de cdigo que se ejecuta si las condiciones son falsas
}
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
76
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.
int L1, L2, P, A;
Console.WriteLine("Ingrese los dos lados:");
L1 = Convert.ToInt32(Console.ReadLine());
L2 = Convert.ToInt32(Console.ReadLine());
P = 2 * L1 + 2 * L2;
A = L1 * L2;
Console.WriteLine("EL PERIMETRO ES: {0}", P);
Console.WriteLine("EL AREA ES: {0}", A);
edades
son.
Alberto={0},
Juan={1},
Ana={2},
Mam={3}",EDALBER,EDJUAN,EDANA,EDMAMA);
Disear un algoritmo que encuentre la suma de los primeros cinco nmeros naturales.
int NUM = 0, SUMA = 0;
while (NUM < 5)
{
NUM = NUM + 1;
SUMA = SUMA + NUM;
}
Console.WriteLine("LA SUMA
ES:
{0}",
SUMA);
Ejercicios propuestos
79
Implemente los programas correspondientes para cada uno de los algoritmos propuestos en
el captulo 3.
80
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.
Un subprograma es un algoritmo diseado para efectuar una tarea particular, bajo la
dependencia de un algoritmo u otro subprograma que lo utiliza. De esta manera, el
subprograma es diseado para ser utilizado por otros procesos ms amplios, dentro de los
cuales existe un flujo de recibo y entrega de informacin.
La utilizacin de subprogramas en la solucin de problemas grandes tiene muchas ventajas.
Por ejemplo, para tareas que deban efectuarse ms de una vez, la modularidad evita la
necesidad de programacin redundante, esencialmente el mismo conjunto de instrucciones;
en vez de ello, un mdulo puede construirse e invocarse cada vez que se necesite hacer la
misma labor, por lo tanto, el uso de mdulos permite o hace que los programas sean ms
cortos. De igual manera, la fragmentacin en mdulos individuales proporciona claridad,
facilidad de distribucin de trabajo en equipo y, por ser algoritmos cortos, son ms fciles
de escribir, corregir y su estructura lgica es ms clara que la de los programas que no estn
divididos en mdulos.
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
81
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.
La comunicacin que se establece entre el algoritmo llamante y el subprograma se hace a
travs de variables denominadas parmetros, que hacen las veces de recipiente, unas de
recibo y otras de envo de informacin.
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.
82
< I n s t r u c c io n e s 1 >
< L la m a d a u n o a A >
P asa
in fo r m a c i n
c e d e c o n tro l
R e to rn a
c o n tr o l e
in fo r m a c i n
< I n s t r u c c i n 3 >
S u b p ro g ra m a
A
< I n s tr u c c io n e s >
P asa
in fo r m a c i n
c e d e c o n tro l
< L la m a d a u n o a B >
R e to rn a
c o n tr o l e
in fo r m a c i n
< I n s t r u c c i n i>
P asa
in fo r m a c i n
c e d e c o n tro l
< L la m a d a d o s a A >
< I n s t r u c c i n k >
R e to rn a
c o n tr o l e
in fo r m a c i n
S u b p ro g ra m a
B
L la m a d a a C
< In s tru c c i n i>
C e d e c o n tr o l
R e to r n a
c o n tro l
S u b p ro g ra m a
C
< I n s tr u c c io n e s >
S u b p ro g ra m a
A
< In s tr u c c io n e s >
< I n s t r u c c i n n >
83
5.1.
Procedimientos
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.
Cuando el subprograma es activado, los argumentos de envo son copiados en los
parmetros de recibo, (parmetros de recibo - argumentos de envo). Y cuando el
subalgoritmo deja de ejecutarse los parmetros de envo le asignan informacin a los
argumentos de recibo (argumentos de recibo - parmetros de envo).
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.
85
86
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):
variable = nombre_funcin (Argumentos);
En la figura 24 puede observar un pequeo programa que contiene una funcin, y su
composicin.
Ejercicios resueltos
Elaborar una funcin que encuentre el valor mayor en un conjunto de 3 nmeros reales
diferentes.
FUNCIN MAYOR (N1, N2, N3)
SI ( (N1 > N2) AND (N1 > N3) ) ENTONCES
VALMAY = N1;
SINO
SI (N2 > N3) ENTONCES
VALMAY = N2;
SINO
VALMAY = N3;
FIN_SI
FIN_SI
RETORNE VALMAY;
FIN_MAYOR
FACTO= FACTO*I;
FIN_PARA
RETORNE FACTO;
FIN_FAC
Ejercicios propuestos
Implemente los programas correspondientes para cada uno de los algoritmos propuestos en
el captulo 3, utilizando procedimientos y/o funciones.
89
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.
En este captulo el concepto de variable se extender a un grupo o coleccin de ellas,
agrupadas bajo un mismo nombre.
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
90
necesario adicionar el ndice al nombre genrico del arreglo; es ste el que hace
independiente una de otra.
Ejemplos de ndices:
4
IDX
k+i
i * jota 1
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.
LEA: EDAD[0], EDAD[2], EDAD[4]
92
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;
93
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.
El elemento que falta en esta declaracin es el tamao de la matriz. Cuntos elementos
puede contener este arreglo? El tamao de l se especifica mediante el operador de C#
new. Este operador indica al compilador de C# que quiere reservar suficiente memoria para
una nueva variable; es este caso, un vector de 5 elementos de tipo byte:
byte [ ] EDAD ;
int tama=7;
EDAD = new byte[tama];
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:
94
string mensaje1;
string saludo = "Hola mundo!";
conststring mensaje2 = "Odio programar!";
A continuacin de mencionan algunos aspectos importantes sobre las cadenas:
Utilice literales de cadena regulares cuando tenga que incrustar caracteres de escape
proporcionados por C#, como se muestra en el ejemplo siguiente:
string columnas = "Columna 1\tColumna 2\tColumna 3";
//Salida: Columna 1
Columna 2
Columna 3
string filas = "Fila 1\nFila 2";
/* Salida:
Fila 1
Fila 2
*/
95
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
96
55
35
21
15
55
80
35
21
15
55
35
80
21
15
55
35
21
80
15
55
35
21
15
80
97
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
Filas
0
1
4
5
6
0
1
2
X
3
4
Figura 26. Representacin grfica de una matriz (A).
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
99
columna. El elemento A[2, 4] hace referencia al contenido del elemento ubicado en la fila 2
columna 4.
En general, se puede decir que el elemento i, j de un arreglo bidimensional hace referencia
al contenido del elemento ubicado en la fila i, columna j, donde:
0 i nmero de filas y 0 j nmero de columnas.
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
Filas
son: 10, 15, 40, 99 y -1, y el almacenamiento interno ser (figura 27):
0
1
2
3
4
0
10
Columnas
2
3
-1
40
99
15
100
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:
for ( i = 0; i < 5; i++ )
{
for ( j= 0; j < 7; j++)
{
A[i , j ] = asignar_valor;
}
}
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.
static void Main(string[] args)
{
string[] nomina;
float[,] notas;
intnumAl;
101
102
int i, j;
for (i = 0; i <notas.GetLength(0); i++)
{
Console.Write(nomina[i]);
for (j = 0; j <notas.GetLength(1); j++)
Console.Write("\t{0}", notas[i, j]);
Console.WriteLine();
}
}
static float calcularPromedio(float[,] notas)
{
int i, j;
floatsuma=0;
for (i = 0; i <notas.GetLength(0); i++)
for (j = 0; j <notas.GetLength(1); j++)
suma+=notas[i,j];
return suma / notas.Length;
}
Ejercicios propuestos
1) Elaborar un programa que entre 5 valores y los almacene en un vector e imprimir el
vector.
2) Elaborar un programa que genere un arreglo de N elementos y encuentre el valor y la
posicin del mayor elemento.
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.
103
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.
8) Hacer un programa que lea el orden de un arreglo bidimensional y sus elementos;
convierta la matriz en un arreglo unidimensional. La conversin debe hacerse por
columnas, es decir, mover la primera columna al vector, a continuacin la segunda
columna y as sucesivamente. Imprima el arreglo formado.
9) Elaborar un algoritmo que entre una matriz de M * N y ordene en forma creciente los
elementos de las columnas del arreglo.
10) Elaborar un algoritmo que llene una matriz de orden N con ceros, excepto las dos
diagonales que deben contener unos.
BIBLIOGRAFA
Ferguson, Jeff. . Et. Al. (2003). La Biblia de C#. Anaya Multimedia. Espaa.
acato, Jos. (1998). Cmo disear algoritmos para computadoras. Editorial Parra.
Ecuador.
105