juha: Plus- und Minuszahlen Umwandlung

Hallo Zusammen

ich habe in $zeit eine Minuszahl (zum beispiel -45 oder -120), jetzt möchte ich diese Minuszahl in eine Pluszahl umwandeln. Wie ist das möglich? Es kann jedesmal eine andere Zahl sein, geht es mit substr? Wie muss ich das anwenden?

Grüsse Juha

  1. Hallo

    Hallo Zusammen

    ich habe in $zeit eine Minuszahl (zum beispiel -45 oder -120), jetzt möchte ich diese Minuszahl in eine Pluszahl umwandeln. Wie ist das möglich? Es kann jedesmal eine andere Zahl sein, geht es mit substr? Wie muss ich das anwenden?

    Wie Du schon selbst geschrieben hast, hast Du in $zeit eine MinusZAHL, warum möchtest Du das dann als String behandeln?
    Also probier' doch mal die Funktion abs().

    Grüsse Juha

    Manfred

    1. Hoi,

      ich habe in $zeit eine Minuszahl (zum beispiel -45 oder -120),
      jetzt möchte ich diese Minuszahl in eine Pluszahl umwandeln. Wie
      ist das möglich? Es kann jedesmal eine andere Zahl sein, geht es
      mit substr? Wie muss ich das anwenden?

      [...]

      Also probier' doch mal die Funktion abs().

      Alternativ reicht auch ein * -1.

      Gruesse,
       CK

      1. Hallööö

        Danke für die Tipps, aber wie tut man abs() resp.. * -1 anwenden??

        Grüsse
        Juha

        Hoi,

        ich habe in $zeit eine Minuszahl (zum beispiel -45 oder -120),
        jetzt möchte ich diese Minuszahl in eine Pluszahl umwandeln. Wie
        ist das möglich? Es kann jedesmal eine andere Zahl sein, geht es
        mit substr? Wie muss ich das anwenden?

        [...]

        Also probier' doch mal die Funktion abs().

        Alternativ reicht auch ein * -1.

        Gruesse,
        CK

        1. Hallööö

          Danke für die Tipps, aber wie tut man abs() resp.. * -1 anwenden??

          Grüsse
          Juha

          Hallo Juha,

          ist die Frage ernst gemeint? Also bei einem solch kleinem Problem können doch gar nicht soviele Bäume dastehen, daß man den Wald nicht sieht.

          Ich bin ja nu kein PERL-Experte, aber mit ein bisschen Kenntnis über Programmierung und wie die Syntax so im Allgemeinen aussieht, kann man doch sicher ableiten, daß es vielleicht ungefähr so funktionieren könnte:

          $zahl = $zahl * (-1);

          bzw.

          $zahl = abs($zahl);
          Nur wenn Du das Erste Mal mit Java/Javascript konfrontiert worden wärst, hätte ich verstanden, wenn Du gepostet hättest, daß das mit dem abs() nicht so funktioniert. Dort muß nämlich wegen der Objektorientierung noch das Mathe-Objekt "Math" davor. Dann sähe das ungefähr so aus (in Java gibts das mit dem $ vor ner Variablen nicht):

          zahl = Math.abs(zahl);

          Da Du aber möglicherweise ein Einsteiger bist, schreibe ich mal vorsichtshalber noch hin, daß es sich hierbei nicht um mathematische Gleichungen handelt. Das "Gleich" ist in der Programmierung eine Zuweisungsoperation, wobei der Teil rechts vom Gleichheitszeichen berechnet und andie Varible links vom Gleichheitszeichen übergeben wird.

          In den meisten Programmiersprachen gibt es noch ein "vergleichendes Gleich" für Fallunterscheidungen:

          if ($a == $b){
          // mach dies
          } else {
          // mach das
          }

          An dieser Stelle sei erwähnt, daß es sogar ein Fehler wäre, das einfache Zuweisungs-"Gleich" (=) zu verwenden.

          Gruß
          Andreas Schigold

          1. use Mosche;

            In den meisten Programmiersprachen gibt es noch ein "vergleichendes Gleich" für Fallunterscheidungen:

            if ($a == $b){
            // mach dies
            } else {
            // mach das
            }

            An dieser Stelle sei erwähnt, daß es sogar ein Fehler wäre, das einfache Zuweisungs-"Gleich" (=) zu verwenden.

            Ist es nicht. Es macht nur nicht das, was du willst. In diesem Kontext wird der Erfolgsfall der Zuweisung genommen.
            Gebräuchlich ist dies zB bei:
            while (my ($a, $b) = each %hash) {
            ...
            }

            und ist nichts anderes als eine Zuweisung.
            if ($a = &blah('hhh')) {
             # erfolgreich zugewiesen
            } else {
             # Zweisung nicht erfolgreich (Rückgabewert der Funktion 0
             # oder undef
            }

            use Tschoe qw(Matti);

            1. In einem Forum, wo ich in jedem dritten Posting was vom Validator.w3.org lese, kann ich das jetzt nicht verstehen. Es zeugt einfach von einer unsauberen Programmierweise und erschwert oft die Lesbarkeit von Programmen. Außerdem eröffnet sich damit eine massive Fehlerquelle:

              Ich habe mir z.B. angewöhnt, das Schreiben einer Verzweigung oder "while"-Wiederholung gedanklich mit den Worten "wenn/solange ($a identisch gleich $b) dann ...."

              Dadurch ist es mir gelungen, den Fehler - und meistens ist es ein Fehler, weil nicht so gewollt - mit dem einfachen Gleich abzustellen.

              Schreibt man aber in viele Verzweigungsköpfe noch Zuweisungen hinein, erhöht das die Gefahr des Schußlichkeitsfehlers enorm.

              also:
              if ( wanted(sauberer Programmierstil) == true) {
              // few errors
              } else{

              use Mosche;

              In den meisten Programmiersprachen gibt es noch ein "vergleichendes Gleich" für Fallunterscheidungen:

              if ($a == $b){
              // mach dies
              } else {
              // mach das
              }

              An dieser Stelle sei erwähnt, daß es sogar ein Fehler wäre, das einfache Zuweisungs-"Gleich" (=) zu verwenden.

              Ist es nicht. Es macht nur nicht das, was du willst. In diesem Kontext wird der Erfolgsfall der Zuweisung genommen.
              Gebräuchlich ist dies zB bei:
              while (my ($a, $b) = each %hash) {
              ...
              }

              und ist nichts anderes als eine Zuweisung.
              if ($a = &blah('hhh')) {

              erfolgreich zugewiesen

              } else {

              Zweisung nicht erfolgreich (Rückgabewert der Funktion 0

              oder undef

              }

              use Tschoe qw(Matti);

              }

              /* bitte nicht persönlich nehmen ;-) */

              return ("Grüße@all");

              1. Hallo,

                Ich habe mir z.B. angewöhnt, das Schreiben einer Verzweigung oder "while"-Wiederholung gedanklich mit den Worten "wenn/solange ($a identisch gleich $b) dann ...."

                kennst Du
                while(<STDIN>){
                   ...
                   }

                oder
                while(@werte = $sth->fetchrow_array){
                  ...
                  }

                oder
                if(open(FILE,'wasauchimmer')
                 {
                 ...
                 }

                Diese, und andere, Konstrukte sind in Perl üblich.

                Die gleichzeitige Verwendung von Zuweisungen für die Überprüfung ist eines der Erbstücke von C, welche IMHO einerseits der Übersichlichkeit förderlich ist, andererseits aber auch ab und zu Kopfzerbrechen verursachen kann.

                Ich persönlich verwende solche Konstrukte in solchen Zusammenhängen, wie ich sie oben als Beispiel aufgeführt habe.

                Ob das nun der 'Wahren Lehre' entspricht ist mir persönlich egal, Hauptsache der Code ist gut leserlich und wartbar. Und daß ich keine Verrenkungen unternehmen muß, um nur ja 'sauber' zu Programmieren.

                Grüße
                  Klaus

                1. Hallo Leute,

                  ich wollte nur noch mal daran erinnern, daß meine kleine Einführung nur gedacht war, um einem Einsteiger die Bedeutung des Gleichheitszeichens bewust zu machen, da ein Posting dieses Threads hier einen Einsteiger doch sehr stark vermuten ließ. Natürlich kann man all diese Konstrukte verwenden. Und natürlich kann man Befehle ineinander, übereinander untereinander und nebeneinander verschachteln, bis der Arzt kommt.

                  Aber Leute. Wenn Ihr das einem Einsteiger erklären wollt, dann wird der ganz schnell wieder zum Aussteiger. Ich habe selbst genügend Leuten die Programmierung nahebringen dürfen (war mein Wunsch). Und daher kenne ich einfach die Verwirrung der Leute beim einfachen Anblick der Zeile.

                  a = a + 1;

                  Das war einfach für die Leute 'ne mathematische Falschaussage. Als ich den Leuten erstmal erklärt hatte, daß sie ein Gleichheitszeichen als Zuweisungszeichen verstehen müssen. War den allen geholfen. Und als sie verstanden hatten, daß ein Vergleich mit einem Doppelgleich realisiert wird, dann war das logisch. Wollt ihr etwa den Leuten jetzt beibringen, daß das alles egal ist? Das wär für Einsteiger die Verwirrung pur. Fakt ist, so gehts erstmal und so ist es auch eindeutig. Das es auch anders geht ist ja schön, aber das sollen sie dann rauskriegen, wenn sie ein Gefühl für die Programmierung bekommen haben.

                  Ich bin sicher auch kein Engelsprogrammierer, und auch ich verschachtle gern mal Funktionen ineinander, aber das kann man doch keinem Einsteiger erklären, warum nu in ausgerechnet dem Fall jetzt doch ein Doppelgleich hinsoll und in dem anderen Fall eben nicht braucht.

                  Also, bitte auch ein bisschen Rücksicht auf Einsteiger, okay? Oder habt Ihr etwa immer von Anfang an alle Tricks draufgehabt? Ich nicht.

                  Greetings
                  Andreas

                  1. Hi Andreas,

                    a = a + 1;
                    Das war einfach für die Leute 'ne mathematische Falschaussage.
                    Als ich den Leuten erstmal erklärt hatte, daß sie ein Gleichheitszeichen
                    als Zuweisungszeichen verstehen müssen. War den allen geholfen.

                    tja, das kommt eben dabei heraus, wenn Programmiersprachen so definiert
                    werden, daß die Cracks möglichst wenig Anschläge auf der Tastatur brauchen.

                    In einer explizit auf Didaktik ausgelegten Sprache wie Pascal gibt es für
                    die Zuweisung einen Operator ":=" und für den Vergleich den Operator "=",
                    der eben auch in den einem Anwender üblichen sonstigen Quellen für Ver-
                    gleiche verwendet wird. In der Tat enthält ein typisches Quelltextprogramm
                    mehr Zuweisungen als Vergleiche, aber an dieser Stelle mit Gewalt eine
                    'schlechtere' Syntax zu nehmen, habe ich schon immer für falsch gehalten.

                    Wollt ihr etwa den Leuten jetzt beibringen, daß das alles egal ist?

                    Nein. Es ist nur nicht das eine falsch und das andere richtig - diese Deine
                    Aussage war in der Tat falsch.
                    Beides sind legale Statements in Perl - für zwei verschiedene Zwecke.

                    aber das kann man doch keinem Einsteiger erklären, warum nu in
                    ausgerechnet dem Fall jetzt doch ein Doppelgleich hinsoll und in
                    dem anderen Fall eben nicht braucht.

                    Doch. Genau das kann und _muß_ man auch dem Einsteiger erklären!

                    Denn alles andere ist falsch - und einem Einsteiger erst etwas Falsches
                    erklären und anschließen beichten zu müssen, daß man zwecks Vereinfachung
                    gelogen hat, ist noch viel schlimmer.

                    Also, bitte auch ein bisschen Rücksicht auf Einsteiger, okay?

                    Ich erkläre einem Anfänger lieber langsam die Wahrheit als schnell die
                    Unwahrheit.

                    Viele Grüße
                          Michael
                    (quiche eater)

                    1. Hi Michael,

                      In einer explizit auf Didaktik ausgelegten Sprache wie Pascal gibt es für
                      die Zuweisung einen Operator ":=" und für den Vergleich den Operator "=",
                      der eben auch in den einem Anwender üblichen sonstigen Quellen für Ver-
                      gleiche verwendet wird.

                      Ich hatte auch schon überlegt, ob ich Pascal noch mit reinbringe, wollte es dann aber lassen.

                      Denn alles andere ist falsch - und einem Einsteiger erst etwas Falsches
                      erklären und anschließen beichten zu müssen, daß man zwecks Vereinfachung
                      gelogen hat, ist noch viel schlimmer.

                      Okay, einwas war wohl unwahr, nämlich das es generell ein Fehler sei. Gut, dann möchte ich mich an dieser Stelle korrigieren. Aber ich denke, daß man nicht immer alle Facetten gleich anbringen muß, sondern immer nur dann , wenn sie gebraucht werden. Eins ist jedenfalls Fakt: Wenn man alle Fakten mit einmal vermittelt, versteht der andere nur Bahnhof. Das hatte der eine Dr. an der Uni drauf. Du hast ihm eine Frage gestellt und er hat Dir die halbe Statik erklärt. Die Aufgabe, um die es ging hat er Dir dreimal vorgerechnet, mal linksrum, mal rechtsrum und dann noch grafisch Zusammenhänge erklärt. Am Ende hat jeder nur noch Bahnhof verstanden.

                      Aber es wäre doch auch falsch, zu sagen, daß ich an dieser Stelle

                      if ($a==$b)

                      gedankenlos auch ein einfaches Gleich nehmen könnte, weil:
                      ( $a == $b ) // ist false wenn $a==3 und $b==4
                      ( $a == $b ) // ist true  wenn $a==0 und $b==0
                      ( $a =  $b ) // ist true  wenn $a==3 und $b==4
                      ( $a =  $b ) // ist false wenn $a==0 und $b==0

                      Und deshalb finde ich es richtiger, die Verwendung des einfachen Gleichheitszeichens beim _Vergleichen_ als falsch zu betiteln. Denn was ist denn das, wenn man das einfache Gleichheitszeichen verwendet? Eine Wertzuweisung! Und _kein_ Vergleich. Die Schreibweise

                      if ($a = $b)

                      impliziert doch einen ganz anderen Vergleich, nämlich:

                      if ( 0 != ($a = $b) )

                      Nur dann wäre es doch besser, dem Einsteiger diese ausführliche Schreibweise zu zeigen, um dann (in der gleichen Sitzung) die verkürzte Schreibweise zu zeigen. Bei anderen Sachen, wie z.B. "i++" fängt man doch auch nicht an und sagt "das ist jetzt ein Increment". Nein, man fängt doch erst beim "i=i+5" an, weil das häufig vorkommt, daß das Ergebnis in eine verwendete Variable zurückgeschrieben wird schreibt kann man es kürzer schreiben, also i+=5. Und für i+=1, weil man das nun noch häufiger braucht, gibts was noch kürzeres, nämlich "++i". Jetzt kann man den Begriff Increment erklären.

                      So, und wenn der arme Einsteiger jetzt noch aufnahmefähig ist, dann kann man noch die Unterschiede zwischen "++i" und "i++" erklären. Nur ich habs dann meistens gelassen, weil die Leute eben das erstmal verdauen mußten.

                      Ich fand es einfach nur unpassend, daß ich die einfachsten Zusammenhänge versucht hab, syntaktisch zu erklären, und nun kommen die Klugen aus der letzten Reihe und wissen alles besser, ohne die Zusammenhänge mit zu erklären.

                      Wenn den Thread jetzt ein Einsteiger liest, dann erfährt er nämlich folgendes:

                      von mir: aha, klare Trennung: "=" ist Zuweisung, "==" ist Vergleich
                      von Euch: aha, kann auch "=" für Vergleiche nehmen oder gar nichts geht auch, also ist es egal

                      und damit ist er aus meiner Sicht von Euch mehr in die Irre geführt worden, als durch mich.

                      Viele Grüße auch von mir
                      Andreas

                      PS: Ich weiß noch, wie ich mal als kleiner Stift sowas aufgeschnappt hatte, wie "5 - 7 rechnet man aus, indem man 7 - 5 rechnet und dann ein Minuszeichen davorsetzt, Ergebnis also: - 2". Nun wurde in der Grundschule so 'ne Aufgabe gestellt und ich nannte das richtige negative Ergebnis. Die Lehrerin sagt "falsch, Unsinn" oder so und freute sich über die "richtige" Antwort eines anderen Schülers: "nicht lösbar". Damals dachte ich für einen kurzen Moment "häää?" und hatte es wieder vergessen. Heute weiß ich's natürlich, warum sie abwiegeln mußte, weil sie nämlich froh war, daß die anderen Kinder erstmal mit den natürlichen Zahlen zurande kamen, und die negativen oder rationalen Zahlen kamen ja erst viel später. Oder wie war das bei Euch in der Schule?

                      1. Hi Andreas,

                        Und deshalb finde ich es richtiger, die Verwendung des einfachen
                        Gleichheitszeichens beim _Vergleichen_ als falsch zu betiteln.
                        Denn was ist denn das, wenn man das einfache Gleichheitszeichen
                        verwendet? Eine Wertzuweisung! Und _kein_ Vergleich.

                        Yep. Das ist nun aber schon eine seht viel exaktere Darstellung, und
                        sie ist nicht sehr viel komplexer als vorhin.
                        Das Preis/Leistungs-Verhältnis für die Korrektur gefällt mir.

                        Die Schreibweise
                        if ($a = $b)
                        impliziert doch einen ganz anderen Vergleich, nämlich:
                        if ( 0 != ($a = $b) )
                        Nur dann wäre es doch besser, dem Einsteiger diese ausführliche
                        Schreibweise zu zeigen, um dann (in der gleichen Sitzung) die
                        verkürzte Schreibweise zu zeigen.

                        Absolute Zustimmung. Ich bin auch der Meinung, daß man selbst einem
                        Anfänger nichts als "einfach" darstellen soll, was es nicht ist (bzw.
                        nur wird, wenn man die Hälfte der möglichen Fälle unter den Tisch kehrt).
                        Ich habe lieber einen Anfänger als Schüler, der Respekt vor der Materie
                        hat, aber die Wahrheit lernt (wenn auch langsam), als einen, der nach
                        der ersten Sitzung glaubt, alles zu wissen, und dann furchtbar auf die
                        Nase fällt, wenn er mit den ganzen Ausnahmen zu tun bekommt.

                        Genau das ist nämlich das Problem der "Vereinfacher" wie Frontpage:
                        Sie bauen ein Potemkinsches Dorf des Schein-Wissens auf.

                        Bei anderen Sachen, wie z.B. "i++" fängt man doch auch nicht an
                        und sagt "das ist jetzt ein Increment". Nein, man fängt doch erst
                        beim "i=i+5" an, weil das häufig vorkommt, daß das Ergebnis in
                        eine verwendete Variable zurückgeschrieben wird schreibt kann
                        man es kürzer schreiben, also i+=5.

                        Ich würde es anders erklären: "Es gibt Zuweisungen und Ausdrücke. Von
                        beidem gibt es diverse Formen. Wie beschäftigen uns zuerst mit deren
                        allgemeinen Eigenschaften (nämlich etwas zu speichern bzw. zu berechnen),
                        dann mit den häufgsten Beispielen, zuletzt mit der vollständigen Aufli-
                        stung aller Varianten."

                        Und für i+=1, weil man das nun noch häufiger braucht, gibts was noch
                        kürzeres, nämlich "++i". Jetzt kann man den Begriff Increment erklären.

                        Bei mir käme der noch später als bei Dir. Aber die Information, daß es
                        viele Möglichkeiten gibt, käme bei mir als allererstes.

                        Wenn den Thread jetzt ein Einsteiger liest, dann erfährt er nämlich
                        folgendes:
                        von mir: aha, klare Trennung: "=" ist Zuweisung, "==" ist Vergleich
                        von Euch: aha, kann auch "=" für Vergleiche nehmen oder gar nichts
                        geht auch, also ist es egal

                        Letzteres ist falsch und wurde auch von niemandem so behauptet.

                        Nun wurde in der Grundschule so 'ne Aufgabe gestellt und ich nannte
                        das richtige negative Ergebnis.

                        Wie lautete die exakte Aufgabenstellung?
                        Je nachdem, ob diese "im Universum der Natürlichen Zahlen" oder "im
                        Universum der Ganzen Zahlen" beinhaltete, ist Deine Lösung falsch bzw.
                        richtig.

                        vergessen. Heute weiß ich's natürlich, warum sie abwiegeln mußte,
                        weil sie nämlich froh war, daß die anderen Kinder erstmal mit den
                        natürlichen Zahlen zurande kamen, und die negativen oder rationalen
                        Zahlen kamen ja erst viel später.

                        Du suchst die Schuld bei der Lehrerin, weil _Du_ einen Teil der Aufgaben-
                        stellung ignoriert hast?

                        Viele Grüße
                              Michael

                        1. Genau das ist nämlich das Problem der "Vereinfacher" wie Frontpage:
                          Sie bauen ein Potemkinsches Dorf des Schein-Wissens auf.

                          Applaus

                          Wenn den Thread jetzt ein Einsteiger liest, dann erfährt er nämlich
                          folgendes:
                          von mir: aha, klare Trennung: "=" ist Zuweisung, "==" ist Vergleich
                          von Euch: aha, kann auch "=" für Vergleiche nehmen oder gar nichts
                          geht auch, also ist es egal

                          Letzteres ist falsch und wurde auch von niemandem so behauptet.

                          So kam es aber bei mir an. Natürlich steht nicht immer jede Behauptung  wort-wörtlich beschrieben da.

                          Ich möchte mal ein Stück aus dem Posting http://forum.de.selfhtml.org/?m=28095&t=5001 nochmal hierhin schreiben:

                          (meine)

                          In den meisten Programmiersprachen gibt es noch ein "vergleichendes Gleich" für Fallunterscheidungen:

                          if ($a == $b){
                          // mach dies
                          } else {
                          // mach das
                          }

                          An dieser Stelle sei erwähnt, daß es sogar ein Fehler wäre, das einfache Zuweisungs-"Gleich" (=) zu verwenden.

                          (Deine)

                          Ist es nicht. Es macht nur nicht das, was du willst. ...

                          Frage: Wenn Dein Programm nicht das tut, was es soll, würdest Du es dann als fehlerfrei bezeichnen? Es macht ja was, nur was anderes. Also für mich ist das ein Fehler. Da hat zwar kein Compiler "syntax error" geschriehen und kein Interpreter hat "parse error" gerufen.

                          Aber wenn Du das elektronisch abgefragte Lenkrad Deines Autos (so in zehn Jahren) nach links drehst und das Auto fährt rechtsrum und wenn bei der nächsten exakten Geradeausstellung das Auto plötzlich das ursprünglich gewollte tut, nämlich linksrum fahren. Dann wirst Du aber mit entsprechender Wut den Autoverkäufer anrufen, er solle doch das kaputte Auto abholen, Du fährst damit bestimmt keinen Meter mehr.

                          So, also Fehler! Steht doch da oder? Es steht doch da: Für Fallunterscheidungen gibt es ein "vergleichendes Gleich" und es wär ein Fehler, dafür (für Fallunterscheidungen) das Zuweisungsgleich zuverwenden. Steht doch da. Oder etwa nicht?

                          Und Du sagtest ja selbst "Es macht nur nicht das, was du willst." Also ist es doch ein Fehler. Und nicht "Ist es nicht.".

                          Deine weiteren Erklärungen sind ja wieder richtig, habe sie mir extra nochmal durchgelesen.

                          Nun wurde in der Grundschule so 'ne Aufgabe gestellt und ich nannte
                          das richtige negative Ergebnis.

                          Wie lautete die exakte Aufgabenstellung?
                          Je nachdem, ob diese "im Universum der Natürlichen Zahlen" oder "im
                          Universum der Ganzen Zahlen" beinhaltete, ist Deine Lösung falsch bzw.
                          richtig.

                          Frag doch nicht solche komplizierten Sachen. Außerdem glaube ich nicht, daß die Lehrerin uns damals schon gesagt hat, was natürliche Zahlen sind und daß es auch andere gibt. Wir kannten eben nichts anderes, nur ich kleiner Klugscheißer wußte eben ein bisschen mehr. Und damit habe ich den "mir bekannten Zahlenbereich" zur Lösung dieser Aufgabe einfach erweitert. Ich weiß nicht mehr, ob der Begriff der Natürlichen Zahlen damals schon erklärt wurde. Wir haben eben immer nur "nicht lösbar" gesagt und nicht "... im Bereich der natürlichen Zahlen". Meine Güte, es war halt so.

                          vergessen. Heute weiß ich's natürlich, warum sie abwiegeln mußte,
                          weil sie nämlich froh war, daß die anderen Kinder erstmal mit den
                          natürlichen Zahlen zurande kamen, und die negativen oder rationalen
                          Zahlen kamen ja erst viel später.

                          Du suchst die Schuld bei der Lehrerin, weil _Du_ einen Teil der Aufgaben-
                          stellung ignoriert hast?

                          Ich suche doch keine Schuld! Sie hatte ihren Lehrplan und da stand eben "nicht lösbar". Nur ich kannte den Lehrplan nicht und ich weiß, warum man manchmal die ganze Wahrheit etwas hinausschieben muß und da suche ich doch keine Schuld! Ich habe auch damals keine Schuld gesucht. Ich sag ja, hab meine Antwort gekriegt, mal kurz verwirrt geschaut und da wars schon wieder vergessen.

                          Viele Grüße
                          Andreas

                          1. use Mosche;

                            Wenn den Thread jetzt ein Einsteiger liest, dann erfährt er nämlich
                            folgendes:
                            von mir: aha, klare Trennung: "=" ist Zuweisung, "==" ist Vergleich
                            von Euch: aha, kann auch "=" für Vergleiche nehmen oder gar nichts
                            geht auch, also ist es egal

                            Letzteres ist falsch und wurde auch von niemandem so behauptet.
                            So kam es aber bei mir an. Natürlich steht nicht immer jede Behauptung  wort-wörtlich beschrieben da.

                            Ich möchte mal ein Stück aus dem Posting http://forum.de.selfhtml.org/?m=28095&t=5001 nochmal hierhin schreiben:

                            (meine)

                            In den meisten Programmiersprachen gibt es noch ein "vergleichendes Gleich" für Fallunterscheidungen:

                            if ($a == $b){
                            // mach dies
                            } else {
                            // mach das
                            }

                            An dieser Stelle sei erwähnt, daß es sogar ein Fehler wäre, das einfache Zuweisungs-"Gleich" (=) zu verwenden.

                            (Deine)

                            Ist es nicht. Es macht nur nicht das, was du willst. ...

                            Frage: Wenn Dein Programm nicht das tut, was es soll, würdest Du es dann als fehlerfrei bezeichnen? Es macht ja was, nur was anderes. Also für mich ist das ein Fehler. Da hat zwar kein Compiler "syntax error" geschriehen und kein Interpreter hat "parse error" gerufen.

                            Es ist aber trotzdem kein Fehler, weil es auch den Fall gibt, wo was "Zuweisungs-Gleich" gebraucht wird und nicht das "Vergleichs-Gleich".

                            Das Programm ist zwar fehlerhaft, es hat aber keine Fehler (hääähh?).
                            Wenn ich $a mit $b multipliziere und will eigentlich mit $c multiplizieren, dann ist das auch ein Fehler. Erklär doch eher das dem Anfänger.

                            use Tschoe qw(Matti);

                            1. Hi Matti

                              use Mosche;

                              Wenn den Thread jetzt ein Einsteiger liest, dann erfährt er nämlich
                              folgendes:
                              von mir: aha, klare Trennung: "=" ist Zuweisung, "==" ist Vergleich
                              von Euch: aha, kann auch "=" für Vergleiche nehmen oder gar nichts
                              geht auch, also ist es egal

                              Letzteres ist falsch und wurde auch von niemandem so behauptet.
                              So kam es aber bei mir an. Natürlich steht nicht immer jede Behauptung  wort-wörtlich beschrieben da.

                              Ich möchte mal ein Stück aus dem Posting http://forum.de.selfhtml.org/?m=28095&t=5001 nochmal hierhin schreiben:

                              (meine)

                              In den meisten Programmiersprachen gibt es noch ein "vergleichendes Gleich" für Fallunterscheidungen:

                              if ($a == $b){
                              // mach dies
                              } else {
                              // mach das
                              }

                              An dieser Stelle sei erwähnt, daß es sogar ein Fehler wäre, das einfache Zuweisungs-"Gleich" (=) zu verwenden.

                              (Deine)

                              Ist es nicht. Es macht nur nicht das, was du willst. ...

                              Frage: Wenn Dein Programm nicht das tut, was es soll, würdest Du es dann als fehlerfrei bezeichnen? Es macht ja was, nur was anderes. Also für mich ist das ein Fehler. Da hat zwar kein Compiler "syntax error" geschriehen und kein Interpreter hat "parse error" gerufen.

                              Es ist aber trotzdem kein Fehler, weil es auch den Fall gibt, wo was "Zuweisungs-Gleich" gebraucht wird und nicht das "Vergleichs-Gleich".

                              Das Programm ist zwar fehlerhaft, es hat aber keine Fehler (hääähh?).
                              Wenn ich $a mit $b multipliziere und will eigentlich mit $c multiplizieren, dann ist das auch ein Fehler. Erklär doch eher das dem Anfänger.

                              Also ich habe jetzt den Eindruck, daß wir doch eigentlich einer Meinung sind. Oder nicht?

                              Es ist ein Fehler, nicht das zu tun, was man sollte, weil dann was anderes herauskommt. Und ich sag doch auch _nur_, daß es ein Fehler ist für einen Vergleich den Operator für die Zuweisung zu nehmen. Es war doch nie die Rede von falscher Syntax oder so.

                              Also ich hatte mir damals beim Schreiben nicht so intensive Gedanken gemacht, aber je mehr ich drüber nachdenke, um so weniger kann ich in meiner Formulierung keinen Fehler sehen. Jedenfalls kann ich nicht verstehen, warum ein Fehler zwangsweise ein Syntaxfehler sein muß.

                              Damit wären wir irgendwie bei der Klassifizierung, eine Grundlage für gutes objektorientiertes Softwaredesign (denk ich mal):

                              Es gibt Schußlichkeitsfehler, Denkfehler, Syntaxfehler, Rechenfehler, Materialfehler, Produktionsfehler, Konzeptfehler, Designfehler, Schönheitsfehler......... alles sind Fehler.

                              Genauso gibt es Schreibtische, Eßtische, Couchtische, Schultische ... alles Tische. Nur weil Du den ganzen Arbeitstag am Schreibtisch sitzt, muß doch Deine Frau nicht zwangsweise mit einem Tisch einen Schreibtisch meinen. Oder?

                              Ich denke, wir sollten diesen Thread langsam mal abschließen, sonst wird der noch größer, als der "Was war los in selfhtml". Dann tun die anderen uns bestimmt schlagen. Oder sie steigen nochmal mit ein *lol*

                              Gruß,
                              Andreas

                              PS: Falls mal ein bisschen Abwechslung gefragt ist: http://schigold.de/spiel/

                          2. Hi Andreas,

                            Und Du sagtest ja selbst "Es macht nur nicht das, was du willst."
                            Also ist es doch ein Fehler. Und nicht "Ist es nicht.".

                            Es macht nicht _nur_, was Du willst. Es macht _auch_, was Du willst,
                            aber eben _zusätzlich_ auch noch eine Wertzuweisung.

                            Je nachdem, ob das für Dich entscheidend ist (darüber machst Du, solange
                            Du Dich auf die Auswertung des Boole'schen Ausdrucks konzentrierst, keine
                            Aussage) kann das entweder richtig oder falsch sein.

                            Du suchst die Schuld bei der Lehrerin, weil _Du_ einen Teil der Aufgaben-
                            stellung ignoriert hast?
                            Ich suche doch keine Schuld! Sie hatte ihren Lehrplan und da stand
                            eben "nicht lösbar".

                            Wenn die Aufgabenstellung lautete "Subtraktion im Bereich der Natürlichen
                            Zahlen" (entweder als explizite Angabe dieser Teilaufgabe oder als implizi-
                            ter Kontext), dann stand es zu Recht da. Auch hier sind Deine Angaben un-
                            vollständig.

                            Viele Grüße
                                  Michael

              2. Moin!

                In einem Forum, wo ich in jedem dritten Posting was vom Validator.w3.org lese, kann ich das jetzt nicht verstehen.

                Das ist ja nun nicht gerade, was man einen treffenden Vergleich nennt. Der Validator ueberprueft, ob man sich an die Regeln von HTML gehalten hat. Wenn ich = in einer Bedingung verwende, habe ich mich sehr wohl an die Regeln von C/Perl/whatever gehalten.

                Es zeugt einfach von einer unsauberen Programmierweise

                Haeh?

                und erschwert oft die Lesbarkeit von Programmen.

                Fuer Anfaenger, ja.

                Schreibt man aber in viele Verzweigungsköpfe noch Zuweisungen hinein, erhöht das die Gefahr des Schußlichkeitsfehlers enorm.

                Aufpassen muss man schon, das stimmt.

                An dieser Stelle sei erwähnt, daß es sogar ein Fehler wäre, das einfache Zuweisungs-"Gleich" (=) zu verwenden.
                Ist es nicht.

                Das kommt auf die Sprache an. In richtigen Programmiersprachen ist das ok, aber Spielzeugsprachen wie JavaScript melden da oft einen Fehler, weil diese eben gerade von Anfaengern gern benutzt werden.

                So long

              3. use Mosche;

                also:
                if ( wanted(sauberer Programmierstil) == true) {
                // few errors
                } else{
                [ Quote von Mattis Posting ]

                a) Bitte lese http://learn.to/quote.
                b) Du hastselber einen Fehler gemacht:

                if ( wanted(sauberer Programmierstil) == true) {

                sollte wohl heissen:
                   if ( wanted('sauberer Programmierstil') eq 'true') {
                oder
                   if ( wanted('sauberer Programmierstil')) {

                oben kommt _immer_ wahr raus, weil 'hhh' == 'bbb' (weil 0 == 0).

                use Tschoe qw(Matti);

                1. Hi Matti,

                  in einem Punkt gebe ich Dir Recht, "sauberer Programmierstil" kann keine Variable sein und auch kein DEFINE oder sonst was, muß also ein String sein. Fein aufgepaßt, macht ein Bienchen *g*.

                  ABER: In jeder mir bekannten Programmiersprache gibt es die Schlüsselwörter true und false. Und die schreibt man da genauso hin, wie ein if, ein while oder ein return. Und wenn die Methode wanted(String) einen boolschen Wert zurückgibt, dann kann ich doch bestimmt auch in Perl so vergleichen können:

                  if (wanted('what ever you think is wanted') == true)

                  Oder gibts in PERL kein '=='?

                  oben kommt _immer_ wahr raus, weil 'hhh' == 'bbb' (weil 0 == 0).

                  In welcher Sprache ist das so? Ich kenne es nur andersrum:

                  ('abc' == 'abc') ist false, weil die Zeiger der Texte auf verschiedene Adressen zeigen - is aber nur in C/C++ so schlimm. Deshalb gibt es dort einen speziellen Stringvergleich: (strcmp('abc','abc')==0)
                  In Scriptsprachen funktionieren aber im allgemeinen direkte Stringvergleiche, wie:

                  ('abc'=='abc') ist true und
                  ('bbb'=='hhh') ist false

                  Oder hast Du was falsch verstanden? Also wanted() ist eine "gedachte" Funktion, die prüft, ob der als Parameter angegebene Tatbestand gewollt/gesucht ist oder nicht. Dementsprechend gibt sie natürlich ein true oder false zurück, also etwa so (Javascript-like):

                  function wanted (sWanted) {
                    switch(sWanted) {
                    case 'sauberer Programmierstil':   return true;
                    case 'Eis am Stiel:                return true;
                    case 'schlechter Programmierstil': return false;
                    case 'Lottogewinn':                return true;
                    default:                           return false;
                    }
                  }

                  Greetings
                  Andreas

                  1. Hallo,

                    ABER: In jeder mir bekannten Programmiersprache gibt es die Schlüsselwörter true und false.

                    Dann dürfte Dir Perl nicht bekannt sein, weil da gibts (noch) kein true oder false;-)

                    Und die schreibt man da genauso hin, wie ein if, ein while oder ein return. Und wenn die Methode wanted(String) einen boolschen Wert zurückgibt, dann kann ich doch bestimmt auch in Perl so vergleichen können:

                    if (wanted('what ever you think is wanted') == true)

                    eigentlich

                    if (wanted('what ever you think is wanted'))

                    wenn Du das logische True erwartest bzw.

                    unless (wanted('what ever you think is wanted'))

                    wenn Du das logische False erwartest.

                    Oder gibts in PERL kein '=='?

                    Sicherlich, aber nur wenn Du numerische Gleichheit prüfen willst.

                    Logishc True ist alles was nicht ein leerer String, der Wert 0 oder undefiniert ist.

                    oben kommt _immer_ wahr raus, weil 'hhh' == 'bbb' (weil 0 == 0).
                    In welcher Sprache ist das so?

                    In Perl, da == ja numerishc vergleicht und 'hhh' nach der Umwandlung in eine Zahl 0 ergibt, genauso wie 'aaa'. Anders verhält sich '123abc'. Wenn Du diesen String als Zahl interpretierst, dann funktioniert das zwar, aber nicht ohne Warnung, wenn deren Ausgabe aktibiert ist.

                    ('abc' == 'abc') ist false, weil die Zeiger der Texte auf verschiedene Adressen zeigen - is aber nur in C/C++ so schlimm.

                    'abc' würde in C zu einem Compilerfehler führen, da Singlequotes für Charakterkonstanten verwendet wird, während Doublequotes für Stringkonstanten eingesetzt werden.
                    Allerdings ist das Ergebnis von ("abc" == "abc") in C undefiniert, da, bei entsprechenden Compileroptionen beide Stringkonstanten durchaus auch zusammengefaßt werden könnten.

                    Deshalb gibt es dort einen speziellen Stringvergleich: (strcmp('abc','abc')==0)

                    das erledigt in Perl normalerweise ('abc' eq 'abc').

                    Allerdings könntest Du auch hergehen, und die Operatoren überladen, was aber dann sicherlich zu einiger Verwirrung führen könnte.

                    In Scriptsprachen funktionieren aber im allgemeinen direkte Stringvergleiche, wie:

                    ('abc'=='abc') ist true und
                    ('bbb'=='hhh') ist false

                    Wie Du schon sagst, 'im Allgemeinen';-)

                    Grüße
                      Klaus

                  2. Moin!

                    ABER: In jeder mir bekannten Programmiersprache gibt es die Schlüsselwörter true und false.

                    Du kennst also weder C noch Perl?

                    if (wanted('what ever you think is wanted') == true)
                    Oder gibts in PERL kein '=='?

                    Das schon, aber das hier funktioniert nur, wenn Du vorher irgendwo
                      sub true() { 1 }
                    geschrieben hast, denn sonst wird Perl sich ueberlegen, ob es true als einen unquoted string oder eine nichtexistierende Subroutine ansieht.

                    oben kommt _immer_ wahr raus, weil 'hhh' == 'bbb' (weil 0 == 0).
                    In welcher Sprache ist das so?

                    Na in Perl. Reden wir nicht davon?

                    ('abc' == 'abc') ist false, weil die Zeiger der Texte auf verschiedene Adressen zeigen - is aber nur in C/C++ so schlimm.

                    Nein, das ist true. Du vergleichst zwei Zahlen miteinander. Du meinst vielleicht ("abc" == "abc"). In dem Falle duerfte es vom Compiler abhaengig sein, ob er zwei Exemplare des Strings anlegt.

                    Deshalb gibt es dort einen speziellen Stringvergleich: (strcmp('abc','abc')==0)

                    Core dump!

                    In Scriptsprachen funktionieren aber im allgemeinen direkte Stringvergleiche, wie:
                    ('abc'=='abc') ist true und
                    ('bbb'=='hhh') ist false

                    Ja, aber nicht in Perl. Dort funktioniert dafuer
                     ('abc' eq 'abc') ist 1
                     ('bbb' eq 'hhh') ist ''

                    So long

                    1. use Mosche;

                      if (wanted('what ever you think is wanted') == true)
                      Oder gibts in PERL kein '=='?

                      Das schon, aber das hier funktioniert nur, wenn Du vorher irgendwo
                        sub true() { 1 }
                      geschrieben hast, denn sonst wird Perl sich ueberlegen, ob es true als einen unquoted string oder eine nichtexistierende Subroutine ansieht.

                      Dann müsste er aber mit '&true' oder 'true()' vergleichen.
                      Schon 'warnings' warnt sonst vor der Benutzung eines unquotes Strings. (entschuldige mein Denglisch 8-)).

                      use Tschoe qw(Matti);

                      1. Moin moin!

                        Das schon, aber das hier funktioniert nur, wenn Du vorher irgendwo
                          sub true() { 1 }
                        geschrieben hast, denn sonst wird Perl sich ueberlegen, ob es true als einen unquoted string oder eine nichtexistierende Subroutine ansieht.
                        Dann müsste er aber mit '&true' oder 'true()' vergleichen.
                        Schon 'warnings' warnt sonst vor der Benutzung eines unquotes Strings.

                        ---------
                        T:\home\calocybe\projects\utils\xren\working\test2>perl -w
                        print true;
                        Unquoted string "true" may clash with future reserved word at - line 1.
                        ^Z
                        Name "main::true" used only once: possible typo at - line 1.
                        Filehandle main::true never opened at - line 1.
                        ---------

                        Sieht aus, wie wenn Du recht hast.

                        (entschuldige mein Denglisch 8-)).

                        Ich komm schon klar. ;-)

                        So long

      2. Hoi,

        ich habe in $zeit eine Minuszahl (zum beispiel -45 oder -120),
        jetzt möchte ich diese Minuszahl in eine Pluszahl umwandeln. Wie
        ist das möglich? Es kann jedesmal eine andere Zahl sein, geht es
        mit substr? Wie muss ich das anwenden?

        [...]

        Also probier' doch mal die Funktion abs().

        Alternativ reicht auch ein * -1.

        Stimmt. abs() hat aber den Vorteil, daß die Zahl auch dann positiv bleibt, wenn sie vorher schon positiv war - sicher ist sicher.

        Gruesse,
        CK

        Manfred