1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Principiante em C

Discussão em 'Programação' iniciada por The Dark Night, 28 de Maio de 2012. (Respostas: 46; Visualizações: 2134)

  1. Ola galera, por favor me ajudem nessa questão:

    Saiba que o valor aproximado da raiz quadrada de um número real N qualquer pode ser calculado tão precisamente quanto se queira conforme segue:
    R0 = N; R1 = (R0 + N / R0) / 2; R2 = (R1 + N / R1) / 2; R3 = (R2 + N / R2) / 2; …
    Em outras palavras, o primeiro termo da seqüência vale N; todos os demais termos podem ser obtidos pela soma do termo anterior da seqüência com N dividido pelo termo anterior da seqüência.
    Faça um programa em C que solicita a digitação de um número real, calcula pelo método acima exposto sua raiz quadrada, escrevendo-a na tela.
    Naturalmente não poderemos calcular todos os infinitos termos da série acima. Seu programa deverá limitar-se aos 1000 primeiro termos. :P :|

    Obrigado gente.
     
  2. dagas46

    dagas46 Power Member

    Ajudamos sim mas primeiro tens de dizer qual a tua dúvida
     
  3. Estou com dúvida em começar o exercício, entender a lógica.
     
  4. Eu gostaria do código.
     
  5. dagas46

    dagas46 Power Member

    Aqui ninguém faz código para outras pessoas. Se quiseres tentar fazer, estamos aqui para ajudar, se não queres fazer nem vale a pena vires aqui pedir código porque ninguém te vai dar. Já te dei uma ajuda ao dar o link com a lógica bem explicada. Isso é um programa bem simples.
     
  6. Como eu disse sou principiante e estou disposto a aprender, olha o que eu tentei fazer e não rodou.

    int main()
    {
    float R, N;

    printf("Por favor digite um numero real: ");
    fflush(stdout);

    scanf("%f", &N);
    fflush(stdin);

    R = N;
    for (i=0; i<1000, R>0; i++)

    R = (R + N/R) / 2;
    printf("\nRaiz de %f = %f", N, R);
    fflush(stdout);

    return 0;
    }
     
  7. dagas46

    dagas46 Power Member

    Esse programa está quase quase a funcionar. Só duas coisas.

    1 - Não declaraste a variável i

    2 - No for, na condição de paragem basta i<1000

    Como o que fizeste está quase correcto deixo aqui um feito por mim

    Código:
    [COLOR=#7f4726]#include [COLOR=#e20300]<stdio.h>[/COLOR][/COLOR]
    
    
    [COLOR=#7f4726]#define LIMITE [COLOR=#3d00db]1001[/COLOR][/COLOR]
    
    
    [COLOR=#cc00a2]float[/COLOR] raiz([COLOR=#cc00a2]int[/COLOR] numero){
        
        [COLOR=#cc00a2]int[/COLOR] indice = [COLOR=#3d00db]0[/COLOR];
        [COLOR=#cc00a2]float[/COLOR] aux[LIMITE];
            
        aux[indice]=numero;
        printf([COLOR=#e20300]"R0=%d\n"[/COLOR], numero);
        [COLOR=#cc00a2]for[/COLOR](indice = [COLOR=#3d00db]1[/COLOR]; indice < LIMITE; indice++){
            aux[indice]=((aux[indice-[COLOR=#3d00db]1[/COLOR]]+(numero/aux[indice-[COLOR=#3d00db]1[/COLOR]]))/[COLOR=#3d00db]2[/COLOR]);
            printf([COLOR=#e20300]"R%d=%f\n"[/COLOR],indice, aux[indice]);
        }
        
        [COLOR=#cc00a2]return[/COLOR] aux[indice-[COLOR=#3d00db]1[/COLOR]];
    
    
    }
    
    
    [COLOR=#cc00a2]int[/COLOR] main(){
        
        [COLOR=#cc00a2]int[/COLOR] numero;
        [COLOR=#cc00a2]float[/COLOR] calculado;
        
    [COLOR=#e20300][COLOR=#000000]    printf([/COLOR]"Introduza o número para calcular a raiz quadrada\n"[COLOR=#000000]);[/COLOR][/COLOR]
        scanf([COLOR=#e20300]"%d"[/COLOR], &numero);
        
        calculado=raiz(numero);
        
        printf([COLOR=#e20300]"A raiz quadrada de %d é %f\n"[/COLOR], numero, calculado);
        
        [COLOR=#cc00a2]return[/COLOR] [COLOR=#3d00db]0[/COLOR];
    }
    
    Como é óbvio há aí coisas que podem ser comentadas/apagadas, nomeadamente o facto de estar a imprimir todos os R para confirmar os valores
     
    Última edição: 28 de Maio de 2012
  8. E como ficaria com While? Daria pra fazer?
     
  9. dagas46

    dagas46 Power Member

    Claro que sim. Fazer com while ou for é a mesma coisa.

    Código:
    //while
    
    int i;
    i=0;
    while(i<1001){
    //código
    i++;
    }
    
    //for
    int i;
    for(i=0; i<1001; i++){
    //codigo
    }
    
    no for tens a inicialização da variável, a condição da variável e o incremento/decremento

    no while só tens a condição de paragem, como tal, dentro do while tens de incrementar/decrementar a variável e antes do while tens de inicializar a variável
     
  10. acho que com while fica mais enxutão não fica não?

    O que você fez achei meio grande , acho que dá pra simplificar. tornar mais fácil entendimento não dá.

    Obrigado por tudo.
     
  11. dagas46

    dagas46 Power Member

    O que eu fiz está grande porque está a imprimir o valor de R em todos os passos, no entanto isso para o resultado final não interessa portanto pode-se comentar/apagar. Apenas pus para conferir os resultados que estavam a ser calculados em cada passo.

    Podes usar o teu, corrigindo os 2 erros que te apontei fica correcto, além de que está mais compacto. Mas convém começar a aprender a não fazer tudo na main e a ter uma função para cada coisa.

    De nada, alguma dúvida já sabes ;)
     
  12. Boas,
    uma vez que és principiante em C um conceito fácil de explicar, mas não tão fácil de implementar, é o conceito de recursividade. Fica aqui a função raiz() para pensares e entenderes:

    #include <stdio.h>


    float raiz(float Numero, float Raiz, int precisao){

    if (precisao>0)
    Raiz=(Raiz+Numero/Raiz)/2;
    if (precisao==0)
    return Raiz;
    return (raiz(Numero,Raiz,precisao-1));
    }


    main(){
    float N;
    scanf("%f",&N);
    printf("Araiz quadrada de %.2f é %.2f.\n",N,raiz(N,N,1000));
    }

    Cumps,
     
  13. Exatamente o que você fez, uma função, você colocou o int mail no final justamente para rodar essa função.
    Estou começando agora a ver subprogramas.
     
  14. Cara, não entendi bem esse while, 'int i' e ' i=0' são variáveis? qual código que você diz que vai dentro do while?
     
  15. dagas46

    dagas46 Power Member

    Porque é que colocaste i=0 no for no programa que fizeste, sabes explicar?
     
  16. declarei variável i que ja tem valor de 0.
     
  17. dagas46

    dagas46 Power Member

    Tu nem sequer declaraste a variável i. Sabes como funciona um for e que parâmetros tem um for?

    o i=0 antes do while serve precisamente para fazer o mesmo que o i=0 que puseste dentro do for
     
  18. Entendi.
    Eu estou bem no começo e não entendo muito de termos técnicos, aos poucos vou me familiarizando com esses termos e o ambiente.
    É o que eu disse, os códigos acima são de subprogramas, funções, isso aí eu ja não sei.
    Pena que o meu não roda...:(
     
  19. dagas46

    dagas46 Power Member

    Eu já te disse lá em cima o que tens de fazer para pôr o teu a correr
     

Partilhar esta Página