Dienstag, 10. Oktober 2017

 

4. Aufgabe 4BHIF - C# Threads

Abgabename: 2017_4bhif_aufgabe4_name_vorname.zip
Abgabetermin - 14.11.2017 - Abgabe auf edvossh

Im folgenden Code werden Primzahlen berechnet. Ihre Aufgabe ist es aus diesem Code eine Multithreaded Version zu entwickeln. Die Anzahl der Threads und der Höchstwert der Primzahlen soll über Befehlszeilenargumente einstellbar sein. Testen Sie das Programm mit verschiedenen Höchstwerten und Threadanzahlen. (Zumindestens einmal mit einer Anzahl die den Prozessoren des Systems entsprechen) Erzeugen Sie mit den Ergebnissen eine Tabelle die die Zeiten gegen die der Single-Thread-Version vergleicht. (manuell z.B. in Excel oder auch im Programm)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Diagnostics;
 
namespace Primzahlen
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            int maxPrim = 0;
            int number = 0;
            int tests = 0;
            watch.Start();
            Prim(1600000, out maxPrim, out number, out tests);
            watch.Stop();
            Console.WriteLine("Es wurden {0} Primzahlen gefunden", number);
            Console.WriteLine("Die höchste gefundene Primzahl ist {0}", maxPrim);
            Console.WriteLine("Die Laufzeit betrug {0:F0} Millisekungen",
                              watch.ElapsedMilliseconds);
            Console.WriteLine("Es wurden {0} Vergleiche durchgeführt", tests);
        }
 
        private static void Prim(int max, out int maxPrim, out int number, out int tests)
        {
            List<int> prims = new List<int>();
            int i = 5;
            tests = 0;
            prims.Add(2);
            prims.Add(3);
            while (i < max)
            {
                int maxTeiler = (int)Math.Sqrt(i) + 1;
                int j = 0;
                while (true)
                {
                    int n = prims[j];
                    int rest = (i % n);
                    ++tests;
                    if (rest == 0)
                        break; //keine Primzahl
                    if(n >= maxTeiler)
                    {
                        prims.Add(i);
                        break;
                    }
                    ++j;
                }
                i += 2;
            }
            number = prims.Count;
            maxPrim = prims[number - 1];
        }
    }
}

Beispieltabelle für Ausgabe:

max Primzahl    nr. Primzahlen     ein Thread      zwei Threads      vier Threads
100000          9592               44ms            60ms              80ms
200000          17984              95ms            98ms              104ms
400000          33860              223ms           227ms             230ms
 
...
 
51200000        3068712            106000ms        61300ms           32940ms

Labels: , ,


Dienstag, 3. Oktober 2017

 

3. Aufgabe 4BHIF

Abgabename: 2017_4bhif_aufgabe3_name_vorname.zip
Abgabetermin - 24.10.2017 - Abgabe auf edvossh

Erstellen Sie für den RPN-Rechner der letzten Aufgabe ein GUI!

Erweitern Sie die Funktionalität so, dass die Anzeige (oberstes Stack-Element C) und alternativ der gesamte Stack (CLS) gelöscht werden kann. Weiters soll ein Drop (oberstes Element entfernen), ein Swap (die beiden obersten Elemente vertauschen), ein +/- (Vorzeichenwechsel), ein 1/X, die Quadratwurzel (Sqrt) und das Quadrat (X^2) implementiert werden.


Der Rechner sollte etwa so funktionieren, wie dieser Online-Rechner.

Zusätzliche Features sind möglich und erwünscht.

Labels: , , ,


This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]