Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 16.01.2010, 22:39 Titel: Type-Lib |
|
|
Ich will hier ja nichts zumüllen (das ist mein viertes Projekt auf der ersten Seite) aber ich denke dass das hier vorgestellte einen eigenen Thread verdient hat.
Vor ein paar Tagen habe ich die Types List und Map vorgestellt. Da ich von verschiedenen Leuten positive Kritik bekommen habe, stell ich euch hier auch den Rest zur verfügung.
"Welchen Rest?" könnte man fragen. Die beiden Types waren nur zwei von einer Type-Bibliothek.
Diese stell ich hier vor.
>>>Download<<<
List
Verkettete Listen.
Suchen, ersetzen, bewegen, tauschen, zählen, anhängen, einfügen, voranstellen und löschen innerhalb von Listen.
Zurückgeben von Teillisten und überprüfen ob bestimmte Werte in der Liste vorkommen.
Alle Vergleichsoperatoren und += und + überladen.
Map
Verbinden von Werten.
Einfügen, tauschen und bewegen von Key-Value Paaren.
Zurückgeben von Values über Keys.
FBString
Stringklasse
Voranstellen, einfügen, anhängen, zählen von Teilstrings, rückwärts und vorwärts suchen, Teilstrings ermitteln, füllen und ersetzen innerhalb von Strings.
Cast Operator für Strings überladen, casting Funktionen für viele Datentypen und für Groß-, Kleinschreibung.
FBBitArray
Auswerten, setzen, tauschen und testen von Bits in einem Bitfeld.
Einige Hilfsfunktionen.
FBBool
Boolischer Datentyp mit true und false.
FBColor
Farbklasse
Einfache Farbberechnungen.
Cast Operator für uinteger und dword überladen.
Kann anstelle von rgb-Makros verwendet werden.
FBDate
Datumsklasse
Datumsinformationen, Wochentagsberechnung, Datumsdifferenz
FBFile
Dateiklasse
Noch unfertig!
Schreiben und lesen von Dateien und Dateisystem Funktionen.
FBLine
Klasse für Linien
Nützlich für Animationen, kann mit dem Makro drawLine auf gfx Fenster gezeichnet werden.
FBLineD
Double Variante von FBLine
FBLogfile
Logfile-Klasse
Zum finden von Fehlern im Programm bei Bugreports von Benutzern.
Beispiel-Logfile
Beinhaltet auch ein Makro bei dem man den Fehlertext angibt und Datei, Zeilennummer und Funktionsname automatisch geschrieben werden.
FBMemMan
Speichermanager
Zwei Funktionen um Speicher zu reservieren oder freizugeben, alle Funktionen sind static.
Löscht beim beenden des Programms den reservierten Speicher, sofern noch nicht geschehen.
FBPoint
Klasse für Punkte
Basis für die anderen Primitiven.
Kann über drawPoint auf gfx Fenster gezeichnet werden.
FBPointD
Double Variante von FBPoint
FBRect
Rechtecksklasse
Verschiedene Rechnungen mit Rechtecken, kann prüfen ob sich ein Punkt oder Rechteck innerhalb eines anderen Rechtecks befindet.
Kann über drawRect auf gfx Fenster gezeichnet werden.
FBSize
Klasse für Größe
Basis für andere Primitiven.
FBStringInt
Erlaubt das Rechnen mit bis zu 2 Milliarden Dezimalstellen.
Bisher nur addieren mit natürlichen Zahlen!
FBTime
Zeitklasse
Stoppuhr, Zeitberechnungen, Zeitdifferenz
fbsignal.bi
Leichtere Programmorganisation
Signal-Slot-Konzept für FreeBASIC auf Basis von Map und List.
fbdraw.bi
GFX-Zeichenmakros für die Primitiven Klassen.
Alle Types laufen auf Windows und Linux.
Wenn jemandem noch eine nützliche Klasse einfällt oder eine nützliche Memberfunktion für eine bereits bestehende Klasse bau ich gerne alles ein.  |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 17.01.2010, 00:03 Titel: |
|
|
Dokumentation:
List
FBString
Zuletzt bearbeitet von Stueber am 17.01.2010, 15:10, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 17.01.2010, 14:42 Titel: |
|
|
Eine Frage etwas anderer Art: Unter welcher Lizenz steht die Bibliothek?
Was ich mir vorstellen könnte - habe auf die Schnelle keine Entsprechung dazu entdeckt - wäre eine Mengenklasse. Hat Ähnlichkeiten mit einer Liste, bietet aber Einmaligkeit der Elemente, Vereinigungs- und Schnittmenge sowie Mengendifferenz.
Eventuell kann man dazu auch einfach nur den List-Typ erweitern (ich glaube, dass Ruby das so ähnlich macht). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 17.01.2010, 15:05 Titel: |
|
|
Als Lizenz hätte ich an die LGPL gedacht.
Eine Mengenklasse könnte ich versuchen, nur kann ich mit Mengendifferenz nichts anfangen. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 17.01.2010, 15:39 Titel: |
|
|
Zitat: | FBStringInt
Erlaubt das Rechnen mit bis zu 2 Milliarden Dezimalstellen.
Bisher nur addieren mit natürlichen Zahlen! |
Wäre ein Wrapper für die GMP nicht wesentlich einfacher, effizienter und erheblich schneller? |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 17.01.2010, 15:41 Titel: |
|
|
Kannte ich garnicht, muss ich mir gleich mal anschauen. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 17.01.2010, 16:09 Titel: |
|
|
Stueber hat Folgendes geschrieben: | nur kann ich mit Mengendifferenz nichts anfangen. |
A \ B
{1; 2; 3; 4; 5} \ {2; 4} = {1; 3; 5} oder auch {1; 2; 3; 4; 5} \ {2; 4; 6; 8; 10} = {1; 3; 5}
Als Operatoren bietet sich da eine Überladung von AND (Schnittmenge), OR (Vereinigungsmenge) und \ an. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 17.01.2010, 16:17 Titel: |
|
|
Gibt auch BigInt, dafür gibt's schon FB-Header. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 17.01.2010, 16:34 Titel: |
|
|
die fbdate.bi finde ich sehr interessant, da ich mal für den Hausgebrauch was ähnliches
fabriziert hatte.
In Ermangelung meiner Programmierkenntnisse bin ich mal vorsichtig mit nem Bugreport:
Code: |
#include "fbdate.bi"
dim as FBDate ptr datumA,datumB
datumA = new FBDate ("09-22-1969")'Ist nen Montag und mit Sicherheit richtig :)
datumB = new FBDate ("01-01-1900")'kein Schaltjahr!!
print datumA->getDayOfWeek()
print datumB->daysInYear()
sleep
delete datumA
delete datumB
end
|
Ich bin mir sicher das 1900 kein Schaltjahr war!
Volle Jahrhunderte(1600,1700 usw) sind nur dann Schaltjahre wenn sie durch 400 teilbar sind.
Und ich vermute mal das dieses Problemchen in diese Funktion hineingehört
Code: |
function FBDate.daysInYear() as integer
if getYear() mod 4 = 0 then return 366
return 365
end function
|
ist ja nur für den Fall wenn man den Burzeltach von Uromma "Charlotte Wilhelmine" herausbekommen will
Mutton |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 17.01.2010, 16:40 Titel: |
|
|
Code: | dim jahr as integer = 2000
do
print jahr
jahr -= 4
loop until jahr < 1850
sleep |
Das Jahr 2000 war ein Schaltjahr also war 1900 auch ein Schaltjahr, da 100 durch 4 teilbar ist und 2000-100 = 1900 ist. |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 17.01.2010, 16:55 Titel: |
|
|
http://de.wikipedia.org/wiki/Gregorianischer_Kalender
siehe dort im Abschnitt: Neue Jahreslänge
also ist die Regel so wie ich sie verstehe:
alle durch 4 teilbare Jahre sind Schaltjahre mit folgender Ausnahme:
Volle Jahrunderte sind nur dann Schaltjahre wenn sie durch 400 teilbar sind
Mutton |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 17.01.2010, 16:56 Titel: |
|
|
Ich wusste nicht das es da ausnahmen gibt. Wird gleich verbessert.
Das hatte ich auch nicht so viel getestet, Wochentagsberechnung war viel schwerer. |
|
Nach oben |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 17.01.2010, 17:13 Titel: |
|
|
ich wollte sowieso fragen ob du da nen "BasisDatum" hast von dem du nach vorn und zurückrechnest....
ich habs damals so gemacht:
01.01.2000 war nen Sonnabend(6) und hatte den Tagesstempel 1, und von dort aus wurde dann berechnet... recht übles Konstrukt damals
Hab aber bei dir sowas noch nicht entdeckt  |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 17.01.2010, 17:43 Titel: |
|
|
Du kannst kein Basisdatum finden, weil ich keines benutze.
Das geht so:
Zuerst die benötigten Konstanten
Code: | #define FBDATE_Jan 0
#define FBDATE_Feb 3
#define FBDATE_Mae 3
#define FBDATE_Apr 6
#define FBDATE_Mai 1
#define FBDATE_Jun 4
#define FBDATE_Jul 6
#define FBDATE_Aug 2
#define FBDATE_Sep 5
#define FBDATE_Okt 0
#define FBDATE_Nov 3
#define FBDATE_Dez 5
#define FBDATE_MONTAG 1
#define FBDATE_DIENSTAG 2
#define FBDATE_MITTWOCH 3
#define FBDATE_DONNERSTAG 4
#define FBDATE_FREITAG 5
#define FBDATE_SAMSTAG 6
#define FBDATE_SONNTAG 0 |
Wie man auf die Monatszahlen kommt ich eine andere Sache, aber die Tage sind nummeriert.
Jetzt braucht man 5 Daten:
- Den Modulo von TagImMonate und 7, also getDay() mod 7
- (letzteZweiZiffernDerJahreszahl + (letzteZweiZiffernDerJahreszahl / 4)) mod 7
- (3 - (Jahrhundert / 4)) mod 7
- Monatswert (siehe oben)
Die Ergebnisse dieser Rechnungen zählt man zusammen, wenn das Datum im Januar oder Februar eines Schaltjahres liegt zählt man noch 6 dazu und der Modulo dieses Ergebnisses mit 7 ist dann der Wochentag. |
|
Nach oben |
|
 |
|