- Introducción
- Objetivos
- Arreglos
- Arreglos de tipo
carácter - Arreglos bidimensionales
(matrices) - Modularidad
- Metodología
descendente: (top – down) - Variables
- Procedimientos
- Funciones
- Uso de los
parámetros: formales – normales o
argumentos - Arquitectura
modular - Recursividad
- Registros
- Conclusiones
y recomendaciones - Bibliografía
- Anexos
El presente trabajo es simplemente un camino para
empezar y ver cristalizado nuestro sueño de ser un
profesional altamente competitivo en el mercado, y esto
como es bien sabido por todos nosotros los que formamos este
núcleo estudiantil se lo debemos en gran parte a la
enseñanza, ideas impartidas por el profesor
de la asignatura en mención.
El curso de Estructura de
Datos es una asignatura más que teórica
diríamos es un 85% práctico, por que mediante este
método
aprendemos la lógica
y el método a seguir para llegar a la solución del
problema planteado.
El presente simplemente es una base para los
compañeros que nos preceden, ya que en la ciudad no se
cuenta con la biografía necesaria,
y esperamos que sirva de guía práctica.
Como ya sabemos, las computadoras
fueron diseñadas o ideadas como una herramienta mediante
la cual podemos realizar operaciones de
cálculo
complicadas en un lapso de mínimo tiempo. Pero la
mayoría de las aplicaciones de este fantástico
invento del hombre, son
las de almacenamiento y
acceso de grandes cantidades de información.
La información que se procesa en la computadora
es un conjunto de datos, que pueden
ser simples o estructurados. Los datos simples son aquellos que
ocupan sólo una localidad de memoria, mientras
que los estructurados son un conjunto de casillas de memoria a
las cuales hacemos referencia mediante un identificador
único.
Debido a que por lo general tenemos que tratar con
conjuntos de
datos y no con datos simples (enteros, reales, booleanos, etc.)
que por sí solos no nos dicen nada, ni nos sirven de
mucho, es necesario tratar con estructuras de
datos adecuadas a cada necesidad.
Las estructuras de datos son una colección de
datos cuya organización se caracteriza por las
funciones de
acceso que se usan para almacenar y acceder a elementos
individuales de datos.
Una estructura de
datos se caracteriza por lo siguiente:
- Pueden descomponerse en los elementos que la
forman. - La manera en que se colocan los elementos dentro de
la estructura afectará la forma en que se realicen los
accesos a cada elemento. - La colocación de los elementos y la manera en
que se accede a ellos puede ser encapsulada.
Ejemplo: Supongamos que nos enfrentamos a un
problema como este: Una empresa que
cuenta con 150 empleados, desea establecer una estadística sobre los salarios de sus
empleados, y quiere saber cual es el salario promedio,
y también cuantos de sus empleados gana entre $1250.00 y
$2500.00.
Si tomamos la decisión de tratar este tipo de
problemas con
datos simples, pronto nos percataríamos del enorme
desperdicio de tiempo, almacenamiento y velocidad. Es
por eso que para situaciones de este tipo la mejor
solución son los datos estructurados.
V.
OBJETIVOS:
El objetivo por
el cual fue el presente trabajo de Estructura de Datos, es el
establecer un material de apoyo y consulta para ti que eres
alumno de Ingeniería Informática y de Sistemas o de
cualquier otra área afín en la cual se imparta la
materia de
Estructura de Datos. Una vez que hayas terminado de revisar
detenidamente este material, serás capaz de establecer
estructuras lógicas de datos que te permitan hacer un uso
más eficiente del espacio de memoria, de minimizar los
tiempos de acceso, así como de lograr formas más
efectivas de inserción y eliminación de datos en
estructuras de almacenamiento. Ahora que ya sabes en lo que te
puede ayudar este tutorial, puedes empezar a hacer uso de
él, consultando todas tu tareas y dudas que tengas acerca
de la materia.
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 posición relativa.
CONTENIDOS
CONCEPTO :
Es un conjunto de datos o una estructura de datos
homogéneos que se encuentran ubicados en forma consecutiva
en la memoria RAM (
sirve para almacenar datos en forma temporal).
Un arreglo puede definirse como un grupo o una
colección finita, homogénea y ordenada de
elementos. Los arreglos pueden ser de los siguientes
tipos:
- De una dimensión.
- De dos dimensiones.
- De tres o más dimensiones
1. ARREGLOS UNIDIMENSIONALES
Un arreglo unidimensional es un tipo de datos
estructurado que está formado de una colección
finita y ordenada de datos del mismo tipo. Es la estructura
natural para modelar listas de elementos iguales.
Para implementar arreglos unidimensionales se debe
reservar espacio en memoria, y se debe proporcionar la dirección base del arreglo, la cota
superior y la inferior.
Ejemplos
1. Diseñar un algoritmo que
ingrese 30 notas aprobados y que me muestre la nota mayor y el
promedio de todas (Nota>=10.5 y Nota<=20)
Solución :
Inicio
nota[30], s, may, p : real
i : entero
s←0
para (i=1; i<=30; i++)
repetir
Ingresar nota [i]
hasta (nota[i]>=10.5) y
(nota[i]<=20)
s ← s + nota[i]
si (i=1) entonces
may ← nota[i]
sino
si (nota[i]>may) entonces
may ← nota[i]
fin _ si
fin _ si
fin _ para
p ← s/30
mostrar "PROMEDIO TOTAL ES",p
mostrar "LA NOTA MAYOR ES",may
Fin
2. Ingresar 30 valores
cualesquiera y determinar cuantos de estos valores son iguales
al promedio de los 30 valores ingresados
anteriormente.
Solución :
Inicio
num[30], i, s ß 0, c ß 0 : entero
p : real
para(i=1;i<=30;i++)
Ingresar num[i]
S ß s + num[i]
fin_para
p ß s/30
para(i=1;i<=30;i++)
si (p=num[i]) entonces
cß
c+1
fin_si
fin_para
mostrar "Números Iguales al
promedio",c
Fin
- Controlar el siguiente menú :
- Ingresar .- En esta opción usted
deberá ingresar 20 números positivos que no sean
mayores que 100. - Mostrar .- En esta opción usted
deberá calcular y mostrar el promedio solo de los
números cuyo primer digito de su izquierda sea el 2 y el
3.
Solucion :
Inicio
num[20], i, opc, indß 0, c, s : entero
p : real
repetir
mostrar "1 : INGRESAR"
mostrar "2 : MOSTRAR"
mostrar "3 : SALIR"
repetir
ingresar opc
hasta (opc>=1) y (opc<=3)
según_sea opc hacer
1 : Inicio
para (i=1; i<=20; I++)
repetir
ingresar num [i]
hasta (num[1]>0) y (num[i]<=100)
fin_para
Fin
2 : Inicio
si (ind=1) entonces
cß
0
sß
0
para(i=1; i<=20; i++)
si (num[i]>=20 y num[i]<40) entonces
sß
s+num[i]
cß
c+1
fin_si
fin_para
si (c=0) entonces
mostrar "NO EXISTE NUMERO CON DIGITOS 2 Y
3"
sino
pß
s/c
mostrar "promedio",p
fin_si
sino
mostrar "INGRESE DATOS"
fin_si
fin
fin_según sea
Hasta (opc=3)
fin
4. Diseñar un algoritmo que ingrese 15
números cualesquiera.
Solución :
Inicio
num[15]: entero
i: entero
para (i=1; i<=15; i++)
Ingresar num[i]
Fin _ para
Fin
5. Utilizando arreglos, ingresar 15 números y
calcular cual es el número menor.
Solución :
Inicio
i, men, Num[15]: entero
para (i=1; i<=15; i++)
Ingresar Num[i]
si (i=1) entonces
men ← num[i]
sino
si (Num[i]< men) entonces
menor ← Num[i]
Fin _ si
Fin _ si
Fin _ para
Fin
Con Alternativas Múltiples
6. Diseñar un algoritmo que controle las
siguientes opciones del menú:
1. Ingresar : En esta opción Ud.
deberá ingresar 30 números positivos
cualesquiera.
2. Mostrar : En esta opción Ud.
deberá mostrar el promedio y tambien cuantos
números superan dicho promedio.
3. Salir.
Solución :
Inicio
opc: caracter
num[30]: entero
i, s ← 0, c ← 0, sw: entero
p : real
sw ← 0
repetir
Mostrar "1.- Ingresar"
Mostrar "2.- Mostrar"
Mostrar "3.- Salir"
repetir
pedir opc
hasta (opc>=1 y opc <=3)
1: Inicio
sw ← 1
para (i=1; i<=30; i++)
repetir
pedir num[i]
hasta (num[i]>0)
Fin _ para
Fin
2: Inicio
si (sw = 1) entonces
s ← 0
para (i=1; i<=30; i++)
s ← s+ num[i]
fin _ para
p ← s/30
c ← 0
para (i=1; i<=30; i++)
si (num[i]>0) entonces
c ← c + 1
fin _ si
fin _ para
si (c = 0) entonces
mostrar "NÚMEROS IGUALES"
sino
mostrar p,c
fin _ si
sino
Mostrar "Aún no ingresar datos"
Fin _ si
hasta opc = 3
Fin
7. Almacenar en un arreglo los 5 primeros números
primos positivos.
Solución:
Inicio
primo[5]: entero
i, n, d, c: entero
c ← 0
n ← 0
repetir
n ← n+1; d ← 0
para (i=1; i<=n; i++)
si (n mod i=0) entonces
d ← d+1
fin _ si
fin _ para
si (d=2) entonces
c ← c+1
primo[c] ← N
Fin_si
hasta (c=5)
Fin
8. Ingresar 2 números y mostrar cual es el mayor
de ellos.
Solución:
Inicio
a, b : entero
pedir a
si (a>b) entonces
mostrar "a mayor", a
sino
si (b>a) entonces
mostrar "b mayor"
sino
si (a=b) entonces
son iguales
Fin _ si
Fin _ si
Fin _ si
Fin
9. Ingresar un número positivo y mostrar cual
es su mitad.
Solucion :
Inicio
Ingresar N
repetir
pedir N hasta que N>0
N=N/2
Mostrar "La mitad es" N/2
Fin _ repetir
Fin
10 Ingresar un número par y mostrar sus
divisores; el número par debe ser positivo.
Solución :
Inicio
n, i, c ← 0: entero
repetir
Ingresar n
hasta (n>0) y (n mod 2=0)
para (i=1; i<=n; i++)
si (n mod i=0) entonces
c ← c+1
Mostrar i
Fin _ si
Fin _ para
Mostrar "Cantidad de divisores"
Fin
11. Ingresar 5 números negativos y calcular su
media aritmética.
Solución :
Inicio
repetir
Ingresar n
hasta (n<0 y n mod 2=0)
para (i=0; i<=5; i++)
si (n mod i=0) entonces
c ← c+1
mostrar i
fin _ si
fin _ para
escribir "MEDIA ARITMÉTICA ES ", C
Fin
12. Ingresar 5 números en un
arreglo.
Solución :
Inicio
num[5]:entero
i: entero
para (i=1; i<=5; i++)
ingresar num[5]
Fin _ para
Fin
13. Ingresar 5 números positivos. No utilizar
la estructura repetir desde.
Solución :
Inicio
i, num[5]: entero
i ← 1
mientras (i<=5)
repetir
Ingresar num[i]
hasta (num[i]>0)
i ← i+1
Fin _ mientras
Fin
14. Ingresar un número mayor que 50 y
calcular la suma y el promedio de sus 5 primeros divisores.
Almacenar los divisores en un arreglo.
Solución :
Inicio
x ← 0, s ← 0, c ← 0
repetir
Ingresar n
hasta (n>50)
repetir
x ← x+1
si (n mod x=0) entonces
c ← c+1
divisor[c] ← x
fin _ si
hasta (c=s)
para (i=1; i<=5; i++)
s ← s + divisor[i]
fin _ para
mostrar "EL PROMEDIO ES", p
mostrar "LA SUMA ES", s
Fin
15. Almacenar en un arreglo todos los números
primos que se encuentren entre 1 y 40.
Solución :
Inicio
para (i=2; i<=39; i++)
d ← 0
para (j=1; j<=i; j++)
si (i mod j=0) entonces
d ← d+1
fin _ si
fin _ para
si (d=2) entonces
c ← c+1
primo[c]+ i
fin _ si
fin _ para
fin
16. Controlar el siguiente menú:
1. Pares: ingresar 35 números pares
negativos y mostrar el valor
absoluto del promedio.
2. Impares: Ingresar 10 números
impares positivos que sean dígitos para luego
determinar el promedio de los mismos.
3 Salir: En esta opción Ud.
deberá confirmar si desea abandonar la
ejecución del algoritmo.
Solución :
Inicio
num[35], opc, i : entero
s, p : entero
res : caracter
repetir
Mostrar "1.Pares"
Mostrar "2.Impares"
Mostrar "3. Salir"
repetir
Ingresar opc
hasta(opc>=1) y (opc<=3)
según _ sea opc hacer
1. Inicio
para(i=1; i<=35; i++)
repetir
Ingresar num[i]
hasta(num[i] mod 2=0) y (num[i]<0)
s ← s+num[i]
fin _ para
p ← (s/35)*-1
Mostrar "Valor absoluto", p
Fin
2º Inicio
para(i=1; i<=10; i++)
repetir
Ingresar num[i]
hasta(num[i] mod 2=1) y (num[i]>0) y
(num[i]<10)
s ← s+num[i]
fin _ para
p ← s/10
Mostrar "promedio", p
Fin
3º Inicio
repetir
Ingresar "Desea salir (S/N)" Res
hasta(res=’S’) o
(res=’N’)
si (res=’N’) entonces
opc ← 0
Fin _ si
Fin
Fin _ según _ sea
hasta opc=3
Fin
17. Controlar las siguientes opciones del
menú:
a.- Pares – Impares : En esta
opción Ud. Deberá ingresar 30 números
pares e impares en forma consecutiva, donde necesariamente el
primer número deberá ser un numero par luego un
impar y así intercaladamente.
b.- Impares – Pares : Ingresar
30 números impares – pares en forma intercalada
empezando con un impar.
c.- Mostrar : En esta opción Ud.
deberá mostrar la suma de los números pares
ingresados en la opción A o B, también
deberá el algoritmo indicar cual de las dos opciones
está mostrando Ud. Ya sea A o B.
d.- Salir.
NOTA: Ud. deberá trabajar solamente con un
arreglo de 30 números.
Solución :
Inicio
num[30]: entero
i, ind, s: entero
opc: caracter
repetir
Mostrar "A : Pares – Impares"
Mostrar "B : Impares – Pares"
Mostrar "C : Mostrar"
Mostrar "D : Salir"
repetir
Ingresar opc
hasta (opc="A") o (opc="B") o (opc="C") o
(opc="D")
según _ sea opc hacer
A : Inicio
ind ← 1
para (i=1; i<=30; i++)
si (i mod 2=0) entonces
repetir
Ingresar num[i]
hasta (num[i] mod 2<>0)
sino
repetir
Ingresar num[i]
hasta (num[i] mod 2=0) y
(num[i]<>0)
Fin _ si
Fin _ para
Fin
- Inicio
B : Inicio
Ind ← 2
para (i=1; i<=30; i++)
si (i mod 2=0) entonces
repetir
ingresar Num[i]
hasta (Num[i] mod 2=0) y
(Num[i]<>0)
sino
repetir
Ingresar Num[i]
hasta (Num[i] mod 2<>0)
Fin _ si
Fin _ para
Fin
C : Inicio
si (ind =0) entonces
Mostrar "Aún no ingresar
datos"
sino
si (ind =1) entonces
Mostrar "Resultado opción
1"
sino
Mostrar "Resultado opción
2"
Fin _ si
S ← 0
para (i=1; i<=30; i++)
si (Num[i] mod 2=0) entonces
S ← S+Num[i]
Fin _ si
Fin _ para
Mostrar "S"
Fin _ si
fin
fin _ según _ sea
hasta (opc=’D’)
fin
18. Ingresar un número que tenga 10
dígitos, donde cada dígito debe de ser
almacenado en una posición del arreglo.
Solución :
Inicio
N[10] : entero
i : entero
para (i = 1; i <= 10; i ++)
si (i=1) entonces
repetir
ingresar N[i]
hasta (N[i]>0) y (N[i]<10)
sino
repetir
ingresar N[i]
hasta (N[i]>=0) y (N[i]<10)
fin_si
fin_para
Fin
19. Almacenar en un arreglo los 5 primeros
números primos positivos, para luego mostrar cual es
el tercer número primo calculado.
Solución :
Inicio
p[5] : entero
c ß 0, cpß 0, d, i : entero
repetir
c = c + 1
d = 0
para (i = 1; i <= c; i ++)
si (c mod i = 0) entonces
d = d + 1
fin_si
fin_para
si (d=2) entonces
cp=cp+1
p[cp]=c
fin_si
hasta (cp=5)
mostrar p[3]
fin
20. Diseñar un algoritmo que ingrese una
cadena de carácter cualesquiera, para luego
mostrar cuantos caracteres tiene dicha cadena.
Solución :
Inicio
cad[25]: carácter
L: entero
Ingresar cad
L ← Longitud (cad)
Mostrar " Número caracter", L
Fin
21. Escribir un algoritmo que determine si una
cadena de caracteres es un palíndromo ( una palabra
que al revés dice lo mismo ejm: RADAR)
Solución :
Inicio
cad[30]: carácter
L, i, j, C ← 0: entero
Ingresar cad
L ← Longitud (cad)
j ← L
para (i=0; i <= L-1; i++)
j ← j -1
si (cad[i]= cad[j] ) entonces
C ← C+1
Fin _ si
Fin _ para
si (C = L) entonces
Mostrar "Palíndromo"
sino
Mostrar "No es palíndromo"
Fin _ si
Fin
22. Ingresar una cadena y mostrar cuantos vocales
existen en la cadena.
Solución :
Inicio
cad[25]: caracter
L, C ← 0: entero
Ingresar cad
L ← Longitud cad
para (i=0; i<=L-1; i++)
según _ sea cad[i] hacer
‘a’ : C ← C+1
‘e’ : C ← C+1
‘i’ : C ← C+1
‘o’ : C ← C+1
‘u’ : C ← C+1
fin _ según _ sea
fin_para
Mostrar "Cantidad vocales", C
Fin
Escribir un algoritmo que permita ingresar una
frase y luego la descomponga en sus palabras
imprimiéndolas en líneas diferentes ejm :
Estructura De Datos Estructura
De
Datos
Solución :
Inicio
cad[20] : carácter
i, L : entero
ingresar cad [i]
L ß longitud (cad)
Para ( i = 0; i <= L-1; i++)
mostrar cad [i]
si (cad [i] = ‘ ‘) entonces
saltar línea
fin_si
fin_para
fin
ARREGLOS BIDIMENSIONALES (Matrices)
:
Unidimensional:
Nombre [10]: tipo
Num [10]: entero
Ingresar
Para (i =1; i £ 10; i ++)
Ingresar Num [i]
Fin_para
Fin
Bidimensional:
Nombre [fila] [columna] : tipo
Num [10] [10] : entero
Ingresar
Para (i = 1; i £ 10; i ++ )
Para (j = 1; j £ 10; j ++)
Ingresar Num [i] [j]
Fin_para
Fin_para
Fin
Ejercicios:
Inicio
Num [8] [8]: entero
i, j, N :entero
Repetir
Ingresar N
Hasta (N > 1 y N £ 8)
Para (i = 1; i £ N; i ++)
Para (j = 1; j £ N; j ++)
Repetir
Ingresar Num [i] [j]
Hasta (Num [i] [j] ³ 0)
Fin_para
Fin_para
Fin
- Diseñar un algoritmo que permita ingresar una
matriz de
orden n donde todos los elementos de dicha matriz sean
números naturales. - Diseñar un algoritmo que permita ingresar 35
números impares en una matriz de orden n x
m.
Inicio
Num [35] [35]: entero
i, j, N, M: entero
Repetir
Ingresar N, M
Hasta (M x N = 35 y M > 0)
Para (i = 1; i £ M; i ++)
Para (j = 1; j £ N; j ++)
Repetir
Ingresar Num [i] [j]
Hasta (Num [i ] [j] mod 2 < > 0)
Fin_para
Fin_para
Fin.
3._ Ingresar 15 números negativos en una matriz
de orden mxn.
Inicio
M[15][15]: entero
i, j, m, n: entero
repetir
Ingresar m, n
hasta (m + n =15) y (m>0)
para (i=1; i<=m; i++)
para (j=1; j<=n; j++)
repetir
Ingresar M[i][j]
hasta (M[i][j]>0)
Fin _ para
Fin _ para
Fin
4._ Diseñar un algoritmo que ingrese una
matriz cuadrada, para luego calcular su diagonal
principal.
Inicio
Num[35][35]: entero
i, j, N, S ← 0: entero
repetir
Ingresar N
hasta (N>1; y N<=35)
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
Ingresar Num[i][j]
Fin _ para
Fin _ para
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
si i=j entonces
S ← S+Num[i][j]
Fin _ si
Fin _ para
Fin _ para
Mostrar "Diagonal P:", S
Fin
5._ Diseñar un algoritmo que ingrese una matriz
cuadrada, para luego calcular su diagonal
secundaria.
Inicio
Num[35][35]: entero
i, j, N, S ← 0: entero
repetir
Ingresar N
hasta (N>1; y N<=35)
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
Ingresar Num[i][j]
Fin _ para
Fin _ para
para (i=1; i<=N; i++)
para (j=1; j<=N; j++)
si i+j=N+1 entonces
S ← S+Num[i][j]
Fin _ si
Fin _ para
Fin _ para
Mostrar "Diagonal S", S
Fin
6._ Diseñar un algoritmo que permita almacenar
en un arreglo los impares que sean dígitos cuando i + j
sea par, para el caso que i + j no sea par usted deberá
ingresar cualquier número negativo.
Inicio
M: entero
i, j, N: entero
para i=1 hasta N
para j=1 hasta N
si (i + j mod 2=0)
repetir
Leer "Ingresar número", N
hasta que N>0
M[i][j] =N
sino
repetir
Leer "Ingresar número", N
hasta que N<0
M[i][j] =N
Fin _ si
Fin _ para
Fin _ para
Fin
Rellenar una matriz de la siguiente
manera:
* | 0 | * | 0 | * | 0 | * | 0 | * | 0 | * | * | 0 | * | 0 | * | 0 | * | |||
* | 0 | * | 0 | * | 0 | 0 | * | 0 | * | 0 | * | 0 | * | 0 | 0 | * | 0 | |||
* | 0 | * | 0 | * | 0 | * | 0 | * | 0 | * | 0 | * | 0 | * | 0 | * | ||||
* | 0 | * | 0 | * | 0 | 0 | * | 0 | * | 0 | * | 0 | * | 0 | ||||||
* | 0 | * | 0 | * | 0 | * | 0 | * | 0 | * | ||||||||||
* | 0 | * | 0 | * | 0 | N=5 |
N=6
* | 0 | * | 0 | * | 0 | * | |
* | 0 | * | 0 | 0 | * | 0 | |
* | 0 | * | 0 | * | 0 | * | |
* | 0 | * | 0 |
N=4 N=3
Inicio
char Num[20][20];
int n, i, j, C=0;
repetir
Mostrar "Ingresar N:";
Mostrar "N";
hasta (N<=0 | | N>=20)
para (i=0; i<=N-1; i++)
para (j=0; j<=N-1; j++)
si (C=0) entonces
Num[i][j]=’*’
C=1;
sino
Num[i][j]=’0’
C=0;
Fin _ si
Fin _ para
Fin _ para
para (i=0; i<=N-1; i++)
para (j=0; j<=N-1; j++)
Mostrar "Num[i][j]
Fin _ para
Fin _ para
Fin
Página siguiente |