Kérj be egy számot, ami legalább 3. Ez megadja a kirajzolandó rombuszod méretét. A legteteje egy karakterből (". ") áll, és minden emelet 2-vel nő egészen a szám feléig (-1), ami után minden emelet kettővel csökken?
Mit javítsak a kódon, mert nem működik?
#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int main()
{
int szam,adott,R1,R2;
cout << "Rombusz nagysaga: ";
cin >> szam;
adott = (szam * 2) - 1;
for (int i = 0; i < adott; i++)
{
R1 = szam - i;
R2 = szam + i;
}
for (int j = 1; j < szam; j++)
{
if (j == R1 || j == R2)
{
cout << ".";
}
else
{
cout << " ";
}
cout << endl;
}
system("pause");
}
Na kész a fele, de a másik fele nem megy.
int szam,adott,R1,R2;
cout << "Rombusz nagysaga: ";
cin >> szam;
adott = (szam * 2) - 1;
for (int i = 0; i <= adott; i++)
{
R1 = szam - i;
R2 = szam + i;
for (int j = 1; j <= adott; j++)
{
if (j == R1 || j == R2)
{
cout << ".";
}
else
{
cout << " ";
}
}
cout << endl;
}
Ehhez egy kis megjegyzés:
A feladat szövegében a bekért szám magasságú rombusz kell, de te egy nagyobb rombuszt kezdesz el kirajzolni. Az adott helyett a szam változót kellene használnod.
A szam változót felezd el.
Az első sorban középre kell tenned egy jelet, elé szóközöket kell írnod. A következőben eggyel korábban kell kezdened, és eggyel később végezned (ez valami fel - i). Aztán ugyanez fordítva.
Most kipróbáltam a kódot, ez amúgy a program melyik fele?
Mert ez mást nem nagyon csinál csak összevissza kirak egy-egy pontot meg üres sort, ez elég nehezen nevezhető fél rombusznak.
Ezt írtam át, mert így kitöltötte:
int h, i, j;
cout << "Please enter the hight : " << endl;
cin >> h;
for (i = 1;i <= h;i++) {
for (j = i;j < h;j++) {
cout << " ";
}
for (j = 1;j <= i + i - 1; j++) {
if (j < 2 || j > i + i - 2)
cout << ".";
else
cout << " ";
}
cout << endl;
}
for (i = h - 1;i >= 0;i--) {
for (j = i;j < h;j++) {
cout << " ";
}
for (j = 1;j <= i + i - 1; j++) {
if(j < 2 || j > i + i -2)
cout << ".";
else
cout << " ";
}
cout << endl;
}
return 0;
Az eredeti javítva:
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int szam, adott, R1, R2;
cout << "Rombusz nagysaga: ";
cin >> szam;
adott = (szam * 2 ) - 1;
for (int i = 0; i <= szam; i++)
{
R1 = szam - i;
R2 = szam + i;
if (i > szam / 2)
{
R1 = i;
R2 = (2 * szam) - i;
}
for (int j = 1; j <= adott; j++)
if (j == R1 || j == R2) cout << ".";
else cout << " ";
cout << endl;
}
system("PAUSE");
return 0;
}
Rövidebb megoldás hibakezeléssel:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int hossz, X, Y;
cout << "Oldalhossz (3<=): ";
while (!(cin >> hossz) || hossz < 3) {
cout << "Hibas input, ujra: ";
cin.clear();
cin.ignore(INT_MAX, '\n');
}
for (int i = 1; i < hossz * 2; ++i) {
for (int j = 1; j < hossz * 2; ++j) {
X = abs(j - hossz);
Y = abs(i - hossz);
cout << (((X + Y) == (hossz - 1)) ? '.' : ' ');
}
cout << endl;
}
return 0;
}
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!