Skip to content

Instantly share code, notes, and snippets.

@Sulunia
Last active November 12, 2016 02:39
Show Gist options
  • Save Sulunia/01225657b590d622b696dfe81c96df97 to your computer and use it in GitHub Desktop.
Save Sulunia/01225657b590d622b696dfe81c96df97 to your computer and use it in GitHub Desktop.
// ConsoleApplication1.cpp : Defines the entry point for the console application.
// VISUAL STUDIO CACILDA AYY
#include <cstdio>
#include <iostream>
//Giovannio e poleizo -q
//BRINGING PAIN AND HORRIBLE CODES SINCE null
using namespace std;
typedef struct No {
char nome[30];
int numIngresso;
char cpf[11];
char tamCamiseta;
bool isCamarote;
struct No *prox;
}no;
no *camisas = NULL;
no *compras = NULL; //isso nem fila é, é uma lista mesmo (pedro)
no *aux;
no *aux2; //talvez não seja usado (pedro)
int isEmpty(no*p) { //Verifica se um struct ta vazio
if (p == NULL) {
cout << "Esta porra esta vazia" << endl;
return 1;
}
else return 0;
}
no *push(no *p, no *val) {
if (p == NULL) {
p = val;
}
else {
val->prox = p;
p = val;
}
return p;
}
no *pop(no *p) { //Remove da pilha. Se chamada com fila, remove o primeiro elemento! Cuidado!
if (isEmpty(p) == 1) cout << "Pilha vazia!" << endl;
else {
aux = p->prox;
free(p);
p = aux;
}
return p;
}
void printStruct(no* p) {//Imprime ou lista ou fila, depende do que foi dado
aux = p;
int sla = isEmpty(p);
if (sla == 0) {
while (aux != NULL) {
//SEU CÓDIGO DE PRINTING AQUI (pedro)
aux = aux->prox;
}
}
}
int contaStruct(no* p) { //Retorna o tamanho da pilha ou lista, dada sua origem!
aux = p;
int count = 0;
int sla = isEmpty(p);
if (sla == 0) {
while (aux != NULL) {
aux = aux->prox;
count += 1;
}
}
return count;
}
no *addFila(no *p, no *val) {
aux = p;
if (p == NULL) {
val->prox = NULL;
p = val;
}
else {
while (aux->prox != NULL) {
aux = aux->prox;
}
val->prox = NULL;
aux->prox = val;
}
return p;
}
no *removeFila(no *lista, int numIngresso) { //A fila na verdade é uma lista, se considerarmos que qualquer um pode retornar o ingresso
no* ant = NULL;
no* p = lista; //Essa é a implementação feita na sala, modificada pro algoritmo pedido. Minha implementação inicial morria se tentasse tirar o primeiro da lista.. (pedro)
while (p != NULL && p->numIngresso != numIngresso) {
ant = p;
p = p->prox;
}
if (p == NULL)
return lista; /* não achou: retorna lista original */ //São os comentários originais do programa
if (ant == NULL) {
/* retira elemento do inicio */
lista = p->prox;
}
else {
/* retira elemento do meio da lista */
ant->prox = p->prox;
}
//Agora vem o pulo do gato, verificamos se o cara ganhou ou não a camiseta!
if (p->numIngresso < 100) {
//Tiramos uma camiseta da pilha
camisas = pop(camisas);
//Mais uma dúvida, se o cliente 100 devolve a camiseta, o cliente 101 deve ganhá-la? Ou o próximo que comprar um ingresso após o 100 realizar a devolução? (pedro)
//...o que basicamente implicaria que eu poderia devolver uma camiseta a pilha pra qualquer posição, assim ela seria uma lista..?
}
free(p); //Libera o blob
return lista;
}
int main()
{
int op;
int count = 1;
char nome[30];
int numIngresso;
char cpf[11];
char tamCamiseta;
bool isCamarote;
do {
system("cls");
cout << "Show do ganz" << endl;
cout << "1 - Cadastrar novo criente" << endl;
cout << "2 - Listar clientes" << endl;
cout << "3 - Devolver ingresso de cliente" << endl; //Detalhe interessante: não foi informado como funciona a devolução.. (pedro)
cout << "Qualquer valor - Cometer harakiri" << endl;
cin >> op;
switch (op)
{
case 1:
{
system("cls");
cout << "Nome: ";
cin >> nome;
cout << endl << "CPF(sem pontos): ";
cin >> cpf;
cout << endl << "Tamanho da camiseta: ";
cin >> tamCamiseta;
cout << endl << "Camarote? (S/N): ";
cin >> isCamarote;
//Aloca espaço
no *novoCliente = (no*)malloc(sizeof(no));
novoCliente->cpf; //Vc precisa copiar os vetores caracter por caracter..
novoCliente->nome;
novoCliente->tamCamiseta = tamCamiseta;
novoCliente->numIngresso = count;
count++;
novoCliente->isCamarote = isCamarote;
novoCliente->prox = NULL;
//Insere o cliente na fila
compras = addFila(compras, novoCliente);
if (contaStruct(camisas) < 100) {
camisas = push(camisas, novoCliente);//Insere o cliente que ganhou a camisa na pilha de camisas
}
cin.clear();
}
break;
case 2:
{
}
break;
case 3:
{
}
break;
default:
{
}
break;
}
} while (op >= 1 && op <= 3);
cout << "Fim da execucao." << endl;
cin.ignore();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment