Štvorce

Programovacie jazyky, rady, poradňa...
miso3367
Amateur
Amateur
Príspevky: 24
Registrovaný: 02 sep 2008, 12:57
Kontaktovať používateľa:

Štvorce

Príspevok od používateľa miso3367 »

Ahojte, v škole sme dostali zadanie k zápočtu a je to úloha, ktorá mi nie veľmi sadla. V prílohe zasielam jej zadanie. Prikladám aj kód ktorý mi zistí počet štvorcov bez ohľadu na to, či som vyšiel z môjho imaginárneho plátna alebo nie. Potreboval by som len radu, nejaké usmernenie ako by som mal formulovať podmienku na oklieštenie môjho výsledku v rámci môjho plátna. Poprípade nejaký úplne nový nápad. Viem, že riešienie je jednoduché len naň nemôžem prísť. Ďakujem. Zadanie: http://postimg.org/image/sdgzw47zb/

Kód: Vybrať všetko

#include <iostream>
#include <math.h>

int main(int argc, char** argv) {
	
	using namespace::std;
	
	int Sx,Sy,k;
	int pocet[4] = {0,0,0,0};
	int celkPocet;
	int zx,zy,i,k_p,umocnovatel;
	int x[4],y[4];	
	cin >> k >> Sx >> Sy;
	
	if (Sx - k >= 0 && Sy - k >= 0 && Sx + k <= 2048 && Sy + k <= 2048)
	{
		celkPocet = 1;
		for (i = 0; i < 4; i++)
			{
				switch (i)
				{
					case 0:
						zx = -1;
						zy = -1;
						break;
					case 1:
						zx = 1;
						zy = -1;
						break;
					case 2:
						zx = -1;
						zy = 1;
						break;
					case 3:
						zx = 1;
						zy = 1;
						break;
				}
				
				x[i] = Sx + k*zx;
				y[i] = Sy + k*zy;
				
				k_p = k;
				k_p /= 2;
				
				umocnovatel = -1;
				while (k_p > 0)
				{
					umocnovatel++;
					pocet[i] += pow(4,umocnovatel);

					x[i] += k_p*zx;
					y[i] += k_p*zy;
					
					k_p /= 2;
				}
				
			}	
		}
		else cout << "Nie je mozne nakreslit stvorec" << endl;
		for (int i = 0; i < 4; i++)
		{
			celkPocet += pocet[i];
		}
		cout << "Pocet moznych stvorcov: " << celkPocet << endl;
	return 0;
}
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa harrison314 »

ono to ide urcite vyjadrit nejakym vzorcom, ale podla mna je to pekne zadani na rekurziu
bude to vyzerat cca takto:

Kód: Vybrať všetko

int kresliStvorec(int x,int y, int k)
{
  if( ak sa stvorec zo stredom x,y a rozmerom steny 2k+1 neda nakreslit) return 0;
  int pocet = 0;
  pocet+= kresliStvorec(suradnice pre lavy dolny roh,k/2);
  pocet+= kresliStvorec(suradnice pre lavy horny roh,k/2);
  pocet+= kresliStvorec(suradnice pre pravy dolny roh,k/2);
  pocet+= kresliStvorec(suradnice pre pravy horny roh,k/2);
  return pocet;
}
miso3367
Amateur
Amateur
Príspevky: 24
Registrovaný: 02 sep 2008, 12:57
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa miso3367 »

S rekurziou som sa ešte nestretol, viem ako to funguje ale hádže mi stále len 1.

Kód: Vybrať všetko

#include <iostream>

int kresliStvorec (int x, int y, int k)
{
	if (x - k < 0 || x + k > 2048 || y - k < 0 || y + k > 2048 || k < 1)
		return 0;
	int pocet;
	pocet += kresliStvorec(x - k, y - k, k/2);
	pocet += kresliStvorec(x - k, y + k, k/2);
	pocet += kresliStvorec(x + k, y - k, k/2);
	pocet += kresliStvorec(x + k, y + k, k/2);
	return pocet;
}

int main()
{
	using namespace::std;
	int Sx, Sy, k;
	
	cin >> k >> Sx >> Sy;
	
	kresliStvorec(Sx, Sy, k);
	
	cout << "pocet stvorcov: " << kresliStvorec << endl;
	return 0;
}
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

kresliStvorec(Sx, Sy, k);
   
   cout << "pocet stvorcov: " << kresliStvorec << endl;
lebo tieto dva riadky sú hovadina. Nikde si neuložíš výsledok tej funkcie. Iba si ju zavolal. A potom do výpisu ju voláš znova bez parametrov, preto ti dá jednotku
miso3367
Amateur
Amateur
Príspevky: 24
Registrovaný: 02 sep 2008, 12:57
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa miso3367 »

a mohol by si napísať ako by si to spravil ty, lebo hovorím, fakt som sa s tým ešte nestretol. ďakujem :)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa harrison314 »

Kód: Vybrať všetko

#include <iostream>

int kresliStvorec (int x, int y, int k)
{
   if (x - k < 0 || x + k > 2048 || y - k < 0 || y + k > 2048 || k < 1)
      return 0;
   int pocet=1; //musis inicializovat premnne!
   pocet += kresliStvorec(x - k, y - k, k/2);
   pocet += kresliStvorec(x - k, y + k, k/2);
   pocet += kresliStvorec(x + k, y - k, k/2);
   pocet += kresliStvorec(x + k, y + k, k/2);
   return pocet;
}

int main()
{
   using namespace::std;
   int Sx, Sy, k;
   
   cin >> k >> Sx >> Sy;
   
   int pocetStvtvorcov = kresliStvorec(Sx, Sy, k);
   
   cout << "pocet stvorcov: " << pocetStvtvorcov << endl;
   return 0;
}
miso3367
Amateur
Amateur
Príspevky: 24
Registrovaný: 02 sep 2008, 12:57
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa miso3367 »

pri vstupe k = 15, Sx = 30, Sy = 31 by malo hádzať 85 a pri vstupe 7, 10, 7 by ich malo hádzať 9. Hádže to veľmi veľké čísla. Neviem že kde je chyba
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8219
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa harrison314 »

prave som upravil ten zdrojak, neinicioval si premennu pocet na jednotku
miso3367
Amateur
Amateur
Príspevky: 24
Registrovaný: 02 sep 2008, 12:57
Kontaktovať používateľa:

Re: Štvorce

Príspevok od používateľa miso3367 »

dakujem :) pomohol si mi, a viem niečo nové xD
Napísať odpoveď