Zum Inhalt springen

Zahlen sortieren in COBOL (war: COBol)


House-Chica

Empfohlene Beiträge

brauche dringend hilfe:mod:

ich arbeiten mit cobol (ich weiß einer sehr veralterte sprache) jedoch

habe ich die aufgabe ein prog zu schreiben das die folgenden zahlen sortiert 12 6 8 1 2 4 3 11 5 10

das man diese eingibt und unten von klein nach groß ausgibt

wäre lieb wenn mir jemand helfen könnte. liebe

grüße house chica

Link zu diesem Kommentar
Auf anderen Seiten teilen

working-storage section.

*

01 w-cursor.

05 w-zeile pic 99.

05 w-spalte pic 99.

01 w-zaehler pic 99.

01 w-zahl-n pic s999 occurs 10.

01 w-gesamt pic s99.

01 w-speicher pic 99.

procedure division.

*

move 1 to w-spalte

perform varying w-zaehler from 1 by 1 until w-zaehler > 10

move w-zaehler to w-zeile

display w-zaehler at w-cursor

display "Zahl:"

add 10 to w-spalte

accept w-zahl-n (w-zaehler) at w-cursor

subtract 10 from w-spalte

end-perform.

*

move 1 to w-zaehler.

display w-zahl-n (w-zaehler) at 2001.

display w-zahl-n (w-zaehler + 1) at 2101.

if w-zahl-n (w-zaehler + 1) > w-zahl-n (w-zaehler + 2)

move w-zahl-n (w-zaehler + 1) to w-zahl-n (w-zaehler + 2)

move w-zahl-n (w-zaehler + 1) to w-speicher.

exit program.

stop run.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe doch geschrieben das dass sortieren auch in einer Schleife passieren muss.


move 1 to w-zaehler.

perform varying w-zaehler from 1 by 1 until w-zaehler > 10

display w-zahl-n (w-zaehler) at 2001.


if w-zahl-n (w-zaehler + 1) > w-zahl-n (w-zaehler + 2)

move w-zahl-n (w-zaehler + 1) to w-zahl-n (w-zaehler + 2)

move w-zahl-n (w-zaehler + 1) to w-speicher.

end-perform

das ist ungetestet ist aber auf alle fälle mal ein Ansatz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

move 1 to w-zaehler.

display w-zahl-n (w-zaehler) at 2001.

display w-zahl-n (w-zaehler + 1) at 2101.

move w-zahl-n (w-zaehler + 2) to w-speicher.

if w-zahl-n (w-zaehler + 1) > w-zahl-n (w-zaehler + 2)

move w-zahl-n (w-zaehler + 1) to w-zahl-n (w-zaehler + 2)

move w-speicher to w-zahl-n (w-zaehler + 1 )

so ungefähr hab ich das jetzt mal probiert aber naja der sortiert dennoch nicht will ja die zaheln nicht über schreiben die erste zahl 12 auf die zahl 6 dann ist ja die 6 weg. also müsste ich die 6 zwischenspeichern. in einer schleife

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na mit den Sortieralgorithmen solltest du dich vielleicht mal beschäftigen ich habe jetzt man den Bubblesort genommen das sollte dann in etwa so aussehen.


PERFORM VARYING W-ZAEHLER FROM 1 BY 1 UNTIL W-ZAEHLER > 9

   PERFORM VARYING W-POS FROM 1 BY 1 UNTIL W-POS > 9 - W-ZAEHLER

      IF W-ZAHL-N(W-POS) > W-ZAHL-N(W-POS + 1)

         MOVE W-ZAHL-N(W-POS) TO W-SPEICHER

	 MOVE W-ZAHL-N(W-POS + 1) TO W-ZAHL-N(W-POS)

	 MOVE W-SPEICHER TO W-ZAHL-N(W-POS + 1)

      END-IF

   END-PERFORM

END-PERFORM

ungetestet!

Hier hast du mal noch einen Link wo du dir das genauer anschauen kannst wie der Bubblesort arbeitet.

http://de.wikipedia.org/wiki/Bubblesort

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deshalb habe ich den Link gepostet da steht das erklärt wie der Sortieralgorithmus arbeitet. Da hast du das genze auch nochmal in Pseudocode. Vielleicht ist es auch ganz hilfreich wenn du deine Reihe von Zahlen mal nach dem Sortieralgorithmus per Hand sortierst.

Also das ganze mal Schritt für Schritt durchgehen und dann aufschreiben wie deine Tabelle aussieht nach jedem schritt dann verstehst duch auch den zusammenhang besser.

Link zu diesem Kommentar
Auf anderen Seiten teilen

working-storage section.

*

01 w-cursor.

05 w-zeile pic 99.

05 w-spalte pic 99.

01 w-zaehler pic 99.

01 w-zahl-n pic s999 occurs 10.

01 w-gesamt pic s99.

01 w-speicher pic 99.

01 w-pos pic 99.

01 w-anzeige-pos pic 9999.

procedure division.

*

move 1 to w-spalte

perform varying w-zaehler from 1 by 1 until w-zaehler > 10

move w-zaehler to w-zeile

display w-zaehler at w-cursor

display "Zahl:"

add 10 to w-spalte

accept w-zahl-n (w-zaehler) at w-cursor

subtract 10 from w-spalte

end-perform.

PERFORM VARYING W-ZAEHLER FROM 1 BY 1 UNTIL W-ZAEHLER > 9

PERFORM VARYING W-POS FROM 1 BY 1 UNTIL W-POS > 9 - W-ZAEHLER

IF W-ZAHL-N(W-POS) > W-ZAHL-N(W-POS + 1)

MOVE W-ZAHL-N(W-POS) TO W-SPEICHER

MOVE W-ZAHL-N(W-POS + 1) TO W-ZAHL-N(W-POS)

MOVE W-SPEICHER TO W-ZAHL-N(W-POS + 1)

END-IF

END-PERFORM

END-PERFORM

move 1400 to w-anzeige-pos

PERFORM VARYING W-ZAEHLER FROM 1 BY 1 UNTIL W-ZAEHLER > 9

compute w-anzeige-pos = w-anzeige-pos + 2

display w-zahl-n (w-zaehler) at w-anzeige-pos

END-PERFORM

vielleicht kann mir jemand anderes mal hier weiter helfen weil ich durchs lesen nur den bubbel alog. hinbekommen hab

und zwar zeigt der mir bei dieser lösung eine fehlermeldung an , weiß einfach nicht woran es liegt habe 2 schleifen gebildet und dem compiler das so zu verstehen gegeben das er das dann auch so übersetzt aber das klappt leider nicht fang schon an zu verzweifeln :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

war ein kleiner schreibfehler bei der variable das hätte sich nun erledigt aber das mit der druckaufbereiteten variablen würde ich gerne noch hinzufügen weiß nur nicht wie

move 1400 to w-anzeige-pos

PERFORM VARYING W-ZAEHLER FROM 1 BY 1 UNTIL W-ZAEHLER > 9

compute w-anzeige-pos = w-anzeige-pos + 4

display w-zahl-n (w-zaehler) at w-anzeige-pos

END-PERFORM

hier müsste es doch irgendwe klappen das die leerstriche ohne nullen ausgegen werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Nullstellen kannst du mit der PIC Klausel ZZ9 unterdrücken damit hast du ein 3 stelliges Numerisches Feld welches Druckaufbereitet ist und nur an der dritten stelle eine Null hat. Alle anderen werden durch Leerzeichen ersetzt.

Mit diesen Feldern kannst du dann aber nicht mehr Rechnen. Also eventuell eine Ausgabe Variable definieren und dann in der letzten Schleife die den Wert aus der Tabelle in die Ausgabevariabe schieben und ausgeben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja das klappt dankeschön.

aber wie bekomme ich das nun hin das auch 2 die gleichen zahlen eingegeben werden können.

PERFORM VARYING W-ZAEHLER FROM 1 BY 1 UNTIL W-ZAEHLER > 9

PERFORM VARYING W-POS FROM 1 BY 1 UNTIL W-POS > 9 - W-ZAEHLER

IF W-ZAHL-N(W-POS) > W-ZAHL-N(W-POS + 1)

MOVE W-ZAHL-N(W-POS) TO W-SPEICHER

MOVE W-ZAHL-N(W-POS + 1) TO W-ZAHL-N(W-POS)

MOVE W-SPEICHER TO W-ZAHL-N(W-POS + 1)

END-IF

END-PERFORM

END-PERFORM

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja bin ja im prakikum sozusagen aufgaben um zu sehen ob ich auch für eine ausbildung in der lage wäre nunja hab vorher noch NIE programmiert und dann ist das schon n ding mit tausend schleifen und so

kann programmieren jetzt erst siet montag zumindestens gelernt erst ab da an.

was ich mich nur frage kann man wenn man cobol beherrscht auch alle anderen besonders c++ sprachen gut?:rolleyes:

Link zu diesem Kommentar
Auf anderen Seiten teilen

was ich mich nur frage kann man wenn man cobol beherrscht auch alle anderen besonders c++ sprachen gut?

Ich würde das verneinen da C++ ja einen Objektorientieren Ansatz hat. COBOL hingegen ist eine Prozedurale Programmiersprache. Was man dabei auf jedenfall lernt ist mit Bedingungen und Schleifen umzugehen. Der umstiegt in eine andere nicht Objektorientiere Programmiersprache ist denke ich auch nicht so schwer. Da musst du dich nur an die etwas andere Syntax gewöhnen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ah ok alles klar

ich soll jetzt eine jahreszahl eingeben und darunter ein schaltjahr alles was durch 4 und 400 teilbar ist soll dann mit ja ausgegeben werden und was durch 100 teilbar ist und eine dezimalzahl beherrscht mit nein

kann mir da jemand helfen

working-storage section.

*

01 w-ausgabe pic xxxx.

01 w-jahreszahl pic 9999.

01 d-schaltjahr pic zz99,99.

01 w-schaltjahr pic s999v99.

01 w-speicher pic s99

procedure division.

display "Jahreszahl:" at 0101

accept w-jahreszahl at 0115

display "Schaltjahr:" at 0201

compute w-jahreszahl = w-jahreszahl / 4

move w-jahrszahl to w-speicher

compute w-jahreszahl = w-jahreszahl / 400

*

stop run.

exit program.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...