TEMA1II2009

24
Capítulo I Introducción a las Estructuras De Datos 1.1. 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. 1.2. Abstracción Programación II 1 Lic. Peregrina Carazas 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

Transcript of TEMA1II2009

Page 1: TEMA1II2009

Capítulo I

Introducción a las Estructuras De Datos

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

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

1.3. 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 1Lic. Peregrina Carazas

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

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

Page 2: TEMA1II2009

1.4. 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:

Sus operaciones:

Otros ejemplos de estructuras de datos:

OPERACIONES

Lista de elementos

Archivos (conjunto de registros)

Vector (conjunto de elementos)

Registros

1.5. 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]

A continuación vemos en la siguiente figura el TDA vector con sus diferentes operaciones

Programación II 2Lic. Peregrina Carazas

Arreglo

Comparación AsignaciónEscrituraLectura

OrdenarBuscarEliminarModificarInsertarDesplegar

Page 3: TEMA1II2009

1.6. 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;

A = 25;

Dato Estructurado

Declaramos un dato compuesto o estructurado A que tendrá 5 elementos de tipo

entero.

A IdentificadorInt A[ ] = new int [5] ;A = {20,30,40,50,60};

Programación II 3Lic. Peregrina Carazas

25

20 30 40 50 60

VECTOR

quitar

insertarcambiar

asignar

sumar

buscar

Page 4: TEMA1II2009

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

Segunda Solución: MUCHAS VARIABLES u

Esta solución, resuelve el problema planteado utilizando múltiples variables.

Programación II 4Lic. Peregrina Carazas

BEGIN

Integer I, CONTReal AC, PROM, CAC = 0;I = 1;while ( I < = 50)

write (Introduzca la calificación del alumno )read C;AC = AC + CI =I +1

endwhilePROM = AC / 50;CONT = 0; I = 1;while ( I < = 50 )write (“Introduzca la calificación del alumno “)

read Cif ( C > PROM )thenCONT = CONT + 1;endifI =I +1;

enwhilewrite(“el numero de alumnos cuya calificación es mayor al promedio son “, CONT)END

Page 5: TEMA1II2009

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 5Lic. Peregrina Carazas

SEGUNDA SOLUCIONBEGIN

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

BEGINDim integer C[51]; //declara un vector C para 50 elementosinteger I;Real AC, PROM;for ( I do 1 to 50 )

write(“ Introduzca la calificacion del alumno “ ) read C [ I ] AC = AC + C [I];endforPROM = AC / 50;for ( I do 1 to 50 )

if ( C [ I ] > PROM ) then CONT ++; Endif endfor

write(“el numero de alumnos cuya calificación es mayor al promedio es “)write(CONT)

END

Page 6: TEMA1II2009

1.8. Definición De Arreglo

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

componente30 50 70 60

1 2 3 … 50Identificador

Indice

Programación II 6Lic. Peregrina Carazas

C =

Un arreglo se define como una colección finita, homogénea y ordenada de elementos.

BEGIN

Dim integer C[51]; //declara un vector C para 50 elementosinteger I;Real AC, PROM;for ( I = 1 to 50 do)

write(“ Introduzca la calificacion del alumno “) read C [ I ] AC = AC + C [I]endforPROM = AC / 50;for ( I =1 to 50 do)

if ( C [ I ] > PROM ) then CONT =CONT +1

Endif endfor

write(“el numero de alumnos cuya calificación es mayor al promedio son “)write(CONT)

END

Page 7: TEMA1II2009

1.8.1. 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];

1.8.2. 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.8.3. 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.

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

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

Programación II 7Lic. Peregrina Carazas

Page 8: TEMA1II2009

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:

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

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.

Programación II 8Lic. Peregrina Carazas

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

Page 9: TEMA1II2009

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 Mercado23 57 840 25028 60 560 28034 55 400 27524 87 700 34029 80 450 31034 65 670 32045 67 560 32548 78 570 32332 54 540 29033 50 250 30035 70 330 35038 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:

Programación II 9Lic. Peregrina Carazas

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

Page 10: TEMA1II2009

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

0 1 1 00 0 1 00 1 0 00 1 0 0

Programación II 10Lic. Peregrina Carazas

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

for (i=1 to m do)for(j=1 to n do)write(G[i][j])endforendforendproc

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]endforwrite(“EL TOTAL DE GASTOS DEL AÑO ES...”)endforendproc

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

A =

Page 11: TEMA1II2009

Ejemplo de una matriz poco densa

1.10. 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) Edad (entero) Sexo (carácter) Antigüedad (entero)

Si lo vemos gráficamente estos datos tenemos;

Programación II 11Lic. Peregrina Carazas

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 endforendproc

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

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

write(G[i][j]) endfor

endforendprocBEGIN

DIM G[100][100]  Read n Read m

MatrizPdensa (GASTOS, n, m)  Imprime (G, n,m)END

Page 12: TEMA1II2009

Nombre DireccionNom Pat Mat Calle Nro Zona Edad Sexo AntigJuanMaria

RodríguezAlvarez

SalasVargas

Av. ArceCalle 12

1231345

CentralObrajes

2529

MF

23

Si se quisiera almacenar estos datos no sería posible usar un arreglo, ya que sus componentes

deben ser todos del mismo tipo.

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

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

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.*;

Programación II 12Lic. Peregrina Carazas

fos = new DataOutputStream (new FileOutputStream ("d:\\encargados.dat", true));

fos.writeUTF (txtnombre.getText ());

fos.writeUTF (txtapellido.getText ());

fos.writeUTF (txtsemestre.getText ());

fos.writeUTF (txtpago.getText ());

fos.writeUTF (txtcarrera.getText ());

fos.writeUTF (txtmatricula.getText ())

Page 13: TEMA1II2009

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

Programación II 13Lic. Peregrina Carazas

Page 14: TEMA1II2009

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); 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");

Programación II 14Lic. Peregrina Carazas

Page 15: TEMA1II2009

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")) { txtestado = new TextField ("antiguo"); } if (uno.getSelectedItem ().equals ("otros")) { txtestado = new TextField ("otros"); } }

Programación II 15Lic. Peregrina Carazas

Page 16: TEMA1II2009

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")) { lista a = new lista (); } return true; }

public static void main (String args [])

Programación II 16Lic. Peregrina Carazas

Page 17: TEMA1II2009

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

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?

Programación II 17Lic. Peregrina Carazas

Page 18: TEMA1II2009

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.

5 7 9 4 16 19 12 14

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

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

ARCHIVOS

Programación II 18Lic. Peregrina Carazas

5 79 4

16 1219 14

A B

V

S

21 1928 18

Page 19: TEMA1II2009

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 19Lic. Peregrina Carazas