Ergebnis 1 bis 12 von 12

Thema: Frage zur Programmiersprache C

  1. #1

    Frage zur Programmiersprache C

    Hi.

    Ich habe die Hoffnung, dass es hier ein paar Leute gibt, die sich mit der Programmiersprache C auskennen...ich habe nämlich von meinem Informatiklehrer eine kleine Aufgabe aufbekommen, die ich gar nicht so leicht finde.

    Es geht um diese drei Codezeilen, ich müsste wissen, das sie genau tun/tun könnten. Ich dachte außerden, die zeilen würden ein und denselben befehel ausdrücken, aber anscheinend ist das doch nicht so. Könnte mir vielleicht jemand sagen, worin der Unterschied zwischen diesen Zeilen besteht und was man tun könnte, damit er nicht mehr besteht?^^

    Wir haben weder die benötigte Software bekommen, noch Lektüre, wo man die Benutzungsweise dieser Sprache herausfinden kann, nichts. Das soll eine Art Einstiegsaufgabe in dieses Thema sein...dementsprechend habe ich nicht die geringste Ahnung davon und weiß auch nicht, wonach ich suchen soll

    Hier sind sie:

    if(a==b) c = 1; else c = 0;

    c = (a==b) ? 1 : 0;

    c = (a==b);


    Das wäre wirklich sehr lieb von euch.

    - Jade

  2. #2
    Prinzipiell tun diese Codes alle das gleiche.
    Zitat Zitat von Calamity- Jade
    if(a==b) c = 1; else c = 0;
    Das vergleicht a und b. Wenn a und b gleich sind, weist der Code c den Wert 1 zu, andernfalls 0.
    Zitat Zitat
    c = (a==b) ? 1 : 0;
    Der sog. trinäre Operator x ? y : z prüft, ob die Bedingung x true ergibt, falls ja, gibt der Ausdruck y zurück, falls nein, z.
    Zitat Zitat
    c = (a==b);
    Das überprüft, ob a und b gleich sind und weist das Ergebnis der Überprüfung (true oder false, als Zahl 1 oder 0) c zu.

    Die Ausführung führt also bei allen Codes zum selben Ergebnis.

  3. #3
    Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.

    Edit: oh, hast du ja geschrieben, habs überlesen

    Geändert von DFYX (19.12.2005 um 18:36 Uhr)

  4. #4
    Zitat Zitat von DFYX
    Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.
    Technisch sind true und false (in C) AFAIK meist nur Konstanten für 1 und 0 und werden intern als Integer verarbeitet, daher würde ich mq zustimmen: Alle drei Zeilen sind gleich.

  5. #5
    Zitat Zitat von DFYX
    Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.
    ... was ich auch so geschrieben habe. Unter dem Code steht's direkt, dadrüber steht, dass die Codes prinzipiell das Gleiche tun, nicht exakt das Gleiche.
    Drunter steht zwar, dass die Ausführung das gleiche Ergebnis gibt, aber ich gehe auch vom gleichen Kontext aus, sprich, dass c immer auf den gleichen Typ deklariert ist.

    @ Dingsi:
    Afaik braucht 'ne boolean in C weniger Speicherplatz als 'ne int. Sonst wäre der Typ boolean schwachsinnig.
    Ach ne, warte, das war C++, in C gibt's keine booleans, oder?

  6. #6
    Zitat Zitat von masterquest
    @ Dingsi:
    Afaik braucht 'ne boolean in C weniger Speicherplatz als 'ne int. Sonst wäre der Typ boolean schwachsinnig.
    Ach ne, warte, das war C++, in C gibt's keine booleans, oder?
    1. Kann auch ein char sein, keine Ahnung.
    2. Kann sein, keine Ahnung. Man kann sich den Typen aber recht einfach über ein #define bool char und #define true 1 und #define false 0 selber machen. Wie gesagt, der Typ macht auch keinen Sinn, denn die kleinste Einheit die man technisch in einem Computer ansprechen kann ist ein Byte (= char). Ja, man kann über Bit-Operationen auch an die einzelnen Bit eines Bytes, aber das wär Performanceverschwendung. Da ist es einfacher einfach die 7 Bit zu verschwenden.

    Geändert von Dingsi (19.12.2005 um 18:48 Uhr)

  7. #7
    ich denke, der einzige Unterschied, der zwischen den Anweisungen besteht, wird in der Umsetzung in Maschienencode liegen. Wobei ich mir denke, dass selbst da eine gute optimierung gleiche Ergebnisse liefern wird ^^

  8. #8
    Dankeschön, jetzt habe ich alles verstanden, glaube ich.^^
    Ich werde mich dann in nächster Zeit mit ein paar Tutorials beschäftigen, damit ich damit in Zukunft mehr anfangen kann.

  9. #9
    Oh, eine Frage hätte ich noch:
    Ist es schlussendlich egal, welchen Code man benutzt oder hat man durch die Benutzung eines bestimmten davon irgendwelche Vorteile? Das können auch ganz geringe sein.^^
    Ist irgendeiner davon besser/effektiver als die anderen?

    Sorry für den Doppelpost.^^

  10. #10
    Ich denke in diesem speziellen Fall ist
    Code:
    c = (a==b);
    am kürzesten und schnellsten. Wenn du c nur irgendetwas zuweisen willst (außer 0 und 1), würde ich den Trinäroperator benutzen
    Code:
    c = (a==b) ? 5 : 8;
    Wobei manche Leute das auch zu unübersichtlich finden und in solchen Fällen gleich zu einem vollständigen if() greifen. Das mache ich persönlich erst, wenn ich unterschiedlichen Code ausführen will.
    Code:
    if(a==b)
    {
      doSomething(c);
    }
    else
    {
      doOtherthing(a, b);
    }

  11. #11
    Zitat Zitat von DFYX
    Mit einer kleinen Einschränkung, mq. Die ersten beiden geben direkt 0 oder 1 zurück. Das dritte true oder false, was dann erst bei Bedarf (Also wenn c kein Boolean ist) in 0 bzw. 1 umgewandelt wird.

    Edit: oh, hast du ja geschrieben, habs überlesen
    Genau.
    #define TRUE 1
    #define FALSE 0

  12. #12
    Vielen Dank für eure Hilfe!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •