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

Duvida c / c++

Discussão em 'Programação' iniciada por havefaithinme, 17 de Março de 2013. (Respostas: 3; Visualizações: 569)

  1. Boas, eu estou a estudar eng informática e ainda sou um pouco verde no assunto.. Alguem me podia ajudar a resolver uma questao aula para avaliaçao?

    Obrigado pela atençao de todos aqueles que se disponibilizarem [​IMG]
    Um abraço a todos!

    A questão é a seguinte:


    Todos sabemos que algumas frações não têm uma representação finita com a notação decimal habitual. Por exemplo, 1/3 = 0.333... e nunca mais acabam os “3”; 1/7 = 0.142857142857... e este período “142857” repete-se indefinidamente.

    Outras têm uma representação exacta: 1/2 = 0.5; 127/128 = 0.9921875; 3/40 = 0.075.

    Das que não têm representação finita há algumas que têm uma parte inicial não repetitiva a que se segue a tal parte repetitiva, periódica. Por exemplo, 8/15 = 0.5333... Neste caso a parte inicial é “5” e a parte repetitiva é “3”. Outro exemplo: 19/44 = 0.43181818... Ou seja, a parte fixa é “43” e a parte repetitiva é “18”. Por outro lado, na verdade, as que têm representação finita têm também representação infinita periódica, só que a parte repetitiva é “0”. Por exemplo 1/4 = 0.25000…

    Podemos pois generalizar, dizendo que qualquer fração própria (uma fração própria é uma fração em que o numerador e o denominador são positivos, sendo o numerador menor do que o denominador) tem uma representação decimal com uma parte não repetitiva, a cabeça, que pode ser vazia, e uma parte repetitiva, a cauda, que nunca é vazia. No caso de 1/3 a cabeça é vazia e a cauda é “3”; no caso de 3/40 a cabeça é “075” e a cauda é “0”; no caso de 19/44 a cabeça é “43” e a cauda é “18”.

    Tarefa
    Escreva um
    programa para calcular a cabeça e a cauda de uma fracção própria determinada pelo seu numerador e pelo seu denominador.

    Input
    O ficheiro de dados tem várias linhas, em número indeterminado. Em cada linha vêm dois números inteiros positivos, A e B. O número A representa o numerador de uma fração e o número B representa o denominador.

    Output
    Nos casos pequenos, em que a cauda tem até 25 algarismos, o programa deve escrever duas linhas para cada fração presente do ficheiro de entrada: na primeira linha vem a cabeça, entre “<” e “>”, e na segunda vem a cauda. Nos casos em que a cauda tem entre 26 e 400 algarismos, a cauda é escrita em linhas sucessivas, cada uma com 25 algarismos (exceto talvez a última, bem entendido). Nos casos em que a cauda tem mais que 400 algarismos, o programa deve escrever os 400 primeiros, em linhas de 25 algarismos, seguidas de uma linha que indica o número de algarismos que falta escrever, entre “(” e “)”.

    Restrições
    Numerador, A: 1 <= A, A <= 10000.

    Denominador B: 1 <= B, B <= 10000, A < B.

    Exemplo 1
    Input
    1 3
    1 7
    1 2
    127 128
    3 40
    8 15
    19 44
    1 61
    Output
    <>
    3
    <>
    142857
    <5>
    0
    <9921875>
    0
    <075>
    0
    <5>
    3
    <43>
    18
    <>
    0163934426229508196721311
    4754098360655737704918032
    7868852459
    Exemplo 2
    Input
    519 8048
    Output
    <0644>
    8807157057654075546719681
    9085487077534791252485089
    4632206759443339960238568
    5884691848906560636182902
    5844930417495029821073558
    6481113320079522862823061
    6302186878727634194831013
    9165009940357852882703777
    3359840954274353876739562
    6242544731610337972166998
    0119284294234592445328031
    8091451292246520874751491
    0536779324055666003976143
    1411530815109343936381709
    7415506958250497017892644
    1351888667992047713717693
    (102)


    Ate agora fiz isto para testar se pelo menos os calculos dao certos e nem isto funciona, a certa altura faz "overflow".

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    #include <assert.h>
    #include <ctype.h>
    void ints_show(int *a, int n)
    {
    int i;
    for (i = 0; i < n; i++)
    printf(" %d", a);
    printf("\n");
    }
    void calculos(int a, int b)
    {
    int i=0;
    int j=10;
    int k=0;
    int calc[100000];
    while(k<5)
    {
    calc=((a*j/b)%10);
    if(calc==calc[i-1] || calc==calc[i-2])
    {
    k++;
    }
    j=j*10;
    i++;

    }
    ints_show(calc, i);
    }


    int main(void)
    {


    calculos(3, 40);
    return 0;
    }
     
  2. nfk

    nfk Power Member

  3. funciona com valores baixos se aumentares ja nao funciona
     
  4. Ninguem consegue ajudar? =\
     

Partilhar esta Página