Ir para conteúdo
Fórum Script Brasil

CPP

Membros
  • Total de itens

    117
  • Registro em

  • Última visita

Tudo que CPP postou

  1. Parabens pra você RoccoC/C++.
  2. CPP

    Ajuda iniciante em C

    Quando você escreve um numero comecando com o (zero) está dizendo ao compilador que a base desse numero é octal, ou seja, pode representar numeros de 0 a 7. Então você não pode fazer 08 porque vai dar erro. Quando quiser representar numeros na base decimal apenas escreva sem o zero na frente, exemplo: 1,2,3...etc Em alguns pontos do seu programa você escreveu if terminando com ';' isso causa erro nos blocos de decisão. você pode terminar um if com ';', isso não é problema desde que a logica esteja correta. Por exemplo: Esse if esta errado: if ( d==31) (d=01, m++); printf("A data do proximo dia é: %d/%d/%d", d, m, a); else (d++); printf("A data do proximo dia é: %d/%d/%d", d, m, a); O correto seria if ( d==31) { d=01; m++; printf("A data do proximo dia é: %d/%d/%d", d, m, a); } else { (d++); printf("A data do proximo dia é: %d/%d/%d", d, m, a); } Tenta encontrar os outros erros e se precisar de ajuda é só falar.
  3. Pra não aceitar o enter sem ter digitado um numero antes: while (tecla != '\r' ) { tecla = getch(); if (tecla == '\r' && i == 0) tecla = 0; if (isdigit(tecla) || tecla=='-') numero[i++] = tecla; } }while(atoi(numero) < 0 || atoi(numero) > 100); [/codebox] numero é um array do tipo char, supondo que o conteudo dela seja "Teste 123" se fizer: numero[5] = '-'; você muda o conteudo para "Teste-123" porque escreveu na posição 6 da string; Um array em C sempre começa em 0, então a indexação seria: 0 1 2 3 4 5 6 7 8 9 10 (indice) T e s t e - 1 2 4 (conteudo) Quando você faz numero[i++] está indicando a posição pelo valor de i. Deu pra entender?
  4. CPP

    SENHA COM NÚMEROS

    Os dois códigos estão bons e funcionam, mas se alguém usar um programa pra gerar o assembly do seu executavel vai pegar a senha facilmente. Uma maneira de dificultar a ação de um hacker e não colocar pistas. Se eu procurar mensagem (Senha Correta) no codigo vou achar o if e o valor da senha. Mas se eu usar variaveis e dificultar o ponto onde vão encontrar as mensagens o invasor vai ter mais dificuldade pra quebrar a segurança. Alguns algoritmos de criptografia também podem ajudar a aumentar a segurança, alem de um contador limite de tentativas. O codigo abaixo pode ser melhorado em muito. Abs #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<math.h> int main() { int resposta = 954; char *msg[] = {"Senha Correta!\n\n", "Senha Incorreta\n\n"}; int status; clrscr(); resposta = 123; int senha; printf("Entre com a senha:"); scanf("%d", &senha); printf("\nVerificando...\n"); status = (senha==resposta); printf(msg[!status]); getch(); return status; } [/codebox]
  5. AthosLive, Tem mais duas coisas erradas no seu codigo pg é um char e você ta usando scanf("%s", &pg); Quando você usa %s o scanf vai te retornar a tecla que você pressionou mais o terminar de string (\ 0) e como você alocou apenas um byte (char) está corrompendo a memoria do seu programa. O correto é usar scanf("%c", &pg) que vai te retornar apenas um byte. O outro erro é que comissão é com dois "s" e não com ç (rs) Abs
  6. Posta o código ou manda pra mim por email: osantos@smartnet.com.br
  7. CPP

    Ajuda em exercicio C

    Cara, eu nunca vi essa expressão antes: v = (0, i); Você pode me dizer o que ela faz? Grato
  8. CPP

    DUVIDAS (BÁSICO) EM C

    Athoslive, Seu código tá bem confuso cara. Tem goto dentro de while e if que não vai fazer exatamente o que você quer. Alem do que printf(" o \r", seta + passo); está errado, já que você passou um parametro (seta + passo) sem nenhuma indicação de substituição na string. Ou seja tá faltando algum "%<tipo>" dentro da string " o \r"; O problema acho que tá mais na lógica do que no uso da linguagem. Mas vamos lá. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> #include <dos.h> #include <ctype.h> void main() { char a; int col = 10; clrscr(); printf("joguinho lecal , digite D pra > e A pra <"); printf("\n "); printf(" >- "); inicio: if (kbhit()) a=tolower(getch()); if(a=='d') { gotoxy(col--, 2); printf(" o \r"); if (col == 8) a = ' '; } if(a=='a') { gotoxy(col++, 2); printf(" o \r"); if (col == 30) a = ' '; } if (a=='e') { // escreva aqui seu codigo para o tiro } if(a=='s') { exit(0); } delay(50); goto inicio; } [/codebox]
  9. do{ memset(numero, 0, sizeof(numero)); i = 0; printf("Digite um numero de 0 a 100\n"); while (tecla != '\r' ) { tecla = getch(); if (isdigit(tecla)) numero[i++] = tecla; } }while(atoi(numero) < 0 || atoi(numero) > 100);
  10. Bom, eu particularmente discordo da questão de usar apenas o que se aprende no curso. Desde que você saiba o porque das coisas acho valido usar tudo. Mas, sem arrays você pode fazer um scanf("%d", &numero); e depois chamar clrscr(); pra limpar a tela e deixar seguir o fluxo. O problema é que os dois usuarios não podem estar na frete do micro nesse momento. A funcao isdigit() apenas testa se um caracter é um digito entre 0 e 9, ela não faz nenhuma conversão.
  11. Olá Eduardo. Tem um problema no seu codigo. while ((ch != '\r')) { ch = getch(); } Supondo que ch seja do tipo char quando você faz ch = getch() está recebendo o codigo ASCII da tecla pressionada, por exemplo: Se digitar 123 o ch vai ter apenas o valor 0x33 (51 decimal) que corresponde ao codigo ASCII (em hexa) do caracter '3'. E quando pressionar o ENTER ch vai ter o valor 0x0D ou 13 em decimal que corresponde ao codigo ASCII do ENTER. Quando ch for igual ENTER ('\r') ele encerra o whille. Ai você faz um scanf("%d", &chute) e compara com ch, nesse ponto você está comparando o seguinte: Supondo que o usuario digitou 45 seu if será: if (45 == 13) que resultará em FALSO. Vou enviar um codigo pra você analisar. Qualquer dúvida é só postar. Abs #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> #include <mem.h> void main() { char numero[10]; char tecla; int chute; int i = 0; // preenche o array numero com zeros memset(numero, 0, sizeof(numero)); tecla = 0; printf("Digite um numero e pressione <ENTER> para finalizar\n"); while (tecla != '\r') { tecla = getch(); if (isdigit(tecla)) // verifica se a tecla digitada é um numero (0 a 9) numero[i++] = tecla; // salva o valor digitado em numero na posicao indicada por i eincrementa i } printf("Digite um valor: "); scanf("%d", &chute); if (chute == atoi(numero)) // atoi converte uma string para int printf("Confere\n"); else printf("não Confere\n"); getch(); } [/codebox]
  12. CPP

    DUVIDAS (BÁSICO) EM C

    Tenta estudar esse código. #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> #include <dos.h> #include <ctype.h> void main() { char a; int col = 10; clrscr(); printf("joguinho lecal :D, digite D pra > e A pra <"); printf("\n "); printf(" >- "); inicio: if (kbhit()) a=tolower(getch()); if(a=='d') { gotoxy(col--, 2); printf(" o \r"); if (col == 8) a = ' '; } if(a=='a') { gotoxy(col++, 2); printf(" o \r"); if (col == 30) a = ' '; } if(a=='s') { exit(0); } delay(50); goto inicio; } [/codebox]
  13. CPP

    DUVIDAS (BÁSICO) EM C

    Pequeno engano. a sequencia deve ser col = 1; gotoxy(col, 10); // pra posicionar na coluna 1 da linha 10 printf(" o"); // pra exibir nas coordenas estabelecidas pelo gotoxy col++; // col passa a ser 2...3...4...e etc Quando quiser retroceder é só fazer col-- Tenta ai, se não conseguir eu modifico seu codigo pra você ver como faz. Abs
  14. CPP

    DUVIDAS (BÁSICO) EM C

    Olá Binder, Concordo com você quando diz que não se compara strings com ==, mas no codigo athoslive ele está comparando bytes quando se usa o ' apostrofe. Isso é perfeitamente valido ainda mais porque a variavel (a) é um char. AthosLive, o problema do seu codigo é o seguinte. Quando você simplesmente usa o printf ele vai exibir a informação na posição corrente da tela. O \ n faz o cursor se move para a coluna 1 da proxima linha. Se você quer fazer o seu ojbeto se mover você precisa indicar as coordernadas de impressao usando o gotoxy(col, linha) e ir mudando o valor de col; Assim o printf vai respeitar as coordenadas que você definiu. Pra andar pra frente é só fazer col++ e pra andar pra tras col-- dentro dos limites que você estabelecer. Se ainda tiver duvidas é só falar. Fica atento ao que o Binder falou, isso é importante pra se manipular texto. Inclusive você pode usar o toupper() ou tolower() pra tratar as letras digitadas independente de ser (s) ou (S). Abs
  15. CPP

    [Dúvida] include C++

    Dependendo do compilador e do que você quer fazer num .h/.hpp pode mesmo dar erro. Pode ser que tenha solução, mas a melhor opção ainda é usar funções definidas em outros modulos. Qualquer problema é só falar. Abs
  16. CPP

    [Dúvida] include C++

    Olá Eric, É possivel fazer um #include em qualquer parte do codigo, mas não é muito comum. O ideal é você criar um projeto com varios modulo e chamar as funções que eles disponibilizam. Nesse modelo (não muito comum) você pode usar o #include onde quiser. O problema é que o código é replicado no ponto onde o #include foi realizado e dessa forma consome memoria aumentando o tamanho da sua aplicacao. Para teste crie os arquivos teste.cpp e main.cpp //============================== // Arquivo teste.cpp //============================== printf("Texto contido em teste.cpp\n"); //============================== // Arquivo main.cpp //============================== #include <stdio.h> #include <stdlib.h> void main(void) { printf("Texto contido em main.cpp\n"); #include "teste.cpp" printf("Novamente texto contido em main.cpp\n"); for(int n = 0; n < 10; n++) #include "teste.cpp" system("pause"); } [/codebox] O ideal é criar funções em modulos separados e chama-las onde desejar. Assim, você só tem uma função que pode ser executada em qualquer ponto sem consumir memoria de codigo desenecessariamente. Para teste crie os arquivos teste.cpp, teste.hpp e main.cpp [codebox] //============================== // Arquivo teste.cpp //============================== void ExibeMensagem(void) { printf("Texto contido em teste.cpp\n"); } //============================== // Arquivo teste.hpp //============================== void ExibeMensagem(void); //============================== // Arquivo main.cpp //============================== #include <stdio.h> #include <stdlib.h> #include "teste.hpp" void main(void) { printf("Texto contido em main.cpp\n"); ExibeMensagem(); printf("Novamente texto contido em main.cpp\n"); for(int n = 0; n < 10; n++) ExibeMensagem(); system("pause"); }
  17. CPP

    DUVIDAS (BÁSICO) EM C

    já que você ta usando borlando não me preocupei com portabilidade pra Linux. Vê se esse codigo te da alguma luz. Abs #include <stdio.h> #include <conio.h> #include <dos.h> #include <math.h> void main(void) { unsigned char col = 10; // atribui o valor da coluna inicial char passo = 1; // atribui o valor inicial para o passo char seta = '>' - 1; // atribui o caracter para exibicao usando o codigo ascii while(1) { if (kbhit()) // se alguma tecla for pressionada encerra o programa break; // encerra o laco gotoxy(col, 10); // indica a posicao de impressao na tela printf(" %c \r", seta + passo); // exibe a seta > ou < col += passo; // muda a coluna de impressao somando 1 para avancar ou -1 para retroceder if (col == 70 || col == 10) // se atingiu os limites estabelecidos muda o passo para -1 ou 1 passo *= -1; // com uma multiplicao simples por (-1) // exibe o percentual com base na posicao de impressao dentro de 80 colunas // usando uma regra de 3 simples gotoxy(1,15); printf("Percentual: %.2f\% ", (float)(col * 100.0 / 80.0)); delay(50); // aguarda 50 milisegundos antes de executar o laco novamente } } [/codebox]
  18. Só ta faltando alguns pequenos detalhes no seu programa: Na funcao inclusao() falta a linha ult->s=s; Na opçao 6 você chama ContarFunc() que devolver a quantidade de registros mas você não salva em lugar nenhum quando o correto é: cont=ContarFunc();
  19. CPP

    Invertendo uma lista

    Olá arandoble, Acho que não estou entendendo o que você realmente precisa. O codigo que eu postei faz a leitura do arquivo lista.txt independente da quantidade de linhas que ele possua e gera o lista_inv.txt com as palavras invertidas. A funcao que o renatosantos17 postou faz a inversão que você deseja. Mas, o que é a lista que você quer inverter? Por exemplo, você inverter listas em memoria ou inverter linhas do arquivo usando a funcao Inverte() Se você usar o exemplo que trata arquivos precisa ter uma arquivo chamado "lista.txt" com o conteudo para inversão. O resultado será gravado no arquvo "lista_inv.txt" // opcao 1 -------------------------------------------------- #include <stdio.h> #include <string.h> #include <stdlib.h> char *inverte(char *string) { static char temp[100]; int inc; int dec = strlen(string)-1; strcpy(temp, string); for(inc = 0; inc < strlen(string); inc++, dec--) temp[inc] = string[dec]; temp[inc] = 0; return (temp); } void main(void) { char *nomes[ ] = {"pedro", "paulo", "anita", "rosana", "joao", 0}; int n = 0; while(nomes[n]) { printf("nome: %s\t%s\n", nomes[n], inverte(nomes[n])); n++; } } [/codebox] [codebox] / opcao 2 -------------------------------------------------- #include <stdio.h> #include <string.h> #include <stdlib.h> char *inverte(char *string) { static char temp[100]; int inc; int dec = strlen(string)-1; strcpy(temp, string); for(inc = 0; inc < strlen(string); inc++, dec--) temp[inc] = string[dec]; temp[inc] = 0; return (temp); } int main() { // cria os ponteiros para os arquivos FILE *fpEntrada, *fpSaida; // abre os arquivos de entrada e saida fpEntrada = fopen("lista.txt", "r+t"); fpSaida = fopen("lista_inv.txt", "w+t"); if (fpEntrada == NULL || fpSaida == NULL) return 1; char buffer[256]; int n; while (feof(fpEntrada) == 0) { n = 0; if (fgets(buffer, 250, fpEntrada) != NULL) { // grava já invertido fputs(inverte(buffer), fpSaida); } } fclose(fpEntrada); fclose(fpSaida); system("pause"); return (0); }
  20. Olá. Esse codigo deve funcionar em qualquer compilador, basta algumas mudanças (de coisas que não deveriam estar ai) Obrigado e parabens pela iniciativa de compartilhar codigo. Abs #include <stdio.h> // #include <dos.h> // essa linha esta a mais #include <stdlib.h> void main(void) { union { unsigned char byte; struct { unsigned char bit0 : 1; unsigned char bit1 : 1; unsigned char bit2 : 1; unsigned char bit3 : 1; unsigned char bit4 : 1; unsigned char bit5 : 1; unsigned char bit6 : 1; unsigned char bit7 : 1; } unsigned binario; // retirar o unsigned dessa linha e pronto, compila em Windows ou Linux } dado; dado.byte = 127; printf("Decimal: %d\n", dado.byte); printf("Binario: %d%d%d%d-%d%d%d%d\n", dado.binario.bit7, dado.binario.bit6, dado.binario.bit5, dado.binario.bit4, dado.binario.bit3, dado.binario.bit2, dado.binario.bit1, dado.binario.bit0); printf("Hexa...: %02X\n", dado.byte); printf("\n\n"); dado.binario.bit7 = 1; dado.binario.bit6 = 0; dado.binario.bit5 = 1; dado.binario.bit4 = 0; dado.binario.bit3 = 1; dado.binario.bit2 = 0; dado.binario.bit1 = 1; dado.binario.bit0 = 0; printf("Binario: %d%d%d%d-%d%d%d%d\n", dado.binario.bit7, dado.binario.bit6, dado.binario.bit5, dado.binario.bit4, dado.binario.bit3, dado.binario.bit2, dado.binario.bit1, dado.binario.bit0); printf("Decimal: %d\n", dado.byte); printf("Hexa...: %02X\n", dado.byte); system("pause"); }
  21. Para efeitos didáticos. Abs #include <stdio.h> #include <dos.h> #include <stdlib.h> void main(void) { union { unsigned char byte; struct { unsigned char bit0 : 1; unsigned char bit1 : 1; unsigned char bit2 : 1; unsigned char bit3 : 1; unsigned char bit4 : 1; unsigned char bit5 : 1; unsigned char bit6 : 1; unsigned char bit7 : 1; } unsigned binario; } dado; dado.byte = 127; printf("Decimal: %d\n", dado.byte); printf("Binario: %d%d%d%d-%d%d%d%d\n", dado.binario.bit7, dado.binario.bit6, dado.binario.bit5, dado.binario.bit4, dado.binario.bit3, dado.binario.bit2, dado.binario.bit1, dado.binario.bit0); printf("Hexa...: %02X\n", dado.byte); printf("\n\n"); dado.binario.bit7 = 1; dado.binario.bit6 = 0; dado.binario.bit5 = 1; dado.binario.bit4 = 0; dado.binario.bit3 = 1; dado.binario.bit2 = 0; dado.binario.bit1 = 1; dado.binario.bit0 = 0; printf("Binario: %d%d%d%d-%d%d%d%d\n", dado.binario.bit7, dado.binario.bit6, dado.binario.bit5, dado.binario.bit4, dado.binario.bit3, dado.binario.bit2, dado.binario.bit1, dado.binario.bit0); printf("Decimal: %d\n", dado.byte); printf("Hexa...: %02X\n", dado.byte); system("pause"); } [/codebox]
  22. CPP

    Invertendo uma lista

    Bom, estuda esse código e se tiver dúvidas posta ai que a galera ajuda. Abs #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { // cria os ponteiros para os arquivos FILE *fpEntrada, *fpSaida; // abre os arquivos de entrada e saida fpEntrada = fopen("lista.txt", "r+t"); fpSaida = fopen("lista_inv.txt", "w+t"); if (fpEntrada == NULL || fpSaida == NULL) return 1; char buffer[256]; int n; while (feof(fpEntrada) == 0) { n = 0; if (fgets(buffer, 250, fpEntrada) != NULL) { // grava já invertido while (buffer[n]) // anda pelo array até encontrar o terminar '' { // strlen devolve o numero de bytes numa string. // Exemplo: strlen("João") devolve 5, mas tem que lembrar que um array em C começa em 0 fputc(buffer[(strlen(buffer)-1)-n], fpSaida); n++; } } } fclose(fpEntrada); fclose(fpSaida); system("pause"); return (0); } [/codebox]
  23. Opa, desculpa ai então. Tenta esse código como base. #include <stdio.h> #include <mem.h> void main(void) { FILE *fp = fopen("teste.txt", "rt"); unsigned char ch; unsigned char tabela[256]; memset(&tabela, 0, sizeof(tabela)); while (feof(fp) == 0) if (ch = fgetc(fp)) tabela[ch]++; printf("Fim\n"); for(int n = 0; n < 256; n++) printf("%03d ", tabela[n]); fclose(fp); } [/codebox]
  24. CPP

    Dúvida com if

    Olá Victor Martins, Consertar seu programa até que não é muito dificil, mas tem alguns conceitos de programação, pelo menos em C/C++, que eu acho interessante passar pra você. Mas podemos ver isso por email e depois postar o resultado aqui, se você quiser é claro. Abs
×
×
  • Criar Novo...