ALGORITHMEN - Teil XXIV: Eins zu Null für Binärcode!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

  • Nachtrag zu ALR-15 ´Reicher Rancher´: Probe mittels Lösungsprogramm

    Quellcode

    1. Goto "Init"
    2. Weiter:
    3. whileloop u&:P&=&Loop
    4. case rnd()<e!:Signal
    5. whileloop o&:K&=&Loop
    6. casenot 344*P&-265*K&-33:Result
    7. endwhile
    8. endwhile
    9. locate %csrlin-1,1:print " \n _____"
    10. waitinput 60000
    11. End
    12. proc Signal
    13. locate %csrlin-1,2
    14. case z&>255:z&=32
    15. inc z&:print chr$(z&)
    16. endproc
    17. proc Result
    18. locate %csrlin-1,1
    19. print " P = ";P&,"Pferde und K = ";K&,"Kühe\n"
    20. endproc
    21. Init:
    22. WindowTitle "ALR-15 Solver"
    23. declare P&,K&,u&,o&,e!,z&
    24. WindowStyle 24:CLS:font 2:z&=33
    25. $IFDEF interpreter
    26. u&=500:o&=700:e!=0.1
    27. print "\n Interpreter-Lauf!\n"
    28. $ELSE
    29. u&=3000:o&=4000:e!=0.1
    30. print "\n Compiliertes Programm:\n"
    31. $ENDIF
    32. print:Goto "Weiter"
    Alles anzeigen
    P.S.: ALR-17 ist derzeit noch offen!
  • Abt. ALR-19 ´Alterserscheinungen´
    =================================
    Hans und Grete hatten drei Kinder: Johann, Benjamin und Maria.
    Der Altersunterschied zwischen den Eltern war genau so groß wie jener
    zwischen Johann und Benjamin sowie zwischen Benjamin und Maria.

    Eines Tages fand Benjamin heraus, daß sein Alter, multipliziert dem von Johann, das
    Alter des Vaters ergab, aber multipliziert mit dem Alter von Maria das Alter der Mutter!
    Alle Familienmitglieder ergaben zusammen 90 an Jahren.

    Aufgabe: Bestimme das Alter aller Familienmitglieder!
  • Abt. Exotische XProfan-Befehle
    ====================
    Unter dieser Rubrik möchte ich Befehlsworte behandeln, die in Version 11.2a-Free immer noch gute Dienste leisten.
    Um weitere Vorschläge wird gebeten!

    Hier ein paar Beispiele:

    WEND statt Endwhile: Klappt, ist kurz und prägnant.

    WAITEND ersetzt eine ganze Schleife mit Endflag-Abfrage: Am Ende eines Progammes reagiert es aussschließlich auf den SCHLIESSEN-Befehl, sei es via Menüpunkt (links) oder Klick aufs "Schließen"-Kreuz (rechts).

    COLOR ... Der COLOR-Befehl, an sich für den ANSI-Textmodus, wirkt nach Startpaint auch auf Drawtext in Dialogfenstern.

    DECIMALS N& ... klappt statt des längeren SET("decimals", n) immer noch. Sehr sympathisch!

    (... wird fortgesetzt)
  • Fortsetzung von oben:
    ==============
    Folgendes klappt in XProfan 11.2 free auch noch und sollte zwecks Lesbarkeit alter Programme einstweilen noch in Erinnerung bleiben:

    CLS:var x&=1:print x&
    Add x&,5 'Inc Erhöhen eines Integers
    print x&
    Sub x&,2 'Dec Verringern eines Integers
    print x&
    waitend

    REM statt ' funktioniert noch immer
    # vor File-Kanalnummern stört nicht, ist aber nicht erforderlich
    @ vor Funktionen stört nicht, ist aber nicht mehr erforderlich

    SetLFN ' = REM Einstellung der Verwendung langer Dateinamen, wird nicht mehr verwendet und wie REM behandelt.

    Decimals 17 '@Set("Decimals", Anzahl der auszugebenden Dezimalstellen
    NumWidth 12 '@Set("NumWidth" Mindestweite der Ausgabe numerischer Werte
    StrWidth sw& '@Set("StrWidth" Mindest-Ausgabeweite für Strings

    SetTrueColor '@Set("TrueColor" Umschalten zwischen Farbtiefen
    CharSet '@Set("CharSet" Zeichensatz einstellen
    Orientation '@Set("Orientation" Ausgaberichtung des Textes festlegen
    SetAutoPaint '@Set("Autopaint" Neuzeichnen des Fensters festlegen
    @CreateXxx 'Create("Xxx" Erzeugen von Windows-Objekten
    MessageBox '@MessageBox MessageBox wird auf dem Bildschirm gebracht

    @addChoice '@addString fügt der Auswahlbox einen Eintrag hinzu
    @deleteChoice '@deleteString entfernt einen Eintrag der Auswahlbox
    @MoveListToChoice '@MoveListToHandle Fügt die Listboxliste einer Auswahlbox hinzu
    @MoveListToEdit '@MoveListToHandle Fügt die Listboxliste einer Editbox hinzu
    @MoveListToList '@MoveListToHandle Fügt die Listboxliste einer Listbox hinzu

    FileMode '@Set("FileMode" Filemodus für das Öffnen von Dateien
    CloseRW 'Close binäre Datei schließen

    @dbXxx '@db("Xxx" dBase-Funktionen
    dbCreate '@db("Create" dBase-Tabelle erzeugen
    dbCreateIndex '@db("CreateIndex" dBase-Index erzeugen
    dbSetMemoWidth '@Set("DbMemoWidth" Setzen des Zeilenumbruches bei Ausgabe eines Memo-Feldes

    DrawExtBmp 'DrawPic Anzeige einer Bitmap
    DrawExtIcon 'DrawIcon Anzeige eines Icons
    DrawLibIcon 'DrawIcon Anzeige eines Icons
    DrawSizedExtBmp 'DrawSizedPic Skalierte Anzeige einer Bitmap
    DrawSysIcon 'DrawIcon Anzeige eines Icon
    LoadBmp 'DrawPic Anzeige einer Bitmap
    LoadSizedBmp 'DrawSizedPic Skalierte Anzeige einer Bitmap

    SetErrorLevel '@Set("ErrorLevel" Verhalten des Systems bei Auftreten eines Fehlers

    SQLSetNull '@Set("SQLNull" Legt fest, das NULL im Ergebnis definiert dargestellt wird
    SQLSetDel '@Set("SQLDel" Legt fest, mit welchem Zeichen die Felder getrennt werden

    Dim! Dim$ Dim% Dim& Speziallisten-Dimensionierungen
    @List!, @List$, @List%, @List& für Lesen
    List!, List$, List%, List&
    (... wird in späteren Versionen durch Array gleichen Namens emuliert)

    Die One-Shot Timerfunktion
    WaitInput xMillisekunden& klappt, ist aber nicht allgemein bekannt!
    MillisekNachComputerstart& = &GetTickCount ... ist nicht sehr gut dokumentiert.
    Die Wirkweise der automatischen Systemvariable &Index ist ebenfalls nicht sehr klar dokumentiert.


    Welche vergessenen Schlüsselwörter mögen noch existieren? WaitEnd stand ja nichtmal mehr in der Änderungsliste!
    Gibt es weitere solche noch funktionierenden Kommandos, Funktionen, Systemvariablen?

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von p. specht ()

  • Lösung zu ALR-17 ´Weisse Mäuse´
    ---------------------------------------
    Spoiler anzeigen

    Wieviele Mäuse hat Karli im Zoo-Geschäft eingekauft?: x
    Er brauchte dazu 60 Euro.
    Der Einkaufspreis p einer Maus beträgt daher p = 60 / x

    Er behielt 15 Mäuse und verkaufte den Rest (x - 15).
    Seine Einnahmen waren 54 Euro.
    Der Verkaufspreis q einer Maus beträgt daher q = 54/(x - 15).

    Er erwirtschaftete pro Maus einen Gewinn von 10 Eurocent = 0.1 Eur.
    Gewinn g pro verkaufter Maus ergibt sich zu
    g = q - p = 0.1

    Einsetzen gibt:
    54/(x - 15) - 60/x = 0.1 , bzw.
    54/(x - 15) = 60/x +0.1 || *(x-15)
    54 = (x - 15) * (60/x +0.1) || ausmultipliziert:
    54 = 60 - 15*60/x + 0.1*x - 15*0.1
    54 = 60 - 15*0.1 - 15*60/x + 0.1*x
    54 = 60 - 1.5 - 900/x + x/10
    54 = 58.5 - 900/x + x/10
    0 = 58.5-54 - 900/x + x/10
    0 = 4.5 - 900/x + x/10 || *10
    0 = 45 - 9000/x + x || *x
    0 = 45*x - 9000 + x^2
    oder in Standardform:
    x^2 + 45*x - 9000 = 0

    x_1,2 = -p/2 +/- Sqrt( (p/2)^2 - q )
    mit p = 45, q = -9000 eingesetzt,
    nur der positive Wurzelzweig wichtig:
    x = -22.5 + Sqrt(22.5^2 - (-9000) )
    x = -22.5 + Sqrt(506.25 + 9000 )
    x = -22.5 + Sqrt(9506.25)
    x = -22.5 + 97.5 = 75

    Antwort: Karli hatte 75 Mäuse eingekauft.
  • Lösungsprogramm zu ALR-19 ´Alterserscheinungen´
    ----------------------------------------------------------
    Laufzeit bis zur Lösung: Compiliert knapp 62 Sekunden, im Interpreter ca. 9,2 min.

    Quellcode

    1. WindowStyle 24:randomize:declare h&,g&,j&,b&,m&, tm&
    2. CLS rgb(128+rnd(128),128+rnd(128),128+rnd(128))
    3. set("decimals",0):font 2:tm&=&gettickcount
    4. Whileloop 11,85:h&=&Loop
    5. WindowTitle " ALR-19-Solver Hans = "+str$(h&)
    6. Whileloop 11,82:g&=&Loop
    7. Whileloop 0,g&-12:j&=&Loop
    8. Whileloop 0,g&-12:b&=&Loop
    9. m&=90-(H&+G&+J&+B&)
    10. case M&<0:continue
    11. case m&>55:continue
    12. If g&=(b&*m&)
    13. if h&=(b&*j&)
    14. iF abs(h&-g&)=abs(j&-b&)
    15. if abs(h&-g&)=abs(b&-m&)
    16. sound 1000,100
    17. print "\n Hans Grete Johann Benji Maria"
    18. print "\n ",h&,g&," ",j&,b&,m&
    19. print "\n ... gefunden in ",int((&gettickcount-tm&)/1000),"sec."
    20. endif
    21. endiF
    22. endif
    23. endIf
    24. endwhile
    25. endwhile
    26. endwhile
    27. endwhile:sound 1000,100
    28. print "\n * Laufzeit ";int((&gettickcount-tm&)/1000),"sec."
    29. print "\n *** Fertig durchprobiert! (Taste => Ende) ***"
    30. waitinput 12e4:End
    Alles anzeigen
  • Abt. ALR-20
    ========
    Willi ist begeisterter Wanderer. Seine letzte Bergtour absolvierte er in 6 Stunden. Seine Geschwindigkeit steil bergauf betrug 1.5 km/h, die Durchschnittsgeschwindigkeit beim Rückweg gab er mit 4.5 km/h an. Frage: Wieviele Kilometer sind es bis zur Bergspitze?
  • @Oldi-40: ALR-20 korrekt gelöst!
    Spoiler anzeigen

    Weg = Geschwindigkeit * Zeit
    s = v * t ==> t = s / v
    t_hinauf = s / v_hinauf
    t_hinunter = s / v_hinunter
    t_gesamt = 6 [Std] = t_hinauf + t_hinunter
    t_gesamt = s / v_hinauf + s / v_hinunter
    6 = s / 1.5 + s / 4.5 || auf gemeinsamen Bruch bringen:
    6 = 4.5 * s / (4.5 * 1.5) + 1.5 * s / (4.5 * 1.5)
    6 = (4.5+1.5) * s / (4.5 * 1.5)
    6 = 6 * s / 6.75
    6.75 = 6 * s / 6
    s = 6.75 [km]

    Antwort: Die Strecke neträgt 6.75 Kilometer.

    Probe: 6.75 / 1.5 = 4.5 [h] , 6.75 / 4.5 = 1.5 [h] ==> t_gesamt = 6 [h]
    q.e.d.
  • wg.: Abt. ALR-18 ´Gib ihm den Rest´
    =====================
    1001 ganzzahlig dividiert durch eine einzelne Ziffer gibt den Rest 5. Welchen Rest ergibt die Zahl 2020, wenn man sie ganzzahlig durch die selbe Ziffer dividiert?





    Witzig, wofür Ihr Codes und Software braucht! :lol:

    1001 - 5 = 996
    Logisch: damit bei 1001 Rest 5 bleibt, muss x größer 5 sein.

    gewählt 6
    Probe: 996 : 6 = 166
    check!

    Zwischenergebnis: Die Ziffer x = 6

    2020 sind etwas mehr als 2x 1001
    2 x 166 = 332
    332 x 6 = 1992
    bleiben bis 2020 übrig: 28, das sind 6 x 4 (24) und Rest 4

    Ergebnis: 2020 ergibt : 6 den Rest 4!

    Probe. 2020 - 4 = 2016
    2016 : 6 = 336
    check.

    Rabe
    Computer setzen logisches Denken fort!
    Unlogisches auch....
  • :lol: :lol: :lol: :thumbsup:

    Niemand bezweifelt, dass ein Computer mehr Rechenoperationen / Sek ausführen kann als selbst ein Vulkanier-Hirn (vom Rabenhirn ganz zu schweigen...).
    Wer "1234567891234567 modulo 111 = ?" kurzfristig per Programmierung lösen kann, hat was drauf und alles richtig gemacht!

    Bei weniger anspruchsvollen Aufgaben aber ist Logik und gutes Schätzen nicht weniger richtig (und nicht weniger kunstvoll).

    Und wenn es zwei Wege gibt, ist es nicht dumm, beide zu betrachten, oder? ;-)

    Zitat aus einem Raumschiff-Enterprise-Film (sinngemäß):

    Kirk an Spock: "Woher wussten Sie eigentlich das Gewicht der Wale und des Wassers, um sie hoch zu beamen?"
    Spock (etwas peinlich berührt): "Nun, Captain - ich habe es … geschätzt!"
    Kirk: "Na, dann bin ich ja beruhigt!" (und geht raus...)

    Spock (verwundert) an Pille: "Wie hat er das jetzt gemeint??"
    Pille: "Ich glaube, er meinte, dass er sich mit Ihren Schätzungen sicherer fühlt, als mit den Berechnungen so manches Anderen...!"

    8-)

    Rabe
    Computer setzen logisches Denken fort!
    Unlogisches auch....
  • Abt. ALR-21 ´Schlüsselweite´

    Am Ende musste doch der Taschenrechner ran... :thumbsup:

    Spoiler anzeigen

    Ein gleichseitiges Sechseck kann man gedanklich in sechs gleichseitige Dreiecke zerlegen, die sich mit ihren Spitzen im Mittelpunkt treffen.
    Ihre Seitenlänge Länge L entsprich folglich der Länge einer Sechseck-Seite.

    Je zwei gegenüber-liegende Dreiecke stehen mit den Spitzen aufeinander.
    Der Abstand ihrer Basis-Seiten ist gleich der Schlüsselweite des Sechsecks.
    (hier: 18 mm)

    H = Höhe eines Dreiecks
    L = Seitenlänge

    H ist bekannt, = 18/2 = 9 (mm)
    L ist gesucht, denn L x 6 = Umfang des Sechsecks.

    Für die Höhe eines gleichseitigen Dreiecks gilt:
    H = (Wurzel3/2) x L |:(Wurzel3/2)
    H:Wurzel3/2 = L

    Wurzel 3 = 1,732
    Wurzel 3 /2 ist folglich 0,866
    H:Wurzel3/2 = L = 9 / 0,866 = 10,3926 (natürlich per Taschenrechner... )
    6L = 62,3556 = Umfang (mm), gerundet.
    Computer setzen logisches Denken fort!
    Unlogisches auch....
  • Ergänzung zu Beitrag #73: 1234567891234567 modulo 111 =
    (1234567891234567 / 111 - Int(1234567891234567 / 111) ) * 111 =
    (11122233254365.468468468468468468 - 11122233254365)*111 =
    0.468468468468468468 * 111 = 51,9999999999999999 = 52


    @ravenheart Beitrag #74: Raumschiff Entenscheiß - Der Film, hab ich gesehen: KULT!
    Wie sehen eigentlich deine Ohren aus? Hier das LINK zur Youtube-Originalszene

    Zu Beitrag #75: Diese Lösung ist richtig. Meine Variante geht über die "Höhe" (18 / 2 mm) und die Überlegung, daß der tangens(30°) = Gegenkathete / Ankathete (aka "Höhe") ist und das Sechseck aus 12 spiegelkongruenten rechtwinkeligen Dreiecken besteht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

  • Lösung zu ALR-22 A)
    ------------------------
    Spoiler anzeigen

    7^x + 4 * y = 359

    Ln(7^x + 4 * y) = Ln(359)
    Das ist in den üblichen kleinen Bereichen von y ungefähr (~~) ...
    Ln(7^x) + Ln(Ln(4 * y)) ~~ ln(359)
    mit Ln(Ln(4 * y)) ~~ 0 ... vorerst vernachlässigbar, daher:

    Dominanter Term: Ln(7^x) <~ Ln(359)
    x*ln(7) <~~ Ln(359), bzw.:

    x <~~ Ln(399)/Ln(7) = 3.023429623...
    Starke Annahme: x = 3


    Der Rest von 359 - 7^3 muss daher im y-Term (4*y) stecken:
    359 - 343 = 16
    (4*y) = 16
    y = 16/4 = 4
    Test: 7^3 + 4*4 = ? = 359 ... passt!

    Bestätigte Lösung: x=3, y=4

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()