U 4.-C D E: Universidad Tecnológica Nacional Facultad Regional Tucumán Departamento de Sistemas
U 4.-C D E: Universidad Tecnológica Nacional Facultad Regional Tucumán Departamento de Sistemas
U 4.-C D E: Universidad Tecnológica Nacional Facultad Regional Tucumán Departamento de Sistemas
OBJETIVOS:
➢ Que el alumno comprenda el concepto de dato, los seleccione adecuadamente y los
organice en forma estructurada.
TEMAS:
4.1. Definición de dato estructurado.
4.2. Arreglos unidimensionales: definición, lectura e impresión, operaciones, vectores
paralelos, métodos de búsqueda, método de ordenamiento con un vector y con vectores
paralelos. Intercalación de vectores. Representación en un lenguaje C.
4.3. Arreglos bidimensionales: definición, lectura e impresión, operaciones (suma, resta,
multiplicación de un escalar por una matriz, multiplicación de matrices), operaciones por
fila, operaciones por columna, búsqueda, ordenamiento, tipos de matrices, elementos
característicos de una matriz, representación en lenguaje C.
4.4. Arreglos Multidimensionales: definición, lectura e impresión, operaciones,
representación en lenguaje C.
4.5. Cadenas de Caracteres: definición, lectura e impresión, representación en lenguaje C y
funciones definidas en él.
4.6. Registros: definición, lectura e impresión, representación en lenguaje C. Registros
jerarquizados, array de registros y registros de array.
-1-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Se llama estructura de datos o tipo de dato estructurado a los tipos de datos construidos a
partir de otros tipos de datos. Es un conjunto de datos.
Pueden realizarse diferentes clasificaciones. Atendiendo al tipo de los datos que la
componen.
Desde el punto de vista de la gestión de memoria las estructuras de datos, se clasifican
en:
➢ Estáticas: si poseen un número fijo de elementos. Los ejemplos más típicos son los
arrays y registros. Su mayor desventaja es la necesidad de tener que definir el número
máximo de elementos que podrá tener la estructura. Su mayor ventaja es la rapidez de
acceso a cada elemento individual de la estructura. Estas estructuras reservan la
gestionan la memoria en tiempo de compilación del programa.
➢ Dinámicas: si el número de elementos que contienen puede variar durante la
ejecución del programa. Su principal inconveniente es la lentitud en el acceso, ya que
normalmente se realiza de forma secuencial. La ventaja es sin embargo importante, la
posibilidad de aumentar o disminuir en tiempo de ejecución el número de elementos
que componen la estructura. La gestión de memoria se realiza en tiempo de ejecución
del programa.
Una de las características principales de los arrays es que permiten el acceso directo o
aleatorio a sus elementos. En un array unidimensional para alcanzar una determinada posición i,
basta con dar ese valor al índice.
Las operaciones básicas son la lectura y escritura de datos en las distintas posiciones.
Prácticamente todos los lenguajes de alto nivel permiten la utilización de variables con
subíndice.
-2-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Un arreglo es un tipo de dato estructurado, en el cual todos los elementos son de la misma
naturaleza, es decir que son homogéneos, además presenta la característica de que sus
elementos se almacenan en memoria RAM; por lo que al apagar la computadora estos datos se
pierden.
➢ Nombre del vector: indica la forma de distinguir un vector de otro; por lo que dos
vectores serán distintos si poseen nombres diferentes y no subíndices diferentes.
Ejemplo:
Vector A
Vector B
▪ El subíndice puede ser una expresión aritmética cuyo resultado sea un valor entero
positivo Ejemplo A[k+1+2*N]
Por ejemplo:
A[i] representa el elemento i-ésimo del vector A.
A[2] representa el elemento de posición 2 del vector A.
A[i+1] representa el i-ésimo +1 elemento.
-3-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
-4-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Un concepto a tener en claro es que al ser un vector un conjunto de datos, tanto su lectura
como su impresión se realizan con una estructura de iteración cuyo corte de control será i < N
(orden del vector), siempre que se utilice una estructura while y la variable contador
correspondiente al subíndice se inicialice con el valor 0.
Sólo se podrá realizar la impresión o lectura fuera del ciclo de repetición si lo que se pretende
leer o imprimir es un único valor (correspondiente a un elemento del vector).
#include<stdio.h>
#include<conio.c>
main (void)
{
clrscr ();
int i,n; Realiza la definición del vector
int v[100];
printf (“Ingrese la cantidad de elementos”);
scanf(“%d”,&n);
for(i=1;i<=n;i++)
{
printf(“Ingrese un elemento: “);
scanf("%d",&v[i]);
Ingresa cada uno de los elementos del vector
printf("%d",v[i]);
Muestra cada uno de los elementos del vector
}
getch();
}
-5-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
EJEMPLO DE APLICACIÓN
/******************************************************************************************
Se tienen las notas de examen de 4 alumnos. Se quiere hacer un programa que
determine cuantos alumnos sacaron una nota mayor al promedio
******************************************************************************************/
#include<stdio.h>
#include<conio.c>
main (void)
{
clrscr ();
int i,c;
float nota[4],suma;
float promedio;
suma=0;
c=0;
for (i=0;i<4;i++)
{
printf("\n Nota[%d]= ",i);
scanf("%f",¬a[i]);
suma=suma+nota[i];
}
promedio=suma/4;
pintf("\nPromedio= %.2f",promedio);
for (i=0;i<4;i++)
{
If (nota[i]>promedio)
c=c+1;
}
printf("\nSon %d los alumnos que tienen una nota mayor que el promedio",c);
printf("\n\n");
getch();
}
-6-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Para sumar dos o más vectores, los mismos deben ser del mismo orden, es decir
deben tener la misma cantidad de elementos.
Vector A
5 7 10
Vector B
3 8 6
Vector C
8 15 16
main (void)
{
clrscr ();
int n,i,a[50],b[50],c[50];
printf("Ingrese el orden del vector: ");
scanf("%d",&n);
for (i=0;i<n;i++)
{
-7-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Para restar dos o más vectores, los mismos deben ser del mismo orden, es decir
deben tener la misma cantidad de elementos.
Vector A
5 7 10
Vector B
3 8 6
Vector C
2 -1 4
main (void)
{
clrscr ();
int n,i,a[50],b[50],c[50];
-8-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
for(i=0;i<n;i++)
{
printf("\n A[%d]= ",i);
scanf("%d",&a[i]);
printf("\n B[%d]= ",i);
scanf("%d",&b[i]);
c[i]=a[i]-b[i];
}
Para multiplicar dos o más vectores, los mismos deben ser del mismo orden, es decir
deben tener la misma cantidad de elementos.
Vector A
5 2 3
Vector B
3 8 6
Vector C
15 16 18
-9-
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
main (void)
{
clrscr ();
int n,i,a[50],b[50],c[50];
printf("Ingrese el orden del vector: ");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("\n A[%d]= ",i);
scanf("%d",&a[i]);
printf("\n B[%d]= ",i);
scanf("%d",&b[i]);
c[i]=a[i]*b[i];
}
Para dividir dos vectores, los mismos deben ser del mismo orden, es decir deben tener
la misma cantidad de elementos, y es condición necesaria que el vector B no tenga
elementos nulos, ya que no es posible la división por cero.
Vector A
9 10 20
Vector B
3 2 4
- 10 -
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Vector C
3 5 5
main (void)
{
clrscr ();
int n,i,a[50],b[50],c[50];
for (i=0;i<n;i++)
{
printf("\n A[%d]= ",i);
scanf("%d",&a[i]);
printf("\n B[%d]= ",i);
do
{
scanf("%d",&b[i]);
}
while (b[i]==0);
c[i]=a[i]/b[i];
}
- 11 -
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Vector A
5 7 10
Escalar
K=3
Vector C
15 21 30
main (void)
{
clrscr ();
int k,n,i,a[50],c[50];
printf("Ingrese el valor de k: ");
scanf("%d",&k);
printf("Ingrese el orden del vector: ");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("\n A[%d]= ",i);
scanf("%d",&a[i]);
c[i]=a[i]*k;
}
- 12 -
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
VECTORES PARALELOS
Dos o más arreglos que utilizan el mismo subíndice para acceder a elementos de distintos
arreglos, se denominan arreglos paralelos. Estos arreglos pueden procesarse simultáneamente.
En los vectores paralelos la información se corresponde por posición y todos tienen el mismo
orden.
Por ejemplo supongamos que se registra la información de los productos en 3 vectores:
1. Vector cod: contiene los códigos de los productos.
2. Vector can: contiene la cantidad que hay en stock de cada producto.
3. Vector pre: contiene el precio de cada producto.
cod
1256 2135 6235
can
10 15 30
pre
2.50 3.15 6.20
Así en el ejemplo anterior el código 1256, se corresponde con cantidad igual a 10 y precio
igual a 2.50.
Se deben ingresar todos los elementos de los vectores y luego realizar el trabajo solicitado
con ellos.
Ejercicio
Realizar la codificación en Lenguaje C, a fin poder ingresar los vectores cod, can y pre, todos
de orden N, e indicar cuál es código del producto que posee el precio más alto.
Programa en Lenguaje C
#include<stdio.h>
#include<conio.c>
main (void)
{
clrscr ();
- 13 -
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
int n,i,cod[50],can[50];
float pre[50];
for (i=0;i<n;i++)
{
printf("\n cod[%d]= ",i);
scanf("%d",&cod[i]);
if (pre[i]>may)
{
may=pre;
pos=i;
}
}
PROBLEMAS EJEMPLOS
En esta sección se pretende que el alumno tenga las herramientas mínimas necesarias
para poder encarar cualquier solución de un problema informático que comprenda arreglos
unidimensionales (vectores).
Generalmente se conoce el orden del vector y por ello se trabaja con un ciclo de repetición
(estructura while o for).
En todos los casos se presenta la solución en términos de Diagrama de Flujo y Codificación
en Lenguaje C.
Ejercicio Nº 1.
Introduzca un vector de N números enteros.
- 14 -
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Solución
En este caso particular se poseen datos pero no resultados, ya que no se especifica el trabajo
a realizar con los elementos del vector.
Datos
N : orden del vector
V : nombre del vector
i : subíndice de los elementos del vector
V[i] : cada uno de los elementos del vector
Codificación en Lenguaje C
#include<stdio.h>
main (void)
{
int n,i,v[50];
i=0;
while (i<n)
{
printf("\n Ingrese elemento: ");
scanf("%d",&v[i]);
i=i+1;
}
getch();
}
- 15 -
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
Ejercicio Nº 2.
Introduzca un vector de N números enteros y muestre la suma de los mismos.
Solución
Datos
N : orden del vector
V : nombre del vector
i : subíndice de los elementos del vector
V[i] : cada uno de los elementos del vector
Resultado
S: identificador que indica la suma de los valores introducidos en el vector.
Codificación en Lenguaje C
#include<stdio.h>
main (void)
{
int n,i,v[50],s;
- 16 -
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL TUCUMÁN
DEPARTAMENTO DE SISTEMAS
CÁTEDRA: ALGORITMOS Y ESTRUCTURAS DE DATOS
- 17 -