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