Ir para conteúdo
Fórum Script Brasil

waguim

Membros
  • Total de itens

    8
  • Registro em

  • Última visita

Sobre waguim

waguim's Achievements

0

Reputação

  1. bom não teve nenhuma resposta mas chegamos em um codigo bem legal. /* . . TORRES DE HANOI . */ #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<windows.h> #define N 5 //Numero de discos int movimentos=0; int A[N], B[N], C[N]; /* Estes são os três torres. Por exemplo, se o estado de A é 0,1,3,4, o que significa que existem três discos em um dos tamanhos 1, 3 e 4. (Pense em direito como sendo o "baixo" direcção.) */ void Hanoi(int,int*,int*,int*); void limpa_tela(void) { system("cls"); } void pausa(void) { int tempo = GetTickCount(); while(tempo + 4000 > GetTickCount()) // nota, tempo + 10000 poderia estar fora do loop, para economizar tempo... // mas como a gente não quer economizar, e sim gastar ele, acho que // não faz diferença =) { bool faz_nada = true; } } /* Imprimir a configuração atual de A, B e C para a tela */ void imprimetorre(void) { int i; limpa_tela(); printf("\n\n\n\n"); for(i=0;i<N;i++)printf("\t\t\t ( %d ) ( %d ) ( %d ) \n",A[i],B[i],C[i]); printf("\t\t\t ___ _____ _______ ___\n"); printf("\t\t\t| |\n"); printf("\t\t\t| A B C |\n"); printf("\t\t\t|________________________|\n"); printf("Movimentos %d",movimentos); pausa(); movimentos++; return; } /* Mova o elemento não zero à esquerda da fonte para dest, deixar 0. */ /* Retorna o valor transferido (não utilizado). */ int Mover(int *origem, int *destino) { int i=0,j=0; while((*(origem + i)==0)&&(i<N))i++; //o ponteiro apontará para o proximo valor armazenado na memória, while((*(destino + j)==0)&&(j<N))j++; *(destino+j-1) = *(origem+i); *(origem + i) = 0; imprimetorre(); /* Imprimir configuração após cada jogada. */ return *(destino+j-1); } /* Move primeiros n números não zero a partir do código fonte para dest utilizando as regras de Hanói. Solicita própria recursivamente. */ void Hanoi(int n,int *origem, int *destino, int *aux) //recebendo valores, partir de agora //o ponteiro estará apontando para A[0], B[0], C[0] { int i; if(n==1){ Mover(origem,destino); return; } Hanoi(n-1,origem,aux,destino); Mover(origem,destino); Hanoi(n-1,aux,destino,origem); return; } int main() { int i,x; do{ printf(" Univerdade do Estado de Matro\n"); printf(" Campus Universitario de Alto Araguaia\n"); printf(" Estrutura de Dados e Tecnicas de Programacao\n"); printf("Docente: Prof. Max Robert Marinho\n"); printf("Discentes: Marcos Vinicios Campos Linhares\n"); printf(" Risiane Margarete Vieira Barroso\n"); printf(" Roni Pess\n"); printf(" Wagner Moraes Oliveira\n\n"); printf(" /////////////////////////\n"); printf(" / /\n"); printf(" / TORRES DE HANOI /\n"); printf(" / /\n"); printf(" /////////////////////////\n\n"); printf("1. Conheca a Historia;\n"); printf("2. Ver a solucao do problema para 5 Entradas;\n"); printf("3. Sair;\n\n"); printf("Digite sua opcao:"); scanf("%d",&x); switch (x) { case 1 : limpa_tela(); printf(" TORRES DE HANOI \n\n\n"); printf(" _ _ _\n"); printf(" (1) | | | |\n"); printf(" | | | | | |\n"); printf(" (_2_) | | | |\n"); printf(" _|_|_ | | | |\n"); printf(" _(__3__)__|_|______|_|_\n"); printf(" | |\n"); printf(" | A B C |\n"); printf(" |_______________________|\n"); printf("\n\n A Torre de Hanoi e um quebra-cabeca que consiste em uma base contendo tres pinos, em um dos quais são dispostos alguns discos uns sobre os outros, em ordem crescente de diametro, de cima para baixo. O problema consiste em passar todos os discos de um pino para outro qualquer, usando um dos pinos como auxiliar, de maneira que um disco maior nunca fique em cima de outro menor em nenhuma situacao.\n"); printf(" Existem varias lendas a respeito da origem do jogo, a mais conhecida diz respeito a um templo Hindu, situado no centro do universo. Diz-se que Brahma supostamente havia criado uma torre com 64 discos de ouro e mais duas estacas equilibradas sobre uma plataforma. Brahma ordenara-lhes que movessem todos os discos de uma estaca para outra segundo as suas instrucoes. As regras eram simples: apenas um disco poderia ser movido por vez e nunca um disco maior deveria ficar por cima de um disco menor. Segundo a lenda, quando todos os discos fossem transferidos de uma estaca para a outra, o templo desmoronar-se-ia e o mundo desapareceria.\n"); printf(" E interessante observar que o numero minimo de ""movimentos"" para conseguir transferir todos os discos da primeira estaca a terceira é (2 elevado n)-1, sendo n o numero de discos.\n\n"); printf(" Logo,para solucionar um Hanoi de:\n\n"); printf("3 discos, são necessarios: (2 elevado a n -1) = 7 movimentos\n"); printf("5 discos, são necessarios: (2 elevado a n -1) = 31 movimentos\n"); printf("64 discos, são necessarios: (2 elevado a n -1) = 18.446.744.073.709.551.615 movimentos\n\n"); printf(" fonte: http://pt.wikipedia.org/wiki/Torre_de_Hanoi\n\n"); system("pause"); limpa_tela(); break; case 2 : /* Inicializar o torres */ for(i=0;i<N;i++)A[i]=i+1; for(i=0;i<N;i++)B[i]=0; for(i=0;i<N;i++)C[i]=0; movimentos=0; printf("Solucao para o problema das Torres de Hanoi com %d Discos\n\n",N); /* Imprimir a partida estado */ imprimetorre(); printf("\n\t\t\t Torre Inicial\n\n"); printf("\n\n Para comecar a solucao do problema,\n"); system("pause"); /* Faça isso! Use A = Origem, Destino = C, B = Auxiliar */ Hanoi(N,A,C,B); printf("\n\n\nProblema resolvido....\n"); system("pause"); limpa_tela(); break; case 3 : break; default: printf("OPCAO INVALIDA!!!\a\n"); getche(); limpa_tela(); } }while(x!=3); return 0; }
  2. Boa noite Galera to com o segunte problema: O professor da facul pediu pra desenvolvermos um algoritimo q resolva o probema das torres de anoi pra 5 discos usando estrutura de pilha , o problema consiste em mover os discos da torre A pra C usando a B como aux, sem que nenhum disco maior fique por cima de um menor, ae tem a historia completa Torre de hanoi - Wikipedia. Tive a ideia de fazer funçoes que mudem os discos e uma repete elas ate que o problema esteja resolvido. So que não ta dando muito certo. alguém tem uma outra ideia? //Torre de Hanoi //bibliotecas #include<stdio.h> #include<conio.h> #include<stdlib.h> // varialvel de valor continuo #define max 4 //prototipo das funçoes void move_discos(void); void imprimi_torre(void); void limpa_tela(void); void mover_de_a_para_c(void); void mover_de_a_para_b(void); void mover_de_c_para_b(void); void mover_de_b_para_a(void); void resolver(void); // vairiáveis globais( antes da função main()) int i; int a[5]={5,4,3,2,1},n=4; int b[5]={0,0,0,0,0},m=0; int c[5]={0,0,0,0,0},o=0; int movimentos=0; //programa principal main() { imprimi_torre(); mover_de_a_para_c(); mover_de_a_para_b(); mover_de_c_para_b(); mover_de_a_para_c(); mover_de_b_para_a(); getche(); } void mover_de_a_para_c(void)// move destino - origem { if(c[o]<a[n]) { //Operação de Push p/ pilha C c[o]=a[n]; o++; //Operação pop p/A a[n]=0; n--; movimentos++; } imprimi_torre(); } void mover_de_a_para_b(void) { if(b[m]<a[n]) { //Operação de Push p/ pilha B b[m]=a[n]; m++; //Operação pop p/A a[n]=0; n--; movimentos++; } imprimi_torre(); } void mover_de_c_para_b(void) { if(b[m-1]>c[o-1]) { //Operação de Push p/ pilha B b[m]=c[o-1]; m++; //Operação pop p/C o--; c[o]=0; movimentos++; } imprimi_torre(); } void limpa_tela(void) { system("cls"); } void imprimi_torre(void) { for(i=max;i>=0;i--) printf("%d %d %d\n", a[i], b[i], c[i]); printf("A B C\n"); printf("-----\n"); printf("\n Movimentos: %d",movimentos); } void mover_de_b_para_a(void)// move aux - origem { if(a[n]>b[m-1]) { //Operação de Push p/ pilha A a[n+1]=b[m-1]; n++; //Operação pop p/B m--; b[m]=0; movimentos++; } imprimi_torre(); } void resolver(void) { do { imprimi_torre(); mover_de_a_para_c(); mover_de_a_para_b(); mover_de_c_para_b(); mover_de_b_para_a(); }while(o<=5); }
  3. descrobri um link pra baixar e subistituir a bliblioteca conio.h do Dev-C++ dae funciona certim os comandos. textcolor e otros. link conio.hValeu pelas dicas
  4. Cara pra mim seria interesante a segunda opcao, porque a primeira muda toltamente a cor do progromaga, o q não seria interessante pra mim, já a segunda ajudaria, sabe onde eu poço encontrar algo a respeito?
  5. alguém sabe um comando q poça mudar a cor do texto no dev c++, já vi falar q no turbo c, tem o textcolor pra mudar cores, mas so usamos o dec-C++. Alguma dica. Abraço.
  6. waguim

    Busca em Arrays[Resolvido]

    Obrigado pela ajuda, agradecimentos ao Cristiano, deu certim a decaração das funçoes. Li alguma coisa a respeito, parece q em c não tem realmente vairiaveis doi tipo bool, mas o professor falo q podia usar e o complidador dev C++ não deu erro, rs. Abraços
  7. waguim

    Busca em Arrays[Resolvido]

    Bom tava numa preguiça danada mais arrumei o codigo... :D Mas não consegui fazer compilar, não to sabendo como declar as variaveis na função. Se alguém poder ajudar, ta ae o novo codigo. #include<conio.h> #include<stdio.h> #define n 10 /*** Prototipo da função***/ int buscasequencial(int v,int a[]); /****Função Principal***/ main() { int a[n]={0,1,2,3,4,5,6,7,8,9}; int v; printf("Digite o valor a ser buscado: "); scanf("%d",&v); printf("o valor esta na posicao: %d",buscasequencial(v,a[])); getche(); } /***Funçao de Busca***/ int buscasquencial(int v,int a[]){ bool achei=false; int i=0; while((i<n)&&(achei==false)){ if(a[i]==v){ achei=true; }else{ i++; } } if(achei==true){ return i; }else{ return -1; } } Criei a funcao diretamente no corpo do programa ela funcioa direitim, mas precisava aprender a trabalhar com funçoes, ta ae tb o codigo sem funcao, diretamente no corpo do programa #include<conio.h> #include<stdio.h> #define n 10 main() { int a[n]={0,1,2,3,4,5,6,7,8,9}; int v; printf("Digite o valor a ser buscado: "); scanf("%d",&v); bool achei=false; int i=0; while((i<n)&&(achei==false)){ if(a[i]==v){ achei=true; }else{ i++; } } if(achei==true){ printf("Encontrado na posicao: %d",i); }else{ printf("não encontrado!!!"); } getche(); } Mas tenho de aprender sobre funções, não adianta fugir, rs
  8. Boa tarde! Faço facul de computação o professor ta passando tecnicas de programacao esse semestre. ele passo pra gente ele pseudo codigo pra busca em array: Algoritmo trivial: busca sequencial proc buscasequencial (v, n, A[0..n-1]) { achei ¬ falso i ¬ 0 enquanto i < n e não achei fazer { se A = v então achei ¬ verdadeiro senão i ¬ i + 1 } se achei então reportar (i) senão reportar(-1) } Mas na hora de implementar ele em C, não me dei muito Bem :D consegui isso, mas não ta complilando., uso o Dev C++ Se alguém tiver uma dica....fico grato, t+ #include<conio.h> #include<stdio.h> int buscasequencial(); main(){ int a[10]={0,1,20,3,4,5,6,7,8,9},achei,i,n=10,v; printf("Digite o valor a ser buscado: "); scanf("%d",&v); printf("o valor esta na posicao: %d", buscasequencial(v)); getche(); } int buscasequencial(int v,int n,int a[2-1]){ int achei,i; achei=0; i=0; while((i<n)&&(achei==0)){ if(a[i]==v){ achei=1; }else{ i++; } } if(achei==1){ printf("valor encontrado na posicao %d do vetor \n",i); }else{ printf("valor não encontrado!"); } }
×
×
  • Criar Novo...