Kann ich das Programm ohne 2 Schleifen schreiben?
Man kann ja zwei schleifen machen einmal für die jeweilige Zeile und dann für die jeweiligen Spalten bzw Anzahl der Zeichen der Zeile
(Syntax kann falsch sein da ich C lange nicht mehr hatte)
würde es aber auch gehen wenn man ne Schleife macht von i=0 bis i< 5 und dann ein String erstellt und dann pro Durchlauf den String um ein * erhöht
also so char[5] s;
und dann in der Schleife immer um 1 ergänzt
s[i] = ‚*‘;
oder man könnte doch auch mit einem String anfangen der eine Länge von 1 hat und dann die Länge erhöhen und dann immer hinzufügen
und dann den String immer Printen
Also nur aus Interesse
5 Antworten
Ja, es ist durchaus möglich, ein solches Programm mit nur einer Schleife zu schreiben. Die Idee, einen String zu verwenden und ihn in jeder Iteration zu aktualisieren, ist eine gültige Herangehensweise.
Du könntest einen char-Array `s` mit genügend Platz für die Sterne und die Nullterminierung verwenden. In der Schleife fügst du dann einen Stern hinzu und setzt die Nullterminierung neu. Anschließend verwendest du `printf` zum Ausgeben des aktuellen Strings.
Hier ist ein einfaches Beispiel:
#include <stdio.h>
int main() {
char s[6]; // Platz für 5 Sterne und eine Nullterminierung
s[0] = '\0'; // Initial Nullterminierung
for(int i = 0; i < 5; ++i) {
s[i] = '*';
s[i + 1] = '\0'; // Nullterminierung
printf("%s\n", s);
}
return 0;
}
Dieses Beispiel verwendet nur eine Schleife, um das gewünschte Muster zu erzeugen.
Bitte Codes immer einfügen nicht als Foto über den Bildschirm.
Ja, natürlich ginge das.
Schwer zu sagen, da letztlich der Maschinencode auch im Speicher liegen muß. In Hinblick auf die Performance wäre die Variante mit 1 Schleife etwas besser.
Wenn ich das richtig verstanden habe … Klar geht das.
"...for Schleife i=0 bis i< 5 ... den String um ein * erhöht ..."
Klar, z.B. mit https://www.c-howto.de/tutorial/strings-zeichenketten/string-funktionen/strings-verketten/
Performance dürfte doch ier egal sein, oder? Textausgabe ist ja sowieso langsam...
Du kannst auch zuerst einen String mit "*****" erzeugen und dann eben nur n-zeichen davon ausgeben lassen
https://stackoverflow.com/questions/7899119/what-does-s-mean-in-printf
Das geht sogar ganz ohne Schleife. Und generell sind "unrolled loops", also ohne loop Konstrukt, von der Performance her minimal besser als Konstrukte mit Schleife - allerdings dürften einige moderne Compiler bei fester Antzahl Iterationen schon von selbst im Rahmen von Optimierung Schleifen unrollen.
Wäre das performance oder Speichertechnisch besser ?