Autor Beitrag
Yaddle
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.12.11 16:35 
Hallo ich habe ein Programm geschrieben, welches alle Primzahlen bis zu einer bestimmten Zahl ausgibt. Dafür habe ich eine Klasse namens Field erstellt, die aus einer Integerzahl und einem boolschen Wert pro Variable besteht. In einem Array angeordnet kann ich dann alle nicht Primzahlen ausschließen. Das ganze läuft nach dem Prinzip des Siebes des Eratosthenes. Ich habe jetzt das Problem, dass die Ausgabe "abgeschnitten" wird wenn das Maximum 2000 nähert. Im Array sind die Stellen aber trotzdem als prim vermerkt kann mir jemand den Fehler nennen? Oo

Die Klasse:

ausblenden volle Höhe C#-Quelltext
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:
class Field
    {
        int number;
        bool prim;
        public Field(int number,bool prim)
        {
            this.number = number;
            this.prim = prim;
        }
        public Field Cross()
        {
            if (this.prim)
            {
                return new Field(this.number, false);
            }
            return this;
        }
        public override String ToString() 
        {
            return this.number.ToString() + ", " + this.prim.ToString();
        }
        public int Number 
        { 
            get{ return this.number; }
            set{ this.number = value; }
        }
        public bool Prim
        {
            get { return this.prim; }
            set { this.prim = value; }
        }
    }


Das Programm bzw. die Main-Funktion:

ausblenden volle Höhe C#-Quelltext
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:
    class Program
    {
        static void Main(string[] args)
        {
            const int limit = 2000;
            Field[] AllNumbers = new Field[limit - 1];
            for (int i = 0; i < limit - 1; i++) 
            {
                AllNumbers[i] = new Field(i + 2true);
            }
            for(int i = 0; i < limit -1; i++) 
            {
                int divisor;
                if (AllNumbers[i].Prim) 
                {
                    divisor = AllNumbers[i].Number;
                    for (int j = divisor; j < limit - 1; j++)
                    {
                        if (AllNumbers[j].Number % divisor == 0
                        {
                            AllNumbers[j] = AllNumbers[j].Cross();
                        }
                    }
                }
            }
            foreach(Field f in AllNumbers)
            {
                if (f.Prim) 
                {
                    Console.WriteLine(f.Number);
                }
            }
            Console.ReadLine();
        }
    }

Wäre toll, wenn einer von euch die Lösung für das Problem wissen würde..
Greetz und Frohes Fest

Moderiert von user profile iconKha: C#-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 23.12.11 17:17 
Das ist abhängig von den Systemeinstellungen des Nutzers (Rechtsklick auf die Titelleiste deines Konsolenfensters --> Eigenschaften). Man kann einstellen wie viele Zeichen in der Höhe und Breite gespeichert werden sollen:

ConsoleProperties

Eine Konsolenanwendung ist an der Stelle schlicht nicht sinnvoll, wenn alle Ergebnisse angezeigt werden sollen. Wenn das gewünscht ist, solltest du z.B. eine Windows Forms Anwendung erstellen und die Zahlen in einer TextBox ausgeben.
Einloggen, um Attachments anzusehen!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 23.12.11 18:01 
Alternativ kannst du die Konsolenanwendung direkt starten und die Ausgabe in eine Datei lenken:
ausblenden Quelltext
1:
prims.exe >primzahlen.txt					
Yaddle Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 23.12.11 18:37 
Vielen Dank :)