Entwickler-Ecke

Open Source Projekte - science Class Library


ffprogramming - So 02.08.09 19:56
Titel: science Class Library
Was ist FF ClassLibrary?
FF ClassLibrary ist eine Bibliothek für .NET 3.5 (geschrieben in C#), die mehrere mathematisch-wissenschaftliche Klassen bereitstellt. Sie definiert den Namespace science.

Features
Ausgeben von Primzahlen
Finden des größten gemeinsamen Teilers (GGT)
kürzen von Brüchen
multiplizieren von Brüchen

In Planung
Addieren/subtrahieren von Brüchen
Dividieren von Brüchen (fast fertig)

Beispielcode zur Bestimmung des größten gemeinsamen Teilers:

C#-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:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using science; //wichtig dieses using
namespace test
{
class Program
{
static void Main(string[] args)
{
euklid ggt = new euklid();//Dieser Objektverweis ist
//erforderlich.
//Ab jetzt können die Variabeln bzw. die Methode der Klasse
//durch ggt.Variabel oder ggt.Methode() aufgerufen werden.
ggt.a = 12;//Die beiden Zahlen für die der GGT berechnet werden
ggt.b = 3//soll.
ggt.ggt(); // ausführen der Methode zur Berechnung des GGT
Console.WriteLine(Convert.ToString(ggt.ggts));//Hier wird der
//GGT ausgegben.
//Er muss noch von double in string konvertiert werden.
}
}
}


Ich würde mich über Tipps/Ratschläge freuen.


Jakob_Ullmann - Do 06.08.09 11:55

Auch wenn mir bisher kein richtiger Verwendungszweck einfällt, sieht das schonmal gut bis jetzt aus (ich nehme an, das wird noch erweitert, oder?). Was mich noch interessieren würde:



Bei den Primzahlen:

Zitat:
Please enter border!


Ich glaube eigentlich nicht, dass border da passt. Eher margin oder limit.


Kha - Do 06.08.09 18:35

Wenn du gerade beim Einstieg in OOP bist, ist Übung natürlich nie schlecht, aber für Funktionen wie GGT ist eine instanzierbare Klasse einfach Overkill ;) . Für die Methoden von System.Math musst du ja auch keine Instanz erzeugen.

Vorschlag einer Umgliederung:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
static class MathEx
{
  public static int Ggt(int a, int b);
  public static int[] GetPrimes(int limit);
  // Noch schöner wäre IEnumerable<T> GetPrimes(), aber das hat noch Zeit...
}

class Fraction
{
  public Fraction(int numerator, int denominator);
  
  public static Fraction Mul(Fraction a, Fraction b);
  public Fraction Cancel();
  public static Fraction Parse(string s);
}
Man könnte sich noch überlegen, statt Mul den *-Operator zu überladen, außerdem würde sich für Fraction ein struct anbieten, aber das ist wirklich nebensächlich.

user profile iconJakob_Ullmann hat folgendes geschrieben Zum zitierten Posting springen:
eine richtig kompfortable Klasse für Sortieralgorithmen
Komfortabel? Das nenne ich absolute [http://msdn.microsoft.com/en-us/library/3da4abas.aspx] Grundfunktion [http://msdn.microsoft.com/en-us/library/system.linq.enumerable.orderby.aspx] ;P .


Jakob_Ullmann - Do 06.08.09 18:37

Wusste noch gar nicht, dass es in .NET ne eigene Sortier-Klasse gibt. Sollte ich mir wohl mal anschauen. :wink:


Kha - Do 06.08.09 19:46

Eine eigene Klasse ist es nun auch wieder nicht ;) . Und das, was du beschreibst - beliebige Daten mit einer Compare-Funktion zu sortieren - schafft auch TList.Sort und erst recht TList<T>.Sort.


ffprogramming - Mi 19.08.09 18:45

Tag!
Sorry das ich erst jetzt antworte. Aber ich war in Urlaub.
Ich weiß das es in C# eine bessere Möglichkeit gibt zu suchen. Ich habe einfach nur interessehalber Bubblesort hinzugefügt.
Ich denke die Bibilothek ist noch durch SINNVOLLE Methoden erweiterbar.
Liebe Grüße
Filip

-- Moderiert von user profile iconKha: Beiträge zusammengefügt --

Leider habe ich von dem Verbesserungsvorschlag nicht alzuviel verstnaden.
Ich verstehe. dass du kein Objekt der Klasse erzeugen willst!
Leider habe ich nicht ganz verstanden wie du das anstellst.


Kha - Mi 19.08.09 19:06

Mit statischen Methoden bist du vertraut? Wenn nicht, würde ich mal im Galileo Open Book C# o.Ä. nachschlagen.
Die Signatur habe ich ja schon gepostet, du müsstest nur noch deinen bestehenden Code einfügen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
public static class MathEx
{
  public static int Ggt(int a, int b)
  {
    ...
  }
  ...
}


Für weitergehende Frage, die nicht direkt mit dem Projekt zusammenhängen, solltest du aber lieber einen neuen Thread aufmachen.


ffprogramming - Mi 19.08.09 19:16

Ok danke für die Antwort!