She offers me protection a lot of love and affection
¡Saludos! @fferegrino :(
/*
* Archivo: Banco.c
* Autores: Rodrigo y Antonio
*
* Creado el 17 de febrero de 2011, 09:30 PM
*/
#include "colas.h"
int main() {
cola *Fila_Banco = crear_c();//Creamos una nueva pila
int tiempo_espera = 0;//Esta variable controlará el tiempo de espera.
int menu = 0;//Variable para el menu principal
do{
printf("Banco Bonito :D\n");
printf("Menú de administrador:\n\t1)Llegada de cliente\n\t2)Salida de cliente\n\t3)Salir\n");
printf("Elige: ");
scanf("%d",&menu);
switch(menu)//Opciones de administrador
{
case 1://Recibimos al cliente
printf("\n\n\n\tNuevo cliente\n");
tipodato nuevo_cliente;//Creamos una nueva estructura
printf("Introduce el nombre del cliente: ");
getchar();//Evitar retorno de carro, Linux ;)
nuevo_cliente.nombre =(char *) calloc(51,sizeof(char));//Reservar memoria para el nombre del cliente
gets(nuevo_cliente.nombre);//Obtener el nombre del cliente
int tiempo_operaciones = 0;//Aquí se guardará el tiempo de operaciones del nuevo cliente
int submenu = 0;//Variable para el submenu
do{
printf("\nElija la(s) operacion(es) que %s realizará:\n",nuevo_cliente.nombre);
printf("\t1)Depósito\n\t2)Retiro\n\t3)Cobro de cheques\n\t4)Depósito a terceros\n\t5)Consulta de saldo\n\t6)Nada");
printf("\nElige: ");
scanf("%d",&submenu);
switch(submenu)//Se acumula el tiempo de operaciones del nuevo cliente
{
case 1: tiempo_operaciones += 5; break;
case 2: tiempo_operaciones += 6; break;
case 3: tiempo_operaciones += 8; break;
case 4: tiempo_operaciones += 4; break;
case 5: tiempo_operaciones += 2; break;
default: break;
}
}while(submenu != 6);
nuevo_cliente.tiempo = tiempo_operaciones;//Se guarda en la estructura el tiempo total de operaciones de el cliente nuevo
if(introducir_c(nuevo_cliente,Fila_Banco))
{
printf("\n\n\t%s está formado y va a esperar %d minutos para ser atendido\n\n",nuevo_cliente.nombre,tiempo_espera);//Desplegar información
}
tiempo_espera += tiempo_operaciones;//Se suma el tiempo de operaciones al tiempo de espera global
break;
case 2://Atendemos al cliente
if(vacia_c(Fila_Banco))//Si la cola está vacía
{
printf("\t\nLa fila está vacía, ya atendiste a todos tus clientes... o nunca has tenido clientes :P\n");
}
else
{
tipodato cliente_atendido = sacar_c(Fila_Banco);//Se saca el cliente de la cola
if(!(cliente_atendido.nombre == NULL)){
printf("\t\nWoha! se ha atendido a %s\n", cliente_atendido.nombre);
tiempo_espera -= cliente_atendido.tiempo;//Un cliente sacado de la cola es un cliente atendido, se resta su tiempo de atención al tiempo global de espera
}
}
break;
case 3: break;
default: break;
}
}while(menu != 3);
return (EXIT_SUCCESS);
}
/* * File: main.cpp * Author: Rodrigo y ToñoGates */ #includeLas funciones básicas son desarrolladas:#include "colas.h" void imprimemenu(); void menu_transacciones(); int calcular_tiempo(int []); int tiempo_espera(Cola *c); int main(int argc, char** argv) { char ch; int num=0; //clrscr(); printf("\n\t\t\t Toño&Rod´s Bank \n\n\n ¿Deseas hacer una Cola de clientes? S/N\n"); scanf("%c",&ch); if((ch == 'N')||(ch == 'n')){ printf("Salgo del programa\n"); return (EXIT_SUCCESS); } int t_espera=0; int i=0; int trans[10]={0}; Cola *c; c=crear(); TipoDato p1; p1.nombre=(char *)calloc(100,sizeof(char)); do{ imprimemenu(); scanf("%d",&num); switch (num) { case 1: i=0; printf("\n\tNombre:"); getchar(); gets(p1.nombre); printf("\n\n\tTransaccion(es)a realizar(10 max):"); do{ menu_transacciones(); scanf("%d",&trans[i]); printf("\n¿Desea realizar otra transacción? S/N"); getchar(); scanf("%c",&ch); if((ch == 'N')||(ch == 'n')){ printf("Listo"); num=7; }else i++; }while(num!=7); t_espera=tiempo_espera(c); printf("\nFaltan %d",t_espera); printf(" minutos."); p1.tiempo=calcular_tiempo(trans); if(insertar(c,p1)) printf("\n\n\nCliente introducido con éxito"); else printf("\n\n\nLo sentimos tu Cliente no se pudo insertar..."); break; case 2: if(vacia(c)) printf("\nLa Cola esta vacía. \n"); else{ printf("\nAtendiendo a ..."); TipoDato dat=eliminar(c); printf("\n %s",dat.nombre); } break; case 3: if(vacia(c)) printf("\nCola vacía"); else{ printf("\nEstos son tus clientes en espera...\n"); mostrar(c); } break; } }while (num!=4); return EXIT_SUCCESS; }
int calcular_tiempo(int trans[]){
int t,suma=0;
for(int i=0;i<11;i++){
switch(trans[i]){
case 1: t=5; break;
case 2: t=6; break;
case 3: t=8; break;
case 4: t=4; break;
case 5: t=2; break;
default: t=0; break;
}
suma=suma+t;
}
return suma;
};
int tiempo_espera(Cola *c){
int suma=0;
Nodo *aux=c->frente;
while(aux!=NULL){
suma+=aux->dato.tiempo;
aux=aux->atras;
}
return suma;
};
¡Saludos! @fferegrino :)
/*
* Archivo: main.c
* Autores: Antonio Feregrino y Rodrigo Benavides
*
* Creado el 14 de febrero de 2011, 08:22 PM
*/
#include "pilas.h"
int comprobar(char);
int precedencia(char);
/*
*
*/
int main() {
char primera_expresion[50];//Cadena inicial
char *cadenita_auxiliar = calloc(50+1,sizeof(char));//Cadena final
pila *operadores = crear();//Se crea la pila de los operadores
printf("Introduce la expresión a convertir: \n\n");
gets(primera_expresion);//Se lee la expresion principal
int i = 0, i_cadenita = 0;//Variables usadas para recorrer los arreglos de caracteres
while(primera_expresion[i] != '\0'){//Mientras que la expresión principal no se termine
switch(comprobar(primera_expresion[i])){//Comprobación del tipo de caracter 1 a 1
case 1://En este caso el caracter es un parentesis de apertura (
push(primera_expresion[i],operadores);
break;
case 2://En este caso el caracter es un parentesis de cierre )
while(muestra_ultimo(operadores) != '('){//Mientras que el último elemento de la pila no sea (
cadenita_auxiliar[i_cadenita] = pop(operadores);//Saca los operadores de la pila y colocalos en la cadena final
i_cadenita++;//Aumenta el índice de la cadena final para no sobreescribirla
}
pop(operadores);//Saca el paréntesis de apertura (
break;
case 3://En este caso el caracter es un operando [a-zA-Z0-9]
cadenita_auxiliar[i_cadenita] = primera_expresion[i];//Se introdue directamente a la cadena final
i_cadenita++;//Aumenta el índice de la cadena final para no sobreescribirla
break;
case 4://En este cuarto y último caso, el caracter es un operador [+-/%^]
if(vacia(operadores)){//Si la pila esta vacía
push(primera_expresion[i],operadores);//Introduce el operador
}else{//Si no está vacía
int operador_nv = precedencia(primera_expresion[i]);//Se calcula la precedencia del caracter a evaluar
int operador_ol = precedencia(muestra_ultimo(operadores));//Se calcula la precedencia de la cima
if( operador_nv > operador_ol)//Si la precedencia del nuevo es mayor a la de la cima
{
push(primera_expresion[i],operadores);//Introduce el operador
}
else//Si es menor o igual
{
do{
cadenita_auxiliar[i_cadenita] = pop(operadores);//Saca la cima e introducela en la cadena final
i_cadenita++;//Aumenta el índice de la cadena final para no sobreescribirla
operador_ol = precedencia(muestra_ultimo(operadores));//Calcula la precedencia de la nueva cima
}while(!(operador_nv > operador_ol));//Repite esto hasta que la precedencia del nuevo sea mayor a la de la cima
push(primera_expresion[i],operadores);//Introduce el nuevo operador en la cima de la pila
}
}
break;
}
i++;//Recorre en uno el índice de la expresión inicial
}
printf("Tu expresión postfija es: %s\n",cadenita_auxiliar);//Muestra la cadena final
return (EXIT_SUCCESS);
}
int comprobar(char t){
/* Función que comprueba que caracter es, regresa valores enteros segun sea el caso */
if( t == '(' ) return 1;
if( t == ')' ) return 2;
if(( t <= 90 && t >=65 ) || ( t <= 122 && t >= 97 ) || ( t <= 57 && t >=48 )) return 3;
if( t == '*' || t == '+' || t == '^' || t == '/' || t == '-') return 4;
else return 0;
}
int precedencia(char t){
/* Aquí es calculada la precedencia personalizada de los operadores */
if( t == '^' ) return 3;
if( t == '*' || t == '/' || t == '%' ) return 2;
if( t == '+' || t == '-' ) return 1;
if( t == '(' || t == ')' ) return 0;
else return 0;
}