Hogyan lehet C++-ban egy akkora négyzetet kiírni, mint a beírt szám?
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
//Előbb kirajzolod csak a tetejét
for (int Col = 0; Col < Value; Col++)
.. std::cout << "-";
std::cout << std::endl;
//Majd a bal és jobb oldalát
for (int Row = 1; Row < Value - 1; Row++) {
.. //A sor elején állunk, rajzoljuk a bal oldalát
.. std::cout << "|";
.. //A maradék helyet szóközzel töltjük fel
.. for (int Col = 1; Col < Value - 1; Col++)
.. .. std::cout << " ";
.. //Majd a jobb oldalát is kirajzoljuk
.. std::cout << "|";
.. std::cout << std::endl;
}
//Majd az alját (ugyanaz a kód, mint a tetejét kirajzoló)
for (int Col = 0; Col < Value; Col++)
.. std::cout << "-";
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
ha ASCII karakterekre gondolsz, akkor a legegyszerűbb:
for (unsigned int i = 1; i <= sorok_szama; i++)
{
for (unsigned int j = 1; j <= oszlopok_szama; j++)
{
// Ha az első vagy utolsó sorban, vagy első vagy utolsó oszlopban vagyunk, írja ki a karaktert, amiből a négyzet áll, különben írjon egy szünetet
if (i == 1 || j == 1 || i == sorok_szama || j == oszlopok_szama)
std::cout << '#';
else
std::cout << ' ';
// Ha ez az utolsó oszlop, új sor is kell
if (j == oszlopok_szama)
std::cout << std::endl;
}
}
Bár ez bármilyen téglalapot kirajzol, nem csak négyzetet. Ez nem is olyan effektív, inkább egyszerű.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Windows alatt:
bool DrawRectangle(int width, int height, char ch)
{
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (!hOutput)
return false;
CONSOLE_SCREEN_BUFFER_INFO csbi = {0};
GetConsoleScreenBufferInfo(hOutput, &csbi);
for (int i = 0; i < width; i++)
std::cout << ch;
SetConsoleCursorPosition(hOutput, COORD{(SHORT)0, (SHORT)(csbi.dwCursorPosition.Y + height - 1)});
for (int i = 0; i < width; i++)
std::cout << ch;
for (int i = csbi.dwCursorPosition.Y + 1; i < height - 1; i++)
{
SetConsoleCursorPosition(hOutput, COORD{(SHORT)0, (SHORT)(csbi.dwCursorPosition.Y + i)});
std::cout << ch;
SetConsoleCursorPosition(hOutput, COORD{(SHORT)(width - 1), (SHORT)(csbi.dwCursorPosition.Y + i)});
std::cout << ch;
}
SetConsoleCursorPosition(hOutput, COORD{(SHORT)0, (SHORT)(csbi.dwCursorPosition.Y + height)});
return true;
}
int main()
{
DrawRectangle(25, 11, '@');
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD{(SHORT)6, (SHORT)5});
std::cout << "Hello World!";
std::getchar();
return 0;
}
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Ui.:
Azt elfelejtettem megoldani ha írtak előtte már, jól működjön de azt már te is megtudod oldani ha kell.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!