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:

Wo liegt der Fehler?

 
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
Stan



Anmeldungsdatum: 22.05.2007
Beiträge: 2

BeitragVerfasst am: 22.05.2007, 11:57    Titel: Wo liegt der Fehler? Antworten mit Zitat

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



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 22.05.2007, 13:15    Titel: Antworten mit Zitat

Vielleicht Zeile 2 so abändern:


Code:

dim shared ml(12)as integer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 22.05.2007, 13:27    Titel: Antworten mit Zitat

Hallo Stan, willkommen in der Community! lächeln
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. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 22.05.2007, 13:47    Titel: Antworten mit Zitat

Zitat:

@Elektronix:
Bei FB kann man Bereiche angeben, in denen der Index verläuft. zwinkern


Ajo so, das kannte ich von QBasic nicht. Wozu dient das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 22.05.2007, 13:51    Titel: Antworten mit Zitat

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). zwinkern
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. lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 22.05.2007, 14:03    Titel: Antworten mit Zitat

Hmm, weiß nicht, ob ich das jetzt verstanden hab mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 22.05.2007, 14:14    Titel: Antworten mit Zitat

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

zwinkern
_________________
» 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
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 22.05.2007, 14:29    Titel: Antworten mit Zitat

Ok, das hab ich verstanden. Wäre das Gleichbedeutend mit
Code:

DIM verkauft (39)

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



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

BeitragVerfasst am: 22.05.2007, 14:44    Titel: Antworten mit Zitat

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


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

BeitragVerfasst am: 22.05.2007, 14:48    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 22.05.2007, 15:34    Titel: Antworten mit Zitat

Alles klar, habst geschnallt. Danke für die Aufklärung. Daumen rauf!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stan



Anmeldungsdatum: 22.05.2007
Beiträge: 2

BeitragVerfasst am: 23.05.2007, 00:17    Titel: Danke Antworten mit Zitat

Hallelujah, das ist es! lächeln
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
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