ed 3

17
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Facultad de ingeniería de sistema e informática Escuela académica profesional de ingeniería de sistemas Asignatura: Estructura de Datos Tema: Resolución Práctica N° 03 Docente: Luzmila Pró Concepción Ciclo: 2011-II Alumna: Tania Y. López Ramos 10200113 Grupo: 3

Upload: jose-evanan

Post on 20-Feb-2016

217 views

Category:

Documents


0 download

DESCRIPTION

Estructura de datso

TRANSCRIPT

Page 1: ED 3

UNIVERSIDAD NACIONAL

MAYOR DE SAN MARCOS Facultad de ingeniería de sistema e informática

Escuela académica profesional de ingeniería de sistemas

Asignatura:

Estructura de Datos

Tema:

Resolución Práctica N° 03

Docente:

Luzmila Pró Concepción

Ciclo:

2011-II

Alumna:

Tania Y. López Ramos 10200113

Grupo:

3

Page 2: ED 3

PROB 1: Realizar un algoritmo para realizar la copia de un vector en otro vector.

PSEUDOCODIGO:

ACCION_CopiarVector()

VARIABLES:

ENTERO A(N), B(M),i

ALGORITMO:

INICIO

PARA i DESDE 0 HASTA N-1

B(i)←A(i)

i←i+1

FIN_PARA

M←N

FIN_ACCION

CODIGO:

int main(){

int A(N),B(M),i;

for(i=0;i<N;i++){

B(i)=A(i);

}

M=N;

getch();

return 0;

}

PROB 2: Realizar un algoritmo para realizar el ordenamiento de un arreglo y la búsqueda secuencial de un elemento.

ACCION_Ordenar() ALGORITMO:

INICIO PARA i DESDE 0 HASTA

N-1 PARA j DESDE i+1

HASTA N-1 SI (A(i)>A(j))

temp←A(i) A(i)←A(j) A(j)←temp FIN_SI j←j+1 FIN_PARA i←i+1

FIN_PARA FIN_ACCION

ACCION_BuscarValor() ALGORITMO:

INICIO LEER (dato) PARA i DESDE 0 HASTA N-1 SI (A(i)=dato) ESCRIBIR (A(i)) FIN_SI i←i+1 FIN_PARA FIN_ACCION

ACCION_BuscarPos() ALGORITMO:

INICIO LEER (pos) SI (pos>=N) ESCRIBIR (FUERA DE RANGO) SINO ESCRIBIR (A(pos-1)) FIN_SI FIN_ACCION

Page 3: ED 3

PROB 3: Realizar un algoritmo para realizar la operación de rotar dado un elemento que se posicione como primer elemento de un arreglo unidimensional.

void rotarvector(int x[MAX],int dimx,int pos){ int i=0,val; if(pos<dimx){ val=x[pos]; x[pos]=x[0]; x[0]=val; } }

ACCION rotarvector(ENETRO : x[MAX], dimx, pos) ENTERO i←0,val SI(pos<dimx) val←x[pos] x[pos]←x[0] x[0]←val FIN_SI FIN_ACCION

PROB 4: Realizar la codificación o implementación en lenguaje de Programación C++ para calcular el promedio de un arreglo unidimensional que tenga como máximo 30 elementos.

a) Que permita el ingreso de datos mediante lectura b) Que permita la declaración de los elementos de arreglo como una constante

void leervector(int x[MAX],int *dimx); void mostrarvector(int x[MAX],int dimx); void declararconst(int x[MAX],int *dimx); int menu(); int main() { int a[MAX],na,opc; opc=menu(); switch(opc){ case 1: system("cls"); leervector(a,&na); break; case 2: system("cls"); declararconst(a,&na); break; default: printf("Opcion no valida"); exit(0); } mostrarvector(a,na); system("pause"); return(0); } void leervector(int x[MAX],int *dimx){ int n,i,val; printf("Ingrese la dimension del vector: ");

void declararconst(int x[MAX],int *dimx){ int n,val,i; printf("Ingrese la dimension del vector: "); scanf("%d",&n); if(n<MAX){ printf("Ingrese el valor de la constante: "); scanf("%d",&val); for(i=0;i<n;i++){ x[i]=val; } *dimx=n; } else{ printf("Dimension fuera de rango"); } } void mostrarvector(int x[MAX],int dimx){ int i,val; printf("El vector es:\n\t"); for(i=0;i<dimx;i++){ val=x[i]; printf("%d ",val); } printf("\n"); } int menu(){ int op;

Page 4: ED 3

scanf("%d",&n); if(n<MAX){ for(i=0;i<n;i++){ printf("Ingrese el valor de la posicion %d: ",i+1); scanf("%d",&val); x[i]=val; } *dimx=n; } else{ printf("Dimension fuera de rango"); } }

printf("\n\t\t\t\t<<MENU>>\n\n"); printf("\t\t Leer elementos...............(1)\n"); printf("\t\t Elementos constantes.........(2)\n\n"); printf("Elija su opcion: "); scanf("%d",&op); return(op); }

PROB 5: Realizar la codificación o implementación en lenguaje de programacionC++ para realizar la búsqueda:

ACCION_MayorValor() VARIABLES:

ENTERO mayor,i ALGORITMO: INICIO i←0 mayor←A(i) PARA i DESDE 1 HASTA N-1 SI (A(i)>mayor) mayor←A(i) FIN_SI i←i+1 FIN_PARA ESCRIBIR (mayor) FIN_ACCION

ACCION_MenorValor() VARIABLES: ENTERO menor,i ALGORITMO: INICIO i←0 menor←A(i) PARA i DESDE 1 HASTA N-1

SI (A(i)<menor) menor←A(i) FIN_SI i←i+1 FIN_PARA ESCRIBIR (menor) FIN_ACCION

Page 5: ED 3

PROB 6: Realizar la codificación o implementación en lenguaje de programación C++ para realizar la búsqueda de un elemento en el arreglo unidimensional mediante los métodos de:

a) BUSQUEDA LINEAL void buscardato(int x[MAX],int dimx,int dato){ int i,val; bool hallado; hallado=false; for(i=0;i<dimx;i++){ if(x[i]==dato){ printf("%d se encuentra en la posicion %d\n",dato,i+1); hallado=true; } } if(hallado==false){ printf("%d no se encuentra en el vector\n",dato); } }

b) BUSQUEDA BINARIA void busquedabinaria(int vect[MAX],int dimx){ int izq,drcha,valor,centro,i=0; izq=0; drcha=dimx-1; printf("Introducir el valor a buscar en el vector:\n"); scanf("%d",&valor); while(drcha<=izq){ centro=(drcha+izq)/2; if(vect[centro]==valor){ printf("Se encuentra en la posicion %d",centro); } else{ if(valor<vect[centro]){ izq=centro-1; } else{ drcha=centro+1; } } } if(vect[i]==valor){ printf("El valor %d indicado se encontro en la posicion %d\n",valor,i); } else{ printf("El valor %d no se encontro en el vector\n",valor); } i=i+1; }

Page 6: ED 3

PROB 7: Realizar la codificación o implementación en Lenguaje de Programación C++ para realizar la actualización de un arreglo unidimensional. La actualización consiste en realizar las siguientes operaciones:

a) Adicionar un elemento al arreglo

ACCION insertarxPos (ENTERO x[max],

ENTERO *dimx, ENTERO pos, ENTERO

dato)

ENTERO i,n

n←*dimx

n←n+1;

i←n;

Si(i<max y pos<n)

MIENTRAS (i>pos)

x[i]←x[i-1]

i←i-1

FIN_MIENTRAS

x[pos]←dato;

*dimx←n;

SINO

ESCRIBIR ("FUERA DE

RANGO!!!");

FIN_SI

FIN_ACCION

b) Eliminar por posición un elemento en el arreglo

ACCION eliminarxPos( ENTERO

x[max], ENTERO *dimx, ENTERO pos) ENTERO i I←pos-1 MIENTRAS (i<*dimx) x[i]←x[i+1] i←i+1 FIN_MIENTRAS *dimx←*dimx-1

FIN_ACION

Page 7: ED 3

c) Insertar por valor un elemento en el arreglo

ACCION buscardatointelig (ENTERO

x[max],ENTERO dimx,ENTERO dato,

ENTERO *pos)

ENTERO i←0,j←dimx-1,n←0,a,b

A←dato

MIENTRAS (i<dimx y n==0)

b←x[i]

SI (a=b)

*pos←i

n←1

FIN_SI

i←i+1

FIN_MIENTRAS

SI(n=0)

MIENTRAS (j>=0 y n=0)

b←x[j]

SI (a>b)

n←1

*pos←j+1

FIN_SI

j←j-1

FIN_MIENTRAS

FIN_SI

FIN_ACCION

ACCION insertarxvalor( ENTERO x[max],

ENTERO *dimx, ENTERO dato)

ENTERO num1, pos, nx←*dimx

ESCRIBIR ("Ingrese el número que

desea mover: ")

LEER (num1)

buscardatointelig

(x,nx,num1,&pos)

insertarxPos(x,&nx,pos,dato)

*dimx←nx

FIN_ACCION

d) Eliminar por valor un elemento del arreglo

ACCION buscardatointelig (ENTERO

x[max],ENTERO dimx,ENTERO dato,

ENTERO *pos)

ENTERO i←0,j←dimx-1,n←0,a,b

A←dato

MIENTRAS (i<dimx y n==0)

b←x[i]

SI (a=b)

*pos←i

n←1

FIN_SI

i←i+1

FIN_MIENTRAS

SI(n=0)

MIENTRAS (j>=0 y n=0)

b←x[j]

SI (a>b)

n←1

*pos←j+1

FIN_SI

j←j-1

FIN_MIENTRAS

FIN_SI

FIN_ACCION

ACCION eliminarxvalor(ENTERO x[max],

ENTERO *dimx)

ENTERO dat, nx←*dimx,numx,lg

ESCRIBIR ("Ingrese el número que

desea eliminar: ")

LEER(numx)

buscardatointelig (x,nx,numx,&lg)

eliminarxPos(x,&nx,lg+1)

*dimx←nx

FIN_ACCION

Page 8: ED 3

e) Ordenar en orden ascendente

ACCION ordenarcreciente (ENTERO

x[max],ENTERO dimx)

ENTERO aux

PARA i←0 HASTA dimx-2

PARA j←i+1 HASTA

dimx-1

SI(x[i]>x[j])

aux←x[j]

x[j]←x[i]

x[i]←aux

FIN_SI

FIN_PARA

FIN_PARA

FIN_ACCION

f) Ordenar en orden descendente

ACCION ordenarcreciente (ENTERO x[max],ENTERO dimx)

ENTERO aux PARA i←0 HASTA dimx-2 PARA j←i+1 HASTA dimx-1

SI(x[i]<x[j]) aux←x[j] x[j]←x[i] x[i]←aux FIN_SI FIN_PARA FIN_PARA

FIN_ACCION

g) Rotar el arreglo

ACCION rotararreglo (ENTERO

x[max], ENTERO dimx)

ENTERO i, j, aux

SI (dimx>0)

j←dimx-1

PARA i←0 HASTA

dimx/2-1

aux←x[i]

x[i]←x[j]

x[j]←aux

j←j-1

FIN_PARA

SINO

ESCRIBIR ("EL VECTOR

ESTA VACIO ...")

FIN_SI

FIN_ACCION

h) Salvar el arreglo

ACCION salvararreglo(ENTERO

x[max], ENTERO dimx)

ENTERO val, i

FILE *F

SI (dimx>0)

PRIME(F)

val←dimx

PONER(F,val)

PARA i←0 HASTA dimx-1

val←x[i]

PONER(F,val)

FIN_PARA MARCAR(F)

SINO

ESCRIBIR("VECTOR

VACIO...")

FIN_SI

FIN_ACCION

Page 9: ED 3

i) Recuperar el arreglo

ACCION recuperararreglo(ENTERO x[max], ENTERO *dimx)

ENTERO val, i←0, n

FILE *F

PONER(F)

TOMAR(F,val)

SI(NOULTIMO(F))

n←val

FIN_SI

TOMAR(F,val)

MIENTRAS(NOULTIMO(F))

x[i]←val

i←i+1

TOMAR(F,val)

FIN_MIENTRAS

*dimx←n

FIN_ACCION

PROB 8: Realizar un algoritmo y codificación para realizar el almacén y recorrido de una matriz por columnas y por filas.

ACCION_Almacenar() VARIABLES: ENTERO i,j,A(N)(M),dato ALGORITMO:

INICIO LEER(N,M) PARA i DESDE 0 HASTA N-

1 PARA j DESDE 0 HASTA

M LEER (dato) A(i)(j)←dato

j←j+1 FIN_PARA i←i+1

FIN_PARA FIN_ACCION

ACCION_RecorrerColumnas() VARIABLES: ENTERO i,j,A(N)(M),dato ALGORITMO:

INICIO PARA j DESDE 0 HASTA M-

1 PARA i DESDE 0 HASTA N-1

dato← A(i)(j) ESCRIBIR (dato) i←i+1 FIN_PARA j←j+1

FIN_PARA FIN_ACCION

ACCION_RecorrerFilas() VARIABLES: ENTERO i,j,A(N)(M),dato ALGORITMO:

INICIO PARA i DESDE 0 HASTA N-1

PARA j DESDE 0 HASTA M-1

dato← A(i)(j) ESCRIBIR (dato) j←j+1 FIN_PARA i←i+1

FIN_PARA FIN_ACCION

Page 10: ED 3

PROB 9: Realizar un algoritmo y codificación para calcular la suma de los elementos de dos vectores y dar el resultado en un tercer vector.

PSEUDOCODIGO:

ACCION_CalcularSuma() VARIABLES: ENTERO A(N),B(M),C(L),suma,i ALGORITMO: INICIO SI (N>M) PARA i DESDE 0 HASTA M-1 suma←A(i)+B(i) C(i) ←suma i←i+1 FIN_PARA PARA i DESDE M HASTA N-1 C(i) ←A(i) i←i+1

FIN_PARA SINO SI (N<M)

PARA i DESDE 0 HASTA N-1 suma←A(i)+B(i) C(i) ←suma i←i+1

FIN_PARA PARA i DESDE N HASTA M-1

C(i) ←B(i) i←i+1

FIN_PARA SINO

PARA i DESDE 0 HASTA N suma←A(i)+B(i) C(i) ←suma i←i+1

FIN_PARA FIN_SI FIN_SI FIN_ACCION

CODIGO: int main(){ int A(N),B(M),C(L),suma,i; if(N>M){ for(i=0;i<=M-1;i++){

suma=A(i)+B(i); C(i)=suma;

} for(i=M;i<=N-1;i++){ C(i)=A(i); }

}else{ if(N<M){

for(i=0;i<=N-1;i++){ suma=A(i)+B(i);

C(i)=suma; } for(i=N;i<=M-1;i++){

C(i)=B(i); }

}else{ for(i=0;i<N;i++){

suma=A(i)+B(i); C(i)=suma;

} }

} }

Page 11: ED 3

PROB 10: Realizar el algoritmo y codificación para calcular la mediana de los números de un arreglo: la mediana es una medida estadística que se calcula del siguiente modo: La mediana de un arreglo de números es el elemento m del arreglo tal que la mitad de los números en el arreglo son mayores que o igual a m y la mitad son menores o igual a m; si el número de elementos es impar. Si el número de elementos es par la mediana es el promedio de los dos elementos de m1 y m2, tal que la mitad de los elementos restantes son mayores que o iguales a m1 y m2, y la mitad de los elementos son menores o iguales que m1 y m2.

CODIGO: void ordenar(int X[max],int dimX) { int i,j,aux; if(dimX>0) { for(i=0;i<dimX-1;i++) { for(j=i+1;j<dimX;j++) { if(X[i]>X[j]) { aux=X[i]; X[i]=X[j]; X[j]=aux; } } } } } float media(int X[max],int dimX) { float med; ordenar(X,dimX); if(dimX%2==0) { med=(float)(X[dimX/2-1]+X[dimX/2])/2; } else { med=X[dimX/2]; } return med; }

PSEUDOCODIGO: ACCION ordenar (ENTERO X[max], ENTERO dimX) ENTERO i, j, aux SI (dimX>0) PARA i←0 HASTA dimX-2 PARA j←i+1 HASTA dimX-1 SI (X[i]>X[j]) aux←X[i] X[i]←X[j] X[j]←aux FIN_SI FIN_PARA FIN_PARA FIN_SI FIN_ACCION ACCION media (ENTERO X[max],ENTERO dimX) REAL med ordenar(X,dimX) SI (dimX MOD 2 = 0) med←(REAL)(X[dimX/2-1]+X[dimX/2])/2 SINO med←X[dimX/2] FIN_SI RETORNAR med FIN_ACCION

Page 12: ED 3

PROB 11: el modo de un arreglo de un numero es el numero m en el arreglo que se repite con más frecuencia. Si varios números están repetidos con igual frecuencia máxima, no existe modo. Realizar un algoritmo que acepte un arreglo de números y retorne el modo o una indicación de que no existe.

void hallarmodo(int x[MAX],int dimx){ int i,j,m,mayor,y[dimx]; m=1; mayor=0; for(i=0;i<dimx;i++){ y[i]=0; } for(i=0;i<dimx;i++){ for(j=0;j<dimx;j++){ if(i!=j && x[i]==x[j]){ m=m+1; y[i]=m; } } m=1; } for(i=0;i<dimx;i++){ if(y[i]!=mayor && y[i]>mayor){ mayor=y[i]; } } return mayor; }

ACCION hallarmodo(ENTERO : x[MAX],dimx) ENTERO i,j,m,mayor,y[dimx] m←1 mayor←0 PARA i←0HASTA dimx-1 y[i]←0 FIN_PARA PARA i←0 HASTA dimx-1 PARA j←0 HASTA dimx-1 SI(i≠j y x[i]=x[j]) m←m+1 y[i]←m FIN_SI FIN_PARA m←1 FIN_PARA PARA i←0 HASTA dimx-1 SI (y[i]≠mayor y y[i]>mayor) mayor←y[i] FIN_SI FIN_PARA RETORNAR mayor FIN_ACCION

PROB 13: realizar el algoritmo para: salvar, recuperar y copiar una matriz.

ACCION copiarmatriz(ENTERO: X[max][max],dimFx, dimCx, Y[max][max], *dimFy, *dimCy) ENTERO i←0, j←0, val SI (dimFx>0 y dimCx>0) PARA i←0 HASTA dimFx -1 PARA j←0 HASTA dimCx-1 Y[i][j] ← X[i][j]; FIN_PARA FIN_PARA *dimFy←dimFx; *dimCy←dimCx; SINO ESCRIBIR ("MATRIZ VACIA.....")

FIN_SI FIN_ACCION

Page 13: ED 3

ACCION salvarmatriz (ENTERO X[max][max], ENTERO dimFx, ENTERO dimCx)

ENTERO i,j,val FILE *F

SI(dimFx>0 y dimCx>0) PRIMER(F) val←dimFx PONER (F, val) val←dimCx; PONER(F, val) PARA i←0 HASTA dimFx-1 PARA j←0HASTA dimCx-1 val← X[i][j]

PONER(F, val) FIN_PARA FIN_PARA MARCAR(F)

SINO ESCRIBIR ("MATRIZ VACIA.....")

FIN_SI FIN_ACCION

ACCION recuperarmatriz (ENTERO X[max][max],ENTERO *dimFx, ENTERO *dimCx) ENTERO fil, col, val ENTERO i←0, j←0 FILE *F PRIMER (F) TOMAR (F, val) SI (NOULTIMO(F)) fil←val FIN_SI TOMAR (F, val) SI (NOULTIMO(F)) col←val FIN_SI TOMAR (F, val) MIENTRAS (NOULTIMO(F)) X[i][j]←val j←j+1 SI (j MOD col=0) i←i+1 j←0 FIN_SI TOMAR (F, val) FIN_MIENTRAS *dimFx←fil *dimCx←col FIN_ACCION

PROB 15: Realizar la codificación de la actualización de un Matriz.

a) Mostrar Matriz void mostrarMatriz(int X[MaxF][MaxC],int dimF,int dimC){ int i,j; printf("\n MATRIZ[%d][%d]:\n",dimF,dimC); for(i=0;i<dimF;i++){ for(j=0;j<dimC;j++){ printf("%4d ",X[i][j]); } printf("\n"); } printf("\n\n"); }

b) Eliminar por Posicion void eliminarxPos(int X[MaxF][MaxC],int dimF,int dimC){ int Y[MaxF][MaxC]; int i,j,fil,col; do{ printf("Fila: "); scanf("%d",&fil); }while(fil<=0 || fil>=dimF ); do{ printf("Columna: "); scanf("%d",&col); }while(col<=0 || col>=dimC);

Page 14: ED 3

for(i=0;i<dimF;i++){ for(j=0;j<dimC;j++){ if(i!=fil-1 || j!=col-1 ){ Y[i][j]=X[i][j]; } } } X[MaxF][MaxC]=Y[MaxF][MaxC]; mostrarMatriz(X,dimF,dimC); }

c) Insertar por Valor void insertarxValor(int X[MaxF][MaxC],int dimF,int dimC){ int i,j,val,insert,hallado=0; printf("Valor a buscar: "); scanf("%d",&val); printf("Valor a insertar: "); scanf("%d",&insert); for(i=0,hallado!=1;i<dimF;i++){ for(j=0,hallado!=1;j<dimC;j++){ if(X[i][j]==val){ X[i][j]=insert; hallado==1; } } } mostrarMatriz(X,dimF,dimC); }

d) Ordenar ascendentemente por columna void ordenxascxcol(int X[MaxF][MaxC],int dimF,int dimC) { int aux,i,j,columna; printf("\n Que columna desea ordenar: "); scanf("%d",&columna); columna=columna-1; if(columna<dimC){ for(i=0;i<dimF;i++){ for(j=dimF-1;j>i;j--){ if(X[j-1][columna]>X[j][columna]){

e) Eliminar por Valor void eliminarxValor(int X[MaxF][MaxC],int dimF,int dimC){ int Y[MaxF][MaxC]; int i,j,val; printf("Valor: "); scanf("%d",&val); for(i=0;i<dimF;i++){ for(j=0;j<dimC;j++){ if(X[i][j]!=val){ Y[i][j]=X[i][j]; } } } X[MaxF][MaxC]=Y[MaxF][MaxC]; mostrarMatriz(X,dimF,dimC); }

f) Ordenar ascendentemente por fila void ordenxascxfila(int X[MaxF][MaxC],int dimF,int dimC) { int aux,i,j,fila; printf("\n Que fila desea ordenar: "); scanf("%d",&fila); fila=fila-1; if(fila<dimF){ for(i=0;i<dimC;i++){ for(j=dimC-1;j>i;j--){ if(X[fila][j-1]>X[fila][j]) { aux=X[fila][j-1]; X[fila][j-1]=X[fila][j]; X[fila][j]=aux;

Page 15: ED 3

aux=X[j-1][columna]; X[j-1][columna]=X[j][columna]; X[j][columna]=aux; } } } } else{ printf("\n ERROR::: Dimension fuera de RANGO \n"); } mostrarMatriz(X,dimF,dimC); }

} } } } else{ printf("\n ERROR::: Dimension fuera de RANGO \n"); } mostrarMatriz(X,dimF,dimC); }

g) Ordenar descendentemente por columna void ordenxdesxcol(int X[MaxF][MaxC],int dimF,int dimC){ int aux,i,j,columna; printf("\n Que columna desea ordenar: "); scanf("%d",&columna); columna=columna-1; if(columna<dimC){ for (j=dimF-1;j>0;j--){ for (i=0;i<j;i++){ if (X[i][columna] < X[i+1][columna]){ aux=X[i][columna]; X[i][columna]=X[i+1][columna]; X[i+1][columna]=aux; } } } } else{ printf("\n ERROR::: Dimension fuera de RANGO \n"); } mostrarMatriz(X,dimF,dimC); }

h) Ordenar descendentemente por fila: void ordenxdesxfila(int X[MaxF][MaxC],int dimF,int dimC) { int aux,i,j,fila; printf("\n Que fila desea ordenar: "); scanf("%d",&fila); fila=fila-1; if(fila<dimF){ for (j=dimC-1;j>0;j--){ for (i=0;i<j;i++){ if (X[fila][i] < X[fila][i+1]) { aux=X[fila][i]; X[fila][i]=X[fila][i+1]; X[fila][i+1]=aux; } } } } else{ printf("\n ERROR::: Dimension fuera de RANGO \n"); } mostrarMatriz(X,dimF,dimC); }

i) Salvar matriz void salvarMatriz(int X[MaxF][MaxC],int dimF,int dimC){ int i,j,val; FILE *F; F=fopen("Matrix.txt","w+"); if(F==NULL){

j) Recuperar Matriz void recuperarMatriz(int X[MaxF][MaxC],int dimF,int dimC){ int i,j,val; FILE *F; F=fopen("Matrix.txt","r+"); if(F==NULL){

Page 16: ED 3

printf("Error! Archivo no encontrado"); exit(0); } for(i=0;i<dimF;i++){ for(j=0;j<dimC;j++){ val=X[i][j]; fwrite(&val,sizeof(int),1,F); } } fclose(F); }

printf("Error! Archivo no encontrado"); exit(0); } j=0; fread(&val,sizeof(int),1,F); while(!feof(F)){ for(i=0;i<dimF;i++){ fread(&val,sizeof(int),1,F); X[i][j]=val; } j++; } fclose(F); }

PROB 16: realizar la codificación o implementación en lenguaje de programación C++ para realizar la multiplicación de matrices

ACION multiplicarmatiz (ENTERO X[max][max], dimFx, dimCx,Y[max][max],dimFy,dimCy, Z[max][max],*dimFz, *dimCz)

ENTERO i, j, k SI (dimFx>0 y dimCx>0) SI (dimCx=dimFy) PARA i←0 HASTA dimFx-1 PARA j←0HASTA dimCx-1 Z[i][j]←0; PARA k←0 HASTA dimCx-1 Z[i][j]←Z[i][j]+ X[i][k]*Y[k][j] FIN_PARA FIN_PARA FIN_PARA *dimFz←dimFx *dimCz←dimCy SINO ESCRIBIR ("NO SE PUEDE MULTIPLICAR....") FIN_SI

SINO ESCRIBIR ("MATRIZ VACIA.....")

FIN_SI FIN_ACCION

Page 17: ED 3

PROB 17: Realizar la codificación o implementación en lenguaje de programación C++ para realizar Ordenamiento de arreglos por el método rápido o quickshort.

void quicksort(int X[max], int dimx) { reducerrecursivo(X,dimx,1,dimx); } void reducerrecursivo(int X[max], int dimx,int ini,int fin) { int izq,der,pos,aux; bool band=true; izq=ini; der=fin; pos=ini; while(band==true) { band=false; while(X[pos]<=X[der] && pos!=der) { der=der-1; } if(pos!=der) { aux=X[pos]; X[pos]=X[der]; X[der]=aux; pos=der; while(X[pos]>=X[izq] && pos!=der) { izq=izq+1; } if(pos!=izq){ band=true; aux=X[pos]; X[pos]=X[izq]; X[izq]=aux; pos=izq; } } } if(pos-1>ini) { reducerrecursivo(X,dimx,ini,pos-1); } if(fin>pos+1) { reducerrecursivo(X,dimx,pos+1,fin); } }