Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Stan
Anmeldungsdatum: 22.05.2007 Beiträge: 2
|
Verfasst am: 22.05.2007, 11:57 Titel: Wo liegt der Fehler? |
|
|
Hallo,
ich habe erst vor kurzem freebasic kennengelernt und nachdem die meisten meiner (sehr oberflächlichen) Programmiererfahrungen rund 25 Jahre zurückliegen (In der Schule mit Apple][ und privat mit 64er) bin ich froh mit freebasic eine recht ursprüngliche Programmiermöglichkeit gefunden zu haben. Ich hab mich auch schon ein bischen mit delphi beschäftigt finde aber, daß man vor lauter Layout kaum zum wirklichen Programmieren kommt.
Nachdem ich ein bisschen ausprobiert habe bin ich an eine Stelle gekommen an der ich nicht mehr weiterkomme, da ichh den gemeldeten Fehler beim Kompilieren einfach nicht finde:
Code: | 1 declare sub test(ax,ml as integer)
2 dim shared ml(1 to 12)as integer
3 dim i as integer
4 dim shared ax as integer
5 for i = 1 to 12
6 read ml(i)
7 next i
8 data 12,34,27,44,11,66,24,61,34,29,38,42
9 sleep
10 sub test (ax,ml as integer)
11 print (ml(ax-1)-1)
12 end sub
Fehlermeldung:
Line: 11
Error nr: 68
Message: Array not dimensioned, before: '('
print (ml(ax-1)-1)
^ |
Ich hoffe meine Frage ist nicht zu trivial.
Grüße Stan
Zuletzt bearbeitet von Stan am 23.05.2007, 00:19, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 22.05.2007, 13:15 Titel: |
|
|
Vielleicht Zeile 2 so abändern:
Code: |
dim shared ml(12)as integer
|
|
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 22.05.2007, 13:27 Titel: |
|
|
Hallo Stan, willkommen in der Community!
Dein Fehler liegt darin, dass du versuchst, ein Array als Variable zu übergeben. Bei Arrays musst du ein Klammernpaar () dahinter schreiben, damit der Compiler weiß, dass ein ganzes Array verarbeitet werden muss.
Also ungefähr so:
Code: |
declare sub test(ax,ml() as integer) 'hier u.a. das Klammernpaar!
dim shared ml(1 to 12)as integer
dim i as integer
dim shared ax as integer
for i = 1 to 12
read ml(i)
next i
data 12,34,27,44,11,66,24,61,34,29,38,42
sleep
sub test (ax,ml() as integer) ' hier auch!
print (ml(ax-1)-1)
end sub
|
Ich hab dir mal noch die Zeilennummern entfernt, die brauchst du bei freeBASIC nicht.
/edit:
@Elektronix:
Bei FB kann man Bereiche angeben, in denen der Index verläuft.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 22.05.2007, 13:47 Titel: |
|
|
Zitat: |
@Elektronix:
Bei FB kann man Bereiche angeben, in denen der Index verläuft.  |
Ajo so, das kannte ich von QBasic nicht. Wozu dient das? |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 22.05.2007, 13:51 Titel: |
|
|
Kann der logischen Ordnung dienen, wenn (blödes Beispiel, ich weiß) du z.B. in einem Array Primzahlen mit einer 1, Nicht-Primzahlen mit einer 0 versehen willst. Dann entspräche es ja nicht ganz der Logik, wenn du mit 0 anfängst zu zählen. I.d.R. fängt man dann ja bei 2 an (oder 3, je nachdem).
Allerdings entspricht es natürlich auch nicht ganz der logischen Ordnung, für x zu prüfende Primzahlen ein Array der Größe x anzulegen. Mir ist auf die Schnelle jedoch kein besseres Beispiel eingefallen, evtl. kommt ja jmd. noch auf eine bessere Idee.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 22.05.2007, 14:03 Titel: |
|
|
Hmm, weiß nicht, ob ich das jetzt verstanden hab  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 22.05.2007, 14:14 Titel: |
|
|
das gab's schon in qbasic.
aber ein besseres beispiel:
du möchtest jahreszahlen einen wert zuordnen (z.B. die anzahl eines verkauften artikels). da wäre es doch unpraktisch bzw. speicherfressend, folgenden befehl zu benutzen:
Code: | dim Verkauft(2030) 'funktioniert bis 2030 |
da benutzt man lieber
Code: | dim verkauft(1991 to 2030) 'diese firma gibt es seit 1991 |
 _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 22.05.2007, 14:29 Titel: |
|
|
Ok, das hab ich verstanden. Wäre das Gleichbedeutend mit
(weil 2030 - 1991 = 39) und dient nur der besseren Lesbarkeit? Oder hat es auch einen funktionalen Aspekt?
Vermutlich kann man die Indexwerte bei der Datenabfrage gleich mitverwenden. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 22.05.2007, 14:44 Titel: |
|
|
Der funktionale Aspekt wäre, dass du nicht immer z. B.
Code: | PRINT verkauft(aktuellesJahr - 1991) |
schreiben musst, um die Verkaufszahl des aktuellen Jahres auszugeben. Also nicht unbedingt notwendig, aber auf jeden Fall praktisch. _________________ 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: 22.05.2007, 14:48 Titel: |
|
|
und viel leichter zu verstehen. denn: welche 39 (40) jahre wären in deinem beispiel gemeint? das ist nicht so leicht zu erkenne wie bei (1991 to 2030) _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Elektronix
Anmeldungsdatum: 29.06.2006 Beiträge: 742
|
Verfasst am: 22.05.2007, 15:34 Titel: |
|
|
Alles klar, habst geschnallt. Danke für die Aufklärung.  |
|
Nach oben |
|
 |
Stan
Anmeldungsdatum: 22.05.2007 Beiträge: 2
|
Verfasst am: 23.05.2007, 00:17 Titel: Danke |
|
|
Hallelujah, das ist es!
Vielen Dank an Alle die mir geantwortet haben und im Besonderen natürlich an Mao.
Da wär ich alleine nicht drauf gekommen.
(Die Zeilennummern habe ich manuell ergänzt, damit man die Stelle auf die sich die Fehlermeldung bezieht leichter findet.).
Was die Indizes angeht ist es tatsächlich mitunter eleganter nicht mit 0 anzufangen. Bei meinem Bsp. geht es um Monate und da tut es einfach weh den Januar mit "0" usw zu bezeichnen. |
|
Nach oben |
|
 |
|