domingo
SOLUCIÓN
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#define n 20
typedef struct
tiponodo{
int
x;
struct tiponodo *adelante;
struct tiponodo *atras;
}nodo;
/*Declaracion
de los sinonimos para referirnos al tipo de dato*/
typedef nodo
*tlista;
typedef nodo
*tposicion;
/*Declaraci¢n
de las funciones que utilizaremos*/
void
insertarprim (tlista cabeza, int entrada),chao(),espera();
tlista
crearnodo();
nodo
*ptr;
int
entrada,cont=0,cont2=0;
char
cadena[n],cadena1[n],ma[13];
void
hola(),lanzari(),lanzarl(),inicio(),quitar_caracter(),forward(),backward();
int
op=0,modo,cs;
tposicion
cabeza;
tlista
crear_cabeza(),L;
nodo
*eliminar_lista(nodo *cabeza);
main(){
clrscr();
modo=-1;
do{
hola();
textattr(49);
gotoxy(10,3); cout<<"JUEGO: **
DEMOS LA VUELTA AL RELOJ Versi¢n 2.0 ( Apuntadores ) **\n\n";
gotoxy(10,5); cout<<"Modo
Activo: "<<ma;
gotoxy(10,7); cout<<"N§ Juegos
Efectuados: "<<cont;
gotoxy(10,9); cout<<"1. Activar Modo: ==>
Interactivo ¢ Por Lote\n\n";
gotoxy(10,11); cout<<"2.
Jugar: =========> Lanzamientos de la Moneda\n\n";
gotoxy(10,13); cout<<"3.
Salida al Sistema Operativo\n\n";
gotoxy(10,17); cout<<"Ingrese
su Opcion: ";
cin>>op;
switch(op){
case 1:
clrscr();
do{
gotoxy(10,3); cout<<"Ingrese
Modo [ 0=Interactivo 1=Lote ]==>
";
cin>>modo;
}while( modo<0 || modo>1 );
if (modo==0){
inicio();
gotoxy(10,5);cout<<"Modo
Seleccionado: Interactivo";
strcpy(ma,"Interactivo");
}
if (modo==1){
inicio();
gotoxy(10,5);cout<<"Modo
Seleccionado: Por Lote";
strcpy(ma,"Por Lote");
}
clrscr();
break;
case 2:
clrscr();
if (modo<0){
gotoxy(10,5);
cout<<"DEBE INGRESAR EL
MODO\n\n";
getch();
}
if (modo==0) lanzari();
if (modo==1) lanzarl();
clrscr();
break;
case 3: chao();op=4;
}
}while ( op !=4 );
return 0;
}
tlista
crearnodo(){
/*creamos
un nuevo nodo, el cual sera la "cabeza" de la lista*/
// tlista L;
L=(tlista)malloc(sizeof(nodo));
L->adelante=L->atras=L;
return
L;
}
/*definici¢n
de las funciones*/
void
insertarprim(tposicion cabeza, int entrada)
{
tposicion nuevo;
/*creamos
un nuevo nodo y le asignamos la direccion de memoria*/
nuevo=(tposicion)malloc(sizeof(nodo));
if(nuevo==NULL) printf("ERROR\n");
nuevo->x=entrada;
/*la
parte de adelante del nuevo nodo, apunta al primer nodo*/
nuevo->adelante=cabeza;
nuevo->atras=cabeza->atras;
cabeza->atras->adelante=nuevo;
cabeza->atras=nuevo;
}
void
inicio(){
cont=0;
cont2=0;
cabeza=crearnodo();
insertarprim(cabeza,1);
insertarprim(cabeza,2);
insertarprim(cabeza,3);
insertarprim(cabeza,4);
insertarprim(cabeza,5);
insertarprim(cabeza,6);
insertarprim(cabeza,7);
insertarprim(cabeza,8);
insertarprim(cabeza,9);
insertarprim(cabeza,10);
insertarprim(cabeza,11);
insertarprim(cabeza,12);
cabeza->x=12;
}
void
lanzari(){
clrscr();
cont=cont+1;
gotoxy(20,3); cout<<"N§ Juegos
Efectuados : "<<cont;
gotoxy(20,5);cout<<"Hora Actual
del Usuario: "<<cabeza->x;
cs=random(2);
switch(cs){
case 0:gotoxy(20,7);cout<<"
Lanzamiento = CARA "; forward();
break;//cara
case 1:gotoxy(20,7);cout<<"
Lanzamiento = SELLO ";backward(); break; //sello
}
gotoxy(20,9);cout<<"Nueva Hora
del Usuario: "<<cabeza->x;
getch();
}
void espera(float
temp)
{
time_t t1;
t1=clock();
while((float)(clock()-t1)<temp);
}
void hola(){
int
fil=22,col,i;
//clrscr();
textattr(62);
for(col=0;col<40;col++){
gotoxy(col,fil);cputs(" ");
gotoxy(col-1,fil); cputs(" ");
espera(0.1);
}
}
void
forward(){
int k=0;
while(k<cont){
cabeza=cabeza->adelante;
if (cabeza==L)
cabeza=cabeza->adelante;
if (cabeza->x>9){
gotoxy(20,9);cout<<"Hora del Usuario:
"<<cabeza->x;
espera(3.5);
}
if (cabeza->x<10){
gotoxy(20,9);cout<<"Hora del Usuario:
"<<"
"<<cabeza->x;
espera(3.5);
}
k=k+1;
}
}
void
backward(){
int k=0;
while(k<cont){
cabeza=cabeza->atras;
if (cabeza==L)
cabeza=cabeza->atras;
if (cabeza->x>9){
gotoxy(20,9);cout<<"Hora
del Usuario: "<<cabeza->x;
espera(3.5);
}
if (cabeza->x<10){
gotoxy(20,9);cout<<"Hora
del Usuario: "<<"
"<<cabeza->x;
espera(3.5);
}
k=k+1;
}
}
void
lanzarl(){
int i,k;
char x;
clrscr();
cont2=cont2+1;
gotoxy(20,3); cout<<"N§ Juegos
Efectuados : "<<cont2;
gotoxy(5,5);cout<<"Hora Actual
del Usuario: "<<cabeza->x;
gotoxy(5,7); cout<<"Lanzamientos
[ C=CARA S=SELLO <Intro=Finalizar>
]: ";
gets(cadena);
cont=0;
quitar_caracter();
k=cont;
int pasos=0;
for(i=0;i<k;i++){
x=toupper(cadena1[i]);
pasos=pasos+1;
cont=pasos;
switch(x){
case 'C': forward();break;
case
'S': backward();break;
}
}
gotoxy(20,9);cout<<"Nueva Hora
del Usuario: "<<cabeza->x;
getch();
}
void
quitar_caracter(){
int i,j;
for(i=0,j=0;i<n;i++){
if (cadena[i] != ' '){
if(toupper(cadena[i])=='S'){
cadena1[j]=cadena[i];
j++;
cont=cont+1;
}
if(toupper(cadena[i])=='C'){
cadena1[j]=cadena[i];
j++;
cont=cont+1;
}
}
}
}
nodo
*eliminar_lista(nodo *cabeza)
{
nodo *temp,*siguiente;
if(cabeza!=NULL)//hay elementos en la lista?
{
temp=cabeza;
do{
siguiente=temp->adelante;
free(temp);
temp=siguiente;
}while(temp!=NULL);
}
return(NULL);
}
void
chao(){
int fil,col,i;
for(fil=17;fil>2;){
for(col=79;col>0;col--){
textattr(65);
gotoxy(col,fil);cputs("Hasta la Vista
Baby... Bye... ");
gotoxy(col+30,fil);cputs(" ");
espera(0.01);
}
fil=fil-1;
}
}
Suscribirse a:
Entradas (Atom)