"We are back" « oc.at

Flussdiagramme

Profimelker 28.12.2006 - 11:20 7283 21
Posts

Profimelker

Little Overclocker
Registered: Dec 2006
Location: WU
Posts: 79
Hallo zusammen!

Ich brauche eure hilfe zum Thema Flussdiagramme. muss nämlich für die Schule ein paar zeichnen. Wäre nett wenn mir jemand eine Anleitung zeigen könnte oder (noch besser) welche für mich zeichnen könnte. Ich stell hier mal 2 Programme rein, hab aber noch 4 od. 5 andere für die ich auch fludis brauche.

2. Programm:
#include<stdio.h>
#include<ctype.h>

int main()
{
int c;
while(1)
{
c=getch();
printf("Taste druecken: ");
if(c==3)
{
break;
}

if(isalpha(c))
printf("%2.2x %c Buchstabe\n",c,c);
{
if(isdigit(c))
printf("%2.2x %c Zahl\n",c,c);
}
}
getch();
}

1. Programm:
#include<stdio.h>

int main()
{
int a;
a=0;

while(a<=127)
{
if(a<=32)
printf("%3d %2.2x %8.8b\n",a,a,a);

else
printf("%3d %2.2x %8.8b %c\n",a,a,a,a);
a++;


}
getch();
}

Schon im voraus viel dank für eure hilfe!!
Bearbeitet von Profimelker am 03.01.2007, 18:40

Frys_Assassin

information keeper
Avatar
Registered: Oct 2001
Location: New New York
Posts: 2503
Und womit hast du jetzt ein Problem?
Klingt nach Schule, habt ihr es im Unterricht nicht besprochen wie soetwas auszusehen hat?
Oftmals verstehen die Leute unterschiedliche Sachen unter einem "Flussdiagramm".
Wikipedia führt zu diesem Artikel: Programmablaufplan.
Mit dem dortigen Beispiel wirst vermutlich mal nen ersten Entwurf hinbekommen. Deine ersten Versuche kannst du dann ja posten und du wirst sicher Feedback dazu erhalten.

Edith: Zum Thema möcht ich noch loswerden dass die klassischen Flussdiagramme mittlerweile schon ordentlich angestaubt sind. UML (2.0) gehört die Welt. Damit lassen sie Abläufe meiner Ansicht nach vielschichtiger darstellen.
Bearbeitet von Frys_Assassin am 28.12.2006, 12:15

Profimelker

Little Overclocker
Registered: Dec 2006
Location: WU
Posts: 79
Danke erstmal
Ja wir haben es in der Schule durchgenommen aber bei der Lehrerin versteht es eh keiner (zumindest meine Ansicht, die Lehrerin sieht das vielleicht anders). Den Link den du gepostet hast, genau solch ein Flussdiagramm brauch ich für die Schule.
Die ersten Versuche werd ich sobald als möglich posten.

Profimelker

Little Overclocker
Registered: Dec 2006
Location: WU
Posts: 79
Hier meine ersten Versuche:
2.
zeichen-1.jpg
1.
asciitab-1.jpg

Wenn was falsch ist: BITTE SAGEN!!

Ich selbst hab auch noch ein paar Fragen.
Beim ersten geht das irgendwie anders als mitn isdigit u. isalpha?
Beim zweiten muss ich noch das a=0 irgendwie einfügen??
Bearbeitet von Profimelker am 03.01.2007, 18:40

rettich

Legend
waffle, waffle!
Avatar
Registered: Jan 2004
Location: wien
Posts: 794
was macht im ersten beispiel das "while" in einem eigenen kasti? das ding erklärt den ablauf, nicht die code-zeilen, die du verwendet wirst, um das programm später umzusetzen.

setze decisions ein, die du mit ja/nein beantworten kannst. für ein flussdiagramm durchaus auch mit einer formulierten frage (im extremfall etwa: "ist die eingegebene variable eine zahl? ja/nein"). dann wirds leichter zu lesen.

bei solch trivialen problemen reicht übrigens meist ein gemeinsamer endpunkt, zu dem alle wege führen.
Bearbeitet von rettich am 03.01.2007, 13:31

Ex0duS

Banned
Avatar
Registered: Mar 2001
Location: not near not far
Posts: 2982
Sorry komplett falsch ;)

es heisst While schleife .... insofern sollte dir klar sein das dein diagramm mindestens eine schleife enthalten muss, ich sehe keine einzige.

While heisst immer ...to etwas solange bis ein gewisser fall eintritt ... daher brauchst du in deinem diagramm eine schleife in der etwas gemacht wird, und eine eine abbruchbedingung bei der dann die schleife verlassen werden soll.

eine Anmerkung noch ...ist das dein code ? ... while(1) ist nie gut (ausgenommen vieleicht es handelt sich um ein µC programm, da diese ja meist unendlich lange laufen sollen ;)

Zitat von Frys_Assassin
Edith: Zum Thema möcht ich noch loswerden dass die klassischen Flussdiagramme mittlerweile schon ordentlich angestaubt sind. UML (2.0) gehört die Welt. Damit lassen sie Abläufe meiner Ansicht nach vielschichtiger darstellen.
nicht alles ist gleich ein Platform unabhängiger Java Server der abertausende clients bedienen muss ..... was ich damit sagen will .... wieso mit einem schlachtkreuzer auf tontauben schiessen ?
Bearbeitet von Ex0duS am 03.01.2007, 13:54

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
soweit mich ich erinnern kann, sollte dieser Code auch funktionieren

Code:
printf("Taste druecken: ");
while((c = getch()) != 3)
{
  printf("Taste druecken: ");
  if(isalpha(c))
    printf("%2.2x %c Buchstabe\n",c,c);
  else
  {
    if(isdigit(c))
     printf("%2.2x %c Zahl\n",c,c);
  }
}

mein vorschlag für das diagramm schaut so aus (schnell in paint erstellt):
click to enlarge

Indigo

raub_UrhG_vergewaltiger
Avatar
Registered: Mar 2001
Location: gigritzpotschn
Posts: 6715
da gibts ein nettes tool namens "easycase" das macht dir aus vorhandenem c-code solche diagramme, bzw. kannst du auch direkt via diagramm das programm "zeichnen"...

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
wobei IMMER zuerst das flussdiagramm da sein sollte und nicht erst der programmcode. denn VORHER überlegen was man baut und nicht mal drauf los arbeiten und dann 3mal umschreiben müssen.

Profimelker

Little Overclocker
Registered: Dec 2006
Location: WU
Posts: 79
Danke erstmal für das rege Interesse, ich werd dann meine Fehler ausbessern und posten. Aber jetzt hab ich mal ein paar neue Programme:
3.
#include<stdio.h>
#include<string.h>

int main()
{
char s[30];
int n;

while(1)
{
fgets(s,30,stdin);
s[strlen(s)-1]='\0';
n=strlen(s);
printf("%d Zeichen \n",n);
if(n==0)
{
printf("Keine Zeichen eingegeben!\n",n);
break;
}
}
getch();
}
click to enlarge

4.
#include<stdio.h>
#include<string.h>

int main()
{
char v[80],n[80],z[200];
int s;

while(1)
{
printf("Vorname\n",v);
fgets(v,80,stdin);
s=strlen(v);
v[strlen(v)-1]='\0';
if(s==1)break;

printf("Nachname\n");
fgets(n,80,stdin);
s=strlen(n);
n[strlen(n)-1]='\0';
strcpy(z,v);
strcat(z," ");
strcat(z,n);
printf("Danke fuer deine Mitarbeit, %s!\n",z);
}
getch();
}
click to enlarge

5.
#include<stdio.h>

int main()
{
FILE *out;
int z;

z=0;
out=fopen("ASCIITAB.txt","w");
while(z<=127)
{
if(z<=32)
fprintf(out,"%3d %2.2x %8.8b\n",z,z,z);

else
fprintf(out,"%3d %2.2x %8.8b %c\n",z,z,z,z);
z++;
}
fclose(out);
getch();
}
click to enlarge

Hoffe ich hab eure Verbesserungsvorschläge umgestetzt, falls nicht bitte sagen. Ein Programm hab ich noch, aber das poste ich wann anders.

EDIT: Hab vergessen: das Flussdiagramm kommt ja eigentlich zuerst, aber möchts nicht mehr umdrehen! sry
Bearbeitet von Profimelker am 03.01.2007, 18:41

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
also zum ersten diagramm:
die while schleife ist falsch.
die bedingung lautet nicht "while n==0" sondern "while n!= 0", denn du führst ja code aus, so lange bis kein zeichen eingegeben worden ist. deshalb muss dann auch ja und nein zweig vertauscht werden.

edit:
verwechsle die bedeutung von while nicht mit until. (vom englischen gebrauch).
denn deine schleifen lauten im code "while(!BreakCondition)" während du in den diagrammen immer "while(BreakCondition)" im sinne von "führe aus solange bis" verwendetst.
außerdem bau bitte das while(1) aus, das macht man einfach nicht :p
Bearbeitet von AoD am 03.01.2007, 16:31

Profimelker

Little Overclocker
Registered: Dec 2006
Location: WU
Posts: 79
das while n!=0 heißt: für solange aus, solange nicht null ist oder?

AoD

aka AngelOfDeath
Avatar
Registered: Nov 2002
Location: St. Pölten
Posts: 1484
jop
Code:
while(i<5)
  printf("%d", i++);
ist nichts anderes als
Code:
kopf:
  if(i>=5)
    goto ende;
  printf("%d", i++);
  goto kopf;

ende:
  return;
vielleicht ist das verständlicher

wobei ich bei die flussdiagramme abstrakter machen würde und einfach schreiben würde "solange gültige Zeicheneingabe" anstatt "while(c != 3)"

edit:
eine while schleife ist nichts anderes als ein block an code, der an eine bedingung geknüpft ist. der code wird 0-n mal ausgeführt, solange die bedingung wahr ist.

Burschi1620

24/7 Santa Claus
Avatar
Registered: Apr 2004
Location: Drüber da Donau
Posts: 6792
also schleifen bricht man normalerweise nicht mit einem break ab. Das is eine ziemlich unsaubere lösung. Das geht hier noch anders ;)
und die while(1) wurde dir eh shcon gesagt ;)

Luzandro

Here to stay
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
Zitat von AngelOfDeath
Zitat von JC
Mhm, die Feinarbeit scheint ein wenig mühsam zu sein. Ebenso gestaltet sich der FPS nicht ganz so einfach. Aber ich muss ihnen das lassen - eine sexy Idee :cool:

ACK. Das Diagramm sollte den Programmablauf visualisieren - wenn ich mir nur dein erstes Diagramm ansehe, ist der erste Knoten eine Entscheidung "While n==0 Ja/Nein?" Abgesehen davon, dass da nirgends steht, was "n" ist, ist auch das "while" hier überflüssig und verwirrt höchstens. Du brauchst zuvor sowas wie "von StdIn lesen" und dann zB eine Abfrage "mind. 1 Zeichen gelesen"

Zitat von Burschi1620
also schleifen bricht man normalerweise nicht mit einem break ab. Das is eine ziemlich unsaubere lösung. Das geht hier noch anders ;)
und die while(1) wurde dir eh shcon gesagt ;)
das ist anscheinend eine Aufgabe, wo eben der Code extra so gewählt wurde und er aufzeichnen soll, was das tut...

edit: und wenn du code postest, verwende bitte auch code-tags
Bearbeitet von Luzandro am 03.01.2007, 17:32
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz