Ir para conteúdo
ern1955

erro nas datas código do calendário

Recommended Posts

Boa noite a todos, eu estudo c++ através de video aula, e num exercício que é fazer um calendário anual, eu digito o ano, e apenas o primeiro mês esta correto, os outros meses os dias que correspondem a semana esta certo mais nos dias trocados, gostaria de saber se alguém poderia me ajudar, onde eu estou errando!

 

#include<iostream>

#include <iomanip>

 

/*

Dados dia, mês e ano de uma data gregoriana, escreva uma função que converta essa data para data juliana correspondente. Use a seguinte fórmula:

Data juliana = (1461*(ano + 4800 +(mes - 14)/12) )/4 + (367 * (mes - 2 - 12 * (( mes - 14)/12)))/ 12 - (3*((ano+4900+(mes-14)/12)/100))/4+dia-32075.

 

Escreva uma função que receba dia, mês e ano e calcule o dia da semana em que caiu essa data. Para isso, basta transformar a data gregoriana em

juliana e calcular o resto da divisão da data juliana por 7. A função deverá retornar um número entre 0 e 6 indicando os seguintes resultados:

0 - Segunda-feira

1 - Terça-feira

2 - Quarta-feira

3 - Quinta-feira

4 - Sexta-feira

5 - Sábado

6 - Domingo

 

Faça um calendario anual

 

*/

using namespace std;

 

int juliana(int dia, int mes, int ano);

int diadasemana(int numero);

string meses(int m);

int dia_mes(int a);

bool bissexto(int n);

void calendario(int num, int d);

 

static int ano;

 

int main(){

 

setlocale(LC_ALL, "Portuguese");

 

int conv=0;

int diames=0;

 

cout<<"Ano: ";

cin>>ano;

cout<<endl;

 

for(int mes=1; mes<=12; mes++){

diames = dia_mes(mes);

cout<<meses(mes);

cout<<"\nSeg Ter Qua Qui --- Sab Dom\n";

for(int dia=1; dia<=diames; dia++){

 

conv = diadasemana(juliana(dia, mes, ano));

 

calendario(conv, dia);

 

if(dia % 7 == 0){

 

cout<<endl;

 

}

 

}

 

cout<<endl;

 

}

 

return 0;

}

 

//-------------------------------------------------------//

 

void calendario(int num, int d){

 

switch(num){

 

case 0:

printf("%3d ", d);

break;

 

case 1:

printf("%3d ", d);

 

break;

case 2:

printf("%3d ", d);

break;

 

case 3:

printf("%3d ", d);

break;

 

case 4:

printf("%3d ", d);

break;

 

case 5:

printf("%3d ", d);

break;

 

case 6:

printf("%3d ", d);

break;

 

}

 

 

}

 

//-------------------------------------------------------//

 

int juliana(int dia, int mes, int ano){

 

return (1461*(ano + 4800 +(mes - 14)/12) )/4 + (367 * (mes - 2 - 12 * (( mes - 14)/12)))/ 12 - (3*((ano+4900+(mes-14)/12)/100))/4+dia-32075;

 

}

 

//-------------------------------------------------------//

 

int diadasemana(int numero){

 

return numero % 7;

}

 

//-------------------------------------------------------//

 

string meses(int m){

 

switch(m){

 

case 1: return "Janeiro";

 

case 2: return "\nFevereiro";

 

case 3: return "\nMarço";

 

case 4: return "\nAbril";

 

case 5: return "\nMaio";

 

case 6: return "\nJunho";

 

case 7: return "\nJulho";

 

case 8: return "\nAgosto";

 

case 9: return "\nSetembro";

 

case 10: return "\nOutubro";

 

case 11: return "\nNovembro";

 

default: return "\nDezembro";

 

}

}

 

//-------------------------------------------------------//

 

 

int dia_mes(int a){

 

if(a == 1 || a == 3 || a == 5 || a == 7 || a == 8 || a == 10 || a == 12){

 

return 31;

 

}else if(a == 2){

 

if(bissexto(ano) == true){

 

return 29;

 

}else{

 

return 28;

 

}

 

 

}else{

 

return 30;

}

}

 

//-------------------------------------------------------//

 

bool bissexto(int n){

 

if((n % 4 == 0) &&

(n % 100 != 0)){

 

return true;

 

}else if(n % 400 == 0){

 

return true;

 

}else{

 

return false;

}

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

  • Conteúdo Similar

    • Por tony_lu
      Ola pessoal, preciso de uma ajuda...estou usando um campo date onde o usuário seleciona a data no calendário e submete o formulário!
       
      <form method="post" id="form" name="form"> <input type="date" name="data" id="data" value=""> </form> Eu preciso que o usuario ao abrir o calendario e escolher o dia desejado, ao clicar ja submeta o formulario sem que precise clicar em um botão para enviar! Podem me ajudar?!
       
      Obrigado!
    • Por ggbelgamo
      Pessoal estou tentando exibir os eventos no meu calendário, porém não estou tendo sucesso. Sou iniciante em Jquery e após pesquisar em vários sites e consultar vários exemplos não consegui exibir os eventos. O calendário é exibido, os eventos não!
       
      Minha controller (ASP MVC):
      var listCalender = new List<object>(); var dal = new DAL.PosVendasParticipantesDAL(); var calender = dal.Todos(); if (calender.Rows.Count > 0) { foreach (DataRow dr in calender.Rows) { var entity = new Modelos.PosVendasParticipantesModelo(); entity.ID = Convert.ToInt32(dr["ID"]); entity.ProximaLigacao = Convert.ToDateTime(dr["PROXIMA_LIGACAO"]); listCalender.Add(new { title = entity.ID, start = entity.ProximaLigacao, }); } } return Json(listCalender, JsonRequestBehavior.AllowGet);  
      Após o retorno Json, obtenho os seguintes dados:
      [{"title":1,"start":"\/Date(1469725020000)\/"},{"title":2,"start":"\/Date(1469725020000)\/"},{"title":3,"start":"\/Date(1470674040000)\/"} É exatamente os parâmetros que o fullCalendar exige pra exibir eventos, acho que estou sabendo interpretar o Json retornado!
       
      Jquery:
      <script> $(document).ready(function() { $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,basicWeek,basicDay' }, defaultDate: '2018-03-12', navLinks: true, // can click day/week names to navigate views editable: true, eventLimit: true, // allow "more" link when too many events events: $(function (start, end, timezone, callback) { $.ajax({ dataType: "json", type: "POST", contentType: "application/json; charset=utf-8", url: "/Home/GetEvents", success: function (dados) { alert('foi'); $(dados).each(function (i) { //document.writeln("<p>ID: " + dados[i].id + " | Data: " + dados[i].Start + "</p>") events.push({ title: $(this).attr('title'), start: $(this).attr('start') }); }); } }); }) }); }); </script>  
    • Por ggbelgamo
      Sou iniciante em ASP MVC e não estou conseguindo fazer com que o meu controller retorne os dados do banco no calendário, ele só retorna uma página em branco com o Json. Tentei seguir alguns exemplos pesquisando na internet mas não obtive sucesso!
       
      Controller
      public JsonResult Calendario() { var verCookie = Request.Cookies.Get(GerarHashMd5("idUser")); if (verCookie == null) { RedirectToAction("Login"); } var listCalender = new List<Modelos.PosVendasParticipantesModelo>(); var dal = new DAL.PosVendasParticipantesDAL(); var calender = dal.Todos(); if (calender.Rows.Count > 0) { foreach (DataRow dr in calender.Rows) { var entity = new Modelos.PosVendasParticipantesModelo(); entity.ID = Convert.ToInt32(dr["ID"]); entity.ProximaLigacao = Convert.ToDateTime(dr["PROXIMA_LIGACAO"]); listCalender.Add(entity); } } return Json(listCalender.ToArray(), JsonRequestBehavior.AllowGet);  
      Jquery
      $(document).ready(function () { $('#calendar').fullCalendar({ header: { left: 'prev,next today', center: 'title', right: 'month,agendaWeek,agendaDay,listWeek' }, defaultDate: '2018-03-12', navLinks: true, // can click day/week names to navigate views editable: true, eventLimit: true, // allow "more" link when too many events events: "/Home/Calendario", }); });  
    • Por sacjamm
      Eu estou tentando fazer um cadastro de recorrência de datas para um evento, eu tenho este calendário: https://procurandooquefazer.com.br/data_calendario/
      Eu queria que fosse possível clicar em cada data, de preferência de quem está criando o evento, sendo que ele iria selecionar várias datas, para fazer uma recorrência, e essa recorrência ser cadastrada no banco de dados, preciso que seja salva, o dia/mês/Ano, eu até tentei colocar checkbox, mais quando parte para o jquery, eu não consigo fazer o array funcionar.
      Peço a colaboração de todos para resolver o meu problema!
    • Por FabianoSouza
      Encontrei esse código para gerar calendário e estou adaptando para meu uso.
       
      O problema está na hora de percorrer um recordset e exibir os compromissos dentro das TD da tabela.
      Quando há dois ou mais compromissos na mesma data, o loop falha, deixando de escrever os compromissos de outras datas.
      Mas se houver apenas 1 compromisso por dia, funciona direitinho.
       
      Ilustrando:
      Isso funciona
      Compromisso A - 10/07/2017
      Compromisso B - 15/07/2017
      Compromisso C - 18/07/2017
       
      Isso não funciona
      Compromisso A - 10/07/2017
      Compromisso B - 15/07/2017
      Compromisso C - 15/07/2017
       
       
      Esse trecho é responsável por escrever o compromisso dentro da TD
       
      Dim meuDia, meuMes, meuAno meuDia = Day(rs("Inicio")) meuMes = Month(rs("Inicio")) meuAno = Year(rs("Inicio")) If meuDia = Day(dtCurViewDay) AND meuMes = Month(dtCurViewDay) AND meuAno = Year(dtCurViewDay) Then Response.Write "<span>" & rs("DatasDescricao") & "</span>" rs.Movenext End if Suspeito que o problema esteja na linha "rs.Movebext". Talvez eu não esteja movimentando o RS no lugar correto do código.
       
      Agora o código na íntegra (lembrando que estou adaptando o código, não criei do zero, tem umas functions que não sei pra que servem).
      <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <%Option Explicit%> <% Function FormatStr(String) on Error resume next String = Replace(String, CHR(13), "") String = Replace(String, CHR(10) & CHR(10), "</P><P>") String = Replace(String, CHR(10), "<BR>") FormatStr = String End Function Dim dtToday dtToday = Date() Dim dtCurViewMonth ' First day of the currently viewed month Dim dtCurViewDay ' Current day of the currently viewed month Dim frmDate ' Date submitted by form ' if the GO button was used, build the date from the month and year If InStr(1, Request.Form, "subGO", 1) > 0 then if Request.Form("CURDATE_month") = "" then tmpMonth = month(now()) else tmpMonth = Request.Form("CURDATE_month") End If if Request.Form("CURDATE_year") = "" then tmpyear = year(now()) else tmpyear = Request.Form("CURDATE_year") End If tmpDate = "1 " & tmpMonth & " 1999" mnth = Month(tmpDate) frmDate = DateSerial(tmpyear, mnth, 1) Else frmDate = Request.Form("CURDATE") end if if Request("view_date") <> "" then frmDate= DateSerial(year(Request("view_date")), month(Request("view_date")), 1) end if %> <% REM This section defines functions to be used later on. %> <% REM This sets the Previous Sunday and the Current Month %> <% '-------------------------------------------------- Function DtPrevSunday(ByVal dt) Do While WeekDay(dt) > vbSunday dt = DateAdd("d", -1, dt) Loop DtPrevSunday = dt End Function '-------------------------------------------------- %> <%REM Set current view month from posted CURDATE, or ' the current date as appropriate. ' if posted from the form ' if prev button was hit on the form If InStr(1, Request.Form, "subPrev", 1) > 0 Then dtCurViewMonth = DateAdd("m", -1, frmDate) ' if next button was hit on the form ElseIf InStr(1, Request.Form, "subNext", 1) > 0 Then dtCurViewMonth = DateAdd("m", 1, frmDate) ' anyother time Else ' date add in text box If InStr(1, Request.Form, "subGO", 1) > 0 then dtCurViewMonth = frmDate Else if Request("view_date") <> "" then dtCurviewMonth = frmDate else dtCurViewMonth = DateSerial(Year(dtToday), Month(dtToday), 1) End If End If End If %> <% '--------BEGINNING OF DRAW CALENDAR SECTION-------- %> <% Dim iDay, iWeek, sFontColor, dictDte(31,2), intCount Dim strSql, rs strSQL = "" strSQL = "SELECT " strSQL = strSQL &"CONVERT(VARCHAR(10), DatasDataInicio, 103) AS 'Inicio'" strSQL = strSQL &", DatasDescricao " strSQL = strSQL &" FROM tabDatas " strSQL = strSQL &" WHERE " strSQL = strSQL &" MONTH(DatasDataInicio) = DATEADD(DD,-1,MONTH(GETDATE()))" strSQL = strSQL &" AND" strSQL = strSQL &" YEAR(DatasDataInicio) = YEAR(GETDATE())" strSQL = strSQL &" OR " strSQL = strSQL &" MONTH(DatasDataInicio) = MONTH(GETDATE())" strSQL = strSQL &" AND " strSQL = strSQL &" YEAR(DatasDataInicio) = YEAR(GETDATE())" strSQL = strSQL &" OR" strSQL = strSQL &" MONTH(DatasDataInicio) = DATEADD(DD,+1,MONTH(GETDATE()))" strSQL = strSQL &" AND " strSQL = strSQL &" YEAR(DatasDataInicio) = YEAR(GETDATE())" strSQL = strSQL &" ORDER BY " strSQL = strSQL &" DatasDataInicio " strSQL = strSQL &" ASC" set rs = conexao.Execute (strSql) intCount= 0 ' populate array with days of month on Error resume next ' do until rs.EOF ' if intCount > 31 then exit do ' if Day(rs("DatasDataInicio")) = intCount + 1 then ' dictDte(intCount, 1) = rs("DatasDescricao") ' rs.Movenext ' Else ' dictDte(intCount, 1) = " " ' End If ' dictDte(intCount, 2) = intCount + 1 ' intCount = intCount + 1 ' loop %> <!doctype html> <html> <head> <meta charset="utf-8"> <link href="/App/HOME/agenda/calendario/CSS/calendario.css" rel="stylesheet" type="text/css" /> </head> <body> <table id="tabCalendario"> <tr> <% '-- criar colunas com dias da semana For iDay = vbSunday To vbSaturday%> <th> <%=UCase(WeekDayName(iDay))%></th> <%Next %> </tr> <% '--cria linhas de semanas dtCurViewDay = DtPrevSunday(dtCurViewMonth) Response.Write "<tbody>" For iWeek = 0 To 5 Response.Write "<TR>" Dim sBGCOLOR sBGCOLOR = "#FFFFFF" Dim ariaHoje ariaHoje = "1" '-- cria as datas do calendário For iDay = 0 To 6 sBGCOLOR = "#FFFFFF" ariaHoje = "1" If Month(dtCurViewDay) = Month(dtCurViewMonth) Then ariaHoje = "1" 'Marca dia atual If dtCurViewDay = dtToday Then sBGCOLOR = "#C4E1FF" else sBGCOLOR = "#F5F5F5" ariaHoje = "" End If Response.Write "<TD bgcolor=" & sBGCOLOR & ">" '------------Caso seja o primeiro dia do mês, concatena o nome do mês abreviado Dim primeiroDia primeiroDia = "" If Day(dtCurViewDay) = 1 Then primeiroDia = " de " & MonthName(Month(dtCurViewDay),True)'true para mês abreviado End if Response.Write("<li value=" & Day(dtCurViewDay) &">"& Day(dtCurViewDay) & primeiroDia & "</li>") '------------ Exibe compromissos do banco de dados Dim meuDia, meuMes, meuAno meuDia = Day(rs("Inicio")) meuMes = Month(rs("Inicio")) meuAno = Year(rs("Inicio")) If meuDia = Day(dtCurViewDay) AND meuMes = Month(dtCurViewDay) AND meuAno = Year(dtCurViewDay) Then Response.Write "<span>" & rs("DatasDescricao") & "</span>" rs.Movenext End if dtCurViewDay = DateAdd("d", 1, dtCurViewDay) Response.Write "</TD>" Next Response.Write "</TR>" Next Response.Write "</tbody>" %> <%' --------END OF DRAW CALENDAR SECTION-------- conexao.Close set conexao = nothing %> </table> </body> </html>  

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.