Está en la página 1de 140

ALGORITMO Y ESTRUCTURA DE DATOS I

1

UNIVERSIDAD TECNOLGICA DEL PER
Vicerrectorado de Investigacin







ALGORITMOS Y ESTRUCTURA
DE DATOS I

TINS
INGENIERA INDUSTRIAL, INGENIERA DE SISTEMAS



TEXTOS DE INSTRUCCIN (TINS) / UTP


Lima - Per


ALGORITMO Y ESTRUCTURA DE DATOS I
2














ALGORITMOS Y ESTRUCTURA DE DATOS I
Desarrollo y Edicin: Vicerrectorado de Investigacin

Elaboracin del TINS: Ing. Carlos Parra Terrazos
Diseo y Diagramacin: Julia Saldaa Balandra
Soporte acadmico: Instituto de Investigacin
Produccin: Imprenta Grupo IDAT


Queda prohibida cualquier forma de reproduccin, venta, comunicacin pblica y transformacin
de esta obra.
ALGORITMO Y ESTRUCTURA DE DATOS I

3
















El presente material contiene una compilacin de contenidos de
obras Algoritmos y Estructura de Datos publicadas lcitamente,
resmenes de los temas a cargo del profesor; constituye un material
auxiliar de enseanza para ser empleado en el desarrollo de las clases
en nuestra institucin.

ste material es de uso exclusivo de los alumnos y docentes de la
Universidad Tecnolgica del Per, preparado para fines didcticos
en aplicacin del Artculo 41 inc. C y el Art. 43 inc. A., del Decreto
Legislativo 822, Ley sobre Derechos de Autor.
ALGORITMO Y ESTRUCTURA DE DATOS I
4

ALGORITMO Y ESTRUCTURA DE DATOS I

5
PRESENTACIN


El presente texto elaborado en el marco de desarrollo de la Ingeniera, es
un material de ayuda instruccional, para las carreras de Ingeniera de: Sistemas,
Industrial, Electrnica, Mecatrnica y Telecomunicaciones, para la Asignatura de
Algoritmos y Estructura de Datos.

Plasma la iniciativa institucional de innovacin de la
enseanza-aprendizaje educativo universitario, que en acelerada continuidad
promueve la produccin de materiales educativos, actualizados en concordancia a
las exigencias de estos tiempos.

Esta primera edicin apropiadamente recopilada, de diversas fuentes
bibliogrficas, de uso frecuente en la enseanza de Algoritmos, est ordenada en
funcin del syllabus de la Asignatura, arriba mencionada.

La conformacin del texto ha sido posible gracias al esfuerzo y dedicacin
acadmica del Profesor Ing. Carlos Parra Terrazos; contiene seis captulos, cuyas
descripciones genricas son como sigue:

Captulo 1: Conceptos fundamentales. Antes de introducirnos en el
contenido de este manual ser necesario conocer los conceptos bsicos que nos
ayudaran a tener un panorama general y entender con mayor facilidad los
siguientes captulos. Aprenderemos a diferenciar un algoritmo de un programa y
de un lenguaje de programacin, as como conocer la importancia de los tipos de
datos y los datos para la programacin.

Captulo 2: Estructura general de un programa. En este captulo
encontraremos el concepto de Programa, las partes que lo conforman e
introduciremos al estudiante en el proceso de la programacin a partir de la
presentacin de programas en lenguaje C. Tambin se detallarn las instrucciones
y sus tipos.

Captulo 3: Estructuras de control. Durante un programa existen
acciones que cambian el flujo de control de un programa estas estructuras bsicas
de acuerdo a la programacin estructurada son: La estructura secuencial, la
estructura selectiva o condicional y la estructura repetitiva o de iteracin;
necesarias para poder disear algoritmos de cualquier grado de dificultad.



ALGORITMO Y ESTRUCTURA DE DATOS I
6
Captulo 4: Subprogramacin. Modularidad es un concepto que tiene
aplicaciones en la ciencia de la computacin, particularmente para permitir
manejar la complejidad de los programas a partir del concepto de divide y
vencers cuya implementacin se lleva a cabo mediante el diseo descendente y
refinamientos sucesivos as como su implementacin mediante las funciones y
procedimientos.

Captulo 5: Recursividad. Este captulo nos detallar la recursividad en
Algoritmos, esta herramienta es muy til en la solucin de problemas; ya que
transforma a stos en problemas ms sencillos a partir de la llamada de los
programas, a si mismos.

Captulo 6: Datos estructurados. Los datos se clasifican en datos simples
y datos estructurados o estructuras de datos que son una forma de organizar un
conjunto de datos para poder manipularlos con mayor facilidad, como si se tratase
de uno solo. En esta parte se conocern los arreglos, los registros y las cadenas de
caracteres.

Finalmente, al cierre de estas lneas, el agradecimiento institucional al
profesor Ing. Carlos Parra Terrazos por su contribucin a la elaboracin del
presente texto.



Vicerrectorado de Investigacin
ALGORITMO Y ESTRUCTURA DE DATOS I

7

NDICE


CAPTULO I: CONCEPTOS FUNDAMENTALES
1.1 CONCEPTO DE ALGORITMO, EL SOFTWARE, LENGUAJES DE
PROGRAMACION.............................................................................. 11
1.2 RESOLUCIN DE PROBLEMAS CON COMPUTADORA -
FASES .................................................................................................. 13
1.3 HERRAMIENTAS DE PROGRAMACIN....................................... 16
1.4 TIPOS DE DATOS............................................................................... 20
1.5 CONSTANTES, VARIABLES, IDENTIFICADORES,
EXPRESIONES, FUNCIONES ........................................................... 23
1.6 PARTE PRCTICA............................................................................. 27
PROBLEMAS PROPUESTOS ............................................................ 27
LABORATORIO N 1......................................................................... 31

CAPTULO II: ESTRUCTURA GENERAL DE UN PROGRAMA
2.1 ESTRUCTURA DE UN PROGRAMA EN C. .................................... 40
2.2 ESTRUCTURA DE ALGORITMO..................................................... 44
2.3 CONTADORES, ACUMULADORES. ............................................... 44
2.4 PARTE PRCTICA............................................................................. 47
PROBLEMAS PROPUESTOS ............................................................ 47
LABORATORIO N 2.......................................................................... 49

CAPTULO III: ESTRUCTURAS DE CONTROL
3.1 PROGRAMACIN ESTRUCTURADA............................................. 59
3.2 ESTRUCTURA DE CONTROL TIPOS........................................... 59
3.3 PARTE PRCTICA............................................................................. 74
PROBLEMAS PROPUESTOS ............................................................ 74
LABORATORIO N 3.......................................................................... 78

CAPTULO IV: SUBPROGRAMACIN
4.1 PROGRAMACIN MODULAR......................................................... 83
4.2 SUBPROGRAMAS TIPOS............................................................... 85
4.2.1 VARIABLES GLOBALES Y LOCALES. ............................ 87
4.2.2 FUNCIONES, PASO DE PARMETROS............................ 89
4.3 PARTE PRCTICA............................................................................. 94
PROBLEMAS PROPUESTOS ............................................................ 94
LABORATORIO N 4.......................................................................... 95
ALGORITMO Y ESTRUCTURA DE DATOS I
8
CAPTULO V: RECURSIVIDAD
5.1 RECURSIVIDAD............................................................................... 103
5.2 CARACTERSTICAS........................................................................ 103
5.3 VENTAJAS Y DESVENTAJAS ....................................................... 104
5.4 PELIGROS EN LA RECURSIVIDAD.............................................. 104
5.5 TIPOS DE ALGORITMOS RECURSIVOS...................................... 105
5.6 VERIFICACIN DE FUNCIONES RECURSIVAS ........................ 107
5.7 LA PILA DE RECURSIN............................................................... 108
5.8 LLAMADA A UNA FUNCIN RECURSIVA................................ 108
5.9 PARTE PRCTICA........................................................................... 109
PROBLEMAS PROPUESTOS .......................................................... 109
LABORATORIO N 5........................................................................ 110

CAPTULO VI: DATOS ESTRUCTURADOS
6.1 TIPOS ................................................................................................. 113
6.2 ARREGLOS UNIDIMENSIONALES, DECLARACION Y
ACCESO............................................................................................. 114
6.3 ARREGLOS BIDIMENSIONALES, DECLARACION Y ACCESO117
6.4 REGISTROS....................................................................................... 122
6.4.1 CONCEPTO ......................................................................... 122
6.4.2 DECLARACION Y ACCESO............................................. 122
6.4.3 ARREGLO DE REGISTROS .............................................. 124
6.5 CADENAS DE CARACTRES........................................................ 125
6.6 PARTE PRCTICA........................................................................... 129
PROBLEMAS PROPUESTOS: ......................................................... 129
LABORATORIO N 6........................................................................ 130

BIBLIOGRAFA .......................................................................................... 1389




ALGORITMO Y ESTRUCTURA DE DATOS I

9
DISTRIBUCIN TEMTICA
Clase
N
TEMA SEMANA
1 Conceptos Fundamentales 1
2 Tipo de datos 2
3 Estructura general de un programa 3
4 Estructuras de control 4
5 Selectiva doble Selectiva mltiple 5
6 Selectiva de control (SEGN SEA) 6
7 Iterativa (REPETIR DESDE) 7
8 Iterativa (REPETIR - MIENTRAS ) 8
9 Revisin Nivelacin 9
10 E X A M E N P A R C I A L 10
11 Subprogramacin 11
12 Procedimientos de paso de parmetros 12
13 Recursividad 13
14 Datos Estructurados 14
ALGORITMO Y ESTRUCTURA DE DATOS I
10
Clase
N
TEMA SEMANA
15 Arreglos bidimensionales Declaracin y acceso 15
16 Registros 16
17 Cadena de caracteres 17
18 ndices 18
19 Nivelacin Recuperacin 19
20 EXAMEN FINAL 20
21 EXAMEN SUSTITUTORIO 21
ALGORITMO Y ESTRUCTURA DE DATOS I

11
CAPTULO I: CONCEPTOS FUNDAMENTALES



1.1 CONCEPTO DE ALGORITMO, EL SOFTWARE, LENGUAJES
DE PROGRAMACIN

a) CONCEPTOS DE ALGORITMO
Un algoritmo es un conjunto finito de instrucciones o
pasos con una secuencia lgica que sirven para ejecutar
una tarea o resolver un problema.
De un modo ms formal, un algoritmo es una secuencia
lgica finita de operaciones realizables, no ambiguas,
cuya ejecucin da una solucin de un problema en un
tiempo finito.

- COMPONENTES DE UN ALGORITMO
Entrada : Datos del problema a resolver.
Salida : El resultado de la resolucin.
Procesos : Paso a seguir en la resolucin.

- CARACTERSTICAS DE UN ALGORITMO

PRECISIN Solucin clara sin ambigedad.
REPETITIVIDAD Idnticos resultados en las mismas
condiciones iniciales.
FINITUD Solucin en un tiempo finito.
EFICIENCIA Tiempo de ejecucin.
Requerimiento de memoria.

- ALGORITMO VS LENGUAJ E DE PROGRAMACIN
Un lenguaje de programacin es tan solo un medio para
expresar un algoritmo.

EJ EMPLO N 1
Un cliente efecta un pedido a una compaa, La compaa
verifica en su banco de datos la ficha del cliente, si el cliente
es solvente entonces la compaa acepta el pedido; en caso
ALGORITMO Y ESTRUCTURA DE DATOS I
12
contrario, rechazar el pedido. Realizar el algoritmo del
ejemplo.


Los pasos del algoritmo son:
1. Inicio
2. Leer el pedido
3. Verificar la ficha del cliente
4. Si el cliente es solvente, aceptar pedido; en caso
contrario, rechazar pedido.
5. Fin

CONCEPTO DE PROGRAMA

Un programa es una secuencia de instrucciones de la
CPU.
Cada instruccin es un conjunto de bytes.
Conjunto de instrucciones dado al ordenador para
realizar un proceso determinado.

EJ EMPLO N 2

1. Leer un dato del teclado.
2. Guardar un dato en la memoria.
3. Ejecutar una operacin sobre los datos.
4. Mostrar un dato en la pantalla.

b) CONCEPTO DE SOFTWARE
Es la parte lgica de la computacin.
Conjunto de programas que sirven para representar un
segmento de la realidad y resolver un problema. Como
por ejemplo: el Office, un sistema operativo, C++,
Pascal, Java, etc.

c) LENGUAJES DE PROGRAMACIN
Son aquellos lenguajes que se utilizan para realizar
algoritmos interpretables por la computadora.

Caractersticas imprescindibles Estructura de Control.
Programacin Modular
(funciones).

Los principales tipos de lenguajes utilizados antes y en la
actualidad son tres:
ALGORITMO Y ESTRUCTURA DE DATOS I

13

Lenguaje mquina.
Lenguaje de bajo nivel (ensamblador).
Lenguajes de alto nivel: C, C++, Visual Basic, Java,
Pascal, Prolog.

1.2 RESOLUCIN DE PROBLEMAS CON COMPUTADORA -
FASES
Actualmente la resolucin de problemas con computadoras facilita
el trabajo del usuario, debido a la gran velocidad de esta
herramienta (computadora).

El siguiente esquema nos muestra las fases de la resolucin de
problemas con computadora.





















ALGORITMO Y ESTRUCTURA DE DATOS I
14
FASE N 01: ANLISIS DEL PROBLEMA




EJ EMPLO N 3
Imprimir la hipotenusa, teniendo los lados de un triangulo
rectngulo.

Variables: LADO1, LADO2 y LADO3 (tipo reales).
Entradas: Valores de los lados (variable LADO1 y variable
LADO2).
Salida: Valor de la hipotenusa (variable LADO3).


FASE N 02: DISEO DEL ALGORITMO














ALGORITMO Y ESTRUCTURA DE DATOS I

15
EJ EMPLO N 4
Determine a los nmeros menores que 90 y mltiplos de 9, as
como su sumatoria.














FASE N 03: SOLUCIN DEL PROBLEMA POR COMPUTADORA
Traduccin del algoritmo al lenguaje de programacin. La
complejidad depende mucho del lenguaje escogido.

Imprescindible: Conocimiento de la sintaxis del lenguaje.

Buenos diseos del
Algoritmo
+ Traduccin casi automtica
Lenguaje estructurado

FASE N 04: VERIFICACIN Y DEPURACIN


Definicindel
Problema
Especificacione
s de entrada
Especificacione
s de salida
Imprimir
mltiplos de 9
y su suma
siempre y
cuando sea
menor que 90
TOTAL = 0
NUM = 9
LIMITE = 90
NUM, TOTAL
Definicin del
problema
ALGORITMO Y ESTRUCTURA DE DATOS I
16

FASE N 05: DOCUMENTACIN
Descripcin de qu hace el programa y cmo lo hace.

Documentacin interna:
Comentarios: lneas informativas incluidas en el cdigo.

Tarea que realiza.
Datos de entrada y salida.
Condiciones de error.

Codificacin auto documentada.

Nombres de variables y funciones con significado.
Estructura fcil de leer.


Documentacin externa:
Manuales, estructura y especificaciones del programa, historia de
las modificaciones, etc.

FASE N 06: MANTENIMIENTO





1.3 HERRAMIENTAS DE PROGRAMACIN
Son aquellas que permiten realizar aplicativos, programas, rutinas,
utilitarios y sistemas para que la parte fsica del computador u
ordenador, funcione y pueda producir resultados.

ALGORITMO Y ESTRUCTURA DE DATOS I

17
Un ejemplo claro son los Lenguajes de Programacin, las libreras,
los utilitarios, los generadores de reportes, pantallas, etc.

Las herramientas ms usadas para desarrollar algoritmos son:

Lenguaje natural.
Organigramas.
Diagramas Nassi Shneiderman (N - S).
Pseudocdigo.
Otros

LENGUAJE NATURAL:
Es un lenguaje utilizado para describir los pasos de cmo
realizamos algo, de una forma sencilla.

Ventajas: Facilidad de comprensin.
Inconvenientes:
o El lenguaje natural no es universal, un algoritmo de
lenguaje natural en ingls, por ejemplo, sera
completamente intil para los hispanohablantes.
o El lenguaje natural es ambiguo y, por tanto, susceptible de
errores.
o El lenguaje natural es demasiado amplio, lo que para una
persona puede ser una instruccin sencilla puede no serlo
para otra y desde luego no lo ser para una computadora.

EJ EMPLO N 5
El algoritmo para encontrar las races de una ecuacin de
segundo grado podra describirse as:

x = (-b + b
2
4ac) / (2a)

1. Definir los coeficientes de la ecuacin de segundo grado: a,
b y c.
2. Determinar el valor del discriminante: b
2
4ac.
3. Si el discriminante es cero slo hay una solucin: -b/ (2a).


ORGANIGRAMAS:
Los organigramas o diagramas de flujo permiten describir los
algoritmos de forma grafica.

ALGORITMO Y ESTRUCTURA DE DATOS I
18
Utilizan una serie de bloques que indican distintas
circunstancias y flechas que muestran bajo qu condiciones se
pasa de un bloque a otro.




















ALGORITMO Y ESTRUCTURA DE DATOS I

19
DIAGRAMA DE FLUJO VS PSEUDOCDIGO:

Estructuras Pseudocdigo Diagrama de flujo
Inicio

Begin




Entrada y salida de
Datos

Read x
Write x

Sentencia

Calcular x = y+3




Secuencia de
sentencias

Se escribe en lneas
separadas
Calcular x = y+3
Calcular z = 2*x



Seleccin

IF condicin entonces
Accin 1
ELSE
Accin 2



Repeticin

DO WHILE
Accin 1







Fin End



Read x
Begin
ALGORITMO Y ESTRUCTURA DE DATOS I
20

Una vez diseado el algoritmo y representado mediante una
herramienta de programacin se debe:





















1.4 TIPOS DE DATOS
Un dato es la expresin general que describe los objetos con
los cuales opera la computadora.
Todos los datos tienen un tipo asociado con ellos.
Un dato puede ser un simple carcter, tal como b, un valor
entero tal como 35.
El tipo de dato determina la naturaleza del conjunto de valores
que puede tomar una variable.

DATOS VS INFORMACIN

D DA AT TO OS S V VS S I IN NF FO OR RM MA AC CI I N N
- Medidas objetivas de atributos
de entidades.
- Cifras/hechos crudos (en
bruto) sin interpretar o analizar.
- No son estmulos de accin.

- Resultado de haber organizado
o analizado los datos de alguna
manera lgica.
- Reduce la incertidumbre.
- Impulsa a la accin.



Solucin del Problema
por Computadora
Codificacin del
programa
Ejecucin del
programa
Comprobacin del
programa
Solucin del Problema
por Computadora
Codificacin del
programa
Ejecucin del
programa
Comprobacin del
programa
Programa
fuente
Programa
Objeto
Programa
ejecutable
Compilador
(Compiler)
Montador
(Linker)
Programa
fuente
Programa
Objeto
Programa
ejecutable
Compilador
(Compiler)
Montador
(Linker)
ALGORITMO Y ESTRUCTURA DE DATOS I

21
EJ EMPLO N 6

















- CLASIFICACIN
























TIPO
DE
DATO
DATOS SIMPLES
DATOS
ESTRUCTURADOS
ESTANDAR
DEFINIDOS X
EL PROGRAMADOR
NUMERICO
CHARACTER
LOGICO (BOOLEAN)
REAL
ENTERO
ENUMERATIVO
SUBRANGO
ESTATICOS
DINAMICOS
ARRAYS
REGISTRO
ARCHIVO (FICHERO)
LISTA (PILA/COLA)
LISTA ENLAZADA
CONJUNTO)
CADENA (STRING)
ARBOL
GRAFO
TIPO
DE
DATO
DATOS SIMPLES
DATOS
ESTRUCTURADOS
ESTANDAR
DEFINIDOS X
EL PROGRAMADOR
NUMERICO
CHARACTER
LOGICO (BOOLEAN)
REAL
ENTERO
ENUMERATIVO
SUBRANGO
ESTATICOS
DINAMICOS
ARRAYS
REGISTRO
ARCHIVO (FICHERO)
LISTA (PILA/COLA)
LISTA ENLAZADA
CONJUNTO)
CADENA (STRING)
ARBOL
GRAFO
DATOS
35.000 Soles
1250 unidades
Jos Perez Lima
83.000 Dlares.
3800 unidades
.......
PROCESAMIENTO
DE DATOS
INFORMACIN
Cliente: Jos Perez
Sucursal: Lima
Compras del mes:
1250 unidades=35.000
Soles. ......
DATOS
35.000 Soles
1250 unidades
Jos Perez Lima
83.000 Dlares.
3800 unidades
.......
PROCESAMIENTO
DE DATOS
INFORMACIN
Cliente: Jos Perez
Sucursal: Lima
Compras del mes:
1250 unidades=35.000
Soles. ......
ALGORITMO Y ESTRUCTURA DE DATOS I
22

- TIPOS DE DATOS SIMPLES



























Representacin Tipo
Longitud
de byte
Rango
Carcter
Char
Unsigned
char
1
1
-128 a 127
Enteros
Int
Short int
Unsigned int
Long
Unsigned
long
2
2
2
4
4
-32768 a 32767
-32768 a 32767
0 a 65535
-2147483648 a
2147483647
0 a 4294967295
Reales
Float
Double
Long double
4
8
10
3.4E38
1.7E308
3.4E-4932 a 1.1E+4932
DATOS NUMRICOS

Permiten representar
valores escalares de
forma numrica, esto
incluye a los nmeros
enteros y los reales.

Este tipo de datos
permiten realizar
operaciones aritmticas
DATOS LGICOS

Son aquellos que slo
pueden tener dos valores
(cierto o falso) ya que
representan el resultado
de una comparacin entre
otros datos (numricos o
alfanumricos).

DATOS ALFANUMRICOS

Es una secuencia de caracteres alfanumricos que permiten
representar valores identificables de forma descriptiva, esto
incluye nombres de personas, direcciones, etc.

Es posible representar nmeros como alfanumricos, pero estos
pierden su propiedad matemtica, es decir no es posible hacer
operaciones con ellos.

Este tipo de datos se representan encerrados entre comillas.

ALGORITMO Y ESTRUCTURA DE DATOS I

23

POR QU ESTUDIAR LOS DATOS?















LOS PROGRAMAS OPERAN SOBRE DATOS

ALGORITMOS
+
ESTRUCTURA DE DATOS
=
PROGRAMA
NIKLAUS WIRTH


1.5 CONSTANTES, VARIABLES, IDENTIFICADORES,
EXPRESIONES, FUNCIONES

- CONSTANTES
Constantes: Valores que durante la ejecucin de un programa
no cambian su valor.

Ejemplo: pi = 3.1416

- VARIABLES
Definicin 1: Valores que cambiarn durante la ejecucin del
programa.

Definicin 2: Es un espacio en la memoria de la computadora que
permite almacenar temporalmente un dato durante la ejecucin de
DATOS DE
ENTRADA
ALGORITMO
DATOS DE
SALIDA
DATOS DE
ENTRADA
ALGORITMO
DATOS DE
SALIDA
ALGORITMO Y ESTRUCTURA DE DATOS I
24
un proceso, su contenido puede cambiar durante la ejecucin del
programa.

CLASIFICACIN DE LAS VARIABLES











* POR SU USO

DE TRABAJO
Variables que recibe el resultado de una operacin
matemtica completa y que se usan normalmente dentro
de un programa.

Ejemplo: Suma a + b /c

CONTADORES
Se utilizan para llevar el control del nmero de ocasiones
en que se realiza una operacin o se cumple una
condicin. Con los incrementos generalmente de uno en
uno.

Ejemplo: Cont Cont + 1
Num Num + 2

ACUMULADORES
Forma que toma una variable y que sirve para llevar la
suma acumulativa de una serie de valores que se van
leyendo o calculando progresivamente.

Ejemplo: Suma Suma + cant

IDENTIFICADORES
Para poder reconocer una variable o una constante en la memoria
de la computadora, es necesario darle un nombre con el cual
ALGORITMO Y ESTRUCTURA DE DATOS I

25
podamos identificarla dentro de un algoritmo, esto se llama un
identificador.

Ejemplo:
rea pi * radio ^ 2
Los identificadores son: el radio, el rea y la constante es pi.


EXPRESIONES
Se definen como una combinacin de constantes, variables,
smbolos de operacin, parntesis, y nombres de funciones
especiales.

Una expresin consta de operandos y operadores.

Ejemplo: x + (y+10)+ z/2

Las expresiones se clasifican en:

o Aritmticas
o Lgicas
o Carcter





















Entero Entero mdulo Mod
Entero Entero Divisin entera Div
Real Real Divisin /
Entero o real Entero o real Multiplicacin *
Entero o real Entero o real Resta -
Entero o real Entero o real Suma +
Entero o real Entero o real Exponenciacin **
Tipo resultado Tipo de operandos Significado Operador
Entero Entero mdulo Mod
Entero Entero Divisin entera Div
Real Real Divisin /
Entero o real Entero o real Multiplicacin *
Entero o real Entero o real Resta -
Entero o real Entero o real Suma +
Entero o real Entero o real Exponenciacin **
Tipo resultado Tipo de operandos Significado Operador
ALGORITMO Y ESTRUCTURA DE DATOS I
26
Reglas de prioridad



Operadores de relacin












Operadores lgicos








Ejemplo:
Not 4 > 5 produce un error ya que el operador no se aplica a 4
Not (4 > 5) produce un valor verdadero.


Ejemplo:
P and Q.
P or Q.

Menor <
Distinto <>,!=
Mayor o igual >=
Menor o igual <=
Igual =
Mayor >
Significado Operador
Menor <
Distinto <>,!=
Mayor o igual >=
Menor o igual <=
Igual =
Mayor >
Significado Operador
disyuncin P o Q Or
Conjuncin P y Q And
Negacin Not p Not
Significado Expresin lgica Operador lgico
disyuncin P o Q Or
Conjuncin P y Q And
Negacin Not p Not
Significado Expresin lgica Operador lgico
ALGORITMO Y ESTRUCTURA DE DATOS I

27
FUNCIONES
Las funciones pueden tener cualquier nmero de variables, incluso
cero. Para evaluar una funcin sin variables se debe escribir un par
de parntesis despus de su nombre (por ejemplo fun()). Las
funciones sin variables pueden servir como algoritmos de clculo
que devuelven un valor real.


FUNCIONES MATEMTICAS




















1.6 PARTE PRCTICA

PROBLEMAS PROPUESTOS

1. Disear un algoritmo para cambiar la rueda de un auto.
2. Disear un algoritmo para preparar una torta
3. Disear un algoritmo para organizar una fiesta
4. Disear un algoritmo para organizar un paseo
5. Disear un algoritmo para organizar un concierto
6. Realizar el algoritmo para determinar el mayor de tres
nmeros enteros
Truncamiento Trunc(x)
Raz cuadrada Sqrt(x)
Cuadrado Sqr(x)
Seno Sin(x)
Redondeo Round(x)
Log decimal Log10(x)
Log neperiano Ln(x)
Exponencial Exp(x)
Coseno Cos(x)
Tangente inversa Arctan(x)
Absoluto Abs(x)
Descripcin Funcin
Truncamiento Trunc(x)
Raz cuadrada Sqrt(x)
Cuadrado Sqr(x)
Seno Sin(x)
Redondeo Round(x)
Log decimal Log10(x)
Log neperiano Ln(x)
Exponencial Exp(x)
Coseno Cos(x)
Tangente inversa Arctan(x)
Absoluto Abs(x)
Descripcin Funcin
ALGORITMO Y ESTRUCTURA DE DATOS I
28
7. Realizar el algoritmo para calcular la superficie de un crculo.
8. Realizar el algoritmo para calcular el permetro y la superficie
de un rectngulo dadas las base y la altura del mismo.
9. Escribir un algoritmo que lea un nombre de una marca de
automviles seguida del nombre de su modelo e informe del
modelo seguido del nombre.
10. Realizar el algoritmo para determinar la hipotenusa de un
tringulo rectngulo conocidas las longitudes de los catetos.
11. Se desea un algoritmo para convertir metros a pies y
pulgadas.
(1 metro = 39.37 Pulgadas, 1 pie = 12 pulgadas).
12. Escribir un algoritmo que permita calcular el rea de un
triangulo conocidos sus tres lados.
13. Disear un programa para calcular el rea y el permetro de un
triangulo rectngulo conociendo la longitud de sus catetos. Si
a, b y c representan los tres lados de un triangulo, entonces la
formula que determina su rea ser:
A = [p (p-a) (p-b) (p-c)]
1/2

Donde p representa el semipermetro del triangulo que se
calcula con la formula: p = (a+b+c)/2
14. Una empresa desea transmitir datos mediante el telfono pero
en forma cifrada ante la posibilidad de que los telfonos estn
intervenidos. La empresa le ha solicitado que escriba un
programa que cifre sus datos que consisten en nmeros
enteros de cuatro dgitos. El cifrado debe hacerse de la
siguiente manera: Intercambiar el primer digito con el tercero,
y el segundo con el cuarto. A continuacin imprimir el entero
cifrado.
15. Escribir un programa que lea un numero de 4 cifras y o invierta.
As, por ejemplo, si el nmero ledo es 2345 se debe convertir
en 5432.
16. Disear un programa para convertir una cantidad de nuevos
soles a billetes enteros de S/.100, S/. 50, S/.20, S/.10, S/.5 y
monedas de S/.1. Suponga que la cantidad es mayor que
S/.1000. Por ejemplo: en S/.1289 hay 12 billetes de S/.100, 1
billete de S/.50, 1 billete de S/.20, 1 billete de S/.10, 1 moneda
de S/.5 y 4 monedas de S/. 1.
ALGORITMO Y ESTRUCTURA DE DATOS I

29
17. Disear un programa para convertir una cantidad entera de
segundos a horas, minutos y segundos. Suponga que la
cantidad de segundos es mayor que 3600 sg.
18. Disear un programa para convertir grados Centgrados (C) a
grados Fahrenheit (F). Considere que: F = 9C/5 + 32.
19. Disear un programa para convertir grados sexagesimales (S)
a grados centesimales (C) y radianes (R). Considere que:
S/180 = C/200 = R/.
20. Escriba un programa que permita calcular el rea de un
triangulo conocido sus tres lados.
21. Escriba un programa que permita leer una medida en pies y la
convierta en centmetros, metros, pulgadas y yardas.
Considere los siguientes factores de conversin.
1 pie = 12 pulgadas
1 yarda = 3 pies
1 pulgada = 2.54 centmetros
1 metro = 100 centmetros
22. Escriba un programa que permita lea una temperatura en
grados Centgrados(C) y la convierta en sus equivalentes en
grados Fahrenheit (F), grados kelvin (K) y grados Rankine (R).
Utilice las siguientes formulas:
F = 9/5 C + 32
K = C + 273
R = C + 460
23. Un curso se evala de la siguiente forma: se toman 5 prcticas,
un examen parcial y un examen final. El promedio final se
calcula con la siguiente formulas: PF = (3PP + 2EP +
3EF)/7
Donde: PF = promedio final
PP = promedio de la 5 practicas
EP = examen parcial
EF = examen final
Escriba un programa que calcule el promedio final del curso.

ALGORITMO Y ESTRUCTURA DE DATOS I
30
24. Escriba un programa para calcular el monto a pagar por un
artculo. Los datos de entrada son: el precio de venta y el
nmero de unidades adquiridas. Considere un descuento fijo
de 20% y 19% de IGV. El programa deber mostrar el monto
del descuento y el monto a pagar.
25. Escriba un programa para efectuar repartos proporcionales de
una suma de dinero a 5 personas en funciones de sus edades.
El programa deber solicitar la suma de dinero y las edades
de las 5 personas. El monto que le corresponde a cada
persona se calcula con la formula:
edadPmontoT
MontoP=
edadT

Donde: montoT = monto del dinero a repartir
montoP = monto correspondiente a una persona
edadP = edad de la persona
edadP = suma total de edades
Imprimir el monto de dinero correspondiente a cada persona.
26. Escribir un programa para determinar el inters generado por
un capital C que representa un prstamo a una taza de inters
anual del T% durante N aos. Mostrar el monto total obtenido
al cabo de los N aos y el inters generado I. Use las
siguientes formulas:
M = C (1+ T/100)
N

I = M C
Donde: M = Monto total obtenido al cabo de los N aos
C = Capital prestado
I = Inters generado al cabo de los N aos
N = Numero de aos
27. Escriba un programa que ingrese un valor de a y b y calcule
los valores de c y d de acuerdo con las siguientes formulas:
c = (4a
4
+ 3ab +b
2
) / (a
2
+ b
2
) ; d= (3c
2
+ a +b) / 4

ALGORITMO Y ESTRUCTURA DE DATOS I

31

LABORATORIO N 1

Este laboratorio tiene como objetivo que el alumno aprenda a convertir el
pseudo cdigo a cdigo TURBO C++ para su ejecucin.

PASOS A SEGUIR:
Paso 1: Ingresar a inicio programas Turbo C++ 4.5. o en otro
compilador de C que le indique el docente

Paso 2: Hacer click en programa Turbo C++



Paso 3: Una vez abierto el programa haga click en File y en New,
generando una nueva hoja de trabajo.



ALGORITMO Y ESTRUCTURA DE DATOS I
32
Paso 4: Para guardar la hoja se hace click en File Save as




Paso 5: Al hacer click en Save As saldr una pantalla en donde se
colocara el nombre del archivo y nos indica la ruta en donde va a ser
guardada el archivo.







ALGORITMO Y ESTRUCTURA DE DATOS I

33
Paso 6: Una vez colocada el nombre y la ruta presionar OK.

Paso 7: Una vez guardada la hoja proceder a transcribir el siguiente
cdigo de programa.

#include <iostream.h>
#include <conio.h>

Int main( )
{
float base, altura, area, permetro;

cout<<"Base: "; cin>>base;
cout<<"Altura: "; cin>>altura;

rea = base * altura ;
permetro = 2 * (base + altura) ;

cout<<"El Area es :" << area << endl ;
cout<<"El permetro es : " << permetro << endl;
getch();
return 0;
}


ALGORITMO Y ESTRUCTURA DE DATOS I
34


Paso 8: Para compilar el programa hacer click en Project - Compile
Otra manera de compilar es presionar en el teclado Alt + F9.



ALGORITMO Y ESTRUCTURA DE DATOS I

35

Paso 9: Si no hubiera error aparecer un cuadro con un visto
indicando OK, que indica Status: Success, quiere decir que no hay
error de caso contrario aparecer Status: There are errors, indicando
la posicin en donde esta el error.




Paso 10: Ejecutar el programa se realiza haciendo click en Debug
Run.
Otra manera de ejecutar o correr el programa es
presionando las teclas Control + F9.



ALGORITMO Y ESTRUCTURA DE DATOS I
36
Paso 11: Mostrar el programa ejecutando los comandos escritos:




ALGORITMO Y ESTRUCTURA DE DATOS I

37
CAPTULO II: ESTRUCTURA GENERAL DE UN
PROGRAMA


CONCEPTO DE PROGRAMA
Es un conjunto de instrucciones, ordenes dadas a la mquina que
producirn la ejecucin de una determinada tarea, en esencia es un
medio para seguir un fin.

DESARROLLO DE UN PROGRAMA
1. Definicin y Anlisis del problema
2. Diseo de algoritmos:

Diagrama de flujo.
Diagrama de N-S.
Pseudocdigo.
Otros

3. Codificacin del Programa.
4. Depuracin y verificacin del Programa.
5. Documentacin.
6. Mantenimiento.

PARTES CONSTITUTIVAS DE UN PROGRAMA
El programador debe establecer el conjunto de especificaciones que debe
contener el programa: entrada, salida y algoritmos de resolucin.





INSTRUCCIONES Y TIPOS DE INSTRUCCIONES
CONSISTE EN DEFINIR:
LAS ACCIONES O INSTRUCCIONES, se deben escribir y
posteriormente almacenar en memoria en el mismo orden en que
han de ejecutarse; es decir en secuencia.

ENTRADA
PROGRAMA
Algoritmo de resolucin
SALIDA
ENTRADA
PROGRAMA
Algoritmo de resolucin
SALIDA
ALGORITMO Y ESTRUCTURA DE DATOS I
38

Un programa es lineal si se ejecutan secuencialmente, sin
bifurcaciones decisin y comparacin





En el caso de algoritmos las instrucciones se suelen conocer como
acciones y se tendra:




Y es no lineal cuando se interrumpe la secuencia mediante
instrucciones de bifurcacin:





TIPOS DE INSTRUCCIN
1. Instrucciones de inicio / fin
2. Instrucciones de asignacin
3. Instrucciones de lectura
4. Instrucciones de escritura
5. Instrucciones de bifurcacin
6. Fin


- Instrucciones de asignacin
A 80 la variable A toma el valor de 80
Cul ser el valor que tomara la variable C tras la ejecucin de las
siguientes instrucciones?
INSTRUCCIN 1
INSTRUCCIN 2
.
.
.
INSTRUCCIN N
Accin 1
Accin 2
.
Accin N
Accin 1
Accin 2
.
Accion x
Accin N
.
ALGORITMO Y ESTRUCTURA DE DATOS I

39
A 12 A contiene 12
B A B contiene 12
C B C contiene 12
Antes de la ejecucin de las tres instrucciones A, B, C son
indeterminados.

Cul es el valor de la variable AUX al ejecutarse la instruccin 5?
1. A 10
2. B 20
3. AUX 10
4. A B
5. B AUX;
En la instruccin 1, A toma el toma el valor de 10

- Instrucciones de lectura de datos (entrada)
Cul ser el significado de las siguientes instrucciones?

a) Read numero, horas, tasa
nmero12325 horas32 tasa1200
b) Read A, B, C
A 100 B 200 C300

- Instrucciones de escritura de resultados (salida)

- A100
- B200
- C300
Write A, B, C


Esta instruccin
lee datos de
un
dispositivos
de entrada
Esta instruccin
se escribe en
un
dispositivo
de salida
ALGORITMO Y ESTRUCTURA DE DATOS I
40
2.1 ESTRUCTURA DE UN PROGRAMA EN C.
- Los programas en C pueden constar de uno o varios archivos.
- Cada archivo puede contener uno o varios espacios de
nombres.
- Un espacio de nombres puede contener tipos como clases,
estructuras, interfaces, enumeraciones y delegados, adems
de otros espacios de nombres. A continuacin, se muestra el
esqueleto de un programa en C que contiene todos estos
elementos.





















ALGORITMO Y ESTRUCTURA DE DATOS I

41
EJ EMPLO N 7

/* Comentarios de un prrafo completo comprendidos entre
/*.....*/,
Sirven para aclarar el programa o una parte del programa */
// Comentarios de 1 sola lnea.
// Zona de ficheros de cabecera de las libreras.

Ejemplo:
/* El primer programa en C */
#include <stdio.h>
int main( void )
{ printf(Bienvenido a C!" );
return 0; /* indica que el programa termin con xito */
}

EJ EMPLO N 8

/* Programa de suma */
#include <stdio.h>
int main() /* la funcin main inicia la ejecucin del programa */
{
int entero1; /* primer nmero introducido por el usuario */
int entero2; /* segundo nmero introducido por el usuario */

int suma; /* variable en la cual se almacena la suma */
printf( "Introduzca el primer entero\n" ); /* indicador */
scanf( "%d", &entero1 ); /* lee un entero */
printf( "Introduzca el segundo entero\n" ); /* indicador */
scanf( "%d", &entero2 ); /* lee un entero */
suma = entero1 + entero2; /* asigna el total a suma */
printf( "La suma es %d\n", suma ); /* imprime la suma */
return 0; /* indica que el programa termin con xito */
} /* fin de la funcin main */



ALGORITMO Y ESTRUCTURA DE DATOS I
42
DEFINICIONES DE ARCHIVOS DE CABECERA DE LAS
LIBRERAS












Un comentario dentro del programa se utilizan para explicar
brevemente lo que hace el programa y facilitar as el recordar
que es lo que se estn tratando de programar. Los
comentarios deben ser escrito en cualquier lugar donde pueda
haber confusin. En C debe ser escrito entre /* y */.
Un comentario tambin se muestra en una sola lnea de
cdigo; pero se representa as: //

- VARIABLE GLOBAL
Una declaracin global de una
variable, hace que la variable
sea disponible para el uso en
todas las funciones del archivo
fuente.

- BUCLES
Es un segmento de un
algoritmo o programa, cuyas
instrucciones se repiten un
nmero determinado de veces
mientras se cumple una
determinada condicin (existe o es verdadera la condicin)

F u n c i o n e s d e u t i l e r a s t d l i b . h
E n t r a d a / S a l i d a s t d i o . h
F u n c i o n e s m a t e m t i c a s m a t h . h
L i m i t e s e n t e r o s d e f i n i d o s e i m p l a n t a d o s l i m i t s . h
F l u j o d e e n t r a d a / s a l i d a i o s t r e a m . h
F u n c i o n e s d e u t i l e r a s t d l i b . h
E n t r a d a / S a l i d a s t d i o . h
F u n c i o n e s m a t e m t i c a s m a t h . h
L i m i t e s e n t e r o s d e f i n i d o s e i m p l a n t a d o s l i m i t s . h
F l u j o d e e n t r a d a / s a l i d a i o s t r e a m . h
BUCLE I NFI NI TO BUCLE I NFI NI TO
Suma = 0
INICIO
Leer N
Escribir suma
Suma
Suma + N
1
2
3
ALGORITMO Y ESTRUCTURA DE DATOS I

43
Un bucle consta de tres partes:

o Decisin
o Cuerpo de bucle
o Salida de bucle.

TIPOS BUCLES

Pueden existir varios bucles.
Bucles anidados, cuando estn dispuestos de tal modo que
unos son interiores a otros, los Bucles independientes son
cuando son externos unos a otros.

Bucles anidados Bucles Independientes









Bucles Cruzados









Bucle A
Bucle B
Bucle C
INICIO
FIN
Bucle A
Bucle B
Bucle C
INICIO
FIN
inicio
fin
inicio
fin
inicio
fin
ALGORITMO Y ESTRUCTURA DE DATOS I
44
2.2 ESTRUCTURA DE ALGORITMO
Los algoritmos deben ser escritos en lenguajes similares a los
programas.

Un algoritmo constar de dos componentes: Una cabecera de
programas y un bloque algoritmo. La cabecera de programa es
una accin simple que comienza con la palabra algoritmo. Esta
palabra estar seguida por el nombre asignado al programa
completo.

El bloque algoritmo es el resto del programa y consta de dos
componentes o secciones: las acciones de declaracin y las
acciones ejecutables.

Las declaraciones definen o declaran las variables y constantes
que tengan nombres. Las acciones ejecutables son aquellas que
posteriormente deber realizar la computadora cuando el algoritmo
convertido en programa se ejecute.







2.3 CONTADORES, ACUMULADORES.

CONTADORES

DEFINICIN 1: Se utilizan para llevar el control del nmero de
ocasiones en que se realiza una operacin o se cumple una
condicin. Con los incrementos generalmente de uno en uno.

DEFINICIN 2: Un contador es una variable cuyo valor se
incrementa o decrementa en una cantidad constante cada vez
que se produce un determinado suceso o accin. Los
contadores se utilizan con la finalidad de contar sucesos o
acciones internas de un bucle; deben realizar una operacin
de inicializacin y posteriormente las sucesivas de incremento
o decremento del mismo.

Algoritmo
Cabecera del programa
Seccin de declaracin
Seccin de acciones
ALGORITMO Y ESTRUCTURA DE DATOS I

45
La inicializacin consiste en asignarle al contador un valor. Se
situar antes y fuera del bucle.

Representacin de contadores:
Son variables que se utilizan para contar.
Normalmente su valor se incrementa o decrementa en 1.

Ejemplos:
contador contador + 1
ndice ndice 1


EJ EMPLO N 9
BEGIN
eCon0

DO WHILE eCon <10
READ eR, eT
eSuneR+eT
eConeCon+1

END DO
END


ACUMULADORES

DEFINICIN 1: Forma que toma una variable y que sirve para
llevar la suma acumulativa de una serie de valores que se van
leyendo o calculando progresivamente

o Se utilizan para almacenar el resultado de sumas
sucesivas.
o Su valor se incrementa en cantidades variables.

Ejemplos:
total total + valor

DEFINICIN 2: Es una variable que suma sobre s misma un
conjunto de valores, de esta manera obtiene la suma de todos
ellos en una sola variable.

La diferencia entre un contador y un acumulador es que
mientras el primero va aumentando en una cantidad fija
ALGORITMO Y ESTRUCTURA DE DATOS I
46
predeterminada, el acumulador va aumentando en una
cantidad variable.

Representacin:

<Nombre del acumulador> <nombre del acumulador> +
<valor variable>


EJ EMPLO N10:
BEGIN
eCon0,eAcu0
DO WHILE eCon<=10
READ eNume
eAcueAcu+eNume
eConeCon+1
ENDDO
WRITE eAcum
END

















ALGORITMO Y ESTRUCTURA DE DATOS I

47
2.4 PARTE PRCTICA

PROBLEMAS PROPUESTOS

1.- Encontrar el valor de la variable VALOR despus de la ejecucin de
las siguientes operaciones:
a.- VALOR 4.0 * 5
b.- x 3.0
y 2.0
c.- VALOR 5
X 3
VALOR VALOR * X

2.- Deducir el resultado que se produce con las siguientes
instrucciones:
var. entero: X,Y
X1
Y5
Write X,Y

3.- Deducir el valor de las expresiones siguientes:
XA +B+C
XA +B*C
XA +B/C
XA B/C
XA +B mod C
X(A +B)/C
XA +(B/C)

Siendo A=5, B=25, C=20

4.- Cmo se intercambian los valores de dos variables, A y B?
5.- Calcular el valor de las siguientes expresiones:
a. 8+7*3+4*6
b. -2^3
c. (33 + 3 * 4) / 5
d. 2^2 *3
e. 3+2 * (18-4^2)
f. 16*6-3*2

ALGORITMO Y ESTRUCTURA DE DATOS I
48
6.- Se tienen tres variables A, B y C; escribir las instrucciones
necesarias para intercambiar entre s sus valores del modo
siguiente:
B toma el valor de A
C toma el valor de B
A toma el valor de C

Nota: Solo se debe utilizar una variable auxiliar.
7- Deducir el valor que toma la variable tras la ejecucin de las
instrucciones:
A 4
B A
BA+3

8.- Qu se obtiene en las variables A y B despus de la ejecucin de
las siguientes instrucciones?
A5
BA+6
AA+1
BA-5

9.- Qu se obtiene en las variables A, B y C despus de ejecutar las
instrucciones siguientes?
A3
B 20
C A+B
B A+B
A B-C

10.- Que se obtiene en A y B tras la ejecucin de?
A10
B5
AB
BA

11. Se desea calcular independiente la suma de los nmeros pares e
impares comprendidos entre 1 y 200.

12. Leer una serie de nmeros distintos de cero (el ltimo nmero de la
serie es -99) y obtener el nmero mayor. Como resultado se debe
ALGORITMO Y ESTRUCTURA DE DATOS I

49
visualizar el nmero mayor y un mensaje de indicacin de nmero
negativo, caso de que se haya ledo un nmero negativo.

13. Calcular y visualizar la suma y el producto de los nmeros pares
comprendidos entre 20 y 400, ambos inclusive.

14. Leer 500 nmeros enteros y obtener cuntos son positivos.

15. Se trata de escribir el algoritmo que permita emitir la factura
correspondiente a una compra de un artculo determinado, del que
se adquieren una o varias unidades. El IGV a aplicar es del 19% y si
el precio bruto es mayor a s/.50000, se debe realizar un descuento
del 5 por 100.

16. Sumar los nmeros pares del 2 al 100 e imprimir su valor.

17. Sumar cinco nmeros introducidos por teclado.

18. Calcular la media de tres nmeros e imprimir su resultado.


19. Dados diez nmeros enteros, visualizar la suma de los nmeros
pares de una lista, cuntos nmeros pares existen y cul es la media
aritmtica de los nmeros impares

LABORATORIO N 2

Este laboratorio tiene como objetivo que el alumno aprenda la Estructura
de Los Programas Del Turbo C++.

ESTRUCTURA DE UN PROGRAMA:

INCLUSIN DE ARCHIVOS DE CABECERA
Para muchas tareas especificas el lenguaje C dispone de libreras
de funciones preempacadas listas para ser usadas. Pero antes de
utilizar cualquier de estas funciones debemos informar al
compilador sobre las caractersticas de la funcin.

Todo lo que tenemos que hacer es averiguar en que archivo de
cabecera se encuentra el prototipo de la funcin a utilizar e incluir el
archivo en nuestro programa mediante la directiva.

ALGORITMO Y ESTRUCTURA DE DATOS I
50
#include <nombre_archivo_cabecera>

Un archivo de cabecera se reconoce porque tiene extensin .h
(como iostream.h, conio.h, string.h, etc.). Si las funciones a utilizar
estn en distintos archivos de cabeceras debe incluir todos ellos
mediante una directiva #include para cada uno.

Ejemplo:

// Importamos la cabeceras de los mdulos que necesitamos
#include <iostream.h> // entrada / salida define las variables cin
y cout (consola)
#include <string> // de la biblioteca estndar (STL)















CUERPO DEL PROGRAMA
Es la parte donde se desarrollan las instrucciones que conforman el
programa. Aqu esta la parte medular del programa. Aqu es donde
su algoritmo se convierte en programa.

La estructura general de un programa simple en C++:

Inclusin de archivos de cabecera

int main ()
{
declaracin de variables y constantes
cuerpo del programa
}


ALGORITMO Y ESTRUCTURA DE DATOS I

51
EXPLICACIN DE NUESTRO PROGRAMA
Para lograr explicar con mayor claridad se repite el cdigo anterior
incluyendo un nmero de lnea.

1. //Programa 01
2. //propsito: Estructura Secuencial
3. #include <iostream.h>
4. #include <conio.h>
5. int main()
6. {
7. // muestra mensaje endl permite un salto de lnea
8. cout <<"Bienvenidos al primer programa " <<endl;

9. cout <<"utilizando C++";
10. getch();
11. return 0;
12. }

Las lneas 1, 2,7 son comentarios que en tiempo de ejecucin
son ignoradas por el compilador.
Las lneas 3 y 4 se conocen como directivas de procesador del
compilador #include
La lnea 5 indica el inicio de la funcin principal main ().
Las lneas 6 y 12 indican el inicio y el fin de bloque de la
funcin principal.
La lnea 8 muestra en pantalla el mensaje Bienvenidos al
Primer programa y un salto de lnea.
La lnea 9 muestra en pantalla el mensaje utilizando C++,
La lnea 10 invoca a la funcin getch ( ) que espera a que el
usuario pulse una tecla.
La lnea 11 pasa el valor 0 de regreso al sistema operativo.
Esto le indica al sistema operativo que el programa fue
efectuado con xito.

DECLARACIN DE VARIABLES Y CONSTANTES
Todos los programas manejan datos. Estos datos se almacenan en
localizaciones de memorias llamadas variables. En esta seccin se
informa al compilador sobre las variables que sern utilizadas en el
programa (a esto se llama declarar variables).

En C ++ permite declarar variables en cualquier parte del programa
con tal que la variable se declare antes de ser utilizada.


ALGORITMO Y ESTRUCTURA DE DATOS I
52
VARIABLES
Es un espacio en la memoria de la computadora que permite
almacenar temporalmente un dato durante la ejecucin de un
proceso, su contenido puede cambiar durante la ejecucin del
programa.

Una variable tiene las siguientes caractersticas:

1. Un nombre.
2. Un tipo de dato asociado.
3. Un valor inicial.
4. Una direccin de memoria.



















CONSTANTES
Una constante es un dato numrico o alfanumrico que no cambia
durante la ejecucin del programa.

ALGORITMO Y ESTRUCTURA DE DATOS I

53



LOS COMENTARIOS
Con fines de documentacin se pueden aadir comentarios a un
programa. Los comentarios no generan cdigo mquina sino que
son ignorados por el compilador.

Se considera como comentario:
Al texto que sigue a los dos slash // hasta el final de las lnea.
Al texto ( una o mas lneas ) encerrado entre /* y */

Ejemplo:

// Este es un comentario de una sola lnea.
/* Este es el otro comentario de una sola lnea * /
/* Este es el ejemplo de un comentario de dos lneas */


ALGORITMO Y ESTRUCTURA DE DATOS I
54


ENTRADA Y SALIDA BSICA EN C++
La entrada/salida (input/output) en C++ se hace mediante los
objetos cin y cout. La forma ms simple de entrada/salida se
efecta mediante las operaciones << (operador de insercin) y >>
(operador de extraccin). Toda la informacin que necesita el
compilador sobre cin y cout se encuentra en el archivo de
cabecera iostream.h, el que debe ser incluido en todo programa
que use cin y cout escribiendo al principio del programa la lnea:

#include <iostream.h>

Donde:

Cout es un flujo de datos que conecta el programa con la
pantalla. Cuando un programa desea enviar algo a la pantalla lo
hace insertando los datos en el flujo cout y este a su vez se
encarga de enviar los datos a la pantalla.

Cin es un flujo de datos que conecta el teclado con el programa.
Cualquier entrada desde el teclado es enviada primero al flujo
cin. Luego el programa puede extraer (leer) datos desde este
flujo.
ALGORITMO Y ESTRUCTURA DE DATOS I

55







SALIDA A LA PANTALLA CON COUT

Salida de constantes:

Cout << constantes;


Donde la constante puede ser cualquier tipo de constante
incluyendo las constantes de cadena. Recuerde que las constantes
de cadena van encerradas entre comillas dobles, as para imprimir
en la pantalla una constante de cadena escribiramos:

Cout <<aqu va la cadena a imprimir;

Salida de variables:
Cout << variable;
Notas:
La salida de cout se puede concatenar para hacer la salida de
distintas variables o cadenas en una sola sentencia.
En una sentencia se puede enviar secuencias de escape con
la finalidad de mover el cursor al principio de la siguiente lnea,
hacer sonar a alarma del sistema, etc.
Pantall Cout << Variable
Teclad Cin >> Variable
ALGORITMO Y ESTRUCTURA DE DATOS I
56

SECUENCIA DE ESCAPE
Las secuencias de escape proporcionan un determinado
significado al enviar ciertos caracteres especiales a la pantalla, a un
archivo de disco o a la impresora. Todas las secuencias de escape
comienzan con la barra invertida \.

Secuencia de
escape
Descripcin
\n

\r

\t

\a
\`
\
\\
Nueva lnea. Coloca el cursor al principio de la
segunda lnea.
Retorno de carro. Coloca el cursor al principio de
la lnea actual.
Tabulador horizontal. Mueve el cursor al siguiente
tabulador.
Alerta. Hace sonar la campana del sistema.
Imprime una comilla simple (`).
Imprime una comilla doble ().
Imprime una barra invertida (\)

ENTRADA DESDE EL TECLADO DE CIN
La entrada o lectura desde el teclado para cualquier variable se
hace mediante la sentencia:

Cin >> variable;


ALGORITMO Y ESTRUCTURA DE DATOS I

57
Notas:
La entrada con cin se puede concatenar para poder hacer la
entrada de distintas variables o cadenas en una sola
sentencia.
Cin desprecia los caracteres blancos (espacios, tabuladores y
saltos de lnea) al realizar la entrada desde el teclado. Esto
significa que no se puede leer con cin cadenas que contengan
espacios en blanco pues cin nicamente leer la parte de la
cadena hasta el primer blanco. Si se desea leer cadenas que
contengan espacios en blanco use la funcin gets.


LA FUNCIN GETS PARA LA ENTRADA DE CADENAS

Gets (cad);
La funcin gets lee una cadena de caracteres ingresada desde el
teclado, incluyendo espacios en blanco, y lo almacena en la
variable de cadena cad. Para usar la funcin gets debe incluirse el
archivo de cabecera stdio.h.





ALGORITMO Y ESTRUCTURA DE DATOS I
58

OPERADORES DE INCREMENTO Y DECREMENTO

operador Accin

++
--

Suma 1 a su operando
Resta 1 a su operando


Uso de ++ y en expresiones simples
Sea n una variable cualquiera.

Expresin Forma equivalente 1 Forma equivalente 2
n = n + 1;
n = n 1;
n ++;
n --;
++ n;
-- n;

Uso de ++ y en otras expresiones
En expresiones de asignacin u otras que no sean del tipo simple
se cumple que:

Si ++ estn antes del operando, primero se suma o resta 1 al
operando antes de continuar con lo que sigue.
Si ++ estn despus del operando, primero se usa el valor
del operando y luego se le suma o resta 1.

ALGORITMO Y ESTRUCTURA DE DATOS I

59

CAPTULO III: ESTRUCTURAS DE CONTROL



3.1 PROGRAMACIN ESTRUCTURADA

DEFINICIN
La programacin estructurada es una forma de programar de
forma clara, para ello utiliza nicamente tres estructuras:
secuencial, selectiva simple e iterativa; siendo innecesario y
no permitindose el uso de la instruccin o instrucciones de
transferencia incondicional (GOTO).

VENTAJAS DE LA PROGRAMACIN ESTRUCTURADA
- Los programas son ms fciles de entender. Un
programa estructurado puede ser ledo en secuencia, de
arriba hacia abajo, sin necesidad de estar saltando de un
sitio a otro en la lgica, lo cual es tpico de otros estilos
de programacin.
- Los programas quedan mejor documentados
internamente.
- Reduccin de los costos de mantenimiento.
- Aumento de la productividad del programador.

DESVENTAJAS DE LA PROGRAMACIN
ESTRUCTURADA
- Es relativamente difcil de aprender ya que es para
expertos.

3.2 ESTRUCTURA DE CONTROL TIPOS
En lenguajes de programacin, las estructuras de control permiten
modificar el flujo de ejecucin de las instrucciones de un programa.

Con las estructuras de control se puede:
De acuerdo a una condicin, ejecutar un grupo u otro de
sentencias (IF-ELSE y CASE OF)
Ejecutar un grupo de sentencias HACER MIENTRAS exista
una condicin (DO-WHILE)
ALGORITMO Y ESTRUCTURA DE DATOS I
60
Ejecutar un grupo de sentencias REPETIR -HASTA que
exista una condicin (REPEAT-UNTIL)

TIPOS

SECUENCIAL
SELECTIVA SIMPLE
ITERACIN

3.2.1 SECUENCIAL
La estructura secuencial se refiere a la ejecucin de una
secuencia de instrucciones en el orden en que aparecen, de
forma que cada instruccin se ejecuta exactamente una vez.

EJ EMPLO N 11
BEGIN
REAL base, altura, rea, permetro
READ base, altura
rea base*altura
permetro 2*(base+altura)
WRITE rea, permetro
END

Esta secuencia de instrucciones permuta los valores de x e y, con
ayuda de una variable auxiliar, intermedia.

1 Guardamos una copia del valor de x en auxiliar.
2 Guardamos el valor de y en x, se pierde el valor anterior de x
pero no importa porque tenemos una copia en auxiliar.
3 Guardamos en y el valor de auxiliar, que es el valor inicial de x.

El resultado es el intercambio de los valores de x e y, en tres
operaciones secuenciales.

ESTRUCTURA SELECTIVA

Las estructuras de seleccin son estructuras de control utilizadas
para la toma de decisiones dentro de un programa. A estas
estructuras se les conoce tambin como estructuras selectivas o
estructuras de decisin.
ALGORITMO Y ESTRUCTURA DE DATOS I

61

TIPOS DE ESTRUCTURA SELECTIVA















3.2.2 SELECTIVA SIMPLE IF (SI)
La estructura selectiva simple SI (en ingles IF) ejecuta una
determinada accin cuando se cumple una determinada
condicin.

La seleccin SI evala la condicin.

- Si la condicin es verdadera, entonces ejecuta la accin
S1 (o acciones caso de ser S1 una accin compuesta y
constar de varias acciones)
- Si la condicin es falsa, entonces no hace nada.

DIAGRAMA DE FLUJO:













ESTRUCTURA ESTRUCTURA
SELECTIVA SIMPLE SELECTIVA SIMPLE
ESTRUCTURA ESTRUCTURA
SELECTIVA DOBLE SELECTIVA DOBLE
ESTRUCTURA ESTRUCTURA
SELECTIVA MULTIPLE SELECTIVA MULTIPLE
ESTRUCTURA ESTRUCTURA
D DE E
SELECCION SELECCION
condicin
accionS1
verdadera
falsa
condicin
accionS1
verdadera
falsa
ALGORITMO Y ESTRUCTURA DE DATOS I
62


SINTAXIS:







EJ EMPLO N 12:

PSEUDOCDIGO:
Construya un algoritmo en pseudocdigo tal que, dado los
valores enteros P y Q, que deben leerse del teclado,
determine si los mismos satisfacen la siguiente expresin:



En este caso debe escribir por pantalla los valores P y Q.

ALGORITMO Problema
VARIABLES
p, q SON ENTEROS
BEGIN
WRITE p
WRITE q
IF p^3 + q^4 -2*p^2<680
WRITE Los Valores de p y q son:
WRITE p=, p, q=, q
END_SI
END


SINTAXIS EN ESPAOL

SI <condicin>

<accin S1>

FIN _ SI
SINTAXIS EN INGLES

IF <condicin>

<accin S1>

ENDIF
ALGORITMO Y ESTRUCTURA DE DATOS I

63
EN C++:
Segn una calificacin imprimir si es aprobada

#include <stdio.h>
#include <conio.h>
int main ()

{
float Cal;
clrscr();
printf ("Introduzca la calificacin: ");
scanf ("%f", &Cal);
if ( Cal >= 11 )
printf("Aprob.");

return 0;
}

3.2.3 SELECTIVA DOBLE ( SI - SINO)
La estructura de seleccin doble permite seleccionar una
ruta de dos rutas posibles en base a la verdad o falsedad de
una condicin.

Si la condicin es verdadera, entonces ejecuta la accin
S11 (o acciones caso de ser S11 una accin compuesta
y constar de varias acciones)
Si la condicin es falsa, entonces ejecuta la accin S21
(o acciones caso de ser S21 una accin compuesta y
constar de varias acciones)

DIAGRAMA DE FLUJO












Condicin?
accin S21
si no
accin S11
Condicin?
accin S21
si no
accin S11
Condicin?
accin S21
si no
accin S11
ALGORITMO Y ESTRUCTURA DE DATOS I
64
SINTAXIS:

















EJ EMPLO N 13
La siguiente estructura de seleccin doble determina si una
persona es mayor o menor de edad:

IF edad >= 18
estado "Mayor de edad
ELSE
estado "Menor de edad
ENDIF
WRITE estado

Esto imprime "Mayor de edad", si la persona tiene 18 aos a ms
e imprime "Menor de edad" si la persona tiene menos de 18
aos. En cualquiera de los casos, despus se efectuar la
impresin

EN C++:
Imprimir si un nmero es par o impar

#include <stdio.h>
#include <conio.h>
int main()
PSEUDOCODIGO EN
ESPAOL

SI <condicion>
<accion S11>
<accion S12>

<accion S2n>
SI_NO
<accin 21>
<accin 22>

<accin S1n>
FIN_SI
PSEUDOCODIGO EN
INGLES

IF <condicin>
<accin S11>
<accin S12>

<accin S2n>
ELSE
<accin 21>
<accin 22>

<accin S1n>
ENDIF
ALGORITMO Y ESTRUCTURA DE DATOS I

65
{
int num;
clrscr();
printf("Introducir un nmero:\n");
scanf("%d",&num);
if ( num % 2 == 0 )
printf("%d es par.",num);
else
printf("%d es impar.",num);

return 0;
}


3.2.4 SELECTIVA MULTIPLE IF ELSE- IF ( SI SINO - SI)
Puede contener instrucciones sencillas o compuestas.
Pueden estar incluidas una o ms instrucciones If - else. Al
incluir una o ms instrucciones de if en una instruccin de if
existente se crean las instrucciones anidadas If.

EJ EMPLO N 14
Este algoritmo lee tres nmeros A, B, C, imprimiendo el valor
del ms grande. Se supone que los tres valores son
diferentes.
Read (A, B, C) // Entrada de valores
if A > B // Se determina el valor ms grande mediante comprobacin
// por pares
then if A > C
then MAX A (A > B, A > C)
else MAX C (C > A > B)
else if B > C
then MAX B (B > A, b > C)
else MAX C (C > B > A)
Write `El valor ms grande es`, MAX // Se imprime el valor ms grande
Exit // Termino



ALGORITMO Y ESTRUCTURA DE DATOS I
66
EJ EMPLO N 15
#include<iostream.h>
int main ( )
{
char codigo;
cout << "Introduzca un cdigo especificado: ";
cin >> codigo;
if (codigo == 'S' )
cout << "El componente tiene calificacin de exploracin
espacial . ";
else if (codigo == M)
cout << "El componente tiene calificacin de militar. ";
else if (codigo == C)
cout << "El componente tiene calificacin de comercial. ";
else if (codigo == 'J' )
cout << "El componente tiene calificacin de juguete. ";

else
cout << "Se insert un cdigo invalido. ";
cout << endl;
getch();
return 0;
}

3.2.5 SELECTIVA DE CONTROL CASE OF ( SEGN SEA)
Esta sentencia se utiliza para elegir entre diferentes
alternativas. Esta se compone de varias sentencias simples,
cuando se ejecuta, una y solo una de las sentencias simples
se selecciona y ejecuta.







ALGORITMO Y ESTRUCTURA DE DATOS I

67


La sintaxis es la siguiente:
Segn sea (selector) hacer
caso1, caso2, ..: sentencia 1
.... : .....
caso1n, caso2n, ..: sentencia n
sino
sentencia opcional
fin_segn

El valor de selector debe ser un tipo ordinal, y los valores
constantes deben tener el mismo tipo que el selector. Se
pueden utilizar sentencias if anidados, pero la sentencia
segn sea es ms legible.
SINTAXIS:
PSEUDOCDIGO EN
ESPAOL
En caso que E sea
c1: accin S1
c2: accin S2

cn: accin Sn>
de otra forma:
accin Sx
fin_caso
PSEUDOCDIGO EN
INGLES
CASE EXPRESION OF
[c1]: accin S1
[c2]: accin S2

[cn]: accin Sn>
otherwise
accin Sx
ENDCASE
Condicin
1 n
Accin
S1
Accin
S2
Accin
S3
Accin
S4
Accin
Sn

2
3
4
Condicin
1 n
Accin
S1
Accin
S2
Accin
S3
Accin
S4
Accin
Sn

Condicin
1 n
Accin
S1
Accin
S2
Accin
S3
Accin
S4
Accin
Sn

2
3
4
ALGORITMO Y ESTRUCTURA DE DATOS I
68

EJ EMPLO N 16

EN C++:
Imprimir a que da de la semana corresponde un nmero.

#include <stdio.h>
#include <conio.h>
int main()
{
int Dia;
clrscr();
printf("Escriba el nmero de da: \n");
scanf("%d",&Dia);

switch(Dia)
{
case 1: printf("El %d corresponde a Lunes.",Dia);
break;
case 2: printf("El %d corresponde a Martes.",Dia);
break;
case 3: printf("El %d corresponde a
Mircoles.",Dia);break;
case 4: printf("El %d corresponde a Jueves.",Dia);
break;
case 5: printf("El %d corresponde a Viernes.",Dia);
break;
case 6: printf("El %d corresponde a Sbado.",Dia);
break;
case 7: printf("El %d corresponde a
Domingo",Dia);break;
default: printf ("El %d da no existe en la
semana.",Dia);
getch();
}
return 0;
}

ALGORITMO Y ESTRUCTURA DE DATOS I

69
ESTRUCTURAS ITERATIVAS CCLICAS

INTRODUCCIN
Son aquellas que permiten ejecutar una accin un nmero
determinado de veces, es decir, repetir esa accin una o ms veces
consecutivamente.

Las Estructuras Iterativas se suelen llamar LAZOS o BUCLES;
todas las instrucciones incluidas en los bucles se repiten un nmero
determinado de veces, el cual puede ser fijo (previamente
determinado por el programador) o puede ser variable.

Se denomina iteracin a cada una de las diferentes pasadas o
ejecuciones de todas las instrucciones contenidas en el bucle.

TIPOS DE ESTRUCTURA ITERATIVAS:
Las Estructuras Repetitivas o Iterativas ms importantes son:

Estructura REPEAT UNTIL (Repetir Hasta).
Estructura DO WHILE (Hacer Mientras).


3.2.6 ITERATIVA (REPETIR HASTA)
La sentencia REPEAT UNTIL especifica un ciclo condicional
que se repite hasta que la condicin se hace verdadera.

Permiten programar la repeticin de un grupo de sentencias
mediante la construccin denominada ciclo o bucle. El grupo
de sentencias que tiene que repetirse se llama rango del
ciclo.

El numero de veces que ha de repetirse el rango esta
determinado por la sentencia de control de ciclo.

Generalmente se quiere que un bucle se ejecute, mnimo
una vez, antes de que la condicin de repeticin sea
cumplida o se compruebe.

En la estructura mientras, si la condicin es falsa, no se dar
ninguna ejecucin.

ALGORITMO Y ESTRUCTURA DE DATOS I
70
Esta estructura se ejecutar mientras se cumpla una
condicin determinada, la cual es comprobada al final del
bucle

Debe contener al menos una variable que cambie o se
modifique cada vez que se ejecuta la repeticin, de lo
contrario se repite infinitamente.


SINTAXIS:

PSEUDOCDIGO
EN ESPAOL
Repetir
<acciones>

<acciones n>
Hasta <condicion>
PSEUDOCDIGO
EN INGLES
Repeat
<acciones>
...
<acciones n>
Until <condicion>

DIAGRAMA DE FLUJO











CARACTERSTICAS
o La estructura REPEAT UNTIL modela ciclos
postprobados: el cuerpo siempre se ejecuta.
o La estructura REPEAT UNTIL realiza un nmero
variable de iteraciones.
o Cualquier ciclo REPEAT UNTIL puede traducirse en un
ciclo DO WHILE.

ALGORITMO Y ESTRUCTURA DE DATOS I

71
ERRORES COMUNES
Realizar ciclos infinitos.
Como se evitan? Modificando dentro del cuerpo la
variables que lo controlan.
Pensar que puede no ejecutarse ninguna vez.
Todas las operaciones durante la primera ejecucin del
cuerpo son vlidas.
La primera ejecucin del cuerpo modifica las variables
de la condicin.

EJ EMPLO N 17
Desarrollar el algoritmo necesario para calcular el factorial de un
numero N que responda a la formula
N! = N (N1) * (N2), 3*2*1

ALGORITMO FACTORIAL
VAR
entero i, n
real factorial
BEGIN
WRITE N
factorial 1
i 1
REPEAT
factorial factorial * i
i i+1
UNTIL in 1
WRITE factorial
END

ALGORITMO Y ESTRUCTURA DE DATOS I
72
3.2.7 ESTRUCTURA ITERATIVA DO WHILE (HACER
MIENTRAS)

La estructura repetitiva DO WHILE es aquella en la que
el nmero de iteraciones no se conoce por anticipado y
el cuerpo del bucle se ejecuta repetidamente mientras
que una condicin sea verdadera.
El bucle DO WHILE resulta especialmente indicado para
validar datos de entrada (comprobar que los valores de
entrada obtenidos esta dentro del rango de valores que
el programa espera).
En todos los programas se deben asegurar de obtener
entradas validas antes de realizar cualquier tipo de
operacin con ellos.


SINTAXIS












DIAGRAMA DE FLUJO














SINTAXIS EN ESPAOL

HACER MIENTRAS
Condicin

<Accin>

FIN HACER
SINTAXIS EN INGLS

DO WHILE
Condicin

<Accin>

ENDDO
ALGORITMO Y ESTRUCTURA DE DATOS I

73
EJ EMPLO N 18
Desarrollar el algoritmo necesario para calcular el factorial de un
numero N que responda a la formula

N! = N (N1) * (N2), 3*2*1

ALGORITMO FACTORIAL
VAR
Entero I, N
real factorial
BEGIN
READ factorial
factorial 1
I 1
DO WHILE I< = N
factorial factorial * 1
I I + 1
ENDDO
WRITE factorial
END


EN C++

EJ EMPLO N 19
// Algoritmo que calcula el factorial de un numero.

#include "conio.h"
#include <stdio.h>
#include <dos.h>

int main()
{
int i, total,contador;
contador=1;
total = 1;
clrscr();
printf ("Factorial numero\n\n Dame el numero para el
factorial: ");
scanf ("%d",&i);



ALGORITMO Y ESTRUCTURA DE DATOS I
74
while (contador<=i)
{
total = total * contador;
contador++;
}
printf("El factorial de %d es: %d",i,total);
getch();
return 0;
}


3.3 PARTE PRCTICA

PROBLEMAS PROPUESTOS

1. Realizar el pseudocdigo que lea 5 nmeros enteros y que los
imprima

2. Disear el pseudocdigo para imprimir los 50 primeros nmeros
pares.

3. Construir un programa que sume todos los nmeros que introduce
el usuario hasta que introduzca el nmero cero.

4. Disear el pseudocdigo para imprimir los 50 primeros nmeros
impares.

5. Disear el algoritmo que permita el ingreso de n nmeros, y que
muestre si son pares o impares.

6. Calcular la suma y la media aritmtica de N nmeros reales.

7. Disear un algoritmo que permita calcular la edad promedio de n
personas.

8. Dados N nmeros, escribir el producto desde 1 hasta N.

9. Disear el algoritmo que permita imprimir los 30 primeros mltiplos
de un nmero dado N.

ALGORITMO Y ESTRUCTURA DE DATOS I

75
10. Realizar un algoritmo que realice la divisin entera de dos nmeros
enteros positivos.

11. Realizar el algoritmo que calcule la suma de los cuadrados de los N
nmeros naturales.

12. Desarrollar un algoritmo para calcular e imprimir el factorial de N
nmeros.

13. Disear un algoritmo en pseudocdigo para que dado N nmeros
permita calcular el promedio de los mltiplos de M.

14. Disear un programa que permita ingresar 2 notas para 5 alumnos,
luego nos muestre el promedio general de notas de los alumnos
ingresados.

15. Dado N datos, calcular el promedio de las notas aprobadas y el
promedio de las notas desaprobadas.


16. Realizar el algoritmo que identifique si un nmero es primo o no.
(Primo es cuando slo se puede dividir por si mismo o por uno).

17. Disear el pseudocdigo que permita imprimir los 50 nmeros
primos.

18. Realizar un algoritmo que permita pedir 50 nmeros naturales y
determine e imprima cuantos son pares, impares, positivos y
negativos.

19. Los pacientes con sntomas de una cierta enfermedad son
ingresados en el hospital si tienen un valor superior a 0.6 en la
medicin de un determinado ndice, y son operados si el valor es
superior a 0.9. Escribe un programa en C que lea desde teclado el
nmero de pacientes seguido de la edad y el ndice de cada
paciente, y calcule la edad media de los pacientes analizados as
como la edad media de los ingresados y la edad media de los
operados.

20. Se conocen los gastos en vivienda, alimentacin, energa,
vestuario y transportes de una familia durante cada uno de los 12
meses del ao. Escribe un programa en C que lea dichos datos y
muestre por pantalla el gasto total en cada trimestre, el gasto total
ALGORITMO Y ESTRUCTURA DE DATOS I
76
anual y el porcentaje de gasto de cada concepto sobre el total
anual.

21. Se dispone de los datos sobre las edades y coeficientes de
inteligencia (CI) de los hijos de varias familias. El siguiente
programa en C lee el nmero de familias y para cada familia lea el
nmero de hijos as como la edad y el CI de cada hijo, y calcula:


El nmero mximo, mnimo y promedio de hijos por familia.
El CI mximo, mnimo y promedio de todos los hijos.
El CI promedio de los hijos menores de 6 aos.
El CI promedio de los hijos mayores de 6 aos.

22. Una persona dispone de una cantidad de X pesetas que quiere
repartir a un conjunto de personas. A cada persona le da una
cantidad de dinero proporcional a la edad de la misma. Por
ejemplo, si una persona tiene 17 aos recibir 17000 pesetas y si
tiene 32 aos recibir 32000. El problema consiste en disear un
algoritmo que devuelva el nmero de personas que podrn recibir
una cantidad de dinero. Cuando la cantidad de dinero ya no es
suficiente para drsela a una persona, suponemos que no existen
ms personas y que por tanto el programa finaliza.

23. El nmero de individuos de una poblacin animal afectada por una
epidemia se reduce a la quinta parte cada ao.

Escribe un programa en C que lea el nmero de individuos
inicial y un nmero de aos N y escriba el nmero de
individuos que quedarn en cada uno de los siguientes N
aos (al cabo de 1 ao, a cabo de 2 aos,..., al cabo de N
aos).

24. Escribir un programa que lea 5 nmeros y encuentre el promedio, el
mximo y el mnimo de esos valores.

25. Escribir un programa que lea nmeros hasta que se encuentre el
cero. El segundo nmero se sumar al primero, luego el tercero se
restar, el cuarto se sumar, y as se deber seguir alternado hasta
que se llegue al cero. Cuando se llegue a esta condicin deber
imprimir el resultado, el total de operando de la operacin (sin incluir
el cero), y la suma de los operando que se restaron.

ALGORITMO Y ESTRUCTURA DE DATOS I

77
26. Escribir un programa que lea un valor entero que ser la base para
un sistema numrico (binario, octal o decimal), despus que lea un
entero positivo en esa base y que imprima su valor en base 10. Se
debe validar que el nmero pertenezca a esa base. La base ser
menor que o igual a 10. El programa podra tener la siguiente
salida:

Entrada Salida
Base Nmero
============== =========
10 1234 1234
8 77 63
2 1111 15

27. Escribir un programa que lea un nmero en base 10 y lo convierta a
base 2, base 8 y base hexadecimal.

28. Leer tres valores representando lo siguiente:

El capital (nmero entero de pesos)
Una tasa de inters en por ciento (flotante)
Un nmero de aos (entero).

Calcular los valores de la suma del capital y el inters compuesto
para un perodo dado de aos. Para cada ao el inters es
calculado como:

Inters = capital * tasa _ inters / 100; el cual se suma al capital
Capital += inters;

Imprimir los valores de moneda con una precisin de dos
decimales. Imprimir los valores del inters compuesto para cada
ao al final del perodo. La salida puede ser como la siguiente:

Capital inicial 35000.00 con tasa del 12.50 en 10 aos

Ao inters Suma
-----+-----------+---------
1 4375.00 39375.00
2 4921.88 44296.88
3 5537.11 49833.98
4 6229.25 56063.23
5 7007.90 63071.14
ALGORITMO Y ESTRUCTURA DE DATOS I
78
6 7883.89 70955.03
7 8869.38 79824.41
8 9978.05 89802.45
9 11225.31 101027.76
10 12628.47 113656.23


LABORATORIO N 3

1. Disee un programa de valide la entrada de un nmero positivo.

Pseudocdigo:

BEGIN
DO
Ingresar el dato nmero
WHILE numero <= 0
WRITE el nmero validado
END

Cdigo:

#include<iostream.h>
#include<conio.h>

int main ()
{
float numero;
clrscr ();
cout << "VALIDACIN DE LA ENTRADA DE UN NUMERO
POSITIVO" << endl;

do
{
cout<< "Ingrese el numero positivo:";
cin>>numero;
}while(numero <= 0 );

cout<< "\n El numero es " ;
cin>>numero;
getch ();
}
ALGORITMO Y ESTRUCTURA DE DATOS I

79
2. Escribir un programa que halle la suma de N nmeros enteros.

Cdigo:

# include<iostream.h>
# include<conio.h>

int main ()
{
int N, numero, cont = 0, suma = 0;

clrscr ();
cout << SUMA DE NMEROS ENTEROS << endl;
cout << Cuntos nmeros desea sumar? ;
cin >> N;

do
{
cout << Ingrese nmero << cont << : ;
cin >> numero;
suma += numero;
cont++;
}
while ( cont < N ) ;

cout << \ nLa suma es << suma;
getch ();
}


3. Disear el programa que halle el rea y el permetro de un
rectngulo.

#include "iostream.h"
#include "conio.h"

int main()
{
//Declaramos dos variables tipo enteras y una de tipo float

float base, altura, area, perimetro;


ALGORITMO Y ESTRUCTURA DE DATOS I
80

// Ingreso de datos

cout<<"Base: "; cin>>base;
cout<<"Altura: "; cin>>altura;

area = base * altura;
perimetro = 2 * (base * altura);

//Salida de datos
cout << "El area es :" <<area<<endl;
cout << "El perimetro es :" << perimetro<<endl;
getch();
return 0;
}


4. Escribir un programa que pida un nmero y si el que se introduce
por el teclado es menor de 100 que vuelva a solicitarlo.

PROGRAM EJER02;

VAR num:INTEGER;
BEGIN
ClrScr;

REPEAT
WRITELN ('Introduzca un nmero: ');
READLN (num);
UNTIL num > 100;

END


5. Disear un programa que imprima la siguiente serie:

1,2,,10 un numero en cada lnea.

#include <iostream.h>
#include <conio.h>



ALGORITMO Y ESTRUCTURA DE DATOS I

81
int main()
{
int numero=0;
do
{
numero= numero+1;
cout << \t <<numero<<endl;
} while (numero <10);
cout <<"\n\t Fin de programa ";
getch() ;
return(numero) ;
}


ALGORITMO Y ESTRUCTURA DE DATOS I
82
ALGORITMO Y ESTRUCTURA DE DATOS I

83
CAPTULO IV: SUBPROGRAMACIN

4.1 PROGRAMACIN MODULAR
La programacin modular es una de las tcnicas
fundamentales de la programacin, que consiste en dividir el
problema dado, en problemas ms simples, los cuales son a
su vez, implementados mediante mdulos independientes.
Cada uno de estos mdulos recibe el nombre de
subalgoritmos o subprogramas.
Existe un mdulo o programa principal con el que comienza la
ejecucin de todo el programa y que acta como
coordinador de las invocaciones y ejecuciones del resto de
los mdulos.
Un subprograma posee la misma estructura de un programa,
puede tener su propia declaracin de variables, junto a un
conjunto de parmetros, que constituyen el mecanismo para
transferir datos al subprograma.

Programa
















Los mdulos son independientes en el sentido de que ningn
mdulo, puede tener acceso directo a otro mdulo, con
excepcin del mdulo, al que se llama y sus propios
submdulos. Sin embargo los resultados producidos por un
mdulo puede ser utilizados por cualquier otro mdulo cuando
se transfiera a ellos el control.
ALGORITMO Y ESTRUCTURA DE DATOS I
84

VENTAJAS
Facilita el diseo descendente.
Disminuye la complejidad del algoritmo.
Disminuye el tamao total del programa.
Divisin de la programacin entre un equipo de
programadores - reduccin del tiempo de desarrollo.
Facilidad en la depuracin : Comprobacin individual de los
mdulos
Programas ms fciles de modificar.
Estructuracin en libreras especficas (biblioteca de
mdulos).

EJ EMPLO N 20
Se desea disear un algoritmo que realice las siguientes tareas:

Impresin.
Lectura de datos.
Ejecutar clculos.
Imprimir lneas detalladas de informacin.
Imprimir totales.


Este algoritmo podemos resolverlo utilizando mdulos, de modo
que exista un mdulo principal de control y diferentes
submdulos.

Mdulo principal:

Llamada al submdulo Impresion.
Llamada al submdulo proceso de datos.
Llamada al submdulo Imprimir totales.
Fin de proceso.

Submdulo Impresion:
Instruccin para impresin.
Retorno al mdulo principal.

Submdulo proceso de datos:

Lectura de datos.
Ejecucin de clculos.
Impresin detallada de lneas de informacin.
Retorno al mdulo principal.
ALGORITMO Y ESTRUCTURA DE DATOS I

85
Submdulo Imprimir totales:
Instrucciones de impresin de totales.
Retorno al mdulo principal.


4.2 SUBPROGRAMAS TIPOS
Tipos de Subprogramas:
Procedimientos
Funciones
PROCEDIMIENTOS
o Un procedimiento es un algoritmo que realiza una tarea
especfica, pero que generalmente no devuelve ningn
resultado.
o La entrada de informacin se realiza a travs de los
parmetros.
o En caso necesario la salida de informacin tambin se realiza
a travs de los parmetros.
o Para invocar a un procedimiento se utiliza la instruccin llamar
a seguida del nombre del procedimiento y de los parmetros
actuales sobre los que aplicarlo, escritos entre parntesis y
separados por comas.

DECLARACIN DE LOS PROCEDIMIENTOS

PROCEDIMIENTO <nombre> ([lista de parmetros formales])

CONST
<declaracin de constantes>
VAR
<declaracin de variables>
BEGIN
...
< acciones>

END_PROCEDIMIENTO

ALGORITMO Y ESTRUCTURA DE DATOS I
86

EJ EMPLO N 21

PROCEDIMIENTO divisin (E entero: Dividendo, Divisor; S
entero: Cociente, Resto)
BEGIN
Cociente Dividendo div Divisor
Resto Dividendo - Cociente * Divisor
END_PROCEDIMIENTO

FUNCIONES
o Una funcin toma uno o ms valores, denominados
argumentos o parmetros formales y devuelve un resultado.

o Para invocar a una funcin se utiliza su nombre seguido por
los parmetros actuales sobre las que se aplicar, escritos
entre parntesis y separados por comas en una expresin.

o Cada lenguaje de programacin tiene sus propias funciones
internas incorporadas. Si estas no permiten realizar el tipo de
clculo deseado ser necesario declarar una funcin externa.

DECLARACIN DE LA FUNCIONES
<tipo de dato> funcin <nombre de la funcin>
(<parmetros formales>)

CONST
<declaracin de constantes>
VAR
<declaracin de variables>
BEGIN
...
devolver <resultado>
END
ALGORITMO Y ESTRUCTURA DE DATOS I

87

EJ EMPLO N 22
Funcin Factorial (n: entero): entero
var i, factorial:entero
BEGIN
IF (n<=1) ENTONCES
factorial 1
ELSE
factorial 1
FOR i1 TO n DO
factorial factorial *1
ENDIF
END

EJ EMPLO N 23


Evaluar la funcin =x!/(y!(x-y)!) Algoritmo Hallar
Var x,y: entero
: real
BEGIN
READ (x,y)
factorial(x)/factorial(y)*factorial(x-y))
WRITE (El valor de es:,)
END

4.2.1 VARIABLES GLOBALES Y LOCALES.

- Variables Locales:
Una variable local es una variable que esta declarada
dentro de un subprograma y se dice que es local al
subprograma.
Una variable local solo est disponible durante el
funcionamiento del subprograma, al terminar su funcin
el subprograma y regresar al programa llamador, se
pierde el valor que se encontraba guardado en la
variable local.
ALGORITMO Y ESTRUCTURA DE DATOS I
88

EJ EMPLO N 23

Algoritmo local var x entero
BEGIN
x 0
cambiar
WRITE (x)
END
Mdulo cambiar var x entero
BEGIN
x 1
END
Como x es local, no tiene efecto en el programa, por lo tanto la
salida ser 0.

- Variables Globales:
Las variables declaradas en el programa principal se
denominan variables globales.
Las variables globales se pueden utilizar en todo el
programa principal y en todos los subprogramas, donde
se haga referencia al identificador de esta variable.

EJ EMPLO N 24
Algoritmo global var x entero
BEGIN
x 0
cambiar
write (x)
END
ALGORITMO Y ESTRUCTURA DE DATOS I

89

Mdulo cambiar
BEGIN
x1
END

La variable x esta definida como global, por lo tanto la salida
ser 1.

4.2.2 FUNCIONES, PASO DE PARMETROS.

PASO DE PARMETROS
o Existen diferentes mtodos para la transmisin o el
paso de parmetros o subprogramas.
o Es preciso conocer el mtodo adoptado por cada
lenguaje, un mismo programa puede producir
diferentes resultados bajo diferentes sistemas de paso
de parmetros.
o Los parmetros pueden ser clasificados como:

Entrada
(E)

Las entradas proporcionan valores desde el
programa que llama y que se utilizan dentro de
un procedimiento. En los programas funcin,
las entradas son los argumentos en el sentido
tradicional
Salidas
(S)

Las salidas producen los resultados del
subprograma: de nuevo si se utiliza el caso una
funcin, este devuelve un valor calculado por
dicha funcin, mientras que con
procedimientos puede calcularse cero, una o
varias salidas
Entrada/salida
(E/S)
Un solo parmetro se utiliza para mandar
argumentos a un programa y para devolver
resultados







ALGORITMO Y ESTRUCTURA DE DATOS I
90








EJ EMPLO N 25

Accin modifica (var n: entero)
Ejemplo de Parmetro de entrada/salida
IF n >0
n n * 2
ELSE
n n * 3
ENDIF

Los mtodos ms empleados para realizar el paso de parmetros
son:
Paso por valor (tambin conocido por Parmetro Valor)
Paso por referencia o diferencia (tambin conocido por
Parmetro Variable)
Paso por nombre
Paso por resultado

1) PASO POR VALOR
Son los parmetros que pueden recibir valores pero no
pueden devolverlos.
Los parmetros se tratan como variables locales y los
valores iniciales se proporcionan copiando los valores de
los correspondientes argumentos.
El paso de parmetros por valor consiste en enviar una
COPIA del valor de la variable al mdulo invocado.
ALGORITMO Y ESTRUCTURA DE DATOS I

91
De esta manera se asegura que el valor de la variable
slo puede ser modificado por el mdulo que la declar.

EJ EMPLO N 26

El mecanismo de paso se resume as:
- Valor primer parmetro: A = 5
- Valor segundo parmetro: constante = 18
- Valor tercer parmetro: expresin B * 3 + 4 = 25
- El valor 5.18 y 25 se transforma en los parmetros X, Y, Z
respectivamente, cuando se ejecuta el procedimiento.










EJ EMPLO N 27
ALGORITMO PARMETRO valor var x: entero
BEGIN
x0
CAMBIAR (x)
WRITE (x)
END

Mdulo cambiar (y: entero)

BEGIN
y1
END
SALIDA 0



A5
B7
Llamar_a PROC1 ( A, 18, 3 * 3 + 4)
5 18 25
procedimiento PROC1 (E entero) X, Y, Z)
A5
B7
Llamar_a PROC1 ( A, 18, B * 3 4)
5 18 25
procedimiento PROC1 (E entero) X, Y, Z)
A5
B7
Llamar_a PROC1 ( A, 18, 3 * 3 + 4)
5 18 25
procedimiento PROC1 (E entero) X, Y, Z)
A5
B7
Llamar_a PROC1 ( A, 18, B * 3 4)
5 18 25
procedimiento PROC1 (E entero) X, Y, Z)
ALGORITMO Y ESTRUCTURA DE DATOS I
92
2) PASO POR REFERENCIA
Este mtodo se denomina paso por referencia o tambin
de llamada por direccin o variable.
Son los que pueden recibir y devolver valores.
Son variables globales que se conectan con una local a
travs de su contenido.
En el caso de que se requiera que el valor de una
variable sea modificado por el mdulo invocado, debe
hacerse el paso de parmetro por referencia, por medio
del cual el mdulo invocado tiene acceso a la direccin
en que se guarda el valor a modificar.

EJ EMPLO N 28

ALGORITMO PARMETRO
var x: entero
BEGIN
x 0
CAMBIAR (x)
WRITE (x)
END
Mdulo cambiar (var y: entero)
BEGIN
y 1
END
SALIDA: x 1



3) PASO POR NOMBRE
En este caso, el parmetro formal se sustituye
literalmente por el parmetro actual asociado.
Esta sustitucin literal del parmetro formal por el
parmetro actual no se produce hasta que no se usa el
parmetro formal.
ALGORITMO Y ESTRUCTURA DE DATOS I

93
La ventaja es que si no usamos en ningn momento el
parmetro formal dentro del subprograma llamado (cosa
poco probable), no se tendr que hacer ningn tipo de
sustitucin.

4) POR RESULTADO
Nos interesa el valor del parmetro real solamente a la
salida o fin de la ejecucin del subprograma en que
aparece.
Esto significa que al hacer la llamada no se copia el valor
del parmetro real en el parmetro formal asociado, sin
embargo a la salida se copia el valor del parmetro
formal en la direccin del parmetro real asociado,
significa por tanto, que el parmetro real tiene que tener
asociada una expresin que tiene que ser una variable
(no puede ser una constante).

EJ EMPLO N 29
Algoritmo que contiene y utiliza unas funciones (seno y coseno) a
las que les podemos pasar el ngulo en grados.

Algoritmo Sen_Cos_En_Grados

VAR real: g
BEGIN
WRITE(Deme angulo en grados)
READ(g)
WRITE(seno(g))
WRITE(coseno(g))
END
real funcion coseno (E real : g)
BEGIN
RETURN(cos(g * 2 * 3.141592/360))
END_FUNCION
real funcion seno (E real g)
BEGIN
RETURN( sen(g * 2 * 3.141592/360))
END_FUNCION

ALGORITMO Y ESTRUCTURA DE DATOS I
94
EJ EMPLO N 30
Disear un programa que permita calcular el valor absoluto de un
nmero:

// Propsito: Funciones
#include <iostream.h>
#include <conio.h>
#include <math.h>
int main()
{
int numero;
cout << "\nIngrese un numero : "; cin >> numero;
cout << "\nValor absoluto del numero es : " << abs(numero);
getch();
return 0;
}


4.3 PARTE PRCTICA

PROBLEMAS PROPUESTOS

1. Disear una funcin llamada Fahrenheit que reciba como
parmetro una temperatura en grados Centgrados y retorne la
temperatura correspondiente en grados Fahrenheit. Escriba luego
un programa que haga uso de la funcin Fahrenheit para convertir
20 temperaturas en grados Centgrados Fahrenheit.

2. Disear una funcin llamada hipotenusa que reciba como
parmetro de entrada los catetos de un tringulo rectngulo y
retorne la longitud de la hipotenusa. Escriba luego un programa que
ingrese los catetos de un tringulo rectngulo y calcule la longitud
de su hipotenusa usando la funcin aqu diseada.

3. Disear una funcin llamada espar que reciba como entrada un
nmero enteros y determine si es nmero es par en cuyo caso debe
ALGORITMO Y ESTRUCTURA DE DATOS I

95
retornar un 1, en caso contrario debe retornar un 0. Escriba luego
un programa que muestre el uso de esta funcin.

4. Disear una funcin llamada signo que determine el signo de un
nmero real. Si el nmero es negativo retornar -1, si es positivo
retornar 0 y si es 0 retornar 0. Escriba luego un programa que
muestre el uso de esta funcin.

5. Disear una funcin llamada mes que reciba como parmetro de
entrada un nmero entero entre 1 y 12 e imprima el nombre del mes
correspondiente. As si se ingresa 1, se imprime Enero; si se
ingresa 2, se imprime Febrero, etc. Si el nmero no est entre 1 y
12, no imprimir nada. Escriba luego un programa que imprima el
nombre de todos los meses del ao usando la funcin mes.

6. Disear una funcin llamada buscarlnt que busque un nmero
entero en un arreglo de enteros. La funcin debe recibir como
parmetro de entrada el arreglo, el tamao del arreglo y el nmero
a buscar. Si el nmero esta en el arreglo debe retornar su ndice en
caso contrario retornar -1. Escriba luego un programa que
demuestre el uso de esta funcin.

7. Disee una funcin llamada tringulo que permita obtener el rea
y el permetro de un tringulo conociendo la longitud de sus tres
lados (a, b, c). No se permite el uso de variables globales. Escriba
luego un programa que demuestre el uso de esta funcin.

Use: A = [p(p-a)(p-b)(p-c)]
Donde p representa el semipermetro del tringulo que se calcula
con la frmula: p = (a+b+c)/2.


LABORATORIO N 4

1. Disear una funcin llamado cuadrado que reciba como parmetro
un nmero entero y retorne su cuadrado. Luego disee un
programa que ingrese un nmero N y a) Imprima el cuadrado de N,
b) Calcule e imprima el valor de: 5N
2
+3N-5.

ALGORITMO Y ESTRUCTURA DE DATOS I
96
Solucin:

#include <iostream.h>
#include <conio.h>

// Prototipo de la funcin cuadrado
// Sera suficiente escribir: int cuadrado (int);
int cuadrado (int n);
// El programa comienza aqu
int main ( )
{
int N, resp;
clrscr ( );
cout << Ingrese un nmero entero N : ;
cin >> N;
// Aqu usamos el retorno de la funcin, directamente en una
// Sentencia de salida,
cout << \nForma 1: El cuadrado de N es ...: << cuadrado (N);

// Tambin puede crearse una variable para recibir el retorno de
// La funcin y luego imprimimos el valor de la variable. As:

int retorno = cuadrado (N);
cout << \nForm 2: El cuadrado de N es ..: << retorno;

// Aqu usamos el retorno de una funcin directamente en una
// expresin.
resp = 5*cuadrado (N) + 3*N 5;
cout << \nEl valor de 5N2 + 3N 5 es.. ....: << resp;
getch ( );
}

// Definicin de la funcin cuadrado
int cuadrado (int)
{
// Esto muestra que una sentencia return se puede incluir el
clculo
// De una expresin. Entonces primero se efecta en calculo
de la
// Expresin y luego se retorna su valor.
Return n*n;
}

ALGORITMO Y ESTRUCTURA DE DATOS I

97
2. Disear una funcin llamado mnimo que reciba como parmetro
tres nmeros enteros y retorne el nmero menor. Escriba luego un
programa que ingrese tres nmeros enteros y determine el menor.

Solucin:

#include <iostream.h>
#include <conio.h>

// Prototipo de la funcin mnimo
int mnimo (int a, int b, int c);

// Funcin principal
int main ( )
{
int A, B, C;
clrscr ( );
cout << Determinacin del menor de tres nmeros <<
end1;
cout << Ingrese tres nmeros enteros .: ;
cin >> A >> B >> C;
cout << El menor de los tres nmeros es .: << mnimo (A,
B, C);
getch ( );
}
/ Definicin de la funcin mnimo
int mnimo (int a, int b, int c)
{
// Observe que la variable menor es una variable local y ser
// Destruida al salir de la funcin (luego del retorno).
Int menor = a;
If (b < menor)
Menor = b;
If (c < menor)
Menor = c;

Return menor;
}

ALGORITMO Y ESTRUCTURA DE DATOS I
98
3. Disee una funcin llamada mltiplo que reciba como parmetro
dos nmeros enteros y determine si el primero es mltiplo del
segundo en cuyo caso debe retornar 1 (verdadero) y, en caso
contrario debe retornar 0 (falso). Luego escriba un programa que
ingrese 10 pares de nmeros enteros y determine si el primer
nmero de cada par es mltiplo del segundo.
Solucin:
#include <iostream.h>
#include <conio.h>

//Prototipo de la funcin mltiplo
int multiplo (int a, int b);

// Funcin principal

int main ( )
{
int m, n;
clrscr ( );
for (int i = 0; i < 3; i ++)
{
cout << Ingrese dos nmeros enteros : ;
cin >> m >> n;

// El if que sigue puede abreviarse como; if (mltiplo
(m, n))
if (mltiplo (m, n) = = 1)
cout << m << es mltiplo de << n << endl;
else
cout << m << no es mltiplo de <<n << endl;
}
cout << \nPulse una tecla para terminar ;
getch ( );
}
// Definicin de la funcin mltiplo
int mltiplo (int a, int b)

{
int r = 0; // Asumimos que a no es mltiplo de b
if (a / b = = 0) // Pero si a es mltiplo de b
r = 1;
return r; // Retornamos el indicador
}
ALGORITMO Y ESTRUCTURA DE DATOS I

99

4. Disee una funcin llamada coutxy que imprima un texto
comenzando desde una coordenada dada de la pantalla usando
cout. Escriba luego un programa que muestre el uso de esta
funcin.

Solucin:

#include <iostream.h>
#include <conio.h>
// Prototipo de la funcin coutxy
void coutxy (int x, int y, char texto [ ] ) ;

// Funcin principal
int main ( )
{
clrscr ( ) ;
coutxy (8, 2, Esto comienza en la coordenada (8, 2)) ;
coutxy (5, 5, Esto comienza en la coordenada (5, 5));
coutxy (1, 8, Esto comienza en la coordenada (1, 8));
coutxy (26, 25, Pulse una tecla para terminar);
getch ( );
}

// Definicin de la funcin coutxy.
// Note que la funcin no necesita retornar nada (todo lo que hace lo
// Deja impreso en la pantalla) por lo que su tipo de retorno es void.

void coutxy (int x, int y, char texto [ ])
gotoxy (x, y); // Poner el cursor en la coordenada (x,
y)
cout << texto; // Imprimir el texto desde la posicin del
cursor
}


5. Disear una funcin llamada cuentach que retorne en nmero de
repeticiones de un carcter en una cadena. La funcin debe recibir
como parmetro la cadena y el carcter. Escriba luego un programa
que ingrese una cadena y determine el nmero de repeticiones de
cada una de las vocales no tildadas.


ALGORITMO Y ESTRUCTURA DE DATOS I
100
Solucin:

#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>


int cuentach (char cad [ ], char ch);
int main( )
{
char cadena [80];
char vocal [] = aeiou;

clrscr ( );
cout <<Ingrese una cadena:;
gets (cadena);
strlwr (cadena);
cout << \nNmero de repeticiones de las vocales << endl;
for (int i = 0; i < 5; i ++)
cout << vocal [i] << : << cuentach (cadena, vocal [i]) <<
veces <<endl;
getch ( );
}

int cuentach (char cad [], char ch)

{
int cont = 0, len = strlen (cad);
for (int i = 0 ; i < len; i++)
if (cad [i] == ch)
cont ++;
return cont;
}


6. Disee una funcin llamado mirandom que genere un nmero
aleatorio entero entre el valor mnimo y un valor mximo. La funcin
debe recibir como parmetro el valor mnimo, el valor mximo y
retornar el nmero aleatorio en un parmetro por referencia.
Escriba luego un programa que genere 20 nmeros aleatorios entre
50 y 200.

ALGORITMO Y ESTRUCTURA DE DATOS I

101
Solucin:

#include <stdlib.h>
#include <iostream.h>
#include <conio.h>

// Prototipo de funcin
void mirandom (int& num, int min, int max);

// Funcin principal

int main ( )

{
int numero;
clrscr ( );

cout << GENERACIN DE 20 NMEROS ALEATORIOS
ENTRE 50 Y 200 \n\n;
randomize();
for ( int i = 0; i < 20; i ++)
{

/*Como se esta pasando la variable nmero mediante un
parmetro por referencia, entonces la funcin mirandom esta
trabajando sobre la variable original nmero*/
}

mirandom (numero, 50, 200);
cout << numero << end1;
}
getch ( );
}
ALGORITMO Y ESTRUCTURA DE DATOS I
102

ALGORITMO Y ESTRUCTURA DE DATOS I

103
CAPTULO V: RECURSIVIDAD


5.1 RECURSIVIDAD
- Un algoritmo se dice que es recursivo cuando contiene en su
definicin una o ms llamadas a si mismo.
- Todo algoritmo recursivo tendr al menos una instruccin
alternativa.
- La recursividad o recursin es una herramienta muy til en la
resolucin de problemas, ya que permite resolver problema
complicados partindolos en problemas ms sencillos.


EJ EMPLO N 31
Funcin factorial

factorial(n: natural) dev f: natural
IF n = 0 entonces // Condicin de
terminacin f 1 // Caso base
ELSE
f n * factorial(n 1) // Caso recursivo
ENDIF

5.2 CARACTERSTICAS
o Un algoritmo recursivo consta de una parte recursiva, otra
iterativa o no recursiva y una condicin de terminacin.
o La parte recursiva y la condicin de terminacin siempre
existen.

Algo muy importante a tener en cuenta cuando usemos la
recursividad es que es necesario asegurarnos que llega un
momento en que no hacemos ms llamadas recursivas.

Si no se cumple esta condicin el programa no parar nunca.




ALGORITMO Y ESTRUCTURA DE DATOS I
104
5.3 VENTAJAS Y DESVENTAJAS

Ventajas de la Recursin ya conocidas

Soluciones simples, claras.
Soluciones elegantes.
Soluciones a problemas complejos.

Desventajas de la Recursin: INEFICIENCIA

Sobrecarga asociada con las llamadas a subalgoritmos.
La claridad compensa la sobrecarga?

Una simple llamada puede generar un gran nmero de
llamadas recursivas. (Fact(n) genera n llamadas
recursivas).

El valor de la recursividad reside en el hecho de que se
puede usar para resolver problemas sin fcil solucin
iterativa.

La ineficiencia inherente de algunos algoritmos
recursivos.

5.4 PELIGROS EN LA RECURSIVIDAD
Para decidir hacer un programa recursivo se deben de tener al
menos dos cosas muy claras:

o EL PASO BASE:
Esta es la clave para terminar la recursin, es cuando deja de
hacer llamadas a la funcin recursiva y hace evaluaciones
devolviendo los resultados. Adems se debe asegurar de que
es posible entrar a este paso.

o EL PASO RECURSIVO:
Es la parte de la definicin que hace llamadas a esa misma
funcin y que es la causante de las inserciones en la pila,
almacenando en cada una de las llamadas, informacin del
programa, del estado de sus variables locales y globales.

ALGORITMO Y ESTRUCTURA DE DATOS I

105
5.5 TIPOS DE ALGORITMOS RECURSIVOS







A. RECURSIN DIRECTA: Cuando un algoritmo se llama a si
mismo en su definicin.

A.1 RECURSIN LINEAL

Esquema general de una funcin recursiva lineal:
F(x: T1) dev r: T2
IF d(x) entonces
r h(x)
ELSE
v F(s(x))
r c(x, v)
ENDIF

Donde x:T1 y r:T2 son listas de parmetros y no un
nico parmetro.

A.1.1 RECURSIN FINAL: Es una recursin lineal
donde lo ltimo que se ejecuta es la llamada
recursiva.

EJ EMPLO N 32
Resto (n,m: N) dev r: N
IF n < m entonces
r n
ELSE
r Resto (n m, m)
ENDIF
-Lineal
- Mltiple
- Anidada
REC. DIRECTA
REC. INDIRECTA
-Final
- Lineal
ALGORITMO Y ESTRUCTURA DE DATOS I
106

A.1.2 RECURSIN LINEAL: Cuando slo hay una
llamada recursiva en el algoritmo.

A.2 RECURSIN MLTIPLE
Cuando en la definicin aparece ms de una llamada
recursiva.

EJ EMPLO N 33

Fib(n: N) dev f: N

IF n <= 1 entonces
f n
ELSE
f Fib(n 1) + Fib(n 2)
ENDIF

A.3 RECURSIN ANIDADA
Cuando alguno de los argumentos de la llamada es a su
vez una llamada recursiva.

EJ EMPLO N 34
Ack(n,m: N) dev ack: N

IF n = 0 entonces
ack m + 1
ELSE
IF m 0 entonces
ack Ack(n 1, 1)
ELSE
ack Ack(n 1, Ack(n, m 1))
ENDIF
ENDIF

ALGORITMO Y ESTRUCTURA DE DATOS I

107
B. RECURSIN INDIRECTA: Cuando el algoritmo no tiene una
llamada a si mismo, sino que llama a otro algoritmo que le
llama a l.

EJ EMPLO N 35

Funciones Par/Impar
- Impar (n: Nat) dev: p:bool
IF n=0
p cierto
ELSE
IF n1
p falso
ELSE
p impar(n-1)
ENDIF
ENDIF

- Par (n: Nat) dev: p:bool
IF n=0
p falso
ELSE
IF n1
p cierto
ELSE
p par(n-1)
ENDIF
ENDIF


5.6 VERIFICACIN DE FUNCIONES RECURSIVAS
- Toda funcin recursiva contiene al menos una instruccin
alternativa, por lo que la verificacin consistir en verificar
instruccin alternativa.
- En una de las ramas de la instruccin alternativa vamos a
tener una llamada a la propia funcin, pero para verificar una
llamada una funcin, la propia funcin ha de estar ya
verificada.
- La solucin es aplicar el principio de induccin: Tomamos
como Hiptesis de Induccin que la funcin ya est verificada
para casos anteriores (para las llamadas recursivas).

ALGORITMO Y ESTRUCTURA DE DATOS I
108
5.7 LA PILA DE RECURSIN
La memoria del ordenador se divide (de manera lgica, no fsica)
en varios segmentos (4):
Segmento de cdigo: Parte de la memoria donde se
guardan las instrucciones del programa en cdigo mquina.
Segmento de datos: Parte de la memoria destinada a
almacenar las variables estticas.
Montculo: Parte de la memoria destinada a las variables
dinmicas.
Pila del programa: Parte destinada a las variables locales y
parmetros de la funcin que est siendo ejecutada.

5.8 LLAMADA A UNA FUNCIN RECURSIVA
En el caso recursivo, cada llamada genera un nuevo ejemplar de la
funcin con sus correspondientes objetos locales

La funcin se ejecutar normalmente hasta la llamada a s
misma. En ese momento se crean en la pila nuevos
parmetros y variables locales.

El nuevo ejemplar de funcin comienza a ejecutarse.

Se crean ms copias hasta llegar a los casos bases, donde se
resuelve directamente el valor, y se va saliendo liberando
memoria hasta llegar a la primera llamada (ltima en
cerrarse).
ALGORITMO Y ESTRUCTURA DE DATOS I

109

5.9 PARTE PRCTICA

PROBLEMAS PROPUESTOS

1. Escribir una funcin recursiva Escribe Blancos(n) que imprima n
caracteres blancos consecutivos.

2. Escribir una funcin recursiva Invierte que acepte caracteres por
teclado hasta recibir un retorno de carro y los imprima en orden
inverso al de lectura. Los caracteres se leern uno a uno y no
deben almacenarse en un array; basta emplear una sola variable
local a la funcin Invierte de tipo char.

3. Escribir una funcin recursiva que calcule el ensimo nmero de
Fibonacci.

4. Escribir una funcin recursiva Pascal(i,j) que calcule el elemento i, j
del triangulo de Pascal, que sigue el siguiente patrn:













Como puede apreciarse, los elementos en el borde del triangulo
son 1s, y el resto de los elementos son iguales a la suma de los dos
elementos que hay sobre ellos.

5. Escribir una funcin recursiva Palndromo(c,i,j) que determine si la
subcadena contenida entre las posiciones i y j de la cadena c es un
palndromo.


ALGORITMO Y ESTRUCTURA DE DATOS I
110
LABORATORIO N 5

1. Funcin factorial recursiva

/* Funcin recursiva del factorial */
#include <stdio.h>

long factorial( long numero ); /* prototipo de la funcin */

int main()
{
int i; /* contador */
/* repite 11 veces; durante cada iteracin, calcula el factorial( i ) y
despliega el resultado */

for ( i = 0; i <= 10; i++ )
{
printf( "%2d! = %ld\n", i, factorial( i ) );
} /* fin de for */

return 0;

}

/* definicin recursiva de la funcin factorial */

long factorial( long numero )
{
if ( numero <= 1 ) {
return 1;
}
else { /* paso recursivo */
return ( numero * factorial( numero - 1 ) );
}

} /* fin de la funcin factorial */

ALGORITMO Y ESTRUCTURA DE DATOS I

111

SERIE DE FIBONACCI

/* Funcin recursiva de fibonacci */

#include <stdio.h>
long fibonacci( long n ); /* prototipo de la funcin */

int main()
{
long resultado; /* valor fibonacci */
long numero; /* numero a introducir por el usuario */

/* obtiene un entero del usuario */
printf( "Introduzca un entero: " );
scanf( "%ld", &numero);

/* calcula el valor fibonacci del nmero introducido por el usuario
*/

resultado = fibonacci( numero );

/* despliega el resultado */
printf( "Fibonacci( %ld ) = %ld\n", numero, resultado );

return 0;
}

/* definicin de la funcin recursiva fibonacci */

long fibonacci( long n )
{
/* caso base */

if ( n == 0 || n == 1 ) {
return n;
}
else { /* paso recursivo */
return fibonacci( n - 1 ) + fibonacci( n - 2 );
}
}
ALGORITMO Y ESTRUCTURA DE DATOS I
112

ALGORITMO Y ESTRUCTURA DE DATOS I

113
CAPTULO VI: DATOS ESTRUCTURADOS

CONCEPTO
Estructura de datos es una forma de organizar un conjunto de datos
elementales (un dato elemental es la mnima informacin que se
tiene en el sistema) con el objetivo de facilitar la manipulacin de
estos datos como un todo o individualmente.

Una estructura de datos define la organizacin e
interrelacionamiento de estos, y un conjunto de operaciones que se
pueden realizar sobre l.

Las operaciones bsicas son:

Alta, adicionar un nuevo valor a la estructura.
Baja, borrar un valor de la estructura.
Bsqueda, encontrar un determinado valor en la estructura
para realizar una operacin con este valor, en forma
SECUENCIAL o BINARIO (siempre y cuando los datos estn
ordenados).
Ordenamiento, de los elementos pertenecientes a la
estructura.
Apareo, dadas dos estructuras originar una nueva ordenada y
que contenga a las apareadas.


6.1 TIPOS
Los tipos de datos estructurados ms comunes son: vectores y
matrices (array), registros, cadenas de caracteres (string).

ARRAY (ARREGLO)
Es una estructura de datos en la cual se almacena una coleccin de
datos del mismo tipo a este se le llama tipo base del arreglo,
mientras que los datos individuales se llaman elementos del
arreglo.

ALGORITMO Y ESTRUCTURA DE DATOS I
114
La declaracin:
int Array[10];
- Los elementos individuales del array se comienza a numerar a
partir del elemento 0, as, Array[0] individualiza al primer
elemento y Array[9] al ltimo.


- Los arreglos pueden ser multidimensionales, as por ejemplo

double Matriz [10][20];

6.2 ARREGLOS UNIDIMENSIONALES, DECLARACIN Y ACCESO
- Un arreglo unidimensional es un tipo de datos estructurado
que est formado por una coleccin finita y ordenada de datos
del mismo tipo.

- El tipo de acceso a los arreglos unidimensionales es el acceso
directo, es decir, podemos acceder a cualquier elemento del
arreglo sin tener que consultar a elementos anteriores o
posteriores, esto mediante el uso de un ndice para cada
elemento del arreglo que nos da su posicin relativa. Por
ejemplo :

int edad [50];













edad [49]
edad [48]
edad [47]
.
.
.
.
edad [4]
edad [3]
edad [2]
edad [1]
edad [0]
edad [49]
edad [48]
edad [47]
.
.
.
.
edad [4]
edad [3]
edad [2]
edad [1]
edad [0]
1
2
3
4
.
.
.
.
47
48
49
Indice Elemento
ALGORITMO Y ESTRUCTURA DE DATOS I

115
Esto reservar espacio en memoria para 50 nmeros enteros
ubicados en posiciones contiguas como puede observarse en la
siguiente representacin grafica.

Declaracin y asignacin de valores a un arreglo.
// declara un arreglo llamado estatura de tipo flota y tamao 5
float estatura [5];
// Asignemos valores al arreglo de forma arbitraria
estatura [0]= 1.65;
estatura [1]= 1.57;
estatura [2]= 1.72;
estatura [3]= 1.80;
estatura [4]= 1.65;

Grficamente el resultado es:









EJ EMPLO N 36
Hacer un programa que registre 20 nmeros en un arreglo
unidimensional y muestre posteriormente los elementos que
contienen los nmeros mltiplos de 5 e imprima los elementos en
forma inversa al ingreso de los datos.

#include <iostream.h>
#include <conio.h>
estatura [4]
1.65
estatura [3]
1.80
estatura [2]
1.72
estatura [1]
1.57
estatura [0]
1.65
0
1
2
3
4 estatura [4]
1.65
estatura [3]
1.80
estatura [2]
1.72
estatura [1]
1.57
estatura [0]
1.65
0
1
2
3
4
ndice Contenido Elemento
ALGORITMO Y ESTRUCTURA DE DATOS I
116
int main()
{
int a[20];
int x = 0;
// ADICIONO VALORES
while (x < 20)
{
cout <<"Ingreso vector ["<< x+1 << "]: ";
cin >> a[x];
x = x + 1;
}
x = 1;
// MUESTRO ELEMENTOS
while (x < 20){
if (a[x]%5 ==0)
cout << "\n" << a[x];
x = x + 1;
}
cout << "\n";
getch();
}

EJ EMPLO N37
Ingrese 10 notas en un arreglo de enteros y luego mustrelo en pantalla
#include<iostream.h>
#include<conio.h>
int main()
{
const int MAX=10; int notas[MAX];
for (int i=0;i<MAX; i++)
{
cout<<"Ingrese nota : ";
cin>>notas[i]; }
cout<<"\nFin de datos ";
cout<<"\n\n Notas ingresadas";
for(int j=0;j<MAX; j++)
{
cout<<"\nNota [" << j + 1 << "] ";
cout<<notas[j];
}
getch ();
}
ALGORITMO Y ESTRUCTURA DE DATOS I

117

6.3 ARREGLOS BIDIMENSIONALES, DECLARACION Y ACCESO

Un array bidimensional (tabla o matriz) es un array con dos ndices,
al igual que los vectores que deben ser ordinales o tipo subrango.










Para localizar o almacenar un valor en el array se deben especificar
dos posiciones (dos subndices), uno para la fila y otro para la
columna.

Formato:






EJ EMPLO N 38
Disear un programa que permita ingresar valores en una matriz de 3 x 4
(lectura por columna)

#include<iostream.h>
#include<iomanip.h>
#include<conio.h>

int main()
{
int num[4][3];
for (int a=0; a<4; a++){
for (int b=0; b<3; b++){
cout << "Nmero [" << b+1 << "], [" << a+1 << "] : "; cin >>
num[a][b];
}
1. identificador =array [ndice1, indice 2] of tipo de elemento
2. identificador =array [ ndice 1 ] of array [ indice 2 ] of tipo de
elemento
ALGORITMO Y ESTRUCTURA DE DATOS I
118
}
cout << "\n\n";

for(int c=0; c<3; c++){
for(int d=0; d<4; d++)
cout<< setw(5)<<num[d][c] << " ";
cout << endl;
}
getch();
return 0;
}

ARREGLO MULTIDIMENSIONAL

Se pueden describir como arreglos de arreglos.

Formato:








EJ EMPLO N 39

#include <stdio.h>

void imprimeArreglo( const int a[][ 3 ] ); /* prototipo de la funcin */

/* la funcin main comienza la ejecucin del programa */
int main()
{
/* inicializa arreglo1, arreglo2, arreglo3 */

int arreglo1[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } };
int arreglo2[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 };
int arreglo3[ 2 ][ 3 ] = { { 1, 2 }, { 4 } };

printf( "Los valores en el arreglo1 por linea son:n" );
imprimeArreglo( arreglo1 );

1. identificador =array [ndice1] of array [ndice 2]..
of array [ndice n] of tipo de elemento
2. identificador =array [ndice 1, ndice 2,...,ndice n] of tipo
de elemento
ALGORITMO Y ESTRUCTURA DE DATOS I

119
printf( "Los valores en el arreglo2 por linea son:n" );
imprimeArreglo( arreglo2 );

printf( "Los valores en el arreglo3 por linea son:n" );

imprimeArreglo( arreglo3 );

return 0; /* indica terminacin exitosa */
}
/* funcin para mostrar un arreglo con dos filas y tres columnas */
void imprimeArreglo( const int a[][ 3 ] )
{
int i; /* contador de filas */
int j; /* contador de clumnas */

/* ciclo a travs de las filas */

for ( i = 0; i <= 1; i++ ) {
/* muestra los valores de las columnas */
for ( j = 0; j <= 2; j++ ) {
printf( "%d ", a[ i ][ j ] );
}
/* fin del for interno */
printf( "n" ); /* comienza la nueva lnea de salida */

} /* fin del for externo */
} /* fin de la funcin imprimeArreglo */


BSQUEDA EN ARREGLOS UNIDIMENSIONALES
La Bsqueda Lineal o Secuencial consiste en el recorrido de todo el
arreglo, desde el primer elemento hasta el ltimo y de uno en uno.

La intencin es obtener el ndice del elemento buscado puesto que con el
ndice se puede acceder al arreglo para obtener informacin sobre el
elemento

Considere al respecto un arreglo arreg de tamao N, el pseudocdigo
para la bsqueda es el siguiente:

ALGORITMO Y ESTRUCTURA DE DATOS I
120
indicebuscado =-1
PARA i=0 MIENTRAS i < N CON INCREMENTO 1
SI elemento buscado es igual arreg[1] ENTONCES
indicebuscado = i;
salir del bucle
FIN_SI
FIN_PARA


ORDENAMIENTO UNIDIMENSIONAL
Existen diversas formas de ordenar un arreglo. En el curso se ver uno de
los ms simples y populares: Ordenamiento Burbuja o Bubble Sort.

ORDENAMIENTO BURBUJA O MTODO DE LA BURBUJA
La Tcnica de Ordenacin por Burbuja consiste en ejecutar N-1 recorridos
a lo largo del arreglo donde es cada recorrido se efectan comparaciones
entre elementos adyacentes intercambiando sus valores si estn
desordenados.

Pseudocdigo para ordenamiento ascendente.

EJ EMPLO N 40

PARA i=0
MIENTRAS i<N-1
INCREMENTO 1
PARA j=0 MIENTRAS j<N-1 INCREMENTO 1
SI arreg[j] es mayor que arreg[j+1]
ENTONCES intercambiar arreg[j] con arreg[j+1]
FIN_SI
FIN_PARA
FIN_PARA

EJ EMPLO N 41
Supngase que desean ordenar las siguientes claves del arreglo A,
transportando en cada pasada el menor elemento hacia la parte izquierda
del arreglo. A: 15, 67, 08, 16, 44, 27, 12, 35

ALGORITMO Y ESTRUCTURA DE DATOS I

121
PROCESO DEL PROBLEMA

PRIMERA PASADA

a[7]>a[8] (12>35) no hay intercambio
a[6]>a[7] (27>12) si hay intercambio
a[5]>a[6] (44>12) si hay intercambio
a[4]>a[5] (16>12) si hay intercambio
a[3]>a[4] (08>12) no hay intercambio
a[2]>a[3] (67>08) si hay intercambio
a[1]>a[2] (15>08) si hay intercambio


Luego de la primera pasada el arreglo queda de la siguiente forma:

A: 08, 15, 67, 12, 16, 44, 27, 35

Obsrvese que el elemento 08 fue situado en la parte izquierda del
arreglo.

Continuacin se muestra el resultado de las siguientes pasadas:

3era. Pasada: 08 12 15 16 67 27 35 44
4ta. Pasada: 08 12 15 16 27 67 35 44
5ta. Pasada: 08 12 15 16 27 35 67 44
6ta. Pasada: 08 12 15 16 27 35 44 67
7ma. Pasada: 08 12 15 16 27 35 44 67

void Intercambio_Directo(int n)
{ int i,j,aux;
i=0;
j= n-1;
for(;j>0;j--)
for(i=0;i<j;i++) //recorre el arreglo de 0 a n-1
{
if (arr[i]>arr[i+1]) /*si el elemento actual es mayor que el
elemento siguiente */
{
aux=arr[i]; //intercambio de elementos
arr[i]=arr[i+1];
arr[i+1]=aux;
}
}
}
ALGORITMO Y ESTRUCTURA DE DATOS I
122

6.4 REGISTROS

6.4.1 CONCEPTO
Un registro es una coleccin de campos lgicamente
relacionados, que pueden ser tratados como una unidad por
algn programa.

Un ejemplo de registro puede ser la informacin de un
determinado empleado, que contiene los campos nombre,
direccin, fecha de nacimiento, estudios, salario, trienios,
etc.

Los registros pueden ser todos de longitud fija; por ejemplo,
los registros de empleados pueden contener el mismo
nmero de campos, cada uno de la misma longitud para
nombre, direccin, fecha, etc. Tambin pueden ser longitud
variable.

Los registros organizados en campos se denominan
registros lgicos.

ARCHIVOS (FICHEROS)
Un archivo o fichero es un conjunto de datos estructurados
en una coleccin de entidades elementales o bsicas
denominadas registros o artculos, que son de igual tipo y
constan a su vez de diferentes entidades de nivel ms bajo
denominadas campos, los cuales estn organizados para un
propsito especifico.

Por ejemplo, un fichero de una clase escolar contiene un
conjunto de registros de los estudiantes de esa clase, otros
por ejemplo pueden ser el fichero de nominas de una
empresa, inventarios, stocks, etc.

Los datos estn organizados de tal modo que pueden ser
recuperados fcilmente, actualizados o borrados y
almacenados de nuevo en el archivo con todos los cambios
realizados.

6.4.2 DECLARACIN Y ACCESO
Para definir un tipo registro se utilizar la palabra reservada
struct seguida del identificador del tipo y de la relacin de
componentes (tipo e identificador del componente terminado
ALGORITMO Y ESTRUCTURA DE DATOS I

123
en ';') entre llaves, terminada en ';'. A cada componente le
llamaremos campo, y podrn ser de cualquier tipo (simple o
compuesto).

Ejemplo

// tipo enumerado

enum Meses {
enero, febrero, marzo, abril, mayo, junio, Julio,
agosto, septiembre, octubre, noviembre, diciembre
};
// tipo registro
struct Fecha {
int dia;
Meses mes;
int anno;
};
// variables
Fecha f_nac ;
Fecha f_ant;




No puede utilizarse el mismo identificador para especificar
dos campos distintos de un mismo registro. Puede utilizarse
el mismo identificador para especificar dos campos de
distintos registros














ALGORITMO Y ESTRUCTURA DE DATOS I
124
6.4.3 ARREGLO DE REGISTROS
Los arreglos y los registros pueden ser mezclados. Se puede
tener un arreglo de estructuras, como se demuestra en el
siguiente ejemplo.

EJ EMPLO N 42
struct Registro
{

float unElemento;
int unArreglo[10];
};
void fn()

{
struct Registro arrReg[20];
arrReg[10].unElemento=10.0;
arrReg[10].unArreglo[5]=5;

}

Los registros tambin pueden ser inicializados de la
siguiente manera:

struct Registro
{
int primerElem;
float segundoElem;
};

void fn()
{
struct Registro simple = {1, 2.0};
struct Registro array[2] = { {1, 2.0}, /* array[0] */
{2,4.4}}; /* array[1] */
}


ALGORITMO Y ESTRUCTURA DE DATOS I

125
EJ EMPLO N 43
En el ejemplo la estructura es Registro y el objeto es reg.

struct Registro
{
int primerElem;
float segundoElem;
}

void fn()
{
struct Registo reg;
reg.primerElem=0; /* se refiere al miembro entero */
reg.segundoElem=1.0; /* se refiere al miembro real */
}


6.5 CADENAS DE CARACTERES
Una cadena (string) de caracteres es un conjunto de caracteres
(incluido el blanco), que se almacenan en un rea contigua de la
memoria. Pueden ser entradas o salidas desde una computadora.

Una Subcadena es una cadena de caracteres que ha sido extrada
de otra de mayor longitud.

12 de es una subcadena de 12 de Octubre de 1492
como ests es una subcadena de Hola, como ests?

Cadenas de Longitud Fija
Se consideran vectores de la longitud declarada, con blancos
a izquierda o derecha si la cadena no tiene la longitud
declarada.
As el ejemplo siguiente:
E S T A C A S A E S U N A R U I N A /// ///
1

2

3

4

5

6

7

8

9

10 11 12 13 14 15 16 17 18 19 20

21

22

23

24


Se declar con una dimensin de 24 caracteres y los dos
ltimo se rellenan con blancos.

ALGORITMO Y ESTRUCTURA DE DATOS I
126
Cadenas de Longitud Variable con un Mximo
Se considera un puntero, con dos campos que contienen la
longitud mxima y la longitud actual.

20 17 E S T A C A S A E S G U A Y /// /// ///
Donde:
20 = Longitud mxima
17 = Longitud actual

Instrucciones Bsicas con Cadenas
Las instrucciones bsicas asignar y entrada/salida (leer/escribir) se
realizan de un modo similar al tratamiento de dichas instrucciones con
datos numricos.
Asignacin
Si la variable NOMBRE ha sido declarada como carcter
var NOMBRE : carcter
La instruccin de asignacin debe contener en el lado derecho de la
asignacin una constante tipo carcter (una cadena) o bien otra
variable tipo carcter. As:
NOMBRE: Juan Gonzlez
Significa que la variable NOMBRE toma por valor la cadena Juan
Gonzlez
Entrada/Salida
La entrada/salida desde una computadora se puede realizar en
modo carcter, para ello se asignar una cadena de caracteres a
una variable tipo cadena. Ejemplo:
var A,B,C,D: carcter
Las instrucciones:
READ A,B
WRITE C,D
ALGORITMO Y ESTRUCTURA DE DATOS I

127
Asignarn a A y B las cadenas introducidas por el teclado y
visualizar o imprimirn en el dispositivo de salida las cadenas que
representan las variables C y D.

EJ EMPLO N 44

1. Calcula el numero de palabras en una cadena

#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()

{

//definicin de variables

char cadena[100];
int cont,contp=1;

clrscr(); //limpia la pantalla
printf("Cadena: ");gets(cadena); //obtiene la cadena

for(cont=0;cont<=(strlen(cadena)-1);cont++)

{ //recorre la cadena
if(cadena[cont]==' ') //busca espacios
contp++; //incrementa el conteo de
palabras

}
printf("palabras: %d",contp);//salida en pantalla del resultado
getch();
}



ALGORITMO Y ESTRUCTURA DE DATOS I
128
EJ EMPLO N 45
Programa que cambia todas las minsculas por maysculas

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

int main()

{
char cadena[100];
int lon,car,cont;
clrscr();
printf("Cadena: ");
gets(cadena); //obtenemos cadena
lon=strlen(cadena); //obtenemos longitud

for(cont=0;cont<=lon-1;cont++)
{
car=cadena[cont]; //obtenemos el carcter en la posicin cont
if((car>=65)&&(car<=90))
{ //entonces es mayscula
cadena[cont]=tolower(cadena[cont]); //convertimos a
minsculas
}
}

printf("%s",cadena);//salida en pantalla de la cadena
getch();
}

ALGORITMO Y ESTRUCTURA DE DATOS I

129
EJ EMPLO N 46
Programa que lee una cadena y la copia en otra de manera
invertida

#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
char cadena1[100],cadena2[100];
int longitud,cont,cont2=0;
clrscr();


printf("Cadena: ");gets(cadena1);//obtiene cadena 1
longitud=strlen(cadena1);

for(cont=longitud-1;cont>=0;cont--)
{ //recorre toda la cadena
cadena2[cont2]=cadena1[cont];
cont2++;
}

printf("%s",cadena2);//salida en pantalla de la cadena invertida
getch();
}


6.6 PARTE PRCTICA

PROBLEMAS PROPUESTOS:

1. Disear un programa que lea dos vectores (arreglos
unidimensionales) A y B de N elementos, cada uno de tipo entero.
Determine luego un vector C tal que sus elementos vengan dados
por: C(0)=A(0)+B(N-1)=A(1)+B(N-2), C(2)=A(2)+B(N-3)..,
C(N-1)=A(N-1)+B(0). Imprima luego los tres arreglos en tres
columnas paralelas, cada uno en una columna.

2. Disear un programa que ingrese los sueldos de 20 empleados de
una empresa en un arreglo y determine el menor sueldo, el sueldo
total y sueldo promedio.
ALGORITMO Y ESTRUCTURA DE DATOS I
130

3. Disee un programa que ingrese los sueldos de N empleados de
una empresa en un arreglo unidimensional con capacidad mxima
para 100 empleados. Imprima luego un listado de los sueldos
superiores al sueldo promedio.

4. Disee un programa que lea 50 notas de un examen en un arreglo
unidimensional y determine: a) la nota promedio, b) la mayor nota,
c) la menor nota, d) el numero de alumnos que comparten la menor
nota y e) el numero de alumnos que compartan la mayor nota.

5. Disee un programa que ingrese un arreglo de N nmeros enteros,
ordene el arreglo ascendentemente e imprima el arreglo ordenado.

6. Resuelva el problema 7; pero esta vez ordenado en forma
descendente.

7. Disee un programa que ingrese 15 letras del alfabeto, no
repetidas, a un arreglo unidimensional. Imprima luego el arreglo
ingresado


LABORATORIO N 6

1. Disear un programa que ingrese 20 nmeros enteros en un
arreglo y determine: a). La suma de todos los elementos del arreglo
y b). El nmero menor y su ndice dentro del arreglo.

Solucin:

#include <conio.h>
#include <iostream.h>

int main ( )
{
// Declaracin de constantes y variables
const int N = 20; // Nmero de personas
int a [N]; // Arreglo de N nmeros enteros
int suma; // Suma de los elementos del arreglo
int menor; // Menor valor de arreglo
int indice; // ndice del menor valor dentro del arreglo
int i; // Variable para los blucles for
ALGORITMO Y ESTRUCTURA DE DATOS I

131

// Ingreso de datos
// En simultneo ingresamos un elemento y lo vamos sumando

clrscr ( );
cout << INGRESO DE DATOS << end1;
suma = 0;
for (i = 0; i < N; i++)
{
cout << Ingrese elemento << i << :;
cin >> a [i];
suma += a [i];
}
// Hablamos el menor valor y su ndice dentro del arreglo
menor = a [0];
for (i = 1; i < N; i++)
{
if (a [i] < menor)
{
menor = a [i];
indice = i;
}
}

// Salida de resultados
cout << \nSuma...: << suma;
cout << \nNmero menor: << menor;
cout << \nndice del nmero menor: << indice;
getch ( );
}

2. Disear un programa que ingrese dos arreglos, cada uno de 10
nmero enteros. Crear luego un tercer arreglo en la que cada uno
de sus elementos sea la suma de los elementos correspondientes
de los dos arreglos anteriores. Imprimir luego los tres arreglos en
tres columnas paralelas.

Solucin:
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>

ALGORITMO Y ESTRUCTURA DE DATOS I
132
int main ( )
{
// Declaracin de constantes y variables
const int N = 20; // Nmero de elementos de los arreglos
int a [N], b [N], c [N]; // Los tres arreglos de N enteros
int i; // Variable para los bucles for

// Ingreso de datos
// A la vez que ingresamos vamos sumando
clrscr ( );
cout << Ingreso de datos << end1;
for (i = 0; i < N; i++)
{
cout << a [ << i << ] = ;
cin >> a [i];
cout << b [" << i << "] = ;
cin >> b [i];
c [i] = a [i] + b [i];
}

// Salida de resultados
cout << \nSalida de resultados\n;
cout << setw (4) << a << setw (4) << b << setw (4) << c <<
\n\n;

for (i = 0; i < N; i++)
cout << setw (4) << a [1] << setw (4) << b [i] << setw (4) << c
[i] << endl;
getch ( );
}

3. Disear un programa que ingrese los sueldos de N empleados de
una compaa e imprima un listado de todos los sueldos inferiores
al sueldo promedio. Considere que el sueldo mnimo es de S/.350.
Validar todas las entradas.

Solucin:

#include <conio.h>
#include <iostream.h>
#include <iomanip.h>

ALGORITMO Y ESTRUCTURA DE DATOS I

133
void main ( )
{
// Declaracin de variables y constantes
const int MAX = 50; // Mximo numero de empleados
float suma; // Suma de los sueldos de los N empleados
float promedio; // Sueldo promedio
float sueldo [MAX]; // Arreglo de MAX sueldos (N debe ser menor o
igual a MAX)
int N; // Nmero de empleados
int i; // Variable para los bucles for

// Ingreso validado del nmero de empleados
clrscr ( );
cout << Ingrese el nmero de empleados: ;
cin >> N;
while (N < 1 || N > 50)
{
cout << \aError. El nmero de empleados debe estar entre 1
y 50;
cout << \nIngrese el nmero de empleados : ;
cin>>N;
}
// Ingreso validado del sueldo de cada empleado
for ( i=0; i<N; i++)
{
cout<< Sueldo del empleado << i << ? :;
cin>> sueldo [i];
while (sueldo [i] < 350 )
{
cout << \aError. El sueldoMinimo es S/. 350;
cout << \n Sueldo del empleado << i << ? :
;
cin>>sueldo[i];
}
}


//hallamos el sueldo promedio
suma=0;
for (i=0; i<N; i++)
suma += sueldo [i];
promedio =suma / N;

ALGORITMO Y ESTRUCTURA DE DATOS I
134
// Salida de resultado
cout << \n Sueldo Promedio: << setprecision (2) <<
promedio;
cout << \n \n Lista de sueldos inferiores al sueldo promedio
\n ;
for (i=0; i<N; i++)
{
if (sueldo [i] < promedio )
cout << sueldo [i] << endl;
}
getch();
}

4. Disear un programa que lea los elementos de una matriz
cuadrada de 4 filas por 4 columnas compuestas de nmeros
enteros y determine:

La suma de todos sus elementos
La suma de los elementos de la diagonal principal.

Solucin:

#include <iomanip.h>
#include < iostream.h>
#include < conio.h>

int main ()
{
const int TAM=4; // numero de filas y o de columnas (son
iguales)
int f, c; // fila y columna
int a [TAM] [TAM]; // para la matriz
int sumat, sumad; // suma total y suma de la diagonal

// Ingreso de la matriz por filas
clrscr();
cout<<Ingreso de una matriz de 4 x 4: <<endl;
for ( f=0; f<TAM; f++) {
cout<<Fila : << f << : ;
for ( c=0; c<TAM; c++ )
cin >> a[f][c];
}

ALGORITMO Y ESTRUCTURA DE DATOS I

135
// Hallamos la suma total y la suma de la diagonal principal.
// Observe que en la diagonal principal el ndice f de la fila es
igual que
// el ndice c de la columna.

sumat = sumad = 0 ;
for ( f=0; f<TAM; f++) {
for ( c=0; c<TAM; c++) {
sumat + = a[f] [c];
if ( f == c) // Si es un elemento de la
diagonal
sumad + = a[f] [c];
}
}

// Imprimimos los resultados
cout << \n Suma Total de elementos : <<
sumat;
cout << \n Suma de los elementos diagonales: <<
sumad;
getch();
}


5. Disear un programa que lea el siguiente arreglo bidimensional:

4 7 1 3 5
2 0 6 9 7
3 1 2 6 4

Y lo imprima como:

4 2 3
7 0 1
1 6 2
3 9 6
5 7 4

Solucin:

#include <iomanip.h>
#include < iostream.h>
#include < conio.h>
ALGORITMO Y ESTRUCTURA DE DATOS I
136

int main ()
{
int A [3] [5], f, c;

// Ingreso del arreglo bidimensional por filas.
clrscr();
cout<<Ingreso de un arreglo bidimensional de 3 x 5: \n \n;
for ( f = 0; f < 3; f++)
{
cout<<Ingrese la Fila : << f << en una linea: ;
for ( c = 0; c < 5; c++ )
cin >> A[f][c];
}
// imprime segn el esquema solicitado
// esto lo logramos imprimiendo de salida \n\n ;
cout<<\n Impresin de salidas \n\n: << f << en una linea:
;

for ( c = 0; c < 5; c++ )
{
for ( f = 0; f < 3; f++)
cout << setw (4) << A[f] [c];
cout << endl;
}
getch();
return 0;
}


6. Determina si dos cadenas son iguales o diferentes

Solucin:

#include <stdio.h>
#include <conio.h>
#include <string.h>

ALGORITMO Y ESTRUCTURA DE DATOS I

137
int main()
{
char cadena1[100],cadena2[100];
int cont;
clrscr();

printf("Cadena 1: ");gets(cadena1);
printf("Cadena 2: ");gets(cadena2);

for(cont=0;cont<=strlen(cadena1);cont++)
{ //recorremos
cadena 1

if(cadena1[cont]!=cadena2[cont])
//comparamos
printf("Desiguales"); //desiguales en caso de ke no
sean iguales
break; //cortamos si no son
iguales

else
if(cont==strlen(cadena2))
//seguimos
comparando
printf("Iguales");

}
getch();
}










ALGORITMO Y ESTRUCTURA DE DATOS I
138

ALGORITMO Y ESTRUCTURA DE DATOS I

139
BIBLIOGRAFA

BSICA:

1. JOYANES AGUILAR, LUIS (1998). Fundamentos de
Programacin, Algoritmos y Estructura de Datos. Segunda Edicin
Mc Graw Hill.

2. LPEZ R., LEOBALDO. (1994). Programacin estructurada: Un
enfoque algortmico,. Computec.

3. LIPSCHUTZ, SEYMOUR (1987). Estructura de Datos. Me. Graw
Hill. Madrid

4. TENEBAUM / AUGESTEIN. Estructura de Datos en C. Prentice
Hall, Mxico.

5. GILLES BRASSARD. Fundamentos de Algoritmia; Paul Bratley.

6. KRUSE, ROBERT L. Estructura de Datos y Diseo de Programas.
Prentice Hall, Mxico.


COMPLEMENTARIA:

1. WIRTH N. (1986). Algoritmos y Estructura de Datos. Edit. Prentice
may Hispanoamericana S.A.

2. VSQUEZ PARAGULLA, J. (1997). Diseo de Programacin.
Tercera Edicin. Editorial San Marcos.

3. BUSTOS FRANKLIN. Mtodos de Programacin.

4. ALCALDE EDUARDO & GARCIA MIGUEL. Metodologa de la
Programacin.

También podría gustarte