Hi User
Ich hab ein Programm in Bascom geschrieben, welches die Spannung an
einem AD- Kanal über die RS232 Schnittstelle ausgibt. Das Problem ist,
dass das Ergebnis neun Nachkommastellen hat, mir aber eine reichen
würde.
Der ROUND Befehl in Bascom bringt das nicht, der rundet auf die nächste
ganze Zahl, was ich ja nicht will. Aus einem Basic Tutorial hab ich den
Befehl ROUND(Zahl,1) gefunden. Dieser soll eigentlich den Wert Zahl auf
eine Nachkommastelle runden. In Bascom funktioniert das aber nicht-->
Fehlermeldung.
Wer kann helfen? Allzu schwer kann es ja nicht sein.
Gruss Thomas
>Wer kann helfen?
Das Bascom-Manual.
>Allzu schwer kann es ja nicht sein.
Der Meinung sind viele, die mit Bascom programmieren.
(Kritik meinerseits an der Arbeitsweise von Bascom-"Programmierern".)
http://avrhelp.mcselec.com/bascom-avr.html
Notfalls kannst du die Zahl auch mit 10 multiplizieren, dann runden und
wieder durch 10 teilen:
x = ROUND(n*10)/10
Ich gehe mal davon aus, dass du die Zahl irgendwie ausgeben willst.
Mit FORMAT o.dergl. (siehe avrhelp-link ein Post weiter oben von mir)
kann man die Zahlenausgabe formatieren.
Hallo Olaf
Die Variante mit FUSING hat zum Erfolg geführt. Das bisherige Ergebnis
war vom Typ Single. Wandlung in String und dann Fusing bringts. Besten
Dank.
An fieser, klugscheissender Rahul
Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für
Spezialisten ist, aber das Programm ist ein kleiner Teil meiner
Diplomarbeit. Zur Einarbeitung habe ich keine Zeit, und in Bascom hats
nur 2 Tage gebraucht, bis das Programm lief (bis auf die Kommastellen
halt). Ich finde das so voll korrekt, aber wenn man kompliziertere
Sachen machen will sollte man lieber ein anderes Programm nehmen.
Also besten Dank an alle!
Thomas
>Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für>Spezialisten ist
Hab ich nie behauptet.
>Ich finde das so voll korrekt, aber wenn man kompliziertere>Sachen machen will sollte man lieber ein anderes Programm nehmen.
Muß man aber nicht.
Es ist bloß inzwischen hinlänglich "bekannt", dass Leute, die mit BASCOM
programmieren, meinen, dass das der einfachste Weg sei, und dann bei
jedem kleineren Problem um Hilfe schreien.
Deswegen auch der etwas "unfreundliche" Hinweis auf das Datenblatt.
Es geht also nicht um Bascom, sondern um den "NDBU" (normal dummer
Bascom User), der Bascom-Benutzer in ein etwas schlechtes Licht gerückt
hat.
Dass diesen "Zorn" auch gerne mal die falschen abbekommen, ist
vielleicht verständlich, aber nicht entschuldbar. Und das, wo ich mir
eigentlich vorgenommen hatte, mich nicht mehr darüber aufzuregen.
> Ich bin mir darüber im klaren das Bascom "Programmieren" nichts für> Spezialisten ist,
Es geht ja nicht um BASCOM an sich.
Es geht darum, dass viele BASCOM Programmierer, die hierher
kommen, sowas wie Doku bzw. Online-Hilfe durchblättern oder,
Gott bewahre, Lesen für überflüssigen Luxus halten. Die Online-
Hilfe von BASCOM ist sehr gut. Nur reinschauen müsste man halt
mal.
Hallo,
auch ich habe mich etliche Stunden mit dem Runden auf eine bestimmte
Anzahl von Kommastellen beschäftigt. Nun hoffe ich, dass ich mit Fusing
zum Ziel komme. Werde es gleich testen, aber lt. der Hilfe von BASCOM
wird es wohl mein Problem lösen.
Ich bin bislang immer so vorgegangen:
var= 12,845999
var = var * 100 ' ich wollte auf 2 Kommastellen runden
var = Round(var)
var = var/100
Das klappte aber nie, warum weiss ich nicht. Die gerundete var war
1285 und nach dem Teilen durch 100 gab es wieder etliche Kommastellen!
Ich bin davon ausgegangen, dass ich dann 12,85 als Ergebnis bekomme.
Vielen Dank für Eure Anregungen, fals noch jemand schreiben könnte,
warum
meine Methode nicht zum Erfolg führte, wäre prima...
mfg Jürgen
@Jürgen E. (joe73)
BASCOM rundet intern nach einer Division nicht!
Also entstehen beim binären Rechnen automatisch "binäre"
Nachkommastellen, d.h. eine Binärzahl mit ggf. maximaler Länge.
Beim Konvertieren ins Dezimalsystem sind immer noch Stellenwerte mit
1/2, 1/4, 1/8, 1/16 u.s.w. vorhanden, so dass bei der Ausgabe der
Dezimalzahl diese Werte als Nachkommastellen entstehen.
Noch eine Anmerkung zum Streit um C++ contra BASCOM.
Man möge mir zeigen, was in C++ geht und in BASCOM nicht geht!
Dabei ist PASCAL doch auch noch eine interessante Alternative.
W.
Hallo,
vielen Dank für die schnellen Antworten.
Ist mir zwar alles etwas zu "mathematisch" aber nun weis ich
wenigstens woran es gelegen hatte bei meiner Vorgehensweise.
Auf jeden Fall funktioniert es nun mit Fusing. Hatte es gerade getestet.
mfg Jürgen
Wolfgang Schmidt schrieb:> Man möge mir zeigen, was in C++ geht und in BASCOM nicht geht!
Wenn etwas sehr schnell oder klein sein soll, muss man C oder noch
besser Assembler nehmen.
Bei komplexen Sachen dann doch lieber C, da hier die Übersicht bewahrt
wird. Schreib doch mal einen Webserver mit Bascom und vergleiche die
Geschwindigkeit mit einem C-Webserver. Bascom pfuscht zu viel im Code
herum.
Das Argument Bascom wäre einfacher zählt nicht: Ich wollte mal Basic
ausprobieren, nachdem ich jahrelang c++ programmiert habe. Ich komme
damit überhaupt nicht zurecht. Ich persönlich finde C(++) eine deutlich
einfachere Sprache als Basic.
ich (Bascom- Programmierer), wäre auch gerne einer von diesen
wunderbaren C -und/ oder Assembler - Programmierern. Sobald ich in
Rente bin und viel Zeit habe , werde ich das auch werden, aber vorher
möchte ich schon mal ein paar Schaltungen zum Laufen bringen...
Seit Jahren verwende ich Tranistoren, ohne vorher Halbleiterphysik
studiert zu haben und das klappt auch ganz prima.
Nach Fortran, Algol, Macros für Telefunkengroßrechner, Assembler für
schnelle Messwerterfassung, Basic für Wang Tischrechner, PASCAL und
Assembler für Apple II, C in der Firma, Assembler für 68000, ein wenig
Forth u.s.w. bevorzuge ich ganz klar BASCOM und PASCAL.
In PASCAL kann ich arithmetische Ausdrücke ganz schreiben, in BASCOM
muss ich diese zerlegen. Wenn's schnell werden muss, dann wird
Assemblercode eingefügt.
Aus meiner sich gibt's nicht unschöneres als die Syntax von C++.
Es fehlt auch die Orientierung an der mathematisch logischen
Schreibweise von Zuweisungen, Vergleichen, Indizierungen, so dass C++
für Nichtmathematiker ohne eine derartige "Vorbelastung" wahrscheinlich
einfacher zu lesen ist.
W.
Klaus De lisson schrieb:> Vielleicht hilft auch das weiter:>> Config Single = Scientific , Digits = 2>> Gruss Klaus
Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes
Gelabber wer welche Programmiersprache vorzieht usw.
ggg schrieb:> Klaus De lisson schrieb:>> Vielleicht hilft auch das weiter:>>>> Config Single = Scientific , Digits = 2>>>> Gruss Klaus>> Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes> Gelabber wer welche Programmiersprache vorzieht usw.
und warum und wie entstanden? richtig, ein hochqualifizierter
BASCOM-"Programmierer" bekommt es nicht hin die Dokumentation zu lesen
und zu verstehen. Es ist immer dasselbe und überheblich dazu "zeig mir
was man in C machen kann was in Bascom nicht geht".....Junge, wenn du
auch nur ansatzweise was davon verstehen würdest, müsste man nicht solch
eine Grütze lesen!
ggg schrieb:> Klaus De lisson schrieb:>> Vielleicht hilft auch das weiter:>>>> Config Single = Scientific , Digits = 2>>>> Gruss Klaus>> Endlich mal ein Beitrag der Ergebnisse liefert. Alles andere nur dummes> Gelabber wer welche Programmiersprache vorzieht usw.
Viele der Leute mit ansatzweise Ahnung schaffen es nicht auf eine
einfach zu beantwortende Frage eine einfache Antwort zu geben.