www.mikrocontroller.net

Forum: GCC Zahlen invertieren

Autor: Michael (Gast)
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
Autor: Stefan "stefb" B. (stefan) Benutzerseite
Datum: 30.06.2008 13:11

int foo(int eingabe)
{
  return 3 - eingabe;
}
Autor: Sven Pauli (haku) Benutzerseite
Datum: 30.06.2008 13:12

uint8_t gegeben;
uint8_t ergebnis;

ergebnis = 3 - gegeben;
Autor: Nico K. (brainhunter)
Datum: 30.06.2008 13:16

ergebniss = gegeben ^ 3;
sollte auch gehen

00 -> 11
01 -> 10
10 -> 01
11 -> 00
Autor: Michael (Gast)
Datum: 01.07.2008 10:51

Besten Dank
Autor: AVRFan (Gast)
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.
Autor: Peter (Gast)
Datum: 01.07.2008 13:23

Da spricht der Theoretiker wie er im Buche steht... ;)
Autor: Karl heinz Buchegger (kbuchegg) (Moderator)
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 :-)
Autor: Gast (Gast)
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.
Autor: Stefan "stefb" B. (stefan) Benutzerseite
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






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net