Пример #1
0
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;
}
Пример #2
0
/**
 * 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();
}
Пример #4
0
/**
 * 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;
}
Пример #5
0
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);
}
Пример #6
0
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;
}
Пример #7
0
/**
 * 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;
}
Пример #8
0
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');

}
Пример #9
0
int main()
{
    while(1)
    {
    pintar_background();
    gotoxy(10,10);
    titulo();
    
    int i;
    for(i=0;i<20;i++)
    final();
    }
    
}
Пример #10
0
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;

}
Пример #11
0
/**
 * 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;
	}
}
Пример #12
0
/**
 * 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();
}
Пример #13
0
/**
 * 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, &reg_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;
}
Пример #14
0
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();
}
Пример #15
0
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);
    }
}
Пример #17
0
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 *****");
	}
}
Пример #18
0
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;	
	}
}
Пример #19
0
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');
}
Пример #20
0
/**
 * 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();
}
Пример #21
0
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");

}
Пример #22
0
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;

}	
Пример #23
0
/**
 * 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;
}
Пример #24
0
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;


		

}
Пример #25
0
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;
	
	
}
Пример #26
0
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);

}
Пример #27
0
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;
	}