ed 3
DESCRIPTION
Estructura de datsoTRANSCRIPT
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
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
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;
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
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; }
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
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
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
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
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;
} }
} }
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
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
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);
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;
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){
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
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); } }