Anda di halaman 1dari 19

Capítulo I

Introducción a las Estructuras De Datos

El pato y la Serpiente

A orillas de un estanque, diciendo estaba un pato:

-¿A qué animal dio el cielo los dones que me ha dado? Soy de agua, tierra y aire; cuando de andar me canso, si
se me antoja, vuelo; si se me antoja, nado.

Una serpiente astuta, que le estaba escuchando, le llamó con un silbido y le dijo:

-No hay que ser tan arrogante señor pato, pues ni anda como el ciervo, ni vuela como el halcón, ni nada como
el pez; y así tenga sabido que lo importante y raro no es entender de todo, sino ser diestro en algo.
De Tomás de Iriarte

Introducción

Para procesar información en un computador es necesario hacer una abstracción de los datos que
tomamos del mundo real, abstracción en el sentido de que se ignoran algunas propiedades
de los objetos reales, es decir, se simplifican. Se hace una selección de los datos más
representativos de la realidad a partir de los cuales pueda trabajar el computador para
obtener unos resultados.
Cualquier lenguaje suministra una serie de tipos de datos simples, como son los números enteros,
caracteres, números reales. En realidad suministra un subconjunto de éstos, pues la memoria del
ordenador es finita. Los punteros (si los tiene) son también un tipo de datos. El tamaño de todos
los tipos de datos depende de la máquina y del compilador sobre los que se trabaja.

Abstracción

Una abstracción es un proceso mental donde se extraen rasgos esenciales de algo para
representarlos por medio de un lenguaje gráfico o escrito.

Abstracción de datos

Técnica o metodología que permite diseñar estructuras de datos, permite representar bajo ciertos
lineamientos las características esenciales de las estructuras de datos.

Programación II 1
Lic. Peregrina Carazas
Definición de Estructuras de Datos

Una estructura de datos es cualquier colección de datos organizados de tal forma que tengan
asociados un conjunto de operaciones para poder manipularlos.

Ejemplo: Estructura de Datos: Arreglo

Sus operaciones: Comparación


Asignación
Escritura
Lectura

Otros ejemplos de estructuras de datos:

OPERACIONES
 Lista de elementos Ordenar
 Archivos (conjunto de registros) Buscar
Eliminar
 Vector (conjunto de elementos)
Modificar
 Registros Insertar
Desplegar

T.D.A. (Tipo de Dato Abstracto)

Al diseñar una estructura de datos con la técnica de abstracción pasa a ser un TDA, que:

 Puede implementarse en cualquier lenguaje


 Puede aplicarse en cualquier concepto

Ejemplo:

TDA: VECTOR: <x1, x2, x3,…, xn>

En java los arreglos no solo deben ser declarados, sino también deben ser creados

new <tipo base> <[número natural]>

vector[ ] = new int [10] ; Declaración y creación de un


vector

Vector[0] Vector[10]

Programación II 2
Lic. Peregrina Carazas
A continuación vemos en la siguiente figura el TDA vector con sus diferentes operaciones

VECTOR
sumar
quitar
buscar
asignar
insertar
cambiar

Estructuras Fundamentales

Los datos a procesar por una computadora se clasifican en:

 Simples
 Estructurados

Los datos simples ocupan sólo una casilla de memoria, por tanto una variable simple hace
referencia a un único valor a la vez.

Los datos Estructurados se caracterizan por el hecho de que con un nombre (identificador de
variable estructurada) se hace referencia a un grupo de casillas de memoria. Tiene varios
componentes.
Ejemplos:

Dato Simple
Declaramos una variable A de tipo entero y asignamos el valor 25.

A  Identificador
int A; 25
A = 25;

Dato Estructurado
Declaramos un dato compuesto o estructurado A que tendrá 5 elementos de tipo
entero.
A  Identificador
Int A[ ] = new int [5] ; 20 30 40 50 60
A = {20,30,40,50,60};

Programación II 3
Lic. Peregrina Carazas
Arreglos

Con frecuencia se presentan problemas cuya solución no resulta fácil de implementar (a veces es
imposible) si se utilizan datos simples.

A continuación se presentará un problema y dos posibles soluciones del mismo utilizando tipos
simples de datos. El objetivo de este ejemplo es ilustrar lo complejo que resulta un algoritmo de
solución para ciertos problemas, sin usar tipos estructurados de datos.

Problema. Se tienen calificaciones de un grupo de 50 alumnos. Se necesita saber cuántos


alumnos tienen una calificación superior al promedio del grupo.

¿Cómo resolver este problema?

Primera Solución: DOBLE LECTURA

BEGIN

Integer I, CONT
Real AC, PROM, C
AC = 0; I = 1;
while ( I < = 50)
write (Introduzca la calificación del alumno )
read C;
AC = AC + C
I =I +1
endwhile
PROM = AC / 50;
CONT = 0; I = 1;
while ( I < = 50 )
write (“Introduzca la calificación del alumno “)
read C
if ( C > PROM )
then
CONT = CONT + 1;
endif
I =I +1;
enwhile
write(“el numero de alumnos cuya calificación es mayor al promedio son “, CONT)
END

Segunda Solución: MUCHAS VARIABLES u

Programación II 4
Lic. Peregrina Carazas
Esta solución, resuelve el problema planteado utilizando múltiples variables.

SEGUNDA SOLUCION
BEGIN
Integer CONT, C1,C2, C3, …, C50;
Real PROM, AC, C;
Write( “ introduzca la calificación del alumno 1 “)
Read C1;
Write( “ introduzca la calificación del alumno 2 “)
Read C2
.
.
Write( “ introduzca la calificación del alumno 50 “)
Read C50;
AC = C1 + C2 + … + C50;
PROM = AC / 50; CONT = 0;
If ( C1 > PROM ) then
CONT = CONT + 1;
endif
If ( C2 > PROM ) then
CONT = CONT + 1;
endif
.
.
If ( C50 > PROM ) then
CONT = CONT + 1;
endif
write( “el numero de alumnos cuya calificación es mayor al promedio son “)
write(CONT)
END

Se observa que ninguna de las dos soluciones resulta práctica ni eficiente. Es necesario un nuevo
tipo de datos que permita tratar estos problemas de una manera más adecuada. Los tipos de datos
estructurados que ayudan a resolver problemas como éste son los arreglos.

Tercera Solución: UTILIZAR UN ARREGLOu


Esta solución, resuelve el problema planteado utilizando un arreglo.

Programación II 5
Lic. Peregrina Carazas
BEGIN

Dim integer C[51]; //declara un vector C para 50 elementos


integer I;
Real AC, PROM;
for ( I = 1 to 50 do)

write(“ Introduzca la calificacion del alumno “)


read C [ I ]
AC = AC + C [I]
endfor
PROM = AC / 50;
for ( I =1 to 50 do)
BEGIN if ( C [ I ] > PROM ) then
Dim integer C[51]; //declara un CONT =CONTC +1
vector para 50 elementos
integer I; Endif
Realendfor
AC, PROM;
for write(“el numero
( I do 1 to 50 ) de alumnos cuya calificación es mayor al
promedio son “)
write(CONT)
write(“ Introduzca la calificacion del alumno “ )
read C [ I ]
END AC = AC + C [I];
endfor
PROM = AC / 50;
for ( I do 1 to 50 )
if ( C [ I ] > PROM ) then
CONT ++;
Endif
endfor
Definición De Arreglo
write(“el numero de alumnos cuya calificación es mayor al
promedio es “)
write(CONT)
Un arreglo se define como una colección finita, homogénea y ordenada de
END elementos.

Finita: Todo arreglo tiene un límite; es decir, debe determinarse cuál será el número máximo de
elementos que podrán formar parte del arreglo.

Homogénea: Todos los elementos del arreglo son del mismo tipo (todos enteros, todos voléanos,
etc. , pero nunca una combinación de distintos tipos)

Gráficamente podemos representar un arreglo como sigue:

Ejemplo: Sea un arreglo C que almacena las 50 calificaciones

componente
C= 30 50 70 60
1 2 3 … 50

Programación II 6
Lic. Peregrina Carazas
Identificador
Indice

Declaración de vectores

Para declarar un vector en el lenguaje JAVA, tenemos la siguiente sintaxis:

new <tipo base> <[número natural]>

Ejemplo: Un vector a de 10 enteros de tipo int se declara:

Int A[] = new int [10];

Ejemplo. En esta línea se declaran dos vectores de double, uno con 20 componentes y otro con
100:

double a[] new float a[100], b[] = new float b[100];

Inicialización de los vectores

Los arrays pueden ser inicializados en la declaración.

Ejemplos:

float S[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12};


int N[] = {1, 2, 3, 6};
En el caso 1, el número de elementos es 10, ya que hay diez valores en la lista.
En el caso 2, será 4.
Una vez creado un vector, sus elementos presentan valores arbitrarios. Es un error suponer que
los valores del vector son nulos tras su creación.

Podemos inicializar todos los valores de un vector a cero con un bucle for:

for (i = 0; i < TAM; i++)


a[i] = 0;

1.1.1. Arreglos Multidimensionales

Existe en la mayoría de los lenguajes una estructura de arreglos multidimensionales. El número de


dimensiones (índices) permitido depende del lenguaje elegido.

Matrices

Una matriz es un arreglo de dos dimensiones, y para especificar cualquier elemento, debemos
hacer referencia a dos índices (que representan la posición como renglón y columna). Aunque no

Programación II 7
Lic. Peregrina Carazas
se justificará aquí, es conveniente mencionar que la representación matricial es puramente
conceptual y con el único fin de facilitar al programador el manejo de los elementos, ya que la
computadora almacena los datos en una forma totalmente diferente

• Java soporta hasta arreglos con 12 dimensiones. En arreglos de dos dimensiones, el primer
elemento representa el renglón y el segundo la columna.

• Cada elemento de un arreglo bidimensional puede referenciarse de la siguiente manera:


arreglo [ i ] [ j ].

• Un arreglo multidimensional puede inicializarse desde su declaración. Por ejemplo, un


arreglo bidimensional b[2][2] puede declararse e inicializarse así:

Declaración de una Matriz

La sintaxis en el lenguaje Java es el siguiente:

tipo nombre_de_variable[][]= new tipo[rango1][rango2];

donde:
• tipo puede ser cualquier tipo de dato (int, float, char, etc.).
• nombre_de_variable es el nombre del arreglo.
• rango 1 corresponde al número de renglones que conforman el arreglo.
• rango 2 corresponde al número de columnas.

Podemos trabajar con cada uno de los elementos de la matriz:

X[3][5] = 20;

Operaciones con arreglos bidimensionales

Las operaciones que pueden realizarse con arreglos bidimensionales son las siguientes:
• Lectura/escritura
• Asignación
• Actualización:
 Inserción
 Eliminación
 Modificación
• Ordenación

Programación II 8
Lic. Peregrina Carazas
• Búsqueda
En general los arreglos bidimensionales son una generalización de los unidimensionales, por lo
que se realizará un ejemplo con algunas de estas operaciones a continuación.

Ejemplo: La Tabla contiene gastos que registra una ama de casa correspondientes a los 12
meses del año anterior.

Meses/Gastos Agua Luz Telefono Mercado


23 57 840 250
28 60 560 280
34 55 400 275
24 87 700 340
29 80 450 310
34 65 670 320
45 67 560 325
48 78 570 323
32 54 540 290
33 50 250 300
35 70 330 350
38 62 300 430

Es posible interpretar esta tabla de la siguiente manera: dado un mes, se conocen los gastos
realizados por la ama de casa; y dado un gasto se conocen los gastos mensuales.

El programa será el siguiente:

proc Lee_gastos( G[][], m, g)

integer i contador de meses


integer j contador de columnas de gasto

for ( i= 1 to m do)
for ( j=1 to g do)

write(”Ingrese el gasto del mes “)


cin>>G[i][j];
endfor
endfor

endproc

Programación II 9
Lic. Peregrina Carazas
Proc Imprime_Gastos(G[][], m, g)

for (i=1 to m do)


for(j=1 to n do)
write(G[i][j])
endfor
endfor
endproc

proc Suma_Gastos (G[][], m, g)

integer TotalGastos=0

for (i=1 to m do)


for(j=1 to n do)
TotalGastos = TotalGastos + G[i][j]
endfor
write(“EL TOTAL DE GASTOS DEL AÑO ES...”)
endfor
endproc

BEGIN
DIM GASTOS[100][100]
Lee_Gastos (GASTOS, 12, 4)
Imprime_Gastos (GASTOS, 12,4)
Suma_Gastos(GASTOS, 12,4)
END

Matrices Poco Densas

Matriz es un término matemático utilizado para definir un conjunto de elementos organizados por
medio de renglones y columnas, equivalente al término arreglo bidimensional utilizado en
computación.

Poco Densa indica una proporción muy alta de ceros entre los elementos de la matriz. Es decir
una matriz poco densa es aquella que tiene gran cantidad de elementos ceros.

Ejemplo:
La matriz A de 4 filas por 4 columnas, del total de elementos que es 16, solo 4 de ellos son
diferentes de cero.

Programación II 10
Lic. Peregrina Carazas
0 1 1 0
A= 0 0 1 0
0 1 0 0
0 1 0 0

Ejemplo de una matriz poco densa

Proc MatrizPdensa(G[][], m, g)

for (i=1 to m do)


for(j=1 to n do)
if(i=j) then
G[i][j]=1
Else
G[i][j]=0

endfor
endfor
endproc

Proc Imprime(G[][], m, g)

for (i=1 to m do)


for(j=1 to n do)
write(G[i][j])
endfor
endfor
endproc
BEGIN
DIM G[100][100]
Read n
Read m
MatrizPdensa (GASTOS, n, m)
Imprime (G, n,m)
END

Registros (Estructuras)

Cuando se habló de los arreglos se mencionó que se trataba de una colección de datos, todos del
mismo tipo, que era un tipo estructurado de datos, y que son ellos se podía solucionar un gran
número de problemas. Sin embargo, en la práctica a veces se necesitan estructuras que permitan
almacenar distintos tipos de datos (característica con la cual no cuentan los arreglos).

Ejemplo

Una compañía tiene por cada empleado los siguientes datos:

• Nombre (cadena de caracteres)


• Dirección (cadena de caracteres)

Programación II 11
Lic. Peregrina Carazas
• Edad (entero)
• Sexo (carácter)
• Antigüedad (entero)

Si lo vemos gráficamente estos datos tenemos;

Nombre Direccion
Nom Pat Mat Calle Nro Zona Edad Sexo Antig
Juan Rodríguez Salas Av. Arce 123 Central 25 M 2
Maria Alvarez Vargas Calle 12 1345 Obrajes 29 F 3

Si se quisiera almacenar estos datos no sería posible usar un arreglo, ya que sus componentes
deben ser todos del mismo tipo.

Definición De Registro

Un registro es un dato estructurado, donde cado uno de sus componentes se denomina campo.
Los campos de un registro pueden ser todos de diferentes tipos. Cada campo se identifica por un
nombre único (el identificador de campo). No se establece orden entre los campos.
Un registro es un clase en Java es un grupo de campos, existen muchas formas de organizar los
registros la forma más común se denomina archivo secuencial.
Java no obliga a crear una estructura de registro, por tanto los programadores deben estructurar
estos a modo de satisfacer las necesidades de las aplicaciones.

fos.writeUTF (txtnombre.getText ());


fos.writeUTF (txtapellido.getText ());
fos.writeUTF (txtsemestre.getText ());
fos.writeUTF (txtpago.getText ());
fos.writeUTF (txtcarrera.getText ());
fos.writeUTF (txtmatricula.getText ())

Los archivos se abren creando objetos de las clases de flujos FileInputStream y FileOutputStream.

fos = new DataOutputStream (new FileOutputStream


("d:\\encargados.dat", true));

Programación II 12
Lic. Peregrina Carazas
El programa presenta un botón Guardar o Grabar el cual invocará a un método especifico que
permita almacenar el registro en el archivo, en este método cada campo del registro se escribe
individualmente con llamadas al métodos writeInt, writeUTF, writeDouble de la clase
DataOutputStream

Ejemplo de adición de registros al archivo alumnos.dat


import java.awt.*;
import java.io.*;
import java.lang.*;
import java.io.*;
import java.applet.*;
public class alumnos extends Frame
{
private TextField txtnombre, txtapellido, txtsemestre, txtcarrera, txtpago, txtmatricula,
txtobservacion, txtdia, txtmes, txtano, txtestado;
private Label lblnombre, lblapellido, lblsemestre, lblcarrera, lblpago, lblmatricula, lblobservacion,
lblfecha;
private Button btnregistrar, btnlistar, btnsalir, btnbuscar;
private Choice uno;
private Checkbox a, b;
CheckboxGroup R;
Toolkit toolkit;
Image imagen;
alumnos ()
{
super ("registro de inscritos");
muestra ();
toolkit = getToolkit ();
imagen = toolkit.getImage ("alumnos.jpg");
}

public void paint (Graphics g)


{
g.drawImage (imagen, 1, 1, this);
}

public void muestra ()


{
setLayout (null);
setBackground (Color.blue);
txtnombre = new TextField ("");
txtapellido = new TextField ("");
txtsemestre = new TextField ("");
txtpago = new TextField ("");
txtcarrera = new TextField ("");
txtmatricula = new TextField ("");
txtdia = new TextField ("");
txtmes = new TextField ("");
txtano = new TextField ("");
txtobservacion = new TextField ("");
txtnombre.reshape (50, 75, 150, 20);

Programación II 13
Lic. Peregrina Carazas
txtapellido.reshape (50, 155, 150, 20);
txtsemestre.reshape (50, 425, 100, 20);
txtcarrera.reshape (50, 225, 100, 20);
txtmatricula.reshape (50, 490, 100, 20);
txtdia.reshape (50, 290, 30, 20);
txtmes.reshape (90, 290, 30, 20);
txtano.reshape (130, 290, 40, 20);
txtobservacion.reshape (230, 115, 230, 20);
add (txtnombre);
add (txtapellido);
add (txtsemestre);
add (txtcarrera);
add (txtmatricula);
add (txtdia);
add (txtmes);
add (txtano);
add (txtobservacion);
R = new CheckboxGroup ();
a = new Checkbox ("si", R, true);
a.reshape (300, 455, 40, 15);
b = new Checkbox ("no", R, true);
b.reshape (300, 480, 40, 15);
add (a);
add (b);
lblnombre = new Label ("NOMBRE");
lblapellido = new Label ("APELLIDO");
lblsemestre = new Label ("SEMESTRE");
lblpago = new Label ("PAGO");
lblcarrera = new Label ("CARRERA");
lblmatricula = new Label ("MATRICULA");
lblfecha = new Label ("FECHA DE INSCRIPCION");
lblobservacion = new Label ("OBSERVACIONES");
lblnombre.reshape (55, 50, 80, 20);
lblapellido.reshape (55, 130, 80, 20);
lblsemestre.reshape (55, 400, 80, 20);
lblpago.reshape (300, 430, 40, 20);
lblcarrera.reshape (55, 200, 100, 20);
lblmatricula.reshape (55, 465, 80, 20);
lblfecha.reshape (55, 265, 150, 20);
lblobservacion.reshape (280, 80, 120, 20);
add (lblnombre);
add (lblapellido);
add (lblsemestre);
add (lblpago);
add (lblcarrera);
add (lblmatricula);
add (lblfecha);
add (lblobservacion);
btnregistrar = new Button ("ADICIONAR");
btnlistar = new Button ("MOSTRAR");
btnsalir = new Button ("SALIR");
btnbuscar = new Button ("BUSCAR");
btnregistrar.reshape (50, 550, 80, 30);
btnlistar.reshape (150, 550, 80, 30);

Programación II 14
Lic. Peregrina Carazas
btnsalir.reshape (370, 550, 80, 30);
btnbuscar.reshape (260, 550, 80, 30);
add (btnregistrar);
add (btnlistar);
add (btnsalir);
add (btnbuscar);
uno = new Choice ();
uno.addItem ("nuevo");
uno.addItem ("antiguo");
uno.addItem ("otros");
uno.reshape (300, 340, 100, 100);
add (uno);
resize (510, 600);
show ();
}

public void limpiar ()


{
txtnombre.setText ("");
txtapellido.setText ("");
txtsemestre.setText ("");
txtpago.setText ("");
txtcarrera.setText ("");
txtmatricula.setText ("");
txtdia.setText ("");
txtmes.setText ("");
txtano.setText ("");
txtobservacion.setText ("");
txtestado.setText ("");
}

public boolean action (Event e, Object o)


{
int suma;
if (e.target instanceof Checkbox)
{
if (a.getState () == true)
{
txtpago = new TextField ("si");
}
if (b.getState () == true)
{
txtpago = new TextField ("no");
}
}
if (e.target instanceof Choice)
{
if (uno.getSelectedItem ().equals ("nuevo"))
{
txtestado = new TextField ("nuevo");
}
if (uno.getSelectedItem ().equals ("antiguo"))

Programación II 15
Lic. Peregrina Carazas
{
txtestado = new TextField ("antiguo");
}
if (uno.getSelectedItem ().equals ("otros"))
{
txtestado = new TextField ("otros");
}
}
if (e.arg.equals ("SALIR"))
{
hide ();
}
if (e.arg.equals ("BUSCAR"))
{
busqueda asd = new busqueda ();
}
if (e.arg.equals ("ADICIONAR"))
{
if (txtnombre.getText ().equals ("") && txtapellido.getText ().equals ("") &&
txtsemestre.getText ().equals ("") && txtpago.getText ().equals ("") && txtcarrera.getText ().equals
("") && txtobservacion.getText ().equals ("") && txtdia.getText ().equals ("") && txtmes.getText
().equals ("") && txtano.getText ().equals ("") && txtmatricula.getText ().equals ("") &&
txtestado.getText ().equals (""))
{
return false;
}
DataOutputStream fos = null;
try
{
fos = new DataOutputStream (new FileOutputStream ("d:\\alumnos.dat"));
fos.writeUTF (txtnombre.getText ());
fos.writeUTF (txtapellido.getText ());
fos.writeUTF (txtsemestre.getText ());
fos.writeUTF (txtpago.getText ());
fos.writeUTF (txtcarrera.getText ());
fos.writeUTF (txtmatricula.getText ());
fos.writeInt (Integer.parseInt (txtdia.getText ()));
fos.writeInt (Integer.parseInt (txtmes.getText ()));
fos.writeInt (Integer.parseInt (txtano.getText ()));
fos.writeUTF (txtobservacion.getText ());
fos.writeUTF (txtestado.getText ());
fos.close ();
limpiar ();
}
catch (FileNotFoundException fnfe)
{
System.out.println ("no existe el archivo");
}
catch (IOException ioe)
{
System.out.println ("error");
}
}
if (e.arg.equals ("MOSTRAR"))

Programación II 16
Lic. Peregrina Carazas
{
lista a = new lista ();
}
return true;
}

public static void main (String args [])


{
alumnos ag = new alumnos ();
}
}

Ejercicios Propuestos

ARREGLOS DE UNA DIMENSIÓN

1. Declare e inicialice un vector de N elementos de modo que los componentes


de indice par valgan 0 y los de indice impar valgan 1. Ejm. V(1,0,1,0, . . . . .)

2. Escriba un programa que almacene en un vector los N primeros números de Fibonacci.


Una vez calculados, el programa los mostrará por pantalla en orden inverso.

3. Escriba un programa que almacene en un vector los N primeros números de Fibonacci.


Una vez calculados, el programa pedirá al usuario que introduzca un número y dirá si es o
no es uno de los N primeros números de Fibonacci.

4. Hallar la moda de los elementos de un vector de dimensión n (la moda es el valor que más
se repite)

5. Diseñe un programa que pida el valor de N números enteros distintos y los almacene en un
vector. Si se da el caso, el programa advertirá al usuario, tan pronto sea posible, si
introduce un número repetido y solicitará nuevamente el número hasta que sea diferente
de todos los anteriores. A continuación, el programa mostrará los N números por pantalla

6. Diseñe un programa que lea y almacene en un vector N números enteros asegurándose


de que sean positivos. A continuación, el programa pedirá que se introduzca una serie de
números enteros y nos dirá si cada uno de ellos está o no en el vector. El programa finaliza
cuando el usuario introduce un número negativo. Luego ordenar el vector, por el método de
la burbuja.

Programación II 17
Lic. Peregrina Carazas
7. En un arreglo se ha almacenado el número total de toneladas de cereales cosechadas
durante cada mes del año anterior. Se desea la siguiente información:

i. El promedio anual de toneladas cosechadas


ii. ¿Cuántos meses tuvieron una cosecha superior al promedio anual?
iii. ¿Cuántos meses tuvieron una cosecha inferior al promedio anual?Escriba
un programa que proporcione estos datos.

ARREGLOS MULTIDIMENSIONALES

1. Escriba un programa que intercambie por renglón los elementos de un arreglo


bidimensional. Los elementos del renglón 1 deben intercambiarse con los del renglón
N, los del renglón 2 con los del N-1, y así sucesivamente.
2. Determinar si una matriz es simétrica

2 3 4 5 6
3 7 8 9 5
4 8 10 8 4
5 9 8 7 3
6 5 4 3 2

Una matriz es simétrica si Aij=Aji


3. Consideremos las matrices A y B de dimensión n*m, almacene los elementos de
ambas matrices n vector V de dimensión 2*n*m, A esta almacenado renglón por
renglón a partir de la primera posición y B está almacenado columna por columna a
partir de la posición n*m+1 escriba un programa que realice los siguiente:

a) Obtenga la suma de las matrices almacenados en V y almacene el resultado en le


vector S ordenado por renglones a partir de la primera posición.

A 5 7 B 16 12
9 4 19 14

V 5 7 9 4 16 19 12 14

S 5+16 7+12 9+19 4+14

b) Imprima el resultado de la suma almacenado en S en forma de matriz

21 19
28 18

Programación II 18
Lic. Peregrina Carazas
ARCHIVOS

1. Una compañía distribuye N productos a distintos comercios de la ciudad. Para ello se


almacena en un archivo toda la información relacionada con su mercancía:
• Clave
• Descripción
• Existencia
• Mínimo a mantener de existencia
• Precio unitario
Escriba un programa que pueda llevar a cabo las siguientes operaciones:

a) Venta de un producto: se deben actualizar los campos que correspondan, y verificar que la
nueva existencia no esté por debajo del mínimo. (datos: clave, cantidad_vendida)
b) Reabastecimientos de un producto: se deben actualizar los campos que correspondan.
(Datos: clave, cantidad comprada)

Programación II 19
Lic. Peregrina Carazas