Obrazce do dvourozměrného pole – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Obrazce do dvourozměrného pole – C / C++ – Fórum – Programujte.comObrazce do dvourozměrného pole – C / C++ – Fórum – Programujte.com

 

Zelenáč
~ Anonymní uživatel
1132 příspěvků
9. 1. 2015   #1
-
0
-

Zdravím potřeboval bych pomoct s funkcí která by toto narvala do dvourozměrnho pole:

* 0 0 * 0 0 * 0
0 * 0 0 * 0 0 *
0 0 * 0 0 * 0 0
* 0 0 * 0 0 * 0
0 0 * 0 0 * 0 0
0 * 0 0 * 0 0 *
* 0 0 * 0 0 * 0

(samozřejmě velikost pole se může měnit...)

je to jako srandičky s trojúhelníky, kterých je tu kopa, ale z nějákého důvodu se mi zrovna na toto nedaří přijít..

první 4 řádky byly v pohodě, problém nastal když hvězdy začaly měnit směr..  :D

prosím o radu, vysvětlení, nebo jakoukoli pomoc.. :D

Nahlásit jako SPAM
IP: 176.97.245.–
9. 1. 2015   #2
-
0
-

Nerozumím zadání. Načíst ze souboru?

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e42b:d8...–
peter
~ Anonymní uživatel
4014 příspěvků
9. 1. 2015   #3
-
0
-

???

Co treba nejaky kus kodu, co uz mas? Treba v nem je nejaka drobna chybka. A proc zrovna dvourozmerne?
 V javascriptu bych to napsal takto.

<script>
var i,j,ii,x,y,str,pole;
str = "\
* 0 0 * 0 0 * 0\
0 * 0 0 * 0 0 *\
0 0 * 0 0 * 0 0\
* 0 0 * 0 0 * 0\
0 0 * 0 0 * 0 0\
0 * 0 0 * 0 0 *\
* 0 0 * 0 0 * 0\
";
x = 15;
y = 7;
pole = [];
for (j=0,ii=0;j<y;j++)
{
pole[j] = [];
for (i=0;i<x;i++,ii++)
	{
	pole[j][i] = str.charAt(ii);
	}
}

for (j=0;j<y;j++)
{
for (i=0;i<x;i++)
	{
	document.write(pole[j][i]);
	}
document.write('<br>')
}
</script>

S temi lomitky je to stejne, jako napsat do jednoho radku. Js to bez tech lomitek proste neumi :)
str = "* 0 0 * 0 0 * 0 0 * 0 0 * 0 0 * 0 0 * 0 0 * 0 0 * 0 0 * 0 0 * 0 0 0 * 0 0 * 0 0 0 * 0 0 * 0 0 * * 0 0 * 0 0 * 0";
 

Taky to muzes dat do jednorozmerneho pole a adresovat pres formulku pos = j*maxX + i (ij, jsou z cyklu, maxX je delka radku)

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:20ef:bd...–
9. 1. 2015   #4
-
0
-

   

  char pom[] = "00*00*00*00*00";
  char pole [7] [8];
  int i;

  for (i = 0; i < 7; i++)  //projdu radek po radku polem
  {
	memcpy(pole[i], (pom +  2 - i % 3), 8);
  }

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:e42b:d8...–
Zelenáč
~ Anonymní uživatel
1132 příspěvků
9. 1. 2015   #5
-
0
-

Byl to nějáký úkol do školy se kterým jsem si nevěděl rady...

Na vstup mám zadat jen velikost pole např. N=10  tzn. že program vytiskne pole 10x10 s hvězdičkama cik cak - viz první příspěvek..   (tam bylo pole 8x8 jen pro představu jak by to mělo vypadat - každý 3. znak hvězda a povedou šikmo dolů + každý 4. řádek změní směr... )

Nahlásit jako SPAM
IP: 176.97.245.–
ondrej39+1
Věrný člen
10. 1. 2015   #6
-
0
-

#5 Zelenáč
Celej program může vypadat nějak tahle...

// hvezdy.cpp : Defines the entry point for the console application.
//

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

int _tmain(int argc, _TCHAR* argv[])
{
	int velikost;
	std::cout << "Zadejte velikost pole: ";
	std::cin >> velikost;
	std::cout << std::endl;

	// Dynamická alokace dvourozměrného pole	
	char ** pole = new char*[velikost];
	for (int i = 0; i < velikost; ++i)
		pole[i] = new char[velikost];

	// naplnění pole nulami

	for (int i = 0; i < velikost; ++i)
		for (int j = 0; j < velikost; j++)
			pole[i][j] = '0';

	// doplnění hvězd
	int j = 0;
	int aktualni = 0;
	bool vpred = true;
	int pocet = 1;
	bool set = false;
	for (int i = 0; i < velikost; ++i)
	{
		if (vpred)
		{
			for (j; j < velikost;)
			{
				pole[i][j] = '*';
				j += 3;
			}
			if (j != 0 && j % 3 == 0)
			{
				j = 0;
				aktualni = 0;
			}
			j = ++aktualni;
			if (j % 3 == 0)
				j = 0;
			pocet++;
			if (pocet % 5 == 0)
			{
				pocet = 1;
				vpred = false;
			}
		}
		else
		{
			if (pole[i - 1][velikost - 1] == '*')
			{
				for (j = velikost - 2; j >= 0;)
				{
					pole[i][j] = '*';
					j -= 3;
				}
			}
			else if (pole[i - 1][velikost - 2] == '*')
			{
				for (j = velikost - 3; j >= 0;)
				{
					pole[i][j] = '*';
					j -= 3;
				}
			}
			else
			{
				for (j = velikost - 1; j >= 0;)
				{
					pole[i][j] = '*';
					j -= 3;
				}
			}
			pocet++;
			if (pocet % 5 == 0)
			{
				j = 0;
				pocet = 1;
				vpred = true;
			}
		}
	}

	std::cout << "Tisk obsahu pole..." << std::endl;
	std::cout << std::endl;

	// tisk pole
	for (int i = 0; i < velikost; ++i)
	{
		for (int j = 0; j < velikost; j++)
		{
			if (pole[i][j] == '0')
				std::cout << "  ";
			else
				std::cout << pole[i][j] << " ";
		}
		std::cout << std::endl;
	}

	return 0;
}

Výsledek:

Připojen obrázek.


Je hodně, hodně pravděpodobné, že schopní programátoři na to najdou snazší řešení. Neprogramuji nijak dlouho, nicméně mnou navržený algoritmus je funkční, dělá, co má, iterace probíhají tak, jak mají.

EDIT: Ještě logicky nezapomeň takové pole na konci scopu smazat pomocí delete. To já jsem tam neudělal, jsem na to zapomněl, ale kdybys ten kód nechal, jak je, tak budeš mít memory leak.

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
Zelenáč
~ Anonymní uživatel
1132 příspěvků
10. 1. 2015   #7
-
0
-

#6 ondrej39
Skvěle !! Díky moc ! :)

Nahlásit jako SPAM
IP: 176.97.245.–
vitamin+8
Grafoman
10. 1. 2015   #8
-
0
-

#7 Zelenáč
Naco ti je pole, nestaci nieco taketo?

#include <iostream>

enum{
	N = 10,
};

int main(){
	for(unsigned i = 0; i < N*N; ++i){
		if(i%N == 0)std::cout << std::endl;
		if(i%3 == 0)std::cout << '*';
		else std::cout << '0';
	}
	
	return EXIT_SUCCESS;
}
Nahlásit jako SPAM
IP: 95.105.229.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
ondrej39+1
Věrný člen
10. 1. 2015   #9
-
0
-

#8 vitamin
Taky jsem si říkal, že rvát to do pole je skoro zbytečný, stačilo by dané znaky vypsat, nicméně i u toho vypisovacího skriptu je nutné ověřit to střídání po 4 řádcích (+ tvůj vypisuje diagonály v obráceném směru)...

Nahlásit jako SPAM
IP: 46.39.172.–
Inject all the dependencies!
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, 96 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ý