Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Python Josephus » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
Dr.Java

Ach das soll ein anderes Programm sein, wieder was gelernt. Ok, anders als Python ,wohl schon wegen den geschweiften Klammern und dem using statt import(?),aber ansonsten gibt es ,zumindest beim ersten Blick,einige Parallelen,beim näheren hinschauen bekommt man schon den Verdacht das es eine andere Sprache ist .

lg
eulerscheZahl

Nein, nicht C. C# (sprich: C Sharp).
Das ist Microsofts Reaktion auf einen Rechtsstreit mit Sun Microsystems (Java).
Zumindest Consolenanwendungen laufen aber auch unter Linux.

Von der Syntax her ähnlich zu Java. Python sieht doch ziemlich verschieden aus.
Dr.Java

Zitat:
Freut mich, dass du es verstanden hast.

Ja, hat ja lange genug gedauert, danke nochmal.
C also, die Sprachen sehen für mich noch alle recht ähnlich aus, ich denke mit der Zeit,werde ich dann auch die feinen Unterschiede feststellen können.

lg
eulerscheZahl

Freut mich, dass du es verstanden hast.
Und der Code ist C#, damit bin ich einfach schneller.
Dr.Java

Vielen lieben Dank für deine Bemühungen. Ist das ein Python Code?
Ich kann den Ablauf des Programms inzwischen vollkommen nachvollziehen .Und ich denke ich verstehe jetzt auch das mit dem Modulo,im nachhinein betrachtet hatte ich wohl ein Brett vorm Kopf .
Vielen Dank nochmal für deine Geduld und Mühen.

lg
eulerscheZahl

Ich kann nicht glauben, dass ich das gerade tue:

Code zum Bilder erzeugen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
using System;
using System.Linq;
using System.IO;
using System.Diagnostics;
using System.Text;
using System.IO.Compression;
using System.Collections.Generic;
using System.Drawing;

public class MainClass
{
	public static void Main (string[] args)
	{
		int n = 8;
		List<int> objects = Enumerable.Range (1, n).ToList ();
		int i = 0;
		int k = 3;
		int image = 0;
		while (objects.Count > 0) {
			i = (i + k - 1);
			Draw (objects, i, image++, n);
			if (i >= objects.Count) {
				i %= objects.Count;
				Draw (objects, i, image++, n);
			}
			objects.RemoveAt (i);
			Draw (objects, i, image++, n);
		}
	}

	public static void Draw(List<int> numbers, int index, int id, int max) {
		Font font = new Font ("Lucida Console", 16);
		Bitmap bmp = new Bitmap (200, 300);
		Graphics g = Graphics.FromImage (bmp);
		g.Clear (Color.White);
		for (int i = 0; i < numbers.Count; i++) {
			double x = 100 + 70 * Math.Cos (2 * Math.PI * numbers[i] / max);
			double y = 100 + 70 * Math.Sin (2 * Math.PI * numbers[i] / max);
			g.FillEllipse (i == index ? Brushes.Green : Brushes.Gray, new RectangleF ((float)x - 20, (float)y - 20, 40, 40));
			g.DrawString (numbers[i].ToString (), font, Brushes.Black, new RectangleF ((float)x - 10, (float)y - 10, 40, 40));
		}
		g.FillEllipse (Brushes.Green, new RectangleF (5 + index * 20, 220, 30, 30));
		g.DrawString (string.Join(" ", numbers), font, Brushes.Black, new RectangleF (10, 220, 180, 40));

		g.DrawString ("i = " + index, font, Brushes.Black, new RectangleF (10, 270, 180, 40));
		bmp.Save ("image" + id.ToString("00") + ".png");
		g.Dispose ();
		bmp.Dispose ();
				font.Dispose();
	}
}


Bild (animiert, musst du anklicken):
Oben siehst du den Kreis, unten die Liste, wie sie im Speicher steht. Wie du siehst, kommt man aus der Liste heraus und muss sich zurücksetzen.

eulerscheZahl hat dieses Bild (verkleinerte Version) angehängt:
image.gif

Dr.Java

Oh, ich sehs. Das passiert also wenn man das ganze ohne modulo rechnet. Entschuldige,wenn ich mich etwas blöd anstelle, aber was ist die mathematische Logik dahinter, ich meine das ist ja jetzt nur wie sich das ganze in Python verhält und auswirkt.

lg
eulerscheZahl

Du sollst ja auch print schreiben und nicht return.
Du wirst eine Fülle von Zahlen bekommen. Du sollst einfach nur sehen, dass sie außerhalb des Arraybereichs liegen.
Dr.Java

Einfach beim Programm das Modulo ,die yield und del Zeile streichen?

Also so ?
code:
1:
2:
3:
4:
5:
6:
7:
def josephus_iter(n, k):
    objects=list(range(1, n+1))
    i=0
    while len(objects)>0:
        i=(i+k-1) 
        return i  

Dann gibt er mir nur eine Zahl aus,2. Die seq Funktion funktioniert dann aber überhaupt nicht mehr .Falls du das ganze auch ohne return meintest, das funktioniert bei mir nicht,die Shell friert dann nur ein. Und mit yield und del gibt seq_josephus mir nur ne Fehlermeldung aus.

lg
eulerscheZahl

Lass' das modulo doch einfach weg und gib i aus. Dann siehst du, was ich meine (das yield und del solltest du dann auch rausnehmen).
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.