Aktuelle Zeit: 23.07.2018 09:41

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Frust
BeitragVerfasst: 09.12.2017 19:12 
Offline
verheiratet<br>1. PureGolf-Gewinner
Benutzeravatar

Registriert: 29.08.2004 09:42
Wohnort: Old Europe
Bin gerade dabei, ein älteres PB-Progrämmchen von V3.94 auf die aktuelle PB-Version umzuschreiben. Habe vor 10 min. angefangen...und bin schon wieder genervt!

War es bisher möglich, den korrekten Ausdruck
Code:
"Wert = +12"
zu schreiben, wird dies jetzt als Fehler moniert! Ok...kann man leben damit, aber ist meiner Meinung nach ein BUG.

Genauso wird jetzt ein Fehler (Error: "Es wird ein Ausdruck ausschliesslich mit Ganzzahlen erwartet") ausgegeben, wenn ich schreibe:
Code:
SMaterialwert+STomWert(Abs(TOM(SPL(a))))
ABS() wandelt automatisch in FP und im obigen Fall mit den Integervariablen ohne Umwandlung nach ABS() nicht mehr zu verwenden.

Habe auch 2 Include-Dateien, deren dimensionierte Arrays nicht um's verrecken anerkannt werden, trotz korrekter Initialisierung im Hauptprogramm.

Wer weiss, was noch alles kommt. Am besten, ich lasse die ganze Sache mit Umschreiben. Wäre zu schön gewesen, mal ohne Frust an das EIGENTLICHE Vorhaben heranzugehen!

_________________
Basic Pur = PureBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 09.12.2017 19:28 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Hallo Sylvia,

der PureBasic-Compiler ist halt über die Jahre hinweg gereift.

Das heißt es wurden eben Altlasten wegen Inkompatibilitäten oder Effizienzeinbußen beseitigt.

"Wert = +12"
->schreibe: Wert + 12 oder Wert = Wert + 12

und lösen bitte diese Gleichung mal genauer auf:

SMaterialwert = SMaterialwert + STomWert(Abs(TOM(SPL(a))))

Was macht STomWert ? Ist das ein Array oder eine Funktion ?
Was macht TOM ? Ist das ein Array oder eine Funktion ?
Was macht SPL ? Ist das ein Array oder eine Funktion ?
Welchen Typ hat die Variable a ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 09.12.2017 20:55 
Offline
verheiratet<br>1. PureGolf-Gewinner
Benutzeravatar

Registriert: 29.08.2004 09:42
Wohnort: Old Europe
Sorry ccode_new, du bist bei beiden Problemen auf dem Holzweg.

zu 1) Ich möchte nicht 12 aufaddieren, sondern ZUWEISEN (wie z.B. x = 12, aber eben mit (explizitem) VORZEICHEN wie bei x = -12)

zu 2) alles Array's. Aber das ist nicht das Problem! TOM(SPL(a)) kann auch negative Werte haben, die ich mit ABS() normalisieren möchte, da dieser Wert wiederum als Zeiger für STomWert() fungiert. Das Problem ist also, dass der Index auf das Array durch ABS() jetzt als FloatingPoint übergeben wird...und Array(var.f) geht eben nicht!


Aber mal grundsätzliche Frage an die Entwickler zum Nachdenken: Was wäre schlimm, das Array(var.f) zu erlauben? Eine einfache, interne Integer-Umwandlung und fertig ist die Marie

_________________
Basic Pur = PureBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 09.12.2017 21:25 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Ach Sylvia,

Sylvia hat geschrieben:
Eine einfache, interne Integer-Umwandlung und fertig ist die Marie


>>> Da hast du doch schon die Lösung.

Code:
Procedure.l IAbs(w.l)
  tw.f = ValF(Str(w))
  tw2.f = Abs(tw)
  ProcedureReturn Val(StrF(tw2))
EndProcedure


Das ist jetzt zwar nicht sehr effizient aber vielleicht schreibt hier ja noch Einer eine besser Funktion (z.B in Assembler).

Und was das + Zeichen betrifft: Muss den unbedingt ein + Zeichen vor dem Wert stehen ? (Das ist doch nur eine unnötige Fehlerquelle.)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 09.12.2017 21:26 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
du kannst Abs() mit einem Macro überschreiben
Code:
Procedure.f abs_proc(f.f)
  ProcedureReturn Abs(f)
EndProcedure

Macro Abs(_)
  Int(abs_proc(_))
EndMacro

Dim arr(10)
f.f = -3.7
arr(Abs(f)) = 123

Debug arr(3)
wird dann aber überall angewendet.
Vielleicht besser ein Macro für das Array
Code:
Dim arr__(10)

Macro arr(_)
  arr__(Int(_))
EndMacro

f.f = -3.7
arr(Abs(f)) = 123

Debug arr(3)

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 10.12.2017 14:15 
Offline
verheiratet<br>1. PureGolf-Gewinner
Benutzeravatar

Registriert: 29.08.2004 09:42
Wohnort: Old Europe
@#NULL:
Ach?!...das ist ja interessant und mir neu, dass ich reservierte PB-Funktionen durch Eigene überschreiben kann! Habe gleich mal nachgesehen in der Beschreibung zu den Macros, aber leider nichts zu diesem Thema gefunden. Na gut, durch dein Beispiel ist ja klar, wie's funktioniert. Aber zeigt mal wieder, dass die PB-Hilfe -wie so oft- hinterherhinkt.

Das ist zwar cool, dass das geht und eröffnet Möglichkeiten, macht mir aber gleichzeitig Sorgen, dass ich mich in einem Fremdcode nicht darauf verlassen kann, dass etwas funktioniert wie es funktionieren soll (ohne vorherigen Check aller Macros)

_________________
Basic Pur = PureBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 11.12.2017 11:59 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Die meisten Leute packen ihre Codes mittlerweile in Module, die sie vom Rest des Codes abkapselt. Wenn man ein Modul eines Fremden benutzt, muss man da jedenfalls keine Sorge haben, dass ein Makro irgendwas überschreibt.
Zitat:
Habe auch 2 Include-Dateien, deren dimensionierte Arrays nicht um's verrecken anerkannt werden, trotz korrekter Initialisierung im Hauptprogramm.

Wie sehen die Zeilen genau aus? Hast du vielleicht Global vergessen?
Code:
Global Dim meinArray(10)

Ansonsten gilt das Array nur im Hauptcode und nicht in Procedures.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Creality 3D CR-10 Review und erste Druckergebnisse
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 11.12.2017 21:42 
Offline
verheiratet<br>1. PureGolf-Gewinner
Benutzeravatar

Registriert: 29.08.2004 09:42
Wohnort: Old Europe
Hi Nic,

habe in den vergangenen Jahren natürlich mit aktuelleren PB-Versionen als mit V3.94 gearbeitet und weiss um solche Sachen wie "Global" usw. Das interessante an der Sache ist, dass ich bereits "Global DIM" in diesem alten Programm verwende. D.h, dass ich es schonmal auf eine "aktuellere" Version angepasst habe (kann jetzt aber nicht sagen, wann "Global" eingeführt wurde). Im Programm-Header habe ich die Umstellung leider nicht vermerkt.

Hab's aber aufgegeben, dass anpassen. Es ist wie es ist.

Da schau her, bist ja inzwischen Admin! :allright:

Wie geht's deinem Studium? Müsstest ja inzwischen schon promoviert und deinen Doktor-Titel haben ;-)

_________________
Basic Pur = PureBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 12.12.2017 11:08 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Sylvia hat geschrieben:
Da schau her, bist ja inzwischen Admin! :allright:

Wie geht's deinem Studium? Müsstest ja inzwischen schon promoviert und deinen Doktor-Titel haben ;-)

Ich habe meinen Bachelor gemacht und dann hatte ich keine Lust mehr auf diesen Unikram. Arbeiten macht doch viel mehr Spaß als die olle Theorie. Ich mache jetzt eh Dinge, die ich an der Uni so eigentlich gar nicht gelernt habe. :lol:

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Creality 3D CR-10 Review und erste Druckergebnisse
Ubuntu Gnome 16.04.3 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frust
BeitragVerfasst: 16.12.2017 00:48 
Offline

Registriert: 13.05.2010 09:26
Wohnort: Berlin
ccode_new hat geschrieben:
Und was das + Zeichen betrifft: Muss den unbedingt ein + Zeichen vor dem Wert stehen ? (Das ist doch nur eine unnötige Fehlerquelle.)

Nein, das ist überhaupt keine Fehlerquelle.
Manche Leute möchten das gerne an best. Stellen schreiben wegen besserer Lesbarkeit des Codes. Es gibt keinen vernünftigen Grund das nicht zu erlauben. Andere Programmiersprachen erlauben das auch.

Sylvia hat geschrieben:
Das ist zwar cool, dass das geht und eröffnet Möglichkeiten, macht mir aber gleichzeitig Sorgen, dass ich mich in einem Fremdcode nicht darauf verlassen kann, dass etwas funktioniert wie es funktionieren soll (ohne vorherigen Check aller Macros)

Ja, sicherer und übersichtlicher ist es wohl, wenn Du eine spezielle Abs()-Funktion für ganze Zahlen benutzt, z.B.:

Code:
Procedure.q AbsQ (x.q)
   If x < 0
      x = -x
   EndIf
   ProcedureReturn x
EndProcedure

Dass sowas nicht in PB eingebaut ist, ist etwas eigenartig.

_________________
Dieser Satz ist falsch.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye