jholxd 0 Denunciar post Postado Abril 18, 2008 Bom peço a a ajuda dos senhores com um código que estou tendo dificuldade o programa você pede para pessoa quantos nomes você vai jogar na matriz voce vai digitar o nome e o local onde você quer que comece o nome depois ele limpa a tela e exibe a matriz com caracteres aleatórios eu preciso digitar uma palavra e se a palavra estiver na matriz ele mostra a palavra na tela se alguem pudesse me mostrar como posso trabalha com a matriz do fonte usando ponteiro sobre ponteiro agradeceria muito segue o código #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdlib.h> #define num 6 //Definindo as funções a serem usadas int receber(char *pvet); void mostrar(char *pvet, char *pletra); void zeramatriz(char *pmat, char *pletra); void procura(char *pletra,char *pvet,char *pmat); int conclusao(char *pvet,char *pmat); //variavel global int erro=0; int main(int argc, char *argv[]) { int i , j = 0, tentativas = num + 5 , chance = 0 , ident; char matriz[num][num], vet[num][num], letra[15]; zeramatriz(matriz, letra); i = receber(vet); if(i!=0) { zeramatriz(matriz,letra); mostrar(matriz,letra); } do { printf("você possui %i tentativas\n\n",tentativas); printf("você errou %i vezes\n\n",erro); procura(letra,vet,matriz); mostrar(matriz,letra); tentativas--; /* if (tentativas<1) { return 0; getch(); }*/ chance++; j++; ident=conclusao(vet,matriz); printf("\n\n%i\n\n",ident); if(ident==1) { system("cls"); chance=num*num+6; printf("Parabens você achou as palavras!!!\n\n"); mostrar(matriz,letra); } }while(chance<=num*num+5); getch("Pressione 'espaco' para finalizar o programa"); } void zeramatriz(char *pmat, char *pletra) { int i; for(i=0;i<15;i++) *(pletra+i)=rand(); *(pletra+14)='\0'; for(i=0;i<num*num;i++) *(pmat+i)=rand(); } int receber(char *pvet) { int i,l,c,tam,a,qtd; char palavra[num+1],*ppalavra,*t; ppalavra=palavra; a=0; printf("\t\t\t>>>>>> Programa de Caca Palavras <<<<<<\n\n"); printf("Digite um numero de (1) ate (%i),\n caso digite '0' o programa encerrara\n\n",num); printf("Digite o numero de palavras que deseja esconder: "); scanf("%i",&qtd); while(qtd>10) { printf("Quantidade não valida"); printf("Digite o numero de palavras que deseja esconder: "); scanf("%i",&qtd); } if(qtd>0 && qtd<=num) { do { fflush(stdin); printf("Digite a palavra a ser escondia\n"); fgets(ppalavra,num+2,stdin); ppalavra[strlen(ppalavra)-1]='\0'; tam=strlen(ppalavra); ppalavra[strlen(ppalavra)]='*'; do //coordenadas da matriz a ser amarmazenado { printf("digite a linha em que deseja armazenar: "); scanf("%i",&l); printf("\ndigite a coluna em que deseja armazenar: "); scanf("%i",&c); //verifica se as coordenadas estão certas if((c+tam)>num || l>num) printf("\n\n !!! As coordenadas não são validas !!!\n\n"); } while((c+tam)>num || l>num-1 || c>num-1); for(i=0;i<=tam;i++) *(pvet+(l*num)+c+i)=*(ppalavra+i); //verifica c deseja colocar mais uma palavra fflush(stdin); if(a!=(qtd-1) || qtd!=1) { printf("\nPalvra inserida com sucesso: \n\n\n"); } a++; } while(a<qtd); } else return 0; } void mostrar(char *pvet,char *pletra) { int i,j; system("cls"); printf("\n\n\t >>>>> Palavras escondidas <<<<<\n\n"); for(i=0;i<num;i++) printf("\t%i",i); for(i=0;i<num;i++) //Se não fizer isso não da pra imprimir direito { printf("\n%i",i); for(j=0;j<num;j++) { printf("\t%c",*(pvet+(i*num)+j)); } } printf("\n\n"); } void procura(char *pletra,char *pvet,char *pmat) { int i,error=0; //tabela asc => a = 97 A=65 fflush(stdin); printf("digite a palavra que deseja procurar: "); fgets(pletra,15,stdin); //conversão for(i=0;i<num*num;i++) { if(*(pletra+i)>=65 && *(pletra+i)<=90) *pletra=*pletra+32; } //verifica se o usuario errou ou acertou for(i=0;i<num*num;i++) { if(*(pletra+i) == *(pvet+i) || (*(pletra+i)) == (*(pvet+i))+32) { *(pmat+i)=*(pletra+i); } } } int conclusao(char *pvet,char *pmat) { int i,j,acerto=0; for(j=0;j<num*num;j++) if(*(pvet+j) == *(pmat+j)) acerto++; printf("%i", acerto); if(acerto==num*num) i=1; else i=0; return i; } Sugestões são bem vindas XD Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 18, 2008 você qr usar ponteiro msm? poderia deixar assim: int receber(char pvet[]); []'s Compartilhar este post Link para o post Compartilhar em outros sites
jholxd 0 Denunciar post Postado Abril 19, 2008 Gostaria de usar como ponteiro mesmo amigo. Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 23, 2008 tentou algum avanço no seu algoritmo? Compartilhar este post Link para o post Compartilhar em outros sites
jholxd 0 Denunciar post Postado Abril 29, 2008 tentou algum avanço no seu algoritmo? Não consegui evoluir não consigo indentificar o problema =/ Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 30, 2008 qnd c tem muitas duvidas num algoritmo é interessante você ir montando seu programa parte por parte! assim comente algumas funções e va testando uma de kd vz até achar onde naum esta funcionando legal! continue postando ! []'s Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 1, 2008 assim comente algumas funções e va testando uma de kd vz até achar onde naum esta funcionando legal! A melhor coisa é instalar um debugger.Dependendo do código,ficar comentando e descomentando e enchendo de printf é trabalhoso demais. Compartilhar este post Link para o post Compartilhar em outros sites
jholxd 0 Denunciar post Postado Maio 5, 2008 Aki está o código dei uma comentada um pouco melhor acredito que fique mais facil de enchergar #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdlib.h> #define num 6 //Definindo as funções a serem usadas int receber(char *pvet); void mostrar(char *pvet, char *pletra); void zeramatriz(char *pmat, char *pletra); void procura(char *pletra,char *pvet,char *pmat); int conclusao(char *pvet,char *pmat); //variavel global int erro=0; int main(int argc, char *argv[]) { int i , j = 0, tentativas = num + 5 , chance = 0 , ident; //configura qtas tentativas você vai começar char matriz[num][num], vet[num][num], letra[15]; zeramatriz(matriz, letra); //zerando a matriz i = receber(vet); if(i!=0) { zeramatriz(matriz,letra); mostrar(matriz,letra); } do { printf("você possui %i tentativas\n\n",tentativas); printf("você errou %i vezes\n\n",erro); procura(letra,vet,matriz); mostrar(matriz,letra); //se as tentativas chegar a 0 fecha o programa tentativas--; /* if (tentativas<1) { return 0; getch(); }*/ chance++; j++; ident=conclusao(vet,matriz); printf("\n\n%i\n\n",ident); // se ident for verdadeiro você ganha o jogo if(ident==1) { system("cls"); chance=num*num+6; printf("Parabens você achou as palavras!!!\n\n"); mostrar(matriz,letra); } }while(chance<=num*num+5); getch("Pressione 'espaco' para finalizar o programa"); } void zeramatriz(char *pmat, char *pletra) { int i; for(i=0;i<15;i++) *(pletra+i)=rand(); *(pletra+14)='\0'; for(i=0;i<num*num;i++) *(pmat+i)=rand(); } int receber(char *pvet) { int i,l,c,tam,a,qtd; char palavra[num+1],*ppalavra,*t; ppalavra=palavra; a=0; printf("\t\t\t>>>>>> Programa de Caca Palavras <<<<<<\n\n"); printf("Digite um numero de (1) ate (%i),\n caso digite '0' o programa encerrara\n\n",num); printf("Digite o numero de palavras que deseja esconder: "); scanf("%i",&qtd); while(qtd>10) //verifica se a quantidade de letras da string não ultrapassara 10 { printf("Quantidade não valida"); printf("Digite o numero de palavras que deseja esconder: "); scanf("%i",&qtd); } if(qtd>0 && qtd<=num) { do { fflush(stdin); printf("Digite a palavra a ser escondia\n"); fgets(ppalavra,num+2,stdin); //recebe o conteudo do ponteiro palavra ppalavra[strlen(ppalavra)-1]='\0'; tam=strlen(ppalavra); ppalavra[strlen(ppalavra)]='*'; do //coordenadas da matriz a ser amarmazenado { printf("digite a linha em que deseja armazenar: "); scanf("%i",&l); printf("\ndigite a coluna em que deseja armazenar: "); scanf("%i",&c); //verifica se as coordenadas estão certas if((c+tam)>num || l>num) printf("\n\n !!! As coordenadas não são validas !!!\n\n"); } while((c+tam)>num || l>num-1 || c>num-1); for(i=0;i<=tam;i++) *(pvet+(l*num)+c+i)=*(ppalavra+i); //verifica c deseja colocar mais uma palavra fflush(stdin); if(a!=(qtd-1) || qtd!=1) { printf("\nPalvra inserida com sucesso: \n\n\n"); } a++; } while(a<qtd); } else return 0; } void mostrar(char *pvet,char *pletra) { int i,j; system("cls"); printf("\n\n\t >>>>> Palavras escondidas <<<<<\n\n"); for(i=0;i<num;i++) printf("\t%i",i); for(i=0;i<num;i++) //Se não fizer isso não da pra imprimir os numeros da matriz { printf("\n%i",i); for(j=0;j<num;j++) { printf("\t%c",*(pvet+(i*num)+j)); //mostra a matriz do ponteiro pvet } } printf("\n\n"); } void procura(char *pletra,char *pvet,char *pmat) { int i,error=0; //tabela asc => a = 97 A=65 fflush(stdin); printf("digite a palavra que deseja procurar: "); fgets(pletra,15,stdin); //conversão for(i=0;i<num*num;i++) { if(*(pletra+i)>=65 && *(pletra+i)<=90) *pletra=*pletra+32; } //verifica se o usuario errou ou acertou for(i=0;i<num*num;i++) { if(*(pletra+i) == *(pvet+i) || (*(pletra+i)) == (*(pvet+i))+32) { *(pmat+i)=*(pletra+i); } } } int conclusao(char *pvet,char *pmat) { int i,j,acerto=0; for(j=0;j<num*num;j++) if(*(pvet+j) == *(pmat+j)) acerto++; printf("%i", acerto); if(acerto==num*num) //se todos os elementos das matriz estiverem corretos ele retorna 1 i=1; else i=0; return i; } Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Maio 5, 2008 Não cheguei a compilar! Ele esta rodando certinha ow ainda esta com duvidas? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 5, 2008 ib03@macalan:~/src\:gcc -g caca-palavras.c caca-palavras.c: In function âmainâ: caca-palavras.c:22: warning: passing argument 1 of âzeramatrizâ from incompatible pointer type caca-palavras.c:23: warning: passing argument 1 of âreceberâ from incompatible pointer type caca-palavras.c:26: warning: passing argument 1 of âzeramatrizâ from incompatible pointer type caca-palavras.c:27: warning: passing argument 1 of âmostrarâ from incompatible pointer type caca-palavras.c:35: warning: passing argument 2 of âprocuraâ from incompatible pointer type caca-palavras.c:35: warning: passing argument 3 of âprocuraâ from incompatible pointer type caca-palavras.c:37: warning: passing argument 1 of âmostrarâ from incompatible pointer type caca-palavras.c:47: warning: passing argument 1 of âconclusaoâ from incompatible pointer type caca-palavras.c:47: warning: passing argument 2 of âconclusaoâ from incompatible pointer type caca-palavras.c:54: warning: passing argument 1 of âmostrarâ from incompatible pointer type caca-palavras.c:196:2: warning: no newline at end of file /tmp/ccx63D5k.o: In function `main': /home/bcc/ib03/src/caca-palavras.c:59: undefined reference to `getch' collect2: ld returned 1 exit status Deviam abolir getch. getch("Pressione 'espaco' para finalizar o programa"); ???????????????? Gafanhoto,getch não leva parâmetro nenhum. Tirando o getch: ib03@macalan:~/src\:gcc -g caca-palavras.c caca-palavras.c: In function âmainâ: caca-palavras.c:22: warning: passing argument 1 of âzeramatrizâ from incompatible pointer type caca-palavras.c:23: warning: passing argument 1 of âreceberâ from incompatible pointer type caca-palavras.c:26: warning: passing argument 1 of âzeramatrizâ from incompatible pointer type caca-palavras.c:27: warning: passing argument 1 of âmostrarâ from incompatible pointer type caca-palavras.c:35: warning: passing argument 2 of âprocuraâ from incompatible pointer type caca-palavras.c:35: warning: passing argument 3 of âprocuraâ from incompatible pointer type caca-palavras.c:37: warning: passing argument 1 of âmostrarâ from incompatible pointer type caca-palavras.c:41: warning: passing argument 1 of âconclusaoâ from incompatible pointer type caca-palavras.c:41: warning: passing argument 2 of âconclusaoâ from incompatible pointer type caca-palavras.c:48: warning: passing argument 1 of âmostrarâ from incompatible pointer type caca-palavras.c:22: warning: passing argument 1 of âzeramatrizâ from incompatible pointer type O protótipo declara char* e você está passando char **. void zeramatriz(char (*pmat)[num], char *pletra) ou void zeramatriz(char pmat[][num], char *pletra); for(i=0;i<15;i++) *(pletra+i)=rand(); Como o array vai de 0 até 14,você esta fazendo um passo a mais do que o necessario (i<14). caca-palavras.c:23: warning: passing argument 1 of âreceberâ from incompatible pointer type De novo erro de tipos: Protótipo: int receber(char *pvet); Chamada: i = receber(vet); E vet é char [] []... caca-palavras.c:35: warning: passing argument 2 of âprocuraâ from incompatible pointer typecaca-palavras.c:35: warning: passing argument 3 of âprocuraâ from incompatible pointer type Chamada:procura(letra,vet,matriz); Protótipo: void procura(char *pletra,char *pvet,char *pmat); caca-palavras.c:37: warning: passing argument 1 of âmostrarâ from incompatible pointer type Protótipo: void mostrar(char *pvet, char *pletra); Chamada: mostrar(matriz,letra); caca-palavras.c:41: warning: passing argument 1 of âconclusaoâ from incompatible pointer typecaca-palavras.c:41: warning: passing argument 2 of âconclusaoâ from incompatible pointer type Protótipo:int conclusao(char *pvet,char *pmat); Chamada: ident=conclusao(vet,matriz); Tudo erro de tipagem.Onde é pra passar um char* você ta passando um char** e vice-versa. Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Maio 6, 2008 Só uma observação, não seria getchar() ao invés de getch()? Compartilhar este post Link para o post Compartilhar em outros sites
jholxd 0 Denunciar post Postado Maio 6, 2008 Então na hora de jogar na função tipo pvet e pmat tem que colocar **pvet e **pmat? me falaram que quando uso ponteiro de ponteiro eu posso trabalhar com ele como fosse um vetor Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 6, 2008 indexar memória é o que você faz com um array... Mas não espere que 1 pedaço de memória que contém apenas 1 endereço de alguma variável seja a mesma coisa que vários pedaços de memória contendo,cada um,o endereço de uma variável. Compartilhar este post Link para o post Compartilhar em outros sites
jholxd 0 Denunciar post Postado Maio 15, 2008 alguem tem algum material ou tópico para me ajudar no tratamento de ponteiro para ponteiro, e jogar um return em ponteiro? Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Maio 15, 2008 Ai tem tudo que você precisa!!! http://ucanforum.forumeiros.com/linguagem-...tadores-t26.htm http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites