Buchstaben im form von Raute ausdrucken
-
guten abend
ich habe ein kleines problem
ich soll ein c++ programm schreiben, der mir bei der eingabe eines buchstaben eine Raute aus buchstaben zeichnet
z.B ich gebe den buchstaben D ein dann macht der so etwas...A
..BBB
.CCCCC
DDDDDDD
.CCCCC
..BBB
...Adie punkte sind nur dafür da, weil ich nicht weiß, wie ich die leerzeichen einfüge. wenn ich auf vorschau drücke, dann sind alle buchstaben direkt am anfang der zeile
am besten ein programm mit der for schleife oder while schleife, damit ich es auch verstehe. weil in der uni sind wir erst bei diesen 2 schleifen angekommen.
vielen dank
-
Ist doch einfach. Nimm eine Schleife und los gehts.
-
Du kannst Schleifen in Schleifen machen. Insbesondere kannst du auch Variablen einer äußeren for-Schleife im Kopf einer inneren Schleife benutzen. Und du kannst die verrücktesten Abbruchbedingungen und Zählanweisungen benutzen, es muss nicht immer stupides Zählen von 0 bis N sein. Hier bietet sich eventuell an, teilweise rückwärts zu zählen. Und eines noch: 'D' - 'A' ist gleich 4, was hier wohl auch nützlich zu wissen ist (An alle Klugscheißer: Ja, das gilt nicht immer. Und ihr wisst, dass ich das weiß. Aber es gilt so verbreitet, dass er sich darum keinen Kopf machen sollte).
-
Edit: siehe unten
-
Halt Halt Halt!
#include <iostream> #include <string> int main() { using std::cout; using std::string; cout << "Type in Character: "; char ch(std::cin.get()); for(char A('A');A <= ch;++A) cout << string(ch - A, ' ') << string((A - 'A') * 2 + 1, A) << '\n'; for(char A(ch - 1);A >= 'A';--A) cout << string(ch - A, ' ') << string((A - 'A') * 2 + 1, A) << '\n'; }
-
vielen dank für die schnellen antworten
aber leider habe ich wie in allen anderen fächern das problem, dass ich eine aufgabe erst dann verstehe, wenn eine gelöste aufgabe vor mir legt.danach kann ich alle anderen aufgaben lösen, die ein ähnliche frage beeinhaltet. kann es also nicht durch erklärung von reiner schrift verstehen. muss schon eine gelöste aufgabe vor mir legen.
-
@Hacker:
In der A Zeile ist 1 'A', in der B Zeile 3 'B', dann wird's auch symmetrisch.Und den Umweg über String halte ich 1. für umständlich, 2. für den Threadersteller nicht verständlich und 3. an der Aufgabenstellung vorbei (man muss auch immer ein bisschen mitdenken, was wohl verlangt wird, sonst geht das bei Schulaufgaben schnell daneben). Aber wenn's dir Spaß macht...
-
SeppJ schrieb:
@Hacker:
In der A Zeile ist 1 'A', in der B Zeile 3 'B', dann wird's auch symmetrisch.Hab ich doch schon. Oben. Und was findest du am Umweg mit string umständlich (tut mir Leid, schon wieder editiert
)?
-
Mohamedyarub schrieb:
vielen dank für die schnellen antworten
aber leider habe ich wie in allen anderen fächern das problem, dass ich eine aufgabe erst dann verstehe, wenn eine gelöste aufgabe vor mir legt.danach kann ich alle anderen aufgaben lösen, die ein ähnliche frage beeinhaltet. kann es also nicht durch erklärung von reiner schrift verstehen. muss schon eine gelöste aufgabe vor mir legen.
Das ist hier äußerst ungern gesehen. Besonders da du hier auch noch andere Threads am Laufen hast, wo du die einfachsten Dinge nicht umsetzen kannst. Glaubst du, wir werden dir den Rest des Semesters (hast du noch keine Ferien?) die Hausaufgaben machen? Das ist Kinderkram für die erste oder zweite Woche wonach du hier fragst, die Aufgaben werden sehr schnell viel schwieriger werden! Wenn du dir jetzt keine Mühe gibst, kannst du auch gleich abbrechen.
-
SeppJ schrieb:
Mohamedyarub schrieb:
vielen dank für die schnellen antworten
aber leider habe ich wie in allen anderen fächern das problem, dass ich eine aufgabe erst dann verstehe, wenn eine gelöste aufgabe vor mir legt.danach kann ich alle anderen aufgaben lösen, die ein ähnliche frage beeinhaltet. kann es also nicht durch erklärung von reiner schrift verstehen. muss schon eine gelöste aufgabe vor mir legen.
Das ist hier äußerst ungern gesehen. Besonders da du hier auch noch andere Threads am Laufen hast, wo du die einfachsten Dinge nicht umsetzen kannst.
Das wusste ich jetzt nicht. Pfui, schäm dich!
-
Hacker schrieb:
SeppJ schrieb:
@Hacker:
In der A Zeile ist 1 'A', in der B Zeile 3 'B', dann wird's auch symmetrisch.Hab ich doch schon. Oben. Und was findest du am Umweg mit string umständlich (tut mir Leid, schon wieder editiert
)?Musst du das wirklich fragen? Wozu einen String aufbauen (was eine ganz schön teure Aktion ist!), wenn eine einfache, formatierte, zeichenweise Ausgabe gesucht ist? Zwei verschachtelte Schleifen und gut ist. Klar wird Effizienz hier keine Rolle spielen, aber wenn man es an den einfachen Beispielen nicht richtig macht, dann kann man es später nicht, wenn es wichtig wird.
Hacker schrieb:
Das wusste ich jetzt nicht. Pfui, schäm dich!
Du darfst ihm gerne helfen. Wunder dich bloß nicht, dass du der einzige sein wirst.
-
SeppJ schrieb:
Hacker schrieb:
SeppJ schrieb:
@Hacker:
In der A Zeile ist 1 'A', in der B Zeile 3 'B', dann wird's auch symmetrisch.Hab ich doch schon. Oben. Und was findest du am Umweg mit string umständlich (tut mir Leid, schon wieder editiert
)?Musst du das wirklich fragen? Wozu einen String aufbauen (was eine ganz schön teure Aktion ist!), wenn eine einfache, formatierte, zeichenweise Ausgabe gesucht ist? Zwei verschachtelte Schleifen und gut ist. Klar wird Effizienz hier keine Rolle spielen, aber wenn man es an den einfachen Beispielen nicht richtig macht, dann kann man es später nicht, wenn es wichtig wird.
So sieht es aher blöd aus:
#include <iostream> #include <string> #include <iomanip> int main() { using std::cout; cout << "Type in Character: "; char ch(std::cin.get()); for(char A('A');A <= ch;++A) { for(int ct(0);ct < ch - A;++ct) cout << ' '; for(int ct(0);ct < (A - 'A') * 2 + 1;++ct) cout << A; cout << '\n'; } for(char A(ch - 1);A >= 'A';--A) { for(int ct(0);ct < ch - A;++ct) cout << ' '; for(int ct(0);ct < (A - 'A') * 2 + 1;++ct) cout << A; cout << '\n'; } }
-
Hacker schrieb:
So sieht es aher blöd aus:
Dann mach, dass es schöner aussieht
.Da gibt es doch so viele Sachen, wie man das hübscher machen könnte, ohne unnötige temporäre Objekte zu erzeugen. Ich mag's aber nicht vormachen, da es dem Threaderstelelr sämtliche Initiative abnehmen würde, überhaupt noch etwas selber zu tun. Es bleibt daher dir als Knobelaufgabe überlassen, das selber zu verschönern, bis du zufrieden bist.
-
kann es sein, dass beide programme fehler haben?
keiner der beiden progs. klappen
-
Beide Programme sind absolut korrekt.
-
#include <iostream> template <typename T> struct valdef { typedef T value; }; template <char... C> struct string { static char const c_str[]; }; template <char... C> char const string<C...>::c_str[] = { C..., 0 }; template <typename, typename> struct append; template <char... C, char... D> struct append<string<C...>, string<D...>> : valdef<string<C..., D...>> {}; template <char C, unsigned N> struct make_string_n : valdef < typename append < typename make_string_n<C, N - 1>::value, string<C> >::value > {}; template <char C> struct make_string_n<C, 0> : valdef<string<>> {}; template <char C, unsigned Chars, char F, unsigned Fills> struct make_rhombus_line : valdef < typename append < typename append < typename make_string_n<F, Fills>::value, typename make_string_n<C, Chars>::value >::value, string<'\n'> >::value > {}; template <char C, unsigned Chars, char F, unsigned Fills> struct rhombus : valdef < typename append < typename make_rhombus_line<C, Chars, F, Fills>::value, typename append < typename rhombus<C + 1, Chars + 2, F, Fills - 1>::value, typename make_rhombus_line<C, Chars, F, Fills>::value >::value >::value > {}; template <char C, unsigned Chars, char F> struct rhombus<C, Chars, F, 0> : valdef<typename make_rhombus_line<C, Chars, F, 0>::value> {}; template <char C, char F> struct make_rhombus : valdef<typename rhombus<'A', 1, F, C - 'A'>::value> {}; int main() { std::cout << make_rhombus<'D', ' '>::value::c_str; }dumdidum
-
Aber mit Makros wäre es viel besser!
-
Hier stand Müll
-
Hatte vorher weche drin, aber ich hab dadurch Compile-Fehler bekommen, die ich nicht verstanden hab, also wieder raus. Aber ja, mit Makros wäre es zumindest einfacher zu lesen.
P.S.: Etwas schwacher Kommentar, dafür, dass ich mich nun ne Stunde hingesetzt hab.

-
314159265358979 schrieb:
P.S.: Etwas schwacher Kommentar, dafür, dass ich mich nun ne Stunde hingesetzt hab.

Das find ich jetzt aber cool, dass du dich hier so gut engagierst. Bin sicher, wenn der TE das dem Prof zeigt..