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:

Array & Sub/Function

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 19.02.2007, 08:05    Titel: Array & Sub/Function Antworten mit Zitat

Hallöle.

Ich bin gerade dabei von VB auf FB um zu steigen.

Mein erstes Prog war recht simpel und schnell geschrieben
Code:
Print "Test"
grinsen

Mein 2tes macht mir allerdings massiv zu schaffen. In VB würde ich das so schreiben.
Code:
Option Base 1

Declare Sub Main()
Declare Sub XFillArrayRND(V_MaxDeep As Long, V_MaxValue as Long, B_ArrayD() As Long, B_ArrayC As Long)

Call Main

Private Sub Main()                                 'Main application Sub-Routine
   Dim DD() As Long                                 'Data-Array
   Dim DC As Long                                    'ItemCount for Data-Array
   Dim X As Long                                    'Item-Counter for Print-Out
   Call XFillArrayRND(10,100,DD,DC)                  'Call Randomize-Value-Filling function
   For X = 1 To B_ArrayC                           'Get step by step Data-Valus for Print-Out till ItemCount
      Print DD(X)                                    'Print-Out Data-Value
   Next                                             'Next setp by step
   End                                             'Terminate application
End Sub

Private Sub XFillArrayRND(V_MaxDeep As Long, V_MaxValue as Long, B_ArrayD() As Long, B_ArrayC As Long)   'Randomize-Value-Filling Function
   Dim X As Long                                    'Counter for V_MaxDeep (number of maximum items to create)                                     
   Randomize Timer                                 'Inizialize randomizing function
   B_ArrayC = Int((Rnd * V_MaxDeep)+1)               'Create randomize array deep
   ReDim B_ArrayD(B_ArrayC) As Long                  'Redimension array
   For X = 1 To B_ArrayC                           'go step by step array to fill randomize numbers
      B_ArrayD(X) = Int((Rnd * V_MaxValue)+1)      'Fill array with randomize number
   Next
End Sub
Allerdings will das in FB nicht so recht. weinen Nun würde mich mal interresieren, warum dem so ist. Ich hab das Forum auch schon gut durchsucht, allerdings komm ich mit den Antworten auf ähnliche Fragen mit "Arrays einer Funktion oder Sub übergeben" nicht so recht, zurecht.

Daher wär ich euch dankbar, wenn man mir das eventuell man in FB umsetzen könnte, damit ich mir das einmal vergleichsweise anschauen kann, um es zu verstehen.

Vielen Dank schon einmal im vorraus.
MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 19.02.2007, 14:41    Titel: Antworten mit Zitat

Hi,
ich habe nur soviel wie nötig geändert, die Zeilen sind kommentiert und
so läuft es..
Code:
Option Base 1
Option Explicit 'Immer wichtig&richtig(solange FB0.16 benutzt wird..)
Declare Sub Main()
Declare Sub XFillArrayRND(V_MaxDeep As Long, V_MaxValue as Long, B_ArrayC As Long)
Dim Shared B_ArrayD() As Long 'so gehts erst mal..
Call Main

Private Sub Main()                                 'Main application Sub-Routine
  Dim DD() As Long                                 'Data-Array
  Dim DC As Long                                    'ItemCount for Data-Array
  Dim X As Long                                    'Item-Counter for Print-Out
  Dim As Long B_ArrayC 'Das war ja gar nicht gedim't
  ?"Main.."
  Call XFillArrayRND(10, 100, DC)                  'Call Randomize-Value-Filling function
   For X = 1 To B_ArrayC                           'Get step by step Data-Valus for Print-Out till ItemCount
      Print B_ArrayD(X)                                    'Print-Out Data-Value
   Next                                             'Next setp by step
  ?"Eniki..";
Sleep
   End                                             'Terminate application
End Sub

Private Sub XFillArrayRND(V_MaxDeep As Long, V_MaxValue as Long, B_ArrayC As Long)   'Randomize-Value-Filling Function
   Dim X As Long                                    'Counter for V_MaxDeep (number of maximum items to create)                                     
  Randomize Timer                                 'Inizialize randomizing function
   B_ArrayC = Int((Rnd * V_MaxDeep)+1)               'Create randomize array deep
   ReDim B_ArrayD(B_ArrayC) As Long                  'Redimension array
   For X = 1 To B_ArrayC                           'go step by step array to fill randomize numbers
      B_ArrayD(X) = Int((Rnd * V_MaxValue)+1)      'Fill array with randomize number
      Print B_ArrayD(X)                                   'Print-Out Data-Value
   Next
End Sub
Meine Version wäre folgende:
Code:
Option Base 1
Option Explicit 'Immer wichtig&richtig(solange FB0.16 benutzt wird..)
Declare Sub XFillArrayRND(V_MaxDeep As Long, V_MaxValue as Long, B_ArrayC As Long)
Dim Shared B_ArrayD() As Long 'so gehts erst mal..
Dim DD() As Long                                 'Data-Array
Dim DC As Long                                   'ItemCount for Data-Array
Dim X As Long                                    'Item-Counter for Print-Out
Dim As Long B_ArrayC 'Das war ja gar nicht gedim't
Randomize Timer                                  'Inizialize randomizing function
?"Main.."
Call XFillArrayRND(10, 100, DC)                  'Call Randomize-Value-Filling function
  For X = 1 To B_ArrayC                          'Get step by step Data-Valus for Print-Out till ItemCount
    Print B_ArrayD(X)                            'Print-Out Data-Value
  Next                                           'Next setp by step
?"Eniki..";
Sleep
End                                              'Terminate application

Sub XFillArrayRND(V_MaxDeep As Long, V_MaxValue as Long, B_ArrayC As Long)   'Randomize-Value-Filling Function
  Dim X As Long                                  'Counter for V_MaxDeep (number of maximum items to create)
  B_ArrayC = Int((Rnd * V_MaxDeep)+1)            'Create randomize array deep
  ReDim B_ArrayD(B_ArrayC) As Long               'Redimension array
  For X = 1 To B_ArrayC                          'go step by step array to fill randomize numbers
    B_ArrayD(X) = Int((Rnd * V_MaxValue)+1)      'Fill array with randomize number
    Print B_ArrayD(X)                            'Print-Out Data-Value
  Next
End Sub
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 19.02.2007, 16:01    Titel: Antworten mit Zitat

Vielen dank für die Mühe ... leider ist es aber nicht das, was ich erhofft habe ... Ich hatte schon vor, die Array-Variable zu übergeben ... (Hätte ich wohl doch in den ersten Post schreiben sollen Autsch!

Ich wollte das eigentlich nicht Gloab Declarieren, sondern in der Funktion, und Sie dann der Funktion übergeben.

Ich möchte z.B. eine Splitstring-Funktion in FB portieren.
VB [Einfacher SplitString (der Komplexere is erstmal nicht so wichtig, da ja nur das Array-Problem besteht)]
Code:
Public Function SplitString(V_String As String, B_ArrayD() As String, B_ArrayC As Long, Optional V_SplitType As String = " ", Optional V_MaxSplitCount As Long = 0)
On Error Resume Next
Dim D As String
Dim T As String
Dim Pos As Long
Dim X As Long
D = V_String
B_ArrayC = 0
For X = 1 To Len(D)
    Pos = InStr(1, D, V_SplitType)
    If Pos > 0 Then
        T = Mid(D, 1, Pos - 1)
        D = Mid(D, Pos + Len(V_SplitType))
    Else
        T = D
        D = ""
    End If
    B_ArrayC = B_ArrayC + 1
    ReDim Preserve B_ArrayD(B_ArrayC) As String
    B_ArrayD(B_ArrayC) = T
    If V_MaxSplitCount > 0 And V_MaxSplitCount = B_ArrayC - 1 Then
        B_ArrayC = B_ArrayC + 1
        ReDim Preserve B_ArrayD(B_ArrayC) As String
        B_ArrayD(B_ArrayC) = D
        Exit For
    End If
    If D = "" Then Exit For
Next
End Function

PS: Mir is bekannt, das es eine Interne Funktion gibt, die das auch kann. (Was aber nicth die lösung für dieses Problem is grinsen

Wenn ich aus irgend einer Sub oder Funktion fix einmal ein String zerteilen möchte, um es einfacher auswerten zu können, oder warum auch immer, dann declariere ich in der sub /Funktion ein Array, das ich der Funktion SplitString übergebe, welche dann die benötigten arbeitsschritte durchführt.

Wenn ich allerdinsg immer die Array Global Statisch deklariere, dann kann das auch später, bei einigen Projekten, zu massiven Speicehrproblemen führen, die einige Funktionen doch SEHR viele Daten aufnehmen müssen. Folglich würden Static declarierte Variaben (Array) nur massiv Speicher fressen, unnötig Code veruhrsachen, um diese eventuell wieder zu leeren, um speicher zu sparen, und den Quellcode an unnötigen Stellen unübersichtlich aufpumpen.

Geht das wirklich nicht anders? traurig ... Ich arbeite viel mit Array-Übergaben an Funktionen und Subs .. von daher wär das schon recht aufwendig, wenn cih das so machen müsste ... weinen


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 19.02.2007, 19:10    Titel: Antworten mit Zitat

Dann meinst du sowas?
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 19.02.2007, 19:22    Titel: Antworten mit Zitat

Jip .. genau ...

Was ich jetzt nru nicht verstehe, Warum funzt dieser Code beim Compiling Problemlos, und meiner spukt Fehlermeldungen aus?

öööööööm .... neutral merkwürdiger weise hab ich nun keinen Fehler mehr, beim Kompilieren des von mir anfangs gepostetem Codes ... ?!?!? ... Jetzt bin ich ganz verwirrt.....

So langsam glaub ich, das meine IDE nicht so ganz will, wie ich das will ... Hab die FreeBASIC ecitor 1.0.4.2 von KetilO

Teilweise semmelt die schon mal ab, aber die Rückgaben der Fehler kommen vom Compiler, folglich hats ja damit nix zu tun ... fragt sich nur, warum der so komische Fehler aus gibt .. hmm

Naja .. Ich Danke dir Dennoch herzlichst, für deine bemühungen!, und sry für die umstände!

*grübel*
MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 19.02.2007, 19:51    Titel: Antworten mit Zitat

Ähmm, das Problem läßt sich ganz einfach dadurch lösen, daß du dein Programm mal von Hand kompilierst..
also: fbc deinprogramm.bas
Dann schauste die die Fehlermeldungen mal an und überlegst, was das sein könnte..
Damit haste den FBEdit erstma außen vor gelassen und er kann nicht schuld sein grinsen
Gruß
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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