quasi - practicas de programacion en c

25
Tutorial creado por Quasi / Javier Fernández Rivera http://ircorion.net | [email protected] PRACTICAS DE PROGRAMACION EN C Programacion en C: Servicio de búsqueda de animales perdidos. Descripción: Realizar un programa interactivo, que te almacene en dos ficheros animales perdidos y encontrados, funcionando como base de datos. Incluir una opción que verifique aquellos animales que encuentra en la base de datos de animales perdidos y en la base de datos de animales encontrados. Resultando pues ser un animal perdido y encontrado posteriormente. Mostrar por pantalla lista de animales perdidos y luego encontrados. Aportación especial: He realizado un algoritmo para la validación de passwords, a la hora de entrar al programa. Estas passwords son almacenadas en un fichero de forma binaria, asi que su lectura es imposible (método de codificación- decodificación implantado). No sería bueno, que entrara en el sistema de búsqueda de animales, un gracioso a poner su hipotético animal perdido, sin que este lo este, reduciendo la fiabilidad del programa (finalidad de password). Objetivo de la practica: Desarrollo y trabajo con ficheros. Ejecutable: animales.exe Código C: animales.c

Upload: degarden

Post on 11-May-2015

166 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Quasi - Practicas de Programacion en C

Tutorial creado por Quasi / Javier Fernández Rivera http://ircorion.net | [email protected]

PRACTICAS DE PROGRAMACION EN C Programacion en C: Servicio de búsqueda de animales perdidos. Descripción: Realizar un programa interactivo, que te almacene en dos ficheros animales perdidos y encontrados, funcionando como base de datos. Incluir una opción que verifique aquellos animales que encuentra en la base de datos de animales perdidos y en la base de datos de animales encontrados. Resultando pues ser un animal perdido y encontrado posteriormente. Mostrar por pantalla lista de animales perdidos y luego encontrados. Aportación especial: He realizado un algoritmo para la validación de passwords, a la hora de entrar al programa. Estas passwords son almacenadas en un fichero de forma binaria, asi que su lectura es imposible (método de codificación-decodificación implantado). No sería bueno, que entrara en el sistema de búsqueda de animales, un gracioso a poner su hipotético animal perdido, sin que este lo este, reduciendo la fiabilidad del programa (finalidad de password). Objetivo de la practica: Desarrollo y trabajo con ficheros. Ejecutable: animales.exe Código C: animales.c

Page 2: Quasi - Practicas de Programacion en C

#include <stdio.h> struct { //creamos estructura char name[50]; char perso[50]; char tipo[50]; }animal; FILE *fanimal,*fae,*fap; void menu(); void addanimal(int x); void cleanbuffers(); void searchani(); void seefiles(int x); void openclosef(char c[2],int x); void getocfnull(); main() { int *password; char *code[5]; getpassword(password); cheklogin(password); getocfnull(); menu(); openclosef("c+",0); } void menu(){ char opc; do { system("CLS"); printf("\n[1] Introducir animal perdido"); printf("\n[2] Introducir animal encontrado"); printf("\n[3] Ver animales perdidos y luego encontrados"); printf("\n[4] Ver animales perdidos"); printf("\n[5] Ver animales encontrados"); printf("\n[6] Ver resultados anteriores"); printf("\n[7] Imprimir resultados"); printf("\n[*] Salir del programa"); printf("\nIntroduce una opci¢n "); opc=getch(); switch(opc){ case '1':{addanimal(1);break;}

Page 3: Quasi - Practicas de Programacion en C

case '2':{addanimal(2);break;} case '3':{searchani();break;} case '4':{seefiles(1);break;} case '5':{seefiles(2);break;} case '6':{seefiles(3);break;} case '*':{break;} default:{clrscr();printf("\nIntroduce una opci¢n valida.");getch();} } } while (opc!='*'); } void addanimal(int x){ cleanbuffers(); if(x==1){ printf("\nTipo de animal: ");gets(animal.tipo); printf("\nNombre del animal: ");gets(animal.name); printf("\nNombre del due¤o: ");gets(animal.perso); openclosef("w+",1); fwrite(&animal,sizeof(animal),1,fap);printf("ia lo hizo");getch(); openclosef("c",1); } if(x==2){ printf("\nTipo de animal: ");gets(animal.tipo); printf("\nNombre del animal: ");gets(animal.name); printf("\nNombre del due¤o: ");gets(animal.perso); openclosef("w+",2); fwrite(&animal,sizeof(animal),1,fae); openclosef("c",2); } } void searchani() { char strani1[50],strani2[50]; printf("\nProcesando busqueda..."); openclosef("r",1); openclosef("r",2); openclosef("w",3); clrscr(); while(feof(fap)==0){ rewind(fae); strcpy(strani1,"NULL");strcpy(strani2,strani1); if(fread(&animal,sizeof(animal),1,fap)){strcpy(strani1,animal.name);} while(feof(fae)==0){ if(fread(&animal,sizeof(animal),1,fae)){strcpy(strani2,animal.name);} if((strcmp(strani1,strani2)==0)&&(strcmp(strani1,"NULL")!=0)){ printf("\nAnimal: %s ~ Nombre: %s ~ Amo: %s",animal.tipo,animal.name,animal.perso); fprintf(fanimal,"\nAnimal: %s ~ Nombre: %s ~ Amo: %s",animal.tipo,animal.name,animal.perso);

Page 4: Quasi - Practicas de Programacion en C

openclosef("c+",0); break; } else{printf("\nFin de la busqueda");getch();return;} } } getch(); openclosef("c+",0); } void cleanbuffers(){fflush(stdin);fflush(stdout);} void seefiles(int x){ char strfileread[15]; if(x==1){strcpy(strfileread,"a-p.txt");} if(x==2){strcpy(strfileread,"a-e.txt");} if(x==3){system("more a-r.txt");printf("\nFin del listado");getch();return;} fanimal=fopen(strfileread,"r"); while(feof(fanimal)==0) { if(fread(&animal,sizeof(animal),1,fanimal)){printf("\nAnimal: %s ~ Nombre: %s ~ Amo: %s",animal.tipo,animal.name,animal.perso);} } printf("\nFin del listado"); openclosef("c",3); getch(); } void openclosef(char c[2],int x){ char opc[2]; if(strcmp(c,"r")==0){strcpy(opc,"r");} if(strcmp(c,"w+")==0){strcpy(opc,"w+");} if(strcmp(c,"w")==0){strcpy(opc,"w");} if(strcmp(c,"c")==0){printf("aquinta el error");getch();strcpy(opc,"c");} if(strcmp(c,"c+")==0){fclose(fap);fclose(fae);fclose(fanimal);return;} if(x==1){printf("dentro fap %s",opc);fap=fopen("a-p.txt",opc);} if(x==2){fae=fopen("a-e.txt",opc);} if(x==3){fanimal=fopen("a-r.txt",opc);} } void getocfnull(){ openclosef("r",1);openclosef("r",2);openclosef("r",3); if (fap==NULL||fae==NULL||fanimal==NULL){ printf("\nAlgun fichero no existe en su directorio."); printf("\nPresione una tecla para crearlo y continuar con el programa"); openclosef("w",1); openclosef("w",2); openclosef("w",3); } openclosef("c+",0); getch();

Page 5: Quasi - Practicas de Programacion en C

} void cheklogin(int *password){ char c; int userpass; system("CLS"); printf("\n\n\n\n\n\n\n\n\n Enter password: "); scanf("%d",&userpass); textbackground(0);textcolor(4); if(*password!=userpass){ system("CLS");printf("\n\n");cprintf(" User_Password invalido"); printf("\n\n\n\n\n\n\n\n\n"); exit(0); } void getpassword(int *password){ int num; ftienda=fopen("password.$cb","rb"); if(ftienda==NULL){printf("\nERROR al abrir el fichero");} num=getw(ftienda); *password=num; fclose(ftienda); } void setpassword() { int num; system("CLS"); ftienda=fopen("password.$cb","wb"); if(ftienda==NULL){printf("\nERROR al abrir el fichero");} printf("\nDebe ser un numero entero"); printf("\nNo debe empezar por cero\n"); printf("\nIntroduce la nueva password: "); scanf("%d",&num); putw(num,ftienda); fclose(ftienda); } void final() { char c; clrscr(); _setcursortype(0); textcolor(11); printf("\n\n\n\n\n\n\n\n"); cprintf(" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ "); printf("\n"); cprintf(" ÉÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͻÿ "); printf("\n"); cprintf(" º ²²²±±±°°° juego de los dados °°°±±±²²² º³³ "); printf("\n");

Page 6: Quasi - Practicas de Programacion en C

cprintf(" ÌÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ³³ "); printf("\n"); cprintf(" º ¸2001 by Quasi ³ [email protected] º³³ "); printf("\n"); cprintf(" º www.ircorion.cjb.net ³ [email protected] º³³ "); printf("\n"); cprintf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÁÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÁÙ "); printf("\n\n\n\n\n\n"); system("CLS"); _setcursortype(2); getch(); exit(0); }

Page 7: Quasi - Practicas de Programacion en C

Programacion en C: Juego del RATON. Descripción: Realizar un juego que se basa en un raton que se encuentra en una isla. Esta isla esta rodeada de agua, y solo pose dos puentes. Al raton puede sucederle 3 cosas:

1. Que se muera de hambre 2. Que se salve por el puente 3. Que se ahogue

Los movimientos del ratón serán generados aleatoriamente, al igual que los posicionamientos de los dos puentes que debe haber. La isla por lo general será de un tamaño prefijado por el usuario. Aportación especial: Muestreo por pantalla de imágenes. Mediante el algoritmo usado se cargan y leen en buffers imágenes en formato PCX y BMP. Para ello me he servido de una librería especializada en la realización de graficos y juegos para C, especial para el compilador DJGPP (allegro.h), los ejemplos que aporta la propia librería me han servido de mucha ayuda. Objetivo de la practica: Tratamiento de arrays o matrices bidimensionales. Ejecutable: raton.exe Código C: raton.c

Page 8: Quasi - Practicas de Programacion en C

#include <stdio.h> //libreria estandar stout-stdin #include <stdlib.h> #include "allegro.h" //libreria para modo grafico #include <dos.h> void play(); //juego void cleanisla(); //limpia los caracteres grabados en isla void addp(); //algoritmo para a¤adir puentes void movie(int x); //funcion de posicionamiento del raton void seeisla(); //visualiza/muestra por stdout la isla void final(int x); //declara el tipo de final de juego void verimgraton(int w); //muestra por stdout imgs int securep2(int x, int y); //algoritmo declarativo de un puente void about(); //creditos, about... char isla[21][21]; //mapa de isla int islaf,islac; //dimensiones de isla int posrx,posry; //posiciones del raton int nmovie; //numero de movimientos antes de morir de hambre main () { //funcion principal play(); //comenzando el juego } void play(){ int x,y,p1,p2,center,pos,nmovie2; //declarando var necesarias cleanisla(); //eliminando caracteres de isla for(x=0;x<=3;x++){verimgraton(x);} //imgs load-game verimgraton(4); do { printf("\nDimensi¢n de la isla (10,15,20)?: "); //estableciendo dimensiones scanf("%d",&islac); printf("\nMovimientos del raton (20, 40, 80)?: "); scanf("%d",&nmovie); }while(islac>20||islac<5||nmovie<1); //anti manos largas ;) islaf=(islac+(islac/2)); for(x=0;x<=islac;x++){isla[0][x]='±';} //rellenando isla for(x=0;x<=islac;x++){isla[islac][x]='±';} for(x=0;x<=islac;x++){isla[x][0]='±';} for(x=0;x<=islac;x++){isla[x][islac]='±';} center=islac/2;

Page 9: Quasi - Practicas de Programacion en C

posrx=posry=center; isla[center][center]='¾'; //estableciendo posicion central del raton seeisla(); //mostrando isla _setcursortype(0); addp(); //a¤adiendo puentes printf("\nIsla generada"); printf("\nDurante el transcurso del juego no pulse niguna telca."); printf("\nPresione una tecla para comenzar...");getch(); for(x=nmovie;x>0;x--){movie(x);} //realizando movimientos clrscr(); final(3); //raton murio de hambre, finalizando... } void cleanisla() { int x,y; for(x=0;x<=20;x++){ //recorriendo isla y eliminando caracteres printf("\n"); for(y=0;y<=20;y++){isla[x][y]=' ';} } } void addp() { int p0,p,x,y; for(y=0;y<=1;y++){ //hacer numero de puentes... x=1; while(x!=0){ //mientras no sean generados... srandom(time(1)); //semilla temporal _aleatoriedad p0=random()%4; //decidiendo lado para puente p=random()%islac; //decidiendo casilla para puente if((p0==0)&&(securep2(0,p)!=1)){isla[0][p]='Û';x--;} //viendo si ia hay if((p0==1)&&(securep2(islac,p)!=1)){isla[islac][p]='Û';x--;} if((p0==2)&&(securep2(p,0)!=1)){isla[p][0]='Û';x--;} if((p0==3)&&(securep2(p,islaf)!=1)){isla[p][islac]='Û';x--;} } } } int securep2(int x, int y){ if (isla[x][y]=='Û'){return 1;} //examinando si ya existe puente else {return 0;} } void movie(int x){ int num; srandom(time(0)); num=random()%4; //deciendo direccion de movimiento isla[posrx][posry]=' '; if(num==0){ posrx--; } //realizando movimientos... if(num==1){ posrx++; } if(num==2){ posry--; }

Page 10: Quasi - Practicas de Programacion en C

if(num==3){ posry++; } if(isla[posrx][posry]=='Û'){final(1);} //raton se salva por el puente if(isla[posrx][posry]=='±'){final(2);} //raton muere ahogado isla[posrx][posry]='¾'; //estableciendo posicion del raton clrscr(); textcolor(11);cprintf("Muerte por hambre: [%d]",x); textcolor(4);if (x<10){cprintf(" > FAME: ¤an-¤an, me vo a morir....");}printf("\n"); textcolor(11);cprintf("Posicion en isla: [%d]-[%d]",posrx,posry);printf("\n"); textcolor(14); seeisla(); //visualizando isla delay(200); //retardo, (100miliS) interactividad } void seeisla(){ int x,y; //recorriendo array para ver isla for(x=0;x<=20;x++) { printf("\n"); for(y=0;y<=20;y++){ printf("%c",isla[x][y]); } } } void final(int x){ clrscr(); //declarando tipo de final textcolor(4); printf("\n\n\n\n\n\n\n\n\n"); if(x==1){cprintf(" >El raton se ha salvado");getch();;verimgraton(6);} if(x==2){cprintf(" >Que el raton se ta glu-glu-glu");getch();verimgraton(5);} if(x==3){cprintf(" >El raton la palmo por fame");getch();verimgraton(5);} about(); exit(0); } void verimgraton(int w){ BITMAP *the_image; //declarando puntero de tipo imagenBIT PALLETE the_pallete; //declarando paleta de color disponible if(w==0){the_image=load_bitmap("imgs/raton1.bmp",the_pallete);} //leyendo if(w==1){the_image=load_bitmap("imgs/raton2.bmp",the_pallete);} //cargando if(w==2){the_image=load_bitmap("imgs/raton3.bmp",the_pallete);} //fichero if(w==3){the_image=load_bitmap("imgs/raton4.bmp",the_pallete);} //de imagen if(w==4){the_image=load_bitmap("imgs/logoraton.pcx",the_pallete);} if(w==5){the_image=load_bitmap("imgs/raton-1.pcx",the_pallete);} if(w==6){the_image=load_bitmap("imgs/raton0.pcx",the_pallete);} install_keyboard(); set_gfx_mode(GFX_VGA,320,200,0,0); //cargando modo grafico en GFX_VGA set_pallete(the_pallete); //seleccionando paleta para img bit /*blit muestra por pantalla en posicion w y h la img cargada con el puntero

Page 11: Quasi - Practicas de Programacion en C

the_imagen y con una resolucion marcada con la paleta "the_pallete"*/ blit(the_image,screen,0,0,(SCREEN_W-the_image->w)/2,(SCREEN_H-the_image->h)/2,the_image->w,the_image->h); destroy_bitmap(the_image); //liberando buffers destruyendo vars y punteros readkey(); //img estatica hasta pulsar una tecla... allegro_exit(); //cerrando modo en funcion de allegro } void about() { char c; clrscr(); _setcursortype(0); //haciendo desaparecer el cursor textcolor(11); //cambiando modo texto el color printf("\n\n\n\n\n\n\n\n"); cprintf(" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ "); printf("\n"); cprintf(" ÉÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͻÿ "); printf("\n"); cprintf(" º ²²²±±±°°° RaToN Game by Quasi °°°±±±²²² º³³ "); printf("\n"); cprintf(" ÌÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ³³ "); printf("\n"); cprintf(" º ¸2001 by Quasi ³ [email protected] º³³ "); printf("\n"); cprintf(" º www.ircorion.cjb.net ³ [email protected] º³³ "); printf("\n"); cprintf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÁÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÁÙ "); printf("\n\n\n\n\n\n"); c=getchar(); c=getchar(); system("CLS"); _setcursortype(2); //volviendo a reparecer el cursor exit(0); //facilitando salida sin error }

Page 12: Quasi - Practicas de Programacion en C

Programación en C: Gestión dinámica en memoria. Descripción: Realizar programas que nos muestre el funcionamiento básico de las principales técnicas de gestión dinámica de memoria: Pilas, listas enlazadas, listas doblemente enlazadas. Aportación especial:

1. He realizado un menú bat, para que sea mas llevadera la navegación por los programas relacionados con los métodos de gestión dinámica de memoria

2. Además, he programado el apartado correspondiente a las colas.

3. En las listas enlazadas y doblemente enlazadas he implementado un método de mensajes automatizados que simplifican mucho el código y mejora la presentación por pantalla.

Objetivo de la practica: Tratamiento y desarrollo de la metodología de programación para la gestión dinámica de memoria Ejecutable: menu.bat Código C: *.c

Page 13: Quasi - Practicas de Programacion en C

//PILAS #include <stdio.h> void menu(); void addelem(int nume); void delelem(); void savelefile(); void getlefile(); struct snum { int num; struct snum *back; }*nue,*act; FILE *pilasfile; main () { nue=act=NULL; menu(); system("CLS"); _setcursortype(1); } void menu() { char opc; int nume; do { system("CLS"); _setcursortype(1); //cambiando el tipo de cursor textcolor(1); //cambiando color en letra textbackground(7); //cambiando color de fondo letra gotoxy(0,10); //posicionando cursor cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ0ÍXÍ»ÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº --> Pilas ºÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍ»ÛÛ");printf("\n"); cprintf("ÛÛº [1] º > Introducir un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [2] º > Eliminar un elemento º | ºÛÛ");printf("\n");

Page 14: Quasi - Practicas de Programacion en C

cprintf("ÛÛº [] º > Buscar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [] º > Mostrar pila º | ºÛÛ");printf("\n"); cprintf("ÛÛº [5] º > Almacenar pila en file º | ºÛÛ");printf("\n"); cprintf("ÛÛº [6] º > Recuperar pila del file º | ºÛÛ");printf("\n"); cprintf("ÛÛº º º ºÛÛ");printf("\n"); cprintf("ÛÛº [*] º >> Salir del programa º | ºÛÛ");printf("\n"); cprintf("ÛÛÈÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍ͹ÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛº Introduce una opci¢n...[ ] ºÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); gotoxy(45,22); opc=getch(); //tratamiento de opciones posibles switch (opc) { case '1':{system("CLS");printf("\nNumero a introducir: ");scanf("%d",&nume);addelem(nume);break;} case '2':{system("CLS");delelem();break;} case '3':{break;} case '4':{break;} case '5':{system("CLS");savelefile();break;} case '6':{system("CLS");getlefile();break;} case '*':{break;} default:{system("CLS");printf("\nIntroduce una opci¢n valida");getch();} } }while(opc!='*'); } void addelem(int nume){ nue=(struct snum*)malloc(sizeof(struct snum)); nue->num=nume; if(act==NULL){nue->back=NULL;act=nue;} else { nue->back=act; act=nue; } } void delelem() { if(act==NULL){return;} nue=act; printf("\nEliminado elemento [%d]",nue->num); act=act->back; getch(); free(nue); } void savelefile(){ nue=act;

Page 15: Quasi - Practicas de Programacion en C

pilasfile=fopen("pilas- file.txt","w"); while(nue!=NULL){ printf("\nGrabando[%d]...",nue->num); fprintf(pilasfile,"\n%d",nue->num); sleep(1); nue=nue->back; } printf("\nFin de grabado en fichero"); fclose(pilasfile); getch(); } void getlefile() { int numef=1,x=0,y=0,var,*listnum; nue=act=NULL; printf("\nObteniendo datos del fichero...\n"); pilasfile=fopen("pilas- file.txt","r"); while(feof(pilasfile)==0){fscanf(pilasfile,"%d",&var);numef++;} listnum=(int*)malloc(numef*sizeof(int)); rewind(pilasfile);x=numef; while(feof(pilasfile)==0){ x--; fscanf(pilasfile,"%d",(listnum+x)); printf("\n>>%d",*(listnum+x)); } for(y=1;y<numef;y++){addelem(*(listnum+y));} getch(); return; addelem(var); fclose(pilasfile); getch(); } //COLAS #include <stdio.h> void menu(); void addelem(int x); void delelem(); void seelist(int x,int y); void savelefile(); void getlefile(); struct snum { int num; struct snum *next; }*nue,*act,*fin;

Page 16: Quasi - Practicas de Programacion en C

FILE *colasfile; main () { nue=act=fin=NULL; menu(); system("CLS"); } void menu() { char opc; int num; do { system("CLS"); textcolor(1); //cambiando color en letra textbackground(7); //cambiando color de fondo letra gotoxy(0,10); //posicionando cursor cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ0ÍXÍ»ÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº --> Colas ºÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍ»ÛÛ");printf("\n"); cprintf("ÛÛº [1] º > Introducir un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [2] º > Eliminar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [3] º > Buscar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [4] º > Mostrar cola º | ºÛÛ");printf("\n"); cprintf("ÛÛº [5] º > Almacenar cola en file º | ºÛÛ");printf("\n"); cprintf("ÛÛº [6] º > Recuperar cola del file º | ºÛÛ");printf("\n"); cprintf("ÛÛº º º ºÛÛ");printf("\n"); cprintf("ÛÛº [*] º >> Salir del programa º | ºÛÛ");printf("\n"); cprintf("ÛÛÈÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍ͹ÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛº Introduce una opci¢n...[ ] ºÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); gotoxy(45,22); opc=getch(); //tratamiento de opciones posibles switch (opc) { case '1':{system("CLS");printf("\nNumero a introducir: ");scanf("%d",&num);addelem(num);break;} case '2':{system("CLS");delelem();break;} case '3':{system("CLS");printf("\nNumero a buscar: ");scanf("%d",&num);seelist(1,num);break;} case '4':{system("CLS");seelist(0,0);break;} case '5':{system("CLS");savelefile();break;} case '6':{system("CLS");getlefile();break;} case '*':{break;} default:{system("CLS");printf("\nIntroduce una opci¢n valida");getch();} }

Page 17: Quasi - Practicas de Programacion en C

}while(opc!='*'); } void addelem(int x){ nue=(struct snum*)malloc(sizeof(struct snum)); nue->num=x; nue->next=NULL; if(fin==NULL){fin=act=nue;} else{fin->next=nue;fin=nue;} } void delelem() { if(act==NULL){return;} nue=act; act=act->next; free(nue); } void seelist(int x,int y){ int result=0; nue=act; while (nue!=NULL){ if(x==0){printf("\nNumero:[%d]",nue->num);} if(x==1&&nue->num==y){result=nue->num;break;} nue=nue->next; } if(x==1){ if(result>0){printf("\nNumero encontrado: [%d]",result);} else{printf("\nNumero no encontrado");} } getch(); } void savelefile(){ nue=act; colasfile=fopen("colas-file.txt","w"); while(nue!=NULL){ printf("\nGrabando[%d]...",nue->num); fprintf(colasfile,"\n%d",nue->num); sleep(1); nue=nue->next; } printf("\nFin de grabado en fichero"); fclose(colasfile); getch(); } void getlefile() { int var;

Page 18: Quasi - Practicas de Programacion en C

printf("\nObteniendo datos del fichero...\n"); colasfile=fopen("colas-file.txt","r"); while(feof(colasfile)==0){ fscanf(colasfile,"%d",&var); printf("\nNumero: %d",var); } fclose(colasfile); getch(); } //LISTAS ENLAZADAS #include <stdio.h> void menu(); //menu de opciones void addelem(int x); //a¤ade elementos en le void delelem(int x); //elimina elementos void seelist(int x,int y); //visualizando o buscando elemto/s void savelefile(); //grabando en fichero void getlefile(); //recuperando del fichero void text(char txt[100]); //mensajes interactivos internos void final(); //creditos, about, ... struct snum { int num; //reservando espacio para numero entero struct snum *next; //creando puntero (flecha) }*nue,*act,*ini,*fin; //creando punteros a usar en le FILE *lefile; //puntero para gestion de files main () { //funcion principal nue=act=ini=fin=NULL; //punteros a null para evitar errores menu(); //llamando al menu de opciones final(); //finalizando con about... } void menu() { char opc; int num; do { system("CLS"); _setcursortype(1); //cambiando el tipo de cursor textcolor(1); //cambiando color en letra textbackground(7); //cambiando color de fondo letra gotoxy(0,10); //posicionando cursor cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ0ÍXÍ»ÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº --> Listas enlazadas ºÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍ»ÛÛ");printf("\n"); cprintf("ÛÛº [1] º > Introducir un elemento º | ºÛÛ");printf("\n");

Page 19: Quasi - Practicas de Programacion en C

cprintf("ÛÛº [2] º > Eliminar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [3] º > Mostrar lista enlazada º | ºÛÛ");printf("\n"); cprintf("ÛÛº [4] º > Buscar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [5] º > Almacenar lista en file º | ºÛÛ");printf("\n"); cprintf("ÛÛº [6] º > Recuperar lista del file º | ºÛÛ");printf("\n"); cprintf("ÛÛº º º ºÛÛ");printf("\n"); cprintf("ÛÛº [*] º >> Salir del programa º | ºÛÛ");printf("\n"); cprintf("ÛÛÈÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍ͹ÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛº Introduce una opci¢n...[ ] ºÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); gotoxy(45,22); opc=getch(); //tratamiento de opciones posibles switch (opc) { case '1':{system("CLS");printf("\nNumero a introducir: ");scanf("%d",&num);addelem(num);break;} case '2':{system("CLS");printf("\nNumero a eliminar: ");scanf("%d",&num);delelem(num);break;} case '4':{system("CLS");printf("\nNumero a buscar: ");scanf("%d",&num);seelist(1,num);break;} case '3':{system("CLS");seelist(0,0);break;} case '5':{system("CLS");savelefile();break;} case '6':{system("CLS");getlefile();break;} case '*':{break;} default:{system("CLS");printf("\nIntroduce una opci¢n valida");getch();} } }while(opc!='*'); } void addelem(int x){ nue=(struct snum*)malloc(sizeof(struct snum)); //creamos espacio predefinido nue->num=x; //le metemos el numero nue->next=NULL; //que apunte a null if (act==NULL) {act=nue;} //lista vacia, pon num el primero else { if(nue->num<=act->num){nue->next=act;act=nue;} //si es menor poner antes else{ //si es mayor recorrer ini=fin=act; //algoritmo de recorrido secuencial while(nue->num>fin->num&&fin!=NULL){ if(fin==act){fin=fin->next;} else{ini=ini->next;fin=fin->next;} } ini->next=nue; nue->next=fin; } } text("Elemento a¤adido..."); }

Page 20: Quasi - Practicas de Programacion en C

void delelem(int x) { if(act==NULL){text("La lista se encuentra vacia");return;} //no hay le if(act->num==x){ //si es el elemento 1, eliminalo ini=act; act=act->next; free(ini); } else { //si-no recorre y elimina ini=fin=act; while(fin->num!=x&&fin!=NULL){ if(fin==act){fin=fin->next;} else{ini=ini->next;fin=fin->next;} } if(fin==NULL){text("No se ha encontrado el elemento");return;}//no hubo num ini->next=fin->next; free(fin); } text("Elemento eliminado"); } void seelist(int x,int y){ //funcion que lista o busca en funcion de argumento int result=0; nue=act; while (nue!=NULL){ //recorriendo le if(x==0){printf("\nNumero:[%d]",nue->num);result=1;} //listando elementos if(x==1&&nue->num==y){printf("Numero encontrado: [%d]",nue->num);result=1;break;} nue=nue->next ; } if(result==0){text("Numero no encontrado");} text("Fin del listado"); } void savelefile(){ nue=act; lefile=fopen("le-file.txt","w"); //abriendo file para kribir while(nue!=NULL){ printf("\nGrabando[%d]...",nue->num); fprintf(lefile,"\n%d",nue->num); //escribiendo en file sleep(1); //retardo de un seg nue=nue->next; } text("Grabaci¢n en fichero finalizada"); fclose(lefile); } void getlefile() {

Page 21: Quasi - Practicas de Programacion en C

int var; nue=act=ini=fin=NULL; printf("\nObteniendo datos del fichero\n"); lefile=fopen("le-file.txt","r"); //modo lectura while(feof(lefile)==0){ fscanf(lefile,"%d",&var); //obteniendo datos printf("\n>>> Numero: %d",var); addelem(var); //re- insertandolos en le } fclose(lefile); text("Fin de lectura del fichero"); } void text(char txt[100]){ //funcion para mensajes automatizados _setcursortype(0); textbackground(1);textcolor(14);printf("\n"); cprintf(" MSG: >>> %50s ",txt);getch(); _setcursortype(2); } void final() { //funcion credit, about... system("CLS"); _setcursortype(0); textbackground(0); textcolor(11); printf("\n\n\n\n\n\n\n\n"); cprintf(" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ "); printf("\n"); cprintf(" ÉÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͻÿ "); printf("\n"); cprintf(" º ²²²±±±°°° Listas enlazadas °°°±±±²²² º³³ "); printf("\n"); cprintf(" ÌÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ³³ "); printf("\n"); cprintf(" º ¸2001 by Quasi ³ [email protected] º³³ "); printf("\n"); cprintf(" º www.ircorion.cjb.net ³ [email protected] º³³ "); printf("\n"); cprintf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÁÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÁÙ "); printf("\n\n\n\n\n\n"); _setcursortype(0); sleep(2); system("CLS"); _setcursortype(2); exit(0); } //LISTAS DOBLEMENTE ENLAZADAS #include <stdio.h> void menu();

Page 22: Quasi - Practicas de Programacion en C

void addelem(int x); void delelem(int x); void seelist(int x,int y); void savelefile(); void getlefile(); void text(char txt[100]); //mensajes interactivos internos void final(); struct snum { int num; struct snum *next; struct snum *back; }*nue,*act,*ini,*fin; FILE *l2efile; main () { nue=act=ini=fin=NULL; menu(); final(); } void menu() { char opc; int num; do { system("CLS"); _setcursortype(1); //cambiando el tipo de cursor textcolor(1); //cambiando color en letra textbackground(7); //cambiando color de fondo letra gotoxy(0,10); //posicionando cursor cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ0ÍXÍ»ÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº --> Listas DOBLEMENTE enlazadas ºÛÛÛÛÛÛÛÛ");printf("\n"); cprintf("ÛÛº ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÎÍÍÍÍÍ»ÛÛ");printf("\n"); cprintf("ÛÛº [1] º > Introducir un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [2] º > Eliminar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [3] º > Mostrar lista enlazada º | ºÛÛ");printf("\n"); cprintf("ÛÛº [4] º > Buscar un elemento º | ºÛÛ");printf("\n"); cprintf("ÛÛº [5] º > Almacenar lista en file º | ºÛÛ");printf("\n"); cprintf("ÛÛº [6] º > Recuperar lista del file º | ºÛÛ");printf("\n"); cprintf("ÛÛº º º ºÛÛ");printf("\n"); cprintf("ÛÛº [*] º >> Salir del programa º | ºÛÛ");printf("\n"); cprintf("ÛÛÈÍÍÍÍÍÎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍ͹ÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛº Introduce una opci¢n...[ ] ºÛÛ");printf("\n"); cprintf("ÛÛÛÛÛÛÛÛÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼÛÛ");printf("\n");

Page 23: Quasi - Practicas de Programacion en C

cprintf("ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ");printf("\n"); gotoxy(45,22); opc=getch(); //tratamiento de opciones posibles switch (opc) { case '1':{system("CLS");printf("\nNumero a introducir: ");scanf("%d",&num);addelem(num);break;} case '2':{system("CLS");printf("\nNumero a eliminar: ");scanf("%d",&num);delelem(num);break;} case '3':{system("CLS");printf("\nNumero a buscar: ");scanf("%d",&num);seelist(1,num);break;} case '4':{system("CLS");seelist(0,0);break;} case '5':{system("CLS");save lefile();break;} case '6':{system("CLS");getlefile();break;} case '*':{break;} default:{system("CLS");printf("\nIntroduce una opci¢n valida");getch();} } }while(opc!='*'); } void addelem(int x){ nue=(struct snum*)malloc(sizeof(struct snum)); nue->num=x; nue->next=NULL; nue->back=NULL; if (act==NULL) {act=nue;} else { if(nue->num<act->num){nue->next=act;act=nue;act->back=NULL;} else{ ini=fin=act; while(nue->num>fin->num&&fin!=NULL){ if(fin==act){fin=fin->next;} else{ini=ini->next;fin=fin->next;} } ini->next=nue;nue->back=ini; nue->next=fin;fin->back=nue; } } text("Elemento a¤adido..."); } void delelem(int x) { if(act==NULL){text("La lista se encuentra vacia");return;} if(act->num==x){ ini=act; act=act->next;act->back=NULL; free(ini); } else { ini=fin=act;

Page 24: Quasi - Practicas de Programacion en C

while(fin->num!=x&&fin!=NULL){ if(fin==act){fin=fin->next;} else{ini=ini->next;fin=fin->next;} } if(fin==NULL){text("No se ha encontrado el elemento");return;} ini->next=fin->next; free(fin); } text("Elemento eliminado"); } void seelist(int x,int y){ //funcion que lista o busca en funcion de argumento int result=0; nue=act; while (nue!=NULL){ //recorriendo le if(x==0){printf("\nNumero:[%d]",nue->num);result=1;} //listando elementos if(x==1&&nue->num==y){printf("Numero encontrado: [%d]",nue->num);result=1;break;} nue=nue->next; } if(result==0){text("Numero no encontrado");} text("Fin del listado"); } void savelefile(){ nue=act; l2efile=fopen("l2e-file.txt","w"); while(nue!=NULL){ printf("\nGrabando[%d]...",nue->num); fprintf(l2efile,"\n%d",nue->num); sleep(1); nue=nue->next; } text("Grabaci¢n en fichero finalizada"); fclose(l2efile); } void getlefile() { int var; nue=act=ini=fin=NULL; printf("\nObteniendo datos del fichero...\n"); l2efile=fopen("l2e-file.txt","r"); while(feof(l2efile)==0){ fscanf(l2efile,"%d",&var); addelem(var); printf("\n>>>Numero: %d",var); } fclose(l2efile); text("Fin de lectura del fichero");

Page 25: Quasi - Practicas de Programacion en C

} void text(char txt[100]){ //funcion para mensajes automatizados _setcursortype(0); textbackground(1);textcolor(14);printf("\n"); cprintf(" MSG: >>> %50s ",txt);getch(); _setcursortype(2); } void final() { //funcion credit, about... system("CLS"); _setcursortype(0); textbackground(0); textcolor(11); printf("\n\n\n\n\n\n\n\n"); cprintf(" ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ "); printf("\n"); cprintf(" ÉÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͻÿ "); printf("\n"); cprintf(" º ²²²±±±°°° Listas enlazadas °°°±±±²²² º³³ "); printf("\n"); cprintf(" ÌÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĹ³³ "); printf("\n"); cprintf(" º ¸2001 by Quasi ³ [email protected] º³³ "); printf("\n"); cprintf(" º www.ircorion.cjb.net ³ [email protected] º³³ "); printf("\n"); cprintf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÁÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÁÙ "); printf("\n\n\n\n\n\n"); _setcursortype(0); sleep(2); system("CLS"); _setcursortype(2); exit(0); }