Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Type-Lib

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 16.01.2010, 22:39    Titel: Type-Lib Antworten mit Zitat

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. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 17.01.2010, 00:03    Titel: Antworten mit Zitat

Dokumentation:
List
FBString


Zuletzt bearbeitet von Stueber am 17.01.2010, 15:10, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 17.01.2010, 14:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 17.01.2010, 15:05    Titel: Antworten mit Zitat

Als Lizenz hätte ich an die LGPL gedacht.
Eine Mengenklasse könnte ich versuchen, nur kann ich mit Mengendifferenz nichts anfangen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 17.01.2010, 15:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 17.01.2010, 15:41    Titel: Antworten mit Zitat

Kannte ich garnicht, muss ich mir gleich mal anschauen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 17.01.2010, 16:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 17.01.2010, 16:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 17.01.2010, 16:34    Titel: Antworten mit Zitat

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 zwinkern

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 17.01.2010, 16:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 17.01.2010, 16:55    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 17.01.2010, 16:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 17.01.2010, 17:13    Titel: Antworten mit Zitat

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 grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 17.01.2010, 17:43    Titel: Antworten mit Zitat

Du kannst kein Basisdatum finden, weil ich keines benutze. lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz