Ir para conteúdo
Fórum Script Brasil

Jonas de Abreu

Membros
  • Total de itens

    137
  • Registro em

  • Última visita

Tudo que Jonas de Abreu postou

  1. O site http://www.vidageek.net coloca todas as sextas feiras dicas sobre programacao em C. Essas dicas não são destinadas a pessoas que estao comecando a programar em C e sim para aqueles que querem conhecer mais a fundo como C funciona internamente e simulacao de recursos não suportados por C.
  2. No primeiro, para extrair os dois primeiros digitos, voce pode usar /100. Para extrair os dois ultimos, use %100. fatorial voce pode fazer dessa forma: int fat(int n){ if (n == 0) return 1; return n*fat(n-1); } O problema é que fatorial estoura rapidamente int, long long ou qualquer outro tipo predefinido que voce use. Para resolver o seu problema, tente usar um algoritmo construtivo mais ou menos dessa forma: double parcela = x;/*aqui é a sua variavel x*/ double res = 0; int i = 1; while (i < n){ res += parcela; parcela = -((parcela * x * x) / ((2*i) * (2*i + 1)); i++; } res tera o seu resultado. Mas antes de sair usando esse codigo (que eu não compilei), note que pra tranformar a parcela "i" na parcela "i+1" basta multiplicar por x^2 e dividir por 2*i*(2*i + 1), e assim o fatorial vai se formando. edicao:Faltava um i++ no codigo e as duas primeiras variaveis do codigo acima eram int. não ia funcionar.
  3. Mesmo assim é melhor usar "true" por dois motivos: 1-é mais claro do que ler return 1 2-é mais portavel entre compiladores. True é um valor padrão para verdadeiro, mas 1 não é. Embora funcione na maioria dos compiladores, voce pode ter azar de pegar um que não funcione.
  4. poste a parte do seu codigo que faz as alocacoes de memoria e atribuicoes pra gente ter algo para analizar. Fica bem mais facil de encontrar o erro se tivermos o codigo. O que esta acontecendo parece ser um "overlap" dos seus vetores, o que indica que a alocacao não esta sendo feita de forma correta (não costuma ser um problema do malloc e sim da forma como esta sendo usado). Geralmente isso acontece por alocar tamanhos errados para o vetor, mas pelo que voce disse pode não ser isso. E Kandrade, a sintaxe do malloc não esta errada, por que como em C os tipos primitivos são fracos, atribuicoes desse tipo não são erros. O padrão ANSI de C aceita, mas gera um warning. Mesmo assim a atribuicao é feita de forma correta.
  5. Jonas de Abreu

    Linguagem C

    O arquivo é tratado como um vetor, tanto que o fseek apenas percorre o vetor em uma dimensao (para frente e para tras). não entendi o que voce quis dizer com caracteres impares e pares. Voce quer inverter todos os bits do arquivo? Quanto a mostrar o endereco fisico de uma parte do arquivo com um programa, acho que voce vai ter que estudar arquitetura de sistemas operacionais para resolver o problema, pois o suporte que C da para abrir um arquivo mascara muita coisa e esse tipo de informacao é de dificil acesso. Tente estudar a implementacao das funcoes fread, fopen e fwrite.
  6. Na minha opniao as duas implementacoes estao corretas. Se voce passa um ponteiro para uma variavel ou o valor dela depende do que voce quer fazer com essa variavel. Talvez digam isso porque no seu caso, a sua funcao não precisaria ter direito de manipular o valor dos dados e deveria simplesmente imprimi-los. Mas muitas vezes voce precisa passar um ponteiro para um inteiro, para, por exemplo, controlar o resultado final de uma funcao recursiva. O proprio scanf recebe ponteiros para int pois de outra forma não é possivel que ele carregue suas variaveis.
  7. Existem diversas libs de criptografia para C. Procure por beeCrypt ou libgcrypt no google. Se voce abrir o codigo fonte do Linux, tambem vai encontrar varias implementacoes de funcoes de criptografia, incluindo hash MD5. Baixe-as, instale-as e boa sorte. So pra adicionar algo, parece que uma professora chinesa conseguiu quebrar recentemente o hash MD5 para ateh 5 ciclos. Se não tiver lido ainda o trabalho dela, va atras que vale a pena.
  8. Tenta atribuir esse offset para um ponteiro do mesmo tipo que os dados do offset. Depois imprime o ponteiro com um * na frente, para imprimir o valor apontado e não o ponteiro. Mas é estranho usar enderecamento fixo em C. é mais facil usar o operador & para obter o endereco da variavel.
  9. Jonas de Abreu

    Arredondamento

    Tenta usar double ao invez de float (para imprimir double voce usa %lf). O float perde precisao muito rapido (voce pode confiar (nem sempre) em apenas 4 ou 5 digitos depois do ponto). Isso parece ser um desses casos de perda de precisao.
  10. Jonas de Abreu

    Função Fread

    Um arquivo não é terminado por barra-zero e sim por EOF. Quando o fread le o EOF ele ve que chegou ao fim do arquivo e falha na leitura, não atualizando a sua variavel ch. Por isso parece que ele esta lendo a letra 'a' duas vezes. Voce pode checar se o fread falhou verificando se o valor devolvido por ele é igual ao numero de blocos que voce mandou ele ler.
  11. Jonas de Abreu

    Ponteiro

    não sei se entendi direito o seu problema. Voce quer que a primeira palavra da frase apareca na primeira linha e o resto da frase na segunda? Se for isso, da pra fazer dessa forma: #include <stdio.h> #define MAX 100/*precisa ser maior pra pegar uma frase inteira*/ int main(){ char *aux;/*vamos usar pra encontrar o fim da primeira palavra*/ /*seu codigo ate depois do fgets vem aqui*/ aux = frase; /*por algum motivo, o forum esconde o caractere de fim de string que é o barra-invertida0. Quando for usar esse codigo, tire os espacos entre o barra-invertida e o zero*/ while (*aux != ' ' && *aux != '\ 0') aux++;/*estou percorrendo o vetor frase procurando um espaco ou o fim (\ 0)*/ if (*aux == ' ') { *aux = '\ 0'; aux++; } printf("%s\n", frase); printf("%s\n", aux); O problema dessa solucao é que ela não preserva a informacao do vetor inicial (frase). Pra preservar, voce pode usar um vetor auxiliar e copiar a frase original para ele com a funcao strcpy, da biblioteca strings.h
  12. Jonas de Abreu

    Programa Em C++

    No fim do while, voce pode colocar uma pergunta como "Deseja calcular mais algum conta da casa? [s/n]" e ler um char. Esse char voce checa com um 'if' e se for 'n', voce da um break no laco. Algo mais ou menos assim: /*voce precisa declarar este char*/ char res; while (true){ /*as suas linhas de calculo da conta vao aqui*/ cout<<"Deseja calcular mais algum conta da casa? [s/n]"; cin>>res; if (res == n) break; }
×
×
  • Criar Novo...