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

[C]duvida

Discussão em 'Programação' iniciada por Ruanes, 21 de Junho de 2008. (Respostas: 16; Visualizações: 898)

  1. Ruanes

    Ruanes Power Member

    Oi,

    tou a fazer um programa que recebe os dados de um usuario. A certa altura pesso o ano de nascimento e queria fazer o seguinte:
    Depois do usuario digitar o ano queria isolar os quatro algarismos e de seguida soma-los.

    O problema é que não sei como fazer isso. Estava a pensar em tornar a variavel inteira numa string e de seguida dividir essa variavel noutras quatro variaveis inteiras. Sou novo nisto (em C e em algoritmos) por isso nao estou bem a ver como e que vou fazer.

    P.S. Agradecia que não me dessem o codigo todo, apenas algumas intruões.
     
  2. Precisas de um ciclo em que vais dividindo o número por 10. Depois, para isolares o último dígito usas o operador '%'.
     
  3. Ruanes

    Ruanes Power Member

    como assim nao estou a perceber
     
  4. h4des

    h4des Power Member

    scanf("%d%d%d%d",&a,&b,&c,&d);
    soma = a+b+c+d;

    Deve haver outra forma de fazer isso, mas assim e' capaz de funcionar.
     
  5. TheRieper

    TheRieper Power Member

    podes fazer uma string como tinhas dito e pões um ciclo para a correr. por exemplo.

    Código:
    for(i=1;i<=4;i++)
    {soma+=ano[i];};
    se é só para somar serve perfeitamente. não sei se tem erros de lógica, já nao mexo a algum tempo em c e c++. lol. mas acho que tá ok.

    Se tiveres mais duvidas posta

    Abraço
     
    Última edição pelo moderador: 21 de Junho de 2008
  6. A minha ideia era usar a divisão por 10 para extrair o último dígito.

    Usando uma string é preciso usar o atoi para converter os caracteres em inteiros.
     
  7. Vou tentar fazer uma coisa simples para que percebas.

    Vou assumir que a tua variavel ano que é do tipo inteiro com valor 2008.

    Se dividires a tua variavel ano por 1000 vais obter o resultado 2 pois o resto é eliminado, ou seja:

    ano/1000=2

    agora so te faltam os 3 outros digitos que ate ficaram no resto da conta anterior mas para obteres o resto as para isso precisas do operador % o que fica:

    ano%1000=8

    se dividires o anterior por 100 vais ter 0 que é o teu segundo algarismo e assim sucessivamente depois de teres 4 variaveis com os 4 numeros é so somar.

    Como querias uma ajuda e nao a resolução inteira acho que me vou ficar por aqui e deixar-te explorar. Caso não te safes é só perguntares.

    Nao te ponhas a converter inteiros em chars e chars em inteiros que isso é so para quem ja percebe pelo menos 1 bocado disto.
     
  8. MPalhas

    MPalhas Power Member

    Mr. Brightside, algo como isto?

    Código:
    for (x=0; x<4; x++) {
       algarismo[x]= ano % 10;
       ano = ano/10;
    }
    (não foi testado)
     
  9. MPalhas seguindo o teu prog para o ano 2008:

    algarismo[0]=8;

    algarismo[1]=0;

    algarismo[2]=0;

    algarismo[3]=0;

    Se fiz bem as contas. . .

    Se fizeres sempre %10 nunca vais achar o 2. . .

    edit agora sim
     
    Última edição: 21 de Junho de 2008
  10. MPalhas

    MPalhas Power Member

    primeira passagem:
    2008 % 10 = 8
    ano = 200

    segunda passagem:
    200 % 10 = 0
    ano = 20

    terceira passagem:
    20 % 10 = 0
    ano = 2

    quarta passage:
    2 % 10 = 2
    ano = 0

    parece-me correcto, mas como disse não foi testado

    EDIT: não tinha visto o teu edit:p
     
  11. Ruanes

    Ruanes Power Member

    MPalhas, acho que na condição do for é 3 e não 4 porque são 4 digitos: 0,1,2,3.
     
  12. c1t1z3n

    c1t1z3n Power Member

    o for está correcto, para os digitos 0,1,2,3 queres todos os valores menores que 4 (o 4 só seria includo se se pusesse <=4 ou <5)
     
  13. Ruanes

    Ruanes Power Member

    já esperimentei o codigo do mpalhas e funciona, o problema é que quando vou a executar a soma funciona mas logo a seguir da-me erro e o programa feixa(aparece aquilo do enviar relatorio de erros).

    o codigo de soma que fiz e este:
    Código:
    algarismo[0]+algarismo[1]+algarismo[2]+algarismo[3]
    P.S. O meu compilador tambem da um aviso a dizer que a conversão pode perder digitos importantes.
     
  14. TheRieper

    TheRieper Power Member

    Yap. tens razão. esqueci-me completamente. mas tal como disse já nao pego em c e c++ a sério a algum tempo já. lol.
    Obrigado pela correcção

    Abraço
     
  15. MPalhas

    MPalhas Power Member


    vê se tens as variaveis bem declaradas. algarismo tem que ser:
    int algarismo[4];

    põe também um getchar ou qualquer coisa que pare o programa logo a seguir a fazer a soma. pode ser que o erro esteja no código que vem a seguir e não na soma. eu testei e somou correctamente
     
  16. Ruanes

    Ruanes Power Member

    pois, esqueci-me disso.
     
  17. zgruli

    zgruli Power Member

    Provavelmente já venho tarde, mas se calhar era mais simples fazer com um while:
    Código:
    int algarismo=0;
    while(ano != 0){
         algarismo=algarismo+(ano%10);
         ano=ano/10;
    }
    
    Qualquer coisa tipo isto, não sei se tem alguma falha. Desta forma funcionava também quando o ano tivesse menos (ou mais :)) de 4 algarismos.
     
    Última edição: 24 de Junho de 2008

Partilhar esta Página