Você está na página 1de 48

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

Facultad de ingeniera de sistema e informtica Escuela acadmica profesional de ingeniera de sistemas

Asignatura:
Estructura de Datos

Tema:
Resolucin Prctica N 02

Docente:

Luzmila Pr Concepcin

Ciclo:
2012-I

Alumna:
Romel Risco Angulo Romeo De la Cruz Brian Llehuac Espinoza Ever 10200126 11200180 10200213

Grupo:
1

1: Realizar un algoritmo para crear una fila secuencial con datos numricos de 1 a 50 y luego realizar un algoritmo para realizar el Recorrido en la fila secuencial. Descripcin del algoritmo Realizaremos primero 2 subprogramas, el primero ser para crear la fila secuencial y llenarla, y el segundo para recorrer la fila y mostrarla. Luego invocaremos estos subprogramas en la accin principal. Pseudocdigo:

ACCIN CREAR_ARCHIVO() Entero i, V PRIMER(F) PARA i DESDE 1 HASTA 50 HACER V i PONER(F,V) FIN_PARA MARCAR(F,L) FIN_CREAR_ARCHIVO ACCIN RECORRER_ARCH(F) Entero V,num PRIMER(F) TOMAR(F,V) MIENTRAS ~ULTIMO(F) HACER Num V ESCRIBIR( Num ) TOMAR(F,V) FIN_MIENTRAS FIN_RECORRER_ARCH ACCIN PRINCIPAL CREAR_ARCHIVO() RECORRER_ARCH(F) FIN_ACCION

Codificacin en C++:
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<conio.h> using namespace std; int a; FILE *F; void CrearArch(); void IngresarNum(); void MostrarFila(); void CrearArch() { F=fopen("DtosNum.txt","w"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); }else cout<<"Creacion exitosa"<<endl; fclose(F); } void IngresarNum() { F=fopen("DtosNum.txt","a"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } cout<<"Ingrese los 50 numeros \n"; for(int i=0;i<50;i++){ cin>>a; fwrite(&a,sizeof(a),1,F); if (ferror(F)){ cout<<"Error de escritura en archivo \n"; exit(1); } } fclose(F); }

void MostrarFila() { F=fopen("DtosNum.txt","r"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } while(!feof(F)){ fread(&a,sizeof(a),1,F); if(ferror(F)){ cout<<"Error de Lectura en archivo exit(1); } f(!feof(F)) cout<<a<<endl; } fclose(F); }

\n";

int main() { int opc; char resp; do{ system("cls"); cout<<"FILA SECUENCIAL DE NUMEROS"<<endl; cout<<"1)Crear Fila \n"; cout<<"2)Ingresar los numeros del 1 al 50 \n"; cout<<"3)Mostrar Archivo \n"; cout<<"4)Salir \n"; cin>>opc; switch (opc) { case 1: CrearArch(); break; case 2: IngresarNum(); break; case 3: MostrarFila(); break; } if( opc!=4){ cout<<"Desea continuar (S/N): "<<endl; cin>>resp; }else{ resp='N'; } }while (resp!='N'); system("PAUSE"); return(0); }

2: Realizar un algoritmo para crear una fila secuencial que contenga nmeros primos. Descripcin del algoritmo: Primero realizaremos un subprograma que detecte si un nmero es primo o no llamado PRIMO, si es primo devolver verdadero, de lo contrario devolver falso. Luego realizaremos otro subprograma para crear y llenar la fila secuencial desde el cual invocaremos al subprograma PRIMO cuando se ingrese un nmero para escribirlo en la fila o no. Finalmente invocaremos el subprograma CREAR_Y_LLENAR_ARCH en la accin principal. Pseudocdigo: ACCIN BOOLEANO PRIMO(E entero num) ENTERO i, d BOOLEANO r falso PARA i DESDE 1 HASTA num HACER SI num mod i = 0 ENTONCES dd+1 FIN_SI FIN_PARA SI d=2 ENTONCES r verdadero FIN_SI RETURN r FIN ACCION CREAR_Y_LLENAR_ARCH( ) Entero V Carcter RESP PRIMER(F) HACER ESCRIBIR (Ingrese un numero: ) LEER (V) SI PRIMO (V)=verdadero ENTONCES PONER( F,V) SI_NO ESCRIBIR (INGRESE UN NUMERO PRIMO! ) FIN_SI ESCRIBIR( Desea continuar ingresando nmeros (S/N): ) LEER( RESP) MIENTRAS RESP = S MARCAR( F , L) FIN_CREAR_Y_LLENAR__ARCH

Codificacin en C++:

#include<iostream> #include<stdio.h> #include<stdlib.h> #include<conio.h> using namespace std; int n; FILE *F; void void bool void CrearArch(); IngresarNum(); primo(int num); Salir();

void CrearArch() { F=fopen("NumPrimos.txt","w"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); }else cout<<"Creacion exitosa"<<endl; fclose(F); } bool primo(int num) { bool r; int d; r=false; d=0; for(int i=1; i<=num ;i++) { if ( num%i==0 ) d=d+1; } if(d==2) r=true; return r; }

void IngresarNum() { F=fopen("NumPrimos.txt","a"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } cout<<"Ingrese el numero: "; cin>>n; if(primo(n)){ fwrite(&n,sizeof(n),1,F); if (ferror(F)){ cout<<"Error de escritura en archivo \n"; exit(1); } }else cout<<"Ingrese un numero primo \n"; } void Salir() { cout<<"HA FINALIZADO EL MENU"<<endl; } int main() { int opc; char resp; do{ system("cls"); cout<<"FILA SECUENCIAL DE NUMEROS"<<endl; cout<<"1)Crear Fila \n"; cout<<"2)Ingresar numero primo \n"; cout<<"3)Salir \n"; cin>>opc; cout<<endl; switch (opc) { case 1: CrearArch(); break; case 2: IngresarNum(); break; case 3: Salir(); break; } if( opc!=3){ cout<<"Desea continuar (S/N): "<<endl; cin>>resp; }else resp='N'; }while (resp!='N'); system("PAUSE"); return(0); }

3: Realizar un algoritmo para realizar la copia de la fila secuencial A que contenga notas a una fila secuencial B. Descripcin del algoritmo: Realizaremos primero un subprograma para crear y llenar la fila secuencial A , luego otro subprograma para copiar la primera fila A en otra fila creada ah mismo llamada B, para finalmente invocar estos subprogramas en la accin principal. Pseudocdigo: ACCIN CREAR_ARCH_A_Y_LLENAR( ) ENTERO notas CARCTER resp PRIMER(A) HACER LEER( notas) PONER( A, notas) ESCRIBIR( Desea continuar(S/N): ) LEER( resp) MIENTRAS resp=S FIN CREAR_ARCH_A_Y_LLENAR ACCIN COPIAR_ARCH(A) ENTERO notas PRIMER(A) PRIMER( B) TOMAR(A, notas) MIENTRAS ~ULTIMO(A) HACER PONER(B, notas) TOMAR(A, notas) FIN_MIENTRAS MARCAR( B , L) FIN_COPIAR_ARCH ACCIN PRINCIPAL CREAR_ARCH_Y_LLENAR() COPIAR ARCH( A ) FIN

Codificacin en C++:
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<conio.h> using namespace std; FILE *F; FILE *H; float notas; void CrearArchivos(char *file) { F=fopen(file,"w"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); }else cout<<"Creacion exitosa"<<endl; fclose(F); } void IngresarNotas(char *f1) { char opc; do{ system("cls"); cin>>notas; F=fopen(f1,"a"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } fwrite(&notas,sizeof(notas),1,F); if (ferror(F)){ cout<<"Error de escritura en archivo A \n"; exit(1); } fclose(F); cout<<"DESEA CONTINUAR INGRESANDO(S/N): "; cin>>opc; }while (opc=='S'); }

void Copiar(char *f1,char *f2){ F=fopen(f1,"r"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } H=fopen(f2,"a"); if(H==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } while(!feof(F)){ fread(&notas,sizeof(notas),1,F); if (ferror(F)){ cout<<"Error de lectura en archivo A \n"; exit(1); } fwrite(&notas,sizeof(notas),1,H); if (ferror(H)){ cout<<"Error de escritura en archivo B \n"; exit(1); } } fclose(F); fclose(H); } int main() { int opc; char resp; char *file1= "FILA A.txt"; char *file2= "FILA B.txt"; do { system("cls"); cout<<"RELACION DE ARCHIVO A Y B"<<endl; cout<<"1)Crear Archivo A \n"; cout<<"2)Crear Archivo B \n"; cout<<"3)Ingresar notas en el archivo A \n"; cout<<"4)Copiar Archivo A al archivo B \n"; cout<<"5)Salir \n"; cin>>opc; cout<<endl; switch (opc) { case 1: CrearArchivos(file1); break; case 2: CrearArchivos(file2); break; case 3: IngresarNotas(file1); break; case 4: Copiar(file1,file2); break; } } while (opc!=5); system("PAUSE"); return(0); }

4: Realizar un algoritmo para crear una fila secuencial que contenga nmeros enteros y partir de ella obtener una fila secuencial de Nmeros Perfectos y otra fila secuencial con nmeros No Perfectos. Descripcin del algoritmo: Primero crearemos un subprograma que verifique si un nmero dado es perfecto o no. Luego realizaremos un subprograma para crear y leer la fila principal P del cual se derivan las otras filas. Despus haremos el subprograma para separar las filas invocando al subprograma NUM_PERF , los nmeros perfectos se escribirn en la fila F mientras que los no perfectos se escribirn en la fila H. Al final en la accin principal invocaremos a los subprogramas CREAR_ARCH_PRINCPAL y SEPERAR_FILA. Pseudocdigo:
ACCIN NUM_PERF (E Entero num) BOOLEANO r falso ENTERO M [num-1] ENTERO k0, s0, i, j PARA i DESDE 1 HASTA num-1 HACER SI num mod i = 0 ENTONCES M[k] i k k+1 FIN_SI FIN_PARA PARA j DESDE O HASTA k-1 HACER s s + M[k] FIN_PARA SI s=num ENTONCES r verdadero FIN_SI RETURN s FIN ACCIN CREAR_ARCH_PRINCIPAL( ) Entero V Carcter resp PRIMER(P) HACER LEER(V) PONER( P, V) ESCRIBIR( Desea continuar(S/N): ) LEER( resp) MIENTRAS resp=S FIN_HACERMIENTRAS MARCAR(P, L) FIN_CREAR_ARCH_PRINCIPAL

ACCIN SEPERAR_FILA( P) PRIMER(P) PRIMER(F) //Crear fila secuencial F donde irn los nmeros perfectos// PRIMER(H)// Crear fila secuencial H donde irn los nmeros no perfectos// TOMAR(P,V) MIENTRAS ~ULTIMO(P ) HACER SI NUN_PERF( V)=verdadero ENTONCES PONER(F, V) SI_NO PONER( H ,V) FIN_SI TOMAR( P ,V) FIN_MIENTRAS FIN_SEPARAR_FILA ACCIN PRINCIPAL CREAR_ARCH_PRINCIPAL() SEPERAR_FILA(P) FIN

Codificacin en C++:
#include<iostream> using namespace std; int n; FILE *F,*H,*J; void CrearArchivos(char *file); void IngresarNum(char *file); bool NumPerf(int n); bool NumPerf(int n) { bool r=false; int N[n-1]; int k,s; k=0; s=0; for(int i=1;i<n;i++) if(n % i == 0) { N[k]=i; k=k+1; } for(int j=0;j<k;j++) s=s+N[j]; if(s==n) r=true; return r; }

void CrearArchivos(char *file) { F=fopen(file,"w"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } else cout<<"Creacion exitosa"<<endl; fclose(F); } void IngresarNum(char *f1) { char opc; do { system("cls"); cin>>n; F=fopen(f1,"a"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } fwrite(&n,sizeof(n),1,F); if (ferror(F)){ cout<<"Error de escritura en archivo A \n"; exit(1); } fclose(F); cout<<"DESEA CONTINUAR INGRESANDO(S/N): "; cin>>opc; } while (opc=='S'); } void MostrarPerf(char *f1) { H=fopen(f1,"r"); if(H==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } while (!feof(H)) { fread(&n,sizeof(n),1,H); if (ferror(H)) { cout<<"Error al escribir el archivo"<<endl; exit(1); } if(!feof(H)) cout<<n<<endl; } }

void CopiarArchivos(char *f1,char *f2,char *f3) { F=fopen(f1,"r"); if(F==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } H=fopen(f2,"a"); if(H==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } J=fopen(f3,"a"); if(J==NULL){ cout<<"No se ha podido abrir el archivo"<<endl; exit(1); } while (!feof(F)) { fread(&n,sizeof(n),1,F); if (ferror(F)){ cout<<"Error al leer el archivo"<<endl; exit(1); } if ( NumPerf(n)==true) fwrite(&n,sizeof(n),1,H); if (ferror(F)){ cout<<"Error al escribir el archivo"<<endl; exit(1); }else{ fwrite(&n,sizeof(n),1,J); if (ferror(J)){ cout<<"Error al escribir el archivo"<<endl; exit(1); } } } fclose(F); fclose(H); fclose(J); }

int main() { int opc; char resp; char *file1= "NUMEROS.txt"; char *file2= "NUM_PERF.txt"; char *file3= "NUM_NO_PERF.txt"; do { system("cls"); cout<<"RELACION DE ARCHIVO A Y B"<<endl; cout<<"1)Crear Archivo de Numeros \n"; cout<<"2)Crear Archivo de Numeros Perfectos \n"; cout<<"3)Crear Archivo de Numeros no Perfectos \n"; cout<<"4)Ingresar numeros en el primer archivo \n"; cout<<"5)Distribur los numeros en perfecto y no perfectos \n"; cout<<"6)MOSTRAR \n"; cin>>opc; cout<<endl; switch (opc) { case 1: CrearArchivos(file1); break; case 2: CrearArchivos(file2); break; case 3: CrearArchivos(file3); break; case 4: IngresarNum(file1); break; case 5: CopiarArchivos(file1,file2,file3); break; case 6: MostrarPerf(file2); break; } if( opc!=7) { cout<<"Desea continuar (S/N): "<<endl; cin>>resp; } else resp='N'; } while (resp!='N'); system("PAUSE"); return(0); }

5: Realizar un algoritmo para intercalar dos filas secuenciales ordenadas en forma ascendente en una tercera fila secuencial que obtenga lo intercalado de ambas filas secuenciales. Descripcin del algoritmo: Primero crearemos el subprograma para crear y leer la primera fila F , luego otro subprograma para crear y leer la fila secuencial H y despus el subprograma para intercalar las filas y ordenarlas en forma ascendente. Este subprograma crear una tercera fila (P) la cual se llenara con los datos de ambos archivos pero ordenados de menor a mayor, para esto utilizaremos un arreglo unidimensional ( Array[]) el cual guardara todos los datos tanto del archivo F como del archivo H y por el mtodo de la burbuja los ordenamos ascendentemente , despus de esto recin pasamos a escribir cada elemento del arreglo a la tercera fila secuencial P. Finalmente invocaremos los subprogramas CREAR_PRIMER_ARCH, CREAR_SEGUNDO_ARCH e INTERCARLAR_ARCHIVOS en la accin principal. Pseudocdigo: ACCIN CREAR_PRIMER_ARCH() Entero V Carcter resp PRIMER(F) HACER LEER(V) PONER( F, V) ESCRIBIR( Desea continuar(S/N): ) LEER( resp) MIENTRAS resp=S FIN_HACERMIENTRAS MARCAR(F, L) FIN_CREAR_PRIMER_ARCH ACCIN CREAR_SEGUNDO_ARCH() Entero N Carcter resp2 PRIMER(H) HACER LEER(N) PONER( H, N) ESCRIBIR( Desea continuar(S/N): ) LEER( resp2) MIENTRAS resp2=S FIN_HACERMIENTRAS MARCAR(H, L) FIN_CREAR_SEGUND_ARCH

ACCIN INTERCALAR_ARCHIVOS(F,H) ENTERO V, N, dato ,D ENTERO Array[100] ENTERO j, k , aux ENTERO i 0 PRIMER(F) PRIMER(H) PRIMER(P) // CREA EL TERCER ARCHIVO , EL CUAL TENDR LO INTERCALADO// TOMAR(F,V) MIENTRAS ~ULTMO(F) HACER Dato V Array[ i ] Dato I i+1 FIN_MIENTRAS TOMAR( H, N) MIENTRAS ~ULTIMO(H) HACER Dato N Array[ i ] N I i+1 FIN_MIENTRAS PARA k desde 0 hasta i -1 HACER, incremento 1 PARA j desde 0 hasta (i-1) k -1 HACER , incremento 1 SI Array[ j ] > Array[ j+1] ENTONCES aux Array[ j ] Array[ j ] Array[ j+1 ] Array[ j +1 ] aux FIN_SI FIN_PARA FIN_PARA PARA j desde 0 hasta i-1 HACER, incremento 1 D Array[ j ] PONER( P , D) FIN_PARA MARCAR( P , L) FIN_INTERCALAR_ARCHIVOS

ACCIN PRINCIPAL CREAR_PRIMER_ARCH() CREAR_SEGUNDO_ARCH() INTERCALAR_ARCHIVOS( F ,H ) FIN

Codificacin en C++:
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<conio.h> using namespace std; FILE *F; FILE *H; FILE *I; int n,m,d,v; void void void void void CrearArchivos(char *file); Ingresar1(char *file); Ingresar2(char *file); ordenar_ascendete(); MostrarFila();

void CrearArchivos(char *file) { F=fopen(file,"w"); if ( F= NULL) { cout<<"Error al crear el archivo"<<endl; exit(1); } else cout<<"Creacion exitosa"<<endl; } void Ingresar1(char *file) { char resp1; do { system("cls"); F=fopen(file,"a"); if(F==NULL) { cout<<"Error al abrir el archivo \n"; exit(1); } cout<<"Ingrese el numero: "; cin>>n; fwrite(&n,sizeof(n),1,F); if(ferror(F)) { cout<<"Error de escritura \n"; exit(1); } cout<<"Desea continuar ingresando(S/N): \n"; cin>>resp1; }while ( resp1=='S'); fclose(F); }

void Ingresar2(char *file) { char resp2; do { system("cls"); H=fopen(file,"a"); if(H==NULL) { cout<<"Error al abrir el archivo \n"; exit(1); } cout<<"Ingrese el numero: "; cin>>m; fwrite(&m,sizeof(m),1,H); if(ferror(F)) { cout<<"Error de escritura \n"; exit(1); } cout<<"Desea continuar ingresando(S/N): \n"; cin>>resp2; }while ( resp2=='S'); fclose(H); } void Ordenar_ascendente(char *fi1, char *fi2,char *fi3) { int i=0,M[100]; int aux; F=fopen(fi1,"r"); if(F==NULL) { cout<<"Error al abrir el archivo \n"; exit(1); } H=fopen(fi2,"r"); if(H==NULL) { cout<<"Error al abrir el archivo \n"; exit(1); } fread(&n,sizeof(n),1,F); if(ferror(F)) { cout<<"Error de lectura del primer archivo \n"; exit(1); } fread(&m,sizeof(m),1,H); if(ferror(H)) { cout<<"Error de lectura del primer archivo \n"; exit(1); }

while(!feof(F)) { if(!feof(F)){ M[i]=n; i=i+1; fread(&n,sizeof(n),1,F); if(ferror(F)) { cout<<"Error de lectura del primer archivo \n"; exit(1); } } } while(!feof(H)) { if(!feof(H)){ M[i]=m; i=i+1; fread(&m,sizeof(m),1,H); if(ferror(H)) { cout<<"Error de lectura del primer archivo \n"; exit(1); } } } for(int j=0;j<i;j++) { for(int k=0;k<(i-j-1);k++) if(M[k]>M[k+1]) { aux=M[k]; M[k]=M[k+1]; M[k+1]=aux; } } I=fopen(fi3,"a"); if(I==NULL) { cout<<"Error al abrir el archivo \n"; exit(1); } for(int j=0;j<i;j++) { d=M[j]; fwrite(&d,sizeof(d),1,I); if(ferror(I)) { cout<<"Error al escribir el archivo \n"; exit(1); } } fclose(F); fclose(H); fclose(I); }

int main() { int opc; char resp; char *file1="Arch1.txt"; char *file2="Arch2.txt"; char *file3="Arch3.txt"; do { system("cls"); cout<<"INTERCALAR ARCHIVOS"<<endl; cout<<"1)Crear Archivos \n"; cout<<"2)Ingresar en Archivo1 \n"; cout<<"3)Ingresar en Archivo2 \n"; cout<<"4)Intecalar archivos en uno tercero \n"; cout<<"5)Mostrar \n"; cin>>opc; cout<<endl; switch (opc) { case 1: CrearArchivos(file1); CrearArchivos(file2); CrearArchivos(file3); break; case 2: Ingresar1(file1); break; case 3: Ingresar2(file2); break; case 4: Ordenar_ascendente(file1,file2,file3); break; case 5: MostrarFila(file3); break; } if( opc!=6) { cout<<"Volver al menu principal (S/N): "<<endl; cin>>resp; } else resp='N'; } while (resp!='N'); system("PAUSE"); return(0); system("PAUSE"); return(0); }

6: Realizar un algoritmo para realizar la unin de dos filas secuenciales en una tercera fila secuencial eliminando duplicados. Descripcin del algoritmo El algoritmo toma cada elemento de los archivos fuente y lo compara con los elementos ya existentes el archivo de destino, solo se copiara el elemento si es que este no existe ya en el archivo. Pseudocdigo
ACCION buscar_elemento ( ) INICIO ENTERO Vf, Vg, Vh BOOLEANO encontrado PRIMER (F) PRIMER (G) PRIMER (H) TOMAR (F,Vf) MIENTRAS ( Ultimo (F) ) REBOBINAR (H) TOMAR (H,Vh) encontrado falso MIENTRAS ( Ultimo (H) ) SI (Vh=Vf) ENTONCES encontrado verdadero TOMAR (H,Vh) FIN_MIENTRAS SI(encontrado=falso) PONER (H,Vf) FIN_SI TOMAR (F,Vf) FIN_MIENTRAS TOMAR (G,Vg) MIENTRAS ( Ultimo (G) ) REBOBINAR (H) TOMAR (H,Vh) encontrado falso MIENTRAS ( Ultimo (H) ) SI (Vh=Vg) ENTONCES encontrado verdadero TOMAR (H,Vh) FIN_MIENTRAS SI(encontrado=falso) PONER (H,Vg) FIN_SI TOMAR (F,Vg) FIN_MIENTRAS MARCAR (H, ) FIN

Codificacin en C++ :
#include <iostream> int main() { FILE *F,*G,*H; int Vf,Vg,Vh; bool encontrado; F=fopen("Archivo1.dat","a+"); G=fopen("Archivo2.dat","a+"); H=fopen("Archivo3.dat","a+"); if(F==NULL){ cout<<"No se Puede Abrir el archivo"<<endl; exit(1); } if(G==NULL){ cout<<"No se Puede Abrir el archivo"<<endl; exit(1); } if(H==NULL){ cout<<"No se Puede Abrir el archivo"<<endl; exit(1); } fread(&Vf,sizeof(Vf),1,F); while(!feof(F)){ rewind(H); fread(&Vh,sizeof(Vh),1,H); encontrado=false; while(!feof(H)){ if(Vh==Vf) encontrado=true; fread(&Vh,sizeof(Vh),1,H); } if(encontrado==false) fwrite(&Vf,sizeof(Vf),1,H); fread(&Vf,sizeof(Vf),1,F); } fread(&Vg,sizeof(Vg),1,G); while(!feof(G)){ rewind(H); fread(&Vh,sizeof(Vh),1,H); encontrado=false; while(!feof(H)){ if(Vh==Vg) encontrado=true; fread(&Vh,sizeof(Vh),1,H); } if(encontrado==false) fwrite(&Vg,sizeof(Vg),1,H); fread(&Vg,sizeof(Vg),1,G); } fclose(H); system("pause"); return 0; }

7: Realizar un algoritmo para realizar la bsqueda de un elemento en una fila secuencial. Descripcin del algoritmo El algoritmo pide al usuario el elemento a buscar y luego lo compara con cada uno de los elementos ya existentes del archivo, si es que lo encuentra dara un mensaje afirmativo, caso contrario dara un mensaje negativo. Pseudocdigo: ACCION buscar_elemento ( ) INICIO ENTERO elem_buscado, elem_actual BOOLEANO encontrado falso PRIMER (F) TOMAR (F, elem_actual) MIENTRAS (Ultimo (F) y encontrado=falso) SI (elem_actual=elem_buscado) encontrado verdadero ESCRIBIR (El elemento, elem_buscado) ESCRIBIR (se encuentra en el archivo) FIN_SI FIN_MIENTRAS TOMAR (F, elem_actual) SI (encontrado=falso) ESCRIBIR (El elemento, elem_buscado) ESCRIBIR (no se encuentra en el archivo) FIN_SI

FIN

Codificacin en C++ :
#include <iostream> using namespace std; int main() { int elem_buscado,elem_actual; bool encontrado=false; FILE *F; //abriendo archivo F=fopen("Archivo1.dat","a+"); //consistencia de exito de apertura de archivo if(F==NULL){ cout<<"No se Puede Abrir el archivo"<<endl; exit(1); } cout<<"Ingrese Dato a buscar: "; cin>>elem_buscado; //aqui empieza el ciclo de lectura fread(&elem_actual,sizeof(elem_actual),1,F); while(!feof(F)&&!encontrado) { if(elem_actual==elem_buscado){ encontrado=true; cout<<"\nEl elemento "<< elem_buscado; cout<<" se encuentra en el archivo\n"<<endl; } fread(&elem_actual,sizeof(elem_actual),1,F); }//aqui termina while if(!encontrado){ cout<<"\nEl elemento "<< elem_buscado; cout<<" no se encuentra en el archivo\n"<<endl; } system("pause"); return 0;

8: Realizar un algoritmo para encontrar el elemento mayor en una fila secuencial. Descripcin del algoritmo El algoritmo toma el primer elemento del archivo y lo almacena como el mayor, luego lo compara con el siguiente y si es que este es mayor que el primero, entonces tomara su lugar y as sucesivamente hasta que no queden elementos a comparar. Pseudocdigo: ACCION buscar_elemento ( ) INICIO ENTERO elem_mayor, elem_actual PRIMER (F) TOMAR (F, elem_actual) elem_mayor elem_actual MIENTRAS (Ultimo (F)) SI (elem_actual > elem_mayor) elem_mayor elem_actual FIN_SI TOMAR (F, elem_actual) FIN_MIENTRAS ESCRIBIR (El elemento mayor es:) ESCRIBIR (elem_mayor)

FIN

Codificacin en C++ :

#include <iostream> using namespace std; int main() { int elem_mayor,elem_actual; FILE *F; //abriendo archivo F=fopen("Archivo1.dat","a+"); //consistencia de exito de apertura de archivo if(F==NULL){ cout<<"No se Puede Abrir el archivo"<<endl; exit(1); } //aqui empieza el ciclo de lectura fread(&elem_actual,sizeof(elem_actual),1,F); //hacemos que el elemento mayor sea el primero elem_mayor = elem_actual; while(!feof(F)) { //comparamos si es que existe algn elemento //mayor que el primero if(elem_actual > elem_mayor){ elem_mayor = elem_actual; } fread(&elem_actual,sizeof(elem_actual),1,F); }//aqui termina while cout<<"El elemento mayor del archivo es: "; cout<<elem_mayor<<endl; system("pause"); return 0; }

9: Realizar un algoritmo para encontrar el elemento menor en una fila secuencial. Descripcin del algoritmo De manera similar al anterior, este algoritmo toma el primer elemento del archivo y lo almacena como el menor, luego lo compara con el siguiente y si es que este es menor que el primero, entonces tomara su lugar y as sucesivamente hasta que no queden elementos a comparar. Pseudocdigo: ACCION buscar_elemento ( ) INICIO ENTERO elem_menor, elem_actual PRIMER (F) TOMAR (F, elem_actual) elem_menor elem_actual MIENTRAS (Ultimo (F)) SI (elem_actual < elem_menor) elem_menor elem_actual FIN_SI TOMAR (F, elem_actual) FIN_MIENTRAS ESCRIBIR (El elemento menor es:) ESCRIBIR (elem_menor)

FIN

Codificacin en C++ :

#include <iostream> using namespace std; int main() { int elem_menor,elem_actual; FILE *F; //abriendo archivo F=fopen("Archivo1.dat","a+"); //consistencia de exito de apertura de archivo if(F==NULL){ cout<<"No se Puede Abrir el archivo"<<endl; exit(1); } //aqui empieza el ciclo de lectura fread(&elem_actual,sizeof(elem_actual),1,F); //hacemos que el elemento mayor sea el primero elem_menor = elem_actual; while(!feof(F)) { //comparamos si es que existe algn elemento //mayor que el primero if(elem_actual < elem_menor){ elem_menor = elem_actual; } fread(&elem_actual,sizeof(elem_actual),1,F); }//aqui termina while cout<<"El elemento menor del archivo es: "; cout<<elem_menor<<endl; system("pause"); return 0; }

10: Realizar un algoritmo para insertar un elemento a la fila secuencial. Descripcin del algoritmo El algoritmo es simple, solamente abre un archivo secuencial y pide al usuario un dato, el cual es insertado al final del archivo y a continuacin se procede a mostrar un mensaje de confirmacin y se cierra en archivo. Pseudocdigo:
ACCION insertar_dato ( ) INICIO ENTERO dato PRIMER (F) ESCRIBIR (Ingrese un elemento:) LEER (dato) PONER (F,dato) MARCAR (F, ) ESCRIBIR (Elemento insertado con exito ) FIN

Codificacin en C++:
#include<iostream> int main() { FILE *F; int dato; printf("Ingrese un elemento--->"); scanf("%d",&dato); F=fopen("Archivo2.dat","a+"); if(F==NULL){ printf("No se Puede Abrir el archivo\n"); exit(1); } fwrite(&dato,sizeof(dato),1,F); fclose(F); printf("Elemento insertado con exito\n"); system("pause"); return 0; }

11: Realizar un algoritmo para insertar un elemento a la fila secuencial en una posicin determinada. PRECONDICION: V= valor a insertar, Pos= posicin, Fila database.txt POSCONDICION: Fila database.txt <e1,e2,e3,,en,en+1> Descripcin del algoritmo Este algoritmo permite que el usuario ingrese un valor (en este caso un entero) y se inserte en una fila secuencial (database.txt) ya existente. Pseudocdigo: CLASE Elemento() FILA F FILA G ENTERO V PUBLICO: insertarxPos(); insertarxVal(); //ejercicio 12 eliminarxPos(); //ejercicio 13 eliminarxVal(); //ejercicio 14 FIN CLASE ACCION Elemento::InsertarxPos( ENTERO Pos) INICIO ENTERO V,i,N, hallado PRIMER (F) PRIMER (G) ESCRIBIR (Ingresar valor: ) LEER (V) hallado0 i1 TOMAR (F,N) MIENTRAS (i<>Pos y hallado=0) PONER (G,N) TOMAR (F,N) ii+1 FIN MIENTRAS FIN

SI (i=Pos) PONER (G,N) hallado1 FIN SI MIENTRAS (NO ULTIMO(F)) PONER (G,N) TOMAR (F,N) FIN MIENTRAS CERRAR (G) SI (hallado=0) ESCRIBIR (No existe dicha posicion) FIN SI

Codificacin en C++ :
#include <iostream> #include <conio.h> #include <fstream.h> class Elemento { fstream F; fstream G; int V; public: insertarxPos(); insertarxVal(); //ejercicio 12 eliminarxPos(); //ejercicio 13 eliminarxVal(); //ejercicio 14 }; void Elemento::insertarxPos(int Pos) { int i,N,hallado; F.open("database.txt",ios::in); G.open("DB.txt",ios::out); cout<<"Ingresar valor: "; cin>>V; hallado=0; i=0; F>>N; while(i!=Pos && hallado==0){ G<<N; F>>N; i=i+1; } if(i==Pos){ G<<V; hallado=1; } while(!F.eof()){ G<<N; F>>N; } G.close(); if(hallado==0){ cout<<"No existe dicha posicion..."; } }

12: Realizar un algoritmo para insertar un elemento a la fila secuencial luego de encontrarse un elemento dado.. PRECONDICION: V= valor a insertar, N=valor a buscar, Pos= posicin, Fila database.txt <e1,e2,e3,,en> POSCONDICION: Fila database.txt <e1,e2,e3,,en,en+1> Descripcin del algoritmo Este algoritmo permite que el usuario ingrese un valor (en este caso un entero) y se inserte en una posicin despus de un valor encontrado en una fila secuencial (database.txt) ya existente. Pseudocdigo: ACCION Elemento::InsertarxVal ( ENTERO N ) INICIO ENTERO V,B, hallado PRIMER (F) PRIMER (G) ESCRIBIR (Ingresar valor a insertar: ) LEER (V) hallado0 TOMAR (F,B) MIENTRAS (NO ULTIMO(F) y hallado=0) SI(N=B) PONER(G,V) hallado1 SINO PONER (G,B) FIN SI TOMAR (F,B) FIN MIENTRAS MIENTRAS (NO ULTIMO(F)) PONER (G,B) TOMAR (F,B) FIN MIENTRAS CERRAR (G) SI (hallado=0) ESCRIBIR (No existe dicho elemento) FIN SI FIN

Codificacin en C++ :

#include <iostream> #include <conio.h> #include <fstream.h>


void Elemento::insertarxVal(int N) { int V,B,hallado; F.open("database.txt",ios::in); G.open("DB.txt",ios::out); cout<<"Ingresar valor a insertar: "; cin>>V; hallado=0; F>>B; while(!F.eof() && hallado==0){ if(N==B){ G<<N; hallado=1; } else{ G<<B; } F>>B; } while(!F.eof()){ G<<B; F>>B; } G.close(); if(hallado==0){ cout<<"No existe dicho elemento..."; } }

13: Realizar un algoritmo para eliminar un elemento a la fila secuencial en una posicin determinada PRECONDICION: Pos= posicin, Fila database.txt <e1,e2,e3,,en> POSCONDICION: Fila database.txt <e1,e2,e3,,en,en+1> Descripcin del algoritmo Este algoritmo permite que el usuario elimine un valor (en este caso un entero) de acuerdo a una posicin definida por el usuario (Pos). Pseudocdigo: ACCION Elemento::EliminarxPos ( ENTERO Pos ) INICIO ENTERO V,i,N, hallado PRIMER (F) PRIMER (G) ESCRIBIR (Ingresar valor: ) LEER (V) hallado0 i1 TOMAR (F,N) MIENTRAS (i<>Pos y hallado=0) PONER (G,N) TOMAR (F,N) FIN MIENTRAS SI (i=Pos) hallado1 TOMAR (F,N) FIN SI MIENTRAS (NO ULTIMO(F)) PONER (G,N) TOMAR (F,N) FIN MIENTRAS CERRAR (G) SI (hallado=0) ESCRIBIR (No existe dicha posicion) FIN SI FIN

Codificacin en C++ :

#include <iostream> #include <conio.h> #include <fstream.h>


void Elemento::eliminarxPos(int Pos) { int i,N,hallado; F.open("database.txt",ios::in); G.open("DB.txt",ios::out); hallado=0; i=0; F>>N; while(i!=Pos && hallado==0){ G<<N; F>>N; } if(i==Pos){ hallado=1; F>>N; } while(!F.eof()){ G<<N; F>>N; } G.close(); if(hallado==0){ cout<<"No existe dicha posicion..."; } }

14: Realizar un algoritmo para eliminar un elemento dado en la fila secuencial PRECONDICION: N=valor a elminar, Fila database.txt <e1,e2,e3,,en> POSCONDICION: Fila database.txt <e1,e2,e3,,en-1> Descripcin del algoritmo Este algoritmo permite que el usuario elimine un elemento (en este caso un entero) de la fila secuencial previa bsqueda de dicho elemento usando un valor clave (N). Pseudocdigo: ACCION Elemento::eliminarxVal ( ENTERO N ) INICIO ENTERO B, hallado PRIMER (F) PRIMER (G) hallado0 TOMAR (F,B) MIENTRAS (NO ULTIMO(F) y hallado=0) SI(N=B) hallado1 SINO PONER (G,B) FIN SI TOMAR (F,B) FIN MIENTRAS MIENTRAS (NO ULTIMO(F)) PONER (G,B) TOMAR (F,B) FIN MIENTRAS CERRAR (G) SI (hallado=0) ESCRIBIR (No existe dicho elemento) FIN SI FIN

Codificacin en C++ :

#include <iostream> #include <conio.h> #include <fstream.h>


void Elemento::eliminarxVal(int N) { int B,hallado; F.open("database.txt",ios::in); G.open("DB.txt",ios::out); hallado=0; F>>B; while(!F.eof() && hallado==0){ if(N=B){ hallado=1; } else{ G<<B; } F>>B; } while(!F.eof()){ G<<B; F>>B; } G.close(); if(hallado==0){ cout<<"No existe dicho elemento"; } }

15: Realizar un algoritmo para crear una fila secuencial de Registros de alumnos, que contenga los siguientes datos: cdigo, nombre, examen1, examen2, notap, trab. Los cuales estn definidos en una estructura tipo registro denominado Alumno. PRECONDICION: POSCONDICION: Fila Alumnos.txt Descripcin del algoritmo Este algoritmo permite crear una fila secuencial (Alumnos.txt) donde se registra el cdigo, nombre y notas de los N alumnos indicados por el usuario. Pseudocdigo: REGISTRO Alumno ENTERO codigo CARCTER nombre[30] ENTERO examen1 ENTERO examen2 ENTERO notap ENTERO trab FIN REGISTRO CLASE Alum FILA F Alumno A ENTERO N Publico: Accion Crear(); FIN CLASE ACCION Alumno::Crear() ENTERO i PRIMER (F) SI (F=NULL) ESCRIBIR (No se puede abrir) SALIR FIN SI ESCRIBIR(Alumnos a ingresar: ) LEER (N) PARA i0 HASTA N-1 LEER (A.codigo) LEER (A.nombre) LEER (A.examen1) LEER (A.examen2) LEER (A.notap) LEER (A.trab) ii+1 PONER (F,A) FIN PARA MARCAR (F, ) FIN ACCION ACCION Principal() Alum Est; Est.crear (); FIN ACCION

Codificacin en C++ :
#include<iostream> #include<conio.h> #include<fstream> using namespace std; struct Alumno { int codigo; char nombre[30]; int examen1; int examen2; int notap; int trab; }; class Alu { FILE *F; Alumno A; int N; public: void crear(); }; void Alu::crear() { int i; F=fopen("alums.txt","w"); if(F==NULL){ cout<<"No se puede abrir el arhivo\n"; exit(1); } cout<<"Alumnos a ingresar: "; cin>>N; for(i=0;i<N;i++){ cout<<"\nCodigo: "; cin>>A.codigo; cout<<"Nombre: "; fflush(stdin); gets(A.nombre); cout<<"Examen 1: "; cin>>A.examen1; cout<<"Examen 2: "; cin>>A.examen2; cout<<"Nota de Practicas: "; cin>>A.notap; cout<<"Trabajo Final: "; cin>>A.trab; fwrite(&A,sizeof(A),1,F); } fclose(F); } int main() { Alu Est; Est.crear(); getch(); }

16: Realizar un algoritmo y pseudocdigo y su implementacin en un lenguaje de programacin para recorrer una fila secuencial que contenga registros. Descripcin del algoritmo Este algoritmo lee bloque a bloque el archivo registro. Pseudocdigo: Accion_recorre_fila Inicio Primer(F) Tomar(F) Mientras(Ultimo(F)) Tomar(F) Fin Mientras Marcar(F,) Fin

Codificacin en C++

#include<iostream.h> int main() { FILE *H; H=fopen("C:\\registro.dat","r"); if(H=NULL) exit(1); fread(&a,sizeof(a),1,H);//suponiendo que el archivo //secuencial fue creado previamente //con un registro a while(!feof(H)) fread(&a,sizeof(a),1,H); fclose(H); system("pause"); return 0; }

17: Se requiere registrar la informacin sobre productos de diferente clase en registros. Descripcin del algoritmo Pide ingreso de datos, para lo cual selecciona segn sea la clase ingresos correspondientes. Al final pregunta si desea escribir el ingreso que se ha hecho. Pseudocdigo:
Registro fech Inicio registro Entero dia,mes,anio Fin registro Registro producto Inicio registro Caracter nombre[30]; Real precio; Caracter clase; Real peso; Fech fecha; Caracter pais[20]; Entero cantidad; Fin registro Accion_ingreso_datos Inicio Primer(F) producto product caracter rspta escribir(Ingrese datos) escribir(Ingrese clase) leer(product.clase) escribir(Ingrese precio: ) leer(product.precio) escribir(Ingrese nombre: ) leer(product.nombre) escribir(Ingrese fecha: ) escribir(Dia: ) leer(product.fecha.dia) escribir(Mes: ) leer(product.fecha.mes) escribir(Anio: ) leer(product.fecha.anio) Caso product.clase vale 'A':escribir(ingrese peso: ") leer(product.peso) 'B':escribir(ingrese pais de procedencia:) leer(product.pais) 'C':escribir(Ingrese cantidad: ) leer(product.cantidad) fin Caso escribir(Desea grabar datos(S o N): ) leer(rspta) Si(rspta=S||rspta=s) poner(F,product) fin Si marcar(F,) fin

Codificacin en C++:
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> struct fech { int dia,mes,anio; }; struct producto { char nombre[30]; float precio; char clase; float peso; fech fecha; char pais[20]; int cantidad; }; int main() { FILE *F; producto product; char rspta; F=fopen("D:\\productos.txt","a"); if(F==NULL) exit(1); cout<<"Ingrese datos"<<endl; cout<<"Ingrese clase: "; cin>>product.clase; cout<<"Ingrese precio: "; cin>>product.precio; cout<<"Ingrese nombre: ";fflush(stdin); gets(product.nombre); cout<<"Ingrese fecha:"<<endl; cout<<"Dia: ";cin>>product.fecha.dia; cout<<"Mes: ";cin>>product.fecha.mes; cout<<"Anio: ";cin>>product.fecha.anio; switch(product.clase) { case 'A':cout<<"ingrese peso: ";cin>>product.peso;break; case 'B':cout<<"ingrese pais de procedencia:"; fflush(stdin);gets(product.pais);break; case 'C':cout<<"Ingrese cantidad: ";cin>>product.cantidad; } cout<<"Desea grabar los datos ingresados(S o N): "; cin>>rspta; if(rspta=='S'||rspta=='s') fwrite(&product,sizeof(product),1,F); fclose(F); system("pause"); return 0; }

18: Realizar un algoritmo y pseudo cdigo y su implementacin en un lenguaje de programacin para ingresar por teclado un texto y almacenarlo en una fila secuencial denominada texto. Descripcin del algoritmo Se almacena en una variable todo el texto y luego de esta se pasa tras una escritura al archivo. Pseudocdigo: Accion_ingreso_texto Inicio Primer(F) Carcter palab[100] Leer(palab) Poner(F,palab) Marcar(F,) fin

Codificacin en c++:

#include #include #include #include

<iostream.h> <stdlib.h> <stdio.h> <conio.h>

int main() { FILE *F; char palab[100]; F=fopen("D:\\texto.txt","w"); if(F==NULL) exit(1); cout<<"Ingrese el texto a guardar"<<endl; gets(palab); fwrite(&palab,sizeof(palab),1,F); fclose(F); system("pause"); return 0; }

20: Realizar la implementacin en lenguaje C++ para crear una fila secuencial de nombre DATOS para almacenar datos de tipo real pero no repetidos. Descripcin del algoritmo Se ingresa en una variable un dato que luego se corrobora si es repetido abriendo el archivo y leyendo bloque a bloque sus componentes, si es repetido no graba el nmero. Pseudocdigo:

Accion_grabar_elemento_no_repetido Inicio Primer(F) Real a,b Entero i i0 Escribir(ingrese elemento) Leer(b) Tomar(F,a) Mientras(Ultimo(F)) si(b=a) ii+1 fin si tomar(F,a) fin mientras si(i=0) poner(F,b) fin si marcar(F,) fin

Codificacin en C++:
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> #include <iomanip.h> int main() { FILE *F; float a,b; int i=0; char car; cout<<"desea crear un nuevo archivo (S/N)"<<endl; cin>>car; if(car=='S'||car=='s') { F=fopen("D:\\DATOS.txt","w"); fclose(F); } F=fopen("D:\\DATOS.txt","r+"); if(F==NULL) exit(1); cout<<"ingrese el elemeto: "; cin>>b; fread(&a,sizeof(a),1,F); while(!feof(F)) { if(b==a) i++; fread(&a,sizeof(a),1,F); } if(i==0) fwrite(&b,sizeof(b),1,F); else cout<<"el elemento esta repetido"<<endl; fclose(F); system("pause"); return 0; }

21: Realizar la implementacin en lenguaje C++ para leer una fila secuencial DATOS ya creada en 20, y calcular la suma de sus elementos. Descripcin del algoritmo Lee bloque a bloque el archivo extrayendo los datos a una variable en forma de suma. Por lo cual al final se escribe el contenido de la variable. Pseudocdigo: Accion_sumar_elementos inicio Primer(F) Real x Tomar(F,a) Mientras(Ultimo(F)) xx+a tomar(F,a) fin mientras escribir(la suma de los numeros es x) fin Codificacin en C++:
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() { FILE *F; float x; int a; fopen("D:\\DATOS.txt","r"); fread(&a,sizeof(a),1,F);//siendo "a" una variable //creada con anterioridad while(!feof(F)) { x=x+a; fread(&a,sizeof(a),1,F); } cout<<"la suma de todos los numeros es: "<<x<<endl; system("pause"); return 0; }

22: Realizar la implementacin en lenguaje c++ para realizar una copia de una fila secuencial denominada fuente a otra denominada destino. Descripcin del algoritmo Se abre dos archivos el fuente y el destino. Del primero se lee bloque a bloque y en ese proceso se escribe al destino cada bloque abierto por el fuente. Pseudocdigo: Inicio Primer(F) Primer(G) Tomar(F,a) Mientras(Ultimo(F)) Poner(G,a) Tomar(F,a) Fin mientras Marcar(G,) Fin Codificacin en C++:
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> int main() { FILE *F; FILE *G; fopen("D:\\fuente.txt","r"); fopen("D:\\destino.txt","w"); fread(&a,sizeof(a),1,F);//se sobreentiende que el //registro "a" fue creado con anterioridad en F) while(!feof(F)) { fwrite(&a,sizeof(a),1,G); fread(&a,sizeof(a),1,F); } fclose(F); fclose(G); system("pause"); return 0; }

Você também pode gostar