Ir ao conteúdo
  • Cadastre-se

kgin

Membro Pleno
  • Posts

    378
  • Cadastrado em

  • Última visita

Tudo que kgin postou

  1. Pelo o que eu entendi você quer abrir->computar os dados->salvar o arquivo, é isso? Se você já sabe C ou C++ (Não são a mesma linguagem) seria questão só de usar uma biblioteca como libxlsxwriter ou salvar o arquivo em CSV para ficar mais fácil de editar. Mas se você quer aprender uma linguagem nova para fazer isso eu recomendo JavaScript, eu nunca programei mas meu irmão aprendeu bem rápido, fora que aparenta ser bem versátil, porque existem navegadores de internet em quase qualquer buraco hoje em dia.
  2. kgin

    C Erro ftoa não definido

    Dei uma olhada aqui de novo é o programa está chamando a função GetStockObject() da biblioteca GDI sem acrescentar o cabeçalho gdi.h (isso depende do compilador, no freepascal é só gdi). Fora que eu acho que tem que acrescentar algumas linhas na compilação, como -gdi, ou -gdi+, e -D UNICODE para evitar a codificação do Windows. Provavelmente usando o mingw, se você consegui compilar aí aproveite e passe a configuração do compilador que você usou para ele.
  3. @PROG105 Eu recomendaria desinstalar todos os que você instalou e instalar o tdm-gcc e o Visual studio code com a extensão C/C++ IntelliSence. Mas se você acha difícil eu recomendo usar esse site http://replit.com/
  4. kgin

    C Erro ftoa não definido

    Eu creio que o erro é na linha 141 total = ftoa(s_total); é que você estava tentando usar a função atof() da biblioteca stdlib.h, que seria assim total = atof(s_total);
  5. @Maxavam Poderia explicar, mas vou deixar um exemplo auto explicativo #include <stdio.h> int main(void) { int contador; char frase[60]; /* Pega a string */ printf("Digite uma frase:"); fgets(frase, 60, stdin); /* Conta o tamanho da string */ /* Poderia usar strlen() da biblioteca string.h para verificar o tamanho da string */ for (contador = 0; frase[contador] && contador < 60; contador++); /* Retira o NewLine (enter) da string */ contador--; frase[contador] = '\0'; /* Checa se a frase e maior que 30 */ if (contador <= 30) { /* Checa se a string começa com 'b' */ /* Poderia usar toupper da biblioteca ctype.h para simplificar o processo */ if (frase[0] == 'b' || frase[0] == 'B') { printf("A frase comeca com B e esta entre a faixa de 30 caracteres\n"); } else { printf("A frase não comeca com B mas esta na faixa de 30 caracteres\n"); } /* Se for maior que 30 caracteres */ } else { printf("A frase e invalida\n"); } puts("Pressione enter para finalizar"); getchar(); return(0); }
  6. Você tem que iniciar o vetor preenchendo todas as posições com 0, para fazer isso em C basta declarar dessa maneira /* Declara um vetor com o nome de meu vetor de 13 posições iniciadas com 0 */ int meu_vetor[13] = {0}; /* {0} indica que todas as posições serão iniciadas com 0 */ Quando você cria um vetor de 13 posições ele vai começar em 0 e terminar em 12 totalizando 13 posições, a posição 13 não existe porque aí já seria 14 posições. Esse é muito bom, mas você tem que prestar atenção na configuração, ele tem que estar configurado para C não para C++. Para checar as configurações vá na caixa language e selecione C (Não selecione C(TurboC)) para configurar corretamente. Eu dou preferência a usar esse outro aqui replit. Você deveria dar nomes mais significativos para as variáveis e separa melhor o seu algoritmo em pedaços (funções) para ficar mais fácil de ler. Eu adaptei esse meu algoritmo que eu fiz ontem para deixar de exemplo De uma estudada nele.
  7. @Carlos A Dias até onde eu sei você teria que instala o delphi novamente, ao invés de só fazer um atalho. A licença do software fica atrelada ao sistema, então se você instalou no Windows 7 é em outro HD só vai funcionar lá.
  8. A maneira mais pratica é utilizando estruturas de repetição, veja abaixo #include <stdio.h> int main(void) { int opcao = 0; do { printf("Digite 0 para sair ou uma das opções abaixo\n"); printf("1-Item\n"); printf("2-Item\n"); printf("3-Item\n"); printf("4-Item\n"); scanf("%d%*c", &opcao); if (opcao < 0 || opcao > 4) { printf("Opcao invalida!\n"); } } while (opcao < 0 || opcao >4); if (opcao > 0) { printf("A opcao escolhida foi a %d\n", opcao); } else { printf("voce saiu do programa!\n"); } getchar(); return(0); } Eu acho que isso não é mais um problema hoje em dia, use esse site:replit com o meu exemplo Eu fiz o programa usando um A10 com um teclado conectado
  9. @JitterCreepyTáComProblema O executável não contem vírus, isso só é um falso positivo. Você pode usar o upx para compactar e criptografar o executável final, mas ele ainda vai colocar o bat na pasta %temp% Mas uma coisa que eu estou curioso é o que esse bat faz?
  10. kkkk é eficiente! Não sei se eu entendi direito, mas você quer abrir é editá-lo e depois salvá-lo? Se é isso então uma coisa que quase todas as linguagens de programação tem (nem que seja uma biblioteca) é HTMLParse, de uma googlada por HTMLParse python.
  11. @Caio.Barret0 Olá seu código tem vários erros, como esse aqui no void Cadastrar_Projeto(base_projetos cadastro[max]) em que você incrementa a variável pos antes de fazer qualquer cadastro, é se a pessoa digitar a opção errada? No caso de listar por status você teria que passar por todo vetor verificando a opção desejada. Poste o código com o botão code <> que fica na barra acima do editor da postagem, e poste o enunciado para ficar mais simples de te ajudar.
  12. Eu não recomendo você utilizar o meu código, principalmente a parte de validar o cpf. Eu coloque só como exemplo, porque ele não vai detectar cpfs com sequencias repetidas. Você já parou para pensar o que está acontecendo no if(validaCpf(cpf))? Vou descrever para você em português Se validaCpf retornar verdadeiro (em C falso e 0 e verdadeiro e qualquer numero maior que 0) então faça a próxima instrução No caso do do{}while() você teria que fazer algo assim do { char buffer[T_BUFFER]; printf("Entre com o cpf:"); fgets(buffer, T_BUFFER, stdin); /* retira o newLine do buffer (e o famoso enter) */ buffer[strlen(buffer)-1] = '\0'; /* Verifica se é possível copiar o buffer para o campo do cpf */ if (strlen(buffer) == T_CPF-1) { strcpy(cpf, buffer); /* Verifica o cpf */ if (validaCpf(cpf) == 1) { printf("Cpf valido!\n"); } else { printf("Cpf invalido!\n"); } } } while (validaCpf(cpf) == 0); sempre utilize fgets() para lidar com caracteres e pesquise sobre os outros comandos da stdio. Exemplo de como pegar entradas.
  13. eu recomendo você deixar os números do cpf intactos na estrutura (sem as pontuações) porque para manipular depois será mais fácil. para mostrar o Cpf pontuado você pode fazer algo assim void mostraCpf(char *cpf) { int contador; for (contador = 0; cpf[contador] || contador < T_CPF-1; contador++) { printf("%c", cpf[contador]); if (contador+1 == 3 || contador+1 == 6) { printf("."); } else if (contador+1 == 9) { printf("-"); } } printf("\n"); } O exemplo completo com a validação do cpf
  14. @Matheus Brian a única coisa que eu tenho a falar sobre o seu algoritmo é que ele não funciona, principalmente porque você não postou o arquivo de texto também. Se você vai fazer um algoritmo de loteria não seria melhor gerar os números no programa ao invés pegá-los de um arquivo? Se você decidir ir pelo caminho de gerar os números eu recomendo usar o algoritmo fisher-yates de embaralhamento. Exemplo #include <stdio.h> #include <stdlib.h> #include <time.h> #define T_DE1A60 60 #define T_DE1A4 4 int main(void) { int de1a60[T_DE1A60], de1a4[T_DE1A4]; int contador; /* Inicia os vetores */ for (contador = 0; contador < T_DE1A60; contador++) { de1a60[contador] = contador+1; } for (contador = 0; contador < T_DE1A4; contador++) { de1a4[contador] = contador+1; } /* embaralha os vetores */ srand(time(NULL)); /* Inicia o gerador de numeros */ for (contador = 0; contador < T_DE1A60; contador++) { int tmp = de1a60[contador], indice = rand()%T_DE1A60; de1a60[contador] = de1a60[indice]; de1a60[indice] = tmp; } for (contador = 0; contador < T_DE1A4; contador++) { int tmp = de1a4[contador], indice = rand()%T_DE1A4; de1a4[contador] = de1a4[indice]; de1a4[indice] = tmp; } /* Sorteia 6 numeros */ printf("Sorteia 6 numeros de %d\n", T_DE1A60); for (contador = 0; contador < 6; contador++) { printf("%d, ", de1a60[contador]); } printf("\nMostra o vetor de %d numeros\n", T_DE1A4); for (contador = 0; contador < 4; contador++) { printf("%d, ", de1a4[contador]); } getchar(); return(0); } Outro ponto critico no seu algoritmo e a escolha de nomes para variáveis, não escolha coisas como int x[5], j, k; O que o X faz? ou o J? Escolha nomes mais representativos como int vetor_de_5[5], contador, temp; É tenha a boa pratica de indentar o código, configure o seu editor para pelo menos 2 espaços.
  15. @Yaunoz O seu programa contem vários erros, é pelo o que eu conheço de compiladores você está utilizando uma IDE que não vai te ajudar em nada (você provavelmente está utilizando o DevC++) eu recomendo você utilizar esse aqui online replit Agora vamos ao seu código, Em C você não pode ter arrays (vetores) mutáveis. Eles tem que ser fixos ou reservados dinamicamente. Exemplo de vetor fixo. int vetor[100]; /* Vetor de 100 posições a partir do 0 */ /* Manipula o vetor */ vetor[0] = 10; /* A primeira posição vale 10 */ vetor[15] = 124; /* A decima quinta posição vale 124 */ /* Etc..*/ Exemplo de vetor dinâmico, int *vetor = malloc(sizeof(int[TAMANHO_DO_VETOR])); /* Manipula o vetor */ vetor[0] = 10; /* A primeira posição vale 10 */ vetor[15] = 124; /* A decima quinta posição vale 124 */ /* Etc..*/ free(vetor); /* Libera o espaço reservado para o vetor */ Um exemplo de programa básico em C. int main(void) { return(0); } A compilação de C não tolera uma função que não especifica se tem parâmetros, então toda vez que for fazer uma função principal e não for receber os parâmetros padrões declare-a como void Exemplo int main(void) Tente configurar o seu IDE para a compilação em C para tudo ficar mais simples. Exemplo de como pegar os dois vetores #include <stdio.h> #include <stdlib.h> int main(void) { int *vetor1, *vetor2; int tam_vetor1 = 0, tam_vetor2 = 0, contador; printf("Digite o tamanho do primeiro vetor\n"); scanf("%d%*c", &tam_vetor1); printf("Digite o tamanho do segundo vetor\n"); scanf("%d%*c", &tam_vetor2); /* %*c Retira o enter do buffer do teclado */ /* Reserva memoria para os vetores */ vetor1 = malloc(sizeof(int[tam_vetor1])); vetor2 = malloc(sizeof(int[tam_vetor2])); /* Testa se foi possivel reservar a memoria */ if (vetor1 == NULL || vetor2 == NULL) { perror("não foi possivel reservar memoria!"); exit(EXIT_FAILURE); /* Aborta o programa */ } /* Pega os dois vetores */ printf("Primeiro vetor\n"); for (contador = 0; contador < tam_vetor1; contador++) { printf("[%d]:", contador); scanf("%d%*c", &vetor1[contador]); /* %*c Retira o enter do buffer do teclado */ } printf("Segundo vetor\n"); for (contador = 0; contador < tam_vetor2; contador++) { printf("[%d]:", contador); scanf("%d%*c", &vetor2[contador]); /* %*c Retira o enter do buffer do teclado */ } /* Mostra os dois vetores */ printf("Primeiro vetor\n"); for (contador = 0; contador < tam_vetor1; contador++) { printf("[%d] = %d\n", contador, vetor1[contador]); } printf("Segundo vetor\n"); for (contador = 0; contador < tam_vetor2; contador++) { printf("[%d] = %d\n", contador, vetor2[contador]); } getchar(); /* Faz uma pausa no programa */ /* Apaga a memoria reservada */ free(vetor1); free(vetor2); return(0); }
  16. @raphalimam Você só precisa passa o nome e a localização do executável ShellExecute(0, nil, PChar('notepad'), nil, nil, 1); Estou deixando um exemplo feito em lazarus que funciona Arquivos do projeto:projeto.zip
  17. você pode testar se a opção anterior e valida, se não for você só pula o próximo trecho de código exemplo algoritmo "teste" var opcao1, opcao2: inteiro inicio escreval("Digite um numero entre 1 e 10, e para sair digite 0") repita leia(opcao1) se opcao1 > 10 entao escreval("Fora da faixa") fimSe ate opcao1 <= 10 se opcao1 <> 0 entao escreval("Digete 0 para sair e qualquer outro numero para se somado a 10") leia(opcao2) se opcao2 <> 0 entao escreval(opcao2,"+10=", opcao2+10) fimSe fimSe se (opcao1 = 0) ou (opcao2 = 0) entao escreval("O programa foi encerrado!") seNao escreval("O programa terminou normalmente!") fimSe fimAlgoritmo Outra melhoria no seu algoritmo seria utilizar vetores para guardar as informações. Exemplo algoritmo "Estados" var regiões: vetor [1..3] de caractere listaDestinos: vetor [1..14] de caractere precoDestinos: vetor [1..14] de real destinosPorRegiao: vetor [1..3,1..14] de inteiro contador1, contador2: inteiro opcao, estado: inteiro precoPassagem: real inicio // Inicia as regiões regiões[1] <- "Sudeste" regiões[2] <- "Sul" regiões[3] <- "Nordeste" // Inicia a lista de destinos listaDestinos[1] <- "MG" listaDestinos[2] <- "SP" listaDestinos[3] <- "RJ" listaDestinos[4] <- "RS" listaDestinos[5] <- "SC" listaDestinos[6] <- "PR" listaDestinos[7] <- "MA" listaDestinos[8] <- "CE" listaDestinos[9] <- "PI" listaDestinos[10] <- "RN" listaDestinos[11] <- "SE" listaDestinos[12] <- "AL" listaDestinos[13] <- "PE" listaDestinos[14] <- "PA" // Inicia a lista de preços de cada destino precoDestinos[1] <- 4000 precoDestinos[2] <- 6000 precoDestinos[3] <- 12000 precoDestinos[4] <- 7000 precoDestinos[5] <- 10000 precoDestinos[6] <- 3000 precoDestinos[7] <- 6000 precoDestinos[8] <- 12000 precoDestinos[9] <- 4000 precoDestinos[10] <- 9856 precoDestinos[11] <- 8420 precoDestinos[12] <- 5784 precoDestinos[13] <- 6800 precoDestinos[14] <- 10085 // Inicia as regiões permitidas para contador1 de 1 ate 3 faca para contador2 de 1 ate 14 faca destinosPorRegiao[contador1,contador2] <- 0 fimPara fimPara // Sudeste destinosPorRegiao[1,1] <- 1 destinosPorRegiao[1,2] <- 2 destinosPorRegiao[1,3] <- 3 // Sul destinosPorRegiao[2,1] <- 4 destinosPorRegiao[2,2] <- 5 destinosPorRegiao[2,3] <- 6 // Nordeste destinosPorRegiao[3,1] <- 7 destinosPorRegiao[3,2] <- 8 destinosPorRegiao[3,3] <- 9 destinosPorRegiao[3,4] <- 10 destinosPorRegiao[3,5] <- 11 destinosPorRegiao[3,6] <- 12 destinosPorRegiao[3,7] <- 13 destinosPorRegiao[3,8] <- 14 // Inicio do programa // Pega a região repita escreval("Digite a região que você quer viajar") para contador1 de 1 ate 3 faca escreval(contador1 ,"-",regiões[contador1]) fimPara leia(opcao) se (opcao < 1) ou (opcao > 3) entao escreval(opcao," Opção invalida") fimSe ate (opcao >= 1) e (opcao <= 3) // Mostra o estado disponivel limpaTela escreval("Estados disponiveis para ", regiões[opcao]) contador2 <- 0 para contador1 de 1 ate 14 faca se destinosPorRegiao[opcao, contador1] <> 0 entao escreval(contador1 ,"-", listaDestinos[destinosPorRegiao[opcao, contador1]]) contador2 <- contador2+1 fimSe fimPara // Pega o estado repita escreva("Digite o estado:") leia(estado) se (estado < 1) ou (estado > contador2) entao escreval("Opcao invalida") fimSe ate (estado >= 1) e (estado <= contador2) precoPassagem <- precoDestinos[destinosPorRegiao[opcao, estado]] escreval("O preco da passagem de ", regiões[opcao]," para ", listaDestinos[DestinosPorRegiao[opcao, estado]]," e de ", precoPassagem) fimAlgoritmo Dessa mameira você pode colocar e retirar a partida e os destinos facilmente.
  18. @Caio Fagundes21 Esse seu algoritmo está parecendo portugol, mas deveria se algo mais assim #include <stdio.h> int main(void) { const char OPERADORES[] = {'+', '-', '*', '/', '%'}; char tecla; int contador, q_simbolos = 0; printf("Digite uma tecla\n"); scanf("%c%*c", &tecla); for (contador = 0; contador < 5; contador++) { if (OPERADORES[contador] == tecla) { printf("%c\nOperador matematico\n", tecla); q_simbolos++; } } if (q_simbolos == 0) { printf("%c\nSimbolo não valido em C\n", tecla); } getchar(); return(0); } Eu fiz aqui de cabeça (significa que eu não testei), mas eu acho que já dá uma boa base para começar.
  19. @Caio Fagundes21 Você deveria usar nomes mais significativos nas variáveis, dessa maneira char opcao; float numero1, numero2; é e uma péssima ideia utilizar variáveis globais iguais essas que você declarou, você deve declarar todas dentro do main e utilizar parâmetros nas funções para passar os valores. Exemplo da sua função com parâmetros void calcula(float numero1, float numero2, char opcao) { float resultado = 0; if(opcao == '+') { resultado=numero1+numero2; } else if(opcao == '-') { resultado=numero1-numero2; } else if(opcao == '*') { resultado=numero1-numero2; } else if(opcao == '/') { resultado=numero1/numero2; } printf("%0.2f %c %0.2f eh igual a: %0.2f\n", numero1, opcao, numero2, resultado); } O seu código "consertado" #include <stdio.h> void calcula(float numero1, float numero2, char opcao); int main(void) { char opcao; float numero1, numero2; printf("digite o simbolo da opcaoeracao desejada: "); scanf("%c%*c",&opcao); /* coloque o caractere de controle '%*c' para descartar o enter da entrada */ printf("digite o primeiro numero\n"); scanf("%f%*c", &numero1); printf("digite o segundo numero\n"); scanf("%f%*c", &numero2); calcula(numero1, numero2, opcao); getchar(); /* utilize getchar ao invés de system("pause") */ return 0; } void calcula(float numero1, float numero2, char opcao) { float resultado = 0; if(opcao == '+') { resultado=numero1+numero2; } else if(opcao == '-') { resultado=numero1-numero2; } else if(opcao == '*') { resultado=numero1-numero2; } else if(opcao == '/') { resultado=numero1/numero2; } printf("%0.2f %c %0.2f eh igual a: %0.2f\n", numero1, opcao, numero2, resultado); } E um exemplo de brinde para gastar um pouco de fosfato do cérebro
  20. foi o que eu entendi, se era para fazer de outra maneira o enunciado não deixou claro. Aqui você não está usando uma variável, é o correto seria comparar se está entre a faixa dessa maneira enquanto (numero < 1) ou (numero > 10) faca Exemplo completo Algoritmo "Faixa" var numero: inteiro inicio numero <- 0 enquanto (numero < 1) ou (numero > 10) faca escreva("Digite um numero entre 1 e 10") leia(numero) se (numero < 1) ou (numero > 10) entao escreva("Numero fora da faixa") fimSe fimEnquanto escreva("O numero esta na faixa") escreva("O programa sera encerrado") fimAlgoritmo
  21. @xisxisde Eu baixei aqui o visualG e (nunca programei nisso, mas...) o certo seria você colocar a mensagem depois do comando enquanto enquanto ... faca // O algoritmo vai aqui fimEnquanto escreva("Fim dos calculos") Eu fiz um exemplo aqui algoritmo "somaValores" var n1, n2, soma: real opcao: caractere inicio // Inicia a variavel opção opcao <- "s" enquanto opcao = "s" faca // Pede as informações para o úsuario escreva("Digite um numero") leia(n1) escreva("Digite outro numero") leia(n2) // Soma os numeros soma <- n1+n2 // Mostra o resultado escreva("A soma de ", n1," com ", n2," e igual a ", soma) // Pergunta se o úsuario que repetir o algoritomo escreva("Quer ir novamente S/N") leia(opcao) fimEnquanto // Encerra o algoritmo escreva("fim dos calculos") fimAlgoritmo Ele funcionou aqui no visualG 3.0.7 mas eu estou no linux e tudo ficou meio esquisito
  22. Eu tenho esse utilitário que eu fiz aqui faz um tempo, não sei se ajuda. para utilizá-lo você faz dessa maneira especifica a linha com -l e -s para especificar o que vai ser substituído. line -l 80 -s "host all all 0.0.0.0/0 md5" PG_HBA.conf Executável com o código fonte. line.zip funciona no windows(a partir do vista) e no linux. código fonte.
  23. Aqui multiplo.com.zip Windows e linux.
  24. O primeiro passo é desistir do DevC++, recomendo usar o codeblocks ou esse site aqui https://replit.com/ Em C quando você pede alguma entrada para o scanf ele deixa a tecla enter (carryReturn) no buffer do teclado, para resolver temporariamente isso você pode colocar o caractere de controle para ignorar o enter. scanf("%d%*c"); Com isso ele só vai pegar o numero decimal (com o %d) e descartar a próxima tecla (com o %*c). para pegar strings você tem que usar fgets() Exemplo de como pegar a entrada do teclado #include <stdio.h> #include <string.h> #define T_NOME 60 #define T_TURMA 5 #define Q_NOTAS 4 #define Q_ALUNOS 5 struct informacao_aluno { char nome[T_NOME]; int idade; char turma[T_TURMA]; float notas[Q_NOTAS]; }; int main(void) { int contador1, contador2; struct informacao_aluno alunos[Q_ALUNOS]; /* Pega as informações dos alunos */ for (contador1 = 0; contador1 < Q_ALUNOS; contador1++) { puts("Digite o nome do aluno"); fgets(alunos[contador1].nome, T_NOME, stdin); puts("Digite a idade do aluno"); scanf("%d%*c", &alunos[contador1].idade); puts("Digite a turma do aluno"); fgets(alunos[contador1].turma, T_TURMA, stdin); printf("Digite as %d notas do aluno\n", Q_NOTAS); for (contador2 = 0; contador2 < Q_NOTAS; contador2++) { printf("Nota[%d]:", contador2+1); scanf("%f%*c", &alunos[contador1].notas[contador2]); } } /* Mostra as informações de cada aluno */ for (contador1 = 0; contador1 < Q_ALUNOS; contador1++) { printf("Nome:%s", alunos[contador1].nome); printf("Idade:%d\n", alunos[contador1].idade); printf("Turma:%s", alunos[contador1].turma); for (contador2 = 0; contador2 < Q_NOTAS; contador2++) { printf("Nota[%d]:%.2f\n", contador2+1, alunos[contador1].notas[contador2]); } putchar('\n'); /* Salta uma linha */ } getchar(); return(0); }
  25. Esse seu algorítimo funciona? Pelo o que eu aprendi na 3° serie, você soma todas as notas e divide pela quantidade de notas. https://mundoeducacao.uol.com.br/matematica/media-aritmetica.htm Em C seria assim media = (aluno[0].nota[0]+aluno[0].nota[1]+aluno[0].nota[2]+aluno[0].nota[3])/4; Mas é claro que seria melhor fazer isso com um laço for por exemplo.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...