Você está na página 1de 111

Texto Gua de la

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.

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

Pgs.

PORTADA

PORTADILLA

PREFACIO

CONTENIDO

INTRODUCCIN

CAPTULO 1. CONCEPTOS BSICOS DE ALMACENAMIENTO DE


INFORMACIN

1.1. Unidades bsicas de informacin en un computador

11

1.2. Terminologa bsica.

13

1.3.

Tipos bsicos de informacin que maneja el computador

21

1.4.

Forma interna de almacenamiento

22

1.5.

Tipos de campos

24

Ejercicios propuestos

26

CAPTULO 2. ALGORITMOS

28

2.1.

Problemas y modelos

28

2.2.

Pasos para la solucin de un problema a travs del computador

29

2.3.

Algoritmos

30

2.4.

Valor de los smbolos en un modelo algortmico

35

Ejercicios resueltos

41

Ejercicios propuestos

42

CAPTULO 3. ESTRUCTURAS E INSTRUCCIONES EN LA


PROGRAMACIN ESTRUCTURADA

45

3.1.

Algoritmos bsicos

46

3.2.

Ejemplos de algoritmos bsicos sin toma de decisiones

48

3.3.

Estructuras de decisin lgica (representacin y funcionamiento)

49
4

3.4.

Ciclos MIENTRAS (while)

52

3.5.

Estructuras adicionales

55

Ejercicios resueltos

58

Ejercicios propuestos

62

CAPTULO 4. INTRODUCCIN AL FRAMEWORK DE .NET

64

4.1.

64

La plataforma .NET

4.1.1. Componentes del Framework de .NET

65

4.1.2. Compilacin y el MSIL

67

4.1.3. Entorno de desarrollo para aplicaciones de consola

69

4.2.

70

Fundamentos del Lenguaje

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

CAPTULO 5. MODULARIDAD Y REDUCCIN DE COMPLEJIDAD

82

5.1.

Procedimientos

85

5.2.

Funciones

86

5.3.

Paso de parmetros: por valor y por referencia

88

Ejercicios resueltos

89

Ejercicios propuestos

90

CAPTULO 6. FUENTES ELEMENTALES DE DATOS

91

6.1 Arreglos de una dimensin o vectores

92

6.2.

Cadenas de caracteres

95

6.3.

Operaciones bsicas con arreglos

97
5

6.4 Arreglos de dos dimensiones o matrices

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.

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 que slo un programador puede
entender.

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.

Muchas veces nos iremos a casa y seguiremos

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

prctica. Para ayudarle a alcanzar su objetivo, se ha organizado el texto de la siguiente


manera:

En el captulo 1 se exponen varios de los trminos bsicos relacionados con el


almacenamiento de informacin en un computador y se dan a conocer cules son las
herramientas necesarias para la creacin de nuestros propios programas, para operar sobre
dicha informacin.

En el captulo 2 se introduce a los algoritmos, conociendo su significado, necesidad y


formas de representacin, todo esto con miras a utilizarlos como herramientas de apoyo en
el desarrollo de software.

Con el captulo 3 se empezar ya de lleno el desarrollo de la lgica de programacin,


apoyndose en la elaboracin de algoritmos, principalmente en forma de diagramas de
flujo. Aqu se estudian las diferentes estructuras e instrucciones que pueden aplicarse en un
estilo de programacin estructurada, ya que ms adelante, en el captulo 4, se aprender la
forma de codificar dichos algoritmos o diagramas de flujo en el lenguaje de programacin
Visual C# y as poder visualizar las diferentes soluciones.

Ya con conocimientos de un lenguaje de programacin, en el captulo 5 estudiar los


procedimientos y las funciones, como mecanismos que permiten la reutilizacin de cdigo.

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.

Aunque a primera vista puedan parecer sinnimos datos e

informacin, existe diferencia entre ellos. Los datos constan de hechos en bruto y figuras.
La informacin, por otra parte, son datos procesados.

La informacin tiene datos

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

Figura 1. Datos e informacin.

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

empresa no necesita un informe detallado de las nminas de los 2000 empleados de su


empresa si lo que desea es estudiar las tendencias o proyecciones en el tiempo de las citadas
nminas o sueldos. En su lugar, el presidente necesitar ms informacin significativa, tal
como nminas totales por departamento, incrementos de la nmina durante el ao pasado,
nmina media del empleado comparada con otras empresas de la misma lnea de negocios,
etc.

Una computadora que tenga almacenado un programa adecuado puede producir

rpidamente la informacin que el presidente necesita a partir de los datos en bruto de la


nmina.

El programa es la fuerza conductora de cualquier tarea que hace una computadora. Un


programa es una lista de instrucciones detalladas que indican a la computadora lo que ha de
hacer.

La computadora no puede hacer nada sin un programa.

Es el trabajo del

programador de escribir programas lo que influye en la computadora y tomar datos en bruto


y transformarlos en informacin significativa para el usuario final, como puede ser el caso
del presidente de la empresa, el objetivo final.

Los programas modernos producen informacin en muchos formatos. Estos programas


reproducen msica, charlan con otras computadoras a travs de lneas telefnicas o
telfonos celulares y otros dispositivos externos. La salida se enva a la pantalla y a la
impresora que constituyen los dispositivos ms usuales para el acceso a la computadora; es
decir, los datos de entrada y los datos de salida pueden ser, realmente, cualquier cosa, texto,
dibujos, sonidos, etc.

Una computadora consta de dos partes bien diferenciadas, hardware y software.

El

hardware consta de las partes fsicas, tangibles de la computadora. El software consta de


programas, tambin llamados aplicaciones, que contienen instrucciones que la computadora
ejecuta o corre.

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.

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.

En las secciones siguientes de este captulo se explican algunos

conceptos fundamentales para la creacin de su propio software.

1.1. Unidades bsicas de informacin en un computador


Bit.- Es la abreviatura de binary digit. Es una unidad de informacin que equivale a una
decisin binaria, o la designacin de uno de dos valores o estados posibles igualmente
probables. Se suele expresar como l o 0. Representa una unidad minscula de memoria

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.

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
12

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
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

1.2. Terminologa bsica.


Como ya se mencionaba antes, una computadora realizar las tareas que nosotros le
indiquemos, pero para ello necesita de programas, por lo que surgen las preguntas: Quin
hace esos programas? De qu estn compuestos los programas? Cmo los hacen? Estas
dudas y otras se intentan responder en los prrafos siguientes.

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.

El programador se encarga de implementar algoritmos mediante un lenguaje de


programacin que pueda entender la computadora. Inicialmente, su funcin era resolver en
forma particular los problemas de sistemas que surgan en las empresas, as como un
mecnico cambia o repara partes defectuosas. Con el tiempo se fueron incorporando a su
misin nuevas necesidades y tareas, hasta llegar al da de hoy, en que un programador o
grupo de ellos se ocupa de realizar aplicaciones completas y generar soluciones
empresariales y de otros tipos.

13

Programacin y lenguaje de programacin.


La programacin, es la creacin de programas de computadora (cdigo mquina compilado
o interpretado); esto es, generar un conjunto concreto de instrucciones que una
computadora pueda ejecutar. El programa se escribe en un lenguaje de programacin,
aunque tambin se puede escribir directamente en lenguaje mquina, con cierta dificultad.

El lenguaje de programacin es un lenguaje que puede utilizarse para controlar el


comportamiento de una mquina, particularmente, una computadora.

Consiste de un

conjunto de reglas sintcticas y semnticas que definen su estructura y el significado de sus


elementos, respectivamente.

Un lenguaje de programacin permite a un programador especificar de manera precisa


sobre qu datos una computadora debe operar, cmo estos deben ser almacenados y
transmitidos, y qu acciones debe tomar bajo una variada gama de circunstancias. Todo
esto se realiza a travs de un lenguaje que intenta estar relativamente prximo al lenguaje
humano o natural.

Los principales tipos de lenguajes utilizados son tres:

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, sentencias o proposiciones (normalmente el trmino instruccin se suele
referir a los lenguajes mquina y de bajo nivel, reservando la sentencia o proposicin para
los lenguajes de alto nivel). Por consiguiente, un programa consta de una secuencia de

14

instrucciones, cada una de las cuales especifica ciertas operaciones que debe ejecutar la
computadora.

La elaboracin de un programa requerir conocer el juego o repertorio de instrucciones del


lenguaje.

Aunque ms adelante se analizarn con ms detalle las instrucciones,

adelantaremos los tipos fundamentales de instrucciones que una computadora es capaz de


manipular y ejecutar. Las instrucciones bsicas y comunes a casi todos los lenguajes de
programacin se pueden condensar en cuatro grupos:

Instrucciones de entrada/salida. Instrucciones de transferencia de datos e informacin


entre dispositivos perifricos (teclado, impresora, unidad de disco, etc.) y la memoria
central.

Instrucciones aritmtico-lgicas. Instrucciones que ejecutan operaciones aritmticas


(suma, resta, multiplicacin, divisin, potenciacin), lgicas (operaciones and, or ,not,
etc.).

Instrucciones selectivas. Instrucciones que permiten la seleccin de tareas alternativas


en funcin de los resultados de diferentes expresiones condicionales.

Instrucciones repetitivas. Instrucciones que permiten la repeticin de secuencias de


instrucciones un nmero determinado de veces.

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

Las instrucciones en lenguaje mquina dependen del hardware de la computadora y, por


tanto, diferirn de una computadora a otra. El lenguaje mquina de un PC (computadora
personal) ser diferente de un sistema HP (Hewlett Packard), Compaq o un sistema de
IBM.

Las ventajas de programar en lenguaje mquina son la posibilidad de cargar (transferir un


programa a la memoria) sin necesidad de traduccin posterior, lo que supone una velocidad
de ejecucin superior a cualquier otro lenguaje de programacin.

Los inconvenientes -en la actualidad- superan a las ventajas, lo que hace prcticamente no
recomendables los lenguajes mquina. Estos inconvenientes son:

Dificultad y lentitud en la codificacin.

Poca fiabilidad.

Dificultad grande de verificar y poner a punto los programas.

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.

Una instruccin tpica de suma sera:ADD M, N, P


16

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 equivalente en cdigo mquina:

0110 1001 1010 1011

Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la


computadora-en esto se diferencia esencialmente del lenguaje mquina-, sino que requiere
una fase de traduccin al lenguaje mquina.

El programa original escrito en lenguaje ensamblador se denomina programa fuente y el


programa traducido en lenguaje mquina se conoce como programa objeto, ya directamente
inteligible por la computadora.

El traductor de programas fuente a objeto es un programa llamado ensamblador


(assembler),existente en casi todas las computadoras (figura 2).

Programa fuente en
Lenguaje ensamblador
(assembly)

Programa
ENSAMBLADOR
(assembler)

Programa objeto en
cdigo mquina

Figura 2.Programa ensamblador

No se debe confundir -aunque en espaol adoptan el mismo nombre- el programa


ensamblador(assembler), encargado de efectuar la traduccin del programa fuente escrito a
lenguaje mquina, con el lenguaje ensamblador (assemblylanguaje), lenguaje de
programacin con una estructura y gramtica definidas.

Los lenguajes ensambladores presentan la ventaja frente a los lenguajes mquina de su


mayor facilidad de codificacin y, en general, su velocidad de clculo.
17

Los inconvenientes ms notables de los lenguajes ensambladores son:

Dependencia total de la mquina, lo que impide la transportabilidad de los programas


(posibilidad de ejecutar un programa en diferentes mquinas). El lenguaje ensamblador
del PC es distinto del lenguaje ensamblador del Apple Macintosh.

La formacin de los programas es ms compleja que la correspondiente a los


programadores de alto nivel, ya que exige no slo las tcnicas de programacin, sino
tambin el conocimiento del interior de la mquina.

Hoy da los lenguajes ensambladores tiene sus aplicaciones muy reducidas en la


programacin de aplicaciones y se centran en aplicaciones de tiempo real, control de
procesos y de dispositivos electrnicos,etc.

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.

Los lenguajes de alto nivel presentan las siguientes ventajas:

El tiempo de formacin de los programadores es relativamente corto comparado con


otros lenguajes.

18

La escritura de programas se basa en reglas sintcticas similares a los lenguajes


humanos. Nombres de las instrucciones, tales como READ, WRITE, CLEAR, etc.

Las modificaciones y puestas a punto de los programas son ms fciles.

Reduccin del coste de los programas.

Transportabilidad.

Los inconvenientes se concretan en:

Incremento del tiempo de puesta a punto, al necesitarse diferentes traducciones del


programa fuente para conseguir el programa definitivo.

No se aprovechan los recursos internos de la mquina, que se explotan mucho mejor en


lenguajes mquina y ensambladores.

Aumento de la ocupacin de memoria.

El tiempo de ejecucin de los programas es mucho mayor.

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

Los traductores se dividen en:

Compiladores.

Intrpretes.

Compilador.- Un compilador es un programa informtico que traduce un programa escrito


en un lenguaje de programacin a otro lenguaje de programacin, generando un programa
equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es
lenguaje de mquina, pero tambin puede ser simplemente texto. Este proceso de
traduccin se conoce como compilacin.

Un compilador es un programa que permite traducir el cdigo fuente de un programa en


lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina).
De esta manera un programador puede disear un programa en un lenguaje mucho ms
cercano a cmo piensa un ser humano, para luego compilarlo a un programa ms manejable
por una computadora.

Intrprete o interpretador.- Intrprete o interpretador es un programa informtico capaz


de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los intrpretes
se diferencian de los compiladores en que mientras estos traducen un programa desde su
descripcin en un lenguaje de programacin al cdigo de mquina del sistema, los primeros
(los intrpretes) slo realizan la traduccin a medida que sea necesaria, tpicamente,
instruccin por instruccin, y normalmente no guardan el resultado de dicha traduccin.

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).

Comparando su actuacin con la de un ser humano, un compilador equivale a un traductor


profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua,
mientras que un intrprete corresponde al intrprete humano, que traduce de viva voz las
palabras que oye, sin dejar constancia por escrito.

A manera de resumen, y en trminos generales, podemos decir que el programa escrito en


un lenguaje de alto nivel se introduce en la mquina con un editor y se llama cdigo fuente;
el compilador lo traduce en lenguaje mquina y almacena el resultado en otro archivo
llamado cdigo objeto.

El cdigo objeto se carga en la memoria principal de la

computadora y lo ejecuta el CPU.

1.3.

Tipos bsicos de informacin que maneja el computador

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.

Caracteres (alfanumrica):muchos procesos o programas no slo requieren de la


manipulacin de valores numricos, sino tambin de letras y smbolos especiales con
los cuales, lgicamente, no se pueden efectuar operaciones de clculo matemtico. Por
ejemplo: los nombres de personas.

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.

Forma interna de almacenamiento

Con el propsito de almacenar datos, una computadora consta de pequeos circuitos


electrnicos capaces de almacenar un bit. Estos circuitos son como pequeos interruptores
de luz que pueden estar en dos estados; uno para encendido y otro para apagado.

La memoria central o simplemente memoria (interna o principal) se utiliza para almacenar


informacin. Se divide a su vez en memoria RAM y memoria ROM. La memoria RAM
(Random Access Memory) es normalmente voltil, lo que significa que todo cuanto se
almacena o guarda en ella se pierde cuando se apaga la computadora. En general, la
informacin almacenada en memoria puede ser de dos tipos: las instrucciones de un
programa y los datos con los que operan las instrucciones. Por ejemplo, para que un
programa se pueda ejecutar, debe ser situado en la memoria central, en una operacin
denominada carga del programa. Despus, cuando se ejecuta el programa, cualquier dato a
procesar por el programa se debe llevar a la memoria mediante las instrucciones del
programa. En la memoria central hay tambin datos diversos y espacio de almacenamiento
temporal que necesita el programa cuando se ejecuta con el fin de poder funcionar. Los
programas y datos se almacenan en RAM mientras se est utilizando la computadora.

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.

La memoria central de una computadora es una zona de almacenamiento organizada en


centenares de millones de unidades de almacenamiento individual o celdas. La memoria
central consta de un conjunto de celdas de memoria (estas celdas o posiciones de memoria
22

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).

La unidad elemental de memoria se llama byte (octeto), y como se ya se explicaba en un


apartado anterior, tiene la capacidad de almacenar un carcter de informacin, y est
formado por un conjunto de unidades ms pequeas de almacenamiento denominadas bits,
que son dgitos binarios (0 o 1).

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.

La informacin almacenada en una posicin de

memoria es su contenido. La figura 3 muestra una memoria de computadora que consta de


1000 posiciones con direcciones de 0 a 999. El contenido de estas direcciones o posiciones
de memoria se llaman palabras, de modo que existen palabras de 8, 16, 32 y 64 bits. Por
consiguiente, si trabaja con una mquina de 32 bits, significa que en cada posicin de
memoria de su computadora puede alojar 32 bits, es decir 32 dgitos, bien ceros o unos.

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

permanente y nica, el contenido puede cambiar mientras se ejecuta un programa.

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

Figura 3.Memoria central de una computadora

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
24

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.

Ejemplos de nombres de variables:

B1

C1AZ

NOMBRE

SALARIOHORA

Es buena prctica de programacin utilizar nombres de variables significativas


(nemotcnicas), es decir, que sugieran lo que ellas representan, ya que esto hace que el
algoritmo, y por ende el programa, sea ms legible y fcil de comprender.

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.

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:

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.

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
26

2.

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


cada uno de ellos.

3.

Cul es la diferencia existente entre variables y constantes?

4.

Hablar sobre los componentes de una variable

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

6. Determinar cules de las siguientes constantes son vlidas o no, indicando


el porqu de su afirmacin;

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.

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.

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.

Pasos para la solucin de un problema a travs del computador

Resumiendo lo sealado en el apartado anterior, el proceso de resolucin de un problema


con una computadora conduce a la escritura de un programa y a su ejecucin en la misma.
Aunque el proceso de disear programas es esencialmente- un proceso creativo, se puede
considerar una seria de fases o pasos comunes, que generalmente deben seguir los
programadores.

Las fases de resolucin de un problema con computadora son:

Anlisis: el problema se analiza teniendo presente la especificacin de los requisitos


dados por el cliente o por la persona que encarga el problema. Esta fase requiere una
clara definicin, donde se contemple exactamente lo que debe hacer el programa y el
resultado o solucin deseada.

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.

Tenga presente que el diseo del algoritmo es

independiente del lenguaje de programacin.

Codificacin (implementacin): la solucin se escribe en la sintaxis del lenguaje de


alto nivel y se obtiene un programa.

Es altamente recomendable acompaar la

codificacin de una documentacin interna; es decir, incluir dentro del cdigo


comentarios que ayuden a la comprensin del mismo. El programa no los necesita y

30

sern ignorados, pero sirven para hacer los programas ms fciles de comprender.
Recuerde que como programador debe escribir cdigos sencillos.

Compilacin, ejecucin, verificacin y depuracin: el programa se ejecuta, se


comprueba rigurosamente y se eliminan todos los errores (bugs) que puedan aparecer.
Cuando ejecuta el programa se pueden producir tres tipos de errores: de compilacin
(uso incorrecto de las reglas del lenguaje), de ejecucin (instrucciones que la
computadora puede comprender pero no ejecutar) y lgicos (se producen en la lgica
del programa y la fuente del error suele ser el algoritmo).

Mantenimiento: el programa se actualiza y modifica cada vez que sea necesario, de


modo que se cumplan todas las necesidades de cambio de sus usuarios.

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

Si se analizan los pasos para la solucin de un problema a travs de la computadora se nota


que el algoritmo es bastante importante, y a l se debe llegar cuando se ha entendido el
problema y se ha hecho un anlisis correcto de las caractersticas de ste.

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.

Si no se est seguro de la implementacin de uno o algunos de los pasos, es preferible pedir


ayuda especializada para aclarar las dudas que surjan.

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

Segn el diccionario, un algoritmo es un conjunto ordenado de operaciones matemticas


que permiten hallar la solucin de un problema.

Un algoritmo es un conjunto concreto de pasos o acciones que se deben realizar


ordenadamente para llegar a un fin determinado (solucin de un problema, obtencin de
una respuesta intermedia o realizacin de una tarea) de cualquier problema.

Ahora que se conoce la definicin de algoritmo, se puede redefinir el trmino programa


como la implementacin de un algoritmo determinado en un lenguaje de programacin. El
conocimiento del concepto de algoritmo es fundamental para todo programador ya que, en
la tarea diaria de escribir programas para resolver problemas, antes debemos discutir y
entender cul es el algoritmo que los resuelve. Muchas veces, como programadores, nos
encontraremos siguiendo los pasos de un algoritmo con lpiz y papel para entender su
funcionamiento o probar su eficacia.

Caractersticas de los algoritmos.


Las caractersticas fundamentales que de un algoritmo son:

Entrada. La entrada hace referencia a la informacin proporcionada al algoritmo, la


cual debe sufrir un proceso para obtener los resultados. Un algoritmo tiene cero o ms
datos de entrada. Estos valores le son dados por medio de una instruccin o mandato
que se debe cumplir al ejecutarse el algoritmo. Si no existen datos de entrada es porque
una o ms instrucciones generan los valores de partida, de los que har uso el algoritmo
para producir los datos o valores de salida.

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.

Limitado o finito.Todo algoritmo debe tener un nmero de instrucciones que limitan el


proceso en algn momento; es decir, la ejecucin debe detenerse. No puede existir un
algoritmo, por muy grande que sea o por muchos resultados que produzca, que se quede
en forma indefinida ejecutando sus instrucciones o repitiendo la ejecucin de un
subconjunto de ellas.

Claridad (preciso).Todo el conjunto de pasos debe ser entendible y factible de realizar,


de tal manera, que al hacer un seguimiento del algoritmo ste produzca siempre los
resultados requeridos. No puede entonces existir incertidumbre en las acciones a tomar
cuando se sigue la lgica (flujo del programa) del algoritmo.

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

Descripcin narrada. Es la descripcin normal de un algoritmo, utilizando el lenguaje


natural de las personas, sin utilizar ninguna tcnica previamente definida.

Ejemplo:Enumerar los pasos para calcular suma de dos nmeros.

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

Diagrama de flujo. Es la representacin de un algoritmo utilizando un conjunto de


figuras geomtricas (rombos, cuadrados, rectngulos, crculos, etc.) unidas y
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

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.

Ejemplo: Elaborar un diagrama de flujo para calcular la suma de dos nmeros.


Inicio

N1, N2

SUMA = N1 + N2

SUMA

Fin

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.

Ejemplo: Disear un algoritmo utilizando pseudocdigos para calcular suma de dos


nmeros.

Inicio
Entero N1, N2, SUMA;
Leer N1;
Leer N2;
SUMA = N1 + N2;
Escribir SUMA;
Fin
35

2.4.

Valor de los smbolos en un modelo algortmico

Hasta debe estar clara la importancia de los algoritmos en la resolucin de problemas a


travs de una computadora, pero como habr podido observar en los ejemplos anteriores, en
un algoritmo aparecen diferentes smbolos (las variables, por ejemplo), por lo que en esta
seccin nos ocuparemos de ellos, de su significado y cmo utilizarlos.

Datos y tipos de datos.


El primer objetivo de toda computadora es el manejo de datos e informacin. Estos datos
pueden ser las cifras de ventas de un supermercado o sus calificaciones de clase. La
mayora de las computadoras pueden trabajar con varios tipos (modos) de datos. Los
algoritmos y programas correspondientes operan sobre estos tipos de datos.

La accin de las instrucciones ejecutables de las computadoras se reflejan en cambios en


los valores de las partidas de datos. Los datos de entrada se transforman por el programa,
despus de las etapas intermedias, en datos de salida.

En el proceso de resolucin de problemas el diseo de la estructura de datos es tan


importante como el diseo del algoritmo y del programa que se basa en el mismo.

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.

Los distintos tipos de datos se representan en diferentes formas en la computadora. A nivel


de mquina, un dato es un conjunto o secuencia de bits. Los lenguajes de alto nivel
permiten basarse en abstracciones e ignorar los detalles de la representacin interna.
Aparece el concepto de tipo de datos, as como su representacin. Los tipos de datos
simples son los siguientes:

36

Datos numricos. Es el conjunto de valores numricos. Estos pueden representarse en


dos formas distintas:

Numrico entero (int, integer). Es un subconjunto finito de los nmeros


enteros (negativos, cero, positivos). Ejemplos: 5, 0, -10, 1234, -9876.

El entero mximo y mnimo que se puede representar depende de la cantidad de


bits (o de bytes) que se utilicen (tamao), as (tabla 1):

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

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.

Numrico real (punto flotante). El tipo real consiste en un subconjunto de los


nmeros reales. Los nmeros reales siempre tienen un punto decimal y pueden
ser positivos o negativos. Un nmero real consta de un entero y una parte
decimal. Los siguientes ejemplos son nmeros reales: 0.05; 3.1416; -12.0;
3456.0; -2.71828.

Otra forma de representar los nmeros reales es la notacin exponencial o


cientfica y se utiliza para nmeros muy grandes o muy pequeos. Ejemplos:
0.00045 = 0.45 x 10 -3 = 0.45E-3
37

-2345678 = -0.2345678 x 10 7 = - 0.2345678E+7

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

5,0 10 324 a 1,7 10 308

Tabla 2. Tipos de datos reales.

Datos tipo carcter y texto (cadena). Los datos de tipo carcter contienen un solo
carcter, que puede ser:

Las letras del alfabeto de la A-a a la Z-z.

Los dgitos del 0 al 9.

Caracteres especiales como: +, -, *, /, %, etc.

Los datos de tipo carcter se representan en muchos lenguajes de programacin


comenzando y terminando con el apstrofe ( ) de la siguiente manera: A, 7, $,
etc.

Una cadena de caracteres es una sucesin de caracteres que se encuentran delimitados


por un apstrofe o por comillas dobles, segn el tipo de lenguaje de programacin. La
longitud de una cadena de caracteres es el nmero de ellos comprendidos entre los
separadores o limitadores. Ejemplos: DIOS; SER COMO EL AGUIL.; ; .

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.

Las expresiones son combinaciones de constantes, variables, operadores, parntesis y


nombres de funciones especiales. Las mismas ideas son utilizadas en notacin matemtica
tradicional; por ejemplo: * r2.

Cada expresin toma un valor que se determina tomando los valores de las variables y
constantes implicadas y la ejecucin de las operaciones indicadas.

Los operadores pueden ser:

Aritmticos. Para tratar los nmeros se utilizan operadores aritmticos, que, junto con
las variables numricas forman expresiones aritmticas.

La tabla 3 resume los

operadores aritmticos:

Smbolo

Significado

Suma

Resta

Multiplicacin

Divisin (real)

Potenciacin

DIV ( \ )
MOD ( % )

Divisin (entera)
Resto de la divisin

Tabla 3. Operadores aritmticos.


39

Ejemplos:

Expresin

Resultado

423 + 5

428

423 - 5

418

12 * 11

132

23 / 5

4.6

2^4

16

23 \ 5

23 % 5

Relacionales.Se utilizan para formar expresiones booleanas; es decir, expresiones que


al ser evaluadas producen un valor booleano. En la tabla 4 se renen los distintos
operadores relacionales.

Smbolo

Significado

<

Menor que

>

Mayor que

==

Igual que

<=

Menor o igual que

>=

Mayor o igual que

! = (<>)

Diferente

Tabla 4. Operadores relacionales.

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

Tabla 5. Operadores lgicos.

Ejemplos:
Expresin

Resultado

True AND True

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.

La prioridad de los operadores a la hora de evaluar cualquier expresin es:


41

Parntesis.

Potencias.

Productos y divisiones.

Sumas y restas.

Relacionales.

Lgicos.

Funciones internas, incorporadas o estndar


Conforme aumenta la complejidad de los problemas que se trata de resolver por medio de
algoritmos y posteriormente a travs de programas, es necesario contar con operadores que
permitan realizar una serie de operaciones que van ms all de las operaciones bsicas de
potenciacin, multiplicacin, divisin, suma y resta.

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.

A continuacin se presenta un resumen de las principales funciones internas:

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

Algunos ejemplos de utilizacin de funciones internas son:

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.


Si se tiene la expresin: A * * 2 / 5 * B - 5 y los valores almacenados en A y B son 5 y


20, respectivamente, evaluar dicha expresin.

5 * * 2 = 25
25 / 5*20 = 100
100 - 5 = 95

Escriba la siguiente expresin algebraica como expresin algortmica:



 20


Solucin:
(A + B)/(C - A) + 20

Si las variables X, Z y L tienen almacenados los valores 23, 47 y V (true),


respectivamente, escriba el resultado de cada una las expresiones:

44

Expresin

Resultado

(X > Z) OR (Z> 20)

(X < Z) AND ( ! (Z > 20))

( Z > 50 ) AND L

!L

(Z > 100) AND (X< 3) AND ( ! 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

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:

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)

13) Si el valor interno de la variable A = 4, el de B = 5, de C = 1. Muestre cules son los


valores impresos en el siguiente algoritmo.
INICIO
X = B * A - B **2/4 * C;
Y = A * B/3 ** 2;
Z = (((B + C) /2 * A + 10) * 3 * B) 6;
Escribir X, Y, Z;
FIN_INICIO
14) Haga un seguimiento del siguiente algoritmo y diga qu valores se muestran en las
variables P, R y S. (Use los valores definidos en 9)
INICIO
P = A ** (1/2) ** B;
R = A * B + A ** (1/2);
S = B * A - B ** 2 / 4 * C;
Escribir P, R, S;
FIN_INICIO
46

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.

Como se puede deducir fcilmente, las

estructuras de seleccin se utilizan para seleccionar cules sentencias se han de ejecutar a

47

continuacin y las estructuras de repeticin (repetitivas o iterativas) se utilizan para repetir


un conjunto de sentencias.

3.1.

Algoritmos bsicos

Como ya se indicaba antes, la forma ms elemental de escribir un programa es


secuencialmente. Una estructura secuencial es aquella en la que la accin (instruccin)
sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la
entrada de la siguiente y as sucesivamente hasta el final del proceso. Su representacin se
muestra en la figura 5.

Accin1

Accin2

AccinN

Figura 5. Estructura secuencial.

Como parte del algoritmo encontraremos algunos bloques constructivos. A continuacin se


presentan algunos de ellos para el caso de disear un diagrama de flujo:

Asignacin. Se utiliza para indicar una accin o proceso, generalmente la asignacin de


un valor o un resultado de una operacin a una variable. Ejemplo (figura 6):

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.

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.

Por ejemplo, en la asignacin SUELDO =

SUELDO + BONIFICACION; el nuevo valor de la variable SUELDO ser el resultado


de sumar el valor actual de SUELDO ms el valor de la BONIFICACION.

Entrada de datos (Leer). Para introducir datos al computador se utiliza el siguiente


bloque, que representa el teclado (figura 7). La variable que se va a leer se coloca
dentro del smbolo y en caso de ser ms de una variables, se separan con comas.

Pseudocdigo:
Variable

Tipo_dato variable; //Primero declarar la variable


Leer Variable;
Figura 7. Entrada de datos.

Salida de datos (Escribir). Para la salida de informacin procesada del computador,


se puede utilizar el bloque de impresin o el de pantalla (figura 8). Si desea imprimir o
mostrar en la pantalla un mensaje, debe escribir ste dentro del bloque y entre comillas,
mientras que si la salida corresponde al contenido de una variable, debe escribirla
normalmente, y en caso de ser varias, separarlas con comas.
49

Pseudocdigo:
Mensaje

Mensaje

Escribir Mensaje;
Escribir Var1, Var2;

Var1, Var2

Var1, Var2

Figura 8. Salida de datos.

3.2.


Ejemplos de algoritmos bsicos sin toma de decisiones

Elabore un algoritmo para calcular el rea de un tringulo (figura 9).


Inicio

INICIO
Entero B, H, A;

rea de un tringulo

Escribir rea de un tringulo;


Escribir Ingrese base y altura;
A = ( B * H ) / 2;

Ingrese base y altura

Escribir rea del tringulo: , A;


FIN_INICIO

B, H

A=(B*H)/2

rea del tringulo: , A

Fin

Figura 9. Ejemplo: rea de un tringulo.

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

Escribir Intercambio de variables;


Escribir Ingrese A y B;

Ingrese A y B

Leer A, B;
Escribir Contenido original: , A, B;

A, B

Aux = A;
A = B;
B = Aux;

Contenido original: , A, B

Escribir Luego de intercambio: , A, B;


FIN_INICIO

Aux = A
A=B
B = Aux

Luego de intercambio: , A, B

Fin

Figura 10. Ejemplo: Intercambio de variables.

3.3.

Estructuras de decisin lgica (representacin y funcionamiento)

La especificacin de algoritmos tiene realmente utilidad cuando el algoritmo requiere una


descripcin ms complicada que una lista sencilla de instrucciones. Este es el caso cuando
existen un nmero de posibles alternativas resultantes de la evaluacin de una determinada
condicin. Las estructuras selectivas se utilizan para tomar decisiones lgicas; de ah que
se suelan denominar tambin estructuras de decisin o alternativas.

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

La estructura alternativa simple (si-entonces, if-then) ejecuta una determinada accin o


acciones cuando se cumple una determinada condicin (true). Su representacin grfica
se muestra en la figura 11.
Pseudocdigo:
No

Condicin

SI ( Condicin ) ENTONCES
Acciones;
FIN_SI

Si
Acciones

Figura 11. Condicional simple

La estructura anterior es muy limitada y normalmente necesitar una estructura que


permita elegir entre dos opciones o alternativas posibles, en funcin del cumplimiento o
no de una determinada condicin (si entonces, caso contrario; ifthen, else). Si la
condicin es verdadera se ejecutarn ciertas acciones y, si es falsa, se ejecutarn otras
acciones (figura 12).
Si

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

Figura 14. Condiciones compuestas.


53

3.4.

Ciclos MIENTRAS (while)

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)

Figura 15. Ciclo mientras.


54

Adems de entender el funcionamiento de los ciclos, son necesarios algunos conceptos:

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>

Como el contador aparece al lado derecho en la expresin, antes de usarse se le debe


dar un valor que borre lo que haba en la direccin de memoria asignada a la variable
utilizada. Esa orden de borrado debe indicarse una vez; por lo tanto, debe estar antes de
activar el ciclo donde se necesite el contador, de lo contrario se repetir la orden de
borrado cada vez que se repite el ciclo.

Una orden de borrado puede ser: CONTADOR = 0.

Variables tipo acumulador. Un acumulador o totalizador es una variable cuya misin


es almacenar cantidades variables resultantes de procesos sucesivos. La diferencia con
el contador radica en que el incremento o disminucin de cada suma es variable en
lugar de constante, como en el caso del contador.

La forma general del acumulador es:

ACUMULADOR = ACUMULADOR + <expresin>

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.

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).

Esquema cuantitativo. Es utilizado cuando se conoce el nmero de veces que debe


repetirse un ciclo determinado, antes de activarse la estructura repetitiva. El nmero de
iteraciones puede ser un valor constante o, generalmente, una variable de entrada cuyo
valor es proporcionado al algoritmo antes de activarse el ciclo.

Esquema cualitativo. Este esquema es utilizado cuando no se conoce el nmero de


veces que debe repetirse la secuencia de un determinado ciclo. En esta clase de ciclo el
usuario decide cundo terminar con el proceso repetitivo sin importar cuantas
iteraciones se hayan efectuado; a diferencia de los ciclos anteriores, en donde el nmero
de iteraciones est determinado desde el principio.

Ruptura de ciclos. Dentro de la programacin, algunas veces, es necesario hacer que


un ciclo se detenga abruptamente (aborte), porque ya se cumpli algo que se necesitaba
o se estaba buscando, por lo que, posiblemente, no se alcance a satisfacer
completamente en una forma normal la culminacin de la cantidad de veces que debe
ejecutarse o repetirse un ciclo. La ruptura se hace cambiando el sentido de la expresin
lgica que controla el ciclo, para que sta sea falsa y no se contine ejecutando la
secuencia de instrucciones.

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.

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
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.

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.

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
AccionesN

[Default]
AccionesD

Figura 16. Estructura caso o seleccin mltiple.

Ciclo PARA (for).


La estructura PARA permite que una o ms instrucciones (secuencia) se repitan cero o ms
veces, mientras los valores de una progresin aritmtica de razn creciente o decreciente se
vayan asignando a una variable denominada variable de control del ciclo PARA. El control
del ciclo se hace en forma automtica con base en parmetros que establece el
programador.

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.

En la figura 17 se puede observar la representacin de la estructura PARA.

58

Var = VI ;condi ; inc

Acciones (repetir)

Figura 17.Ciclo PARA (for).

Ciclo Hacer mientras que (do-while).


Esta es otra estructura repetitiva de control que es implementada para efectuar un ciclo. Es
parecida a la estructura mientras y en algunos aspectos se complementan. Se utiliza en
situaciones en las que se desea que una secuencia se repita, al menos una vez, antes de
comprobar la condicin de repeticin y est formada por dos partes: una expresin de tipo
lgico y la secuencia de instrucciones, donde una de ellas debe estar modificando la
expresin.

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.

59

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
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

A la mam de Juan le preguntan su edad, y contesta: tengo 3 hijos, pregntele a Juan su


edad. Alberto tiene 2/3 de la edad de Juan, Ana tiene 4/3 de la edad de Juan y mi edad
es la suma de las tres. Hacer un algoritmo que muestre la edad de los cuatro.

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

Hacer un algoritmo que, dados dos valores numricos A y B, escriba un mensaje


diciendo si A es mayor, menor o igual a B.

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

Escribir las estructuras que calculen y muestren el valor de X, de acuerdo con lo


siguiente:

X=0

si

Y < A y (A< B < C)

X=1

si

A <= Y < B

X=2

si

B <= Y < C

X=3

si

C <= Y

X = 4 si no se cumple ninguna de las condiciones anteriores.

SI ( (Y< A) AND ((A < B) AND (B < C)) ) ENTONCES


X = 0;
SINO
SI ( (A < = Y) AND (Y < B) ) ENTONCES
X = 1;
SINO
SI ( (B < = Y) AND (Y < C) ) ENTONCES
X = 2;
SINO
SI (C < = Y) ENTONCES
X = 3;
SINO
X = 4;
FIN_SI
FIN_SI
FIN_SI
FIN_SI
Escribir X;

62

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

Elaborar un algoritmo que genere los primeros N trminos de la sucesin:


17 15 18 16 19 17 20 18 21...

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

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.

64

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.
13) Escribir un programa en pseudocdigo para determinar el rea y el volumen de un
cilindro, cuyas dimensiones radio y altura se leen desde teclado. Considere las
frmulas: V = * R * H y A = 2 * * R
14) Escribir un programa en pseudocdigo para calcular el valor de la hipotenusa de un
tringulo rectngulo aplicando el teorema de Pitgoras. Los valores de los catetos deben
ingresarse desde el teclado.
15) Escribir un programa en pseudocdigo que permita obtener la edad de una persona en
meses, dada su edad aos y meses.
16) Escribir un programa en pseudocdigo que permita calcular el rea de unos rectngulos
dados su largo y su ancho.
17) Escribir un programa en pseudocdigo que permite convertir una longitud dada en
metros a pies (1 metro = 3.28 pies)
18) Escribir un programa en pseudocdigo que permita expresar en horas, minutos y
segundos una cantidad de segundos ingresados por teclado
19) Escribir un programa en pseudocdigo que permita obtener el valor en, pesos
colombianos, libras esterlinas y marco alemanes, de una cantidad de dlares ingresadas
por teclado. Alimente al programa las cotizaciones actuales.

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

30) El primer elemento de la serie es una unidad (1)


31) 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

32) 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.
33) 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.
34) Escribir un programa en pseudocdigo para imprimir las 30 primeras potencias de 4
(41, 42, 43, etc.)
35) Escribir un programa en pseudocdigo que permita leer slo los nmeros que
representen a un mes.
36) Escribir un programa en pseudocdigo que permita leer tres nmeros desde el teclado y
reduzca si han sido ingresados en forma ascendente (de menor a mayor).
37) Escribir un programa en pseudocdigo para que lea dos nmeros enteros y obtenga su
coeficiente y resto aplicando el mtodo de restas sucesivas. No utilice las funciones div
ni mod.
38) Escribir un programa en pseudocdigo que permita obtener las tablas de multiplicar de
los nmeros dgitos mediante bucles anidados.
39) Escribir un programa en pseudocdigo para convertir las calificaciones alfabticas A,
B, C, D o E a las calificaciones numricas 4, 5, 6, 7, 8 respectivamente.
40) Escribir un programa en pseudocdigo que permita leer por teclado un nmero
comprendido entre 1 y 10 (inclusive) y que deduzca si es par o impar.
67

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.

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

Para llegar a convertirse en un desarrollador de software, no puede omitir ningn concepto;


por ese motivo comenzaremos por conocer cules son los componentes que ofrece la
tecnologa con la cual vamos a trabajar.

Microsoft .NET es una plataforma de desarrollo y ejecucin de aplicaciones de software; es


decir, proporciona los elementos necesarios para el desarrollo de aplicaciones de software,
y todos los mecanismos de seguridad y eficiencia para asegurar su ptima ejecucin.

Veamos a continuacin cules son algunas de sus principales caractersticas:

69

Las aplicaciones .NET se ejecutan en un entorno aislado del sistema operativo


denominado runtime, lo que lo hace flexible, seguro y portable.

Es 100% orientado a objetos.

Permite desarrollar aplicaciones en ms de un lenguaje de programacin.

Est diseado para permitir el desarrollo de aplicaciones corporativas complejas,


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
diferentes dispositivos de hardware.

Puede integrarse fcilmente con las aplicaciones desarrolladas en modelos anteriores.

Integra aplicaciones de otras plataformas y sistemas operativos.

4.1.1. Componentes del Framework de .NET


Los principales elementos que constituyen la plataforma .NET se pueden observar en la
figura 19.

Figura 19. Componentes del framework de .NET.


70

El entorno de ejecucin de aplicaciones o runtime es el denominado


CommonLanguageRutime (CLR). Entre sus principales funciones, se ocupa de:

Administrar la memoria de forma inteligente: Esto significa liberar y controlar


la memoria de manera automtica.

Realizar el aislamiento de aplicaciones: Si una aplicacin deja de funcionar, no


afecta a otra en ejecucin ni al sistema.

Brindar seguridad en la ejecucin de los componentes: Basa su ejecucin en la


informacin proporcionada por ellos (metadatos), que indica cmo debe
ejecutarse, qu versin utilizar y bajo qu contexto de seguridad, entre otras
cosas.

Generar cdigo nativo: La ejecucin de los componentes se realiza con un


compilador Just In Time (JIT), que traduce los componentes al cdigo nativo
segn la CPU en que se encuentre, y los ejecuta en su entorno.

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.

Lenguaje de programacin y compiladores.

Los lenguajes de programacin

permiten el desarrollo de aplicaciones sobre la plataforma .NET. Hacen uso de las


71

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.

Dado que el CLS es una especificacin abierta,

cualquier lenguaje que cumpla con ella puede ser utilizado para desarrollar en .NET.

Herramientas y documentacin.

.NET proporciona un conjunto de utilitarios y

herramientas de desarrollo que simplifican el proceso de creacin de aplicaciones, as


como tambin, documentacin y guas de arquitectura, que describen mejores prcticas
de diseo, prueba e instalacin de aplicaciones .NET.

4.1.2. Compilacin y el MSIL


Luego de escribir el cdigo fuente de nuestro programa, falta un paso ms para poder
ejecutarlo y ver nuestro trabajo funcionando: la compilacin. Este es el proceso por el cual
el cdigo fuente (C#, Visual Basic .NET, etc.) se transforma en cdigo que pueda ser
entendido por la mquina. En .NET el resultado de la compilacin es un poco diferente
(figura 20). Cuando compilamos un programa escrito en este lenguaje, el resultado no es
cdigo de mquina sino cdigo en un lenguaje intermedio creado para la plataforma .NET.
Este lenguaje se denomina MSIL (Microsoft IntermediateLanguage o lenguaje intermedio
de Microsoft), que se asemeja mucho a un cdigo en ensamblador. El cdigo MSIL
generado se almacena en un archivo denominado ensamblado (assembly). En Windows los
ensamblados ejecutables tienen extensin exe, y los que son bibliotecas de claseso de
controles tienen extensin dll.

72

Figura 20. Compilacin estndar y .NET.

Como MSIL es independiente de la plataforma, se logra una ventaja fundamental: no dejar


atado el programa compilado a una plataforma dada. Luego, al momento de ejecutar el
programa, el CLR se ocupa de leer el cdigo MSIL y de convertirlo en cdigo propio de la
mquina en la que se va a ejecutar. Para compilar, el CLR se vale del JIT-Compiler. El JIT
se encarga de hacer la compilacin final; es decir, los assemblies generados son tomados
por el JIT del CLR, traducidos a cdigo nativo de la CPU en la que se encuentra y
ejecutados en un ambiente aislado dentro del CLR (figura 21).

Figura 21. Esquema de ejecucin del CLR.


73

4.1.3. Entorno de desarrollo para aplicaciones de consola


Para que la creacin de aplicaciones en .NET sea lo ms productiva posible, Microsoft
ofrece su propio entorno de desarrollo: Visual Studio. Se trata de un IDE preparado para
aprovechar todas las caractersticas del framework .NET y darle al programador un entorno
nico desde donde realizar todas sus tareas.

Un IDE (IntegratedDevelopmentEnvironment) es un espacio de trabajo que proporciona un


conjunto de mens, toolbars y ventanas para realizar las diferentes tareas de programacin.

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.

74

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.

En este espacio aparecen todos los documentos que estemos

manejando, tanto en vista de cdigo como en vista de diseo.

e
b

Figura 22. Secciones del entorno de desarrollo.

4.2.

Fundamentos del Lenguaje

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

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.

La sintaxis de C# es muy parecida a la de C, C++ y Java. Para el diseo de este lenguaje,


Microsoft decidi modificar o aadir nicamente aquellas cosas que en no tienen una
relativa equivalencia. Por ejemplo, un dato para tener en cuenta es que en C# todas las
instrucciones y declaraciones deben terminar con ; (punto y coma), salvo cuando se abra
un bloque de cdigo. A diferencia de lo que sucede en Visual Basic, una instruccin que
sea muy larga puede ponerse en varias lneas, sin ingresar ningn tipo de signo especial al
final de cada una.

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

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:
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;

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;
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;

En esa misma lnea podemos declarar y asignar ms variables, simplemente separndolas


con comas:

int b = 12, c = 15;

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

<=

Menor o igual que

>=

Mayor o igual que

!=

Diferente
Lgicos

&&

Conjuncin

||

Disyuncin

Negacin

Tabla 7. Operadores en C#

80

4.3.

Sentencias

En los siguientes prrafos se revisa la forma de implementar en C# las estructuras de


decisin y de repeticin estudiadas en el captulo 3, analizando nicamente su sintaxis pues
se asume que el alumno ya comprende su funcionamiento.

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

//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
}

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.

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);

83

A la mam de Juan le preguntan su edad, y contesta: tengo 3 hijos, pregntele a Juan su


edad. Alberto tiene 2/3 de la edad de Juan, Ana tiene 4/3 de la edad de Juan y mi edad
es la suma de las tres. Hacer un algoritmo que muestre la edad de los cuatro.

int EDJUAN, EDALBER, EDANA, EDMAMA;


Console.WriteLine("Ingrese edad de Juan:");
EDJUAN = Convert.ToInt32(Console.ReadLine());
EDALBER = 2 * EDJUAN / 3;
EDANA = 4 * EDJUAN / 3;
EDMAMA = EDJUAN + EDALBER + EDANA;
Console.WriteLine("Las

edades

son.

Alberto={0},

Juan={1},

Ana={2},

Mam={3}",EDALBER,EDJUAN,EDANA,EDMAMA);

Hacer un algoritmo que, dados dos valores numricos A y B, escriba un mensaje


diciendo si A es mayor, menor o igual a B.

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.

int NUM = 0, SUMA = 0;


while (NUM < 5)
{
NUM = NUM + 1;
SUMA = SUMA + NUM;
}
Console.WriteLine("LA SUMA ES: {0}", SUMA);

Elaborar un algoritmo que genere los primeros N trminos de la sucesin:


17 15 18 16 19 17 20 18 21...

int NT, TER, CONT, BAN;


Console.WriteLine("Ingrese la cantidad de trminos:");
NT = Convert.ToInt32(Console.ReadLine());
TER = 17;
CONT = 1; BAN = 1;
while (CONT <= NT)
{
Console.WriteLine(TER);
if (BAN == 1)
{
TER = TER - 2;
BAN = 2;
85

}
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.

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
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.

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.

88

<Instrucciones 1>
<Llamada uno a A>
<Instruccin 3>

Pasa
informacin
cede control
Retorna
control e
informacin

Subprograma
A
<Instrucciones>

Pasa
informacin
cede control

<Llamada uno a B>

Retorna
control e
informacin

<Instruccin i>

Subprograma
B
Llamada a C

Pasa
informacin
cede control

<Llamada dos a A>


<Instruccin k>

Retorna
control e
informacin

<Instruccin i>

Cede control
Retorna
control

Subprograma
C
<Instrucciones>

Subprograma
A
<Instrucciones>

<Instruccin n>

Figura 23. Subprogramas.

Cuando un algoritmo invoca a un subprograma es como si las instrucciones de ste se


copiaran dentro del algoritmo y las ejecutara; en el caso del subprograma A, no tiene
sentido tener el mismo grupo de instrucciones repetidas dentro del algoritmo; como los
subprogramas pueden compilarse y ponerse a punto independientemente del programa que
los invoque, stos se disean para que sean usados en diferentes programas. Por ejemplo, si
en un sistema de cmputo con frecuencia se necesitan ordenamientos de los elementos de
un vector, una buena solucin es disear un subprograma que haga el ordenamiento y cada
vez que sea necesario implementarlo, simplemente se le encomienda la tarea al
subprograma (No hay que hacerlo).

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

Son subprogramas que no devuelven valores al programa o subprograma que lo invoca


(utiliza) y retornan el control de ejecucin a la instruccin siguiente desde donde se llaman.

La sintaxis para un implementar un procedimiento en C# es:

staticvoid nombre ( parmetros )


{
//bloque de cdigo necesario
}

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.

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.
91

La sintaxis para un implementar una funcin en C# es:

statictipo_dato_retorno nombre ( parmetros )


{
//bloque de cdigo necesario
returnvalor_devuelto;
}

Figura 24. Componentes de una funcin.

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):

variable = nombre_funcin (Argumentos);

En la figura 24 puede observar un pequeo programa que contiene una funcin, y su


composicin.

5.3. Paso de parmetros: por valor y por referencia


En C#, los argumentos se pueden pasar a parmetros por valor o por referencia.

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.

La forma de utilizar en C# el paso de parmetro por valor y por referencia,


respectivamente, es la siguiente:

Tipo_datonombre_Parmetro

refTipo_datonombre_Parmetro

93

Ejercicios resueltos


Elabore un subprograma que encuentre la suma y el promedio de un conjunto de N


nmeros.

PROCEDIMIENTO SUMPROM (N, SUMA, PROM)


SUMA = 0;
PARA ( I = 1; I<=N; I++ ) HAGA
LEER NUM;
SUMA = SUMA + NUM;
FIN_PARA
PROM = SUMA / N;
FIN_SUMPROM

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

94

Elaborar un subprograma que encuentre el factorial de un nmero entero mayor o igual


a cero.

FUNCIN FAC (N)


FACTO=1;
PARA ( I= 1;I<=N; I++ ) HAGA
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.

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.

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
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

6.1. Arreglos de una dimensin o vectores


Un vector es un arreglo donde los elementos que lo conforman estn dispuestos bajo un
mismo concepto de clasificacin (fila o columna), es decir, los datos estn organizados de
una manera lineal, por lo que para referenciar un elemento del arreglo es necesario un
ndice, que indique la posicin relativa del elemento en el arreglo.

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.

Grficamente un vector puede ser representado en cualquiera de las siguientes formas


(figura 25):
nombre [xx]

Figura 25. Representacin grfica de un vector.


97

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]


98

ESCRIBA: EDAD[4], EDAD[2]

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.

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 ;
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

string saludo = "Hola mundo!";


conststring mensaje2 = "Odio programar!";

A continuacin de mencionan algunos aspectos importantes sobre las cadenas:

La longitud de una cadena representa su nmero de caracteres:

stringcad = "Programar es divertido.";


Console.WriteLine(cad.Length); // Muestra 23 (caracteres de la cadena)

El operador + concatena cadenas:

string a = "good " + "morning";

El operador [] se puede utilizar para tener acceso de slo lectura a caracteres


individuales de un objeto string:

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:

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
*/

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\";

Una subcadena es una secuencia de caracteres cualquiera incluida en una cadena.Utilice


el mtodo Substring para crear una nueva cadena a partir de un segmento de la cadena
original. Puede buscar una o ms apariciones de una subcadena con el mtodo IndexOf.
Utilice el mtodo Replace para reemplazar todas las apariciones de una subcadena
especificada por una cadena nueva. Al igual que el mtodo Substring, Replace devuelve
en realidad una cadena nueva y no modifica la cadena original.

6.3.

Operaciones bsicas con arreglos

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

descendente. Si el ordenamiento es creciente o ascendente, significa que hay que organizar


sus elementos de tal manera que:

A[0] < A[1] < A[2] < A[3] ..........< A[N].

Si el ordenamiento es ascendente significar que:

A[0] > A[1] > A[2] > A[3] ..........> A[N].

Existen diferentes modelos para organizar los elementos de un arreglo, siendo el ms


comn el mtodo de burbuja.

El mtodo de burbuja es un mtodo poco eficiente. Se basa en comparar elementos


adyacentes del vector e intercambiar sus valores, si estn desordenados. Los valores ms
pequeos burbujean hacia el inicio del vector (ordenacin ascendente), mientras que los
valores ms grandes comienzan a subir hacia la parte final del vector. Por ejemplo, se
compara A[0] con A[1]; si estn desordenados se intercambian A[0] con A[1] y as
sucesivamente a lo largo del vector. Al terminar la primera pasada, el elemento mayor se
encuentra al final y el menor ha ido descendiendo hacia el principio del vector. Se vuelve a
hacer una nueva exploracin, comparando elementos consecutivos e intercambiando. Pero
esta vez el elemento mayor no se compara (est en su posicin correcta). El vector quedar
ordenado cuando se hayan hecho N-1 pasadas. Si los valores del vector son:

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

VECTOR ORIGINAL DE TAMAO 5 (N)

Se necesitaron 4 comparaciones (N-1) para colocar el valor mayor de ltimo.

103

En la segunda pasada ocurrir lo siguiente:

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

En total se necesitaron cuatro pasadas para ordenar un vector de 5 elementos.

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:

Verificar que el arreglo no est vaco.


104

Buscar la posicin donde se encuentra el elemento a borrar.

Correr los elementos una posicin hacia la izquierda, a partir de la posicin


siguiente donde se encuentra el valor a borrar.

Disminuir el nmero de elementos del vector en uno.

Enviar un mensaje en caso de que el elemento a borrar no est dentro del arreglo.

6.4. Arreglos de dos dimensiones o matrices


Las matrices son estructuras de datos que organizan su informacin en forma de tablas; es
decir, los elementos que la conforman estn dispuestos bajo dos conceptos de clasificacin
(fila y columna). Para poder indicar el lugar donde se encuentra un determinado elemento,
es necesario utilizar dos ndices: uno para indicar el rengln o fila y otro para indicar la
columna.

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.

Un arreglo bidimensional M * N tiene M filas y N columnas; por lo tanto, tiene M * N


elementos dispuestos interiormente en memoria en forma sucesiva. Grficamente se puede
representar como una tabla de valores. Si A es una matriz de 5 * 7 se representar as
(figura 26):
Columnas
0

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.

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
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

Figura 27. Elementos de una matriz (A).

Los dems elementos no tendrn informacin.

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:

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


Elabore un programa que permita ingresar la nmina de alumnos de un curso y tres


calificaciones para cada uno, mostrar los datos ingresados y calcular el promedio de
notas del curso.

Utilice un arreglo unidimensional para los nombres y uno

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

static void Main(string[] args)


{
string[] nomina;
float[,] notas;
intnumAl;

Console.Write("Ingrese la cantidad de alumnos: ");


numAl = Convert.ToInt32(Console.ReadLine());
nomina = new string[numAl];
notas = new float[numAl, 3];

ingresar(nomina,notas);

Console.WriteLine("\nLISTADO DE ALUMNOS");
Console.WriteLine("Nombres\tN1\tN2\tN3");
mostrar(nomina,notas);

Console.WriteLine("\n\nPromedio: {0}", calcularPromedio(notas));


}

static void ingresar(string[] nomina, float[,] notas)


{
int i, j;
for (i = 0; i <notas.GetLength(0); i++)
{
Console.WriteLine("\nDatos del alumno No. {0}", i+1);
Console.Write("Nombre:\t");
nomina[i] = Console.ReadLine();
for (j = 0; j <notas.GetLength(1); j++)
{
Console.Write("Nota {0}:\t",j+1);
108

notas[i, j] = Convert.ToSingle(Console.ReadLine());
}
}
}

static void mostrar(string[] nomina, float[,] notas)


{
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;
}

109

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.

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.
110

BIBLIOGRAFA


Aho, Alfed. Et. Al. (1998). Estructura de datos y algoritmos. Addison-Wesley.Mxico.

Charte, Francisco. (2002). Programacin con Visual C# .NET. Anaya. Espaa.

Ferguson, Jeff. . Et. Al. (2003). La Biblia de C#. Anaya Multimedia. Espaa.

Joyanes Aguilar, Luis. (2003). Fundamentos de programacin. Algoritmos, estructuras


de datos y objetos. Tercera edicin. McGraw-Hill. Espaa.

Joyanes Aguilar, Luis. Programacin en C: Metodologa Algoritmos y Estructura de


Datos. McGraw-Hill. Espaa.

Liberty, Jesse. (2005). Programming C#. O'Reilly. United States of America.

Montenegro, Carlos. (1999). Programacin Algortmica. Ecuador.

acato, Jos. (1998). Cmo disear algoritmos para computadoras. Editorial Parra.
Ecuador.

Rodrguez Almeida, Angel. (1991). Metodologa de la Programacin a travs de


pseudocdigo.McGraw-Hill. Espaa.

111

Você também pode gostar