Ir ao conteúdo
  • Cadastre-se

Jessé P. de Melo

Membro Pleno
  • Posts

    94
  • Cadastrado em

  • Última visita

Tudo que Jessé P. de Melo postou

  1. Boa noite. Sou novo na programação C. Essa é a primeira vez que estou realizando manipulação de ponteiros e memoria dinâmica. Este é um exercício que pediu para converter um numero inteiro para números binários. Segue o código comentado: #include<stdio.h> #include<stdlib.h> void main (void){ int binario (int x); // Prototipo função int v1=522; // valor decimal printf("O numero %i em binario e' %s",v1,binario(v1)); // chamo a função que realiza conversão. } int binario (int x){ int r; // Variavel para retorno de inteiro char *p; // ponteiro para char *p=0; //inicializando ponteiro para lugar nenhum int count=0;// variavel para memoria dinamica while(x<0){ // Só faz algo se o valor for maior que 0 if ((x%2)>0){ //Se a divisão por 2 tiver resto x=x%2; //Atribui o resto ao valor de x count++; p=(int*)malloc(count*sizeof(char)); //Aloca memoria de acordo com a necessidade p[count-1] = '1'; // A contagem começou antes de usar posição 0 do vetor/ponteiro , então coloco -1 uma posição atrás } else{ //Se a divisão por 2 não tiver resto count++; p=(int*)malloc(count*sizeof(char));//Aloca memoria de acordo com a necessidade p[count-1] = '0'; } } p[count+1]='\0'; //coloco '\0' para finalizar a string r=atoi(*p); // converto o valor da string para inteiro para imprimir free(p); //libero a memoria do ponteiro. return(r); //retorno o valor inteiro }
  2. Será um programa que converte a hora atual em segundos, eu sei fazer os cálculos porém não estou conseguindo converte.O código abaixo esta com a logica certa porém a conversão não esta acontecendo como eu quero. Não procuro outro script, quero saber porque esse não funciona e como faço para funcionar. #include<stdio.h> #include<stdlib.h> void main (void){ char horario[8]; // string que recebe a hora complera char hora[3]; // variaveis que recebem a hora em string char minutos[3]; char segundos[3]; int hora1; // variaveis que recebem a hora convertidas em int int minutos1; int segundos1; printf("Digite uma hora no formato HH-MM-SS "); scanf("%s",&horario); // Pega horario do teclado hora[0]=horario[0]; // Preenche variaveis separadas da hora, min e seg hora[1]=horario[1]; hora[2]='\0'; minutos[0]=horario[3]; minutos[1]=horario[4]; minutos[2]='\0'; segundos[0]=horario[6]; segundos[1]=horario[7]; segundos[2]='\0'; hora1=(int*)hora; // converte a string hora em int, e atribui valores. Mas não esta fazendo o esperado. minutos1=(int*)minutos; segundos1=(int*)segundos; printf("Hora = %s, Minutos = %s, Segundos = %s", hora, minutos, segundos); printf("\nHora = %i, Minutos = %i, Segundos = %i", hora1, minutos1, segundos1); //Onde imprime um numero não esperado. } adicionado 39 minutos depois Casting funciona somente para variáveis escalares. Substitui pelo atoi() e funcionou.
  3. Eu estou relembrado desculpe pelos erros. Mais agora a variavel esta retornando o valor #IND00. Alguem sabe me dizer o motivo?
  4. Boa Tarde, Estou fazendo um exercicio que é necessário pegar valor 3 valores e realizar o calculo de báskara. Criei 3 valores inteiros e 2 float para fazer os cálculos. Programei e compilei e não deu erro, no entanto a variaveis float não recebe valores. Por que está acontecendo isso? Segue código. #include<stdio.h> #include<stdlib.h> #include<math.h> void main(){ int a, b, c; float raiz_positiva, raiz_negativa; printf("Digite o valor de A: "); getche(a); printf("\n"); printf("Digite o valor de B: "); getche(b); printf("\n"); printf("Digite o valor de C: "); getche(c); printf("\n"); raiz_positiva=((-b+sqrt(pow(b,2)-(4*a*c)))/(2*a)); raiz_negativa=((-b-sqrt(pow(b,2)-(4*a*c)))/(2*a)); printf("raiz_positiva %f\n",&raiz_positiva); printf("raiz_negativa %f\n",&raiz_negativa); }
  5. Olá. Faz algum tempo que não programo em linguagem C, e resolvi exercitar um pouco. porém acho esqueci como se trabalha com strings. Quero montar um programa bem simples. O usuário inseri uma frase de ate 200 caracteres, logo em seguida digita a quantidade de caracteres que deseja ter por linha. Não quero que o programa quebre no meio da frase. Montei esse Script porém está dando erro. Desde já sou grato. #include <stdio.h> int main(void) { char frase[200]; // Variavel do texto int tam,count,i; //variaveis para calculos printf("Iniciou o programa para separa uma frase em frases com valores predefinidos, sem cortar palavras\n\n"); printf("Digite uma frase, ao final digite enter\n"); gets(frase); // Pega texto do teclado ate digitar enter e joga na variavel frase fflush(stdin); // limpa memoria printf("Qual o tamanho maximo que a frase pode ter ?\n"); scanf("%d",&tam);// Pega variavel do tamanho count=tam; // contador inicia igual tam for( i=0;i<200;i++){ // Percorre o texto if (i>=count){ // Se o lugar onde o vetor esta for maior ou igual ao contador if(frase[i]!= ' '){} //onde da erro *** enquanto o indice onde for diverente de espaço não faz nada else{ frase[i]='\n'; // Se passar do while é branco, logo pode ter quebra de linha. count+=tam; // Contador assume o valor dele mais ele. Para proxima linha ter no min o tam dele } } } for(i=0;i<200;i++){ // percorre o vetor printf("%s",frase[i]); // Imprime os caracteres do verto 1 a 1 } return 0; }
  6. Olá, não entendo muito sobre o assunto mais minha primeira experiencia com essas nova tecnologia foi com o fone Longitech G930. E é bem recente os fones chegaram ontem. Quando fiz um pesquisa encontrei muito poucos fones surround 7.1 reais, em sua grande maioria são stereos (2.0) emulando via software e hardware um 7.1 o resultado é perceptível, mas não é tudo isso que divulgam não. Seria como se utilizasse o efeitos sonoros do windows só que bem mais otimizado. Resumindo nesses fones 7.1 se ouve o som de maneira mais distribuída vem de todos os lados, e tipo o grave e agudo vem junto porém só vai saber quando ouvir, não da pra explicar. No Longitech G930 tem uma chave seletora e tem um programa de PC. Se tiver interesse tenho um para vender. Comprei um para mim e outro para um conhecido porque estava abaixo do custo (um headphone era ponta de estoque e outro de vitrine), porém tomei calote. O preço é R$ 350,00 e o Headphone é sem fio.
  7. Muito obrigado pelo link. Me expressei mal, não quero baixar tudo de uma vez sem o laço. adicionado 2 minutos depois
  8. Muito obrigado DIF, Você saberia me indicar algum livro ou site que tenha a documentação da linguagem do Ms-dos ? De preferência em português ou espanhol. A maioria das coisas que acho ta em inglês e é superficial. Voltando a falar do script, minha intenção é criar um .bat que baixe tudo sem precisar de interação, quando conseguir vou utilizar o agendador de tarefas para automatizar tudo. Há a possibilidade de colocar o valor final do FOR com EOF(-1), "final de arquivo", ou então para parar quando der erro? Porque o numero de paginas do PDF varia de dia para dia. Ex: [...] FOR /L %%A IN (100,1,EOF) [...] Também possuo um pouco de conhecimento em linguagem C, tu acredita que seria mais simples desenvolver a solução em "C"? Eu pensei que não porque teria que chamar varias bibliotecas, o script ficaria maior e mais lento. porém gostaria de segundas opiniões.
  9. Olá. Alguém poderia me ajudar a criar um script que realizasse o download do site http://diariooficial.imprensaoficial.com.br/doflash/prototipo/2017/Setembro/06/exec1/pdf/pg_0001.pdf, para cada pagina o final link muda ".../pg_0002.pdf ", ".../pg_0003.pdf ". Logo precisarei de um laço com uma variável de controle, a cada repetição incrementaria +1 e a condição de sair seria quando desse erro, ou EOF não sei como MSDos funciona, e nem tenho pratica. Andei pesquisando e o wget resolve o meu problema porém não consigo construir a estrutura. Wget http://diariooficial.imprensaoficial.com.br/doflash/prototipo/2017/Setembro/06/exec1/pdf/pg_0001.pdf Obrigado pela atenção.
  10. Seguinte sou novato em programação em linguagem c. Mais acredito que seja possível sim, desde que sejam programas diferentes, um programa sera para comunicação e gravação de informações em um txt. E outro programa para ler o txt e transformar em gráfico. E eu recomendaria um raspberry no lugar do arduino.
  11. Abaixo esta desse trecho de código tem um chamado "//para verificação manual dos espaços" ele esta funcionando. Ele mostra os índices certos, isso é, o local onde tem o espaço. Ou seja a verificação esta certa o problema está na hora de atribuir o valor do índice (Y). Eu quero que o vetor n_da_linha guarde a posição dos espaços. Logo: n_da_linha[n] = texto[y] ou n_da_linha[n]=y Estou enviando os arquivos de saída em entrada desse script para facilitar o entendimento, eles tem que estar na mesma pasta que o código estiver por que coloquei o caminho relativo, se retirar todo o comentário do código ele funciona, menos a parte que conta o vetor de espaços. in.txt out.txt
  12. Nesse mesmo contexto por que esse código não preenche o vetor de maneira correta? Esta retornando o valor 166 em todos os índices.A parte responsável por preencher começa na linha 47, e esta comentada como //preenchendo o vetor n_da_linha com localização dos espaços. #include<stdio.h> #include<stdlib.h> #include<locale.h> int main(){ setlocale(LC_ALL,""); FILE *in; in = fopen("in.txt","r"); if (in == NULL){ printf("Erro de abertura\n"); system("pause"); exit(1);} int num=0, x=0, total_lido=0, y=0, n=1, i=0, ind_ini=0, ind_fin=0, tam=0, tam2=0; char texto[166]; //leu o numero da primeira linha fscanf(in,"%i",&num); printf("%i",num); //leu o texto fread(texto,sizeof(char),166,in); //substituiu todos os espaços por quebras de linhas, conta os espaços e salva em n for (y=0;y<166;y++){ if (texto[y]==' '){ texto[y]='\n'; n++; }} //cria vetor para armazenar a localização dos espaços int n_da_linha[n]; //setando posição zero para percorrer todos os indices n=0; //preenchendo o vetor n_da_linha com localização dos espaços for (y=0;y<166;y++){ if (texto[y]=='\n'){ n_da_linha[n]=texto[y]; n++; } } //para verificação manual dos espaços /*printf("\n"); for (y=0;y<166;y++){ if (texto[y]=='\n'){ printf("\nExiste quebra de linha no índice: %i",y); } } printf("\n"); y=0;*/ // Compara as posições de um indice de espaços com seu posterior se o resultado for menor que o numero da 1ªlinha substitui a quebra de linha por espaço. /*for (y=1;y<n+1;y++){ ind_ini=2; ind_fin=ind_ini+1; tam =&n_da_linha[ind_fin]-&n_da_linha[ind_ini]; tam2=(&n_da_linha[ind_fin]-&n_da_linha[ind_ini])+(&n_da_linha[ind_fin+2]-&n_da_linha[ind_ini+2]); if (tam > num){ ind_ini++;} if (tam2 < num){ n_da_linha[ind_fin]==' '; ind_ini++; } } printf("%s",texto); printf("\n\nO texto possui %i palavras",n); FILE *out=fopen("out.txt","w"); if (out==NULL){ printf("Erro na abertura\n"); system("pause"); exit(1); } fprintf(out,"%s",texto); printf("\n\nConteudo escrito no arquivo out.txt"); */ fclose(in); //fclose(out); getchar(); return 0; }
  13. Surgiu outra duvida, por que a parte "// Compara as posições de um índice de espaços com seu posterior..." não esta funcionando. A logica é a seguinte eu pego o vetor com a localização de espaços e comparo um índice pelo seu anterior, dessa forma consigo saber o tamanho da palavra, começo pelo índice numero 2, já que o 0 é o numero inteiro e o 1 é o \n. Se a resultado da comparação entre os índices for maior que o NUM só passo para próxima comparação, mudando a posição do ind_ini. Se for menor comparo um índice pelo seu anterior,e o índice+2 a frente pelo seu anterior+2 a frente (tamanho da próxima palavra) se a soma da subtração das duas comparações for menor que o NUM coloco um espaço no lugar do ultimo índice da primeira comparação, assim as duas linhas deveriam se unir. Sei que ficou meio confuso. A parte responsável por esse processamento começa na linha 55. #include<stdio.h> #include<stdlib.h> #include<locale.h> int main(){ setlocale(LC_ALL,""); FILE *in; in = fopen("in.txt","r"); if (in == NULL){ printf("Erro de abertura\n"); system("pause"); exit(1);} int num=0, x=0, total_lido=0, y=0, n=1, i=0, ind_ini=0, ind_fin=0, tam=0, tam2=0; char texto[166]; //leu o numero da primeira linha fscanf(in,"%i",&num); printf("%i",num); //leu o texto fread(texto,sizeof(char),166,in); //substituiu todos os espaços por quebras de linhas, conta os espaços e salva em n for (y=0;y<166;y++){ if (texto[y]==' '){ texto[y]='\n'; n++; }} //cria vetor para armazenar a localização dos espaços int n_da_linha[n]; //para verificação manual dos espaços /*printf("\n"); for (y=0;y<166;y++){ if (texto[y]=='\n'){ printf("\nExiste quebra de linha no índice: %i",y); } } printf("\n"); y=0;*/ // Compara as posições de um indice de espaços com seu posterior se o resultado for menor que o numero da 1ªlinha substitui a quebra de linha por espaço. for (y=1;y<n+1;y++){ ind_ini=2; ind_fin=ind_ini+1; tam =&n_da_linha[ind_fin]-&n_da_linha[ind_ini]; tam2=(&n_da_linha[ind_fin]-&n_da_linha[ind_ini])+(&n_da_linha[ind_fin+2]-&n_da_linha[ind_ini+2]); if (tam > num){ ind_ini++;} if (tam2 < num){ n_da_linha[ind_fin]==' '; ind_ini++; } } printf("%s",texto); printf("\n\nO texto possui %i palavras",n); FILE *out=fopen("out.txt","w"); if (out==NULL){ printf("Erro na abertura\n"); system("pause"); exit(1); } fprintf(out,"%s",texto); printf("\n\nConteudo escrito no arquivo out.txt"); fclose(in); fclose(out); getchar(); return 0; } adicionado 8 minutos depois Percebi o erro. Só percebi depois que enviei o post, criei o vetor para armazenar o espaço mais não o preenchi.
  14. Muitissimo obrigado. Não tenho como agradecer, substitui um por fprintf e outro por fscanf, resolveu o problema. Sei que não é bom utilizar o fgets fprintf fscanf e fwrite no mesmo código mas sou novato e foi a solução que encontrei. Vou continuar o exercício e assim que acabar posto aqui. adicionado 31 minutos depois Alguma sugestão de como eu programar para calcular o numero de caracteres? Assim o programa ficaria mais responsivo ja que não haveria necessidade de ficar indo lá toda hora para alterar o valor. Estou falando da variável char txt[168]
  15. O programa funciona... Só que o numero 5 não aparece no txt do bloco de notas e o '/n' também fica estranho.
  16. Boa tarde sou novo no fórum, alias essa é meu primeiro tópico, também sou novo em programação. Estou fazendo esse exercício. Dado um arquivo (obrigatoriamente chamado in.txt) contendo em sua primeira linha um inteiro positivo M maior que 0 e em sua segunda linha um texto, realizar a quebra de linha do texto sem quebrar palavras, considerando que a linha pode ter no máximo M caracteres. O texto se encontra inteiro em uma linha do arquivo. O texto pode ser arbitrariamente longo, mas sempre terá pelo menos uma palavra. A resposta deve ser escrita em um arquivo texto obrigatoriamente denominado out.txt. Escrevi no txt por programação. #include<stdio.h> #include<stdlib.h> #include<locale.h> int main(){ setlocale(LC_ALL,""); FILE *in; in = fopen("in.txt","w"); if (in == NULL){ printf("Erro de abertura\n"); system("pause"); exit(1);} char txt[166] = "\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi semper, est non gravida venenatis, est neque fringilla quam, hendrerit ultrices justo turpis nec augue."; int num = 5; fwrite(&num,sizeof(int),1,in); fwrite(txt,sizeof(char),166,in); printf("\nFIM"); fclose(in); getchar(); return 0; } Depois tentei ler e processar as informações com esse código. #include<stdio.h> #include<stdlib.h> #include<locale.h> int main(){ setlocale(LC_ALL,""); FILE *in; in = fopen("in.txt","r"); if (in == NULL){ printf("Erro de abertura\n"); system("pause"); exit(1);} int num=0, x=0, total_lido=0, y=0, n=1, i=0, ind_ini=0, ind_fin=0, tam=0; char texto[168]; //leu o numero da primeira linha fread(&num,sizeof(int),1,in); printf("%i",&num); //leu o texto fread(texto,sizeof(char),166,in); //substituiu todos os espaços por quebras de linhas e conta palavras for (y=0;y<166;y++){ if (texto[y]==' '){ texto[y]='\n'; n++; }} //cria vetor para armazenar a localização dos espaços int n_da_linha[n]; //para verificação manual dos espaços /*for (y=0;y<166;y++){ if (texto[y]=='\n'){ n_da_linha=texto[y]; printf("\nExiste quebra de linha no índice: %i",y); i++; } i=0; } y=0;*/ // Compara as posições de um indice de espaços com seu posterior se o resultado for menor que o numero da 1ªlinha substitui a quebra de linha por espaço. for (y=1;y<n+1;y++){ ind_ini=2; ind_fin=ind_ini+1; if (n_da_linha[ind_fin]-n_da_linha[ind_ini]<x) n_da_linha[ind_ini]==' '; ind_ini++; } printf("\n%s",texto); printf("\n%i palavras",n); fclose(in); getchar(); return 0; } O problema é que está retornado o valor 6356688 ou 1885932085 quando eu estava esperando o 5. Alguma sugestão de onde está o erro?

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!