Datum: 30.06.2008 13:09
Hallo, ich stehe gerade auf dem Schlauch, bitte helft mir runter. Gegeben:0 soll werden 3 Gegeben:1 soll werden 2 Gegeben:2 soll werden 1 Gegeben:3 soll werden 0 Lösung in c
Datum: 30.06.2008 13:12
uint8_t gegeben;
uint8_t ergebnis;
ergebnis = 3 - gegeben;
|
Datum: 30.06.2008 13:16
ergebniss = gegeben ^ 3; sollte auch gehen 00 -> 11 01 -> 10 10 -> 01 11 -> 00
Datum: 01.07.2008 11:15
>Gegeben:0 soll werden 3 >Gegeben:1 soll werden 2 >Gegeben:2 soll werden 1 >Gegeben:3 soll werden 0 Da eine bestimmte Änderung links (z. B. +1) immer eine gleich starke Änderung rechts (-1) bedingt, ist die gesuchte Funktion linear. Also kannst Du y(x) = a x + b ansetzen, denn daa sind alle linearen Funktionen. Die Steigung a und der y-Achsen-Abschnitt b sind durch die vorliegenden Daten eindeutig bestimmt. Geht die Eingangsgröße x eins rauf, geht die Ausgangsgröße y eins runter. Daraus folgt a = -1. Die gesuchte Funktion ist damit auf y(x) = -x + b eingeschränkt. Den noch unbekannten Parameter b kann man aus irgendeinem Wertepaar bestimmen. Die Linearitätseigenschaft der Funktion garantiert, dass es mit jedem funktioniert. Ich nehme das dritte. Dann ist einerseits y(2) = 1, andererseits y(2) = -2 + b. Gleichsetzn liefert 1 = -2 + b, woraus b = 3 folgt. Fertig: y(x) = -x + 3 oder y(x) = 3 - x.
Datum: 01.07.2008 13:23
Da spricht der Theoretiker wie er im Buche steht... ;)
Datum: 01.07.2008 14:41
Peter wrote:
> Da spricht der Theoretiker wie er im Buche steht... ;)
Auf der anderen Seite gibt es eine Unmenge von Programmierern
da draussen, die mit der Bestimmung einer linearen Gleichung
heftig überfordert sind :-)
Datum: 01.07.2008 16:48
> return 3 - eingabe;
Das ist schon in Ordnung; später kann man jedoch auf die Nase fallen,
falls "eingabe" z.B. 95 ist.
Obwohl die Funktion schon so simpel ist, sollte man doch die
Bereichsgrenzen klären und testen.
Datum: 01.07.2008 19:11
Klar. Das ist eine Philosophiefrage, wer das prüfen soll/muss - die aufrufende Funktion (Programm) oder die aufgerufene Funktion. Bei einem nichtkritischen Code würde ich solche Prüfungen der aufrufenden Funktion überlassen und dafür die aufgerufene Funktion schlank halten. Dann lassen sich die Eingabewerte einmalig prüfen und ab dann kann man sauber mit den legalen Werten weiterarbeiten. Bei einer kritischen Funktion, d.h. wenn ein falscher Parameter in der aufgerufenen Funktion schlimmes anrichten kann (illegale Werte in Dateisystem schreiben, Robotarm in die Wand fahren,...) würde ich der aufgerufenen Funktion Sicherheitsabfragen verpassen, die immer ausgeführt werden.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel