Jump to content
roberto de souza gomes

programa não permitir reservar uma cadeira ja reservada em c.

Recommended Posts

boa noite pessoal, eu sou estudante de ADS , e sou novo na programacao, estou desenvolvendo 
um sistema para um trabalho final do curso, um sistema de controle de entrada e saida de usuarios,
mas nele esta acontecendo um erro, quando eu digito um numero de uma cadeira que ja esta comprada
ele aceita, estou vendo e revendo o codigo  mas nao vejo erro.
alguem pode apontar o meu erro?
obrigado, segue o codigo:

 

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define linha 11
#define coluna 11
#define valor_minimo 29
#define valor_maximo 121
int valida(int num, int *ant, int cont);
void edita (int sort,int cont);
void chamaSorteio();
void CadeiraNum();//declara a funcao que preenche os lugares com numeros
void painel();//declara a funcao que mostra a matriz
void compra();//declara a funcao que faz a compra dos lugares
void cad();
int resp;
int matriz[linha][coluna];//
FILE *ponteiroArquivo;   
struct cadastro{
    char nome [50];
    char cpf [15];
    char email [30];
    };
     struct cadastro aux;

int main(){
    int opcao=0;
    int contador=0,lugares=92;
    char nomes[30];
    char timeStr[9];
    
    struct tm *data_hora_atual;
    time_t segundos;
    time(&segundos);
    data_hora_atual = localtime(&segundos); 
    
    CadeiraNum(matriz);//aqui complementa a funcao cadeiraNum(); colocando os numeros.
    
    do{
        //a partir daqui e mostrado para o usuario as opcoes do programa principal
         system("cls"); 
         printf("\n\n                      MENU  \n\n");      
         printf("                  1- Reservar Cadeira       (Ainda restam (%d) lugares)\n",lugares-contador);        
         printf("                  2- Mostrar Painel de lugares\n"); 
         printf("                  3- Sorteio\n");       
         printf("                  4- SAIR           \n");        
         printf("                   opcao: ");
         scanf("%d",&opcao);               
                       
     switch(opcao){
        case 1:
          system("cls");          
          //cad();
         // getch();
          system("cls"); 
          painel(matriz);//antes de escolher o lugar antes e chamado a matriz e o usuario pode ver o painel, inclusive com os lugares do teatro comprados atualizados.
          texto:
          printf("\n\nDigite o numero da cadeira desejada: \n");
          scanf("%d",&resp);
           
          if ((resp<=0) || (resp>=122)){  
              printf("Esta cadeira não existe!!!Escolha outra!\n");
              goto texto; 
            getch();              
        }else if ((resp>=1) && (resp<=22)){  
              printf("Esta cadeira ja esta reservada!!!Escolha outra!\n");
              goto texto; 
            getch();              
        }
        else if ((resp>=23) && (resp<=28)){  
              printf("Esta cadeira é preferencial!!!Escolha outra!\n");
              goto texto; 
            getch();              
        }else if (matriz[linha][coluna]==0){
            printf("Esta cadeira esta ocupada!!! Escolha outra!\n");
            goto texto;
            getch();
        }
        else (printf(" \n"));

           ponteiroArquivo=fopen("arquivo.txt","r"); 
          fgets(nomes,30,ponteiroArquivo);
          
          fclose(ponteiroArquivo);
          system("cls"); 
          
         _strtime( timeStr );
          printf_s( "\tParabens %s pela sua compra no dia %d/%d/%d as %s \n\nSeu ticket sera enviado por e-mail!!\n",aux.nome, data_hora_atual->tm_mday,data_hora_atual->tm_mon+1,data_hora_atual->tm_year+1900,timeStr);
            printf("seu assento e %d\n",resp);
            contador++;
          system("pause");         
          break;
        
        case 2:
          system("cls");
          system("cls");
          painel(matriz);//chama a funcao painel que contem a matriz 
          printf("\n\n");
          system("pause");
          break;
          
        case 3:
          system("cls");
          chamaSorteio();
          system("pause");
          break;
          
        //o usuario escolhendo este caso o programa retorna nada e fecha
        case 4:
          return 0;
          break;
             
        default:
            printf("OPCAO INVALIDA!!!\n");
            system("pause");
        break;
     }
  }while(1==1); 
  
    
system("pause");    
return(0);
}

//esta e a funcao responsavel por preencher todos os lugares do teatro com numeros!
void CadeiraNum(){
    int c,l;
    int num;
    num=1;
    
    for(l=1;l<=linha;l++)
     for(c=1;c<=coluna;c++){      
     matriz[l][c]=num;
       num++; 
    }
    matriz[3][1]=333; 
    matriz[3][2]=333;
    matriz[3][3]=333;
    matriz[3][4]=333;
    matriz[3][5]=333;
    matriz[3][6]=333;
    /**/
    matriz[1][1]=222; 
    matriz[1][2]=222;
    matriz[1][3]=222;
    matriz[1][4]=222;
    matriz[1][5]=222;
    matriz[1][6]=222;
    matriz[1][7]=222;
    matriz[1][8]=222;
    matriz[1][9]=222;
    matriz[1][10]=222;
    matriz[1][11]=222;
    /**/
    matriz[2][1]=222;
    matriz[2][2]=222;
    matriz[2][3]=222;
    matriz[2][4]=222;
    matriz[2][5]=222;
    matriz[2][6]=222;
    matriz[2][7]=222;
    matriz[2][8]=222;
    matriz[2][9]=222;
    matriz[2][10]=222;
    matriz[2][11]=222;   
}

//esta e a funcao que cria as linhas e as colunas do teatro matriz
void painel(){
  
  int c,l;
  printf("\n            PAINEL DE OCUPACOES   \n\n");
  printf("          ");
   
  
  for(c=1;c<=coluna;c++)
    printf("\t%d",c);
  
  for(l=1;l<=linha;l++){
     printf("\n\n\t%d",l);
     for(c=1;c<=coluna;c++)
     
       
    if(matriz[l][c]==222){
         printf("\t(R)");
     }else if(matriz[l][c]==resp){
         matriz[l][c]=0;
         printf("\t(C)");
     }else if(matriz[l][c]==0){
         printf("\t(c)");
     }
     else if(matriz[l][c]==333){
         printf("\t(P)");
     }     else printf("\t(%d)",matriz[l][c]);
            
  }
    printf("\n\n\t(29-121) - LUGAR LIVRE    (p) - Assento preferencial   (C) - CADEIRA JA COMPRADA   (R) CADEIRA RESERVADA\n");

//funcao que marca no lugar escolhido o valor 0 guardando o lugar 
/*void compra(int l, int c){
  
  
  if(resp==matriz[linha][linha]){
    matriz[linha][coluna] = 0;
}
} */
void cad(){

    
    ponteiroArquivo=(fopen("arquivo.txt","a")); // "a"  - cria um arquivo novo, ou modifica um ja existente.
    getchar();
    printf("\t\tSEJA BEM VINDO AO TEATRO DA UNIP!!\n\n");
    printf("Antes de comprar a cadeira vamos fazer um breve cadastro........\n\npresssione ENTER para continuar......\n\n\n");
    getch();
    printf("Digite seu nome: ");
    fgets (aux.nome, 50 ,stdin);

    getchar();
    printf("Digite seu CPF: ");  
    fgets (aux.cpf, 15 ,stdin);

    getchar();
    printf("Digite seu Email: ");
    fgets (aux.email , 30 ,stdin);

    //gravando com fprintf no arquivo
    printf("\n");
    
    fprintf(ponteiroArquivo, "\n------------------------\n");
    fprintf(ponteiroArquivo,"nome: %s\n",aux.nome);
    fprintf(ponteiroArquivo,"CPF: %s\n",aux.cpf);
    fprintf(ponteiroArquivo,"Email: %s\n",aux.email);

    fclose(ponteiroArquivo);//fecha o arquivo
}
void chamaSorteio(){
    int i;
    int sorteados[4];
    
    srand(time(NULL));
    
    printf("---------|SORTEIO\n\n");
    
    for(i=0;i<4;i++){
        sorteados = valor_minimo+rand()%(valor_maximo-valor_minimo);
        if(i==0){
            edita(sorteados,i);
        }
        else {
            sorteados = valida(sorteados,sorteados,i);
            edita(sorteados,i);
        }
    }
    printf("------------------------------------------");
        getch();
        printf("\nParabens a todos os premiados!!\n\n");
        getch();
}

int valida(int num, int *ant, int cont){
    int aux;
    
    for(aux=0;aux<cont;aux++){
        while(num==*(ant+aux)){
            num=valor_minimo+rand()%(valor_maximo-valor_minimo);
        }        
    }
    return num;
}
void edita (int sort,int cont){
            
        printf("\t%d°premiado usuario da caderia : %.2d\n",cont+1,sort);        
        
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By David Samu
      let total_entradas = 3//ai virar total de colunas
      let total_linhas   = 0
      let tabela         = []
      for(let coluna=total_entradas; coluna>0; coluna-- )
      {
          let repeticao = 1
          for(let x=1; x<=coluna; x++)
          {
              repeticao = (2 * repeticao)
          }
          if( total_linhas === 0 )
          {
              total_linhas = repeticao
          }
          if(repeticao != 1) 
          {
              repeticao = (repeticao / 2)
          }
          let valores = []
          let vdd     = 1
          let lastBoo = 'v'
          for( let linha=0; linha < total_linhas; linha++ )
          {
              if( vdd <= repeticao )
              {
                  val = lastBoo
              }
              else
              {
                  if( lastBoo == 'v' )
                  {
                      lastBoo = 'f'  
                  }
                  else 
                  {
                      lastBoo = 'v'
                  }
                  val = lastBoo
                  vdd=1
              }
              vdd++
              valores.push(val)
          }
          tabela[ (coluna - 1) ] = valores   
      }
      let countCol = 1
      for(let coluna=tabela.length - 1; coluna>=0; coluna--)
      {
          console.log("Coluna ", countCol++)
          for(let linha = 0; linha < tabela[coluna].length; linha ++)
          {
              console.log( tabela[coluna][linha] )
          }
      }
    • By Gui2000
      O código é para a colocar 3 letras a partir de 3 nomes diferentes. Ou seja:
      A-> Adriano
      B-> Bruno
      C->Carol
      Com isso eu criaria uma agenda.

      Problema

      1-Ao eu compara o que tem dentro da letra que como não tem nada seria NULL então ele nem entra no casso que ele é igual a NULL

      2- Ao receber a posição da outra struct em: aux2=aux->pontpnome, ou seja ele recebe de dentro da struct letras a posição da próxima struct que é de nomes. Ao debuggar ele insinua erro ai também.

      Caso vejam mais um erro por favor me comuniquem.
       
      #include <stdio.h> #include <stdlib.h> #include <string.h> #define tamanho 3 typedef struct nomes vetnome; typedef struct letras letra; struct nomes{ char nome[30]; vetnome *pont; }; struct letras{ char L[4]; vetnome *pontpnome; }; void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd); int chave(char nome[30]); int main() { int qtd=0,i=0; char nome[30], resposta[30]; letra tabEsp[tamanho]; for(i=1;i<4;i++) { strcpy(tabEsp.L,"NULL"); } printf("Insira 3 nomes diferentes primeiramente: "); while(qtd<4) { letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let->pontpnome=NULL; ini->pont=NULL; inserir(&let, tabEsp, &ini, qtd); system("pause"); system("cls"); qtd++; } puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)"); while(resposta!="NAO") { printf("Digite um nome: "); scanf("%s", &nome); letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let=NULL; ini=NULL; inserir(&let, tabEsp, &ini, qtd); printf("Você quer continuar?[Sim/Nao]"); scanf("%s", &resposta); system("pause"); system("cls"); } return 0; } int chave(char nome[30]) { unsigned int resultado= (int)nome[0]%tamanho; if(resultado<0) resultado=-resultado; return resultado; } void inserir (letra **Let, letra tabEsp[tamanho], vetnome **Ini, int qtd) { char nome[30]; puts("Digite um nome: "); scanf("%s", &nome); int chaveres=chave(nome); vetnome *aux2; aux2=Ini; letra *aux; aux=Let; if(chaveres==1) { if(tabEsp[chaveres].L=="NULL") { letra *novo= (letra*) malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome); aux=novo; aux2=name; aux->pontpnome=&aux2; aux2->pont=NULL; return ; } else if(tabEsp[chaveres].L!="NULL") { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2->pont=name; name->pont=NULL; return; } } if(chaveres==2) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome[30]); aux2->pont=&name; name->pont=NULL; return; } } if(chaveres==3) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2->pont=name; name->pont=NULL; return; } } if (chaveres>3) { puts("Espaço não reservado!"); } }  
      CÓDIGO RESOLVIDO
       
      #include <stdio.h> #include <stdlib.h> #include <string.h> #define tamanho 3 typedef struct nomes vetnome; typedef struct letras letra; struct nomes{ char nome[30]; vetnome *pont; }; struct letras{ char L[4]; vetnome *pontpnome; }; void inserir (letra **let, letra tabEsp[tamanho], vetnome **ini,int qtd); int chave(char nome[30]); int main() { int qtd=1,i=0; char nome[30], resposta[30]; letra tabEsp[tamanho]={NULL,NULL,NULL}; printf("Insira 3 letras diferentes, você guardará nomes com essas iniciais depois desse processo: "); while(qtd<4) { letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let->pontpnome=NULL; ini->pont=NULL; inserir(&let, tabEsp, &ini, qtd); system("pause"); system("cls"); qtd++; } puts("Aqui você irá colocar nomes dentro das 3 listas criadas! :)"); while(resposta!="NAO") { letra *let=(letra *)malloc(sizeof(letra)); vetnome *ini=(vetnome *)malloc(sizeof(vetnome)); let=NULL; ini=NULL; inserir(&let, tabEsp, &ini, qtd); printf("Você quer continuar?[Sim/Nao]"); scanf("%s", &resposta); system("pause"); system("cls"); } return 0; } int chave(char nome[30]) { unsigned int resultado= (int)nome[0]%tamanho; if(resultado<0) resultado=-resultado; return resultado; } void inserir (letra **Let, letra tabEsp[tamanho], vetnome **Ini, int qtd) { char nome[30]; puts("Digite um nome: "); scanf("%s", &nome); int chaveres=chave(nome); vetnome *aux2; aux2=Ini; letra *aux; aux=Let; if(chaveres==1) { if(tabEsp[chaveres].L==NULL) { letra *novo= (letra*) malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome); aux=novo; aux2=name; aux->pontpnome=&aux2; aux2->pont=NULL; return ; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2=name; aux2->pont=NULL; return; } } if(chaveres==2) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome[30]); aux2->pont=&name; name->pont=NULL; return; } } if(chaveres==3) { if (tabEsp[chaveres].L==NULL) { letra *novo=(letra *)malloc(sizeof(letra)); vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(novo->L,nome[0]); strcpy(name->nome,nome[30]); aux=novo; aux2=name; aux->pontpnome=&aux2; return; } else if(tabEsp[chaveres].L!=NULL) { aux2=aux->pontpnome; while(aux2!=NULL) { aux2=aux2->pont; } vetnome *name=(vetnome *)malloc(sizeof(vetnome)); strcpy(name->nome,nome); aux2->pont=name; name->pont=NULL; return; } } if (chaveres>3) { puts("Espaço não reservado!"); } }  
    • By gramosiri2
      Exercicio Caixa eletrônico com Notas.
       
      Ola, estou tentando fazer um ex. aqui de um caixa eletrônico, onde precisa ser feito o saque apenas com as determinadas notas: 2, 5, 10, 20, 50 e 100 reais. Porém quando tento sacar 11 por exemplo ele soma uma nota de 10 apenas, acho que vai ter que tirar o mod, alguma ideia??
       
      #include <stdio.h> #include <stdlib.h> int main() { int n100=0,n50=0,n20=0,n10=0,nota5=0,nota2=0; float valor=0; int op; printf("-> Quanto deseja sacar? R$"); scanf("%f",&valor); while(valor>=100){ valor=valor-100; n100=n100+1; } while(valor>=50){ valor=valor-50; n50=n50+1; } while(valor>=20){ valor=valor-20; n20=n20+1; } while(valor>=10){ valor=valor-10; n10=n10+1; } while(valor>=5){ valor=valor-5; nota5=nota5+1; } while(valor>=2){ valor=valor-2; nota2=nota2+1; } printf("SAQUE:\n"); printf("%d nota(s) de R$ 100.00\n",n100); printf("%d nota(s) de R$ 50.00\n",n50); printf("%d nota(s) de R$ 20.00\n",n20); printf("%d nota(s) de R$ 10.00\n",n10); printf("%d nota(s) de R$ 5.00\n",nota5); printf("%d nota(s) de R$ 2.00\n",nota2); return 0; }  
    • By VitinhoBBK
      Seguinte, estou tentando criar um jogo da velha mas e está causando um erro ao compilar, aparece um erro dizendo->|error: cannot convert 'char (*)[3]' to 'char*' for argument '1' to 'bool verificaX(char*)', alguem sabe como posso resolver ???! (Aparentemente não ta dando pra armazenar o endereço do vetor casas dentro do ponteiro das funções...

      Obs: Aceito sugestões para melhorar meu código, grato.(Ignorem as bibliotecas inúteis)
       
       
      #include <iostream> #include <stdio.h> //Para função gets #include <stdlib.h> //Para função malloc #include <math.h> #include <iomanip> //JOGO DA VELHA using namespace std; int jogadas=0; bool verificaX(char *vetor); bool verificaO(char *vetor); int main(){ char casas[3][3]={' ',' ',' ',' ',' ',' ',' ',' ',' '}; int l=0,c=0; while(jogadas<9){ cout << "\t\t" << casas[0][0] << " | " << casas[0][1] << " | " << casas[0][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[1][0] << " | " << casas[1][1] << " | " << casas[1][2] << "\n"; cout << "\t\t_________\n"; cout << "\t\t" << casas[2][0] << " | " << casas[2][1] << " | " << casas[2][2] << "\n\n\n"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; while(l<=0 || c <=0 || l>3 || c>3){ system("cls"); cout << "Linha ou Coluna não existe!"; cout << "Digite uma linha: "; cin >> l; cout << "Digite uma coluna: "; cin >> c; } system("cls"); if(jogadas%2==0){ casas[--l][--c]='X'; }else{ casas[--l][--c]='O'; } jogadas++; verificaX(casas); verificaO(casas); } if(verificaX){ cout << "Jogador X ganhou!"; }else if(verificaO){ cout << "Jogador O ganhou!"; }else{ cout << "Empate!"; } return(0); } bool verificaX(char *vetor){ int l,c; for(l=0;l<3;l++){ if(vetor[l][0] && vetor[l][1] && vetor[l][2] == 'X'){ jogadas=10; return true; }else if(vetor[0][c] && vetor[1][c] && vetor[2][c] == 'X'){ jogadas=10; return true; } c++; } return 0; } bool verificaO(char *vetor){ int l,c; for(l=0;l<3;l++){ if(*vetor[l][0]=='X' && *vetor[l][1]=='X' && *vetor[l][2] == 'X'){ jogadas=10; return o=true; }else if(*vetor[0][c]=='X' && *vetor[1][c]=='X' && *vetor[2][c] == 'X'){ jogadas=10; return o=true; } c++; } return 0; }
    • By LUWEI
      Não estou conseguindo entender esse programa em c , tem como  me ajudar?
      Escreva um programa que armazene 40 elementos reais em um vetor. Mostrar o vetor e informar quantos números existem em cada faixa:
      Faixa 1 -> 1 - 100
      Faixa 2 -> 200 - 450
      Faixa 3 -> 501 - 745.5
      Faixa 4 -> 800.5 - 920.9
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.