Jump to content
Fórum Script Brasil
  • 0

Exercício: Calendário 1901-2092


Question

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;
}
 

Edited by AVF99999999999999
Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      149411
    • Total Posts
      645902
×
×
  • Create New...