Ir para conteúdo
Fórum Script Brasil
  • 0

Exercício: Calendário 1901-2092


AVF99999999999999

Pergunta

Projeto Calendário Permanente (veja a imagem abaixo):

Como eu faço?

p1.jpg

Abaixo está um código base para você. As matrizes A1, A2, B e C já estão preenchidas. Você implementará a função procurarLinha, que varre uma matriz, em busca de um valor, e retorna somente a linha em que encontrou o elemento.

Adicionalmente, precisará terminar o main:
    -Com base no ano, decida se vai fazer a primeira pesquisa em A1 (ano até 2000) ou A2 (a partir de 2001). Use para a pesquisa somente os últimos dois dígitos do ano (para isso você pode usar o resto da divisão inteira por 100: ano%100).

Esta pesquisa é feita com a chamada da função procurarLinha; só interessa saber em que linha da matriz está este ano.
    -Use a linha achada acima e a coluna correspondente ao mês para ler um valor da matriz B.
    -Some o valor lido da matriz B ao dia: esta soma deverá ser procurada na matriz C, com a chamada da função procurarLinha; só interessa saber em que linha da matriz está esta soma. Esta linha contém o dia da semana correspondente a data em questão: 0 para domingo, 1 para segunda, 2 para terça, 3 para quarta, 4 para quinta, 5 para sexta e 6 para sábado.


Exemplo numérico para melhorar o entendimento: vamos descobrir que dia da semana corresponde a 01/09/2018:

1) 2018 > 2000, então procuro 18 na matriz A2: está na 10ª linha.
2) Na matriz B, 10ª linha, coluna correspondente ao mês de Setembro, leio o número 6.
3) Somo 6 mais o dia (1), obtendo 7.
4) Procuro em que linha da matriz C existe o número 7: última linha, correspondente à Sábado!!


Código de apoio:

#include <stdio.h>
#include <locale.h>

int procurarLinha(int L, int C, int mat[L][C], int proc)
{
    //aqui você completa ....
    //esta função retorna a linha em que proc aparece na matriz
    for(....)
    {    for(...)
        {    if(...)
            {
            }
        }
    }
}

//Calendário permanente de 1901 a 2092

int A1[28][4], A2[28][4];
int B[28][12]=
    {{4,0,0,3,5,1,3,6,2,4,0,2},
     {5,1,1,4,6,2,4,0,3,5,1,3},
     {6,2,2,5,0,3,5,1,4,6,2,4},
     {0,3,4,0,2,5,0,3,6,1,4,6},
     {2,5,5,1,3,6,1,4,0,2,5,0},
     {3,6,6,2,4,0,2,5,1,3,6,1},
     {4,0,0,3,5,1,3,6,2,4,0,2},
     {5,1,2,5,0,3,5,1,4,6,2,4},
     {0,3,3,6,1,4,6,2,5,0,3,5},
     {1,4,4,0,2,5,0,3,6,1,4,6},
     {2,5,5,1,3,6,1,4,0,2,5,0},
     {3,6,0,3,5,1,3,6,2,4,0,2},
     {5,1,1,4,6,2,4,0,3,5,1,3},
     {6,2,2,5,0,3,5,1,4,6,2,4},
     {0,3,3,6,1,4,6,2,5,0,3,5},
     {1,4,5,1,3,6,1,4,0,2,5,0},
     {3,6,6,2,4,0,2,5,1,3,6,1},
     {4,0,0,3,5,1,3,6,2,4,0,2},
     {5,1,1,4,6,2,4,0,3,5,1,3},
     {6,2,3,6,1,4,6,2,5,0,3,5},
     {1,4,4,0,2,5,0,3,6,1,4,6},
     {2,5,5,1,3,6,1,4,0,2,5,0},
     {3,6,6,2,4,0,2,5,1,3,6,1},
     {4,0,1,4,6,2,4,0,3,5,1,3},
     {6,2,2,5,0,3,5,1,4,6,2,4},
     {0,3,3,6,1,4,6,2,5,0,3,5},
     {1,4,4,0,2,5,0,3,6,1,4,6},
     {2,5,6,2,4,0,2,5,1,3,6,1}};
int C[7][6];

int main()
{
    int l,c,x;
    //populando a tabela A1
    x=-3;
    for(c=0;c<4;c++)
        for(l=0;l<28;l++, x++)
            if(x<1) A1[l][c]=-1;
            else if(x<100) A1[l][c]=x;
            else if(x==100) A1[l][c]=0;
            else A1[l][c]=-1;

    //populando a tabela A2
    x=-19;
    for(c=0;c<4;c++)
        for(l=0;l<28;l++, x++)
            if(x<1) A2[l][c]=-1;
            else A2[l][c]=x;
    
    //populando a tabela C
    x=1;
    for(c=0;c<6;c++)
        for(l=0;l<7;l++, x++)
            if(x>37) C[l][c]=-1;
            else C[l][c]=x;

    int dia, mes, ano, resposta, linha;
    setlocale(LC_ALL, "Portuguese");
    printf("\nEntre com uma data no formato DD/MM/AAAA: ");
    scanf("%d/%d/%d", &dia, &mes, &ano);

    if(ano<1901 || ano>2092) printf("Erro!! O ano deve ser de 1901 a 2092.\n");

    //aqui você completa ......
    //decida se vai usar A1 ou A2
    //extraia os dois últimos dígitos para procurar em A1 ou A2 -----> encontrei uma linha para olhar na matriz B
    //com o mês eu terei uma coluna na matriz B (Janeiro é mês 1 mas corresponde à coluna 0, Fevereiro é mês 2 mas corresponde à coluna 1, ........Dezembro corresponde à coluna 11)
    //some o dia fornecido com o valor encontrado na matriz B
    //procure este último cálculo na matriz C   ------> linha
     linha == 0 ---> Domingo
    // linha == 1 ---> Segunda 
    // ....
    // linha == 6 ---> Sábado//

    return 0;
}
 

Editado por AVF99999999999999
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...