Asignatura:
Estructura de Datos
Tema:
Resolucin Prctica N 03
Docente:
Luzmila Pr Concepcin
Ciclo:
2011-II
Alumna:
Grupo:
10200113
CODIGO:
ACCION_CopiarVector()
int main(){
VARIABLES:
int A(N),B(M),i;
for(i=0;i<N;i++){
ALGORITMO:
B(i)=A(i);
INICIO
}
PARA i DESDE 0 HASTA N-1
M=N;
B(i)A(i)
getch();
ii+1
return 0;
FIN_PARA
MN
FIN_ACCION
PROB 3: Realizar un algoritmo para realizar la operacin 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;
}
}
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);
}
ACCION_MenorValor()
VARIABLES:
ENTERO menor,i
ALGORITMO:
INICIO
i0
menorA(i)
PARA i DESDE 1 HASTA N-1
SI (A(i)<menor)
menorA(i)
FIN_SI
ii+1
FIN_PARA
ESCRIBIR (menor)
FIN_ACCION
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;
}
f)
h) Salvar el arreglo
ACCION salvararreglo(ENTERO
x[max], ENTERO dimx)
ENTERO val, i
FILE *F
SI (dimx>0)
PRIME(F)
valdimx
PONER(F,val)
PARA i0 HASTA dimx-1
valx[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, i0, n
FILE *F
PONER(F)
TOMAR(F,val)
SI(NOULTIMO(F))
nval
FIN_SI
TOMAR(F,val)
MIENTRAS(NOULTIMO(F))
x[i]val
ii+1
TOMAR(F,val)
FIN_MIENTRAS
*dimxn
FIN_ACCION
PROB 8: Realizar un algoritmo y codificacin para realizar el almacn 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 N1
PARA j DESDE 0 HASTA
M
LEER (dato)
A(i)(j)dato
jj+1
FIN_PARA
ii+1
FIN_PARA
FIN_ACCION
ACCION_RecorrerColumnas()
VARIABLES:
ENTERO i,j,A(N)(M),dato
ALGORITMO:
INICIO
PARA j DESDE 0 HASTA M1
PARA i DESDE 0 HASTA
N-1
dato A(i)(j)
ESCRIBIR (dato)
ii+1
FIN_PARA
jj+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)
jj+1
FIN_PARA
ii+1
FIN_PARA
FIN_ACCION
PROB 9: Realizar un algoritmo y codificacin para calcular la suma de los elementos de dos
vectores y dar el resultado en un tercer vector.
PSEUDOCODIGO:
CODIGO:
int main(){
ACCION_CalcularSuma()
int A(N),B(M),C(L),suma,i;
VARIABLES:
if(N>M){
ENTERO A(N),B(M),C(L),suma,i
for(i=0;i<=M-1;i++){
ALGORITMO:
suma=A(i)+B(i);
INICIO
C(i)=suma;
SI (N>M)
}
PARA i DESDE 0 HASTA M-1
for(i=M;i<=N-1;i++){
sumaA(i)+B(i)
C(i)=A(i);
C(i) suma
}
ii+1
}else{
FIN_PARA
if(N<M){
PARA i DESDE M HASTA N-1
for(i=0;i<=N-1;i++){
C(i) A(i)
suma=A(i)+B(i);
ii+1
C(i)=suma;
FIN_PARA
}
SINO
for(i=N;i<=M-1;i++){
SI (N<M)
C(i)=B(i);
PARA i DESDE 0 HASTA N-1
}
sumaA(i)+B(i)
}else{
C(i) suma
for(i=0;i<N;i++){
ii+1
suma=A(i)+B(i);
FIN_PARA
C(i)=suma;
PARA i DESDE N HASTA M-1
}
C(i) B(i)
}
ii+1
}
FIN_PARA
}
SINO
PARA i DESDE 0 HASTA N
sumaA(i)+B(i)
C(i) suma
ii+1
FIN_PARA
FIN_SI
FIN_SI
FIN_ACCION
PROB 10: Realizar el algoritmo y codificacin para calcular la mediana de los nmeros de un
arreglo: la mediana es una medida estadstica que se calcula del siguiente modo:
La mediana de un arreglo de nmeros es el elemento m del arreglo tal que la mitad de los
nmeros en el arreglo son mayores que o igual a m y la mitad son menores o igual a m; si el
nmero de elementos es impar.
Si el nmero 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:
PSEUDOCODIGO:
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/21]+X[dimX/2])/2
SINO
medX[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 ms
frecuencia. Si varios nmeros estn repetidos con igual frecuencia mxima, no existe modo.
Realizar un algoritmo que acepte un arreglo de nmeros y retorne el modo o una indicacin 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;
}
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 i0, j0, val
SI (dimFx>0 y dimCx>0)
PARA i0 HASTA dimFx -1
PARA j0 HASTA dimCx-1
Y[i][j] X[i][j];
FIN_PARA
FIN_PARA
*dimFydimFx;
*dimCydimCx;
SINO
ESCRIBIR ("MATRIZ VACIA.....")
FIN_SI
FIN_ACCION
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;
}
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);
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);
f)
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);
}
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 codificacin o implementacin en lenguaje de programacin C++ para realizar
la multiplicacin 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 i0 HASTA dimFx-1
PARA j0HASTA dimCx-1
Z[i][j]0;
PARA k0 HASTA dimCx-1
Z[i][j]Z[i][j]+ X[i][k]*Y[k][j]
FIN_PARA
FIN_PARA
FIN_PARA
*dimFzdimFx
*dimCzdimCy
SINO
ESCRIBIR ("NO SE PUEDE MULTIPLICAR....")
FIN_SI
SINO
ESCRIBIR ("MATRIZ VACIA.....")
FIN_SI
FIN_ACCION
PROB 17: Realizar la codificacin o implementacin en lenguaje de programacin C++ para realizar
Ordenamiento de arreglos por el mtodo rpido 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);
}
}