separata arreglos fundamentos ejercicios

18
UNMSM ALGORITMICA I ARREGLOS PAG. 1 SEPARATA ARREGLOS : FUNDAMENTOS Y APLICACIONES Prof. Ulises ROMAN C. Junio, 2006 P[n][m][k ].

Upload: api-27121349

Post on 07-Jun-2015

565 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 1

SEPARATA

ARREGLOS : FUNDAMENTOS Y APLICACIONES

Prof. Ulises ROMAN C. Junio, 2006

P[n][m][k].

Page 2: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 2

ARREGLOS : FUNDAMENTOS Y APLICACIONES 1. DEFINICION: Según Joyanes AaGUILAR “ Un arreglo es una serie de datos del mismo tipo – estos datos se denominan elementos del arreglo” Según Julio VASQUEZ “ Un arreglo es una estructura homogénea de datos almacenados consecutivamente en memoria” Según Ulises ROMAN “ Un arreglo es una estructura de datos DINAMICOS que guardan la misma relación y tipo con los elementos que poseen” 2. CARACTERISTICAS: ❏ Conserva los valores para su posterior utilización ❏ Facilita obtener datos de la memoria ❏ Facilita el acceso eficiente a ellos ❏ Se usa para procesar una lista de datos mas de una vez. ❏ Se puede representar de manera vertical y horizontal 3. DECLARACION DE ARREGLOS: Los arreglos se pueden inicializar y declarar según su aplicación como sigue:

Int Float Double Char Otros

Identificador de Nombre: Vector V[t] A[w]

Numero de Elementos del Arreglo: [10] [20]

Page 3: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 3

Ejemplos: Int A[4]; // Declara una lista de 4 elementos Double x[100]; // Declara una lista de 100 elementos float N[2]; // Declara una lista de 2 elementos Char Cadena[6]; // Declara una lista tipo cadena de 6 elementos 4. TIPOS DE ARREGLOS: Los arreglos se clasifican por el numero de índices que soportan, así existe arreglos que usan un índices, dos índices y mas índices denominados: Uni - dimensionales (VECTORES), bi - dimensionales (MATRICES) y multi - dimensionales(POLIEDROS). 4.1. Arreglos UNI- DIMENSIONALES

Son arreglos que tienen un solo índice de acceso, también conocidos como VECTORES

Representación Gráfica:

10

14

20

4

*****

N

10

14

20

4

* * * N

V:

V[ 1 ] V[ 2 ] V[ 3 ] V[ 4 ] ***** V[ n ]

i Tamaño de (i = 1 a n ) n

X:

X[1]

X[2]

X[3]

X[4] * * *

X[n]

i Tamaño de (i = 1 a n ) n

Page 4: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 4

4.2. Arreglos BI- DIMENSIONALES Son arreglos que tienen dos índice (fila , columna) de acceso, también conocidos como TABLAS / MATRICES.

Representación Gráfica:

* *

4.3. Arreglos MULTI- DIMENSIONALES

Son arreglos que tienen tress o mas índice (dimensiones) de acceso, también conocidos como POLIEDROS.

Representación Gráfica:

M[1]

M[2] * *

M[n]

M[1] M[2] ***** M[m]

M[n][m]

M:

P[n][m][k].

P:

Page 5: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 5

5. RESUMEN DE ARREGLOS:

Las estructuras de datos permiten combinar elementos de diferentes tipos de datos como Arreglos, punteros y registros, etc. Para almacenar elementos del ¿mismo tipo de datos y de esta manera se puede usar en problemas como: ❏ Simulación de matrices ❏ Tableros de juego ( ajedrez o dama, etc.) ❏ Tratamiento de cadenas ❏ Trabajos en 3D

6. APLICACIONES CON ARREGLOS:

1. Analizar y leer el siguiente programa y escribir el resultado que genera; sabiendo que Pedido toma el valor de 5.

Inicio Entero P[6] , C[6], K, Pedido, R[6] K ← 1

Mientras (K <= 6) Hacer P[K] ← K*100 C[K] ← K*1000 K ← K + 1 Fin_mientras Leer pedido

K ← 1 J ← 6 Mientras (K <= 6) Hacer

R [k] ← P[j] * Pedido C[k] ← C[K] – R[K] K ← K – 1

Fin_mientras K ← 1 Mientras ( K <= 6) Hacer

Escritura R[K], C[K] K ← K + 1

Fin_mientras

Fin RPTA: Después analizar el algoritmo se obtiene :

Page 6: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 6

Antes de pedido

1 2

3 4 5 6

P 100 200 300 400 500 600 C 1000 2000 3000 4000 5000 6000

Después del pedido

1 2 3 4 5 6

R 3000 3000 3000 3000 3000 3000 C -2000 -1000 0 1000 2000 3000

2.¿Cuál será el contenido de tal arreglo después de la ejecución del siguiente lado for? Indice

14 26 18 25 40 32 12 6 49

for(i=1; i<=7; i++) { for(i=1;i<=7;i++) { if(b[i] > b[i+1]) {

temp=b[i+2]; b[i+2]=b[i+1]; b[i+1]=temp;

} } }

RPTA: Después de analizar el algoritmo se tubo como salida: Indice

1 2 3 4 5 6 7 8 9 14 26 25 40 32 12 18 49 6

3 . ¿Cuál es el resultado del siguiente fragmento? For(indice=0; indice<5; indice++) { cout<<C[indice]<<endl; }

Page 7: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 7

indice Char[5];

La salida de este vector no se vera como el cuadro anterior ,ya que un vector declarado como CHAR puede almacenar un solo carácter por cada espacio de memoria asignado Solo se podra indicar la primera letra de cada lugar .Tal vez la solución seria crear vectores independientes para cada lugar de procedencia ,y después mostrarlos simultáneamente. #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<stdio.h> void main() { char c[5],let; int indice; clrscr(); for(indice=1;indice<=5;indice++) { clrscr(); cout<<"\n\n\n\t\t\t**** VECTOR DE CARACTERES ****"; cout<<"\n\n\t� Ingrese los caracteres al vector"; cout<<"\n\n\tLa posicion ["<<indice<<"] ocupa :"; cin>>let; c[indice]=let; } clrscr(); cout<<"\n\n\t Los valores ingresados al vector son: "; for(indice=1;indice<=5;indice++) { cout<<"\n\n\tLa posicion ["<<indice<<"] ocupa :"<<c[indice]; } getch(); } 4. Cual es el resultado del siguiente algoritmo int A[5][7] indice1 indice2 ↓

0 1 2 3 4 LIMA CALLAO PTE.PIEDRA ANCON ATE

Page 8: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 8

For(indice1=0; indice1<5; indice1++) { For(indice2=0; indice2<5; indice2++) { cout<<”Ingrese datos en A[”<<indice1<<indice2<<”]”; cin>>A[indice1][indice2]; } RPTA: Después de analizar el algoritmo compuesta de la matiz A[indice1][indice2] Se observa que solo se puede ingresar los datos a la matriz, pero no se puede visualizar ninguna salida ya que el algoritmo esta incompleto, si se quiere

visualizar el resultado del algoritmo se tendrá que añadir dos sentencias FOR más al algoritmo. Además se observa que solo tendrá como salida desde A[0][0].hasta A[4][4];

0 1 2 3 4 5 6 7 1 2 3 4 5

Page 9: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 9

Programa: ARREGLO DETERMINA EL MAYOR DE UN VECTOR #include<iostream.h> #include<stdio.h> #include <conio.h> void main() { int A[100], mayor; int i,n; clrscr(); cout<<"ingrese numero de notas:"<<endl; cin>>n; for (i=1;i<=n;i++) { cout<<"Ingrese las nota:"<<endl; cin>>A[i]; } mayor = A[1]; for (i=2;i<=n;++i) { if (mayor<A[i]) mayor = A[i]; } cout<<"El mayor es: "<<mayor; getch(); ) **

PROGRAMAS: IMPRIMIR EL ARREGLO PERO EN ORDEN INVERTIDO #include<stdio.h> #include<conio.h> void main() { int N[16]; int K,Fila; clrscr( ); gotoxy(42,1);printf("*** ARREGLOS ***"); gotoxy(30,3);printf("DATOS"); gotoxy(60,3);printf("RESULTADO"); Fila=5; for(K=0;K<16;K=K+1) { gotoxy(30,Fila);printf("%i.-",K+12); gotoxy(35,Fila);scanf("%i",&N[K]); fflush(stdin); Fila=Fila+1; } Fila=5; for(K=15;K>=0;K=K-1) { gotoxy(60,Fila);printf("%i",N[K]); Fila=Fila+1; } getch(); }

Page 10: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 10

**

Programa : ARREGLO PARA N NOTAS #include<stdio.h> #include<conio.h> void main() { int codigo[10],i,j; char nombre[20]; char sexo[1],tecla,f,m; float nota1[3]; float nota2[3]; float nota3[3]; float promedio[9]; int k; do { clrscr(); for(i=1;i<25;i++) { gotoxy(1,i);printf("²"); gotoxy(78,i);printf("²"); } for(j=1;j<78;j++) { gotoxy(j,1);printf("²"); gotoxy(j,24);printf("²"); } k=0; while(k<=1) { gotoxy(28,3);printf("PROMEDIO DE NOTAS"); gotoxy(12,5);printf("Ingrese su Codigo:"); scanf("%d",&codigo[k]); gotoxy(12,6);printf("Ingrese su Nombre:"); scanf("%s",&nombre[k]); gotoxy(12,7);printf("Ingrese el Sexo:"); scanf("%s",&sexo[k]); if((sexo[k]=='f')||(sexo[k]=='m')) { gotoxy(12,8);printf("Ingrese nota1:"); scanf("%f",&nota1[k]); gotoxy(12,9);printf("Ingrese nota 2:");scanf("%f",&nota2[k]); gotoxy(12,10);printf("Ingrese nota 3:");scanf("%f",&nota3[k]); promedio[k]=(nota1[k]+nota2[k]+nota3[k])/3; if((promedio[k]>=10.5)&&(promedio[k]<21)) { gotoxy(15,15);printf("!FELICITACIONES!, Ud. esta Aprobado con: %0.2f",promedio[k]); } else { if(promedio[k]<10.5) { gotoxy(15,15);printf("!Estudia mas!, ud . esta desaprobado con: %0.2f",promedio[k]); }

Page 11: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 11

else { gotoxy(15,15);printf("!Por Favor!, corrija el valor de las notas"); } } } else { gotoxy(15,15);printf("ERRROR!, verifique el dato sexo que ha mostrado"); } k =k+1; } gotoxy(30,22);printf("DESEA UD. CONTINUAR(S/N)?"); tecla=getch(); }while((tecla=='s')||(tecla=='S')); } **

PROGRAMA : QUE INTERCALA DOS VECTORES A Y B EN C #include<conio.h> #include<iostream.h> void main() { int x,y,i,j; int a[10],b[10],c[20]; clrscr(); cout<<"Ingrese el numero de elementos de los vectores: "; cin>>x; cout<<"\n Ingrese Elementos del vactor A:"; for(i=0;i<x;i++) { gotoxy(5*i+1,4); cin>>a[i]; }; cout<<"\n Ingrese Elementos del vector B:"; for(i=0;i<x;i++) { gotoxy(5*i+1,7); cin>>b[i]; }; for(i=0,j=0;i<x+x;i+=2,j++) { c[i]=a[j]; c[i+1]=b[j];}; gotoxy(1,9);cout<<"El vector C es:"; for(i=0;i<x+x;i++) { gotoxy((5*i)+17,9); cout<<c[i]; }; getch(); }

PROGRAMA: PAR INSERTAR UN DATO EN UN ARREGLO #include<stdio.h>

Page 12: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 12

#include<string.h> #include<conio.h> void main() { char DISTRITO[16][30]; int k,fila,i,pos; clrscr(); gotoxy(30,2);printf("ARREGLO DISTRITO"); gotoxy(1,3);printf("Ã"); gotoxy(2,3); for(k=1;k<=77;k=k+1) { printf("Ä"); } gotoxy(78,3);printf("´"); gotoxy(5,4);printf("Ingrese distritos :"); fila=5; for(k=0;k<16;k=k+1) { gotoxy(3,fila);printf("%2i.-",k+1); gotoxy(9,fila);gets(DISTRITO[k]); fflush(stdin); fila=fila+1; } gotoxy(5,22);printf("Ingrese posici¢n a insertar :"); gotoxy(36,22);scanf("%i",&pos); gotoxy(5,23);printf("Ingrese nuevo distrito :"); for(k=0;k<16;k=k+1) { if (k==pos-1) { for(i=15;i>pos-1;i=i-1) { strcpy(DISTRITO[i],DISTRITO[i-1]);fflush(stdin);} } } gotoxy(36,23);gets(DISTRITO[pos-1]); gotoxy(45,4);printf("Resultado :"); fila=5; for(k=0;k<16;k=k+1) { gotoxy(45,fila); printf("%i.-",k+1); gotoxy(51,fila);printf("%s",DISTRITO[k]); fila=fila+1; } getch(); } **

PROGRAMA: QUE LISTA DE ALUMNAS APROBADAS #include <stdio.h> #include <conio.h> #include <stdlib.h> void main () { int codigo[20]; char nombre[20][30]; char sexo[20]; int nota1[20],nota2[20]; float promedio[20]; int k,cf,cm,dato; k=0; cf=0;

Page 13: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 13

cm=0; clrscr(); printf("Ingrese la cantidad de datos a procesar:"); scanf("%d",&dato); while(k<=dato) { printf("Ingrese el codigo:"); scanf("%d",&codigo[k]); printf("Ingrese el nombre:"); scanf("%s",&nombre[k]); printf("Ingrese el sexo:"); scanf("%s",&sexo[k]); printf("Ingrese el nota1:"); scanf("%d",&nota1[k]); printf("Ingrese el nota2:"); scanf("%d",&nota2[k]); promedio[k]=(nota1[k]+nota2[k])/2; if(promedio[k]>=10.5) { printf(" aprobados con : %f",promedio[k]); } else { printf(" Desaprobado con : %f",promedio[k]); } if (sexo[k]=='f') { cf=cf+1; printf(" numero de alumnas aprobadas:%d\n",cf); } if (sexo[k]=='m') { cm=cm+1; printf(" numero de alumnos aprobadas:%d\n",cm); } k=k+1; getch(); } } **

PROGRAMA : SUMA DE MATRICES # include<stdio.h> # include<conio.h> void main() { int m,n,i,j; clrscr(); printf(" Ingrese las dimensiones de las matrices\n"); scanf(" %d",&m); scanf(" %d",&n); int A[10][10], B[10][10], C[10][10]; clrscr();

Page 14: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 14

printf(" Ingrese los datos de la primera matriz"); for(i=0;i<m;i++) { for(j=0;j<n;j++) { gotoxy(10+(j*4),i+2); scanf("%d",&A[i][j]); }; }; printf("\n Ingrese los datos de la segunda matriz"); for(i=0;i<m;i++) { for(j=0;j<n;j++) { gotoxy(10+(j*4),m+(i+4)); scanf("%d",&B[i][j]); }; }; printf("\n La suma de matrices es"); for(i=0;i<m;i++) { for(j=0;j<n;j++) { C[i][j]=A[i][j]+B[i][j]; gotoxy(10+(j*4),(2*m)+(i+6)); printf("%d",C[i][j]); }; };getch(); } **

PROGRAMA: ENCUENTRA VALOR MAYOR, MENOR DE UNA MATRIZ #include<iostream.h> #include<stdio.h> #include <conio.h> void main() { int A[100][100], mayor,menor; int i,n,m,j; int sumafila,sumacol; clrscr(); cout<<"ingrese fila:"<<endl; cin>>n; cout<<"ingrese columna:"<<endl; cin>>m; cout<<"Ingrese los elementos de la matriz:"<<endl; for (i=1;i<=n;i++) { for (j=1;j<=m;j++) { gotoxy(10+(j*4),i+5); cin>>A[i][j]; } } // proceso de calculo mayor y menor de la matriz mayor = A[1][1]; menor=A[1][1]; for (i=2;i<=n;++i) {

Page 15: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 15

for (j=1;j<=m;j++) { if(mayor<A[i][j]) { mayor=A[i][j]; } if(menor>A[i][j]) { menor=A[i][j]; } } } gotoxy(9,17); cout<<"El elemento mayor es: "<<mayor<<endl; gotoxy(9,18); cout<<"El elemento menor es: "<<menor<<endl; // fin calculo de mayor y menor de la matriz // suma de cada fila for (i=1;i<=n;i++) { sumafila=0; for (j=1;j<=m;j++) { sumafila=sumafila+A[i][j]; } gotoxy(10+(j*4),i+10); cout<<i<<" fila: "<<"su suma es:"<<sumafila; } // fin suma de filas // suma de cada columnas for (j=1;j<=m;j++) { sumacol=0; for (i=1;i<=n;i++) { sumacol=sumacol+A[i][j]; } gotoxy(i+13,j+19); cout<<j<<" columna: "<<"su suma es:"<<sumacol; } getch(); // fin suma de columna } **

PROGRAMA : SUMA DE CADENAS USANDO ARREGLOS #include<conio.h> #include<iostream.h> #include<string.h> void main() { char A[10],B[10],C[2]=" "; clrscr(); cout<<"Ingrese el nombre:";

Page 16: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 16

cin>>A; cout<<"Ingrese el apellido:"; cin>>B; cout<<"La cadena es:"<<strcat(A,strcat(C,B)); getch(); } **

PROGRAMA: QUE ORDENA UN VECTOR EN FORMA ASCENDENTE #include<conio.h> #include<stdio.h> main() { int dato[10],temp; int n,i,j; clrscr(); gotoxy(10,5); printf("PROGRAMA QUE LEE NUMEROS Y LOS ORDENA EN FORMA ASCENDENTE"); gotoxy(24,8); printf("ingrese numeros de datos:"); scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&dato[i]); for(i=0;i<n;i++) for(j=i+1;j<n;j++) if (dato[i]>dato[j]) { temp=dato[i]; dato[i]=dato[j]; dato[j]=temp; } for(i=0;i<n;i++) { gotoxy(70,i+9); printf("%d\n",dato[i]); } getch(); } **

PROGRAMA: CALCULA SUMA MAYOR DE FILA COLUMNA DE UNA MATRIZ Y EL VALOR MAYORY MENOR DE LA MATRIZ #include<iostream.h> #include<stdio.h> #include <conio.h> void main() { int A[100][100], mayor,menor; int i,n,m,j; int sumafila,sumacol; clrscr(); cout<<"ingrese fila:"<<endl;

Page 17: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 17

cin>>n; cout<<"ingrese columna:"<<endl; cin>>m; cout<<"Ingrese los elementos de la matriz:"<<endl; for (i=1;i<=n;i++) { for (j=1;j<=m;j++) { gotoxy(10+(j*4),i+5); cin>>A[i][j]; } } // proceso de calculo mayor y menor de la matriz mayor = A[1][1]; menor=A[1][1]; for (i=2;i<=n;++i) { for (j=1;j<=m;j++) { if(mayor<A[i][j]) { mayor=A[i][j]; } if(menor>A[i][j]) { menor=A[i][j]; } } } gotoxy(10,18); cout<<"El elemento mayor es: "<<mayor<<endl; gotoxy(10,19); cout<<"El elemento menor es: "<<menor<<endl; //getch(); // fin calculo de mayor y menor de la matriz // suma de cada fila for (i=1;i<=n;i++) { sumafila=0; for (j=1;j<=m;j++) { sumafila=sumafila+A[i][j]; } gotoxy(10+(j*4),i+10); cout<<i<<" fila: "<<"su suma es:"<<sumafila; } getch(); // fin suma de filas // suma de cada columna for (j=1;j<=m;j++) { sumacol=0; for (i=1;i<=n;i++) { sumacol=sumacol+A[i][j];

Page 18: Separata Arreglos Fundamentos Ejercicios

UNMSM ALGORITMICA I

ARREGLOS PAG. 18

} gotoxy(10+(j*4),i+10); cout<<i<<" columna: "<<"su suma es:"<<sumacol; } getch(); // fin suma de filas }