Autor Beitrag
Tomac
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Mo 01.11.04 14:18 
Hallo!

Ich habe zwei sortierte (monoton wachsende) Listen beliebieger größe und soll diese so in eine neue Liste zusammenfassen, dass diese wiederum sortiert ist.

Also so zum Bespiel:

array1: [1,2,2,4,6,8]
array2: [2,5,6,6,7,8,20]

Lösung: [1,2,2,2,4,5,6,6,6,7,8,8,20]

Mein erster Lösungsansatz wäre gewesen, dass ich einfach beide Listen aneinanderreihe und die daraus entstehende Liste wieder sortiere. Funktioniert auch, nur willl das der Professor nicht. Ich soll also jedes Element überprüfen und daraus die neue Liste erstellen.
Hat jemand eine Ahnung, wie ich das anstellen könnte?

Danke im Voraus
Tomac
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 01.11.04 15:38 
Solange der jeweils nächste Wert in dem ersten Array kleiner oder gleich groß ist wie der nächste Wert des zweiten, die Elemente aus dem ersten Array in das neue schreiben, dann (wenn der nächste Wert des ersten Arrays größer als der nächste des zweiten ist), die vom zweiten Array nehmen.

Dann das ganze genau umgekehrt (also vom zweiten nehmen bis der nächste Wert des zweiten Arrays größer als der des nächsten Wertes des ersten Arrays ist).

Im Endeffekt jeweils das kleinere Element der beiden als nächstes abzuarbeitenden Werte der zu mergenden Arrays nehmen; falls die beiden genauso groß sind, das nächste Element des Ersten.

Ich weiß, hört sich etwas kompliziert an, ich konnte es jetzt nicht besser ausdrücken. Nimm einfach dein Beispiel und geh meinen ersten Absatz durch. Ich hoffe dann verstehst du es.

Noch was: Ich würde die Werte aus den beiden Eingangsarray nicht löschen, sondern nur mit zwei Integern anzeigen, welches das nächste zu bearbeitende Element ist.

Ich hatte übrigens im letzten Semester genau die gleiche Aufgabe in Assembler zu realisieren, also in Delphi ist es dagegen ja einfach...
Tomac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Di 02.11.04 16:47 
danke erstmal.

ich werds mal in pseudo C-Code versuchen, falls ich eine lösung finde, werd ich sie posten.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 02.11.04 17:51 
Was du willst, ist übrigens ein Teil von Merge-Sort. Dieses Sortierverfahren geht so, dass eine Folge in zwei Teilfolgen getielt wird, die wiederrum rekursiv mit MergeSort sortiert werden, und anschließend wieder zusammengesetzt wird, wie jaenicke es richtig beschrieben hat.
Einfach am Anfang der beiden Arrays starten.
Das kleinere der beiden Elemente in das neue Array packen, und in dem Array, aus dem das kleinere Element stammt, einen Schritt nach rechts gehen, und wieder das kleinere Element nehmen usw.
Also:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Folge 1 || Folge 2 || Neue Folge
2 4 6 8 || 1 3 5 7 || 
-          -

2 4 6 8 || 1 3 5 7 || 1
-            -

2 4 6 8 || 1 3 5 7 || 1 2
  -          -

2 4 6 8 || 1 3 5 7 || 1 2 3
  -            -   

2 4 6 8 || 1 3 5 7 || 1 2 3 4
    -          -     

...

_________________
We are, we were and will not be.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 03.11.04 13:58 
Tomac hat folgendes geschrieben:
ich werds mal in pseudo C-Code versuchen, falls ich eine lösung finde, werd ich sie posten.


Kurz mal einen Teil der Lösung:
a, b Eingang, c Resultat
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
//Zuerst muss c auf die richtige Länge gebracht werden!

aktuellA:=0;
aktuellB:=0;
aktuellC:=0;
//Zeiger auf das nächste jeweils zu bearbeitende Element bzw.
//die nächste Einfügestelle.

//Die folgenden beiden Schleifen müssen mehrmals wiederholt werden,
//aber mehr möchte ich hier nicht posten, damit du das selbst lernst
//und verstehst...
//Du musst dir überlegen wie lange die Schleifen laufen sollen!
while (aktuellA < Length(a)) and (a[aktuellA] < b[aktuellB]) do begin
    c[aktuellC] := a[aktuellA];
    Inc(aktuellA);
    Inc(aktuellC);
end;
while (aktuellB < Length(b)) and (b[aktuellB] < a[aktuellA]) do begin
    c[aktuellC] := b[aktuellB];
    Inc(aktuellB);
    Inc(aktuellC);
end;

Dashab ich jetzt schnell in 3 Minuten gemacht, aber so ungefähr müssts stimmen, es sollte zumindest die Idee hinter meinem Beitrag verdeutlichen, wenn ich nen Fehler drin hab...
Tomac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Do 04.11.04 00:08 
Hallo.
Meine Lösung sieht jetzt mal so aus:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
SortInNewArray(int a[n], int b[m], int c[n+m]){

int x=0; //variable, die das array a[n] durchläuft
int y=0; //variable, die das array b[m] durchläuft


for(int i = 0; i < m+n; i++){  
  
if (x=n){
  c[i]=b[y];
  y++;
}

if (y=n) {
  c[i]=a[x];
  x++;
}

if (a[x] <= b[y]){
    c[i] = a[x];
    x++;
  }
  
else if (a[x] >= b[y]){
    c[i] = b[y];
    y++;
  }
}
print(c[n+m]);
}


denke, dass es so hinhauen sollte

falls jemand einen fehler entdeckt, bitte gleich melden!

mfG
Tomac
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.11.04 13:50 
Also falls das C oder C++ sein soll, dann hast du da nen elementaren Fehler gemacht!

ausblenden Quelltext
1:
if (x=n){					

ist in C nur eine Zuweisung oder etwas anderes, worauf ich hier jetzt nicht eingehen will (ist ja das Delphi-Forum).

In C / C++ muss ein Werte-Vergleich mit == gemacht werden:
ausblenden Quelltext
1:
if (x==n){					
Tomac Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

Win XP
D6 Ent
BeitragVerfasst: Do 04.11.04 14:30 
ja, das ist mir schon klar.
aber hier geht es nur um das darstellen des algorithmus, nicht ums programmieren.
es ist also egal, ob das "programm" compilierbar ist oder nicht.
ich hätte das genauso als flussdiagramm oder struktogramm etc. darstellen können.
wir nennen das bei uns "algorithmusbeschreibsprache", ist eher individuell wie man das dann macht.

aber du hast schon recht, weil ich c gesagt habe, und da sollte dann (x==n) stehen.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 04.11.04 14:43 
Tomac hat folgendes geschrieben:
wir nennen das bei uns "algorithmusbeschreibsprache", ist eher individuell wie man das dann macht.

Wer hat dir den Blödsinn denn erzählt? Wahrscheinlich irgend so ein Möchtegern-Informatiklehrer.
Das ist C-Codierung und hat mit einer "algorithmusbeschreibsprache", nichts zu tun.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 04.11.04 15:03 
Das ist dann wahrscheinlich einer der Informatik-Lehrer, die nicht wirklich Informatik studiert haben, und die (anders als meine in meiner Schulzeit) sich nichtmal wirklich damit beschäftigt haben...
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Do 04.11.04 15:06 
Also wir haben letztes Jahr auf der Uni in der LVA "Algorithmen und Datenstrukturen" auch nur mit solchen Pseudocodes gearbeitet in denen die Syntax so gut wie egal war, hauptsache man hat den Algorithmus-Ablauf erkennen können... soviel zu Möchtegern-Informatikern und nicht studiert.. :roll: wobei ich immer öfter das Gefühl hab, dass grad Uni-Profs die schlimmsten "Möchtegern-Informatiker" sind... :? (viel Ahnung von theoretischem und möglichst kompliziertem Geschwafel, aber praktisch komplett zum vergessen)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 04.11.04 15:09 
Bevor das hier zu einer Off-Topic-Diskussion wird:
Ich wollte Tomac nur darauf hinweisen, dass er sich keinen Quatsch erzählen lassen soll. Schlimm genug, dass man solche Lehrer auf die Menschheit loslässt.
Und damit ist das Thema für mich erledigt.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 04.11.04 15:20 
Hätten wir jetzt EDIT, würde ich keinen neuen Eintrag machen :wink:

Motzi hat folgendes geschrieben:
Also wir haben letztes Jahr auf der Uni in der LVA "Algorithmen und Datenstrukturen" auch nur mit solchen Pseudocodes gearbeitet in denen die Syntax so gut wie egal war, hauptsache man hat den Algorithmus-Ablauf erkennen können... soviel zu Möchtegern-Informatikern und nicht studiert.. :roll: wobei ich immer öfter das Gefühl hab, dass grad Uni-Profs die schlimmsten "Möchtegern-Informatiker" sind... :? (viel Ahnung von theoretischem und möglichst kompliziertem Geschwafel, aber praktisch komplett zum vergessen)


Wenn ich LISP als Grundlage des Pseudo-Codes genommen, wäre das Geschrei riesengroß. Wenn man mit KI noch nie was zu tun gehabt hat, kann man das praktisch nicht lesen. Wenn C genommen wird und dann als algorithmusbeschreibsprache bezeichnet wird, ist das genauso dämlich.
Ich finde es besonders schlimm, den Schülern (hier geht es nicht um Studenten), die anfangen, sich mit Programmierung zu beschäftigen, irgendeine Programmierspache als algorithmusbeschreibsprache vorzugeben. Informatik-Studenten können sowas beurteilen, Anfänger nicht.
Ich will hier auch niemanden persönlich angreifen (außer vielleicht Lehrer, die sowas machen).
Es gibt so schöne Begriffe wie Bedingung, Schleife, Anweisung, Zuweisung. Warum werden die nicht dafür benutzt. Struktogramme, Flußdiagramme und PAPs sind nichts anderes. Dort wird das ganze nur visualisiert.

Und wenn das ganze wirklich mal hier diskutiert werden soll, dann doch ab sofort in einem separaten Topic.
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Do 04.11.04 17:51 
jasocul hat folgendes geschrieben:
Wenn C genommen wird und dann als algorithmusbeschreibsprache bezeichnet wird, ist das genauso dämlich.


Das ist genausosehr Java wie C :roll: (auch wenn er es "pseudo C-Code" genannt hat), ich weiß also nicht was jetzt genau dein Problem damit ist. Und es ist auch keineswegs unsinnig den Schülern eine Sprache vorzugeben, wenn man in den Tests dann nicht irgendwelche Pampe korrigieren und mit beleidigten Schülern darüber diskutieren will, ob das noch im Bereich des gültigen ist.

Zitat:
Und wenn das ganze wirklich mal hier diskutiert werden soll, dann doch ab sofort in einem separaten Topic.


Dann aber auch am besten inklusive vorherige Postings.

MfG, obbschtkuche
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 04.11.04 21:18 
obbschtkuche hat folgendes geschrieben:
jasocul hat folgendes geschrieben:
Wenn C genommen wird und dann als algorithmusbeschreibsprache bezeichnet wird, ist das genauso dämlich.


Das ist genausosehr Java wie C :roll: (auch wenn er es "pseudo C-Code" genannt hat), ich weiß also nicht was jetzt genau dein Problem damit ist. Und es ist auch keineswegs unsinnig den Schülern eine Sprache vorzugeben, wenn man in den Tests dann nicht irgendwelche Pampe korrigieren und mit beleidigten Schülern darüber diskutieren will, ob das noch im Bereich des gültigen ist.


Es spricht auch gar nichts dagegen eine Sprache vorzugeben. Habe ich das etwa behauptet?
Nur dann bitte genau an die Syntax halten (Das war nämlich die eigentliche Ursache der Diskussion) und nicht behaupten, dass eine algorithmusbeschreibsprache (blödes Wort. kann ich nur mit copy&paste fehlerfrei schreiben :oops: ) ist, in der man individuelle Dinge reinbringen kann.