Muster über Schleifen programmieren
-
Hallo Leute!
Ich habe eine Aufgabe erhalten, in welcher von mir erfordert wird, dass folgendes Muster auf dem Bildschirm ausgegeben wird, wenn die Werte Breite=9 und Hoehe=7 eingegeben werden:
+++++++++
++
+-------+
++
+-------+
+*******+
+++++++++Mein vorläufiger Ansatz ermöglicht es mir zumindest den Rahmen inklusive sternenlastigen Inhalt zu generieren, aber mit den wechselnden Symbolen hapert es zumindest noch. Würde eventuell noch mal ein If-Abfrage einfügen, die nach ungerade und geraden Zeilen fragt, habe aber das Gefühl, dass dann die erste und letzte Reihe überschrieben wird, also bin ich ein bischen planlos.
Meine Ausgabe momentan sieht wiefolgt aus:
+++++++++
++
++
++
++
+*******+
+++++++++Mein Quellcode lautet wiefolgt:
#include <iostream> using namespace std; int main() { int hoehe = 0; int breite = 0; int x = 0; int y = 0; cout << "Bitte geben Sie die Breite des Rechtecks ein: "; cin >> breite; cout << "Bitte geben Sie die Hoehe des Rechtecks ein: "; cin >> hoehe; cout << endl; for (y=0;y<hoehe;y++) { for (x=0;x<breite;x++) { if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1)) { cout << "+"; } else { cout << "*"; } } cout << endl; } cout << endl << endl << "Programmende!"; cin.get();cin.get(); return 0; }Danke im Voraus für alle Beteiligungen.
-
du könntest ja das erste/letze Zeile muster in eine eigene Funktion auslagern.

-
Wo ist das Problem?
Genau wie bisher, nur dass hier:
else { cout << "*"; }jetzt ein
else { if(blabla) ... else ... }stehen muss. Dann überschreibst du auch weiterhin nix.
-
@Fencer: Ich darf leider wirklich nur mit Schleifen und If-Abfragen aud die Lösung kommen, trotzdem danke für die Antwort.
@Jockelx:
Also ich habe den Teil dann jetzt umgeändert zu:for (y=0;y<hoehe;y++) { for (x=0;x<breite;x++) { if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1)) { cout << "+"; } else if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1)) { cout << "-"; } else { cout << "*"; } } cout << endl; }Allerdings ist die Ausgabe dadurch unverändert. Bin allerdings auch Anfänger und weiß nicht hundertprozentig Bescheid.
-
if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1)) // ... else if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1))Erklär doch mal bitte den Unterschied, ich sehe nämlich keinen

-
SeppJ schrieb:
if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1)) // ... else if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1))Erklär doch mal bitte den Unterschied, ich sehe nämlich keinen

Upps;)
Habe jetzt folgendes draus gemacht:
if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1)) // ... else if (y>1)Dadurch habe ich jetzt zumindest schonmal folgendes Bild:
+++++++++
+*******+
+-------+
+-------+
+-------+
+-------+
+++++++++Also irgendwie weiß ich jetzt nicht, wie ich in die Reihen nach der ersten Minusreihe die wechselnden Vorzeichen weiterführe?
-
Du musst genauer lesen. Du solltest nur
cout << "*";ersetzen durch
if(bla)elseOder übersichtlicher:
for (y=0;y<hoehe;y++) { for (x=0;x<breite;x++) { if ((y==0) || (y==hoehe-1) || (x==0) || (x==breite-1)) { cout << "+"; } else { if(geradereihe) cout << .... else.... } } cout << endl; }
-
#include <iostream> using namespace std; int main() { const int hoehe = 7; const int breite = 9; int x; int y; for (y = 0; y < hoehe; y++) { for (x = 0; x < breite; x++) { if ( y == 0 // Erste Zeile? || y == (hoehe - 1) // Letzte Zeile? || x == 0 // Erste Spalte? || x == (breite -1) // Letzte Spalte? ) cout << "+"; else if (y % 2 == 1) // Ungerade Zeile? cout << "*"; else // Gerade Zeile! cout << "-"; } cout << endl; } }Working like a charm!
Einfach logisch an die Sache heran gehen.
-
@jockel: Supi habs geschafft, danke für die Hilfe.
@MuhkuhDeluxe: Jo, so hab ichs nun auch gemacht. Wenn einem die Sicherheit fehlt, sieht man aber manchmal den Baum vor lauter Wäldern nicht
-
[Edit] Zu langsam, Modulo Vorschlag gelöscht