Kann ich das Programm ohne 2 Schleifen schreiben?

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.

Colemak 
Fragesteller
 31.08.2023, 22:47

Wäre das performance oder Speichertechnisch besser ?

0
KarlRanseierIII  31.08.2023, 22:49
@Colemak

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.

0

Wenn ich das richtig verstanden habe … Klar geht das.

Colemak 
Fragesteller
 31.08.2023, 22:48

Was wäre bzgl. der Performance besser ?

0
FaTech  31.08.2023, 22:49
@Colemak

Bin mir mit Strings in C eher unsicher. In CSharp kann hierbei die Performance leiden. Was du machen kannst, ist mit Pointern und Arrays arbeiten. Hierbei sollte die Performance viel besser sein und es wäre weiterhin nur eine Schleife

0

"...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

Woher ich das weiß:Studium / Ausbildung – Dipl. Math., BOS, Elektronik/Elektriker, Lebenserfahrung

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.