Ir ao conteúdo
  • Cadastre-se

Desafio Virgininha e Pedrinho


Thiago Garrocho

Posts recomendados

Pedrinho e Virgininha

Hoje, como a tecnologia da informação está muito avançada, nos permite

conhecer novas pessoas independentes da distância e, as vezes, faz um filho

arrastar os pais para São Paulo para ficar na casa da namorada contra a vontade da mãe, costumaz ciumenta, que não quer dividir o filho com uma menina linda, inteligente e.... linda. Pedrinho e Virgininha decidiram parar de usar o Orkut, MSN, e as vezes SMS e telefone para namorar, e até que em fim, manter um mais serio.

Que mararavilha! Casaram-se na igreja da Boa Morte e decidiram levar uma vida tranquila em uma bela cidade do interior de Minas Gerais chamada Alvinópolis (mas, deixando bem claro que Pedrinho, um cara de extremo bom gosto e muito bem apessoado, jamais escolheria uma cidade sem-graça como para viver).

Alvinópolis, cidade esta, onde as pessoas são amigas, o clima é gradabilíssimo, não há violência, possui várias fontes de águas termais (não notem a propaganda barata). Enfim, uma cidade que deveria fazer parte do roteiro turístico de qualquer pessoa que goze de perfeitas condições mentais.

Mas como nada é perfeito, o preço da água é muito caro. O casal decidiu

manter todos os seus gastos sob controle. Joãozinho então decidiu medir

diariamente o seu consumo de água, fazendo a leitura do hidrômetro de sua bela casa, e registrando a medida.

Alguns dias Pedrinho efetua a leitura, e em outros a Virgininha. Dessa forma, eles são capazes de olhar a diferença de consumo entre dois dias consecutivos e saber quanto de água eles gastaram.

Porém em alguns dias eles simplesmente esqueceram de efetuar a leitura,

e assim, após um longo tempo, seu registro de consumo tornou-se incompleto.

Eles têm uma lista de datas e consumo, mas nem todas as datas são

consecutivas em virtude dos dias em que eles não efetuaram a leitura do

hidrômetro. Eles desejam levar em conta apenas os dias onde o consumo pode ser precisamente determinado, e precisam de sua ajuda.

Entrada

A entrada consta de vários casos de teste. A primeira linha de cada caso de

teste contém um único inteiro N indicando o número de medidas que foram

efetuadas (2 ≤ N ≤ 10 ). Cada uma das N linhas seguintes contém 4 inteiros D, M, Y e C, separados por um espaço em branco, indicando respectivamente o dia (1 ≤ D ≤ 31), mês (1 ≤ M ≤ 12), ano (1900 ≤ Y ≤ 2100), e o consumo (0 ≤ C ≤ 106 ) lido no início de cada dia. As N linhas são ordenadas de forma crescente pela data, e pode incluir anos bissextos. A seqüência de consumo também é crescente, ou seja, não existem duas leituras com o mesmo valor. Assuma que t D, M e Y representam uma data válida.

Um ano é bissexto se for divisível por 4 e não divisível por 100.

O final da entrada de dados é indicado por uma linha contenho um zero.

Saída Para cada caso de , seu programa deve imprimir uma linha contendo dois inteiros separados por um espaço em branco: o número de déias em que o consumo pode ser precisamente determinado e a soma do consumo nesses dias.

Exemplo de Entrada

5

9 9 1979 440

29 10 1979 458

30 10 1979 470

1 11 1979 480

2 11 1979 483

3

5 5 2000 6780

6 5 2001 7795

7 5 2002 8201

8

28 2 1978 112

1 3 1978 113

28 2 1980 220

1 3 1980 221

5 11 1980 500

14 11 2008 600

15 11 2008 790

16 12 2008 810

0

Saída para as entradas acima

2 15

0 0

2 191

................................................................................

Até agora eu tenho isso:

Program consumodeagua;

Var N, {numero de leituras do dia}

D, M, Y, {dia, mes e ano}

C : integer;{consumo}

Begin

Write ('Forneça o Numero de leituras do dia ou 0 para sair: ');

Readln(N);

If (N>=2) and (N<=10) Then

While N < 10 do

Begin

Write ('Forneça o Dia, Mês, Ano e consumo da Leitura: ');

Read (D, M, Y, C);

If (D>=1) and (D<=31) and (M>=1) and (M<=12) and (Y>=1900) and (Y<=2100) and (C>=0) and (C<=1000000) then

Begin

N:=N+1;

end

else

writeln ('Data Invalida');

end

else

Writeln('Data Invalida');

End.

Sei que falta muita coisa, se a pessoa digitar 0 é para sair do programa, mas não estou conseguindo fazer isso funcionar...

To precisando de ajuda nesse exercicio. :)

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá,

Vamos lá..:

Antes de tudo, o principal é você entender o problema... feito isso parti para os seus requisitos:

1) Leitura de uma data válida

Baseado no código postado, de cara já sinalizo um erro de interpretação de texto, veja:

A seqüência de consumo também é crescente, ou seja, não existem duas leituras com o mesmo valor. Assuma que t D, M e Y representam uma data válida.

Está claro (pelo que eu entendi), que você NÃO PRECISA VERIFICAR A VALIDADE DA DATA, ou seja, já começou com o pé esquerdo... rs (brincadeira)...

Em fim, as informação dadas, como:

Cada uma das N linhas seguintes contém 4 inteiros D, M, Y e C, separados por um espaço em branco, indicando respectivamente o dia (1 ≤ D ≤ 31), mês (1 ≤ M ≤ 12), ano (1900 ≤ Y ≤ 2100), e o consumo (0 ≤ C ≤ 106 ) lido no início de cada dia.

são usadas para VERIFICAR SE UM DIA É POSTERIOR AO OUTRO, e não para saber se a data é válida ou não... :lol:

Se tiver que verificar, deixe para depois. Vai dar trabalho por hora.

2) Leitura em sequência

A seqüência de consumo também é crescente, ou seja, não existem duas leituras com o mesmo valor. Assuma que t D, M e Y representam uma data válida.

Da mesma forma, entendo que além de ser uma data válida (que existiu), elas também são sequenciais entre si. Não precisará verificar se uma data é mais antiga que a outro. SEMPRE SERÁ! (só não será necessariamente em um dia atrás do outro - por sinal essa essa a chave!)

Se tiver que verificar, deixe isso para depois também...

3) Comparação de data

Aqui que é a parte mais interessante. Por sinal é basicamente a única tarefa do problema. Essa conversa de consumo água, briguinha entre casal, soma daquilo é só para complicar.. ^_^. Como dito, a questão toda é a interpretação do problema.. que poderia ser resumido a:

Verifique se a data é posterior a outra

Sacou?

Baseado nisso fica mais "simples". O segredo é você pegar a data atual e somar um dia e acha a data correspondente. Depois você compara com a nova data... daí calcular o consumo fica fácil!

Como no problema fala de ano bissexto, e ao mesmo tempo no exemplo ele usa fevereiro com 28 dias, acredito que deve ser verificado também se os outros meses têm somente 30 ou 31 dias para poder virá o mês.

A sequencia respectiva para cada mês é:

31,(28 ou 29),31,30,31,30,31,31,30,31,30,31

Veja que vai dar dar um trabalhinho também... logo também pode deixar para depois...

3) Cálculo do próximo dia

A soma é feita com o mesmo princípio das somas comuns. Quando o dia chega ao limite do mês, ele volta para 1 e soma um ao mês. Se o mês você for de dezembro, volta para janeiro e soma um ao ano... mas veja não queira se preocupara se tem 30 ou 31 dias, trate todos como se tivesse 31 mesmo. Depois altere o programa para diferenciar o mês de fevereiro... depois se quiser/precisar, trate os casos de 30 e 31 para os outros meses...

***

RESUMINDO

Faça como se todos os meses tivessem 31 dias. Depois ajuste aos poucos.

No aguardo

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!