Übungsaufgabe für alle :: Nr. 7 - Arrays und Zufall
Übersicht

![]() |
wunderkindBetreff: Übungsaufgabe für alle :: Nr. 7 - Arrays und Zufall |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach langer Pause geht's weiter. In der letzten Aufgabe ging es um das Parsen eines Strings. Heute gibt es eine kleine Aufgabe rund um das Thema Arrays und Zufall.
Aufgabe Erstelle ein BB-Programm, welches ein 20 x 16 (Breite x Höhe) Feld erzeugt und mit Ziffern zwischen 0 und 9 füllt. Dabei sind folgende Vorgaben zu beachten:
So könnte das Ergebnis dann zum Beispiel so aussehen (Fehler nicht ausgeschlossen): Code: [AUSKLAPPEN] 5 6 6 6 6 7 7 7 6 6 6 6 5 6 7 7 7 7 8 7 7 7 7 6 5 5 6 6 6 6 7 8 8 8 7 6 5 5 6 6 6 7 8 9 9 8 7 7 6 6 6 7 7 8 8 8 9 8 8 7 6 7 7 7 8 8 9 9 8 8 8 7 6 7 7 8 8 9 9 9 8 7 8 7 6 6 7 8 9 9 8 8 8 7 7 7 5 6 7 8 8 8 7 8 7 7 6 7 5 6 7 7 7 7 7 7 7 6 6 6 5 6 6 7 7 7 7 6 6 6 5 6 5 6 7 6 6 6 6 6 5 5 5 6 6 6 6 6 6 6 5 5 5 4 5 5 Hier noch die schwierigere Variante der Aufgabe: Als wenn der Teil oben noch nicht genug wäre, kommt's jetzt noch dicker! Im schwierigeren Teil der Aufgabe soll nach dem ersten Durchlauf immer vier Felder addiert werden, daraus der Mittelwert gebildet werden (geteil durch 4) und das Ergebnis in ein neues Array eingetragen werden. Dabei muss nicht mehr darauf geachtet werden, dass der Unterschied zu benachbarten Feldern nicht größer als 1 ist. Ich hoffe, ich habe nichts vergessen. Zum Lösen der Aufgabe habt ihr eine Woche Zeit (bis zum 07.08.). Eine Bitte Wie immer die Bitte: Posted eure vollständigen Lösungen bitte nicht vor Sonntag 07.08. damit alle eine Chance haben, selbstständig ihre Lösung zu finden. Fragen und Teillösungen sind natürlich wieder willkommen, damit jeder hier etwas lernen kann. Fertige Programme könnt ihr selbstverständlich als .exe jederzeit zum Download bereitstellen. Habt ihr keine Webspace, dann schickt sie mir: wunderkind @ seelenradio.de Die vergangenen Übungsaufgaben findet ihr hier: Aufgabe Nr. 1 : Logische Operatoren Aufgabe Nr. 2 : Menüstruktur unter Verwendung von Types Aufgabe Nr. 3 : Umwandlung von Zahlen zwischen Binär-, Dezimal- und Hexadezimalsystem Aufgabe Nr. 4 : Rekursion Aufgabe Nr. 5 : Hamming-Distanz Aufgabe Nr. 6 : Strings parsen (interpretieren) Viel Erfolg! |
||
- Zuletzt bearbeitet von wunderkind am Do, Aug 11, 2005 23:45, insgesamt einmal bearbeitet
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab mich mal rangewagt...
wenn ich wirklich auch größere werte zulasse, sprich +rand(-1,1) kommt folgendes raus : ![]() wenn ich nur +rand(-1,0) zulasse sieht es mehr nach deinem beispiel aus, dann kommt sowas dabei raus : ![]() weiß nich obs erlaubt war, aber ich hab types auch benutzen müssen. aber ein array auch ... also ... äh beides. types waren ja nich verboten oder? zur zweiten aufgabe hab ich noch ne frage... angenommen ich hab ein array 1 2 3 2 2 2 2 2 3 2 1 1 3 2 2 2 und ich soll jetzt immer vier stück zusammen rechnen ... dann nehm ich ja als erstes 1 2 2 2 also oben die linke ecke. mach ich dann weiter mit 2 3 2 2 also den zähler um eins verrücken, oder mache ich weiter mit 3 2 2 2 also zähler um 2 verrücken. anders gesagt, fliesen einmal schon berechnete werte nochmal in eine andere berechnung ein oder nicht? wird aus einem 20x16 array dann ein 10x8 array oder eher 19x15?! edit : wenns funktioniert funktionierts. manchmal hängt er sich aber noch auf, kann mir auch denken woran es liegt... dafür kann man damit lustige bilder machen, zb sowas... ![]() |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sehr schön. Du bist der Erste, wie du siehst ![]() Nein, Types sind nicht verboten. Da sich die Übung um Arrays dreht, sollte eines im Code vorkommen, in dem das Feld abgelegt ist. Beim ersten Beispiel wundert es mich, dass die Werte scheinbar alle mindest 7 sind und darüber. Kleiner 7 kommt nicht vor. Vielleicht sollte die Startkoordinate des Überblicks wegen noch farblich hervorgehoben werden. Das Bild ist schick. |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
juhu, erster .-)
beim ersten wird eben +rand(-1,1) gemacht, deswegen hält sich das wohl immer die waage und bleibt mehr oder weniger gleich ... vermutlich ist meine herangehensweise eh nich so hundertpro das gelbe vom ei, weil er sich manchmal aufhängt... liegt wohl daran das manchmal 2 felder nebeneinander sind die er nicht verbinden kann... denke evtl bei gelegenheit nochmal drüber nach ... und was mein problem mit der zweiten frage angeht, hast du dazu nochwas zu sagen!? siehe erstes post ... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei mir sähe eine Zufallsverteilung auf Rand-Grundlage etwa so aus:
Code: [AUSKLAPPEN] Const WERTMAX = 9
Const WERTMIN = 0 Global Wert% = 9 Global I% Global Zufall% SeedRnd(MilliSecs()) For I = 0 To 15 Zufall = Rand(-1,1) If (Wert + Zufall <= WERTMAX) And (Wert + Zufall >= WERTMIN) Then Wert = Wert + Zufall Print(Wert) Next WaitKey() End Die Ergebnisse reichen dabei quer durchs Spektrum. Allerdings ist mir nach mehreren Durchgängen aufgefallen, dass tatsächlich öfters eine Verteilung ähnlich deinem Screenshot ausgegeben wird. |
||
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Gerade bemerke ich, dass wir die letzten Übungsaufgaben immer in der Beginners-Corner hatten. Deshalb wird auch diese dorthin verschoben. *leise davonschleich* ![]() |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
und meine frage zur zweiten aufgabe?
verstehe auch nich warum das so schwierig sein soll, schwieriger als der erste teil bestimmt nicht.... ![]() |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Entschuldige, deine Frage zum zweiten Teil der Aufgabe habe ich übersehen. Mehrfach ![]() Die Schrittweite beträgt zwei: Es wird immer ein solcher Viererblock genommen und daraus die Quersumme gebildet. Der Block hat also eine Kantenlänge von 2. Das Ergebnis des Ganzen sollte ein Feld sein, welches genau halb so groß ist, wie das erste Ausgangsfeld, also 5x4. Wir gehen einfach mal davon aus, dass die Höhe und Breite so angegeben werden, dass sie ein Vielfaches von 2 sind ![]() |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
aber das ist doch total einfach... zumindest sehr sehr viel einfacher als der erste teil ... außer ich denke beim ersten teil viel zu kompliziert....werds heute abend machen... | ||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Ist es auch verboten, dass sich Felder, die sich nur in einem Punkt berühren etwa so: Code: [AUSKLAPPEN] ,----, | | '----|----, | | '----' einen Unteschied von mehr als 1 haben? Ich hab dashier herausbekommen: Zitat: 345654543333444333321
345654554444554444321 334565445555654554321 234556555666555654321 123455666676666543210 123456677777765432100 123345567888765432100 123445667898765432110 123455677898765432101 233456667888765432100 223455678777765432110 234455677666766543210 233456766555665543210 223456655444555443211 123455545454444433210 123454444444333432210 123443433333322332110 An einigen Stellen haben halt noch Felder, die sich so schräg gegenüber stehen einen größeren Unterschied als 1 ![]() |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Kabelbinder
Jepp, das ist verboten. Alle umgebenden Felder dürfen im Wert nicht mehr als 1 Differenz haben. |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
angenommen ich hab
9 8 8 9 ... da kommt ja beim zusammenrechnen ne 8.5 raus, soll das dann auf oder ab oder mathematisch, also aufgerundet werden? oder ists egal? edit : apropos, hab gerade was ausprobiert... was ergibt denn Code: [AUSKLAPPEN] print int(8.5)
bei euch? müßte nicht 9 dabei rauskommen, wenn ich mich richtig an den matheunterricht erinnere...? bei mir kommt immer 8 raus, erst bei 8.6 kommt ne 9 raus... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hätte jetzt auch getippt, dass bei x.5 aufgerundet wird.
Zu deiner Frage: Wir einigen uns einfach auf abrunden. |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
hi, bin bis montag nich da, deswegen hier die exe...
funktioniert wie gesagt nicht hundertpro, aber ... 99.27% solltens schon sein ... http://www.blitz-pasting.net/i...amp;id=105 |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Alfadur,
scheinbar bist du der einzige, den es zum Lösen der Aufgabe reizte. Vielleicht war die Aufgabe auch ein wenig zu schwer ![]() Ich würde mich freuen, wenn du noch deinen Sourcecode zur Verfügung stellen könntest. |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
das isser. funktioniert wie gesagt nicht 100%, vorallem wenn man die feldgröße erhöht... vielleicht ist mein system auch viel zu kompliziert gedacht und es geht einfacher, stell doch mal dein system vor, wie hast du es denn gemacht?
wenn durchblickungsschwierigkeiten gibt, dann kann ich ja mal noch ein paar kommentare einstreuen... aber vom prinzip her werden von der startkoordinate die felder drumherum betrachtet, ein wert ausgewürfelt und dann alle felder drumherum überprüft ob der wert in der toleranz -1,1 ist, wenn die differenz größer ist wird neu gerandomized...wenn ein wert gefunden wurde der das erfüllt, dann wird ein neuer type eintrag erstellt und das geht immer so weiter, bis die ganze type liste abgearbeitet wurde... BlitzBasic: [AUSKLAPPEN]
|
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
na, hat keiner ne meinung dazu?
@wunderkind, ich würde gerne deinen ansatz sehen ... |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Alfadur
Das Wunderkind hat keinen Ansatz umgesetz. Es hatte sich darauf verlassen, dass genügend andere an der Aufgabe teilnehmen ![]() |
||
![]() |
Alfadur |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahja ok ![]() ![]() |
||
A Cray is the only computer that runs an endless loop in less than four hours. |
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
so habe auch mal was gemacht, damit Wunderkind nicht frustiert aufhört solche Aufgaben zu stellen ![]() Code: [AUSKLAPPEN] Graphics 800,600,0,2
Dim feld(20,16) Global weight# = 0.0 ;Minimaler Wert ist -0.49, nach oben offen, aber mehr als 5.0 wenig sinnvoll) sx = Input("Start X: ") sy = Input("Start Y: ") feld(sx,sy) = 9 For number = 9 To 2 Step -1 .jump For xx=0 To 19 For yy=0 To 15 If feld(xx,yy) = number rep = False If yy < 15 If feld(xx,yy+1) = 0 Then feld(xx,yy+1) = number - WRand(weight#) : rep = True End If If yy > 0 If feld(xx,yy-1) = 0 Then feld(xx,yy-1) = number - WRand(weight#) : rep = True End If If xx < 19 If feld(xx+1,yy) = 0 Then feld(xx+1,yy) = number - WRand(weight#) : rep = True End If If xx > 0 If feld(xx-1,yy) = 0 Then feld(xx-1,yy) = number - WRand(weight#) : rep = True End If If rep Then Goto jump End If Next Next Next For xx=0 To 19 For yy=0 To 15 If feld(xx,yy) = 0 Then feld(xx,yy) = 1 Next Next For xx=0 To 19 For yy=0 To 15 Color 0,25*feld(xx,yy),0 Rect 45+xx*30,45+yy*20,30,20 Color 255,255,255 Text 50+xx*30,50+yy*20,feld(xx,yy) Next Next WaitKey() End Function WRand(w#) Return Sgn(Int(Rnd(0,1+w#))) End Function Ihr könnt mir dem Wert weight in Zeile 3 experimentieren, viel Spaß! ^^ MfG Ctuchik |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group