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

algoritmo (pseudo codigo)

Discussão em 'Programação' iniciada por p!nk., 30 de Setembro de 2008. (Respostas: 18; Visualizações: 3823)

  1. p!nk.

    p!nk. Power Member

    boas malta ... fui confrontado com um problema na faculdade, que me deixou a mim, e a toda a malta da turma bastante intrigado ... passo a citar o enunciado!!

    Considere uma data correspondente ao mês e dia do ano corrente fornecida pelo utilizador. Escreva
    um algoritmo que apresente a quantidade de dias que falta para o último dia do ano.


    de notar, que nao podemos usar ciclos do tipo "for" .... apenas podemos usar decisoes para decifrar!! alguem tem uma luzinha a acender na cabeça?! :D:D

    abraços!
     
  2. heeven

    heeven Power Member

    tens de usar as condiçoes para ver os meses que faltam até ao fim do ano, tens de ter vários, pois, tens vários tipos de meses, uns com 28 ou 29 dias, outros com 30, e outros com 31, tens de usar as condições para regular isso, depois outra para ver se é ano bissexto ou normal. Depois tens de através de outra condição ver que mês é a data actual, subtrair até ao fim do mês em questão e depois so tens de somar os os meses que faltam ate ao fim do ano(claro que o que vais somar sao os dias que cada mês tem.)


    Espero ter ajudado, cumprimentos.
     
  3. p!nk.

    p!nk. Power Member

    pois .... mas isso, foi o que eu já pensei!!! mas nao me consigo "transcrever" para o papel ... esse pensamento!!! ...
     
  4. [C4]

    [C4] Power Member

    Dependendo da linguagem que uses pode ser mais ou menos facil.
    Podes converter as duas datas para um timestamp subtrair e converter para dias.
    Por exemplo, os sitemas *nix tratam as datas, creio eu, contando o numero de milisegundos desde uma determinada data inicial. Neste caso, basta fazer a diferenca e dividir por 86400000 para teres os dias.
     
  5. heeven

    heeven Power Member


    tens de meter os dados de entrada com um "write("Escreva a data...", dia, mes, ano)
    Se for mes 4,6 ou 7 entao temos 30 dias, se for 5 ou 8 tens 31 dias, e se for 2 tens 28 ou 29 dias. Se o ano a didivir por 4 der igual a 0 (penso eu, ja nao me lembro muito bem) entao tens um ano bissexto. entao o mesmo 2 tem 29 dias. Depois é so subtraires os dias do mes da data e somares os dias dos outros meses que faltam. Não me parece assim tão difícil, e olha que eu não sou nenhum guru a algoritmia :P olha que no exemplo que te dei não meti os dias dos meses bem. E não te vou fazer o algoritmo, tenta por ti. Se entretanto tiveres dúvidas, escrveves o que já fizeste que alguem ha-de te dar uma mãozinha.

    cumprimentos.
     
  6. tiagopestana

    tiagopestana Power Member

    È ligeiramente mais complicado. Ver: http://en.wikipedia.org/wiki/Leap_year#Algorithm
     
  7. mcog_blaster

    mcog_blaster Power Member

    Algo do genero, apenas com decisoes.
     
    Última edição: 1 de Outubro de 2008
  8. p!nk.

    p!nk. Power Member

    tipo, tenho um pensamento semelhante a esse que tu enuncias-te ... so que nao o estou a conseguir transcrever ... é algo do género:

    Código:
    se(mes = 4 ou 6 ou 9 ou 11)
      dias_rest= (30-dia)+(3 x 30) senao
         se (mes = 1 ou 3 ou 5 ou 7 ou 8 ou 10 ou 12)
            dias_rest=(31-dia)+6 x30 
    e depois, falta-me outra condiçao para o fevereiro, e outra linha de codigo pa calcular entao os dias restantes :/
     
  9. Baderous

    Baderous Banido

    Para determinar a diferença entre 2 datas não precisas de andar com essas coisas todas:

    Código:
    public static String calcula(GregorianCalendar inicio, GregorianCalendar fim) {
            long totalmilis = fim.getTimeInMillis() - inicio.getTimeInMillis();
            long milis = totalmilis%1000;
            long totalseg = totalmilis/1000; long seg = totalseg%60;
            int totalmin = (int) totalseg/60; int min = totalmin%60;
            int totalhoras = totalmin/60; int horas = totalhoras%60;
            int totaldias = totalhoras/24;
            return totaldias + " dias, " + horas +" horas, "+ min+ " minutos e "+ seg + "," + milis + " segundos.";
        }
    Isto dá a diferença entre 2 datas em dias, horas, minutos e segundos. Basicamente, transforma as 2 datas no tempo correspondente em milissegundos e depois faz a sua diferença. Basta depois calcular o que se quer.
     
  10. samouco

    samouco Power Member


    Isso não é assim tão simples senão:


    Código:
    
    public int GetDaysToEndOfYear(DateTime startdate)
    {
         DateTime endOfYear = new DateTime(startdate,12,31);
         TimeSpan diff = endOfYear - startdate;
         return diff.Days;
    
    } 
    
    

    Provavelmente vais ter que fazer isso sem recorrer a bibliotecas.

    Acho q a maneira é mesmo com 12 if's , um por cada mês.

    Cumps
     
    Última edição: 2 de Outubro de 2008
  11. nsilvio

    nsilvio Power Member

    Código:
    dayOfMonth = 10
    monthOfYear = 2
    year = 2008
    
    isLeap = ((year modulo 4 is 0) and (year modulo 100 is not 0)) or (year modulo 400 is 0)
    
    if  isLeap == true
        DAYS_LEFT_ARR = [366, 335, 306, 275,245,214,184,153,122,92,61,31]
    else
         DAYS_LEFT_ARR = [365, 334, 306, 275,245,214,184,153,122,92,61,31]
    
    print ("DAYS LEFT: ") && print(DAYS_LEFT_ARR[monthOfYear] - dayOfMonth)
    
     
    Última edição: 2 de Outubro de 2008
  12. pesta

    pesta Power Member

    Receber dia
    Receber mês
    Validar dados

    Ver ano corrente no system time

    Calcular o timestamp às 23:59:59 de 31/12 do ano corrente
    Calcular o timestamp às 00:00:00 do dia/mês inseridos

    Subtrair

    Transformar o tempo em dias
     
  13. p!nk.

    p!nk. Power Member

    isso dos 12 if's .... foi o que a turma propôs ao prof ... mas ele disse que havia uma maneira mais facil!! amanha pergunto-lhe :P
     
  14. Zeosamaster

    Zeosamaster [email protected] Member

    Podes sempre tentar com um switch...
    Não estás a fazer 12 if's, mas é lá perto :D
    Acho que já fiz um algoritmo do genero em C, mas não me lembro, e agora já não tenho paciencia pra pensar muito :P
     
  15. [C4]

    [C4] Power Member

    O metodo que te vai dar melhor nota é o do timestamp.
    Disso nao há duvidas.
     
  16. DarkBlonde

    DarkBlonde Power Member

    Esse é relativamente fácil comparado com o primeiro algoritmo que tive que resolver. Determinar em que dia calha o natal de um ano qualquer. Ou seja o utilizador introduz o ano e o algoritmo tem que determinar o dia em que é o natal nesse ano... llol
     
  17. Baderous

    Baderous Banido

    Esse é fácil: 25 de Dezembro.
     
  18. Uncle Sam

    Uncle Sam Power Member

    OWNED :lol::lol::lol::lol:
     
  19. DarkBlonde

    DarkBlonde Power Member

    Dia da semana espertalhao... :lol:
     

Partilhar esta Página