Ir ao conteúdo

Posts recomendados

Postado

Olá!
Estou criando um programa em C, é uma atividade do meu curso, e nesse programa, o usuário irá informar um mês e um ano, e a partir daí, eu preciso imprimir esse determinado mês desse determinado ano, como a folha de um mês, com os dias e tal.

O ano base que eu preciso usar é 1970, o qual o dia 01/01/1970 é uma quinta-feira.

Nesse programa, eu já fiz a a parte da contagem de anos bissextos e tal. Porém, tem uma parte que eu estou travado, é onde eu preciso calcular quando foi o dia 01/01 do ano que o usuário irá digitar, para fazer a contagem e determinar como eu irei imprimir o mes q ele digitar, pois tem a questão do espaçamento e de q em qual dia da semana será o dia 1 desse mes.

Eu não posso usar switch, nem outras funções diferentes das q estão sendo usadas ali.

Eu separei o código por etapas, para ir fazendo aos poucos, pois eu sou iniciante.

Por enquanto, o meu código está assim (algumas partes estão apenas com números de exemplo, apenas para testes):

#include <stdio.h>
#include <math.h>


int main(){

int ano_inicial = 1970; // ano inicial/ano base
int mes_entrada = 0, ano_entrada = 0; // dados fornecidos pelo usuário
int quant_anoBissexto = 0; // contador de ano bissexto
int quant_anoNaoBissexto = 0; // contador de ano não bissexto
int ehBissexto = 0; // identificar se o ano digitado eh bissexto
int dias = 0; // quantidade de dias no mes

// receber as informações do usuário (mes e ano)
scanf("%d %d",&mes_entrada, &ano_entrada);


// saber a quantidade de anos bissextos e não bissextos entre o ano digitado e o ano de 1970
for(int i = ano_inicial; i <= ano_entrada; i++){
    if((i%400 == 0)||(i%4 == 0)&&(i%100 !=0)){
        quant_anoBissexto++;
    }else{
        quant_anoNaoBissexto++;
    }

}

// saber se o ano digitado eh bissexto
if((ano_entrada%400 == 0)||(ano_entrada%4 == 0)&&(ano_entrada%100 !=0)){
    ehBissexto = 1;
}else{
    ehBissexto = 0;
}

// declarando a quantidade de dias de cada mes
if(mes_entrada==12){ //dezembro
    dias = 31;
}else if(mes_entrada==11){ // novembro
    dias = 30;
}else if(mes_entrada==10){ // outubro
    dias = 31;
}else if(mes_entrada==9){ // setembro
    dias = 30;
}else if(mes_entrada==8){ // agosto
    dias = 31;
}else if(mes_entrada==7){ // julho
    dias = 31;
}else if(mes_entrada==6){ // junho
    dias = 30;
}else if(mes_entrada==5){ // maio
    dias = 31;
}else if(mes_entrada==4){ // abril
    dias = 30;
}else if(mes_entrada==3){ // marco
    dias = 31;
}else if((mes_entrada==2)&&(ehBissexto != 0)){ // fevereiro bissexto
    dias = 29;
}else if((mes_entrada==2)&&(ehBissexto == 0)){ // fevereiro não bissexto
    dias = 28;
}else if(mes_entrada==1) // janeiro
    dias = 31;


// saber qual dia da semana cai o 1 dia do ano digitado


                                         
//
                                         


// para imprimir o mes e o ano digitado
if(ano_entrada = 1){
    printf("Janeiro %d",ano_entrada);
}else if(ano_entrada = 2){
    printf("Fevereiro %d",ano_entrada);
}else if(ano_entrada = 3){
    printf("Marco %d",ano_entrada);
}else if(ano_entrada = 4){
    printf("Abril %d",ano_entrada);
}else if(ano_entrada = 5){
    printf("Maio %d",ano_entrada);
}else if(ano_entrada = 6){
    printf("Junho %d",ano_entrada);
}else if(ano_entrada = 7){
    printf("Julho %d",ano_entrada);
}else if(ano_entrada = 8){
    printf("Agosto %d",ano_entrada);
}else if(ano_entrada = 9){
    printf("Setembro %d",ano_entrada);
}else if(ano_entrada = 10){
    printf("Outubro %d",ano_entrada);
}else if(ano_entrada = 11){
    printf("Novembro %d",ano_entrada);
}else if(ano_entrada = 12)
    printf("Dezembro %d",ano_entrada);

// para imprimir o calendario

int d=1, inicio=4//exemplo;
printf("do se te qu qu se sa\n");

// imprimir os espacos em branco
for(int i=0; i<inicio; i++){
        printf("   ");
    }
// imprimir os dias
for(int i=1; i<=5; i++){     // semanas
    for(int j=1; j<=7; j++){ // dias da semana
        if(d<=30){ //exemplo
        printf("%2d ",d);
        d++;
        }
    }
    printf("\n");
}

return 0;
} //fecha função main()

 

 

Preciso imprimir algo assim:

 

image.png.14165dbe4dbe9220cd6e70bb0f0a6d47.png

Postado
3 horas atrás, Antonio M. disse:

Porém, tem uma parte que eu estou travado, é onde eu preciso calcular quando foi o dia 01/01 do ano que o usuário irá digitar, para fazer a contagem e determinar como eu irei imprimir o mes q ele digitar, pois tem a questão do espaçamento e de q em qual dia da semana será o dia 1 desse mes.

 

Escreva em torno dos dados

 

E considere o simples: são seis semanas. 42 dias. Tudo depende do dia 1 ser de domingo a sábado.

 

EXEMPLO: sábado

 

do se te qa qi se sa                  
XX XX XX XX XX XX 01
02 03 04 05 06 07 08
09 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 XX XX XX XX XX

 

EXEMPLO: domingo

 

do se te qa qi se sa                  
01 02 03 04 05 06 07
08 09 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 XX XX XX XX
XX XX XX XX XX XX XX

 

Claro que os XX serão espaços e só precisa preencher os 42 lugares com os 28 a 31 dias e os 14 a 11 espaços.

 

Para o dia da semana considere que estamos falando de computadores que rodam milhões de instruções por segundo e que a coisa que fazem mais depressa é contar de 1 em 1 e pode só contar os dias.

 

Não pode escrever funções? Em um curso de C?

 

Não pode usar time.h também, imagino...

 

if(ano_entrada = 1){
    printf("Janeiro %d",ano_entrada);
}else if(ano_entrada = 2){
    printf("Fevereiro %d",ano_entrada);
}else if(ano_entrada = 3){
    printf("Marco %d",ano_entrada);
}else if(ano_entrada = 4){
    printf("Abril %d",ano_entrada);
}else if(ano_entrada = 5){

 

Sobre esses if gigantes entenda que não precisa de nenhum. Est;a testando uma coisa que vai ser sempre a mesma e não é útil fazer isso com um computador. SEMPRE vai dar na mesma. Use um vetor.

 

// receber as informações do usuário (mes e ano)
scanf("%d %d",&mes_entrada, &ano_entrada);

 

Leia o manual. TESTE SEMPRE o retorno de scanf(). É ingênuo seguir se não leu nada. Vai imprimir o que?

 

Nunca escreva um programa interativo se puder evitar. Não há sentido em ler mes e ano toda vez enquanto está testando.

 

Pense nisso: você já tem dois valores. TESTE para os dois antes de perder seu tempo digitando isso toda vez que vai testar.

 

Você tem aí que 01/01/70 é quinta e você disse que 01/09/93 é quarta então use o simples

 

    int mes_entrada = 0, ano_entrada = 0; // dados fornecidos pelo usuário

 

Evite declarar mais de uma variável por linha. É grátis. Nem todos seus programas vão ter 50 linhas ou menos. E não use nomes gigantes em variáveis que vai usar em expressões...

 

Prefira

 

int mes = 9;
int ano = 93; // 1/9/03 quarta

// int mes = 1;
// int ano = 70; // 1/1/70 quinta

 

E DEPOIS que estiver funcionando para esses dois use a leitura. E teste o retorno de scanf().

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!