Spočítání kolik jsou měsíce dnů – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spočítání kolik jsou měsíce dnů – C / C++ – Fórum – Programujte.comSpočítání kolik jsou měsíce dnů – C / C++ – Fórum – Programujte.com

 

Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #1
-
0
-

Zdravím, mám funkci na spočítání, kolik jsou měsíce dnů - msum1, msum2.

Někdy mi vyjde, že jsou to i záporná čísla a to i přesto, že datum mám stejné jako předchozí výpočet.

 y1p = přestupnost roku;

m1 - měsíc

d1-dny

h1 hodiny

i1 minuty

int Sum(int y1p, int m1, int d1, int h1, int i1)
{
	int i, msum1, md[11], md2[11], sum1;
	if(y1p == 0)
	{
 		md[0]=31;
 		md[1]=28;
 		md[2]=31;
 		md[3]=30;
 		md[4]=31;
 		md[5]=30;
 		md[6]=31;
 		md[7]=31;
 		md[8]=30;
 		md[9]=31;
 		md[10]=30;
 		md[11]=31;
	}
	if(y1p == 1)
	{
 		md2[0]=31;
 		md2[1]=29;
 		md2[2]=31;
 		md2[3]=30;
 		md2[4]=31;
 		md2[5]=30;
 		md2[6]=31;
 		md2[7]=31;
 		md2[8]=30;
 		md2[9]=31;
 		md2[10]=30;
 		md2[11]=31;
	}
	if(y1p==1)
	{
		for(i=0;i < m1;i++)
		{
			msum1=msum1+md2[i]; 
		}
	sum1 = i1 + h1*60 + d1*1440 + msum1*1440;
	}
	else
	{
		for(i=0;i < m1;i++)
		{
			msum1=msum1+md[i]; 
		}
	sum1 = i1 + h1*60 + d1*1440 + msum1*1440;
	}
	return sum1;
}

Poradítě prosím...Už v tom tápu půl dne a kvůli tomu mi nejde celý program...

Nahlásit jako SPAM
IP: 89.176.24.–
Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #2
-
0
-

Teda mám tam špatně ty pole. md a md2 jsou oba md[12] md2[12], ale stejně mi to jde pořád blbě.

Nahlásit jako SPAM
IP: 89.176.24.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #3
-
0
-

minimalne je pole o 1 mensi, nez myslis..  pak se mozna ma pocitat index 0 jako 0 takze jeste o jedno mene,

pak by se to dalo vyrazne zkratit, kdyby se jen nastavoval unor podle prestupnosti (ostatni se nemeni)

a co je asi uplne nejzasadnejsi - nemuzes nechat pamet pro sumy neinicializovanou!!!

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #4
-
0
-

#3 KIIV
Teď trochu nechápu. Kde jí mám neinicializovanou?

Nahlásit jako SPAM
IP: 89.176.24.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #5
-
0
-

int msum1;

msum1 = msum1 + ....;  // nemuzes se spolehnout na to, ze tam v ram nic neni (a jestli ti vychazej divny hausnumera tak tomu tak proste je)

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #6
-
0
-

#5 KIIV
Však to mám hnedka nahoře v tom kódu#5 KIIV

int i, msum1=0, md[11], md2[11], sum1;

Mám tam starej kód. Samozřejmě to mám inicializované, ale v tom ten problém není.

Nahlásit jako SPAM
IP: 89.176.24.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #7
-
0
-

pak problem je v tom, ze si aspon nevypisujes debug hlasky - co je v promennych postupem casu, jak prochazis kodem dal a dal..

Nahlásit jako SPAM
IP: 2a01:430:17:1::52...–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #8
-
0
-

#7 KIIV
Já nejsem v tom tak pokročilej...Umím jenom to, co jsme se učili ve škole...

Když zadám jednou stejný datum.

A zadám ho podruhý, tak mi před to číslo vypíše číslo -256773912304..

Pak mi to zas třeba vypíše číslo o jedno větší...

Nahlásit jako SPAM
IP: 89.176.24.–
Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #9
-
0
-

Tak nakonec mi to funguje až na jedno číslo a to je, když zadám stejný datum podruhé, tak to jde do mínusu...

Nahlásit jako SPAM
IP: 89.176.24.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #10
-
0
-

to sedi vcelku presne na neinicializovany promenny...

bud dej celej kod, nebo delej ty debug vypisy - snad vas ve skole naucili aspon vytisknout par promennejch na obrazovku

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #11
-
0
-

#10 KIIV
 

int Sum(int y1p, int m1, int d1, int h1, int i1)
{
	int i, msum1=0, md[12], md2[12], sum1=0;
	if(y1p == 0)
	{
 		md[0]=31;
 		md[1]=28;
 		md[2]=31;
 		md[3]=30;
 		md[4]=31;
 		md[5]=30;
 		md[6]=31;
 		md[7]=31;
 		md[8]=30;
 		md[9]=31;
 		md[10]=30;
 		md[11]=31;
	}
	if(y1p == 1)
	{
 		md2[0]=31;
 		md2[1]=29;
 		md2[2]=31;
 		md2[3]=30;
 		md2[4]=31;
 		md2[5]=30;
 		md2[6]=31;
 		md2[7]=31;
 		md2[8]=30;
 		md2[9]=31;
 		md2[10]=30;
 		md2[11]=31;
	}
	if(y1p==1)
	{
		for(i=0;i < m1;i++)
		{
			msum1=msum1+md2[i]; 
		}
	sum1 = i1 + h1*60 + d1*1440 + msum1*1440;
	}
	else
	{
		for(i=0;i < m1;i++)
		{
			msum1=msum1+md[i]; 
		}
	sum1 = i1 + h1*60 + d1*1440 + msum1*1440;
	}
	return sum1;
}
sum1=Sum(y1p,m1,d1,h1,i1);


Já sem nemůžu dát celej kód, protože to máme za domácí úkol a pak by to někdo okopčil a já měl průser...

Nahlásit jako SPAM
IP: 89.176.24.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2013   #12
-
0
-

#11 Maty
Sum se zda byt funkcni... pravdepodobne uz smeti predavas z venku

jinak v kratsi verzi by to mohlo vypadat klidne i takhle:

#include <stdio.h>

int Sum(int y1p, int m1, int d1, int h1, int i1)
{
	int i, msum1=0, md[] = {31,28+y1p,31,30,31,30,31,31,30,31,30,31};
	for(i=0;i < m1;i++)
	{
		msum1=msum1+md[i]; 
	}
 	return i1 + h1*60 + d1*1440 + msum1*1440;
}

int main() {
  printf("%d\n", Sum(1,10,11,12,1));
  printf("%d\n", Sum(1,10,11,12,1));
  printf("%d\n", Sum(1,10,11,12,1));
  printf("%d\n", Sum(1,10,11,12,1));
  printf("%d\n", Sum(1,10,11,12,1));
  return 0;
}
Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Maty
~ Anonymní uživatel
93 příspěvků
10. 11. 2013   #13
-
0
-

#12 KIIV
Tak to bylo tím, že jsem neměl přiřazenou proměnnou, která ale neměla s touhle funkcí nic společnýho....Divný.

Nahlásit jako SPAM
IP: 89.176.24.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 25 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý