• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Kalendarz w c++ problem z wyświetleniem miesiąca słownie

Object Storage Arubacloud
0 głosów
645 wizyt
pytanie zadane 11 grudnia 2016 w C i C++ przez Jedyn Obywatel (1,200 p.)
zamknięte 11 grudnia 2016 przez Jedyn

Witam. Mam problem, nie wiem w jaki sposób w metodzie void TKalendarz::wyswietl(int typ) ustawić tak aby po wybraniu typ=1 wyswietlił mi się format 1 Stycznia 2016 rok. Chodzi mi o to by za pomocą parametru m_miesiac, ustawić oraz wyświetlić parametr m_miesiace[][]. Ogółem ta metoda na podstawie parametru typ=1 ma nam wyświetlić datę w formacie 1/2/2016, typ=2 w formacie 1 Luty 2016 rok oraz default 1.2.2016. 
Jak daje np TKalendarz::m_miesiace[m_miesiac][20] to wywala znak "M".

Napisałem już coś takiego:
 

#include <iostream>
#include <string>
#include "stdafx.h"
#include "TKalendarz.h"
#include <string>

char TKalendarz::m_miesiace[12][20] = { { "Styczen" },{ "Luty" },					//deklarujemy tablice char o 12 elementach (nie wiem dla czego tablica nie zaczyna sie od 0) oraz maks 20 znakach
									  { "Marzec" },{ "Kwiecien" },
									  { "Maj" },{ "Czerwiec" },
									  { "Lipiec" },{ "Sierpien" },
									  { "Wrzesien" },{ "Pazdziernik" },
									  { "Listopad" },{ "Grudzien" } };


char TKalendarz::m_dni[7][15] = { {"Poniedzialek"}, {"Wtorek"}, {"Sroda"},				//deklarujemy sobie tablice 7 elementowa o wartosci dzien tygodnia, dlugosci maksymalnie 15 (13+znak /0 czyli 14 ale wrazie czego dalem 15)
									{"Czwartek"}, {"Piatek"}, {"Sobota"}, 
									{"Niedziela"} };

TKalendarz::TKalendarz(int dzien = 1, int miesiac = 1, int rok = 2009)				//ustawiamy konstruktor 
{
	if (!ustawDate(dzien, miesiac, rok))
	{
		m_dzien = 1;
		m_miesiac = 1;
		m_rok = 2009;
	}
}
bool TKalendarz::ustawDate(int dzien, int miesiac, int rok)
{
	static int dlugosciMiesiaca[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	// Alternatywna metoda
	//if ((dzien < 0 || dzien > dlugosciMiesiaca[miesiac] || miesiac <0 ) && miesiac != 2) 
	//	return false;
	//else
	//{
	//	if (czyPrzystepny(rok))
	//	{
	//		if (dzien > 29) 
	//			return false;
	//	}
	//	else
	//	{
	//		if (dzien > 28)
	//			return false;
	//	}
	//}

	if (dzien < 0 || miesiac < 0 || rok < 0)				//jezeli ktorys z tych warunkow jest niespelniony to zwroc NULL
		return false;

	if (miesiac != 2)										//jezeli miesiac nie jest lutym oraz dzien jest wiekszy od dni miesiaca zwroc false ->
	{
		if (dzien > dlugosciMiesiaca[miesiac])				// ->
			return false;
	}
	else 
	{
			if (czyPrzystepny(rok))							//sprawdzamy czy rok przestepny, jezeli tak to sprawdzamy czy dzien jest wiekszy jezeli tak to return false
			{
				if (dzien > 29) 
					return false;
			}
			else
			{
				if (dzien > 28)								//tutaj sprawdzamy juz na roku zwyklym nieprzestepnym
					return false;
			}
	}
	m_dzien = dzien;
	m_miesiac = miesiac;
	m_rok = rok;
	return true;
}

void TKalendarz::wyswietl(int typ)					//deklarujemy typy, jeszcze nie skonczone   
{
	switch (typ)
	{
	case 1: std::cout << m_dzien<<" " << TKalendarz::m_miesiace[m_miesiac][20] <<" "<< TKalendarz::m_dni[m_miesiac][15]<<std::endl;
		break;
	case 2: std::cout << m_dzien << "/" << m_miesiac << "/" << m_rok << std::endl;
		break;
	default: std::cout <<m_dzien<<"."<<m_miesiac<<"."<<m_rok<< std::endl;
		break;
	}
	
}

std::string TKalendarz::podajDzienTyg()
{
	return std::string();
}

int TKalendarz::zmienDate(int d_zmien, int m_zmien, int r_zmien)
{
	return 0;
}

int TKalendarz::ileDni(int dzien, int miesiac, int rok)						//funkcja ile dni testowa, odejmujemy wieksze od mniejszej poniewaz nie wykona sie petla glowna z warunkiem  for (int ir = 0; ir <= m_rok - 1; ir++)	
{
	int dni1 = iloscDniOd(m_dzien, m_miesiac, m_rok);
	int dni2 = iloscDniOd(dzien, miesiac, rok);
	return dni1 - dni2;

}

bool TKalendarz::czyPrzystepny(int rok)								//sprawdza czy rok jest przestepny 
{
	if ((rok % 4 == 0 && rok % 100 != 0) || rok % 400 == 0)
		return true;
	return false;
}

int TKalendarz::iloscDniOd(int dzien, int miesiac, int rok)											//deklaracja ilosci dniOd
{
	static int dlugosciMiesiaca[] = { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };			// deklarujemy liczbe dni w miesiacu 
	int licznikDni = 0;

	for (int ir = 0; ir <= m_rok - 1; ir++)					// musimy odejmowac rok wiekszy od mniejszego poniewaz petla nie zadziala :/ tutaj liczmy dla roku z parametru
	{
		for (int im = 1; im <= 12; im++)
		{
			if (im != 2)									// obliczamy dla lutego
			{
				licznikDni += dlugosciMiesiaca[im];
			}
			else
			{
				if (czyPrzystepny(ir))					//jezeli przystepny to dodaj 29dni	
				{
					licznikDni += 29;				
				}
				else									//jezeli nie to licz +28
					licznikDni += 28;
			}
		}
	}
	for (int i = 1; i <= m_miesiac; i++)				//startujemy od stycznia na podstawie m_miesiac  ; tutaj liczmy dla roku obecnego
	{
		if (i != 2)
		{
			licznikDni += dlugosciMiesiaca[i];			//zliczamy dni do licznika poprzed wczesniej zadeklarowana tablice char, i zwieksza nam miesiac
		}
		else
		{
			if (czyPrzystepny(m_rok))					//jezeli przystepny to licznikDni zwieksz o 29
				licznikDni += 29;
			else
				licznikDni += 28;						//jezeli nie przystepny to +28
		}
	}

	return licznikDni;									//zwracamy licznikDni
}

 

komentarz zamknięcia: Rozwiązałem problem, dałem na stringach zamiast charach

Podobne pytania

0 głosów
0 odpowiedzi 1,033 wizyt
pytanie zadane 24 listopada 2016 w Nasze projekty przez Adan199518 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 4,616 wizyt
pytanie zadane 2 lutego 2016 w C i C++ przez igor1988bb Użytkownik (800 p.)
+1 głos
2 odpowiedzi 4,010 wizyt
pytanie zadane 8 kwietnia 2021 w HTML i CSS przez Oskar123# Użytkownik (730 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...