Raute mit Loch
-
Hallo
Ich denke mein Problem ist sicher ein Änfängerproblem, doch ich komme leider nicht weiter.Also ich muss ein Programm erstellen, wo ich eine Raute mit einem Loch aus geben muss.
Eingeben werden muss 1. groesse und 2. wandstärke.
Es müsste folgendermaßen aussehen wenn man bei punkt 1. 10 und bei 2. 3 eingibt..........* ........** .......*** ......**** .....***** ....****** ...***.*** ..***..*** .***...*** ***....*** ***....*** ***...*** ***..*** ***.*** ****** ***** **** *** ** *
Nun zu meinem Problem: Ich bekomme eine ungefüllte raute hin mit einigen fo-schleifen, doch das Loch konnte ich bisher nicht realisieren.
Es wäre super, wenn mir jemand dabei helfen könnte.
Bin total verzweifel, vorallem weil ich diese Aufgabe unterallen umständen lösen muss und ich schon einige stunden davor gessen habe und es nicht geschaft hab.Vielen Dank schonmal im vorraus
Theresa
edit(volkard): code-tags, damit das bild nicht verrutscht.
-
Nur so als Lösungsansatz... (nicht wirklich getestet und unschön)
Benötigter Header: <iomanip>
void print(const int lineWidth, const int nrStars) { int l = 0; int middleSpace = 0; for(unsigned int i = 1; i <= 2 * nrStars; ++i) cout << setw(lineWidth - (i)) << setfill(' ') << ' ' << setw(i) << setfill('*') << '*' << endl; for(unsigned int i = 1; (2 * nrStars + i) < lineWidth; ++i) { cout << setw(lineWidth - (2 * nrStars + i)) << setfill(' ') << ' ' << setw(nrStars) << setfill('*') << '*'; cout << setfill(' ') << setw(i) << ' ' << setw(nrStars) << setfill('*') << '*' << setfill(' ') << endl; } for(unsigned int i = lineWidth, j = 4; i > 2 * nrStars; --i, --j) cout << setfill('*') << setw(nrStars) << '*' << setfill(' ') << setw(j) << ' ' << setfill('*') << setw(nrStars) << '*' << setfill(' ') << endl; for(unsigned int i = 2 * nrStars; i >= 1; --i) cout << setw(i) << setfill('*') << '*' << endl; }
Caipi
-
Ich wär für etwas in der Art:
#include <algorithm> #include <iostream> #include <iterator> #include <list> #include <string> int main() { int s, w; std::list<std::string> ls; std::cin >> s >> w; for(int i = 1; i <= s; ++i) { ls.push_back(std::string(s - i, ' ') + (i > w * 2 ? std::string(w, '*') + std::string(i - w * 2, ' ') + std::string(w, '*') : std::string(i, '*'))); } std::copy(ls.begin(), ls.end(), std::ostream_iterator<std::string>(std::cout, "\n")); for(std::list<std::string>::iterator i = ls.begin(); i != ls.end();++i) std::reverse(i->begin(), i->end()); std::copy(ls.rbegin(), ls.rend(), std::ostream_iterator<std::string>(std::cout, "\n")); }
Ist mit Sicherheit nicht der schnellste Ansatz, aber er funktioniert.