Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmo y Estructura de Datos I Univer PDF
Algoritmo y Estructura de Datos I Univer PDF
Vicerrectorado de Investigación
ALGORITMOS Y ESTRUCTURA
DE DATOS I
TINS
Lima - Perú
1
ALGORITMO Y ESTRUCTURA DE DATOS I
2
ALGORITMO Y ESTRUCTURA DE DATOS I
3
ALGORITMO Y ESTRUCTURA DE DATOS I
4
ALGORITMO Y ESTRUCTURA DE DATOS I
PRESENTACIÓN
5
ALGORITMO Y ESTRUCTURA DE DATOS I
Vicerrectorado de Investigación
6
ALGORITMO Y ESTRUCTURA DE DATOS I
ÍNDICE
7
ALGORITMO Y ESTRUCTURA DE DATOS I
CAPÍTULO V: RECURSIVIDAD
5.1 RECURSIVIDAD............................................................................... 103
5.2 CARACTERÍSTICAS........................................................................ 103
5.3 VENTAJAS Y DESVENTAJAS ....................................................... 104
5.4 PELIGROS EN LA RECURSIVIDAD.............................................. 104
5.5 TIPOS DE ALGORITMOS RECURSIVOS...................................... 105
5.6 VERIFICACIÓN DE FUNCIONES RECURSIVAS ........................ 107
5.7 LA PILA DE RECURSIÓN ............................................................... 108
5.8 LLAMADA A UNA FUNCIÓN RECURSIVA ................................ 108
5.9 PARTE PRÁCTICA........................................................................... 109
PROBLEMAS PROPUESTOS .......................................................... 109
LABORATORIO Nº 5........................................................................ 110
8
ALGORITMO Y ESTRUCTURA DE DATOS I
DISTRIBUCIÓN TEMÁTICA
Clase
TEMA SEMANA
N°
1 Conceptos Fundamentales 1
2 Tipo de datos 2
4 Estructuras de control 4
9 Revisión – Nivelación 9
10 EXAMEN PARCIAL 10
11 Subprogramación 11
13 Recursividad 13
14 Datos Estructurados 14
9
ALGORITMO Y ESTRUCTURA DE DATOS I
Clase
TEMA SEMANA
N°
16 Registros 16
17 Cadena de caracteres 17
18 Índices 18
19 Nivelación – Recuperación 19
20 EXAMEN FINAL 20
21 EXAMEN SUSTITUTORIO 21
10
ALGORITMO Y ESTRUCTURA DE DATOS I
a) CONCEPTOS DE ALGORITMO
• Un algoritmo es un conjunto finito de instrucciones o
pasos con una secuencia lógica que sirven para ejecutar
una tarea o resolver un problema.
• De un modo más formal, un algoritmo es una secuencia
lógica finita de operaciones realizables, no ambiguas,
cuya ejecución da una solución de un problema en un
tiempo finito.
- COMPONENTES DE UN ALGORITMO
Entrada : Datos del problema a resolver.
Salida : El resultado de la resolución.
Procesos : Paso a seguir en la resolución.
- CARACTERÍSTICAS DE UN ALGORITMO
EJEMPLO Nº 1
Un cliente efectúa un pedido a una compañía, La compañía
verifica en su banco de datos la ficha del cliente, si el cliente
es solvente entonces la compañía acepta el pedido; en caso
11
ALGORITMO Y ESTRUCTURA DE DATOS I
CONCEPTO DE PROGRAMA
EJEMPLO Nº 2
b) CONCEPTO DE SOFTWARE
• Es la parte lógica de la computación.
• 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 PROGRAMACIÓN
Son aquellos lenguajes que se utilizan para realizar
algoritmos interpretables por la computadora.
Características imprescindibles Î Estructura de Control.
Programación Modular
(funciones).
12
ALGORITMO Y ESTRUCTURA DE DATOS I
• Lenguaje máquina.
• Lenguaje de bajo nivel (ensamblador).
• Lenguajes de alto nivel: C, C++, Visual Basic, Java,
Pascal, Prolog.
13
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 3
Imprimir la hipotenusa, teniendo los lados de un triangulo
rectángulo.
14
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 4
Determine a los números menores que 90 y múltiplos de 9, así
como su sumatoria.
Definicióndel
Definición del Especificacione Especificacione
problema
Problem a s de entrada s de salida
15
ALGORITMO Y ESTRUCTURA DE DATOS I
Documentación interna:
Comentarios: líneas informativas incluidas en el código.
Documentación externa:
Manuales, estructura y especificaciones del programa, historia de
las modificaciones, etc.
16
ALGORITMO Y ESTRUCTURA DE DATOS I
• Lenguaje natural.
• Organigramas.
• Diagramas Nassi – Shneiderman (N - S).
• Pseudocódigo.
• Otros
LENGUAJE NATURAL:
Es un lenguaje utilizado para describir los pasos de cómo
realizamos algo, de una forma sencilla.
EJEMPLO Nº 5
• El algoritmo para encontrar las raíces de una ecuación de
segundo grado podría describirse así:
ORGANIGRAMAS:
• Los organigramas o diagramas de flujo permiten describir los
algoritmos de forma grafica.
17
ALGORITMO Y ESTRUCTURA DE DATOS I
18
ALGORITMO Y ESTRUCTURA DE DATOS I
Read x
Entrada y salida de
Read x
Datos
Write x
Se escribe en líneas
separadas
Secuencia de
Calcular x = y+3
sentencias
Calcular z = 2*x
IF condición entonces
Acción 1
Selección ELSE
Acción 2
DO WHILE
Acción 1
…
Repetición
…
…
Fin End
19
ALGORITMO Y ESTRUCTURA DE DATOS I
Compilador Montador
(Compiler) (Linker)
DATOS VS INFORMACIÓN
DATOS VS INFORMACIÓN
- Medidas objetivas de atributos - Resultado de haber organizado
de entidades. o analizado los datos de alguna
- Cifras/hechos crudos (en manera lógica.
bruto) sin interpretar o analizar. - Reduce la incertidumbre.
- No son estímulos de acción. - Impulsa a la acción.
20
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 6
DATOS
P R O C E SA M IE N T O
35.000 So les DE DATOS
1250 unidades
José Perez Lim a
83.000 D ó lares. IN F O R M A C IÓ N
3800 unidades
.......
C lie nte : José Perez
Sucursal: Lim a
C o m pras de l m es:
1250 unidades=35.000
So les. ......
- CLASIFICACIÓN
REAL
NUMERICO ENTERO
CHARACTER
ESTANDAR
LOGICO (BOOLEAN)
DATOS SIMPLES
DEFINIDOS X ENUMERATIVO
EL PROGRAMADOR
SUBRANGO
TIPO
DE ARRAYS
DATO ESTATICOS REGISTRO
ARCHIVO (FICHERO)
CONJUNTO)
DATOS
ESTRUCTURADOS CADENA (STRING)
LISTA (PILA/COLA)
DINAMICOS LISTA ENLAZADA
ARBOL
GRAFO
21
ALGORITMO Y ESTRUCTURA DE DATOS I
DATOS ALFANUMÉRICOS
Longitud
Representación Tipo Rango
de byte
Char 1 -128 a 127
Carácter Unsigned 1
char
Int 2 -32768 a 32767
Short int 2 -32768 a 32767
Unsigned int 2 0 a 65535
Enteros
Long 4 -2147483648 a
Unsigned 4 2147483647
long 0 a 4294967295
Float 4 3.4E±38
Reales Double 8 1.7E±308
Long double 10 3.4E-4932 a 1.1E+4932
22
ALGORITMO Y ESTRUCTURA DE DATOS I
DATOS DE DATOS DE
SALIDA ENTRADA
ALGORITMO
ALGORITMOS
+
ESTRUCTURA DE DATOS
=
PROGRAMA
NIKLAUS WIRTH
- CONSTANTES
Constantes: Valores que durante la ejecución de un programa
no cambian su valor.
Ejemplo: pi = 3.1416
- VARIABLES
Definición 1: Valores que cambiarán durante la ejecución del
programa.
23
ALGORITMO Y ESTRUCTURA DE DATOS I
* POR SU USO
• DE TRABAJO
Variables que recibe el resultado de una operación
matemática completa y que se usan normalmente dentro
de un programa.
Ejemplo: Suma Å a + b /c
• CONTADORES
Se utilizan para llevar el control del número de ocasiones
en que se realiza una operación o se cumple una
condición. Con los incrementos generalmente de uno en
uno.
IDENTIFICADORES
Para poder reconocer una variable o una constante en la memoria
de la computadora, es necesario darle un nombre con el cual
24
ALGORITMO Y ESTRUCTURA DE DATOS I
Ejemplo:
área Å pi * radio ^ 2
Los identificadores son: el radio, el área y la constante es pi.
EXPRESIONES
Se definen como una combinación de constantes, variables,
símbolos de operación, paréntesis, y nombres de funciones
especiales.
o Aritméticas
o Lógicas
o Carácter
25
ALGORITMO Y ESTRUCTURA DE DATOS I
Reglas de prioridad
Operadores de relación
Operador Significado
< Menor
> Mayor
= Igual
<= Menor o igual
>= Mayor o igual
<>,!= Distinto
Operadores lógicos
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.
26
ALGORITMO Y ESTRUCTURA DE DATOS I
FUNCIONES
Las funciones pueden tener cualquier número de variables, incluso
cero. Para evaluar una función sin variables se debe escribir un par
de paréntesis después de su nombre (por ejemplo fun()). Las
funciones sin variables pueden servir como algoritmos de cálculo
que devuelven un valor real.
FUNCIONES MATEMÁTICAS
Función Descripción
Abs(x) Absoluto
Arctan(x) Tangente inversa
Cos(x) Coseno
Exp(x) Exponencial
Ln(x) Log neperiano
Log10(x) Log decimal
Round(x) Redondeo
Sin(x) Seno
Sqr(x) Cuadrado
Sqrt(x) Raíz cuadrada
Trunc(x) Truncamiento
PROBLEMAS PROPUESTOS
27
ALGORITMO Y ESTRUCTURA DE DATOS I
28
ALGORITMO Y ESTRUCTURA DE DATOS I
29
ALGORITMO Y ESTRUCTURA DE DATOS I
30
ALGORITMO Y ESTRUCTURA DE DATOS I
LABORATORIO Nº 1
PASOS A SEGUIR:
Paso 1: Ingresar a inicio – programas – Turbo C++ 4.5. o en otro
compilador de C que le indique el docente
31
ALGORITMO Y ESTRUCTURA DE DATOS I
32
ALGORITMO Y ESTRUCTURA DE DATOS I
#include <iostream.h>
#include <conio.h>
Int main( )
{
float base, altura, area, perímetro;
33
ALGORITMO Y ESTRUCTURA DE DATOS I
34
ALGORITMO Y ESTRUCTURA DE DATOS I
35
ALGORITMO Y ESTRUCTURA DE DATOS I
36
ALGORITMO Y ESTRUCTURA DE DATOS I
CONCEPTO DE PROGRAMA
Es un conjunto de instrucciones, ordenes dadas a la máquina que
producirán la ejecución de una determinada tarea, en esencia es un
medio para seguir un fin.
DESARROLLO DE UN PROGRAMA
1. Definición y Análisis del problema
2. Diseño de algoritmos:
z Diagrama de flujo.
z Diagrama de N-S.
z Pseudocódigo.
z Otros
37
ALGORITMO Y ESTRUCTURA DE DATOS I
TIPOS DE INSTRUCCIÓN
1. Instrucciones de inicio / fin
2. Instrucciones de asignación
3. Instrucciones de lectura
4. Instrucciones de escritura
5. Instrucciones de bifurcación
6. Fin
- Instrucciones de asignación
A Å 80 la variable A toma el valor de 80
¿Cuál será el valor que tomara la variable C tras la ejecución de las
siguientes instrucciones?
38
ALGORITMO Y ESTRUCTURA DE DATOS I
A Å 12 A contiene 12
BÅA B contiene 12
CÅB C contiene 12
Antes de la ejecución de las tres instrucciones A, B, C son
indeterminados.
Esta instrucción
a) Read numero, horas, tasa lee datos de
un
númeroÅ12325 horasÅ32 tasaÅ1200 dispositivos
de entrada
b) Read A, B, C
A Å 100 B Å 200 CÅ300
- AÅ100
- BÅ200
- CÅ300 Esta instrucción
se escribe en
Write A, B, C un
dispositivo
de salida
39
ALGORITMO Y ESTRUCTURA DE DATOS I
40
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 7
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 */
}
EJEMPLO Nº 8
/* Programa de suma */
#include <stdio.h>
int main() /* la función main inicia la ejecución del programa */
{
int entero1; /* primer número introducido por el usuario */
int entero2; /* segundo número introducido por el usuario */
41
ALGORITMO Y ESTRUCTURA DE DATOS I
io s t r e a m .h F lu jo d e e n t r a d a /s a lid a
lim its .h L im it e s e n te r o s d e f in id o s e im p la n t a d o s
m a t h .h F u n c io n e s m a te m á tic a s
s t d io .h E n t r a d a /S a lid a
s t d lib .h F u n c io n e s d e u tile r ía
- BUCLES SumaÅ
2
Es un segmento de un Suma + N
algoritmo o programa, cuyas
instrucciones se repiten un Escribir suma 3
número determinado de veces
mientras se cumple una
determinada condición (existe o es verdadera la condición)
42
ALGORITMO Y ESTRUCTURA DE DATOS I
o Decisión
o Cuerpo de bucle
o Salida de bucle.
TIPOS BUCLES
in ic io IN IC IO
B u c le A
B u c le B
B u c le C
F IN
fin
Bucles Cruzados
inicio
fin
43
ALGORITMO Y ESTRUCTURA DE DATOS I
Algoritmo
Cabecera del programa
Sección de declaración
Sección de acciones
• CONTADORES
44
ALGORITMO Y ESTRUCTURA DE DATOS I
Representación 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
EJEMPLO Nº 9
BEGIN
eConÅ0
END DO
END
• ACUMULADORES
Ejemplos:
total Å total + valor
45
ALGORITMO Y ESTRUCTURA DE DATOS I
Representación:
EJEMPLO Nº10:
BEGIN
eConÅ0,eAcuÅ0
DO WHILE eCon<=10
READ eNume
eAcuÅeAcu+eNume
eConÅeCon+1
ENDDO
WRITE eAcum
END
46
ALGORITMO Y ESTRUCTURA DE DATOS I
PROBLEMAS PROPUESTOS
47
ALGORITMO Y ESTRUCTURA DE DATOS I
12. Leer una serie de números distintos de cero (el último número de la
serie es -99) y obtener el número mayor. Como resultado se debe
48
ALGORITMO Y ESTRUCTURA DE DATOS I
LABORATORIO Nº 2
ESTRUCTURA DE UN PROGRAMA:
49
ALGORITMO Y ESTRUCTURA DE DATOS I
#include <nombre_archivo_cabecera>
Ejemplo:
// Importamos la cabeceras de los módulos que necesitamos
#include <iostream.h> // entrada / salida define las variables cin
y cout (consola)
#include <string> // de la biblioteca estándar (STL)
int main ()
{
declaración de variables y constantes
cuerpo del programa
}
50
ALGORITMO Y ESTRUCTURA DE DATOS I
51
ALGORITMO Y ESTRUCTURA DE DATOS I
VARIABLES
Es un espacio en la memoria de la computadora que permite
almacenar temporalmente un dato durante la ejecución de un
proceso, su contenido puede cambiar durante la ejecución del
programa.
1. Un nombre.
2. Un tipo de dato asociado.
3. Un valor inicial.
4. Una dirección de memoria.
CONSTANTES
Una constante es un dato numérico o alfanumérico que no cambia
durante la ejecución del programa.
52
ALGORITMO Y ESTRUCTURA DE DATOS I
LOS COMENTARIOS
Con fines de documentación se pueden añadir comentarios a un
programa. Los comentarios no generan código máquina sino que
son ignorados por el compilador.
Ejemplo:
53
ALGORITMO Y ESTRUCTURA DE DATOS I
#include <iostream.h>
Donde:
54
ALGORITMO Y ESTRUCTURA DE DATOS I
Salida de constantes:
Cout << constantes;
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 línea,
hacer sonar a alarma del sistema, etc.
55
ALGORITMO Y ESTRUCTURA DE DATOS I
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
Descripción
escape
\n Nueva línea. Coloca el cursor al principio de la
segunda línea.
\r Retorno de carro. Coloca el cursor al principio de
la línea actual.
\t Tabulador horizontal. Mueve el cursor al siguiente
tabulador.
\a Alerta. Hace sonar la campana del sistema.
\` Imprime una comilla simple (`).
\” Imprime una comilla doble (“).
\\ Imprime una barra invertida (\)
56
ALGORITMO Y ESTRUCTURA DE DATOS I
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 línea) 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 función gets.
Gets (cad);
La función 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 función gets debe incluirse el
archivo de cabecera stdio.h.
57
ALGORITMO Y ESTRUCTURA DE DATOS I
operador Acción
++ Suma 1 a su operando
-- Resta 1 a su operando
58
ALGORITMO Y ESTRUCTURA DE DATOS I
• DEFINICIÓN
La programación estructurada es una forma de programar de
forma clara, para ello utiliza únicamente tres estructuras:
secuencial, selectiva simple e iterativa; siendo innecesario y
no permitiéndose el uso de la instrucción o instrucciones de
transferencia incondicional (GOTO).
• DESVENTAJAS DE LA PROGRAMACIÓN
ESTRUCTURADA
- Es relativamente difícil de aprender ya que es para
expertos.
59
ALGORITMO Y ESTRUCTURA DE DATOS I
3.2.1 SECUENCIAL
La estructura secuencial se refiere a la ejecución de una
secuencia de instrucciones en el orden en que aparecen, de
forma que cada instrucción se ejecuta exactamente una vez.
EJEMPLO Nº 11
BEGIN
REAL base, altura, área, perímetro
READ base, altura
área Å base*altura
perímetro Å 2*(base+altura)
WRITE área, perímetro
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.
ESTRUCTURA SELECTIVA
Las estructuras de selección son estructuras de control utilizadas
para la toma de decisiones dentro de un programa. A estas
estructuras se les conoce también como estructuras selectivas o
estructuras de decisión.
60
ALGORITMO Y ESTRUCTURA DE DATOS I
ESTRUCTURA
SELECTIVA SIMPLE
ESTRUCTURA ESTRUCTURA
DE SELECTIVA DOBLE
SELECCION
ESTRUCTURA
SELECTIVA MULTIPLE
DIAGRAMA DE FLUJO:
condición
falsa
verdadera
accion S1
61
ALGORITMO Y ESTRUCTURA DE DATOS I
SINTAXIS:
SINTAXIS EN ESPAÑOL SINTAXIS EN INGLES
SI <condición> IF <condición>
FIN _ SI ENDIF
EJEMPLO Nº 12:
PSEUDOCÓDIGO:
• Construya un algoritmo en pseudocódigo tal que, dado los
valores enteros P y Q, que deben leerse del teclado,
determine si los mismos satisfacen la siguiente expresión:
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
62
ALGORITMO Y ESTRUCTURA DE DATOS I
EN C++:
Según una calificación imprimir si es aprobada
#include <stdio.h>
#include <conio.h>
int main ()
{
float Cal;
clrscr();
printf ("Introduzca la calificación: ");
scanf ("%f", &Cal);
if ( Cal >= 11 )
printf("Aprobó.");
return 0;
}
DIAGRAMA DE FLUJO
si no
¿Condición?
63
ALGORITMO Y ESTRUCTURA DE DATOS I
SINTAXIS:
PSEUDOCODIGO EN PSEUDOCODIGO EN
ESPAÑOL INGLES
SI <condicion> IF <condición>
<accion S11> <acción S11>
<accion S12> <acción S12>
… …
<accion S2n> <acción S2n>
SI_NO ELSE
<acción 21> <acción 21>
<acción 22> <acción 22>
… …
<acción S1n> <acción S1n>
FIN_SI ENDIF
EJEMPLO Nº 13
La siguiente estructura de selección 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
EN C++:
Imprimir si un número es par o impar
#include <stdio.h>
#include <conio.h>
int main()
64
ALGORITMO Y ESTRUCTURA DE DATOS I
{
int num;
clrscr();
printf("Introducir un número:\n");
scanf("%d",&num);
if ( num % 2 == 0 )
printf("%d es par.",num);
else
printf("%d es impar.",num);
return 0;
}
EJEMPLO Nº 14
Este algoritmo lee tres números A, B, C, imprimiendo el valor
del más grande. Se supone que los tres valores son
diferentes.
Read (A, B, C) // Entrada de valores
then if A > C
else if B > C
Write `El valor más grande es`, MAX // Se imprime el valor más grande
Exit // Termino
65
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 15
#include<iostream.h>
int main ( )
{
char codigo;
cout << "Introduzca un código especificado: ";
cin >> codigo;
if (codigo == 'S' )
cout << "El componente tiene calificación de exploración
espacial . ";
else if (codigo == ‘M’)
cout << "El componente tiene calificación de militar. ";
else if (codigo == ‘C’)
cout << "El componente tiene calificación de comercial. ";
else if (codigo == 'J' )
cout << "El componente tiene calificación de juguete. ";
else
cout << "Se insertó un código invalido. ";
cout << endl;
getch();
return 0;
}
66
ALGORITMO Y ESTRUCTURA DE DATOS I
1 n
Condición
2 3
4
La sintaxis es la siguiente:
Según sea (selector) hacer
caso1, caso2, ..: sentencia 1
.... : .....
caso1n, caso2n, ..: sentencia n
sino
sentencia opcional
fin_según
SINTAXIS:
PSEUDOCÓDIGO EN PSEUDOCÓDIGO EN
ESPAÑOL INGLES
En caso que E sea CASE EXPRESION OF
c1: acción S1 [c1]: acción S1
c2: acción S2 [c2]: acción S2
… …
cn: acción Sn> [cn]: acción Sn>
de otra forma: otherwise
acción Sx acción Sx
fin_caso ENDCASE
67
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 16
EN C++:
Imprimir a que día de la semana corresponde un número.
#include <stdio.h>
#include <conio.h>
int main()
{
int Dia;
clrscr();
printf("Escriba el número de día: \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
Miércoles.",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 Sábado.",Dia);
break;
case 7: printf("El %d corresponde a
Domingo",Dia);break;
default: printf ("El %d día no existe en la
semana.",Dia);
getch();
}
return 0;
}
68
ALGORITMO Y ESTRUCTURA DE DATOS I
INTRODUCCIÓN
Son aquellas que permiten ejecutar una acción un número
determinado de veces, es decir, repetir esa acción una o más veces
consecutivamente.
69
ALGORITMO Y ESTRUCTURA DE DATOS I
SINTAXIS:
PSEUDOCÓDIGO PSEUDOCÓDIGO
EN ESPAÑOL EN INGLES
Repetir Repeat
<acciones> <acciones>
……… ...
<acciones n> <acciones n>
Hasta <condicion> Until <condicion>
DIAGRAMA DE FLUJO
CARACTERÍSTICAS
70
ALGORITMO Y ESTRUCTURA DE DATOS I
ERRORES COMUNES
9 Realizar ciclos infinitos.
9 ¿Como se evitan? Modificando dentro del cuerpo la
variables que lo controlan.
9 Pensar que puede no ejecutarse ninguna vez.
9 Todas las operaciones durante la primera ejecución del
cuerpo son válidas.
9 La primera ejecución del cuerpo modifica las variables
de la condición.
EJEMPLO Nº 17
Desarrollar el algoritmo necesario para calcular el factorial de un
numero N que responda a la formula
N! = N (N–1) * (N–2), …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 iÅn – 1
WRITE factorial
END
71
ALGORITMO Y ESTRUCTURA DE DATOS I
SINTAXIS
<Acción> <Acción>
… …
ENDDO FIN HACER
DIAGRAMA DE FLUJO
72
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 18
Desarrollar el algoritmo necesario para calcular el factorial de un
numero N que responda a la formula
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++
EJEMPLO 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);
73
ALGORITMO Y ESTRUCTURA DE DATOS I
while (contador<=i)
{
total = total * contador;
contador++;
}
printf("El factorial de %d es: %d",i,total);
getch();
return 0;
}
PROBLEMAS PROPUESTOS
74
ALGORITMO Y ESTRUCTURA DE DATOS I
75
ALGORITMO Y ESTRUCTURA DE DATOS I
76
ALGORITMO Y ESTRUCTURA DE DATOS I
26. Escribir un programa que lea un valor entero que será la base para
un sistema numérico (binario, octal o decimal), después que lea un
entero positivo en esa base y que imprima su valor en base 10. Se
debe validar que el número pertenezca a esa base. La base será
menor que o igual a 10. El programa podría tener la siguiente
salida:
Entrada Salida
Base Número
============== =========
10 1234 1234
8 77 63
2 1111 15
77
ALGORITMO Y ESTRUCTURA DE DATOS I
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
Pseudocódigo:
BEGIN
DO
Ingresar el dato número
WHILE numero <= 0
WRITE el número validado
END
Código:
#include<iostream.h>
#include<conio.h>
int main ()
{
float numero;
clrscr ();
cout << "VALIDACIÒN DE LA ENTRADA DE UN NUMERO
POSITIVO" << endl;
do
{
cout<< "Ingrese el numero positivo:";
cin>>numero;
}while(numero <= 0 );
78
ALGORITMO Y ESTRUCTURA DE DATOS I
Código:
# include<iostream.h>
# include<conio.h>
int main ()
{
int N, numero, cont = 0, suma = 0;
clrscr ();
cout << “SUMA DE NÚMEROS ENTEROS” << endl;
cout << “¿Cuántos números desea sumar? ”;
cin >> N;
do
{
cout << “Ingrese número ” << cont << “ : “;
cin >> numero;
suma += numero;
cont++;
}
while ( cont < N ) ;
#include "iostream.h"
#include "conio.h"
int main()
{
//Declaramos dos variables tipo enteras y una de tipo float
79
ALGORITMO Y ESTRUCTURA DE DATOS I
// Ingreso de datos
//Salida de datos
cout << "El area es :" <<area<<endl;
cout << "El perimetro es :" << perimetro<<endl;
getch();
return 0;
}
PROGRAM EJER02;
VAR num:INTEGER;
BEGIN
ClrScr;
REPEAT
WRITELN ('Introduzca un número: ');
READLN (num);
UNTIL num > 100;
END
#include <iostream.h>
#include <conio.h>
80
ALGORITMO Y ESTRUCTURA DE DATOS I
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) ;
}
81
ALGORITMO Y ESTRUCTURA DE DATOS I
82
ALGORITMO Y ESTRUCTURA DE DATOS I
Programa
83
ALGORITMO Y ESTRUCTURA DE DATOS I
VENTAJAS
• Facilita el diseño descendente.
• Disminuye la complejidad del algoritmo.
• Disminuye el tamaño total del programa.
• División de la programación entre un equipo de
programadores - reducción del tiempo de desarrollo.
• Facilidad en la depuración : Comprobación individual de los
módulos
• Programas más fáciles de modificar.
• Estructuración en librerías específicas (biblioteca de
módulos).
EJEMPLO Nº 20
Se desea diseñar un algoritmo que realice las siguientes tareas:
• Impresión.
• Lectura de datos.
• Ejecutar cálculos.
• Imprimir líneas detalladas de información.
• Imprimir totales.
84
ALGORITMO Y ESTRUCTURA DE DATOS I
CONST
<declaración de constantes>
VAR
<declaración de variables>
BEGIN
...
< acciones>
END_PROCEDIMIENTO
85
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 21
FUNCIONES
o Una función toma uno o más valores, denominados
argumentos o parámetros formales y devuelve un resultado.
DECLARACIÓN DE LA FUNCIONES
<tipo de dato> función <nombre de la función>
(<parámetros formales>)
CONST
<declaración de constantes>
VAR
<declaración de variables>
BEGIN
...
devolver <resultado>
END
86
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 22
Función Factorial (n: entero): entero
var i, factorial:entero
BEGIN
IF (n<=1) ENTONCES
factorial Å1
ELSE
factorial Å1
FOR iÅ1 TO n DO
factorial Åfactorial *1
ENDIF
END
EJEMPLO Nº 23
- 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 función
el subprograma y regresar al programa llamador, se
pierde el valor que se encontraba guardado en la
variable local.
87
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 23
- 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.
EJEMPLO Nº 24
Algoritmo global var x entero
BEGIN
x Å0
cambiar
write (x)
END
88
ALGORITMO Y ESTRUCTURA DE DATOS I
Módulo cambiar
BEGIN
xÅ1
END
La variable x esta definida como global, por lo tanto la salida
será 1.
• PASO DE PARÁMETROS
o Existen diferentes métodos para la transmisión o el
paso de parámetros o subprogramas.
o Es preciso conocer el método adoptado por cada
lenguaje, un mismo programa puede producir
diferentes resultados bajo diferentes sistemas de paso
de parámetros.
o Los parámetros pueden ser clasificados como:
89
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 25
90
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 26
AÅ 5
BÅ 7
Llamar_a PROC1 ( A, 18, B
3 ** 33 + 4)
5 18 25
EJEMPLO Nº 27
ALGORITMO PARÁMETRO valor var x: entero
BEGIN
xÅ0
CAMBIAR (x)
WRITE (x)
END
Módulo cambiar (y: entero)
BEGIN
yÅ1
END
SALIDA 0
91
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 28
ALGORITMO PARÁMETRO
var x: entero
BEGIN
x Å0
CAMBIAR (x)
WRITE (x)
END
Módulo cambiar (var y: entero)
BEGIN
y Å1
END
SALIDA: x Å1
92
ALGORITMO Y ESTRUCTURA DE DATOS I
4) POR RESULTADO
• Nos interesa el valor del parámetro real solamente a la
salida o fin de la ejecución del subprograma en que
aparece.
• Esto significa que al hacer la llamada no se copia el valor
del parámetro real en el parámetro formal asociado, sin
embargo a la salida se copia el valor del parámetro
formal en la dirección del parámetro real asociado,
significa por tanto, que el parámetro real tiene que tener
asociada una expresión que tiene que ser una variable
(no puede ser una constante).
EJEMPLO 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
93
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 30
Diseñar un programa que permita calcular el valor absoluto de un
número:
// Propósito: 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;
}
PROBLEMAS PROPUESTOS
94
ALGORITMO Y ESTRUCTURA DE DATOS I
Use: A = [p(p-a)(p-b)(p-c)]½
Donde p representa el semiperímetro del triángulo que se calcula
con la fórmula: p = (a+b+c)/2.
LABORATORIO Nº 4
95
ALGORITMO Y ESTRUCTURA DE DATOS I
Solución:
#include <iostream.h>
#include <conio.h>
96
ALGORITMO Y ESTRUCTURA DE DATOS I
Solución:
#include <iostream.h>
#include <conio.h>
// Función principal
int main ( )
{
int A, B, C;
clrscr ( );
cout << “Determinación del menor de tres números” <<
end1;
cout << “Ingrese tres números enteros …….: ”;
cin >> A >> B >> C;
cout << “El menor de los tres números es ….: ” << mínimo (A,
B, C);
getch ( );
}
/ Definición de la función mínimo
int mínimo (int a, int b, int c)
{
// Observe que la variable menor es una variable local y será
// Destruida al salir de la función (luego del retorno).
Int menor = a;
If (b < menor)
Menor = b;
If (c < menor)
Menor = c;
Return menor;
}
97
ALGORITMO Y ESTRUCTURA DE DATOS I
// Función principal
int main ( )
{
int m, n;
clrscr ( );
for (int i = 0; i < 3; i ++)
{
cout << “Ingrese dos números enteros : ”;
cin >> m >> n;
{
int r = 0; // Asumimos que a no es múltiplo de b
if (a / b = = 0) // Pero si a es múltiplo de b…
r = 1;
return r; // Retornamos el indicador
}
98
ALGORITMO Y ESTRUCTURA DE DATOS I
Solución:
#include <iostream.h>
#include <conio.h>
// Prototipo de la función coutxy
void coutxy (int x, int y, char texto [ ] ) ;
// Función 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 ( );
}
99
ALGORITMO Y ESTRUCTURA DE DATOS I
Solución:
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>
clrscr ( );
cout <<”Ingrese una cadena:”;
gets (cadena);
strlwr (cadena);
cout << “\nNúmero de repeticiones de las vocales” << endl;
for (int i = 0; i < 5; i ++)
cout << vocal [i] << “ : “<< cuentach (cadena, vocal [i]) <<
“veces” <<endl;
getch ( );
}
{
int cont = 0, len = strlen (cad);
for (int i = 0 ; i < len; i++)
if (cad [i] == ch)
cont ++;
return cont;
}
100
ALGORITMO Y ESTRUCTURA DE DATOS I
Solución:
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>
// Prototipo de función
void mirandom (int& num, int min, int max);
// Función principal
int main ( )
{
int numero;
clrscr ( );
101
ALGORITMO Y ESTRUCTURA DE DATOS I
102
ALGORITMO Y ESTRUCTURA DE DATOS I
CAPÍTULO V: RECURSIVIDAD
5.1 RECURSIVIDAD
- Un algoritmo se dice que es recursivo cuando contiene en su
definición una o más llamadas a si mismo.
- Todo algoritmo recursivo tendrá al menos una instrucción
alternativa.
- La recursividad o recursión es una herramienta muy útil en la
resolución de problemas, ya que permite resolver problema
complicados partiéndolos en problemas más sencillos.
EJEMPLO Nº 31
Función factorial
5.2 CARACTERÍSTICAS
o Un algoritmo recursivo consta de una parte recursiva, otra
iterativa o no recursiva y una condición de terminación.
o La parte recursiva y la condición de terminación siempre
existen.
103
ALGORITMO Y ESTRUCTURA DE DATOS I
o EL PASO BASE:
Esta es la clave para terminar la recursión, es cuando deja de
hacer llamadas a la función recursiva y hace evaluaciones
devolviendo los resultados. Además se debe asegurar de que
es posible entrar a este paso.
o EL PASO RECURSIVO:
Es la parte de la definición que hace llamadas a esa misma
función y que es la causante de las inserciones en la pila,
almacenando en cada una de las llamadas, información del
programa, del estado de sus variables locales y globales.
104
ALGORITMO Y ESTRUCTURA DE DATOS I
-Final
-Lineal - Lineal
REC. INDIRECTA
EJEMPLO Nº 32
Resto (n,m: N) dev r: N
IF n < m entonces
rÅn
ELSE
r Å Resto (n – m, m)
ENDIF
105
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 33
Fib(n: N) dev f: N
IF n <= 1 entonces
fÅn
ELSE
f Å Fib(n – 1) + Fib(n – 2)
ENDIF
EJEMPLO 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
106
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 35
Funciones Par/Impar
- Impar (n: Nat) dev: p:bool
IF n=0
pÅ cierto
ELSE
IF nÅ1
pÅ falso
ELSE
pÅ impar(n-1)
ENDIF
ENDIF
107
ALGORITMO Y ESTRUCTURA DE DATOS I
108
ALGORITMO Y ESTRUCTURA DE DATOS I
PROBLEMAS PROPUESTOS
109
ALGORITMO Y ESTRUCTURA DE DATOS I
LABORATORIO Nº 5
int main()
{
int i; /* contador */
/* repite 11 veces; durante cada iteración, calcula el factorial( i ) y
despliega el resultado */
return 0;
110
ALGORITMO Y ESTRUCTURA DE DATOS I
• SERIE DE FIBONACCI
#include <stdio.h>
long fibonacci( long n ); /* prototipo de la función */
int main()
{
long resultado; /* valor fibonacci */
long numero; /* numero a introducir por el usuario */
/* despliega el resultado */
printf( "Fibonacci( %ld ) = %ld\n", numero, resultado );
return 0;
}
if ( n == 0 || n == 1 ) {
return n;
}
else { /* paso recursivo */
return fibonacci( n - 1 ) + fibonacci( n - 2 );
}
}
111
ALGORITMO Y ESTRUCTURA DE DATOS I
112
ALGORITMO Y ESTRUCTURA DE DATOS I
CONCEPTO
• Estructura de datos es una forma de organizar un conjunto de datos
elementales (un dato elemental es la mínima información que se
tiene en el sistema) con el objetivo de facilitar la manipulación de
estos datos como un todo o individualmente.
6.1 TIPOS
Los tipos de datos estructurados más comunes son: vectores y
matrices (array), registros, cadenas de caracteres (string).
ARRAY (ARREGLO)
Es una estructura de datos en la cual se almacena una colección de
datos del mismo tipo a este se le llama tipo base del arreglo,
mientras que los datos individuales se llaman elementos del
arreglo.
113
ALGORITMO Y ESTRUCTURA DE DATOS I
La declaración:
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.
In d ic e E le m e n to
1 ed ad [0 ]
2 ed ad [1 ]
3 ed ad [2 ]
4 ed ad [3 ]
. ed ad [4 ]
.
.
.
. .
.
.
ed ad [4 7 ]
47
ed ad [4 8 ]
48
ed ad [4 9 ]
49
114
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 36
Hacer un programa que registre 20 números en un arreglo
unidimensional y muestre posteriormente los elementos que
contienen los números múltiplos de 5 e imprima los elementos en
forma inversa al ingreso de los datos.
#include <iostream.h>
#include <conio.h>
115
ALGORITMO Y ESTRUCTURA DE DATOS I
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();
}
EJEMPLO Nº37
Ingrese 10 notas en un arreglo de enteros y luego muéstrelo 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 ();
}
116
ALGORITMO Y ESTRUCTURA DE DATOS I
Formato:
EJEMPLO Nº 38
Diseñar 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 << "Número [" << b+1 << "], [" << a+1 << "] : "; cin >>
num[a][b];
}
117
ALGORITMO Y ESTRUCTURA DE DATOS I
}
cout << "\n\n";
ARREGLO MULTIDIMENSIONAL
Formato:
1. identificador = array [índice1] of array [índice 2]..
of array [índice n] of tipo de elemento
EJEMPLO Nº 39
#include <stdio.h>
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 } };
118
ALGORITMO Y ESTRUCTURA DE DATOS I
imprimeArreglo( arreglo3 );
119
ALGORITMO Y ESTRUCTURA DE DATOS I
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 más simples y populares: Ordenamiento Burbuja o Bubble Sort.
EJEMPLO 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
EJEMPLO Nº 41
Supóngase 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
120
ALGORITMO Y ESTRUCTURA DE DATOS I
PRIMERA PASADA
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;
}
}
}
121
ALGORITMO Y ESTRUCTURA DE DATOS I
6.4 REGISTROS
6.4.1 CONCEPTO
Un registro es una colección de campos lógicamente
relacionados, que pueden ser tratados como una unidad por
algún programa.
ARCHIVOS (FICHEROS)
Un archivo o fichero es un conjunto de datos estructurados
en una colección de entidades elementales o básicas
denominadas registros o artículos, que son de igual tipo y
constan a su vez de diferentes entidades de nivel más bajo
denominadas campos, los cuales están organizados para un
propósito especifico.
122
ALGORITMO Y ESTRUCTURA DE DATOS I
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;
123
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO 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;
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] */
}
124
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO 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 */
}
125
ALGORITMO Y ESTRUCTURA DE DATOS I
Donde:
20 = Longitud máxima
17 = Longitud actual
• Asignación
Si la variable NOMBRE ha sido declarada como carácter
var NOMBRE : carácter
La instrucción de asignación debe contener en el lado derecho de la
asignación una constante tipo carácter (una cadena) o bien otra
variable tipo carácter. Así:
NOMBRE: ‘Juan González’
Significa que la variable NOMBRE toma por valor la cadena ‘Juan
González’
• Entrada/Salida
La entrada/salida desde una computadora se puede realizar en
modo carácter, para ello se asignará una cadena de caracteres a
una variable tipo cadena. Ejemplo:
var A,B,C,D: carácter
Las instrucciones:
READ A,B
WRITE C,D
126
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 44
#include <stdio.h>
#include <conio.h>
#include <string.h>
void main()
//definición de variables
char cadena[100];
int cont,contp=1;
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();
}
127
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO Nº 45
Programa que cambia todas las minúsculas por mayúsculas
#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 carácter en la posición cont
if((car>=65)&&(car<=90))
{ //entonces es mayúscula
cadena[cont]=tolower(cadena[cont]); //convertimos a
minúsculas
}
}
128
ALGORITMO Y ESTRUCTURA DE DATOS I
EJEMPLO 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();
for(cont=longitud-1;cont>=0;cont--)
{ //recorre toda la cadena
cadena2[cont2]=cadena1[cont];
cont2++;
}
PROBLEMAS PROPUESTOS:
129
ALGORITMO Y ESTRUCTURA DE DATOS I
LABORATORIO Nº 6
Solución:
#include <conio.h>
#include <iostream.h>
int main ( )
{
// Declaración de constantes y variables
const int N = 20; // Número de personas
int a [N]; // Arreglo de N números 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
130
ALGORITMO Y ESTRUCTURA DE DATOS I
// Ingreso de datos
// En simultáneo 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 << “\nNúmero menor……………: ” << menor;
cout << “\nÍndice del número menor…: ” << indice;
getch ( );
}
131
ALGORITMO Y ESTRUCTURA DE DATOS I
int main ( )
{
// Declaración de constantes y variables
const int N = 20; // Número 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”;
Solución:
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
132
ALGORITMO Y ESTRUCTURA DE DATOS I
void main ( )
{
// Declaración de variables y constantes
const int MAX = 50; // Máximo 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; // Número de empleados
int i; // Variable para los bucles for
133
ALGORITMO Y ESTRUCTURA DE DATOS I
// 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();
}
Solución:
#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
134
ALGORITMO Y ESTRUCTURA DE DATOS I
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];
}
}
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
Solución:
#include <iomanip.h>
#include < iostream.h>
#include < conio.h>
135
ALGORITMO Y ESTRUCTURA DE DATOS I
int main ()
{
int A [3] [5], f, c;
Solución:
#include <stdio.h>
#include <conio.h>
#include <string.h>
136
ALGORITMO Y ESTRUCTURA DE DATOS I
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();
}
137
ALGORITMO Y ESTRUCTURA DE DATOS I
138
ALGORITMO Y ESTRUCTURA DE DATOS I
BIBLIOGRAFÍA
BÁSICA:
COMPLEMENTARIA:
139