Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorios de computación
salas A y B
Profesor: Elba Karen Sáenz Garcia
Grupo: 4
No de Práctica(s): Practica 7 y 8
Semestre: 2022-2
Observaciones:
CALIFICACIÓN: __________
Objetivo;
DESARROLLO:
Actividad 1
Realizar un programa en ANSI C que permita implementar una ruleta.
1-Primero se debe crear y llenar una lista ligada circular con los números del 0 al 36 de forma no contigua.
2-Una vez formada la lista circular el usuario debe introducir un número entre 0 y 36 y girar la ruleta.Se
comparará el dato introducido con el dato obtenido
al girar la ruleta, para girar la ruleta se recorrerá la lista n lugares donde n es un numero aleatorio de entre 0 y
5*36
3-Al final se debe mostrar si la ruleta llegó al número solicitado.
CODIGO;
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include<time.h>
struct node
{
int dato;
struct node *sig;
struct node *ant;
};
struct clista
{
nodo *ini,*fin;
int ne,pos;
};
typedef struct clista lista;
int main ()
{
int i,a,dato=0;
int n;
int resultado;
lista ruleta;
inilista(&ruleta);
for(i=0;i<36;i++)
{
dato=(dato+5)%36;
insFin(&ruleta,dato);
}
mostrar(&ruleta);
do{
printf("\nIngrese numero para Jugar\n");
scanf("%d",&n);
if(n<36)
{
resultado=girarRuleta(&ruleta,n);
if(resultado==0)
{
printf("GANASTE\n");
}
else
{
printf("FALLASTE\n");
}
}
else
{
printf("NUMERO INVALIDO");
}
printf("\nQuieres volver a intentarlo? 1)Si 2)No\n");
scanf("%d",&a);
}while(a!=2);
}
n=(nodo *)malloc(sizeof(nodo));
if (n!=NULL)
{
n->dato=dato;
n->sig=NULL;
}
return n;
}
char insFin(lista *lis, int dato)
{
nodo *Nnodo;
Nnodo=creaNodo(dato);
if (Nnodo==NULL)
{
return 1;
}
if (!vacia(lis))
{
lis->fin=Nnodo;
lis->ini=Nnodo;
}
else
{
lis->fin->sig=Nnodo;
lis->fin=Nnodo;
}
Nnodo->sig=lis->ini;
lis->ne++;
return 0;
}
srand(time(NULL));
n=rand()%(5*36);
for(i=0;i<n;i++)//girar la ruleta
{
tmp=tmp->sig;
printf(" %d ",tmp->dato );
sleep(0.9);
}
printf("\nla ruleta gira a la derecha\n");
printf("\nEl valor de la ruleta: %d ",tmp->dato);
if(tmp->dato==valor)
{
return 0;
}}
CAPTURA DE EJECUCIÓN
Actividad 2
Modificar el programa anterior para que se pueda indicar si se mueve la ruleta a la izquierda o a la derecha.
CODIGO;
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include<time.h>
struct node
{
int dato;
struct node *sig;
struct node *ant;
};
struct clista
{
nodo *ini,*fin;
int ne,pos;
};
typedef struct clista lista;
int main ()
{
int i,a,dato=0;
int n;
int resultado;
lista ruleta;
inilista(&ruleta);
for(i=0;i<36;i++)
{
dato=(dato+5)%36;
insFin(&ruleta,dato);
}
mostrar(&ruleta);
do{
printf("\nIngrese numero para Jugar\n");
scanf("%d",&n);
if(n<36)
{
resultado=girarRuleta(&ruleta,n);
if(resultado==0)
{
printf("GANASTE\n");
}
else
{
printf("FALLASTE\n");
}
}
else
{
printf("NUMERO INVALIDO");
}
printf("\nQuieres volver a intentarlo? 1)Si 2)No\n");
scanf("%d",&a);
}while(a!=2);
}
n=(nodo *)malloc(sizeof(nodo));
if (n!=NULL)
{
n->dato=dato;
n->sig=NULL;
}
return n;
}
if (Nnodo==NULL)
{
return 1;
}
if (!vacia(lis))
{
lis->fin=Nnodo;
lis->ini=Nnodo;
}
else
{
lis->fin->sig=Nnodo;
lis->fin=Nnodo;
}
Nnodo->sig=lis->ini;
lis->ne++;
return 0;
}
srand(time(NULL));
n=rand()%(5*36);
for(i=0;i<n;i++)//girar la ruleta
{
tmp=tmp->sig;
printf(" %d ",tmp->dato );
sleep(0.9);
}
printf("\nla ruleta gira a la derecha\n");
printf("\nEl valor de la ruleta: %d ",tmp->dato);
if(tmp->dato==valor)
{
return 0;
}
else
{
return 1;
}
}else{
tmp=lis->fin;
srand(time(NULL));
n=rand()%(5*36);
for(i=0;i<n;i++)//girar la ruleta
{
tmp=tmp->sig;
printf(" %d ",tmp->dato );
sleep(0.9);
}
printf("\nla ruleta gira a la izquierda\n");
printf("\nEl valor de la ruleta: %d ",tmp->dato);
if(tmp->dato==valor)
{
return 0;
}
else
{
return 1;
}}
CAPTURA DE EJECUCIÓN;
Actividad 3
Realizar un programa en ANSI C que permita simular un elevador utilizando una lista doblemente ligada donde
en cada elemento se tenga un dato entero que represente el piso. Los pisos va de 0 a n , n es PH y 0 PB.
El programa debe llenar una lista (doblemente enlazada) con enteros de 0 a n y una vez llena se debe solicitar
el piso al ir, y la lista se debe recorrer hacia arriba o hacia abajo dependiendo de en qué piso nos encontremos.
Cuando se llegue al piso solicitado se debe imprimir el número de piso (el contenido de la lista en esa posición).
Se debe tomar en cuenta que: El piso dado no debe ser menor 0 ni mayor n
CODIGO
#include<stdio.h>
#include<stdlib.h>
struct node{
int numero;
struct node *next;
struct node *past;
};
struct list{
struct node *inicio;
struct node *fin;
int size;
};
int main(){
struct list edificio;
struct node cliente;
int posicion,high;
cliente.numero=0;
printf("¿CUANTOS PISOS TIENE TU EDIFICIO?\n\n");
scanf("%d",&high);
if(begining(&edificio,high))
{
printf("Error al iniciar\n");
return 0;
}
cliente.next=edificio.inicio;
printf("Bienvenido \n\nSe encuentra en PB (piso 0) en un edificio de %i pisos\n",high);
do{
printf("¿A que piso desea ir? \n\n(para salir escriba un valor negativo)\n\n");
scanf("%i",&posicion);
if(moving(&edificio,&cliente,high,posicion))
printf("El piso no existe\n");
int x;
struct node *piso;
piso = (struct node*)malloc(sizeof(struct node));
if(piso == NULL)
return 1;
piso->numero = 0;
piso->past = NULL;
edificio->inicio = piso;
for(x=1;x<p+1;x++)
{
edificio->fin = piso;
piso = (struct node*)malloc(sizeof(struct node));
if(piso == NULL)
return 1;
piso->numero = x;
piso->past = edificio->fin;
edificio->fin->next = piso;
}
piso->next = NULL;
edificio->size = p;
return 0;
}
int moving(struct list *edificio, struct node *cliente, int p,int posicion){
int x = 0;
if(posicion < 0 || posicion > p)
return 1;
if((posicion - cliente->numero)>0)
for(x=0;x<(posicion - cliente->numero);x++)
cliente->next = cliente->next->next;
else
for(x=0;x>(posicion - cliente->numero);x--)
cliente->next = cliente->next->past;
cliente->numero = cliente->next->numero;
printf("Ahora estas en el piso %i\n",cliente->numero);
return 0;
}
CAPTURA DE EJECUCION
CONCLUSIONES:
Garcia Cruz Brandon Manuel:
Para esta práctica el uso de las listas ayudó a realizar un juego de ruleta y un simulador para
emplear números aleatorios y llenado de estos, de tal manera que al momento de realizar los
códigos quedarán como refuerzo el uso de estas listas y para lograrlo hubo dificultades sin
embargo fue una manera interesante de realizar esto.
El concepto de estructuras doblemente ligadas fue algo complicado de entender, debido a esto
hubieron algunas dificultades, a la hora de realizar los códigos nos tuvimos que guiar con la
ayuda de nuestros apuntes, eso nos permitió aclarar un poco más el tema, por eso en lo personal
creo que el tema quedó un poco más claro y solo falta seguir practicando.