Gurzi Posted April 18, 2006 at 08:47 AM Report #22616 Posted April 18, 2006 at 08:47 AM Boas Malta Ontem não tinha nada para fazer e para por em prática um dos poucos conhecimentos que tenho em Linguagem C , comecei a fazer apenas com funções, alguns switch/case , nada de complicado um programa com menus e com algumas paneleirisses 😛 Tem o Nome de Kishiote Utilities e está funcional mas ainda numa versão 0.00000000001 porque primeiro, não tem utilidade nenhuma (apenas serve para testar alguns conhecimentos) , depois porque nem tudo está como eu quero.. Vou testando as coisas e já descobri uns quantos erros. A minha dúvida: : Quero gerar passwords com chars , tipo ele vai de A a Z e com 7 letras cria uma password com letras aleatórias(podem ser repetidas) na minha mais perfeita idiotice criei isto : void menustr() { system("cls"); titulo(); printf("\n\t\t\t\t @@STRINGS@@ \n"); linha(); printf("\n\n\t\t\t1 - Qual a Melhor Password\n"); printf("\t\t\t2 - Criar uma Password\n"); scanf("%d",&op); option_str(op); } void pw_rand(void) { int i=0; while (i<7) { srand(time(NULL)); pw1[i]= rand() % 27; printf("%c",&pw1[i]); i++; } o que não funciona 🙂 já pensei que teria que ser pw1= (char) rand() % 27 ( 27 , visto que o abc tem 27 chars) Bem vou deixar aqui por baixo o code todo, para verem o aspecto do bixo (mt básico , por isso não critiquem o nivél da bixana) #include <stdio.h> #include <stdlib.h> #include <time.h> #include <ctype.h> int op=0; int valor=0; int gerado=0; char pw1[40]; char pw2[40]; void menumat(void); void menudiv(void); void menustr(void); void linha(void); void option_div(int); void apostas(int); void pw_rand(void); void pw_compare(char *x,char *y); void option(int ); void option_str(int); int strlen(char *i) { int j=0; for(j=0;i[j]!='\0';j++) return j; } void linha(void) { printf("\t\t--------------------------------------------------------\n\n"); } void titulo(void) { printf("\t\t------------------KISHIOTE UTILITIES ------------------\n"); } void menup() { system("cls"); titulo(); printf("\t\t|\t\t\t\t\t\t |"); printf("\n\t\t|\t\t1-Matematica |\n"); printf("\t\t|\t\t2-Divertimento |\n"); printf("\t\t|\t\t3-Funcoes de Strings |\n"); printf("\t\t|\t\t4-Sair |\n"); printf("\t\t|\t\t\t\t\t\t | \n"); printf("\t\t-------------------------------------------------------\n"); printf("\t\t\tIntroduza a opcao que pretende(1/2/3) :\n\n\t\t\t\t\t "); scanf("%d",&op); option(op); } void option(int x) { switch(x) { case 1 : menumat(); break; case 2 : menudiv(); break; case 3: menustr(); break; case 4: exit(0); break; default : printf("Introduziu uma opcao errada"); exit(0); break; } } void menumat() { system("cls"); titulo(); printf("\n\t\t\t\t @@MATEMATICA@@\n\n"); linha(); printf("\t\t\t\t1- Maximo Divisor Comum\t\t\t\n"); } void menudiv() { system("cls"); titulo(); printf("\n\t\t\t\t @@DIVERTIMENTO@@\n\n"); linha(); printf("\t\t\t\t 1 - Spider\t\t\t\n"); printf("\t\t\t\t 2 - Copas\t\t\t\n"); printf("\t\t\t\t 3 - Apostar Numero\t\t\t\n"); printf("\t\t\t\t 4 - Voltar ao Menu Principal\t\t\t\n"); printf("\t\t\t\t 5 - Sair\t\t\t\n"); putchar('\n'); printf("\t\t\tIntroduza a opcao que pretende(1/2/3) : \n\n\t\t\t"); scanf("%d",&op); option_div(op); } void option_div(int x) { switch(x) { case 1 : system("spider.exe"); break; case 2 : system("mshearts.exe"); break; case 3 : system("cls"); titulo(); putchar('\n'); printf("\t\t\t\t Jogo das Apostas\n"); linha(); printf("\t\t\t\tIntroduza um valor \n\n\n\t\t\t\t"); scanf("%d",&valor); apostas(valor); break; case 4 : menup(); break; case 5 : exit(0); break; } } void menustr() { system("cls"); titulo(); printf("\n\t\t\t\t @@STRINGS@@ \n"); linha(); printf("\n\n\t\t\t1 - Qual a Melhor Password\n"); printf("\t\t\t2 - Criar uma Password\n"); scanf("%d",&op); option_str(op); } void option_str(int x) { switch(x) { case 1 : printf("Introduza a password 1 que pretende comparar\n"); fflush(stdin); gets(pw1); printf("Introduza a password 2 que pretende comparar\n"); gets(pw2); pw_compare(pw1,pw2); break; case 2 : pw_rand(); break; } } void pw_rand(void) { int i=0; while (i<7) { srand(time(NULL)); pw1[i]= rand() % 27; printf("%c",&pw1[i]); i++; } } void pw_compare(char *x,char *y) { int i=0; int j=0; int total_letraspw1=0; int total_numpw1=0; int total_letraspw2=0; int total_numpw2=0; for(i=strlen(x),j=0;j==i;j++) { if(x[j] >= 'A' && x[j]<='Z' || x[j] >='a' && x[j]<='z') total_letraspw1 +=1; if(x[j] >=0 && x[j]<= 9) total_numpw1+=1; } for(i=strlen(y),j=0;j==i;j++) { if(y[j] >= 'A' && y[j]<='Z' || y[j] >='a' && y[j]<='z') total_letraspw2+=1; if(y[j] >=0 && y[j] <= 9) total_numpw2+=1; } } void apostas(int x) { while(x !=gerado) { if(x > gerado) printf("\t\t\tIntroduziste um numero maior que o suposto\n\n"); else printf("\t\t\tIntroduziste um numero menor que o suposto\n\n"); printf("\t\t\tintroduza outro numero\n\t\t\t"); scanf("%d",&valor); x=valor; } printf("\t\t\tACERTOU\n"); } main() { srand (time (NULL)); gerado= rand()%100; titulo(); menup(); putchar('\n'); system("PAUSE"); } espero uma ajuda 😄 😞
Solution Marino Posted April 18, 2006 at 10:33 AM Solution Report #22625 Posted April 18, 2006 at 10:33 AM Biba 😞 #include <stdio.h> #include <time.h> void pw_rand(void) { int i=0,aux; char pw1[7]; srand(time(NULL)); while (i<7) { aux = (65 + rand() % (91-65)); pw1[i]=(char) aux; printf("%c",pw1[i]); i++; printf("\n"); } } int main() { printf("Pass Criada\n"); pw_rand(); system("PAUSE"); return 0; } Ora o srand, que é a semente dos "randes" tem que estar fora do ciclo while, pois se não estava sempre a gerar a mesma semente, e os valores eram sempre iguais. Nao inicializas-te o pw1. Tens que ver que um inteiro corresponde a uma char da tabela ascii (http://www.lookuptables.com/) . 65 + rand() % (91-65) cria valores de 65 até 90. que corresponde em ascii de A a Z. engraçado era criar uma pass com letras maiusculas minusculas e numeros ? Se tiver algum erro avisem, pois aquilo dos ascii fiz a olho 🙂
Gurzi Posted April 18, 2006 at 01:40 PM Author Report #22649 Posted April 18, 2006 at 01:40 PM obrigado, agora estou nas aulas mas quando chegar a casa vou logo tratar disso 😞 obrigado
Gurzi Posted April 18, 2006 at 07:16 PM Author Report #22730 Posted April 18, 2006 at 07:16 PM a bombar, obrigado mesmo 😞 só não percebi a parte de aux = (65 + rand() % (91-65)); o porque de 65 + rand() % (91-65) visto que vai dar um numero até 91 já que 91-65 = 26 +65 =91
saramgsilva Posted April 18, 2006 at 08:21 PM Report #22739 Posted April 18, 2006 at 08:21 PM a bombar, obrigado mesmo 😞 só não percebi a parte de aux = (65 + rand() % (91-65)); o porque de 65 + rand() % (91-65) visto que vai dar um numero até 91 já que 91-65 = 26 +65 =91 91-65 = 26 por tanto o resultado de rand()%26 é um dos seguintes numeros: 0,1,2,3,4,5,....,20,21,22,23,24,25 pois sao os possiveis restos da divisao do numero aleatorio por 26... agora o aux = 65+ num_aletorio, deve ter a ver com o aux ter k ser superior ou igual a 65 para fazer aux=rand()% 91 teriamos como resultado um numero : 0,1,2,3,4,5,6,7,8,9,......,88,89,90 e parece k se ker k seja superior a 65... espero k tenham percebido.. 🙂 www.saramgsilva.com As minhas apps no WP7 Marketplace Youtube : Galinho - Windows Phone 7.5
Marino Posted April 18, 2006 at 08:46 PM Report #22747 Posted April 18, 2006 at 08:46 PM Se reparares a letra A corresponde em decimal ao numero 65, a Z ao numero 90, ou seja se eu fizer um cast tipo: " (char) letra = 61; " a letra vai ser o B, assim sucessivamente. 🙂 Quero ver isso a criar pass com maiúsculas minúsculas e números 😛 e a gravar num txt já agora 😞
Gurzi Posted April 19, 2006 at 08:01 AM Author Report #22804 Posted April 19, 2006 at 08:01 AM isso é mt advanced , o maximo que consigoo é a cena das maisuculas e minuscululas 🙂 os files ainda n aprendi =D
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now