Struktogramm
-
Hallo,
ich muss ein Struktogramm für folgendes Programm erstellen:
#include<stdio.h> void main() { /*Definition der verwendeten Variablen mit Datentyp*/ int i, d; int z=0; /*Deklaration des structs zeile DIN1449*/ typedef struct { int d; int l; char toleranz[4]; double r; } zeileDIN1449; /*Definition und Initialisierung der tabelle DIN748*/ zeileDIN1449 tabelleDIN1449[9] ={ {20, 36, "m6", 3.4}, {25, 42, "m8", 4.1}, {30, 58,"m10", 4.5}, {40, 82,"m12", 7.1}, {50, 82,"m16", 7.1}, {60,105,"m20", 8.6}, {70,105,"m24", 9.6}, {80,130,"m30",10.8}, {90,130,"m30",12.3}, }; printf("**********************************************\n"); printf("* Suche in DIN1449 *\n"); printf("**********************************************\n\n"); do { printf("Bitte geben Sie einen Durchmesser zwischen 20 und 90 ein!\n\n"); printf("Bitte Durchmesser eingeben: "); scanf("%i",&d); } while(d < 20 || d > 90); if (d==90) z=8; for(i=0; i<8; i++) { if(tabelleDIN1449[i].d <= d && d < tabelleDIN1449[i+1].d) { z=i; break; /* Eintrag gefunden, beenden der Schleife*/ } } printf("\nDie Daten fuer das Wellenende mit dem Durchmesser d=%i:\n",d); printf("Laenge l = %i \nToleranzfeld = %s \nRadius r = %f\n\n", tabelleDIN1449[z].l,tabelleDIN1449[z].toleranz,tabelleDIN1449[z].r); }
Habe dazu jetzt zwei Fragen:
1. Wie bringe ich diesen Teil im Struktogramm unter:
int i, d; int z=0; typedef struct { int d; int l; char toleranz[4]; double r; } zeileDIN1449; zeileDIN1449 tabelleDIN1449[9] ={ {20, 36, "m6", 3.4}, {25, 42, "m8", 4.1}, {30, 58,"m10", 4.5}, {40, 82,"m12", 7.1}, {50, 82,"m16", 7.1}, {60,105,"m20", 8.6}, {70,105,"m24", 9.6}, {80,130,"m30",10.8}, {90,130,"m30",12.3}, };
2. Muss ich dan z.B. bei der Ausgabe nur "Ausgabe" schreiben oder auch "Länge l = %i" usw.?
Vielen Dank für eure Hilfe!
LG
Chris
-
Also wiki sagt ein Struktogramm ist ein DIN-genormtes Nassi-Shneiderman-Diagramm, und dort ist als Beispiel angeführt, dass du einfach Ausgabe daswasausgegebenwird schreibst. Heißt du musst wirklich hinschreiben was ausgegeben wird, allerdings nicht %i sondern eine Zahl. Wahrscheinlich ist das hier DIN-gerecht:
~Ausgabe Laenge l = tabelleDIN1449[z].l
Toleranzfeld = tabelleDIN1449[z].toleranz
Radius r = tabelleDIN1449[z].r~
Oder wie auch immer du Variablen im Struktogramm benennst.Variablendeklarationen scheinen nicht Teil eines Struktogramms zu sein, also taucht int i, d; nicht im Struktogramm auf. Definitionen sind allerdings Teil des Struktogramms, also wäre int z=0; im Struktogramm z:=0 mit Kästchen drumrum.
Leider steht bei wiki nichts über Arrays, Tabellen oder ähnliches, also wirst du dir eine Schreibweise ausdenken müssen (eine Tabelle hinmalen) oder die C-Schreibweise übernehmen. Es gibt bei den Links bei Wiki einige Seiten wo man Struktogramme bauen kann, wahrscheinlich haben die eine Möglichkeit Tabellen einzufügen.
-
http://www.bilder-hochladen.net/files/csny-2-jpg.html
Das ganze müsste dnan so aussehn? Falls was fehlt oder falsch ist bitte sagen..
-
So wie ich wiki verstehe gehört das typedef da nicht rein. Außerdem "Eingabe des Durchmessers ...." auch nicht. Gleichheitszeichen bedeuten Gleichheit, nicht Zuweisung im Diagramm. Also musst du z:=8 schreiben statt z = 8. Dieses i=0; i<8; i++ funktioniert auch nicht. Das muss so hier aussehen: http://upload.wikimedia.org/wikipedia/commons/9/9d/Zaehlschleife.png
Halte dich einfach an die Wikivorgaben ( http://de.wikipedia.org/wiki/Struktogramm ), dann sollte das schon passen.
-
Okay, kommt nur das typedef nicht rein oder auch die Tabelle mit den Werten?
Und ist die break Anweisung so richtig gelöst?
Und was kommt anstattdessen rein für "Eingabe des Durchmessers"?
-
Nur das typedef kommt weg, die Werte müssen stehen bleiben. Prinzipiell muss alles was C-spezifisch ist draußen bleiben und alles was in jeder Programmiersprache drin sein muss drin sein. Wahrscheinlich solltest du statt einer Tabelle Einzelvariablen hinschreiben.
Das Beispiel bei wiki hat garnichts für die Eingabe. Vielleicht ist auch nur wiki falsch wer weiß. Hast du keine Referenz bekommen wie ein Struktogramm auszusehen hat?
Bei deinem break scheint das Ziel zu fehlen. Also wohin gesprungen wird. Wahrscheinlich solltest du in die Box mit dem |< noch Ausgaben schreiben, damit klar ist, dass er nach Ausgaben springt.
Wenn ihr eine andere Definition für Struktogramm als wiki habt ist das übrigens alles Quatsch was ich geschrieben habe.
-
Wir haben zwar eine kleine Referenz aber da steht rein garnichts drin.. nichtmal alle Teile eines Struktogramms..
-
So ich habe das ganze nochmal etwas umgebaut:
http://www.bilder-hochladen.net/files/csny-3-jpg-nb.html
Die Frage wäre allerdings weiterhin was mache ich mit den struct sachen - das steht nirgendwo erklärt..
-
checkner schrieb:
Die Frage wäre allerdings weiterhin was mache ich mit den struct sachen - das steht nirgendwo erklärt..
so wie's aussieht, einfach ein kästchen ganz oben drüber: http://upload.wikimedia.org/wikipedia/commons/d/d0/StruktErweitert.png
-
Okay..
Hab jetzt noch ne andere Frage udn zwar hab ich versucht ein "Programm beenden J/N" einzubauen, allerdings sagt er mir jetzt bei folgendem Programm das "exit" ein nichtdeklrarierter Bezeichner ist
// Suchen in Tabelle DIN1449 (lang) // Datum: 26.12.2009 #include<stdio.h> #include<ctype.h> void exitprog() { printf("Wollen Sie das Programm Beenden(J/N)? > "); if( tolower( getchar() ) == 'j' ) exit( 0 ); return; } // Hauptprogramm void main() { while( 1 ) { /*Definition der verwendeten Variablen mit Datentyp*/ int i, d; int z=0; /*Deklaration des structs zeileDIN1449*/ typedef struct { int d1; // Variable für Durchmesser d1 int l1; // Variable für Länge l1 double nt; // Variable für Nuttiefe char d2[4]; // Datenfeld für Innengewinde d2 } zeileDIN1449; /*Definition und Initialisierung der tabelle DIN1449*/ zeileDIN1449 tabelleDIN1449[9] ={ {20, 36, 3.4, "m6"}, {25, 42, 4.1, "m8"}, {30, 58, 4.5,"m10"}, {40, 82, 7.1,"m12"}, {50, 82, 7.1,"m16"}, {60,105, 8.6,"m20"}, {70,105, 9.6,"m24"}, {80,130,10.8,"m30"}, {90,130,12.3,"m30"}, }; // Ausgabe der Programminformationen, Autor und Matrikelnummer printf("\n\n**********************************************\n"); printf("* Suche in Tabelle DIN1449 (lang) *\n"); printf("**********************************************\n\n"); // Fußgesteuerte Schleife zur Eingabe des Durchmessers do { printf("\n\nBitte geben Sie einen Durchmesser zwischen 20 und 90 ein!\n\n"); // Aufforderung zur Eingabe des Durchmessers printf("Bitte Durchmesser eingeben: "); // den eingegebenen Wert als Ganzzahl (Integer) in die Variable "d" schreiben scanf("%i",&d); } // läuft solange d < 20 oder d > 90 ist while(d < 20 || d > 90); // Wenn d = 90 ist, dann ist z = 8 if (d==90) z=8; // Endlosschleife for(i=0; i<8; i++) { // Wenn diese Bedingung erfüllt ist.. if(tabelleDIN1449[i].d1 <= d && d < tabelleDIN1449[i+1].d1) { // ..wird i, z zugewiesen z=i; // Eintrag wurde gefunden, Schleife wird mit dem break-Befehl beendet break; } } // Ausgabe des eingegebenen Durchmessers printf("\nDie Daten fuer das Wellenende mit dem Durchmesser d1 = %i:\n\n",d); // Ausgabe der passenden Werte, zu dem eingegebenen Durchmessers, aus der Tabelle printf("Laenge l1 = %i \nNuttiefe = %.1f \nInnengewinde d2 = %s\n\n", tabelleDIN1449[z].l1, tabelleDIN1449[z].nt, tabelleDIN1449[z].d2); exitprog(); } } // Programmende
-
exit ist in der stdlib deklariert, du musst ein #include <stdlib.h> einbauen.
-
ok danke funktioniert