Ich habe da ein kleines Problem......! Die Zeit läuft!

A

Anonymous

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Leute,

ich bin neu im SPS Bereich (Anfänger) und muss am Mo. ein kleines Programm in der Schule vorführen. Habe mich dazu bereit erklärt.
(Berufsschulanfängern soll der Techniker in Datenverarbeitungstechnik schmackhaft gemacht werden)
Hauptmerkmale sollen auf den Erklärungen von WHILE, CASE, IF, FOR liegen.

Mit anderen Worten: Ich brauche ein kleines Programm in ST (Strukturierter Text) geschrieben in welchen diese Anweisungen vorkommen. Nichts besonderes, ein 20 Zeiler würde schon reichen (kann natürlich auch länger sein!). Kommentare wären super! Ich muss halt nur die Anweisungen anhand von Bsp. verständlich erklären. Der Vortrag soll max. den Umfang von 10-15 Min haben.

Vielleicht hat jemand jaso etwas schon geschrieben? Erklären werde ich mir das schon selber, ich brauche halt nur das Bsp. Programm.

Wäre super wenn mir da jemand unter die Arme greiffen würde...

Vielen Dank im voraus.
Daniel
 

volker

Supermoderator
Teammitglied
Beiträge
5.469
Punkte Reaktionen
935
Zuviel Werbung?
->Hier kostenlos registrieren
Hauptmerkmale sollen auf den Erklärungen von WHILE, CASE, IF, FOR liegen

das sind wohl ehr befehle aus einer anderen sprache wie z.b. vbasic, c++ etc. und sind in der sps eigentlich nicht verfügbar. (evtl in scl)

gängige befehle einer sps sind: und, oder, setze, rücksetze.
 

volker

Supermoderator
Teammitglied
Beiträge
5.469
Punkte Reaktionen
935
aber hier trotzdem mal einige beispiele

CASE
Code:
Im folgenden Programm wird die SELECT CASE-Anweisung verwendet, um, abhängig
vom Eingabewert, verschiedene Aktionen zu starten:

' Das Programm demonstriert verschiedene Formen der CASE-Bedingungen.
     INPUT "Geben Sie ein zu akzeptierendes Risiko ein (1-10): ", Total
     SELECT CASE Total

        CASE IS >= 10
           PRINT "Maximales Risiko und maximaler potentieller Gewinn."
           PRINT "Kaufen Sie Aktienpakete"

        CASE  6 TO 9
           PRINT "Hohes Risiko und hoher potentieller Gewinn."
           PRINT "Kaufen Sie Pfandbriefe."

        CASE  2 TO 5
           PRINT "Mittleres Risiko und mittlerer Gewinn."
           PRINT "Kaufen Sie Bundesschatzbriefe."

        CASE 1
           PRINT "Kein Risiko, kleiner Gewinn."
           PRINT "Kaufen Sie Gold."

        CASE ELSE
           PRINT "Antwort außerhalb des Bereiches."

     END SELECT

IF THEN ELSE
Code:
Diese Beispiele zeigen die Benutzung einer einzeiligen und Block-
IF...THEN...ELSE-Anweisung.

Hier ist die einzeilige Form:

CLS    ' Lösche Bildschirm.
DO
   INPUT "Eine Zahl eingeben, die größer als 0 und kleiner als 10000 ist:",X
   IF X >= 0 AND X < 10000 THEN EXIT DO ELSE PRINT X;"Außerhalb des Bereichs"
LOOP
IF X<10 THEN Y=1 ELSE IF X<100 THEN Y=2 ELSE IF X<1000 THEN Y=3 ELSE Y=4
PRINT "Die Zahl hat"; Y; "Ziffern"


Hier ist die Block-Form, einfacher zu lesen und leistungsfähiger:

CLS    ' Lösche Bildschirm.
DO
   INPUT "Eine Zahl eingeben, die größer als 0 und kleiner als 100000 ist:", X
   IF X >= 0 AND X < 100000 THEN
      EXIT DO
   ELSE
      PRINT X; "Außerhalb des Bereichs"
   END IF
LOOP

IF X < 10 THEN
   Y = 1
ELSEIF X < 100 THEN
   Y = 2
ELSEIF X < 1000 THEN
   Y = 3
ELSEIF X < 10000 THEN
   Y = 4
ELSE
   Y = 5
END IF
PRINT "Die Zahl hat"; Y; "Ziffern"

WHILE WEND
Code:
Der folgende Ausschnitt führt einen Bubblesort mit dem Datenfeld A$ durch.
In der zweiten Zeile wird die Variable Tausch durch die Zuweisung eines
Nicht-Null-Wertes wahr. Dies führt zu mindestens einem Durchlauf der
WHILE...WEND-Schleife (in einer DO...LOOP-Anweisung ist diese Konstruktion
unnötigt). Wenn kein weiterer Tausch mehr erfolgt, sind alle Elemente von
A$ sortiert, Tausch ist falsch (gleich Null) und das Programm fährt mit der
auf WEND folgenden Zeile fort.

' Führe Bubblesort mit Datenfeld A$ durch.
CONST FALSE=0, TRUE=NOT FALSE
DIM A$(4)
A$(1) = "Ulm"
A$(2) = "Kempten"
A$(3) = "München"
A$(4) = "Isny/Allgäu"
Max = UBOUND(A$)
Tausch=TRUE           ' Führe ersten Schleifendurchlauf durch.
WHILE Tausch          ' Sortiere bis keine Elemente mehr getauscht werden.
   Tausch=FALSE
   ' Vergleiche die Datenfeldwerte paarweise. Wenn zwei getauscht sind,
   ' wird der nächste Schritt erzwungen, indem Tausch TRUE gesetzt wird.
   FOR I = 2 TO Max
      IF A$(I-1) > A$(I) THEN
         Tausch = TRUE
         SWAP A$(I - 1), A$(I)
      END IF
   NEXT
WEND
CLS
FOR I = 1 TO 4
   PRINT A$(I)
NEXT I
END

FOR NEXT
Code:
Dieses Beispiel druckt die ersten 11 Spalten des Pascal'schen Dreiecks:

'Druckt die ersten MAXSPALT Spalten des Pascal'schen Dreiecks,
'in dem jede Zahl die Summe der Zahlen ist, die unmittelbar
'über und unter der vorhergehenden Spalte stehen:

CLS                         ' Lösche Bildschirm.
CONST MAXSPALT=11
DIM A(MAXSPALT,MAXSPALT)
FOR M = 1 TO MAXSPALT
    A(M,1) = 1 : A(M,M) = 1 'Oberste und unterste Zahl
                            'in jeder Spalte ist 1.
NEXT
FOR M = 3 TO MAXSPALT
   FOR N = 2 TO M-1
      A(M,N) = A(M-1,N-1) + A(M-1,N)
   NEXT
NEXT
Startzeile = 13                'Gehe in die Mitte des Bildschirms.
FOR M = 1 TO MAXSPALT
   Spalte = 6 * M
   Zeile = Startzeile
   FOR N = 1 TO M
      LOCATE Zeile,Spalte : PRINT A(M,N)
      Zeile = Zeile + 2          'Zum Druck der nächsten Zahl
                                 '2 Zeilen tiefer gehen.
   NEXT
   PRINT
   Startzeile = Startzeile - 1   'Nächste Spalte beginnt 1 Zeile
                                 'über der vorangegangenen Spalte.
NEXT

das hab ich mal eben der hilfe von qbasic45 entnommen
 
OP
A

Anonymous

Guest
Danke Leute, nicht schlecht.
Aber ich brauche etwas was in ST (Strukturierter Text) geschrieben ist.
Ich muss es mit Beckhoff Software machen.
Die Beispiele sind sehr gut (vom Umfang) nur in der falschen Sprache.
Schafft es jemand bis 13h heute zu Antworten? Wäre super.

Und hier mein eigener Versuch, nur ist da noch ein Bock drin, wenn man sich an die eigens erdachten Kommentare hällt...

Der Programmtext ist mit Beckhoff geschrieben, weiß jemand wo der Fehler liegen könnte?

PROGRAM MAIN
VAR
note: ARRAY[1..5] OF REAL;
note1: REAL;
note2: REAL;
note3: REAL;
note4: REAL;
note5: REAL;
summe: REAL;
i: INT;

END_VAR

note[1]:=2; (* Element 1 des ARRAY mit dem Namen feld "befüllt" mit Schulnoten*)
note[2]:=2; (* Element 2 *)
note[3]:=2; (* Element 3 *)
note[4]:=2; (* Element 4 *)
note[5]:=2; (* Element 5 *)

i:=1; (*Laufvariable die den INDEX des ARRAYS note durchläuft beginnend bei 1*)

WHILE note>0 AND note<7 DO (*Als Abbruchbedingung wird der Index des Arrays note verwendet*)
(*Gewährleistung das nur Noten von 1 - 6 in die Berechnung einfliessen*)
IF i >5
THEN EXIT;
END_IF;
summe:=summe+note; (*Hier soll die verdammte Summe der Noten berechnet werden und der Durchschnitt*)
(*ausgegeben werden => klappt nur nicht! Warum nicht?*)
i:=i+1;

END_WHILE

Ich zähle auf Euch...
Danke.
 
OP
D

Danielsun

Guest
Zuviel Werbung?
->Hier kostenlos registrieren
Anonymous schrieb:
Danke Leute, nicht schlecht.
Aber ich brauche etwas was in ST (Strukturierter Text) geschrieben ist.
Ich muss es mit Beckhoff Software machen.
Die Beispiele sind sehr gut (vom Umfang) nur in der falschen Sprache.
Schafft es jemand bis 13h heute zu Antworten? Wäre super.

Und hier mein eigener Versuch, nur ist da noch ein Bock drin, wenn man sich an die eigens erdachten Kommentare hällt...

Der Programmtext ist mit Beckhoff geschrieben, weiß jemand wo der Fehler liegen könnte?

PROGRAM MAIN
VAR
note: ARRAY[1..5] OF REAL;
note1: REAL;
note2: REAL;
note3: REAL;
note4: REAL;
note5: REAL;
summe: REAL;
i: INT;

END_VAR

note[1]:=2; (* Element 1 des ARRAY mit dem Namen feld "befüllt" mit Schulnoten*)
note[2]:=2; (* Element 2 *)
note[3]:=2; (* Element 3 *)
note[4]:=2; (* Element 4 *)
note[5]:=2; (* Element 5 *)

i:=1; (*Laufvariable die den INDEX des ARRAYS note durchläuft beginnend bei 1*)

WHILE note>0 AND note<7 DO (*Als Abbruchbedingung wird der Index des Arrays note verwendet*)
(*Gewährleistung das nur Noten von 1 - 6 in die Berechnung einfliessen*)
IF i >5
THEN EXIT;
END_IF;
summe:=summe+note; (*Hier soll die verdammte Summe der Noten berechnet werden und der Durchschnitt*)
(*ausgegeben werden => klappt nur nicht! Warum nicht?*)
i:=i+1;

END_WHILE

Ich zähle auf Euch...
Danke.
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Anonymous schrieb:
Danke Leute, nicht schlecht.
Aber ich brauche etwas was in ST (Strukturierter Text) geschrieben ist.
Ich muss es mit Beckhoff Software machen.
Die Beispiele sind sehr gut (vom Umfang) nur in der falschen Sprache.
Schafft es jemand bis 13h heute zu Antworten? Wäre super.

Und hier mein eigener Versuch, nur ist da noch ein Bock drin, wenn man sich an die eigens erdachten Kommentare hällt...

Der Programmtext ist mit Beckhoff geschrieben, weiß jemand wo der Fehler liegen könnte?

PROGRAM MAIN
VAR
note: ARRAY[1..5] OF REAL;
Ok, das ist eine Definition eines Arrays (Feldes). In manchen Sprachen muss der untere Index 0 sein.
note1: REAL;
note2: REAL;
note3: REAL;
note4: REAL;
note5: REAL;
Aber was sollen note1 bis note5 sein? Es sind NEUE real Variablen, haben nix mit einem (dem obigen) Feld zu tun und ich sehe nicht das Du sie verwendest.
summe: REAL;

i: INT;

END_VAR

note[1]:=2; (* Element 1 des ARRAY mit dem Namen feld "befüllt" mit Schulnoten*)
note[2]:=2; (* Element 2 *)
note[3]:=2; (* Element 3 *)
note[4]:=2; (* Element 4 *)
note[5]:=2; (* Element 5 *)

i:=1; (*Laufvariable die den INDEX des ARRAYS note durchläuft beginnend bei 1*)

WHILE note>0 AND note<7 DO (*Als Abbruchbedingung wird der Index des Arrays note verwendet*)
(*Gewährleistung das nur Noten von 1 - 6 in die Berechnung einfliessen*)
IF i >5

Wenn I=5, kein Abbruch
THEN EXIT;
END_IF;
Du must die Summe vor der Schleife auf 0 setzen, sonst kriegst Du Müll raus!
summe:=summe+note; (*Hier soll die verdammte Summe der Noten berechnet werden und der Durchschnitt*)

Wenn I=5, Addition von note[5], das ist noch ok.
Dann erhöhst Du I auf 6, und greifst in der While-Schleife auf note[6] zu, die es gar nicht gibt.
(*ausgegeben werden => klappt nur nicht! Warum nicht?*)
i:=i+1;

END_WHILE

Ich zähle auf Euch...
Danke.
[/quote]
 
Oben