Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 19.08.2014, 20:09 Titel: Inhalt einen Feldes in ein anderes übernehmen ... |
|
|
... bringt mir einen Fehler ein.
Guten Abend Gemeinde!
Hab' in einem Rechenstrang einen for..next Anweisung und belege pro Durchgang Variablen mit dem jeweiligen Durchgangsergebnis. x(1),x(2),x(3) usw. Hab nix dim denn bis 10 gibts da Freigrenze.
Jetzt will diese Ergebnisse in ein anderes Feld übernehmen, also zB das Ergebnis x(2) in z(2). Jetzt meckert mich der Compiler an. Die Fehlermeldung ist mir nicht mehr präsent.
Was kann ich da tun?
grüsse Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 19.08.2014, 21:11 Titel: |
|
|
Wenn du DIM verwendest, funktioniert es dann? Ich würde inzwischen auf jeden Fall die explizierte Deklaration empfehlen (OPTION EXPLICIT), da sich sonst wesentlich leichter Fehler einschleichen können.
Eine Fehlermeldung wäre auf jeden Fall sehr hilfreich, sonst gibt es viele mögliche Ursachen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 20.08.2014, 10:13 Titel: |
|
|
Hi nemored!
Dank für Deine Ausführungen!
Ich belege ein Feld sagen wir x(tra) in einer Schleife die von 2 bis 10 geht; zuvor belege ich cx(tra) von Hand mit (0) und (1). Das klappt auch ganz prima. Jetzt gehe ich in eine andere Schleife und will Teile des Inhalts von cx(..) in scx(..) übernehmen. Ich bestimme also: scx(1)=cx(1).Da bekomme ich den Fehler.
Ich könnte ja jede der Variablen dimensionieren, aber gerade das will ich mir ja ersparen. Zum Schluß soll die Schleife unzählige Male durchlaufen werden, wobei die Variablenwerte <alt> von den <neuen> überschrieben werden sollen.
Vllcht erklärt das genauer was ich meine!?
sonnigen gruß aus der kalten Hauptstadt
Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 20.08.2014, 12:42 Titel: |
|
|
Kannst du mal ein (weitgehend reduziertes) Programm posten, bei dem das Problem auftritt? Im Augenblick kann es noch an sehr vielem liegen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 21.08.2014, 20:49 Titel: |
|
|
Hi nemore
Die sache hat sich soweit geklärt, als oich die Dim am falschen Ort vorgenommen habe.
Jetzt bleibt noch folgendes:
In meiner Schleife muß ich zigtausendmal hochzählen. Solche Felder kann ja QB nicht erzeugen.
Was macht man da? Redimm nach einer gewissen ANzahl. Oder ganz einfach nach zB 10 ausgeben und auf Null stelllen und weiter geht's.
Gib mir doch mal bitte einen Hinweis dazu.
grüsse Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 21.08.2014, 20:58 Titel: |
|
|
Das kommt darauf an, was genau du vorhast. Wenn die alten Werten nicht mehr benötigt werden, kannst du mit einem Ringpuffer arbeiten, also z. B. nach Wert 10 wieder bei 1 anfangen. Ansonsten REDIM; aber auch hier ist zu überlegen, das in größeren Schritten zu machen - also z. B. immer wenn die Grenze erreicht ist, gleich um 10 nach oben setzen statt nur um 1. Das erspart ein REDIM bei jedem Durchlauf. Die aktuellen Grenzwerte musst du natürlich dabei im Auge behalten (Stichwort UBOUND). _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 22.08.2014, 19:09 Titel: |
|
|
Hi nemored!
Sorry für meine Tippfehler bei letzten Mal. Mir schwamm alles vor Augen!
Deine Tipps: gut! Hab' ich mir so auch überlegt. Aber der Teufel steckt im Detail!
Frage: Wenn ich eine Dim Variable (10) von 2 bis 10 in einer Schleife hochzähle, warum in drei Teufels Namen hab' ich nach dem next bereits die 11? Das überrascht mich doch ein bisserl, gell!
Ich hab' das so hingekriegt, aber ganz bestimmt nicht schulmäßig!
Gibts denn für QB Routinen zB 'Tarpezverfahren' oder 'Simpsonverfahren' oder 'Runge-Kutta-Verfahren?'
Frage(nebenbei): Ich hab mal print #1, using Anweisungen in eine Variable (fo$[wie die hieß weiß ich noch. Das ist aber auch alles.!]) geschrieben und vor dem print #1, Befehl aufgerufen. Ist ziemlich praktisch, aber ich weiß nicht mehr wie das geht. Hast Du denn eine Idee?
Bin noch ne Stunde online und grüsse alle im Forum
Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 22.08.2014, 19:58 Titel: |
|
|
Zitat: | Wenn ich eine Dim Variable (10) von 2 bis 10 in einer Schleife hochzähle, warum in drei Teufels Namen hab' ich nach dem next bereits die 11? Das überrascht mich doch ein bisserl, gell! |
Die Schleife zählt um 1 (bzw. die Schrittweite) nach oben und prüft anschließend, ob der Wert noch innerhalb des Bereichs liegt. Ist übrigens nichts QB-spezifisches, sondern macht jeder BASIC-Dialekt so, mit dem ich mich bisher beschäftigt habe. Ist auch ganz praktisch, um nach der Schleife zu prüfen, ob sie komplett durchlaufen wurde.
Zu den anderen Fragen kann ich im Augenblick nichts sagen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 22.08.2014, 20:18 Titel: |
|
|
Hi nemored!
BTW: Ob mich mal jemand aus dem Forum an die Hand nehmen kann und mich anleitet ein Oberfläche mit QB zu realisieren?
Ich hab keine Ahnung davon. Mein Ding ist das nämlich ganz und garnicht.
gruss und tschuss Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 23.08.2014, 00:03 Titel: |
|
|
Hallo Nils!
Was genau meinst du mit "Oberfläche"?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 25.08.2014, 10:13 Titel: |
|
|
@ grindstone
Hi!
Gemeint sind damit geometrisch und ästhetisch angeordnete, sinnreiche Ein- und Ausgabeelemente. ZB Buttons, Rolläden, Anhakkästchen, Darstellungsfensterchen, Scrollfensterchen. Das sind alles Sachen, mit denen ich mich überhaupt noch nicht beschäftigt habe. Vllt weißt Du da gut Bescheid und willst mir helfen?! Wäre schön!
grüsse Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 25.08.2014, 11:42 Titel: |
|
|
@ RockTheShock:
Lieber wär's mir schon, denn das Teil bin ich gewohnt. Oder geht mit QB da garnichts?
grüsse Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
RockTheSchock
Anmeldungsdatum: 04.04.2007 Beiträge: 138
|
Verfasst am: 25.08.2014, 12:09 Titel: |
|
|
Natürlich geht vieles mit QB, aber oft nur über viele Umwege, die dann alles verkomplizieren. Dazu gehören Themen wie Netzwerk, Datenbanken, 3D Grafik, Speicherintensive Anwendungen.
Ein einfaches Beispiel ist die Beschränkung auf 64KB bzw. 128KB. In FB kannst du Strings von bis zu 2GB Problemos verarbeiten. Auch große Arrays sind ohne Umwege leicht zu nutzen. In QB musst du den Umweg über XMS/EMS machen, wo aus 2 Zeilen FBcode, 100 Zeilen QBCode (mit Binärer ASM Routine werden).
Schau dir einfach mal diese Liste von Libs je nach Betriebssystem an:
http://sourceforge.net/projects/fbc/files/Binaries%20-%20DOS/Libraries/
http://sourceforge.net/projects/fbc/files/Binaries%20-%20Windows/Libraries/
Für Linux gibt es fast alle Bibiotheken in den DEV Paketen der jeweiligen Distribution. Statt diese manuell herunterzuladen, werden diese normalerweise über das Paketmanagment installiert.
Du siehst für DOS gibt es viele Libraries nicht einmal. DOS sollte wirklich nur noch in sehr speziellen Fällen verwendet werden.
Für FreeBasic gibt es sogar eine 64Bit Version dann kannst du mit null Aufwand den gesamten zur Verfügung stehenden Arbeitsspeicher auch > 4GB verwenden.
Viel wichtiger sind aber die Möglichkeiten externe Libraries mit relativ wenig Aufwand zu verwenden gerade im Datenbank und 3D Bereich. |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 25.08.2014, 19:43 Titel: |
|
|
Hi RockTheShock:
Du gibst Dir ja redlich Mühe mich auf FB einzuschwören. Ach, da muß ich ja umlernen. Meine Bas-Programme laufen da nicht mehr. Ich sehe da Probleme über Probleme. Und die Programme umschreiben: Von den meisten weiß ich ja selbst nicht mehr wie die funktionieren. Eine Zeile an die falsche Stelle und alles ist Müll, den ich tagelang sortieren muß.
Gutes Rad, teures Rad!
Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 25.08.2014, 20:04 Titel: |
|
|
@Nils:
Auch ich würde dir unbedingt zum Umstieg auf FB raten. Dessen Syntax ist so stark an die von QB angelehnt, daß du deine alten Quelltexte fast unverändert übernehmen kanst. Du müsstest dir nur jeweils einmal die Mühe machen, die Suffixe von den Variablen zu entfernen und sie stattdessen zu deklarieren (Edit: Die Variablen, nicht die Suffixe ). Dafür bekommst du einen enormen Performancegewinn, eine ganze Reihe neuer Möglichkeiten und -wie RockTheSchock schon angemerkt hat- Zukunftssicherheit.
Und notfalls könntest du -wenn du mit dem Parameter '-qb' kompilierst- deine Quelltexte sogar 1:1 übernehmen. Aber das ist keine Dauerlösung.
@RockTheSchock:
Nur aus Interesse: Ist es in QB überhaupt möglich, die "windows.bi" einzubinden, so daß ich Zugriff auf die Win-API bekomme?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 25.08.2014, 21:48 Titel: |
|
|
Alte Programme anzupassen kann - wenn sie ejnen bestimmten Umfang erreicht haben - sehr hässlich werden; dann vielleicht doch eher neu schreiben. Aber wenn du ein neues Projekt beginnst, ist das wesentlich leichter; so übermäßig groß sind die Sprachunterschiede zwischen FB und QB gar nicht.
Ich habe zu anderem Zweck eine Zusammenstellung der Unterschiede erstellt; können auch gern andere mal drüberblicken, ob alles passt oder ob was fehlt.
http://users.freebasic-portal.de/nemored/Unterschiede_FB_QB.pdf
Bitte nicht über die "??" bei den Verweisen wundern. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 25.08.2014, 22:10 Titel: |
|
|
nemored hat Folgendes geschrieben: | Alte Programme anzupassen kann - wenn sie ejnen bestimmten Umfang erreicht haben - sehr hässlich werden | Das ist dank "Suchen und Ersetzen" auch kein wirkliches Hindernis, nur ein bisschen Fleißarbeit. Mein Tip dazu: erst die Variablen (mit passendem Typ) deklarieren, dann die Suffixe entfernen, sonst könnte es wirklich unübersichtlich werden.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 25.08.2014, 22:29 Titel: |
|
|
Der Teufel liegt da im Detail. Sei es der Größenunterschied beim INTEGER oder die Wartezeit beim SLEEP; "schön" sind auch gleiche Variablennamen mit unterschiedlichem Suffix. Für mein erstes FreeBASIC-Programm fand ich jedenfalls das Neuschreiben wesentlich einfacher als das Umschreiben des bestehenden QBasic-Codes (etwas über 1000 Codezeilen) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 25.08.2014, 23:05 Titel: |
|
|
Ich sehe, du bist auch umgestiegen.
Sicher, ein paar Nickeligkeiten gibt es da schon. Aber die Vorteile im Hinblick auf Performance und neue Möglichkeiten sind so enorm, daß ich jedem nur uneingeschränkt zum Umstieg raten kann.
Und: Programme aus der Anfängerzeit sind meistens so chaotisch, daß sich ein Neuschreiben sowieso empfiehlt.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 26.08.2014, 02:25, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
|