 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 19.02.2007, 08:05 Titel: Array & Sub/Function |
|
|
Hallöle.
Ich bin gerade dabei von VB auf FB um zu steigen.
Mein erstes Prog war recht simpel und schnell geschrieben
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. 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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 19.02.2007, 14:41 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 19.02.2007, 16:01 Titel: |
|
|
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
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
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? ... 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 ...
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 19.02.2007, 19:10 Titel: |
|
|
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 |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 19.02.2007, 19:22 Titel: |
|
|
Jip .. genau ...
Was ich jetzt nru nicht verstehe, Warum funzt dieser Code beim Compiling Problemlos, und meiner spukt Fehlermeldungen aus?
öööööööm .... 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 |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 19.02.2007, 19:51 Titel: |
|
|
Ä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
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 |
|
 |
|
|
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.
|
|