int menu() //Menu principal do jogo { int i; titulo();//output imgJogo();//output.c puts("\t1) - Novo Jogo\t\t2) - Carregar Jogo\n"); puts("\t3) - Jogadores\t\t4) - Instrucoes\n"); puts("\t5) - Top 10\t\t6) - Sair\n"); printf("\n\tEscolha uma opcao:"); scanf(" %d", &i); fflush(stdin); if(i<1 || i>6) { do{ titulo();//output.c imgJogo();//output.c puts("\t1) - Novo Jogo\t\t2) - Carregar Jogo(UC)\n"); puts("\t3) - Jogadores(UC)\t4) - Instrucoes(UC)\n"); puts("\t5) - Top 10(UC)\t\t6) - Sair\n"); printf("\tOpcao nao existe, por favor escolha umas das opcoes(1 a 6)\n"); printf("\tEscolha uma opcao:"); scanf(" %d", &i); fflush(stdin); }while(i<1 || i>6); } return i; }
/** * Menu "Remover usuário" * @param db: ponteiro para database */ void menu_2(database_t *db){ char eh_valido[15]; //Recebe o ID para testar a validade id_type id; //ID já validada para a remoção titulo("Remover usuário"); //Ler e validar ID #ifdef MENU_IU printf("ID:"); #endif // MENU_IU _scanf_s(eh_valido, 15); if(!teste_id(eh_valido)){ printf("Falha: ID em formato invalido\n"); system_pause(); return; } id = atoi(eh_valido); //Remover usuário if(removerRegistro(db, id)) { printf("Operacao realizada com sucesso\n"); } else { printf("Falha: ID nao encontrado\n"); } system_pause(); return; }
JanelaPrincipal::JanelaPrincipal(wxWindow* parent,wxWindowID id,const wxPoint& pos,const wxSize& size) { this->cpu = new PipelineCPU(); this->hp = new Helpers(); std::string titulo1("Simulador 8086 com pipeline - v.: "); std::string tituloversion(AutoVersion::FULLVERSION_STRING); std::string tituloversionstatus(AutoVersion::STATUS_SHORT); titulo1.append(tituloversion).append(tituloversionstatus); wxString titulo(titulo1.c_str(), wxConvUTF8); //(*Initialize(JanelaPrincipal) Create(parent, wxID_ANY, titulo, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("wxID_ANY")); SetClientSize(wxSize(800,460)); { wxIcon FrameIcon; FrameIcon.CopyFromBitmap(wxBitmap(wxImage(_T("./res/chip_16x16.png")))); SetIcon(FrameIcon); } Panel1 = new wxPanel(this, ID_PANEL1, wxPoint(0,0), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1")); Button1 = new wxButton(Panel1, ID_BUTTON1, _("Sobre"), wxPoint(704,8), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); Abrir = new wxButton(Panel1, ID_BUTTON2, _("Abrir"), wxPoint(704,48), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); StaticLine1 = new wxStaticLine(Panel1, ID_STATICLINE1, wxPoint(704,42), wxSize(88,2), wxLI_HORIZONTAL, _T("ID_STATICLINE1")); StaticLine2 = new wxStaticLine(Panel1, ID_STATICLINE2, wxPoint(704,82), wxSize(88,2), wxLI_HORIZONTAL, _T("ID_STATICLINE2")); Executar = new wxButton(Panel1, ID_BUTTON3, _("Executar"), wxPoint(704,88), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3")); Registradores = new wxListCtrl(Panel1, ID_LISTCTRL2, wxPoint(8,32), wxSize(680,72), wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_HRULES|wxLC_VRULES|wxRAISED_BORDER, wxDefaultValidator, _T("ID_LISTCTRL2")); Pipeline = new wxListCtrl(Panel1, ID_LISTCTRL1, wxPoint(8,224), wxSize(680,56), wxLC_REPORT|wxLC_SINGLE_SEL|wxRAISED_BORDER, wxDefaultValidator, _T("ID_LISTCTRL1")); Resetar = new wxButton(Panel1, ID_BUTTON4, _("Resetar"), wxPoint(704,128), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON4")); Flags = new wxListCtrl(Panel1, ID_LISTCTRL3, wxPoint(8,136), wxSize(680,56), wxLC_REPORT|wxLC_SINGLE_SEL|wxLC_HRULES|wxLC_VRULES|wxRAISED_BORDER, wxDefaultValidator, _T("ID_LISTCTRL3")); StaticText1 = new wxStaticText(Panel1, ID_STATICTEXT1, _("Registradores:"), wxPoint(8,8), wxDefaultSize, 0, _T("ID_STATICTEXT1")); StaticText2 = new wxStaticText(Panel1, ID_STATICTEXT2, _("Flags:"), wxPoint(8,112), wxDefaultSize, 0, _T("ID_STATICTEXT2")); StaticText3 = new wxStaticText(Panel1, ID_STATICTEXT3, _("Pipeline:"), wxPoint(8,200), wxDefaultSize, 0, _T("ID_STATICTEXT3")); reg_info = new wxButton(Panel1, ID_BUTTON5, _("Informações"), wxPoint(104,0), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON5")); flag_info = new wxButton(Panel1, ID_BUTTON6, _("Informações"), wxPoint(48,104), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON6")); pipeline_info = new wxButton(Panel1, ID_BUTTON7, _("Informações"), wxPoint(64,192), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON7")); StaticLine3 = new wxStaticLine(Panel1, ID_STATICLINE3, wxPoint(704,168), wxSize(88,0), wxLI_HORIZONTAL, _T("ID_STATICLINE3")); Button2 = new wxButton(Panel1, ID_BUTTON8, _("Dump"), wxPoint(704,176), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON8")); MemView = new wxListCtrl(Panel1, ID_MemView, wxPoint(8,312), wxSize(680,128), wxLC_REPORT|wxLC_SINGLE_SEL|wxRAISED_BORDER, wxDefaultValidator, _T("ID_MemView")); StaticText4 = new wxStaticText(Panel1, ID_STATICTEXT4, _("Visualizador de Memória:"), wxPoint(8,288), wxDefaultSize, 0, _T("ID_STATICTEXT4")); StaticBitmap1 = new wxStaticBitmap(Panel1, ID_STATICBITMAP1, wxBitmap(wxImage(_T("./res/chip_48x48.png"))), wxPoint(728,224), wxDefaultSize, 0, _T("ID_STATICBITMAP1")); ligado = new wxStaticText(Panel1, ID_STATICTEXT5, _("On"), wxPoint(736,272), wxDefaultSize, 0, _T("ID_STATICTEXT5")); FileDialog1 = new wxFileDialog(this, _("Escolha um arquivo para abrir"), wxEmptyString, _("Assembler compilado (*.lst)|*.lst"), _("Assembler compilado (*.lst)|*.lst"), wxFD_DEFAULT_STYLE, wxDefaultPosition, wxDefaultSize, _T("wxFileDialog")); Center(); Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::OnButton1Click); Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::OnAbrirClick); Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::OnExecutarClick); Connect(ID_BUTTON4,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::OnResetarClick); Connect(ID_BUTTON5,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::Onreg_infoClick); Connect(ID_BUTTON6,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::Onflag_infoClick); Connect(ID_BUTTON7,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::Onpipeline_infoClick); Connect(ID_BUTTON8,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&JanelaPrincipal::OnButton2Click); Panel1->Connect(ID_PANEL1,wxEVT_PAINT,(wxObjectEventFunction)&JanelaPrincipal::OnPanel1Paint,0,this); //*) Reset(); }
/** * Menu "Buscar usuários por idade e gênero" * @param db: ponteiro para database */ void menu_7(database_t *db){ char eh_valido1[10], eh_valido2[10]; //Recebe as idades para testar a validade idade_t idade_min, idade_max; //Idades mínima e máxima para a busca genero_t genero_pesq[GENSIZE]; //Gênero a ser pesquisado id_type *id_result; //Ponteiro para o vetor de IDs resultados da pesquisa titulo("Buscar usuários por idade e gênero"); //Lê e valida as idades mínima e máxima #ifdef MENU_IU printf("Idade mínima:"); #endif // MENU_IU _scanf_s(eh_valido1, 10); #ifdef MENU_IU printf("Idade máxima:"); #endif // MENU_IU _scanf_s(eh_valido2, 10); if(teste_idade(eh_valido1) && teste_idade(eh_valido2)){ idade_min = atoi(eh_valido1); idade_max = atoi(eh_valido2); }else{ printf("Falha: Idade em formato inválido.\n"); system_pause(); return; } //Lê a string de gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(genero_pesq, GENSIZE); if(genero_pesq[0] == '\0') { return; } //Transforma a string dos gêneros em um vetor de códigos generosStrToCod(db, genero_pesq); //Busca //Obs: É usada apenas a primeira posição do vetor genero_pesq id_result = usariosPorGenero(db, (*genero_pesq), idade_min, idade_max); //Imprime os IDs #ifdef MENU_IU printf("\nIDs:\n"); #endif // MENU_IU int i = 0; while(id_result[i]){ printf("%d\n", id_result[i]); i++; } free(id_result); //Malloc feito na função usuariosPorGenero system_pause(); return; }
enum TipoOpcion leer_menu() { int opcion; do { titulo(); // Invocar a la función título printf( "\n\n\tElige una opción: \n\n" "\t\t1.- Crear una sopa.\n" "\t\t2.- Abrir una sopa.\n" "\t\t3.- Guardar.\n" "\t\t4.- Ver la sopa activa.\n" "\t\t5.- Salir\n" "\n\tTu Opción: " ); __fpurge(stdin); scanf(" %i", &opcion); } while(opcion<1 || opcion>salir+1); titulo(); return (enum TipoOpcion) (opcion - 1); }
int main(int argc, char *argv[]){ double x; titulo(); printf("\n\tx: "); scanf(" %lf", &x); pinta_entorno(x); printf("f'(x=%.2lf) = %.2lf\n", x, derivada(x)); return EXIT_SUCCESS; }
/** * Menu "Buscar usuários mais jovens" * @param db: ponteiro para database */ void menu_5(database_t *db){ genero_t generos_pesq[GENSIZE]; //Lista de gêneros a serem pesquisados char eh_valido[15]; //Tipo do usuário que precisa ser validado tu_t tu_pesq; //Tipo de usuário válido a ser pesquisado id_type *id_result; //Ponteiro para o vetor de IDs resultados da pesquisa titulo("Buscar usuários mais jovens"); //Lê a string de gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(generos_pesq, GENSIZE); if(generos_pesq[0] == '\0') { return; } //Lê o tipo de usuário #ifdef MENU_IU printf("Tipo de usuário:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_tu(eh_valido)) { tu_pesq = atoi(eh_valido); } else{ printf("Falha: Tipo do usuário em formato inválido.\n"); system_pause(); return; } //Transforma a string dos gêneros em um vetor de códigos generosStrToCod(db, generos_pesq); //Busca os usuários mais jovens id_result = usuariosMaisJovems(db, generos_pesq, tu_pesq); //Imprime os IDs #ifdef MENU_IU printf("\nIDs:\n"); #endif // MENU_IU int i = 0; while(i < 10) { if(id_result[i] == 0) { break; } printf("%d\n", id_result[i]); i++; } free(id_result); //Malloc feito na função usuariosMaisJovens system_pause(); return; }
int main() { char res; int z; player lista = NULL; // Ponteiro de lista lista=recupera(lista); // recupera a lista dos jogadores do momento em que encerrou o jogo do{ do{ z = menu(); switch(z){ case 1:lista=novoJogo(lista);break; case 2:lista=carregarjogo(lista);break; case 3:lista=jogadores(lista);break; case 4:instrucoes();break; case 5:top1(lista);break; } }while(z!=6); do{ titulo(); imgJogo(); printf("\t Tem a certeza que pretende sair?\n\n\t\t sim[s]\tnao[n] \n\t\t\t "); res = getchar(); if(res == 's') { titulo(); printf("\n\n\n\n\n\t\t\t Made by:\n\n\t Rodolfo Lima 21170826 & Ricardo Dinis 21170949\n\n\n\n\n\t\tIsec 2010\\2011 Cadeira:Programacao\n\n\n"); grava_ficheiro(lista); // grava a lista dos jogadores antes de encerrar o jogo getchar(); return 0; } }while(res != 's' && res != 'n'); }while(res != 's'); }
int main() { while(1) { pintar_background(); gotoxy(10,10); titulo(); int i; for(i=0;i<20;i++) final(); } }
player jogadores(player lista) { int op, total; do{ total=conta_jogador(lista); titulo(); printf("\n\tMenu principal\n\t >>Jogadores\n\n"); printf("\n\t1 - Inserir novo jogador"); printf("\t\t2 - Listar jogadores"); printf("\n\n\t3 - Eliminar jogador"); printf("\t\t\t4 - Recuperar Password\n"); printf("\n\t5 - Menu Principal\n"); printf("\n\n\t----------------------------------------------------------------\n"); printf("\n\t\tEstatisticas Globais"); printf("\n"); printf("\n\tNumero total de jogadores registados: %d\n\n", total); do{ printf("\nEscolha uma opcao: "); scanf("%d", &op); }while(op<1 || op>5); switch(op){ case 1: system("cls"); lista=inserir_player(lista); break; case 2: system("cls"); mostrar_lista(lista); break; case 3: system("cls"); lista= eliminar_player(lista); break; case 4: system("cls"); recoverPW(lista); break; } }while(op!=5); return lista; }
/** * Menu principal do programa, no qual o usuário pode escolher a operação a ser realizada * @param db: ponteiro para database * @return: 0 caso o usuário deseja sair do programa 1 caso contrário */ int menu_principal(database_t *db){ char opcao; titulo("_"); //Opções do menu #ifdef MENU_IU printf("1. Inserir usuário\n"); printf("2. Remover usuário\n"); printf("3. Pesquisar usuário\n"); printf("4. Buscar gostos musicais semelhantes\n"); printf("5. Buscar usuários mais jovens\n"); printf("6. Buscar gêneros mais populares\n"); printf("7. Buscar usuários por idade e gênero\n"); printf("8. Fechar o programa\n"); #endif // MENU_IU //opcao recebe a escolha do usuário opcao = _getchar(); //Vai para a operação desejada switch(opcao){ case '1': menu_1(db); return 1; case '2': menu_2(db); return 1; case '3': menu_3(db); return 1; case '4': menu_4(db); return 1; case '5': menu_5(db); return 1; case '6': menu_6(db); return 1; case '7': menu_7(db); return 1; case '8': //Ao retornar 0, sai do while na main return 0; default: //Se o caracter for inválido, volta ao menu principal return 1; } }
/** * Menu "Buscar gostos musicais semelhantes" * @param db: ponteiro para database */ void menu_4(database_t *db){ genero_t generos_pesq[GENSIZE]; //Lista de gêneros a serem pesquisados genero_t *generos_cod_result; //Lista de códigos de gêneros resultados da pesquisa char generos_result[GENSIZE]; //String com os gêneros resultados da pesquisa titulo("Buscar gostos musicais semelhantes"); //Lê a string de gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(generos_pesq, GENSIZE); if(generos_pesq[0] == '\0') { return; } //Transforma a string dos gêneros em um vetor de códigos generosStrToCod(db, generos_pesq); //É feita a busca generos_cod_result = generosPopularesGenero(db, generos_pesq); //A imformação é passada de generos_cod_result para generos_result strcpy(generos_result, generos_cod_result); free(generos_cod_result); //Malloc foi feito na função generosPopularesGenero // se há generos para imprimir if(generos_result[0] != 0) { //Transforma o vetor de códigos na string dos gêneros e imprime generosCodToStr(db, generos_result); //Imprime uma gênero por linha #ifdef MENU_IU printf("\nResultado:\n"); #endif // MENU_IU int i=0; while(generos_result[i]){ if(generos_result[i] != '@') { putchar(generos_result[i]); } else { putchar('\n'); } i++; } putchar('\n'); } system_pause(); }
/** * Menu "Pesquisar usuário" * @param db: ponteiro para database */ void menu_3(database_t *db){ char eh_valido[15]; //Recebe o ID para testar a validade id_type id; //ID já validada para a remoção offset_t offset_pesq; //Offset do registro pesquisado registro_t reg_pesq; //Registro que foi pesquisado titulo("Pesquisar usuário"); //Ler e validar ID #ifdef MENU_IU printf("ID:"); #endif // MENU_IU _scanf_s(eh_valido, 15); if(!teste_id(eh_valido)){ printf("Falha: ID em formato invalido\n"); system_pause(); return; } id = atoi(eh_valido); //Pesquisar usuario e verificar se o mesmo existe // ordena antes de pesquisar setOrdenado(db, 1); offset_pesq = idToRegistro(db, id, ®_pesq); if(offset_pesq == -1){ printf("Falha: ID nao encontrado\n"); system_pause(); return; } #ifdef MENU_IU printf("%ld\n\n", offset_pesq); #endif // MENU_IU //Deslocar db para a posição offset_pesq, //ler o registro e imprimir os dados printf("%d\n", reg_pesq.id); printf("%s\n", reg_pesq.nome); printf("%d\n", reg_pesq.idade); printf("%c\n", reg_pesq.sexo); generosCodToStr(db, reg_pesq.generos); //Transforma o vetor de códigos na string dos gêneros printf("%s\n", reg_pesq.generos); printf("%d\n", reg_pesq.tu); system_pause(); return; }
void mostrar_lista(player p) //lista todos os jogadores { titulo(); printf("\n\n"); if(p==NULL) printf("Lista Vazia"); else { while(p!=NULL) { printf("\n\tNick: %s\tPontuaçao: %d\n\tVictorias: %d\tDerrotas: %d\n",p->nick,p->pontuacao,p->victoria,p->derrota); p=p->prox; } } getchar(); getchar(); }
player inserir_player(player p) { char nick[ST_NICK], nome[ST_NICK]; char pw[ST_PW]; player novo, aux; fflush(stdin); titulo(); printf("\n\n\tNome: "); gets(nome); do{ printf("\n\tNick: "); gets(nick); }while(vnick(p,nick)!=0); // vai estar sempre dentro ciclo ate que o utilizador // insira um nick que nao exista printf("\n\tPassword: "); gets(pw); novo=malloc(sizeof(no)); // aloca memoria pra lista ligada if (novo==NULL) // se falhar na alocaçao de memoria retorna o ponteiro para o inicio da lista return p; strcpy(novo->nome,nome); strcpy(novo->nick,nick); strcpy(novo->pw,pw); novo->derrota=0; //inicializa as derrotas novo->victoria=0; //inicializa as victorias novo->pontuacao=100+((novo->victoria)*2)-(novo->derrota); //inicializa a pontuaçao novo->prox=NULL; if(p==NULL ||novo->pontuacao>p->pontuacao) // caso seja o primeiro elemento { novo->prox=p; p=novo; } else // caso ja exista elementos na estrutura { aux=p; while(aux->prox!=NULL && novo->pontuacao<aux->prox->pontuacao) //posiciona o ponteiro para inserir de maneira ordenada pela pontuaçao aux=aux->prox; novo->prox=aux->prox; aux->prox=novo; } return p; }
void JanelaPrincipal::OnAbrirClick(wxCommandEvent& event) { std::string titulo1("Simulador 8086 com pipeline - v.: "); std::string tituloversion(AutoVersion::FULLVERSION_STRING); std::string tituloversionstatus(AutoVersion::STATUS_SHORT); titulo1.append(tituloversion).append(tituloversionstatus).append(" - "); wxString titulo(titulo1.c_str(), wxConvUTF8); // Cria um dialogo para abrir nosso objeto compilado do assemble if (FileDialog1->ShowModal() == wxID_OK) { //abriu o arquivo Reset(); SetTitle(titulo + FileDialog1->GetPath()); this->cpu->readFile(std::string((FileDialog1->GetPath()).mb_str())); wxMessageBox(_("Arquivo carregado com êxito."),_("Abrir Arquivo.")); getDadosCPU(); } else { SetTitle(titulo); } }
int main(){ char res,rep; do{ titulo(); float orden=0; validacion(); printf("\n\nDeseas registrar otra venta? Presiona (S/N): "); fflush(stdin); scanf("%c",&res); }while (res=='s'||res=='S'); printf("Regresar al Menu Principal Presione(S/N): "); fflush(stdin); scanf("%c",&rep); if (rep == 'S' || rep == 's'){ system("start menu.exe"); return 0; }else{ printf("\n\n\t***** Programa finalizado *****"); } }
void recoverPW(player p) { char nick[ST_NICK]; char nome[ST_NICK]; char pw[ST_PW]; int i=0; titulo(); if (p==NULL) //Lista encontra-se vazia { printf("Lista vazia"); return; } printf("\n\n\t---- NOVA PASSWORD -----\n"); getchar();printf("\n"); printf("\n\tNick: "); gets(nick); printf("\n\tNome: "); gets(nome); while (p!=NULL) { if(strcmp(p->nome,nome)==0 && strcmp(p->nick,nick)==0) // se o nome e o nick inserido forem iguais aos do jogador { //que se encontra na lista pede-se entao para inserir uma nova password printf("\tInsira a nova password"); gets(pw); if(strcpy(p->pw,pw)) // verificar se a password foi mesmo modificada (teste) { printf("\tPassword Modificada!"); getchar(); break; break; }else printf("ERRO!");break;break; } p=p->prox; } }
void top1(player lista)//mostra 10 primeiros nomes { char res; do{ titulo(); printf("\t\tMenu Principal[x]\n"); printf("\n\n\tMenu principal\n\t >>Top 10\n"); printf("\t\t\t----------------------------------------\n"); printf("\t\t\t Rank\t\t Nome\t\t Pontos"); printf("\n\t\t\t----------------------------------------"); top(lista); printf("\n\t\t\t"); scanf("%c", &res); fflush(stdin); if(res == 'x') { return ; } }while(res != 'x'); }
/** * Menu "Buscar gêneros mais populares" * @param db: ponteiro para database */ void menu_6(database_t *db){ char eh_valido1[10], eh_valido2[10]; //Recebe as idades para testar a validade idade_t idade_min, idade_max; //Idades mínima e máxima para a busca genero_t *generos_cod_result; //Lista de códigos de gêneros resultados da pesquisa char generos_result[GENSIZE]; //String com os gêneros resultados da pesquisa titulo("Buscar gêneros mais populares"); //Lê e valida as idades mínima e máxima #ifdef MENU_IU printf("Idade mínima:"); #endif // MENU_IU _scanf_s(eh_valido1, 10); #ifdef MENU_IU printf("Idade máxima:"); #endif // MENU_IU _scanf_s(eh_valido2, 10); if(teste_idade(eh_valido1) && teste_idade(eh_valido2)){ idade_min = atoi(eh_valido1); idade_max = atoi(eh_valido2); }else{ printf("Falha: Idade em formato inválido.\n"); system_pause(); return; } //Busca generos_cod_result = generosPopularesIdade(db, idade_min, idade_max); if (generos_cod_result == NULL) { return; } //A informação é passada de generos_cod_result para generos_result memcpy(generos_result, generos_cod_result, 10); generos_result[10] = 0; // garante q o ultimo elemnto vai ser zero free(generos_cod_result); //Malloc foi feito na função generosPopularesIdade // se há generos para imprimir if(generos_result[0] != 0) { //Transforma o vetor de códigos na string dos gêneros e imprime generosCodToStr(db, generos_result); //Imprime uma gênero por linha #ifdef MENU_IU printf("\nResultado:\n"); #endif // MENU_IU int i=0; while(generos_result[i]){ if(generos_result[i] != '@') { putchar(generos_result[i]); } else { putchar('\n'); } i++; } putchar('\n'); } system_pause(); }
void adicionar_conta(cliente *cliente1, char nomePasta[]) { char opcao[10]; int i = 0; char j; int tam = 0; int opcao_menu = 0; int controlo = 0; int flag1; int flag2; conta conta, *aux, *novo; FILE *f = NULL; bool existe = false;//variavel que serve para verificar se o nome da conta ja existe associado a outra conta bool verifica = false; //para verificar se o login, nome e password tem os caracteres suficientes aux = cliente1->lista; system("cls"); titulo(); printf("\n Adicionar Conta \n\n"); do { flag1 = 0; flag2 = 0; printf("Indique o login: "******"\n"); // verifica se o login tem entre os minimos e maximos caracteres pedidos if (strlen(conta.login) < 1 || strlen(conta.login) > MAX_LOG ) { verifica = false; flag1 = 1; printf("\nLogin nao tem caracteres suficientes ou tem caracteres a mais (deve ter entre 1 e 100 caracteres)!\n"); } if (strcmp(conta.login, "\n") == 0) { printf("\n\nNome invalido\n\n"); } else { tam = strlen(conta.login); for (i = 0; i < tam; i++) { j = conta.login[i]; if (j == ' ') { verifica = false; flag2 = 1; printf("\nLogin tem espacos\n"); break; } } if (flag1 == 0 && flag2 == 0) { verifica = true; } } } while (verifica == false); do { printf("\nIndique se pretende password (1-Manual 2-Automatica 3-Colar): "); fflush(stdin); controlo = scanf("%d", &opcao_menu); //verifica que a opcao introduzido é um numero e nao um caracter if (entradas_int(controlo) == 0) { controlo = 0; opcao_menu = 0; } else { controlo = 1; } } while (controlo < 1 || opcao_menu < 1 || opcao_menu > 3); if (opcao_menu == 1) { do { verifica = false; flag1 = 0; flag2 = 0; printf("\nIndique a password: "******"\n"); // verifica se a password tem entre os minimos e maximos caracteres pedidos if (strlen(conta.password) < 1 || strlen(conta.password) > MAX_PASS) { flag1 = 1; printf("\nPassword nao tem caracteres suficientes ou tem caracteres a mais (deve ter entre 1 e 16 caracteres)!\n"); } if (strcmp(conta.password, "\n") == 0) { printf("\n\nPassword invalida\n\n"); flag2 = 1; } else { tam = strlen(conta.password); for (i = 0; i < tam; i++) { j = conta.password[i]; if (j == ' ') { verifica = false; flag2 = 1; printf("\nPassword tem espacos\n"); break; } } } if (flag1 == 0 && flag2 == 0) { verifica = true; } } while (verifica == false); } else if (opcao_menu==2) { controlo = gera_pass_auto(conta.password); if (controlo == 1) { printf("Erro fatal"); system("PAUSE"); exit(0); } else { printf("Password gerada com sucesso"); } } else { char *h = ShortcutColar(); printf("Password utilizada\t%s", h); strcpy(conta.password, h); } do { existe = false; do{ printf("\nIndique nome da conta (nome 'tudo' e invalido): "); fflush(stdin); fgets(conta.nome, MAX_NOME, stdin); strtok(conta.nome, "\n"); minusculas(conta.nome); // verifica se o nome tem entre os minimos e maximos caracteres pedidos if (strlen(conta.nome) < 3 || strlen(conta.nome) > MAX_NOME || strcmp(conta.nome, "tudo") == 0 ) { verifica = false; printf("\nNome nao tem numero de caracteres ideal!\n"); } else { verifica = true; } } while (verifica == false); //ciclo que verifica se existe alguma conta ja com o mesmo nome while (aux != NULL) { if (strcmp(conta.nome, aux->nome) == 0) { existe = true; break; } else { aux = aux->prox; } } if (existe==true) { printf("\nNome de conta existente ou invalido, tente novamente"); } } while (existe==true); aux = cliente1->lista; if (aux == NULL) { novo = malloc(sizeof(conta)); strcpy(novo->login, conta.login); strcpy(novo->nome, conta.nome); strcpy(novo->password, conta.password); novo->prox = NULL; cliente1->num_contas++; cliente1->lista = novo; } else{ while (aux->prox != NULL) { aux = aux->prox; } novo = malloc(sizeof(conta)); strcpy(novo->login, conta.login); strcpy(novo->nome, conta.nome); strcpy(novo->password, conta.password); novo->prox = NULL; aux->prox = novo; cliente1->num_contas++; } escreve_ficheiro(cliente1, nomePasta); strtok(nomePasta, "/"); printf("\nConta adicionada!!"); printf("\nLogin %s", conta.login); printf("\nPass %s", conta.password); printf("\nNome %s\n", conta.nome); system("PAUSE"); }
player jogo(int njogadores, jogador **j, int mc, int linhas, int colunas, int jcria, char *tabela, int njog, int ord, int njogadas, player lista, int undo, int *posicoes, int njact) { //funcao que gere jogadores e tabela enquanto se joga char *tab; jogador *aux; int tamanho, x, pov, c=0; int posh, posv, ret, i, *posicoes1; tamanho=colunas*linhas; inicializatab(tabela,tamanho);//Inicializa tabela com caracter '+' ,caso seja aumentado o tamanho da tabela nao altera as posicoes jogadas antes titulo(); printf("\t\t\tSair[x]\n"); if(undo==0) { printf("\t\t\t\t\t\t\t\tUndo[u]\n"); } escrevetab(tabela, colunas, linhas); putchar('\n\n'); do{ do{ printf("\n\tJogador - %s\n\n", j[ord]->nickj); ret = pos_jog( &posh, &posv, colunas, linhas, mc, posicoes, tabela, j[ord], &njact, njogadores, ord, undo);//funcao pede coordenadas, x, e undo pov = posv; posv= posv*colunas; if(ret==1){//se a funcao pos_jog devolver 1 e pa sair do jogo if(mc==0){ guardarjogo( tabela, njogadas, linhas, colunas, j, njogadores, njog, ord, undo, posicoes, njact); } free(tabela); return lista; } if((posh>=colunas || posh<0) || (pov>=linhas || pov<0)){//caso facam undo ou x torna apresentar tabela etc e continua a jogar titulo(); printf("\t\t\tSair[x]\n"); if(undo==0) { printf("\t\t\t\t\t\t\t\tUndo[u]\n"); } escrevetab(tabela, colunas, linhas); putchar('\n'); printf("\t\t\tNumero de jogadas efectuadas:%d\n\n", njogadas); }else{ if(tabela[posh+posv]=='O' || tabela[posh+posv]=='0'){ printf("\n\tNao pode repetir posicoes!\n\n"); posh = -1; }else{ tabela[posh+posv]='O';//insere posicao inserida na tabela posicoes[njact] = posh+posv;//guarda posicao inserida njact++;//aumenta jogadas actuais(undo) njogadas++;//aumenta total de jogadas efectuadas posicoes1 = realloc(posicoes,sizeof(int)*(njact+1));//aumenta tamanho de posicoes para receber proxima jogada if(posicoes1 == NULL) { printf("ERRO alocacao memoria posicoes"); }else{ posicoes=posicoes1; } } } }while((posh>=colunas || posh<0) || (pov>=linhas || pov<0));//verifica se posicoes inseridas sao validas for(i=1;i<colunas-posh;i++) //verifica se desde a posicao escolhida para frente ate ao final dessa linha { if(tabela[posh+posv+i]=='O' || tabela[posh+posv+i]=='0'){ //com o i(distancia) de cima, verifica se com o mesmo i para baixo. if((tabela[posh+posv+(colunas*i)]=='O' || tabela[posh+posv+(colunas*i)]=='0') && (tabela[posh+posv+i+(colunas*i)]=='O' || tabela[posh+posv+i+(colunas*i)]=='0')){ //se verificar quadrado altera as posicoes para '0' tabela[posh+posv]='0'; tabela[posh+posv+i]='0'; tabela[posh+posv+(colunas*i)]='0'; tabela[posh+posv+i+(colunas*i)]='0'; if(njog>=3){//e se njog actuais altera ordem dos jogadores no array **j e altera colunas e linhas para mais a frente fazer nova alocacao com +1 linha e coluna aux=j[ord];//aux guarda jogador que perdeu for(x=0;x<(njog-1)-ord;x++)//desde a posicao que jogador perdeu ate njogadores actuais- ordem (ex: jC perde desde posicao de C ate ultimo jogador em jogo altera posicao para cima) { j[(ord+x)]=j[(ord+1+x)]; } j[(ord+x)]=aux;//mete jgador que perdeu nao posicao a seguir ao ciclo ord=ord-1; njog--; colunas++; linhas++; c=1;//flag para fazer nova alocacao }else{ if(njog<3){//se njogadores actuais menor que 3 altera ordem na mesma mas n altera linhas nem colunas pois tabuleiro nao vai mudar aux=j[ord]; for(x=0;x<(njog-1)-ord;x++) { j[(ord+x)]=j[(ord+1+x)]; } j[(ord+x)]=aux; ord=ord-1; njog--; } } }else{//com o i(distancia) de cima, verifica se com o mesmo i para cima. if((tabela[posh+posv-(colunas*i)]=='O' || tabela[posh+posv-(colunas*i)]=='0') && (tabela[posh+posv+i-(colunas*i)]=='O' || tabela[posh+posv+i-(colunas*i)]=='0')){ tabela[posh+posv]='0'; tabela[posh+posv+i]='0'; tabela[posh+posv-(colunas*i)]='0'; tabela[posh+posv+i-(colunas*i)]='0'; if(njog>=3){ aux=j[ord]; for(x=0;x<(njog-1)-ord;x++) { j[ord+x]=j[ord+1+x]; } j[ord+x]=aux; ord=ord-1; njog--; colunas++; linhas++; c=1; }else{ if(njog<3){ aux=j[ord]; for(x=0;x<(njog-1)-ord;x++) { j[ord+x]=j[ord+1+x]; } j[ord+x]=aux; ord=ord-1; njog--; } } } } } } if(c==0) { for(i=1;i<=posh;i++) //verifica se desde a posicao escolhida para tras ate ao inicio dessa linha { if(tabela[posh+posv-i]=='O' || tabela[posh+posv-i]=='0') { //com o i(distancia) de cima, verifica se com o mesmo i para baixo. if((tabela[posh+posv+(colunas*i)]=='O' || tabela[posh+posv+(colunas*i)]=='0') && (tabela[posh+posv-i+(colunas*i)]=='O' || tabela[posh+posv-i+(colunas*i)]=='0')) { tabela[posh+posv]='0'; tabela[posh+posv-i]='0'; tabela[posh+posv+(colunas*i)]='0'; tabela[posh+posv-i+(colunas*i)]='0'; if(njog>=3) { aux=j[ord]; for(x=0;x<(njog-1)-ord;x++) j[ord+x]=j[ord+1+x]; j[ord+x]=aux; ord=ord-1; njog--; colunas++; linhas++; c=1; }else { if(njog<3) { aux=j[ord]; for(x=0;x<(njog-1)-ord;x++) j[ord+x]=j[ord+1+x]; j[ord+x]=aux; ord=ord-1; njog--; } } }else {//com o i(distancia) de cima, verifica se com o mesmo i para cima. if((tabela[posh+posv-(colunas*i)]=='O' || tabela[posh+posv-(colunas*i)]=='0') && (tabela[posh+posv-i-(colunas*i)]=='O' || tabela[posh+posv-i-(colunas*i)]=='0')) { tabela[posh+posv]='0'; tabela[posh+posv-i]='0'; tabela[posh+posv-(colunas*i)]='0'; tabela[posh+posv-i-(colunas*i)]='0'; if(njog>=3) { aux=j[ord]; for(x=0;x<(njog-1)-ord;x++) j[ord+x]=j[ord+1+x]; j[ord+x]=aux; ord=ord-1; njog--; colunas++; linhas++; c=1; }else { if(njog<3) { aux=j[ord]; for(x=0;x<(njog-1)-ord;x++) j[ord+x]=j[ord+1+x]; j[ord+x]=aux; ord=ord-1; njog--; } } } } } } } if(c==1 && njog>=2){//se a c =1 indicao para alterar tabela e se njogadores actuais for menor que 3 undo=1;//undo deixa de funcionar pk um jogador perdeu tamanho = colunas*linhas; tab = realloc(tabela,sizeof(char)*tamanho);//nova alocacao com novo tamanho maior if(tab == NULL) { printf("ERRO alocacao memoria novo tamanho tabela"); }else{ tabela=tab; } //codigo em baixo-linha 1 posicao nao altera, linha 2 posicao altera -1 , linha 3 posicao altera - 2 (relatorio) for(i=linhas-1;i>=0;i--)//compoe posicoes da tabela ao fim de aumento do array, comecao do fim para o principio { for(x=colunas-1;x>=0;x--){//ultima linha ultima coluna(final do array) if(tabela[i*colunas+x]=='O')//verifica se foi posicao jogada { if((colunas-x)<=i+1)//verifica se a posicao e menor que a linha { tabela[i*colunas+x]='+';//altera posicao que estava o 'O' para + tabela[i*colunas+x+i+1]='O';// }else{ tabela[i*colunas+x]='+'; tabela[i*colunas+x+i]='O'; } } if(tabela[i*colunas+x]=='0')//mmo que em cima mas se as posicoes tiverem '0' { if((colunas-x)<=i+1) { tabela[i*colunas+x]='+'; tabela[i*colunas+x+i+1]='0'; }else{ tabela[i*colunas+x]='+'; tabela[i*colunas+x+i]='0'; } } } } inicializatab(tabela,tamanho);//funcao que mete todas posicoes do array excepto as preenchidas com '+' } if(ord+1>=njog)//altera ordem se ordem =njogadores actuais volta ao 1 ord=0; else ord++; c=0;//flag de nova alocacao de tabela a 0 titulo(); printf("\t\t\tSair[x]\n"); if(undo==0) { printf("\t\t\t\t\t\t\t\tUndo[u]\n"); } escrevetab(tabela, colunas, linhas); putchar('\n'); printf("\t\t\tNumero de jogadas efectuadas:%d\n\n", njogadas); }while(njog>1);//condicao para terminar jogo titulo(); printf("\t\t\tSair[x]\n\n"); escrevetab(tabela, colunas, linhas); printf("\t\t\tJogo terminado "); putchar('\n'); printf("\n\t\t\tNumero de total de jogadas efectuadas:%d\n\n", njogadas); printf("\n\t\t\t\tVencedor:%s\n", j[0]->nickj); for(i=1;i<njogadores;i++){ printf("\n\t\t\tDerrotado:%s\n", j[i]->nickj); } for(i=0;i<njogadores;i++)//percorre todos os jogadores e altera pontuacao dos registados { lista = ranking(lista,j[i]->nickj,i); } free(posicoes);//liberta arrays free(tabela); getchar(); return lista; }
/** * Menu "Inserir usuário" * @param db: ponteiro para database */ void menu_1(database_t *db){ registro_t new_reg; //Novo registro char eh_valido[15]; //Recebe variáveis que precisa testar a validade char ok = 1; //Se =1 ao final da função, todos os dados estão dentro do padrão esperado titulo("Inserir usuário"); //ID #ifdef MENU_IU printf("\nID:"); #endif // MENU_IU _scanf_s(eh_valido, 15); if(teste_id(eh_valido)) { new_reg.id = atoi(eh_valido); } else { printf("ID em formato inválido.\n"); ok = 0; } //Nome #ifdef MENU_IU printf("Nome:"); #endif // MENU_IU _scanf_s(new_reg.nome, NOMESIZE); //Idade #ifdef MENU_IU printf("Idade:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_idade(eh_valido)) { new_reg.idade = atoi(eh_valido); } else{ printf("Idade em formato inválido.\n"); ok = 0; } //Sexo #ifdef MENU_IU printf("Sexo:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_sexo(eh_valido)) { new_reg.sexo = eh_valido[0]; } else{ printf("Sexo em formato inválido.\n"); ok = 0; } //Gêneros #ifdef MENU_IU printf("Gêneros:"); #endif // MENU_IU _scanf_s(new_reg.generos, GENSIZE); if(new_reg.generos[0] == '\0') { strcpy(new_reg.generos, "unknown"); } //Tipo de usuário #ifdef MENU_IU printf("Tipo de usuário:"); #endif // MENU_IU _scanf_s(eh_valido, 10); if(teste_tu(eh_valido)) { new_reg.tu = atoi(eh_valido); } else{ printf("Tipo do usuário em formato inválido.\n"); ok = 0; } //Confere se algum campo era inválido if(!ok){ printf("Falha: Campo(s) invalido(s)\n"); system_pause(); return; } //Transforma a string dos gêneros em um vetor de códigos //Adiciona, se necessário, o gênero na tabela de gêneros generosStrToCod(db, new_reg.generos); //Adiciona o registro if(novoRegistro(db, &new_reg) != EOF){ //Confere se o ID já existe //nesse caso, houve erro printf("Operacao realizada com sucesso\n"); system_pause(); return; } printf("Falha: ID ja cadastrado\n"); system_pause(); return; }
player carregarjogo(player lista) //funcao carrega jogo { int i, tamanho, linhas, colunas, njogadores, njogadas, len, jcria=0, mc=0, njog, ord, njact, *posicoes, undo; char inf, *tabela; char cod[8]; FILE *f; jogador **j; titulo(); printf("\n\n\tMenu principal\n\t >>Carregar Jogo\n"); printf("\n\tPor favor insira codigo de jogo:"); gets(cod); f = fopen(cod,"r"); //abre ficheiro com nome de codigo inserido if(f==NULL) { printf("\n\t[Erro acesso ao ficheiro]\n"); return lista; } else { fscanf(f, " %d ", &njogadores); j = malloc(sizeof(jogador)*njogadores);//cria array de ponteiros para estrutura jogadores if(j==NULL) { printf("erro alocacao"); } for(i=0;i<njogadores;i++)//cria espaco para alocar jogadores { j[i]= malloc(sizeof(jogador)); } for(i=0;i<njogadores;i++)//le dados para estruturas { fgets(j[i]->nickj, 20, f); fscanf(f, " %d ", &j[i]->registado); fscanf(f, " %d ", &j[i]->undo); len = strlen(j[i]->nickj);//corrige o tamanho (gets guardo com \n) if (len > 0 && j[i]->nickj[len-1] == '\n') // se newline j[i]->nickj[len-1] = '\0'; } fscanf(f, " %d ", &linhas); fscanf(f, " %d ", &colunas); fscanf(f, " %d ", &njogadas); fscanf(f, " %d ", &njog); fscanf(f, " %d ", &ord); fscanf(f, " %d ", &undo); fscanf(f, " %d ", &njact); posicoes = malloc(sizeof(int)*(njact+1));//aloca espaco para as posicoes jogadas for(i=0;i<njact;i++) { fscanf(f," %d ", &posicoes[i]); } tamanho=colunas*linhas; tabela = malloc(sizeof(char)*tamanho); if(tabela == NULL) { puts("[Erro na alucacao de memoria]"); return lista; } fgets(tabela,tamanho,f);//guarda tabela de jogo fclose(f); //apresenta alguns dados do jogo titulo(); printf("\n\n\tMenu principal\n\t >>Carregar Jogo\n"); printf("\t\t\t\tInformacao do jogo:"); printf("\n\n\t\tJogadores:%d\n", njogadores); for(i=0;i<njogadores;i++) { printf("\t\t%d:%s\n", i+1, j[i]->nickj); } printf("\n\n\t\tTamanho do tabuleiro, linhas:%d, colunas:%d\n", linhas, colunas); printf("\n\n\t\tNumero total de jogadas efectuadas:%d\n\n", njogadas); do{ printf("\t\tContinuar?"); printf("\t\t sim[s]\tnao[n] \t"); scanf("%c", &inf); fflush(stdin); }while(inf != 's' && inf != 'n'); if(inf=='s'){ jogo(njogadores, j, mc, linhas, colunas, jcria, tabela, njog, ord, njogadas, lista, undo, posicoes, njact); remove(cod); } } j=Libertarnomes(njog, j);//liberta os ponteiros para estruturas dentro do array free(j);//liberta array return lista; }
player novoJogo(player lista) //opcao novojogo vai pedir aos jogadores as informacoes necessarias para criar um novo jogo, como numero jogadores tamanho tabuleiro se se kerem registar ou nao etc.. { int i, nJog, c, mc=0, ret, jcria=1, linhas, colunas, tamanho, njog, ord=0, njogadas=0, x, k=0, njact=0, *posicoes, undo=0; char nJogadores, res, con[12]="Convidado", inf, *tabela; player aux; jogador **j; //do{ c=0;//numero de convidado do{ titulo(); printf("\t\tMenu Principal[x]\n"); printf("\n\tMenu principal\n\t >>Novo Jogo\n\n"); printf("\n\tNumero de jogadores:\t\tMinimo 2 - Maximo 6\n\t\t"); scanf("%c", &nJogadores); fflush(stdin); if(nJogadores == 'x') { ret=tras(); if(ret==1){ return lista; } } }while(nJogadores<='1' || nJogadores>'6'); nJog = nJogadores-'0';//como informacao pedida e char 'alterar' para int njog = nJog; j = malloc(sizeof(jogador)*nJog);//cria array de ponteiro para estruturas if(j==NULL) { printf("erro alocacao array jogador"); } for(i=0;i<nJog;i++) { j[i]= malloc(sizeof(jogador));//cria ponteiros para estruturas } for(i=0;i<nJog;i++) { do{ titulo(); printf("\t\tMenu Principal[x]\n"); printf("\n\tMenu principal\n\t >>Novo Jogo\n\n"); printf("\n\t\t\t< Novo Jogo >\t%d Jogadores\n\n", nJog); printf("\t\t%d Jogador deseja jogar em modo convidado?", i+1);//modo convidado ou nao printf("\n\n\t\t\t sim[s]\tnao[n] \n\t\t\t"); scanf("%c", &res); fflush(stdin); if(res == 'x') { ret=tras(); if(ret==1){ return lista; } } }while(res != 's' && res != 'n'); if(res=='s')//se modo convidado sim fica com o nome convidado e numero de convidado { con[9]=c+49; //c numero convidado con[10]='\0'; strcpy(j[i]->nickj,con); j[i]->registado=0; j[i]->undo=1; c++; mc=1; }else{ do{ printf("\t\tEsta registado?");//verifica se ja se encontra registado ou se quer registar printf("\n\n\t\t\t sim[s]\tnao[n] \n\t\t\t"); scanf("%c", &res); fflush(stdin); if(res == 'x') { ret=tras(); if(ret==1){ return lista; } } }while(res != 's' && res != 'n'); if(res == 's'){ aux = login(lista);//verifica login if(aux==NULL)//se login n conseguido i-1 para tornar a inserir informacao sobre esse jogador { i--; }else{ for(x=0;x<i;x++){//verifica se jogador ja se encontra a jogar if(strcmp(aux->nick,j[x]->nickj)==0){ printf("\t\tJogador ja logado"); getchar(); i--; k=1; break; } } if(k==0){//login efectuado com exito printf("\t\tBem vindo %s", aux->nick); strcpy(j[i]->nickj,aux->nick); j[i]->registado=1; j[i]->undo=1; getchar(); } //k=0; } }else{// caso se queira registar lista=inserir_player(lista); i--; } k=0; } } do{ titulo(); printf("\t\tMenu Principal[x]\n"); printf("\n\tMenu principal\n\t >>Novo Jogo\n\n"); printf("\n\t\t< Novo Jogo >\t%d Jogadores\n\n", nJog); for(i=0;i<nJog;i++) { printf("\n\t%d Jogador-%s", i+1, j[i]->nickj); } puts("\n"); printf("\t\tContinuar?");//confirma jogadores que vao comecar jogo printf("\t\t sim[s]\tnao[n] \t"); scanf("%c", &inf); fflush(stdin); }while(inf != 's' && inf != 'n'); if(inf=='s'){ titulo(); printf("\t\t\tSair[x]\n\n"); tamtab( &linhas, &colunas); //Funcao que pede ao jogador o numero de colunas e linhas para saber o tamanho da tabela tamanho=colunas*linhas; tabela = malloc(sizeof(char)*tamanho);//aloca tabela de jogo if(tabela == NULL) { puts("[Erro na alocacao de memoria tabela]"); } posicoes = malloc(sizeof(int));//aloca array para posicoes if(posicoes==NULL) { printf("erro alocacao array posicoes"); getchar(); return lista; } //funcao jogo lista = jogo(nJog, j, mc, linhas, colunas, jcria, tabela, njog, ord, njogadas, lista, undo, posicoes, njact); //cria matriz e dentro faz gestao do jogo || falta receber tamanho da matriz e enviar a tabela com os linhas, colunasores /*for(i=0;i<nJog;i++){ free(p[i]); } //free(p); */ } j=Libertarnomes(nJog, j);//liberta estrutura de array de ponteiros free(j); return lista; }
void main() { textcolor(WHITE); textbackground(BLUE); clrscr(); char t; cuadro(1,80,1,6,177); cuadro(1,80,22,24,178); titulo(); do{ t=getch(); switch(t) { case 72://72 { if (f>10) {f--;} else {gotoxy(c-3,f);cprintf(" "); f=13;} //cambiar si se agregan mas opciones break; } case 80://80 { if (f<13)//cambiar si se agregan mas opciones {f++;} else {gotoxy(c-3,f);cprintf(" "); f=10;} break; } default: { /*gotoxy(21,14);printf(" Comando invalido"); delay(1000); gotoxy(21,14);printf(" ");*/ break; } } if ((t==13)&& (f==10)) { gotoxy(10,23);cprintf(" Insertar "); delay(1000); gotoxy(10,23);cprintf(" "); Insertar(); titulo(); } if ((t==13)&& (f==11)) { gotoxy(10,23);cprintf(" Sacar "); delay(1000); gotoxy(10,23);cprintf(" "); clrpart(); gotoxy(10,10);printf("1-Sacar por Pila"); gotoxy(10,11); printf("2-Sacar por Cola"); gotoxy(10,13);printf("opcion: "); gotoxy(18,13);scanf("%d",&op); if (op==1) { SacarPila(); } else if (op==2) { SacarCola(); } else { gotoxy(21,14);printf(" Comando invalido"); delay(1000); gotoxy(21,14);printf(" "); } op=0; titulo(); } if ((t==13)&& (f==12)) { gotoxy(10,23);cprintf(" Mostrar "); delay(1000); gotoxy(10,23);cprintf(" "); clrpart(); gotoxy(10,10);printf("1-Mostrar por Pila"); gotoxy(10,11); printf("2-Mostrar por Cola"); gotoxy(10,13);printf("opcion: "); gotoxy(18,13);scanf("%d",&op); if (op==1) { MostrarPila(); } else if (op==2) { MostrarCola(); } else { gotoxy(21,14);printf(" Comando invalido"); delay(1000); gotoxy(21,14);printf(" "); } op=0; titulo(); } if ((t==13)&& (f==13)) { gotoxy(10,23);cprintf(" saliendo "); delay(1000); gotoxy(10,23);cprintf(" "); t=27; } /*if ((t==13)&& (f==13)) { gotoxy(10,23);cprintf(" 5 opcion "); delay(1000); gotoxy(10,23);cprintf(" "); titulo(); } if ((t==13)&& (f==14)) { gotoxy(10,23);cprintf(" saliendo... "); delay(1000); gotoxy(10,23);cprintf(" "); }*/ textcolor(YELLOW); gotoxy(c-3,f); cprintf("->"); textcolor(WHITE); gotoxy(c-3,f-1);cprintf(" "); gotoxy(c-3,f+1);cprintf(" "); }while(t!=27); }
int main(void) { int opc1,aux1=0,fgp,cadlen,auxsigma=1,ncic,o,oo,i,t,ii,a,xa=0,xx=0,izq=0,der=0,u,auxiliarsuma=0; char cs1,cs2,cs3,dir,araux; char auxs1[s1sigma+4],stzero[5][2],st1[5][3],st2[5][3],st3[5][2],st4[4],s2tzero[5][2],s2t1[5][2],s2t2[5][3],s2t3[5][3],s2t4[5][3],s2t5[5][3],s2t6[5][1],head[2]; char s3tzero[5][2],s3t1[5][2]; char cad[maxcad],backupcad[maxcad]; for(int l=0;l<maxcad;l++) // inicializando arreglo que recibe la cadena a ser evaluada { cad[l]='\0'; } FILE *stream1; FILE *stream2; FILE *stream3; stream1=fopen("stream1.amt","r"); // maquina de turing 1 stream2=fopen("stream2.amt","r"); // maquina de turing 2 stream3=fopen("stream3.amt","r"); // maquina de turing 3 system("clear"); n_saltos_de_linea(2); titulo(); n_saltos_de_linea(2); menu_maq_t(); scanf("%d",&opc1); n_saltos_de_linea(1); switch(opc1) { case 1: cs1=fgetc(stream1); for(i=0;i<=s1sigma+4;i++) //Inicializando arreglo auxiliar { auxs1[i]='\0'; } while(cs1!='?') { printf("Leyendo archivo linea 1\r"); if(cs1!=',') { auxs1[aux1]=cs1; aux1++; } cs1=fgetc(stream1); } puts(w); puts(mt1); puts(fstream1); printf("\nΣ={"); for(a=0;a<=s1sigma-1;a++) { printf("%c",auxs1[a]); if(a<s1sigma-1) printf(","); if(a==s1sigma-1) printf("}"); } printf("\n>>Ingrese una cadena para ser evaluada en la máquina de Turing\t>>>"); setbuf(stdin,NULL); gets(cad); strcpy(backupcad,cad); cadlen=strlen(cad); printf("Longitud: [%d]\nRespaldando original...Modificando la cadena...Agregando espacio en blanco...\n",cadlen); cad[cadlen]='B'; // agregando espacio en blanco printf("Trabajando con la cadena:"); puts(cad); aux1=0; for(u=0;u<=3;u++) { switch(u) { case 0: ncic=2; break; case 1: ncic=3; break; case 2: ncic=3; break; case 3: ncic=2; break; } for(o=1;o<=ncic;o++) { printf(">>>Leyendo archivo...\r"); cs1=fgetc(stream1); aux1=0; while(cs1!='?') { if(cs1!=',') { switch(u) { case 0: stzero[aux1][o-1]=cs1; break; case 1: st1[aux1][o-1]=cs1; break; case 2: st2[aux1][o-1]=cs1; break; case 3: st3[aux1][o-1]=cs1; break; default: exit(0); } aux1++; cs1=fgetc(stream1); } else{ cs1=fgetc(stream1); } } } } printf("\n[Función δ]\n"); for(oo=0;oo<=3;oo++) { switch(oo) { case 0: ncic=2; break; case 1: ncic=3; break; case 2: ncic=3; break; case 3: ncic=2; break; } for(t=0;t<ncic;t++) { usleep(500000); //esperando ½segundo for(ii=0;ii<5;ii++) { if(!ii) {printf(" Estado:");} if(ii==1) {printf(" Recibe:");} if(ii==2) {printf(" Manda a:");} if(ii==3) {printf("Sobreescribe:");} if(ii==4) {printf("Se mueve:");} switch(oo) { case 0: printf("[%c]\t",stzero[ii][t]); break; case 1: printf("[%c]\t",st1[ii][t]); break; case 2: printf("[%c]\t",st2[ii][t]); break; case 3: printf("[%c]\t",st3[ii][t]); break; } } n_saltos_de_linea(2); } } printf("\nArchivo \".../stream1.amt\" leido exitosamente, simulando comportamiento de una máquina de turing...Presione cualquier tecla para continuar..."); n_saltos_de_linea(5); head[0]='0';// inicializando cabezal en estado 0 getchar(); do { switch(cad[xa]) { case '0': // Recibe 0 head[1]='0';// contenidod el caezal es 0 switch(head[0]) // estado { case '0': head[0]=stzero[2][0]; // estado 1 cad[xa]=stzero[3][0]; // sobreescribe x dir=stzero[4][0]; // se mueve a la derecha xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}//se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '1': head[0]=st1[2][0]; // manda a estado 1 cad[xa]=st1[3][0]; // sobreescribe 0 dir=st1[4][0]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '2': head[0]=st2[2][0]; //manda a estdo 2 cad[xa]=st2[3][0]; //sobreescribe un 0 dir=st2[4][0]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}//se mueve a la izquierda izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '3': error_cadena_invalida(); printf("\nLa cádena %s no pudo ser procesada correctamente por la Máquina de Turing\n",backupcad); break; } break; case '1': // Recibe 1 if(head[0]=='1') { head[1]='1';// contenidod el caezal es 1 head[0]=st1[2][1]; //manda al estado 2 cad[xa]=st1[3][1]; //sobreescribe Y dir=st1[4][1]; // se mueve xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}//se mueve a la izquierda izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo } else { error_cadena_invalida(); printf("\nLa cádena %s no pudo ser procesada correctamente por la Máquina de Turing\n",backupcad); } break; case 'X': // Recibe X if(head[0]=='2') { head[1]='X';// contenidod el caezal es x head[0]=st2[2][2]; //manda al estado 0 cad[xa]=st2[3][2]; //sobreescribe X dir=st2[4][2]; // se mueve a la derecha xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo } else { error_cadena_invalida(); printf("\nLa cádena %s no pudo ser procesada correctamente por la Máquina de Turing\n",backupcad); } break; case 'Y': // Recibe Y switch(head[0]) // estado { case '0': head[0]=stzero[2][1]; //manda a estado 3 cad[xa]=stzero[3][1]; // sobreescribe una Y dir=stzero[4][1]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} // se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '1': head[0]=st1[2][2]; // manda a estado 1 cad[xa]=st1[3][2]; // sobreescribe una Y dir=st1[4][2]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}// se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '2': head[0]=st2[2][1]; cad[xa]=st2[3][1]; dir=st2[4][1]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '3': head[0]=st3[2][0]; cad[xa]=st3[3][0]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; } break; case 'B': if(head[0]!='3') { error_cadena_invalida(); printf("\nLa cádena %s no pudo ser procesada correctamente por la Máquina de Turing\n",backupcad); } head[0]=st3[2][1]; cad[xa]=st3[3][1]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; } }while(cad[xa]!='\0'); puts(exito); printf("\n\nCádena %s procesada correctamente por la Máquina de Turing ",backupcad); printf("\nMovimientos a la izquierda: %d\nMovimientos a la derecha: %d\n",abs(izq),der); break; case 2: cs1=fgetc(stream2); for(i=0;i<=s1sigma+4;i++) //Inicializando arreglo auxiliar { auxs1[i]='\0'; } while(cs1!='?') { printf("Leyendo archivo linea 1\r"); if(cs1!=',') { auxs1[aux1]=cs1; aux1++; } cs1=fgetc(stream2); } puts(w); puts(mt2); puts(fstream2); printf("\nΣ={"); for(a=0;a<=s2sigma-1;a++) { printf("%c",auxs1[a]); if(a<s2sigma-1) printf(","); if(a==s2sigma-1) printf("}"); } printf("\n>>Ingrese una cadena para ser evaluada en la máquina de Turing\t>>>"); setbuf(stdin,NULL); gets(cad); strcpy(backupcad,cad); cadlen=strlen(cad); printf("Longitud: [%d]\nRespaldando original...Modificando la cadena...Agregando espacio en blanco...\n",cadlen); cad[cadlen]='B'; // agregando espacio en blanco printf("Trabajando con la cadena:"); puts(cad); printf("Continuando lectura de:"); puts(fstream2); aux1=0; for(u=0;u<=5;u++) { switch(u) { case 0: ncic=2; break; case 1: ncic=2; break; case 2: ncic=3; break; case 3: ncic=3; break; case 4: ncic=3; break; case 5: ncic=3; break; } for(o=1;o<=ncic;o++) { puts(fstream2); cs1=fgetc(stream2); aux1=0; while(cs1!='?') { if(cs1!=',') { switch(u) { case 0: s2tzero[aux1][o-1]=cs1; break; case 1: s2t1[aux1][o-1]=cs1; break; case 2: s2t2[aux1][o-1]=cs1; break; case 3: s2t3[aux1][o-1]=cs1; printf("-%c @ (%d,%d)",s2t3[aux1][o-1],aux1,o-1); break; case 4: s2t4[aux1][o-1]=cs1; break; case 5: s2t5[aux1][o-1]=cs1; break; default: exit(0); } aux1++; cs1=fgetc(stream2); } else{ cs1=fgetc(stream2); } } } } printf("\n[Función δ]\n"); for(oo=0;oo<=5;oo++) { switch(oo) { case 0: ncic=2; break; case 1: ncic=2; break; case 2: ncic=3; break; case 3: ncic=3; break; case 4: ncic=3; break; case 5: ncic=3; break; } for(t=0;t<ncic;t++) { usleep(500000); //esperando ½segundo for(ii=0;ii<5;ii++) { if(!ii) {printf(" Estado:");} if(ii==1) {printf(" Recibe:");} if(ii==2) {printf(" Manda a:");} if(ii==3) {printf("Sobreescribe:");} if(ii==4) {printf("Se mueve:");} switch(oo) { case 0: printf("[%c]\t",s2tzero[ii][t]); break; case 1: printf("[%c]\t",s2t1[ii][t]); break; case 2: printf("[%c]\t",s2t2[ii][t]); break; case 3: printf("[%c]\t",s2t3[ii][t]); break; case 4: printf("[%c]\t",s2t4[ii][t]); break; case 5: printf("[%c]\t",s2t5[ii][t]); break; } } n_saltos_de_linea(2); } } printf("\nArchivo \".../stream2.amt\" leido exitosamente, simulando comportamiento de una máquina de turing..."); n_saltos_de_linea(5); head[0]='0';// inicializando cabezal en estado 0 araux=head[0]; sleep(2); do { if(head[0]=='6') break; switch(cad[xa]) { case '0': // Recibe 0 head[1]='0';// contenidod el caezal es 0 switch(head[0]) // estado { case '0': head[0]=s2tzero[2][0]; // estado 1 cad[xa]=s2tzero[3][0]; // sobreescribe x dir=s2tzero[4][0]; // se mueve a la derecha xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}//se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '1': head[0]=s2t1[2][0]; // manda a estado 1 cad[xa]=s2t1[3][0]; // sobreescribe 0 dir=s2t1[4][0]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '2': head[0]=s2t2[2][1]; // manda a estado 3 cad[xa]=s2t2[3][1]; // sobreescribe 1 dir=s2t2[4][1]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '3': head[0]=s2t3[2][1]; // manda a estado 3 cad[xa]=s2t3[3][1]; // sobreescribe 1 dir=s2t3[4][1]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '4': head[0]=s2t4[2][0]; // manda a estado 4 cad[xa]=s2t4[3][0]; // sobreescribe 0 dir=s2t4[4][0]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); break; case '5': head[0]=s2t5[2][1]; // manda a estado 4 cad[xa]=s2t5[3][1]; // sobreescribe 0 dir=s2t5[4][1]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); break; } break; case '1': // Recibe 1 switch(head[0]) // estado { case '0': head[0]=s2tzero[2][1]; // estado 1 cad[xa]=s2tzero[3][1]; // sobreescribe x dir=s2tzero[4][1]; // se mueve a la derecha xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}//se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '1': head[0]=s2t1[2][1]; // manda a estado 1 cad[xa]=s2t1[3][1]; // sobreescribe 0 dir=s2t1[4][1]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '2': head[0]=s2t2[2][0]; // manda a estado 1 cad[xa]=s2t2[3][0]; // sobreescribe 0 dir=s2t2[4][0]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '3': head[0]=s2t3[2][2]; // manda a estado 1 cad[xa]=s2t3[3][2]; // sobreescribe 0 dir=s2t3[4][2]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '4': head[0]=s2t4[2][1]; // manda a estado 1 cad[xa]=s2t4[3][1]; // sobreescribe 0 dir=s2t4[4][1]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '5': head[0]=s2t5[2][2]; // manda a estado 4 cad[xa]=s2t5[3][2]; // sobreescribe 0 dir=s2t5[4][2]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); break; } break; case 'B': // Recibe B switch(head[0]) // estado { case '2': head[0]=s2t2[2][2]; // manda a estado 3 cad[xa]=s2t2[3][2]; // sobreescribe 1 dir=s2t2[4][2]; xa--; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha izq--; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '3': head[0]=s2t3[2][0]; // manda a estado 3 cad[xa]=s2t3[3][0]; // sobreescribe 1 dir=s2t3[4][0]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '4': head[0]=s2t4[2][2]; // manda a estado 4 cad[xa]=s2t4[3][2]; // sobreescribe 0 dir=s2t4[4][2]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); break; case '5': head[0]=s2t5[2][0]; // manda a estado 4 cad[xa]=s2t5[3][0]; // sobreescribe 0 dir=s2t5[4][0]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); break; } break; } }while(cad[xa]!='\0'); printf("\n\nCádena %s procesada correctamente por la Máquina de Turing ",backupcad); for(int sum=0;sum<=cadlen;sum++) { if(cad[sum]=='0') auxiliarsuma++; } printf("\n>>Resultado de la Sustracción Propia: [%d]",auxiliarsuma); break; case 3: cs1=fgetc(stream3); for(i=0;i<=s1sigma+4;i++) //Inicializando arreglo auxiliar { auxs1[i]='\0'; } while(cs1!='?') { printf("Leyendo archivo linea 1\r"); if(cs1!=',') { auxs1[aux1]=cs1; aux1++; } cs1=fgetc(stream3); } puts(w); puts(mt3); puts(fstream3); printf("\nΣ={"); for(a=0;a<=s3sigma-1;a++) { printf("%c",auxs1[a]); if(a<s3sigma-1) printf(","); if(a==s3sigma-1) printf("}"); } printf("\n>>Ingrese una cadena para ser evaluada en la máquina de Turing\t>>>"); setbuf(stdin,NULL); gets(cad); strcpy(backupcad,cad); cadlen=strlen(cad); printf("Longitud: [%d]\nRespaldando original...Modificando la cadena...Agregando espacio en blanco...\n",cadlen); cad[cadlen]='B'; // agregando espacio en blanco printf("Trabajando con la cadena:"); puts(cad); printf("Continuando lectura de:"); puts(fstream3); aux1=0; for(u=0;u<=1;u++) { ncic=2; for(o=1;o<=ncic;o++) { puts(fstream3); cs1=fgetc(stream3); aux1=0; while(cs1!='?') { if(cs1!=',') { switch(u) { case 0: s3tzero[aux1][o-1]=cs1; break; case 1: s3t1[aux1][o-1]=cs1; break; } aux1++; cs1=fgetc(stream3); } else{ cs1=fgetc(stream3); } } } } printf("\n[Función δ]\n"); for(oo=0;oo<=1;oo++) { for(t=0;t<ncic;t++) { usleep(500000); //esperando ½segundo for(ii=0;ii<5;ii++) { if(!ii) {printf(" Estado:");} if(ii==1) {printf(" Recibe:");} if(ii==2) {printf(" Manda a:");} if(ii==3) {printf("Sobreescribe:");} if(ii==4) {printf("Se mueve:");} switch(oo) { case 0: printf("[%c]\t",s3tzero[ii][t]); break; case 1: printf("[%c]\t",s3t1[ii][t]); break; } } n_saltos_de_linea(2); } } printf("\nArchivo \".../stream3.amt\" leido exitosamente, simulando comportamiento de una máquina de turing..."); n_saltos_de_linea(5); head[0]='0';// inicializando cabezal en estado 0 araux=head[0]; sleep(2); do { switch(cad[xa]) { case '0': // Recibe 0 head[1]='0';// contenidod el caezal es 0 switch(head[0]) // estado { case '0': head[0]=s3tzero[2][0]; // estado 1 cad[xa]=s3tzero[3][0]; // sobreescribe x dir=s3tzero[4][0]; // se mueve a la derecha xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}//se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '1': head[0]=s3t1[2][1]; // manda a estado 1 cad[xa]=s3t1[3][1]; // sobreescribe 0 dir=s2t1[4][1]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; } break; case 'B': // Recibe B switch(head[0]) // estado { case '0': head[0]=s3tzero[2][1]; // estado 1 cad[xa]=s3tzero[3][1]; // sobreescribe x dir=s3tzero[4][1]; // se mueve a la derecha xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");}//se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; case '1': head[0]=s3t1[2][0]; // manda a estado 1 cad[xa]=s3t1[3][0]; // sobreescribe 0 dir=s3t1[4][0]; xa++; system("clear"); for(int h=1;h<=xa;h++){printf(" ");} //se mueve a la derecha der++; printf("%c",head[0]); n_saltos_de_linea(1); puts(cad);usleep(500000); //esperando ½segundo break; } break; } }while(cad[xa]!='\0'); if(head[0]=='N') { error_cadena_invalida(); printf("\n>>Resultado: Cantidad de ceros impar"); } printf("\n\nCádena %s procesada correctamente por la Máquina de Turing ",backupcad); for(int sum=0;sum<=cadlen;sum++) { if(cad[sum]=='0') auxiliarsuma++; } printf("\n>>Resultado: Cantidad de ceros par"); break; default: puts(errcmtnde); getchar(); break; } n_saltos_de_linea(2); margin_hor(); n_saltos_de_linea(5); getchar(); system("clear"); return 0; }