Autor Beitrag
Grisu1982
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 01.04.10 21:03 
Hallo zusammen,
ich habe grade ein kleines Problem und komme nicht ganz weiter.

Ich habe eine Liste mit 3D Punkten also X,Y,Z (double und public).
Genauer gesagt, liegen in der Liste Punkt3D Objekte mit X,Y,Z Koordinaten.

Ich muss jetzt jeweils den kleinsten und höchsten X,Y,Z Wert raussuchen.

Zuerst dachte ich es gibt bestimmt eine MIN MAX und AVG Aggregatfunktion wie in SQL oder PHP aber leider
habe ich in C# sowas nicht gefunden?

Ich weis noch aus grauer C++ vorzeit das es auch irgentwie über if, vergleiche und schleifen geht?

Hat jemand eine Idee wie ich recht einfach den MIN und MAX Wert errechne?????

Ich dachte ich durchlaufe alle X,Y,Z Werte in einer Schleife und suche darin den min und max Wert.

Dankeschön für die Mühe
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 01.04.10 21:24 
:welcome:

Es gibt dafür zwar eine handliche Methode, aber davor solltest du das Problem unbedingt einmal selbst gelöst haben. Schau einfach mal, wie weit du kommst, dann können wir dir immer noch weiterhelfen :) .
Wie genau geordnet werden soll, ist mir allerdings noch unklar. Soll jeweils der kleinste/größte X-Wert, der kleinste/größte Y-Wert und ... gefunden werden?

_________________
>λ=
Grisu1982 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 01.04.10 23:21 
Also irgentwie komme ich da nicht weiter.

Ich will auch nicht alle Werte sortieren.

Ich habe eine Liste in der Punkt 3D Objekte liegen (X,Y,Z). Diese sind durch Messwerte erzeugt.
Ich will alle Punkte in einer Schleife durchlaufen und mir jeweils den höchsten und den kleinsten X,Y,Z Wert ausgeben lassen.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 02.04.10 09:56 
user profile iconGrisu1982 hat folgendes geschrieben Zum zitierten Posting springen:
Ich will alle Punkte in einer Schleife durchlaufen und mir jeweils den höchsten und den kleinsten X,Y,Z Wert ausgeben lassen.

Das ist doch schon die Arbeitsanleitung. Registriere die ersten Werte als bisher erkannte Maxima; mach eine Schleife über die Liste; wenn der aktuelle x-Wert größer ist als das bisher erkannte x-Maximum, dann wird der jetzige genommen usw.

Standardmäßig gibt es Math.Max nur für den Vergleich zweier Werte. Eine Lösung für Arrays steht im letzten Beitrag von where bei generischer Methode für Zahlen?.

Jürgen
karomue
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 18

Win XP, Vista, Win 7
Visual C# 2008 Expreß
BeitragVerfasst: Do 15.04.10 13:52 
Schon geklärt???

Sonst schau mal hier:

de.wikipedia.org/wiki/Sortierverfahren

In anderen Programmiersprachen habe ich schon Bubblesort und Quicksort verwendet. Ich nehme mal an, dass Dir die Umsetzung in C# gelingen wird.

In C# gibt es einige Sort-Methoden, da ich aber in C# (auch?) blutiger Anfänger bin, kann ich dazu leider nichts sagen. Die Schleifenmethoden sind aber recht schnell und effektiv und lassen sich auch auf Arrays anwenden. Je nach dem wie man sortiert, stehen die min und max Wertte an den Enden des sortierten Arrays, der sortierten Liste.

Gerade noch gefunden: suche mal nach "Sortieralgoritmen in c", da wird auf das Galileo Computing Buch "C von A bis Z" verwiesen, da sind die Codes für Bubblesort und Quicksort gelistet. Die Umsetzung in C# sollte gelingen.

Wenn man in das Buch schaut - lässt sich downloaden - sieht man hier:

Kapitel 24.3.7 Zusammenfassung der Sortieralgorithmen

eine Tabelle mit Zeitvergleichen, damit ist qsort das wohl schnellste und effektivste Sortierverfahren.

_________________
Viele Grüße, Charly
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 15.04.10 16:25 
@user profile iconkaromue:
user profile iconGrisu1982 hat folgendes geschrieben Zum zitierten Posting springen:
Ich will auch nicht alle Werte sortieren.

Und damit hat er recht, denn Minimum und Maximum lassen sich ganz einfach in linearer Zeit herausfinden (Jürgen hat die Schleife ja schon beschrieben), während Sortieren im Allgemeinen nur in O(n log n) möglich ist und selbst ein naiver Bubblesort dann doch etwas komplizierter ist.

Um meinen vorherigen Beitrag zu vervollständigen: Ab .NET 3.5 gibt es mit Enumerable.Min/Max dafür allgemeine Lösungen.

_________________
>λ=
karomue
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 18

Win XP, Vista, Win 7
Visual C# 2008 Expreß
BeitragVerfasst: Do 15.04.10 18:24 
Na ja.

Mal abgesehen davon, dass dies ein Teil eines Sortier-dingens ist...

Sortieralgoritmen braucht man wohl immer mal wieder, wenn ich richtig gesehen habe, gibt es sowas in c# nicht direkt, man muss es programmieren.

Und qsort wird ja als sehr schnell beurteilt, die Frage ist hier u.U., ob man nicht ein Unterprogramm (heißt das in c# Klasse?) sauber erstellt und in seine private Bibliothek aufnimmt.

Klar, die Schleife von Jürgen tut es, was aber wenn man min und max will? Dann wird die Bedingungs-Abfrage ja schon aufwendiger.

_________________
Viele Grüße, Charly
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Do 15.04.10 19:05 
Naja, mal davon abgesehen das der Thread hier ja schon uralt ist... :)

Enumarable hat eine Min und Max Funktion. In der Aufgabe hier muss nur geklärt werden, was hier den das Minimum und was das Maximum eines Vektors sein soll (wie Kha schon sagte: der X-Wert, der Y-Wert, der Z-Wert oder vlt der Betrag). In diesem Fall müsste man lediglich der Klasse die IComparable-Schnittstelle hinzufügen und eine CompareTo-Funktion spendieren, und dann kann man in einer Auflistung mit Min/Max arbeiten oder zum Sortieren Array.Sort verwenden.
karomue
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 18

Win XP, Vista, Win 7
Visual C# 2008 Expreß
BeitragVerfasst: Do 15.04.10 19:43 
Nu gut.

Als ich mit "Sort", "sortieren" in der Hilfe gesucht habe - neugieriger Anfänger - kam nichts, was ich verstanden und hätte einsetzen können. Array.Sort sagt schon mal "QuickSort", das ist ja schon was.

Nur mal eine grundsätzliche Verständnisfrage: ist man in diesem Forum als Anfänger überhaupt aufgehoben, geduldet? Wenn ich Array.Sort kurz anschaue - Du hast es eben auch angeschnitten - kommt "IComperable...", etwas mit dem ich (noch???) überhaupt nichts anfangen kann.

?? Was mache ich nun wenn ich sortieren möchte, muss, wochenlang erst Bücher lesen mit dem zweifelhaften Erfolg, dss es dort evtl. auch nicht steht (im Galileo-Buch so auf Anhieb so geschehen)???

Hm, das Beispiel in der Hilfe sieht recht vielversprechend aus, auch wenn ich über IComperable.. nichts finde. Aber das kann ja wieder Anfängerglück sein...

_________________
Viele Grüße, Charly
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Do 15.04.10 20:30 
Ja, du bist hier bestens aufgehoben. Obwohl man hier eine Menge Eigeninitiative erwartet. Aber gerade wenn es um Verständnisfragen geht, bist du hier perfekt.

IComparable ist eine sogenannte Schnittstelle. Diese kannst du deiner Klasse hinzufügen

ausblenden C#-Quelltext
1:
public class myClass : IComparable {}					


In Schnittstellen ist lediglich definiert, dass eine Funktion implementiert werden muss, für jede Klasse die diese Schnittstelle verwendet. In IComparable ist z.B. definiert, dass du eine Funktion names CompareTo(object item) mit dem Rückgabewert "int" implementieren muss. Außerdem findet man noch in der Hilfe, dass das Ergbnis -1 einem "kleiner", +1 einem "größer" und 0 einem gleich entspricht.

Array.Sort erwartet nun einen IComparable. Das heißt, eine Funktion, die CompareTo() implementiert. Dadurch, dass deine Klasse IComparable als Schnittstelle hat, weiß die Funktion Array.Sort, dass du eine Vergleichfunktion names CompareTo in deiner Klasse hast und kann sie aufrufen. Array.Sort macht jetzt nicht weiter, als anhand der Rückgabewerte +1,0 und -1 dein Array umzusortieren.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 15.04.10 20:44 
user profile iconkaromue hat folgendes geschrieben Zum zitierten Posting springen:
Nur mal eine grundsätzliche Verständnisfrage: ist man in diesem Forum als Anfänger überhaupt aufgehoben, geduldet?
Ob du dich hier gut aufgehoben fühlst, musst du uns berichten, aber wir bemühen uns und grenzen sicherlich niemanden aus :) .
Wir grenzen Threads allerdings leidenschaftlich gern voneinander ab, weswegen ich dich bitten möchte, solltest du noch Fragen zu Array.Sort haben, dafür ein neues Thema aufzumachen. Denn hier geht es, wie gesagt, nicht um Sortieren ;) .

_________________
>λ=


Zuletzt bearbeitet von Kha am Do 15.04.10 21:43, insgesamt 1-mal bearbeitet
karomue
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 18

Win XP, Vista, Win 7
Visual C# 2008 Expreß
BeitragVerfasst: Do 15.04.10 21:30 
Hallo Norman-Hendrik und Sebastian.

Es ist schwierig. Für mich.

1. ich bin über 70. Das alleine sagt noch nicht viel, aber wenn ich mein Verständnis von C# im Vergleich zur Generation meines Sohnes - z.B. - bezeichnen soll, und der Großteil der hier antwortenden dürfte wohl in diesem Bereich liegen, dann muss ich sagen: miserabel.
2. wenn ich bei 2en die mir schon geantwortet haben das Profil ansehe und dann Informatiker lese, wird es auch nicht besser.
3. ja, einen Weg C# vernünftig zu lernen habe ich nicht gefunden - bislang. Ich habe 2 Galileo-Bücher - Visual C# 2008 - ein neueres und ein älteres, aber hier bin ich evtl. zu ungeduldig um diese 15cm-Schwarten von vorne her durch zu arbeiten. Denn manches gelingt mir schon, oder besser gelang mir vor rund 1 Jahr, denn zwischendurch habe ich mal pausiert und wieder viel vergessen.
4. die Hilfe zu Visual C# 2008 Expreß ist sehr ausführlich, aber für Anfänger erschlagend. Um hier nochmal auf Sort zu kommen, ich hätte schon erwartet, dass auch Array.Sort hätte gefunden werden sollen.
5. das 1. Beispiel habe ich als Konsolenanwendung einfach kopiert und es läuft. Weil dieses "IComperable.." offensichtlich bereits enthalten ist, so steht es zumindest in der Beschreibung. Und, sorry Norman-Hendrik, ich kann Deine Beschreibung lesen aber nicht verstehen. Nicht direkt, sofort und nicht wirklich.
6. nur mal so: mit Programmieren habe ich zu Zeiten des 1. Commodore angefangen, Basic und später 8080 und 6502 Assembler. Turbo-Pascal, Excel-VB. Klägliche Versuche mit C++, kleine Erfolge, weil ein netter Mensch mir kräftig unter die Arme griff. Gleiches nun in C#, nur hier ist einiges viel einfacher und doch wieder so unverständlich, dass ich praktisch "die Flinte in der Hand halte um sie ins Korn zu werfen".

So besehen freut es mich, dass Du, Norman-Hendrik, meinst, ich sei hier schon gut aufgehoben. Ich zweifle allerdings etwas, nicht, weil es zwar keine Codes aber schon Hilfe gibt, nein, weil ich offensichtlich Euere Sprache nicht spreche. Vielleicht noch nicht, das wird man abwarten müssen. Ich möchte auch nicht sagen, dass Ihr in gewisser Weise betriebsblind seid, das stimmt so nicht, auch wenn mir momentan kein besseres Beispiel einfällt. Ich vergleiche das gerne mit meinem Sohn, der auch nicht verstehen kann, warum ich einiges nicht verstehe. Wir konnten diesen Knoten aber bislang nicht lösen.

Nein, ich kann nur um Geduld und Nachsicht bitten wenn ich wieder mit einer Frage kommen sollte, hier höre ich jetzt erst mal auf, und sorry fürs OT. Inzwischen habe ich auch einige andere Postings gelesen und bin doch ein wenig schlauer, wie der Hase hier läuft.

Wie gesagt schwierig, auch schriftlich erklären zu wollen wo das Problem liegt...

_________________
Viele Grüße, Charly
norman2306
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 222
Erhaltene Danke: 16

Win XP, Win 7 64-Bit
C# 4.0 (VS2010)
BeitragVerfasst: Fr 16.04.10 00:17 
Nochmal Servus!

Ein was möchte ich klarstellen. Ich bin kein Informatiker. Ich habe Physik und Maschinenbau studiert. Und mit programmieren habe ich auch zu Zeiten des Atari, damals mit Basic angefangen. Ok, ich bin mit 27 im Vergleich zu dir noch relativ Jung, aber die Grundvorraussetzungen sind die Selben. Und nein, ich nehme da keine Rücksicht auf dein Alter. Ich finde es toll, dass du dich noch mit soetwas wie programmieren beschäftigst und das bringt dir allen Respekt. Aber um den Respekt aufrecht zu erhalten, solltest du es tunlichst vermeiden, mit deinem Alter etwas zu entschuldigen.

Wenn du etwas nicht verstehtst, stehen dir hier alle gern zur Seite und es hackt dir niemand den Kopf ab, wenn du etwas nachbohrst. Mir ist durchaus bewusst, dass Schnittstellen erstmal ein harter Tobak sind. Und meine Erklärung vorhin war in der Tat etwas lapidar. Das lag aber schllicht und ergreifend daran, dass ich noch eine Verabredung hatte und etwas spät dran war.

Was Kha von dir wollte ist relativ einfach: in diesem Thema (engl.: Thread) ging es darum, Minimum und Maximum heraus zu finden. Das Thema "Sortieren" ist ein völlig anderes. Deshalb hat er dich darauf aufmerksam gemacht, bitte ein neues Thema zu eröffnen. Selbes gilt für die Frage "Wofür sind Schnittstellen gut?". Das hilft einfach, die Übersicht zu bewahren und ermöglicht es anderen, die sich ebenfalls für das Thema interessieren, an der Diskussion teil zu nehmen.

Wenn wir hier antworten, verbringen wir hier allesamt unsere Freizeit (Kha bestimmt ein bißchen mehr als ich). Daher finde ich es auch gerechtfertigt, wenn diejenigen die antworten, auch die Bedingungen stellen. Und die sind nicht allzu hoch angesetzt. Die Bitte ist einfach,

1. höfflich sein
2. für jedes Thema eine neue Diskusionsrunde
3. vorher schauen, was man selbst rausbekommt
4. Sage klar was du wissen möchtest. Mehr ist in dem Fall auch mehr.

Es stimmt auch nicht, dass wir keinen Code weitergeben. (schau zb mal hier www.c-sharp-forum.de/viewtopic.php?t=98138). Aber in der Regel ist es schon gut, etwas Code zu bekommen. Und nicht zu Letzt treiben sich hier auch oft Schüler/Studenten rum, die schlicht zu faul sind, ihr Hausaufgaben zu erledigen und auf diesem Weg versuchen, Die Lösung frei Haus geliefert zu bekommen. Und dafür bin ich, und ich denke auch die anderen die hier wirklich aktiv sind, einfach zu schade.
karomue
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 18

Win XP, Vista, Win 7
Visual C# 2008 Expreß
BeitragVerfasst: Fr 16.04.10 09:23 
Norman_Hemdrik, doch noch eine kurze Antwort, bevor wir hier aufhören sollten, sonst ziehe ich mir bereechtigt den Fotenärger zu.

Nein, ich möchte nichts durch mein Alter entschuldigen, das war nur der Versuch einen mir selbst unerklärlichen Zustand zu benennen, dass ich mi der Logik moderner Progs (objektorientiert...) schlecht zurechtkomme, während es Deine Generation offenbar nahezu "mit der Muttermilch" eingesogen hat. Es ist mein Problem und hat - so vermute ich wenigstens - da wohl schon was mit dem Alter zu tun.

Gut, Du bist nun kein Informatiker. Das sollte auch keine Rundumwertung sein, aber die beiden Netten, die mir auf die ersten Frage geantwortet hatten, hatten dies halt in ihrem Profil stehen. Hier - und früher schon öfter - hätte ich jetzt auch ein Smiley eingefügt um jegliche mögliche Spitze, die der Eine oder Andere aus meinem Text evtl. doch noch herauslesen könnte, zu nehmen.

Nein, nein, ich bn auch sehr angetan durch die Antworten die ich bislang erhalten konnte. Dass ein Anfänger evtl. sich - noch - nicht an die allg. Gepflogenheiten hält, dürfte (in Maßen) entschuldigt werden, es ist ja i.d.R. keine böse Absicht.

Ich wollte auch keinen Vorwurf machen, dass ich Deine Ausführungen nicht verstanden habe. Es ist ja sicher richtig, dass ich doch wieder versuchen sollte mehr über c# zu erfahren, in dem Sinne fasse ich mich auch schon an die eigene Nase, obwohl: es ist ja so verlockend den Weg des geringsten Widerstandes zu gehen.

Und was die Freizeit-Arbeit angeht, das kenne ich zur Genüge, denn ich bin selbst im Forum pocketnavigation.de seit jetzt rund 8 Jahren aktiv und bin eigentlich auch jetzt noch täglich mehrere h dort mindestens lesend zu Gange.

Von meiner Seite besteht jetzt kein Erklärungsbedarf mehr, so dass wir hier sinnvoll aufhören sollten. Falls es notwendig sein sollte weiter zu machen, gerne unter OT, dann gebt mir eine kurze PN wo es weitergeht.

Zum Abschluss: ich hoffe, dass ich niemandem auf "die Zehen" getreten bin, wenn doch, es war sicher keine Absicht, wenn jemand den Eindruck bekam entschuldige ich mich gerne. Ich bin jetzt vorwiegend erst mal nur lesend hier bis ich meine c#-Kenntnisse wieder etwas mehr aufgemöbelt habe. Trotz allem brachte dieser Thread, auch wenn er in Eurem Sinne von mir missverstanden wurde, für mich den großen Vorteil, dass ich gelernt habe, dass Sortierprobleme nicht programmiert werden müssen sondern unter der Array-Klasse Sort vorhanden sind. Sollten sie bei mir mal auftauchen. Freu.

_________________
Viele Grüße, Charly