Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

1

Tuesday, December 26th 2006, 6:16pm

Scheme, Übung 9

Hi,
kann mir jemand sagen, was im Blatt 9 geändert wurde. Ich finde keinen Unterschied.
Funktioniert bei jemandem die vorgegebene Hilfsprozedur (sudoku-print sudoku)?

Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

2

Tuesday, December 26th 2006, 6:40pm

ich glaube, es steht jetzt statt "dim=2" "ord=2" ... was auch mehr sinn macht
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

3

Tuesday, December 26th 2006, 7:09pm

stimmt, danke.

motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

4

Tuesday, December 26th 2006, 9:26pm

Aufgabe 4

wie kann ich eine Liste, die mit cons und reverse bzw. mit append (also je nach Variante) konstruiert ist auf mehtere Zeilen aufteilen.
mit newline bekomme ich nur zusätzliche Zeilen vor und nach der Liste, aber nicht in ihr.
z.B. ich habe
(((0 . 0) 4 3 2 1)
((0 . 1) 4 3 2 1)
((0 . 2) 4 3 2 1)
((0 . 3) 4 3 2 1)
((1 . 0) 4 3 2 1)
((1 . 1) 4 3 2 1)
((1 . 2) 4 3 2 1)
((1 . 3) 4 3 2 1)
((2 . 0) 4 3 2 1)
((2 . 1) 4 3 2 1)
((2 . 2) 4 3 2 1)
((2 . 3) 4 3 2 1)
((3 . 0) 4 3 2 1)
((3 . 1) 4 3 2 1)
((3 . 2) 4 3 2 1)
((3 . 3) 4 3 2 1))

möchte aber
(((0 . 0) 4 3 2 1) ((0 . 1) 4 3 2 1) ((0 . 2) 4 3 2 1) ((0 . 3) 4 3 2 1)
((1 . 0) 4 3 2 1) ((1 . 1) 4 3 2 1) ((1 . 2) 4 3 2 1) ((1 . 3) 4 3 2 1)
((2 . 0) 4 3 2 1) ((2 . 1) 4 3 2 1) ((2 . 2) 4 3 2 1) ((2 . 3) 4 3 2 1)
((3 . 0) 4 3 2 1) ((3 . 1) 4 3 2 1) ((3 . 2) 4 3 2 1) ((3 . 3) 4 3 2 1))
bekommen.

GentleGiant

Hamster Inside(R)

  • "GentleGiant" is male

Posts: 283

Date of registration: Oct 3rd 2006

Location: Bad Oeynhausen

Occupation: Software-Entwickler bei Diamant Software

5

Tuesday, December 26th 2006, 9:41pm

Das dort in der PDF ist nur eine schönere Darstellung. Wirkt alles sehr verwirrend. Du kannst die Liste so lassen, wie sie ausgegeben wird, im Endeffekt machen die beiden Methoden sudoku-print und sudoku-input am Ende die ganze Arbeit.
Es tut also nichts zur Sache, sondern dient nur etwas der Form im PDF und auch der Übersichtlichkeit.


Andere Frage:
Ist schon jemand bei Aufgabe 11? Ich bin dort jetzt so weit gekommen, dass alle möglichen Sudokulösungen ausgegeben werden.
Frage ist jetzt nur, wie man jetzt am besten zählt. Hat da jemand eine Idee, oder einen Gedankenansatz?
Rekursiv geht es bei mir schief. Naja, für das Beispiel klappt es, dafür für alles andere nicht. Iterativ habe ich schon einen Ansatz, der sieht aber mehr als unschön aus, müsste aber, wenn ich das programmiere (heute, nach Forest Gump) auch funktionieren. Antwort erübrigt sich. Bin gerade rekursiv fertig geworden.

This post has been edited 2 times, last edit by "GentleGiant" (Dec 27th 2006, 12:50am)


motja

Trainee

  • "motja" started this thread

Posts: 53

Date of registration: Nov 8th 2004

6

Wednesday, December 27th 2006, 1:11am

Aufgabe 9

Wenn ich das Beispiel aus der Aufgabe 9 in die von mir geschriebene solve-Prozedur eingebe, wird's gelöst, die vorgegebene (sudoku-input)-Prozedur gibt mir die implementierte Fehlermeldung "Abbruch" zurück, und zwar für jedes Beispiel.
Weiß jemand woran es liegen kann?

Edit: es funktioniert schon.

This post has been edited 1 times, last edit by "motja" (Dec 27th 2006, 1:35am)


GentleGiant

Hamster Inside(R)

  • "GentleGiant" is male

Posts: 283

Date of registration: Oct 3rd 2006

Location: Bad Oeynhausen

Occupation: Software-Entwickler bei Diamant Software

7

Wednesday, December 27th 2006, 4:15pm

sudoku-print ist für die endgültive Ausgabe zuständig. sudoku-input ist nur ein ziemlich geiles Zusatzprogramm, welches die unten angegebenen Beispiele annahmen kann und darauf automatisch einen Ausdruck der Form set-mark x y z sudoku macht. Die Eingabe sieht dann so aus:
(solve (sudoku-input)) , dann kriegst du im Scheme-Fenster unten eine Eingabezeile, wo du deine Sudokus eingeben kannst. Vorher nicht vergessen Ord und Dim festzulegen.
Aber ansonsten benutzt du, um im Endeffekt dein Sudoku auszugeben sudoku-print.
Einfach mal etwas herum experimentieren.

This post has been edited 1 times, last edit by "GentleGiant" (Dec 27th 2006, 4:15pm)


Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

8

Wednesday, December 27th 2006, 11:20pm

Ich möchte generell ab Aufgabe 9 empfehlen, die Hilfsprozeduren sudoku-input und sudoku-print ganz nach oben an den Anfang der Datei zu schieben .... das hatte mir irgendwie gefehlt -.-
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

Daniel

Praktikant

  • "Daniel" is male

Posts: 5

Date of registration: Oct 14th 2006

Location: Hannover

9

Thursday, January 4th 2007, 3:10pm

Könnte mir jmd mal bitte einen Tip zur Aufgabe 7 -> "in-quad?" geben ?

Mit "in-quad?" soll ja überprüft werden ob das Feld (die Koordianten) die ich gerade überprüfe in dem Unterquadrat liegen wo ich eine Zahl eintragen möchte.

Ich steh da irgendwie total aufm Schlauch. =(
<<< Hier könnte Ihre Werbung stehen! >>>

s-quadrat

Trainee

  • "s-quadrat" is male

Posts: 49

Date of registration: Oct 6th 2006

Location: Hameln

10

Thursday, January 4th 2007, 10:36pm

in welchem quadrat eine zahl steht, erfährt man doch, indem man jede koordinate einfach durch ord teilt und abrundet;
das also sowohl mit row als auch mit r, und wenns das gleiche ist, sind sie schonmal im gleichen (horizontalen) drittel des feldes ;)
...dann das gleiche auch noch für die spalten prüfen :)

Kojack

Trainee

Posts: 97

Date of registration: Oct 10th 2006

11

Friday, January 5th 2007, 2:43pm

Moin, ich hab nochmal ne andere Frage zu aufgabe 7.
Um aus der Liste "sudoku" überhaupt erstmal die richtige Unterliste, also quasi das Feld herauszusuchen muss man sich ja auch noch eine prozedur schreiben oder gibts da ne einfachere Lösung und ich sehe es nicht?

Noch eine Frage, wenn man mit remove eine Zahl aus einer liste entfernt, bekommt man ja wieder diese kleine liste zurück, diese muss dann aber an der gleichen stelle wieder eingefügt werden wo man sie her geholt hat, klingt das nur so aufwändig oder ist das auch so?
Niveau sieht von unten oft aus wie Arroganz

This post has been edited 1 times, last edit by "Kojack" (Jan 5th 2007, 3:26pm)


s-quadrat

Trainee

  • "s-quadrat" is male

Posts: 49

Date of registration: Oct 6th 2006

Location: Hameln

12

Friday, January 5th 2007, 8:15pm

hm, stimmt, habe ich auch noch nicht so genau drüber nachgedacht (hatte mir das nur schon so schön als ne art zweidimensionales array vorgestellt, wie man es halt aus schöneren sprachen so kennt :D )

aber in scheme... ^^ :rolleyes:

naja, die felder stehen ja alle direkt hintereinander, also keine geschachtelte liste; müsste man wohl noch so ne art skipper schreiben, der einem das (+ (* ord row) col)-te element aus der gesamtliste (sudoku) rausholt...

wenn man später die neue liste wieder reinschreiben will, müsste es ja eigentlich so ähnlich sein...
obwohl.. mhh... also aus den koordinaten und der neuen liste erstmal nen neuen entry backen und den dann an die stelle im sudoku setzen...?!? och nö... ^^ :( :rolleyes:

(hat noch keiner ne bessere lösung..?! :P ;) )

This post has been edited 1 times, last edit by "s-quadrat" (Jan 5th 2007, 8:19pm)


Kojack

Trainee

Posts: 97

Date of registration: Oct 10th 2006

13

Saturday, January 6th 2007, 1:31am

Doch, mir ist da eingefallen, dass man sich den ganzen Aufwand schenken kann.

Die Funktion die ich mir erst gebaut hatte um dieses eine bestimmte Element der Liste "Sudoku" zu finden habe ich einfach in die set-mark funktion eingebaut.
Bei mir funktioniert das folgendermaßen: Die koordinaten der einträge sind ja fortlaufend: 0.0 0.1 0.2 0.3 usw... du überprüfst mit equal? ob das erste Element des ersten Eintrags der Liste "Sudoku" das gleiche ist wie (cons row col), wenn das nicht der Fall ist schneidest du das erste ELement ab und legst es irgendwo ab und rufst das Programm mit dem Rest der "Sudoku" Liste wieder auf, ist auch hier das erste Element nicht das gesuchte musst du das was du beim ersten mal ebgeschnitten und gespeichert hast mit dem was du nun abschneidest zusammenstecken und immer so weiter bis du den gesuchten eintrag gefunden hast. Wenn du ihn hast, setzt du diesen Eintrag mit make-entry neu und baust mit append den ersten teil mit dem neuen entry und dem Rest wieder zusammen, fertig...
Gleichermaßen wird das bei dem removen auch funktionieren... über den quadratkrempel hab ich mir noch keinen kopf gemacht.
Niveau sieht von unten oft aus wie Arroganz

s-quadrat

Trainee

  • "s-quadrat" is male

Posts: 49

Date of registration: Oct 6th 2006

Location: Hameln

14

Saturday, January 6th 2007, 1:52am

aber die liste is doch sogar schon so schön sortiert... :( *heul*
(scheme is manchmal schon pervers... ^^ :D)

naja, es gibt doch so ne funktion, die einem das x-te element einer liste gibt... nur sollen wir das ja alles selber machen (und dabei gleichzeitig noch durch den aktualisierten entry ersetzen - also doch wieder mit make-entry jedes mal nen neuen machen... :P naja... :rolleyes: )

Kojack

Trainee

Posts: 97

Date of registration: Oct 10th 2006

15

Saturday, January 6th 2007, 2:13am

Ja wenn du nur einen Eintrag bräuchtest um mit dem irgendwas anzustellen wär das ganze ja einfach, das Problem steckt darin dass du den ja nur ändern willst und die Liste hinterher genauso aussehen muss wie vorher...
Niveau sieht von unten oft aus wie Arroganz

Kojack

Trainee

Posts: 97

Date of registration: Oct 10th 2006

16

Saturday, January 6th 2007, 3:08pm

Ich editiere jetzt mal nicht, weils im Prinzip nix mit dem vorherigen Post zu tun hat.

Nochmal ne Frage:

Wenn man möchste dass in einer If-Schleife zwei Dinge ausgeführt werden sollen, die aber nix miteinander zu tun haben, wie macht man das und geht das überhaupt?

Beispiel:

... (if (list? xy)
(Ausdruck 1)
(Ausdruck 2)
(else ...)

/geht das mit ner and verknüpfung, wenn ja wie?

(and (Ausdruck 1) (Ausdruck 2))?

Also es geht darum irgendwie das removen einzubauen und das soll ja auch dann passieren, wenn er den richtigen Eintrag gefunden hat, deshalb wollte ich das auch an der Stelle einbauen, wobei es im Prinzip ja nicht viel damit zu tun hat, aber sonst müßte ich ja an einer einer anderen Stelle nochmal prüfen ob der neue Eintrag tatsächlich gesetzt wird oder nicht, das fände ich auch blöd.
Niveau sieht von unten oft aus wie Arroganz

Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

17

Saturday, January 6th 2007, 3:22pm

Zu dem letzten:

(if (conditions)
(begin
(ausdruck1)
(ausdruck2)
;...
)
(else-ausdruck)
)

verlass dich doch drauf, dass der gesetzt wird ....
und abgesehen davon:
du gehst das eigentliche Sudoku ab, nimmst dir jeden einzelnen eintrag vor, überprüfst ein paar dinge, und hängst den (eventuell veränderten) eintrag an ein Ergebnis-Sudoku dran ....
(nochmal-durchgehen zeile spalte (cdr Sudoku) z (append ergebnis (make-entry (get-row (car Sudoku)) (get-col (car Sudoku)) (remove z (get-list (car Sudoku))))))

@s-quadrat:
Vergiss das mit dem Skipper mal wieder, weil du ja auch noch die Zeilen und Spalten und den Quadranten abklappern musst. Am besten ist tatsächlich, das stumpf zu durchlaufen.

Mata ne
Warui
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

This post has been edited 2 times, last edit by "Warui" (Jan 6th 2007, 3:58pm)


Kojack

Trainee

Posts: 97

Date of registration: Oct 10th 2006

18

Saturday, January 6th 2007, 3:41pm

Ich kann mich ja nicht darauf verlassen, dass man die richtige Zahl dort einträgt, denn wenn es nicht die richtige ist und er löscht trotzdem die zahl aus den Kandidatenlisten der anderen Felder kommt ja keine korrekte Lösung raus.
Also wie funzt das mit dem begin?
Ich finde das in deinem Beitrag etwas unübersichtlich.
(begin (Ausdruck1) (Ausdruck2)) und danach das else richtig?
Niveau sieht von unten oft aus wie Arroganz

Warui

Turner, Serveradmin & Workaholic

  • "Warui" is male

Posts: 717

Date of registration: Apr 25th 2006

Location: Südstadt

Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))

19

Saturday, January 6th 2007, 3:58pm

was genau meinst du?
Du baust dir ein cond ...
wenn reihe und spalte mit der gefragten Übereinstimmen, dann (make-entry row col z),
wenn entweder reihe, spalte oder quadrant übereinstimmen, dann das von oben
wenn nicht, verschieb den eintrag halt einfach so und mach weiter mit dem nächsten

Eimal mit indent :)

Source code

1
2
3
4
5
6
7
8
(if (conditions)
 (begin
  (ausdruck1)
  (ausdruck2)
  ;...
 )
 (else-ausdruck)
)

und ja, (begin) schließt einen eigenständigen Codeblock ein .... und dann kommt das else
Erwachsenwerden? Ich mach ja viel Scheiß mit, aber nicht jeden!

Kojack

Trainee

Posts: 97

Date of registration: Oct 10th 2006

20

Saturday, January 6th 2007, 4:01pm

Auf die Idee mit dem Cond bin ich garnicht gekommen, dazu müßte ich jetzt aber meine komplette prozedur umbauen, da hab ich auch keinen bock drauf. mal gucken ob das mit dem if- auch hin haut.
Niveau sieht von unten oft aus wie Arroganz