Was bringt mir dieses Programm?

Marc2100

Cadet 4th Year
Registriert
Juni 2004
Beiträge
91
Hallo Leute, wir haben von unserem Informatik Lehrer aufbekommen, ein Struktogramm zu "entschlüsseln", also herauszufinden wozu das Pogramm gut sein soll. Komme da aber einfach nicht weiter, keine Ahnung wofür das gut sein soll.

Das Struktogramm und das fertig kompilierte Programm (von mir geschrieben) sind Anhang.

Hoffe jemand hat da ne idee......

Grüße
Marc2100
 

Anhänge

  • Aufgabe1.rar
    Aufgabe1.rar
    156,4 KB · Aufrufe: 152
  • rätsel.JPG
    rätsel.JPG
    24,2 KB · Aufrufe: 401
Zuletzt bearbeitet:
Hm... Na Hausaufgaben sollte man aber selbst machen... ;)

Also: Keine Lösung, aber ein Tipp: Schreibe dir doch einfach mal ein Trace zu dem Programm auf. Dann dürfest du es erkennen.
 
Also es ist ja nicht, dass ich das nicht probiert hätte, ich bin aber nicht weitergekommen. Ich dachte die Verzweiflung wäre aus dem ersten Post erkenndbar ^^

Die Menschen wären auch besser dran, wenn sie ihre Computerprobleme selber lösen könnten....aber trotzdem gibts ForumBase^^ Nene, nur Spaß.

Aber was genau meinst du mit Trace? In Wikipedia wird mir da nur ein Weltraumteleskop angezeigt^^

Geschrieben habe ich das Programm ja schon selbst, um besser nachzuvollziehen, was für eine Funktion das Programm hat, ich komm aber nicht dahinter.

Wozu sollte man soetwas brauchen?
 
Mach deine HÜ gefälligst selbst, Schüler! :)

mfg,
Markus
 
Ein Trace kann man zu allen Schleifen erstellen. Man schreibt praktisch auf, was die Schleife macht. Für jeden Schleifendurchgang eine Zeile. In die Spalten trägt man die Variablen ein. So kann man gut nachverfolgen, wann sich wie was ändert.

Übrigens: Dein Programm muss falsch sein. Laut Struktogramm wird bei jedem Schleifendurchgang die Variable n ausgegeben. Bei dir werden allerdings immer nur drei Werte ausgegeben. Da kann irgendwas nicht stimmen...
 
ich sag jetzt mal spontan. umso größer z, desto größer n und s :)
 
Ich weiß was euer Lehrer damit bezwecken will. Hat was mit der Binärdarstellung von den 2er Potenzen zu tun. So als kleiner tip :D
Achja, dein Programm erfüllt nicht exakt die Vorgaben, welche aus dem Struktugramm hervorgehen.
Bei deiner Ausgabe ist nur einmal das n zu sehen.
Es müssen aber alle n ersichtlich sein, also für jeden schleifendurchgang eine ausgabe für n, plus der Initialausgabe.
(z.B.: z=5 -> 6 ausgaben für n)

Das s passt soweit.
Ansonsten noch viel Spaß mit der Aufgabe.
 
Zuletzt bearbeitet:
Da ich auch gerade am C++ Lernen bin, hab ich die Aufgabe mal so gelöst wie ich sie gemacht hätte :)

PHP:
#include <iostream>
using namespace std;

int main()
{
    int z;
    int s=1,n=1;
                
         cout << "Bitte geben Sie eine beliebige Zahl ein:\n";
         cin >> z;
         cout << "\nN ist: "; 
         cout << n;
         int i;
         for (i=1;i<=z;i++)
              {
               n= (n*2);
               s= (s+n);
               cout << "\nN ist: "; 
               cout << n;
              }
         cout << "\nS ist: ";     
         cout << s;
    return 0;    
}

Hoffe ich hab das Struktogramm richtig verstanden :freaky: :freak:
 
Ein paar kleine Anmerkungen dazu:

- cin >> z; Das ist böse, da Buffer-Overflow-Gefahr besteht, siehe hier: https://buildsecurityin.us-cert.gov/daisy/bsi-rules/home/g1/714.html

PHP:
cout << "\nN ist: "; 
cout << n;
Kannst du auch in eine Zeile schreiben - der Übersichtlichkeit halber. Außerdem sollte man std::endl statt \n benutzen - ebenfalls der Übersichtlichkeit wegen, also so:

cout << endl << "N ist: " << n << endl;

- Anstatt n= (n*2); kannst du auch n *= 2; schreiben. Genauso für s= (s+n); kannst du s += n; verwenden.
 
Danke für den Hinweis :).

Wenn ich deinen Link richtig interpretiert hab hätte das "cin" so aussehen müssen?

PHP:
cin.width(2147483647);
cin >> z;

Und deine anderen Schreibweisen:

Ich finde das die "lange" Schreibweise einfach übersichtlicher ist :cool_alt:
 
Bei dir brauchst du's jetzt nicht, weil du in nen integer schreibst - gefährlich wird's bei Strings - und da musst du width auf die maximale Anzahl der Buchstaben setzen.
 
gefährlich ist es bei strings auch nicht. gefährlich ist es einzig und allein, wenn du damit ein statisches array vollschreiben willst. nur wer nutz noch ernsthaft solche char-buffer, wenn man wie in c++ eine stringklasse hat, die die ganze sache eleganter lösen kann und auch nicht ernsthaft langsamer ist?

das width vor dem einlesen eines int zu setzen, ist völlig zweckbefreit, weil es sich bei einem int um kein feld handelt...
 
Ach es gibt viele C-Progger, die noch chars benutzen - auch in c++ ;)
 
die nutzen auch noch scanf, weil es schneller ist... aber mal ernsthaft den letzten statischen eingabepuffer, der mir untergekommen ist, liegt schon lange zurück. das problem ist doch recht einfach: der statische buffer verbraucht immer den gleichen platz und kann überlaufen. ein dynamischer string ist in der regel deutlich kleiner als der buffer wäre (weil der buffer ja für den hypothetischen maximalwert ausgelegt werden muss...) und kann dazu nicht überlaufen.

wenn du schon vor irgendwelchen gemeinheiten in c++ warnen willst, nimm doch etwas, was man nicht sofort erwartet, also bspw: der []-operator bei vector/string und co ist nicht unbedingt sicher, sondern bildet in c++ den klassischen []-operator ab und muss entsprechend keine begrenzungsprüfungen durchführen. dafür gibt es die at()-funktion.
 
Zuletzt bearbeitet:
Zurück
Oben