ALGORITHMEN - Teil XXV: Das Fleisch ist willig, aber der Geist ist schwach...

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.

  • Abt. FGS-72
    ========
    Bei einer vierstelligen Zahl sind die letzten beiden Ziffern leider stark verwischt: 17?? ist noch zu sehen. Man weiß aber: Es war eine korrekte Lösung der Aufgabe 'Finde irgendeine vierstellige Zahl, die restlos duch 2, durch 3, 4, 6 und 9 teilbar ist!'. Wie lauten die beiden verwischten Ziffern?
  • zu FGS-72

    Spoiler anzeigen

    Quellcode

    1. cls
    2. Declare int i, Anzahl
    3. Declare string Ergebnis
    4. Print "\nLösungen: ";
    5. For i, 1700, 1799
    6. ' Locate 1,20
    7. ' Print str$(i);
    8. If (i mod 2) == 0
    9. If (i mod 3) == 0
    10. If (i mod 4) == 0
    11. If (i mod 6) == 0
    12. If (i mod 9) == 0
    13. CaseNot Anzahl = 0 : Ergebnis = Ergebnis $ ", "
    14. Inc Anzahl
    15. Locate 1,1
    16. Ergebnis = Ergebnis $ str$(i)
    17. Print str$(Anzahl);
    18. EndIf
    19. EndIf
    20. EndIf
    21. EndIf
    22. EndIf
    23. EndFor
    24. 'WaitInput
    25. Locate 4,1
    26. Print Ergebnis
    27. WaitEnd
    28. ' Mist. Ich hatte gedacht, das es etwas länger dauert.
    29. ' 1728, 1764
    Alles anzeigen
    Programmieren, das spannendste Detektivspiel der Welt.
  • @Michael Wodrich hat FSR 71 und FSR 72 korrekt gelöst.

    Bei FSR-72 wollte ich erst gar nicht glauben, daß tatsächlich ZWEI Lösungen existieren, im japanischen Internet ist nämlich nur eine Lösung zu finden. Ich habe daher sein Lösungsprogramm für XProfan-11.2a umgeschrieben und mit einer Probe versehen. Ergebnis: Michael Wodrich hat recht!
    Gruss

    Quellcode

    1. WindowTitle "FGS-71-Solver für XPr11.2a (Brute Force)":cls:font 2
    2. Declare i&,Anzahl&,Ergebnis$' Eine Zahl die durch 9 teilbar ist, ist es auch durch 3
    3. Whileloop 1700,1799:i&=&Loop' Eine Zahl die durch 4 teilbar ist, ist es auch durch 2
    4. Ifnot i& mod 9:Ifnot i& mod 6:Ifnot i& mod 4
    5. Case Anzahl&:Ergebnis$=Ergebnis$+", "
    6. Ergebnis$ = Ergebnis$ + str$(i&):Inc Anzahl&
    7. EndIf:EndIf:EndIf
    8. EndWhile
    9. Print "\n Lösungen:\n\n "+Ergebnis$
    10. Print "\n Anzahl Lösungen:",str$(Anzahl&)
    11. ' 1728, 1764
    12. print "\n\n Probe:"
    13. declare tmp$[]:tmp$[]=explode(Ergebnis$,",")
    14. declare tmp&[sizeof(tmp$[])-1]
    15. tmp&[]=val(tmp$[&index]):clear tmp$[]:set("decimals",0)
    16. Whileloop 0,sizeof(tmp&[])-1
    17. print "\n "+str$(tmp&[&Loop])+":",tmp&[&Loop] mod 2,tmp&[&Loop] mod 3,
    18. print tmp&[&Loop] mod 4,tmp&[&Loop] mod 6,tmp&[&Loop] mod 9
    19. endwhile
    20. waitinput
    Alles anzeigen
    P.S.: Interessantes Link zu 'genialen' Rechentricks

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

  • Abt. FGS-73
    ========
    Zwei von Form und Größe her deckungsgleiche Quadrate aus Papier, beide mit Seitenlänge 8 cm, werden so hingelegt, daß eine Ecke des einen Quadrates genau im Mittelpunkt (Kreuzungspunkt der Diagonalen) des anderen Quadrates zu liegen kommt. Wie groß ist die Überdeckungsfläche der beiden Quadrate, wenn das eine gegen das andere Quadrat (Frage 1) um 30° verdreht liegt; (Frage 2) um 45 ° verdreht liegt?
  • Erstaunlich, was? Ein Bravo an @Oldi-40 und @ravenheart!

    Abt. FGS-74 'Sommeridylle'
    ==================
    Albin, Bernd, Christian sowie Ulli und Vicky spielen am Strand Wasserball. Die beiden Mädchen werfen den Ball entweder dem anderen Mädchen oder einem der Jungs (Ö: Buben) zu. Die Jungs sind wild und schießen den Ball stets auf einen anderen Knaben - nur nie auf den, von dem sie den Ball gerade erhalten haben. Vicky hatte begonnen und warf den Ball etwas ungeschickt zu Albin. Frage: Wer machte den fünften Wurf?
  • Zu FGS-75

    Da musste ich erst einmal Nachschlagen, ob ich vergessen habe was "natürliche Zahlen" sind.
    Ich komme da zu keinem Ergebnis.

    Spoiler anzeigen


    Quellcode

    1. ' vX4
    2. cls
    3. declare int a[], i
    4. var int start = 1
    5. var int erg = 1
    6. var int summe = 0
    7. Repeat
    8. for i, 0, 6
    9. a[i] = start + i
    10. endfor
    11. for i, 0, 6
    12. print if(i != 0, ", ", ""); a[i];
    13. endfor
    14. summe = a[4] + a[5] + a[6]
    15. print " --> "; summe
    16. if summe >= 91
    17. erg = start
    18. break
    19. endif
    20. inc start
    21. Until start >= 30
    22. print "\nDie Zahlenfolge ist: ";
    23. for i, 0, 6
    24. print if(i != 0, ", ", ""); a[i];
    25. endfor
    26. print "\nDie ersten 3 Zahlen ergeben: "; str$(a[0] + a[1] + a[2])
    27. print "\nDie letzten 3 Zahlen ergeben: "; str$(a[4] + a[5] + a[6])
    28. waitend
    29. rem Startwert 26 ergibt vorne 81 und hinten 93
    Alles anzeigen
    Startwert 26 ergibt vorne 81 und hinten 93
    Programmieren, das spannendste Detektivspiel der Welt.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Michael Wodrich ()

  • Abt. FGS-76 ´Ausser Konkurrenz´
    ======================
    Geg: x * int( x * int( x * int( x ))) = 2020
    Ges: x, d.h. ein (oder mehrere?) positive oder negative Float-Werte!
    Hinweis: Manuelle Lösung in diesem Youtube-Video (falls man die englische, etwas gequetschte Stimme verträgt): LINK

    Frage: Wie könnte man ein Lösungsprogramm schreiben, das diese und ähnliche Aufgaben bewältigt?
  • zu FGS-76:

    Spoiler anzeigen

    Das Programm bestätigt nur - es gibt keine Lösung

    Quellcode

    1. declare i1%,i2%,i3%,i4%, prod&, counter&
    2. set("logfile","c:\Temp\FGS-76a.txt")
    3. cls
    4. Whileloop -7,7
    5. i1% = &loop
    6. locate 1,1 : print i1%;" " : locate 1,9 : print i2%;" "
    7. locate 1,18 : print i3%;" " : locate 1,27 : print i4%;" "
    8. Whileloop -7,7
    9. i2% = &loop
    10. locate 1,1 : print i1%;" " : locate 1,9 : print i2%;" "
    11. locate 1,18 : print i3%;" " : locate 1,27 : print i4%;" "
    12. if Between((i1% * i2%),-2020,2020)
    13. Whileloop -7,7
    14. i3% = &loop
    15. locate 1,1 : print i1%;" " : locate 1,9 : print i2%;" "
    16. locate 1,18 : print i3%;" " : locate 1,27 : print i4%;" "
    17. if Between((i1% * i2% * i3%),-2020,2020)
    18. Whileloop -7,7
    19. i4% = &loop
    20. locate 1,1 : print i1%;" " : locate 1,9 : print i2%;" "
    21. locate 1,18 : print i3%;" " : locate 1,27 : print i4%;" "
    22. prod& = i1% * i2% * i3% * i4%
    23. if Between(prod&,-2020,2020)
    24. if (prod& = 2020) or (prod& = -2020)
    25. inc counter&
    26. locate 4,1 : print "Treffer:",str$(counter&)
    27. logout str$(i1%) + " * " + str$(i2%) + " * " + \
    28. str$(i3%) + " * " + str$(i4%) + " = " + \
    29. str$(prod&)
    30. endif
    31. endif
    32. EndWhile
    33. endif
    34. EndWhile
    35. endif
    36. EndWhile
    37. EndWhile
    Alles anzeigen


    Ich habe mit der 4. Wurzel den Rahmen abgesteckt und mit Brute Force geprüft, ob es da doch eine Lösung gibt.

    Wenn ich in der Formel mit Int() arbeite, dann brauche ich Real-Zahlen nicht zu untersuchen. Sie werden ja auf Ganzzahlen korrigiert.

    Aber meiner bescheidenen Meinung nach werden auch floor() und ceiling() auf Ganzzahlen korrigiert.
    Deshalb verstehe ich nicht, das mir die Mathematik hier weismachen will, das es da ein Ergebnis für gibt. Denn die dort im Video eingesetzten Variablen, egal ob Komma oder Fraktion, sind Real-Zahlen.
    Programmieren, das spannendste Detektivspiel der Welt.
  • Tja, der Typ dort bekommt aber eine Lösung raus, die man nachprüfen kann. Es gibt also eine, weil das "linkeste x" ja nicht in einer Floor-Funktion steckt, sondern Float bleibt. Die Schwierigkeit liegt in den durch floor gegebenen Unstetigkeiten. Floor durch Int zu ersetzen, das klappt übrigens auch nur im positiven Zahlenbereich. Manche Lösungen gibt´s aber offenbar nur im Negativen.

    Mein eigener Lösungsversuch - mit der Strategie "Immer enger eingrenzen zwischen xu und xo" - hat jedenfalls bisher nicht hingehauen: Das Ding stoppt bei falschen Werten, bin am tüfteln wieso*). Ich geb´s also erst mal eine Nummer kleiner und möchte als "Vorwärtsstrategie" die Funktionskurve - "Funktionsgraph" trifft wohl eher zu - ermitteln.
    Gruss
    _____
    *) Eventuell wird das x, das ja in der 4. Potenz steht, in den Kommastellen so empfindlich, daß die Rechenergebnisse stets weit neben 2020 bleiben?

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

  • Nur negative Lösungen hört sich irgendwie nach Komplexen Zahlen an.

    Floor und Ceiling habe ich so...


    Quellcode

    1. ' Return the ceiling of x as a float, the smallest integer value greater than or equal to x.
    2. Proc _ceil 'Höchstbetrag
    3. Parameters x!
    4. If x! = Abs(x!)
    5. If x! = Int(x!)
    6. return int(x!)
    7. Else
    8. return int(x!) + 1
    9. EndIf
    10. Else
    11. If x! = Int(x!)
    12. return int(x!)
    13. Else
    14. return int(x!)
    15. EndIf
    16. EndIf
    17. EndProc
    18. ' Return the floor of x as a float, the largest integer value less than or equal to x.
    19. Proc _floor 'Boden
    20. Parameters x!
    21. If x! = Abs(x!)
    22. If x! = Int(x!)
    23. return int(x!)
    24. Else
    25. return int(x!)
    26. EndIf
    27. Else
    28. If x! = Int(x!)
    29. return int(x!)
    30. Else
    31. return int(x!) - 1
    32. EndIf
    33. EndIf
    34. EndProc
    Alles anzeigen
    von hier geholt.
    Programmieren, das spannendste Detektivspiel der Welt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Michael Wodrich ()

  • Diese floor() und ceiling()-Definitionen in deinem Programm sind korrekt - danke für die Klarstellung! (Das Int dort arbeitet allerdings nur im +/-2^31-Bereich korrekt, aber daas sollte ja reichen).

    Mein Fehler war, die Videoaufgabe x*floor(x*floor(x*floor(x)))=2020 mit int int int zu übersetzen, denn: Im positiven x-Bereich hat das Beispiel tatsächlich keine Lösung! Das korrekte Ergebnis ist ja x = -2020/305. Mit int statt floor kann das im Negativen nicht klappen!

    Tschisas, manchmal steht man sowas von am Schlauch!
    Gruss

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht () aus folgendem Grund: un

  • Hier - ohne jeden Anspruch auf Allgemeingütligkeit - mein Versuch, das Floor-Problem ausser Konkurrenz zu lösen.
    (FGS-76 in der Int-Form hat keine Lösung - Michael Wodrich hatte wieder einmal recht!)

    Brainfuck-Quellcode

    1. WindowTitle "Ausser Konkurrenz das Floor-Problem lösen, early Beta-Version"
    2. CLS:Appendmenubar 100," x*floor(x*floor(x*floor(x))=2020"
    3. proc Fun :parameters x!
    4. return x!*floor(x!*floor(x!*floor(x!)))
    5. endproc
    6. var y!=2020
    7. '--------------
    8. var flg& = 0 '>=1: Debug mode
    9. print "\n Debug mode? [0/1]: ";:input flg&
    10. '--------------
    11. declare x!,xu!,xo!,mu&,mo&,m&
    12. proc floor :parameters x!
    13. return if((x!<0) and (x!<>int(x!)),int(int(x!)-1),int(x!))
    14. endproc
    15. rep:
    16. if flg&
    17. locate 2,1
    18. print " Floortestwert [0 für Ende] = ";:input x!
    19. print " Floor = ";floor(x!)
    20. Endif
    21. casenot x!=0:goto "rep"
    22. Cls
    23. case flg&:print " Positiver x-Bereich"
    24. x!=Sqrt(Sqrt(y!))
    25. case flg&:print " Startwert x=";x!
    26. xu!=floor(x!)
    27. xo!=floor(xu!+1)
    28. case flg&:print " xu=";xu!," xo=";xo!
    29. 'xu < x < xo
    30. 'x*m=y ===> x=y/m , eingesetzt:
    31. 'xu < y/m < xo , invertiert:
    32. '1/xo < m/y < 1/xu
    33. 'y/xo < m < y/xu
    34. 'mu = floor(y/xo); mo = floor(y/xu + 1)
    35. mu& = floor(y!/xo!) : mo& = floor(y!/xu!)
    36. case flg&:print " mu=";mu&," mo=";mo&
    37. Whileloop mu&,mo&:m&=&Loop
    38. x! = y!/m&
    39. case flg&:print " Test für x = ";y!;"/";m&,"=",x!,"f =",fun(x!)
    40. if nearly(Fun(x!),y!,1):sound 1000,100
    41. font 2:print "\n LÖSUNG x = ";y!;"/";m&,"=",x!,"f =",fun(x!):font 0
    42. waitinput 100
    43. endif
    44. if %csrlin>20:waitinput:cls:endif
    45. endwhile
    46. case flg&:print "\n Negativbereich:"
    47. x!=-1*Sqrt(Sqrt(y!))
    48. case flg&:print " Startwert x=";x!
    49. xu!=floor(x!)
    50. xo!=floor(xu!+1)
    51. case flg&:print " xu=";xu!," xo=";xo!
    52. mu& = floor(y!/xo!-1) : mo& = floor(y!/xu!)
    53. case flg&:print " mu=";mu&," mo=";mo&
    54. Whileloop mu&,mo&:m&=&Loop
    55. x! = y!/m&
    56. case flg&:print " Test für x = ";y!;"/";m&,"=",x!,"f =",fun(x!)
    57. if nearly(Fun(x!),y!,1):sound 1000,100
    58. font 2:print "\n LÖSUNG x = ";y!;"/";m&,"=",x!,"f =",fun(x!):font 0
    59. waitinput 100
    60. endif
    61. if %csrlin>22:waitinput:cls:endif
    62. endwhile
    63. Font 2:print " ---\n Tests komplett."
    64. sound 200,330
    65. waitinput
    66. end
    Alles anzeigen
    P.S.: FGS-74 ist noch offen!

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