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
Dienstag, 3. Oktober 2017
3. Aufgabe 4BHIF
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: .Net, 4BHIF, Aufgabe, C#
Sonntag, 24. September 2017
2. Aufgabe 4BHIF
Abgabetermin - 10.10.2017 - Abgabe auf edvossh
Schreiben Sie einen Stack-basierten Rechner für einen Ausdruck in umgekehrter polnischer Notation (RPN), der auch die Änderungen im Stack zeigt.
Nehmen Sie zunächst an, dass nur korrekte, durch Leerzeichen (Tabs oder Zeilenumbrüche, also White Space) getrennte, Strings von Token eines RPN-Ausdrucks übergeben werden.
Testen Sie mit dem folgenden RPN-Ausdruck:
3 4 2 * 1 5 - 2 3 ^ ^ / +Obiger Ausdruck in Infix-Notation sieht folgendermaßen aus:
3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3oder, weil
^ vor den anderen Operationen ausgewertet werden muss:
3 + 4 * 2 / ( ( 1 - 5 ) ^ 2 ^ 3 )Die Ausgabe soll so aussehen:
3 4 2 * 1 5 - 2 3 ^ ^ / + Input Operation Stack after 3 Push [3.0] 4 Push [4.0, 3.0] 2 Push [2.0, 4.0, 3.0] * Operate [8.0, 3.0] 1 Push [1.0, 8.0, 3.0] 5 Push [5.0, 1.0, 8.0, 3.0] - Operate [-4.0, 8.0, 3.0] 2 Push [2.0, -4.0, 8.0, 3.0] 3 Push [3.0, 2.0, -4.0, 8.0, 3.0] ^ Operate [8.0, -4.0, 8.0, 3.0] ^ Operate [65536.0, 8.0, 3.0] / Operate [1.220703125E-4, 3.0] + Operate [3.0001220703125] Final answer: 3.0001220703125Hinweise:
- ^
- bedeutet Exponent im obigen Ausdruck.
- ⁄
- bedeutet Division.
Testen Sie den Rechner auch mit anderen Ausdrücken!
Entwurf:
Entwerfen Sie das Programm so, dass die Auswertung auch ohne die textuelle Ausgabe des Stacks erfolgt kann.
Weiters sollen auch
double-Zahlen (zB -314.15927E-2) verwendet werden können.
Was passiert bei ungültigen Ausdrücken?
Erweiterung:
Wie müssten die Klassen geändert/erweitert werden, sodass man den Rechner mit so einem GUI verwenden kann?
Der Rechner sollte etwa so funktionieren, wie dieser Online-Rechner.
Bei dieser Version brauchen Sie kein GUI entwickeln, Sie sollen nur die Klassen so gestalten, dass es dann leicht ist, ein GUI dazu zu programmieren.
Labels: 4BHIF, Aufgabe, C#, POS1-4
Dienstag, 12. September 2017
Automatische Header in C# (Visual Studio)
Labels: C#, coding conventions, programmierrichtlinien, Visual Studio
1. Aufgabe 4BHIF
Abgabetermin - 26.9.2017 - Abgabe auf edvossh
Verwenden Sie eine Projektmappe und teilen Sie die Aufgaben in Projekte oder machen Sie ein einziges Projekt, bei dem man aber irgendwie auswählen kann, welche Teilaufgabe gestartet wird.
Sie haben nun schon zwei Jahre Java und ein Jahr Python programmiert. Nun geht es darum das bereits erworbene Können möglichst schnell auf die Sprache C# zu übertragen. Dazu sind kurze einfache Aufgabenstellungen gut geeignet. Es folgt nun eine Liste von Aufgabenstellungen für Konsolenprogramme. Sie dürfen Ihre Progrämmchen auch mit einer GUI versehen, gefordert ist das jedoch nicht.
- Hello World
Richten Sie Ihr Visual Studio so ein, dass alle Ihre Dateien automatisch einen Header mit Ihrem Namen, Klasse usw. enthalten.
Erstellen Sie dann ein "Hello World"-Programm. Dieses Programm soll "Hello World!" ausgeben, wenn keine Kommandozeilenparameter angegeben wurden, anderenfalls sollen die Parameter als Namen interpretiert werden, die dann gegrüßt werden. Dabei sollen immer zwei Namen paarweise ausgegeben werden (siehe Beispiel).
Aufrufhello.exe Toni Barbara Klaus
AusgabeHello Toni und Barbara! Hello Klaus!
- ISBN/EAN
Schreiben Sie eine Methode, welche die Prüfziffern von ISBN (Internationale Standardbuchnummer) bzw. EAN (European Article Number) prüfen kann. Dabei wird die Prüfziffer (als String) eingegeben, von welcher die Prüfziffer als Rückgabewert ausgegeben wird.int GetCheckDigit(string isbnWithoutCheckDigit);
Daraus leitet sich eine zweite Methode ab, welche einen String inklusive Prüfziffer prüft:bool CheckISBN(string isbn);
Diese Methode entfernt alle Trennzeichen (Leerzeichen, Bindestriche).
Algorithmus:s = z1 + z2 * 2 + z3 * 3 + ... + z9 * 9p = s mod 11- Falls p gleich 10, dann ist die Prüfziffer "X" sonst die Ziffer selbst.
- Römische Zahlen
Schreiben Sie Methoden zum Umrechnen von ganzen Zahlen (1 bis 3000) in Römische Zahlen und umgekehrt. Die römischen Ziffern haben folgende Bedeutung:I ... 1 V ... 5 X ... 10 L ... 50 C ... 100 D ... 500 M ... 1000
Beachten Sie, dass nur jeweils drei gleiche Ziffern hintereinander geschrieben werden. Stattdessen wird die nächst größere Einheit benutzt und eine Einheit abgezogen (XC = 90, XCIX = 99, IX = 9, VIII = 8).
Die Prototypen sollen sein:string IntToRoman(int number); int RomanToInt(string romanNumber);
- Unit Tests
Erstellen Sie für die obigen beiden Aufgaben Unit-Tests. Lesen Sie dazu Verifying Code by Using Unit Tests. - Wörter suchen
Laden Sie sich die gepackte Wortliste herunter. Die Datei enthält nur eine Textdateideutsch.txt, welche eine sortierte Liste von Wörtern, jeweils ein Wort in einer Zeile enthält (stammt von Firefox). Achtung: der Zeilenumbruch besteht nur aus'\n'(Unix) und die Kodierung ist UTF-8.
Schreiben Sie eine MethodeGetWordList(string word), welche eine Liste von Worten liefert, die mit dem Stringwordbeginnen.
Implementieren Sie sowohl lineare als auch binäre Suche und vergleichen Sie diese.
Verwenden Sie unterschiedliche Datenstrukturen (die zwei Typen von C#-Arrays und Collections) und vergleichen Sie die Lösungen punkto Laufzeit und Speicherbedarf.
Schreiben Sie eine weitere MethodeGetWordListEnding(string ending), welche eine Liste von Worten liefert, die mitendingendet. Ist hier binäre Suche möglich? - Unit Tests
Erstellen sie für die obige Aufgabe passende Unit Tests. - Laufzeitmessungen
Schreiben Sie ein Programmruntime, welches die Laufzeiten der unterschiedlichen Implementierungen vonGetWordList(string word)undGetWordListEnding(string ending)ermittelt. Verwenden Sie die Wortanfänge "Distanz", "Erdbi" und "Finanzind" und die Endungen "gulierung", "dcomputer" und "chsdor".
Das Programm soll bei jedem Test folgende Informationen ausgeben:
Anzahl der gefundenen Worte und die Laufzeit.
Bilden Sie die Mittelwerte für die einzelnen Methoden (binäre/sequentielle Suche) bzw. die Implementierungen mit Arrays oder Collections.
Wie sind die Ergebnisse zu interpretieren? - 25 im Quadrat
Auf zwölf quadratischen Kärtchen sind die Zahlen 1 bis 12 gedruckt. Diese Kärtchen sollen so in einem Quadrat angeordnet werden, sodass ein 2x2-Quadrat in der Mitte frei bleibt (die Kantenlänge beträgt insgesamt also 4).
- Ermitteln Sie eine Anordnung der Karten, sodass die Summe aller Karten einer Kante (4 Karten) jeweils den Wert 25 ergibt.
- Ermitteln Sie die Anzahl der Lösungen.
- Ermitteln Sie alle Lösungen (es sind sehr viele!).
Labels: 4BHIF, Aufgabe, C#, POS1-4
Mittwoch, 12. November 2014
Mini-Vergleich von Programmiersprachen
Als Beispiel kommt "99 bottles of beer" zum Einsatz. Die Programme stammen von http://99-bottles-of-beer.net/ und dienen eigentlich nur als Beispiele, um die Code-Struktur kleinerer Programme zu sehen.
Python
Python unterstützt mehrere Programmierparadigmen. So werden objektorientierte, aspektorientierte und funktionale Programmierung unterstützt. Wie andere dynamische Sprachen wird Python oft als Skriptsprache genutzt.
"""
99 bottles of beer in Python
"""
for quant in range(99, 0, -1):
if quant > 1:
print(quant, "bottles of beer on the wall,", quant, "bottles of beer.")
if quant > 2:
suffix = str(quant - 1) + " bottles of beer on the wall."
else:
suffix = "1 bottle of beer on the wall."
elif quant == 1:
print("1 bottle of beer on the wall, 1 bottle of beer.")
suffix = "no more beer on the wall!"
print("Take one down, pass it around,", suffix)
print("--")
Hier die Python Lösung zum Ausführen
Java
Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems (seit 2010 Oracle). Die Programmiersprache ist ein Bestandteil der Java-Technologie – diese besteht grundsätzlich aus dem Java-Entwicklungswerkzeug (JDK) zum Erstellen von Java-Programmen und der Java-Laufzeitumgebung (JRE) zu deren Ausführung. Die Laufzeitumgebung besteht selbst aus der virtuellen Maschine (JVM) sowie den mitgelieferten Bibliotheken der Java-Laufzeitumgebung.
/*
* 99 bottles of beer in Java
*/
class bottles {
public static void main(String args[]) {
String s = "s";
for (int beers=99; beers>-1;) {
System.out.print(beers + " bottle" + s + " of beer on the wall, ");
System.out.println(beers + " bottle" + s + " of beer, ");
if (beers==0) {
System.out.print("Go to the store, buy some more, ");
System.out.println("99 bottles of beer on the wall.\n");
System.exit(0);
} else
System.out.print("Take one down, pass it around, ");
s = (--beers == 1)?"":"s";
System.out.println(beers + " bottle" + s + " of beer on the wall.\n");
}
}
}
C
C ist eine imperative Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories für die Systemprogrammierung des Betriebssystems Unix entwickelte. Seitdem ist sie auf vielen Computersystemen verbreitet. Die Anwendungsbereiche von C sind sehr verschieden. Sie wird zur System- und Anwendungsprogrammierung eingesetzt. Die grundlegenden Programme aller Unix-Systeme und die Systemkerne vieler Betriebssysteme sind in C programmiert. Zahlreiche Sprachen, wie C++, Objective-C, C#, Java, PHP, Vala oder Perl orientieren sich an der Syntax und anderen Eigenschaften von C.
/*
* 99 bottles of beer in C
*/
#define MAXBEER (99)
void chug(int beers);
main()
{
register beers;
for(beers = MAXBEER; beers; chug(beers--))
puts("");
puts("\nTime to buy more beer!\n");
exit(0);
}
void chug(register beers)
{
char howmany[8], *s;
s = beers != 1 ? "s" : "";
printf("%d bottle%s of beer on the wall,\n", beers, s);
printf("%d bottle%s of beeeeer . . . ,\n", beers, s);
printf("Take one down, pass it around,\n");
if(--beers) sprintf(howmany, "%d", beers); else strcpy(howmany, "No more");
s = beers != 1 ? "s" : "";
printf("%s bottle%s of beer on the wall.\n", howmany, s);
}
C++
C++ ist eine von der ISO genormte Programmiersprache. Sie wurde ab 1979 von Bjarne Stroustrup bei AT&T als Erweiterung der Programmiersprache C entwickelt. C++ ermöglicht sowohl die effiziente und maschinennahe Programmierung als auch eine Programmierung auf hohem Abstraktionsniveau.C++ unterstützt mehrere Programmierparadigmen:
/*
* 99 bottles of beer in C++
*/
#include <iostream>
using namespace std;
int main()
{
int bottles = 99;
while ( bottles > 0 )
{
cout << bottles << " bottle(s) of beer on the wall," << endl;
cout << bottles << " bottle(s) of beer." << endl;
cout << "Take one down, pass it around," << endl;
cout << --bottles << " bottle(s) of beer on the wall." << endl;
}
return 0;
}
C#
C# (lies englisch c sharp, englische Aussprache [ˌsiːˈʃɑːp]) ist eine vom Softwarehersteller Microsoft im Rahmen seiner .NET-Strategie entwickelte Programmiersprache. C# ist bei ECMA und ISO als Standard registriert.C# unterstützt mehrere Programmierparadigmen:
/*
* 99 bottles of beer in C#
*/
using System;
using System.Linq;
using System.Text;
namespace NinetyNineBottles
{
class Beer
{
static void Main(string[] args)
{
StringBuilder beerLyric = new StringBuilder();
string nl = System.Environment.NewLine;
var beers =
(from n in Enumerable.Range(0, 100)
select new {
Say = n == 0 ? "No more bottles" :
(n == 1 ? "1 bottle" : n.ToString() + " bottles"),
Next = n == 1 ? "no more bottles" :
(n == 0 ? "99 bottles" :
(n == 2 ? "1 bottle" : n.ToString() + " bottles")),
Action = n == 0 ? "Go to the store and buy some more" :
"Take one down and pass it around"
}).Reverse();
foreach (var beer in beers)
{
beerLyric.AppendFormat("{0} of beer on the wall, {1} of beer.{2}",
beer.Say, beer.Say.ToLower(), nl);
beerLyric.AppendFormat("{0}, {1} of beer on the wall.{2}",
beer.Action, beer.Next, nl);
beerLyric.AppendLine();
}
Console.WriteLine(beerLyric.ToString());
Console.ReadLine();
}
}
}
Labels: C, C#, C++, Java, Python
Donnerstag, 13. Februar 2014
OpenCV mit C# (POS1: 4BHIF)
Installieren Sie OpenCV für C# nach der Anleitung in dem Tutorial OpenCV tutorial 5: Emgu CV with C#.
Tatsächlich wird in diesem Tutorial Emgu CV installiert, ein .Net-Wrapper für diese Bibliothek.
Im Tutorial wird gezeigt, wie Visual Studio für die Verwendung von OpenCV eingerichtet werden muss. Als Beispielanwendung wird eine "Ball-Erkennung" programmiert.
Probleme gibt es eventuell mit der Kamera bzw. eigentlich mit dem Treiber der Kamera. Im Installationsverzeichnis von Emgu CV gibt es aber weitere Beispiele, bei denen die Kamera auch funktioniert.
Aufgabe:
- Bringen Sie eine Gesichtserkennung mit OpenCV unter C# zum Laufen.
- Finden Sie heraus, wie so eine Gesichtserkennung funktioniert.
Labels: algorithmen, C#, POS1-4
Donnerstag, 24. Oktober 2013
C# Threads (POS1: 4BHIF)
Abgabename: 2013_4bhif_aufgabe3_name_vorname.zip
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
Dienstag, 8. Oktober 2013
C# programmieren (POS1: 4BHIF)
Abgabename: 2013_4bhif_aufgabe2_name_vorname.zip
Verwenden Sie eine Projektmappe und teilen Sie die Aufgaben in Projekte oder machen Sie ein einziges Projekt, bei dem man aber irgendwie auswählen kann, welche Teilaufgabe gestartet wird.
Sie haben nun schon zwei Jahre Java und ein Jahr Python programmiert. Nun geht es darum das bereits erworbene Können möglichst schnell auf die Sprache C# zu übertragen. Dazu sind kurze einfache Aufgabenstellungen gut geeignet. Es folgt nun eine Liste von Aufgabenstellungen für Konsolenprogramme. Sie dürfen Ihre Progrämmchen auch mit einer GUI versehen, gefordert ist das jedoch nicht.
- Hello World
Richten Sie Ihr Visual Studio so ein, dass alle Ihre Dateien automatisch einen Header mit Ihrem Namen, Klasse usw. enthalten.
Erstellen Sie dann ein "Hello World"-Programm. Dieses Programm soll "Hello World!" ausgeben, wenn keine Kommandozeilenparameter angegeben wurden, anderenfalls sollen die Parameter als Namen interpretiert werden, die dann gegrüßt werden. Dabei sollen immer zwei Namen paarweise ausgegeben werden (siehe Beispiel).
Aufrufhello.exe Toni Barbara Klaus
AusgabeHello Toni und Barbara! Hello Klaus!
- ISBN/EAN
Schreiben Sie eine Methode, welche die Prüfziffern von ISBN (Internationale Standardbuchnummer) bzw. EAN (European Article Number) prüfen kann. Dabei wird die Prüfziffer (als String) eingegeben, von welcher die Prüfziffer als Rückgabewert ausgegeben wird.int GetCheckDigit(string isbnWithoutCheckDigit);
Daraus leitet sich eine zweite Methode ab, welche einen String inklusive Prüfziffer prüft:bool CheckISBN(string isbn);
Diese Methode entfernt alle Trennzeichen (Leerzeichen, Bindestriche).
Algorithmus:s = z1 + z2 * 2 + z3 * 3 + ... + z9 * 9p = s mod 11- Falls p gleich 10, dann ist die Prüfziffer "X" sonst die Ziffer selbst.
- Römische Zahlen
Schreiben Sie Methoden zum Umrechnen von ganzen Zahlen (1 bis 3000) in Römische Zahlen und umgekehrt. Die römischen Ziffern haben folgende Bedeutung:I ... 1 V ... 5 X ... 10 L ... 50 C ... 100 D ... 500 M ... 1000
Beachten Sie, dass nur jeweils drei gleiche Ziffern hintereinander geschrieben werden. Stattdessen wird die nächst größere Einheit benutzt und eine Einheit abgezogen (XC = 90, XCIX = 99, IX = 9, VIII = 8).
Die Prototypen sollen sein:string IntToRoman(int number); int RomanToInt(string romanNumber);
- Unit Tests
Erstellen Sie für die obigen beiden Aufgaben Unit-Tests. Lesen Sie dazu Verifying Code by Using Unit Tests. - Wörter suchen
Laden Sie sich die gepackte Wortliste herunter. Die Datei enthält nur eine Textdateideutsch.txt, welche eine sortierte Liste von Wörtern, jeweils ein Wort in einer Zeile enthält (stammt von Firefox). Achtung: der Zeilenumbruch besteht nur aus'\n'(Unix) und die Kodierung ist UTF-8.
Schreiben Sie eine MethodeGetWordList(string word), welche eine Liste von Worten liefert, die mit dem Stringwordbeginnen.
Implementieren Sie sowohl lineare als auch binäre Suche und vergleichen Sie diese.
Verwenden Sie unterschiedliche Datenstrukturen (die zwei Typen von C#-Arrays und Collections) und vergleichen Sie die Lösungen punkto Laufzeit und Speicherbedarf.
Schreiben Sie eine weitere MethodeGetWordListEnding(string ending), welche eine Liste von Worten liefert, die mitendingendet. Ist hier binäre Suche möglich? - Unit Tests
Erstellen sie für die obige Aufgabe passende Unit Tests. - Laufzeitmessungen
Schreiben Sie ein Programmruntime, welches die Laufzeiten der unterschiedlichen Implementierungen vonGetWordList(string word)undGetWordListEnding(string ending)ermittelt. Verwenden Sie die Wortanfänge "Distanz", "Erdbi" und "Finanzind" und die Endungen "gulierung", "dcomputer" und "chsdor".
Das Programm soll bei jedem Test folgende Informationen ausgeben:
Anzahl der gefundenen Worte und die Laufzeit.
Bilden Sie die Mittelwerte für die einzelnen Methoden (binäre/sequentielle Suche) bzw. die Implementierungen mit Arrays oder Collections.
Wie sind die Ergebnisse zu interpretieren? - 25 im Quadrat
Auf zwölf quadratischen Kärtchen sind die Zahlen 1 bis 12 gedruckt. Diese Kärtchen sollen so in einem Quadrat angeordnet werden, sodass ein 4x4-Quadrat in der Mitte frei bleibt (die Kantenlänge beträgt also 4).
- Ermitteln Sie eine Anordnung der Karten, sodass die Summe aller Karten einer Kante (4 Karten) jeweils den Wert 25 ergibt.
- Ermitteln Sie die Anzahl der Lösungen.
- Ermitteln Sie alle Lösungen (es sind sehr viele!).
Montag, 24. September 2012
Mini-Vergleich verschiedener Programmiersprachen
Als Beispiel kommt "99 bottles of beer" zum Einsatz. Die Programme stammen von http://99-bottles-of-beer.net/ und dienen eigentlich nur als Beispiele, um die Code-Struktur kleinerer Programme zu sehen.
Python
Python unterstützt mehrere Programmierparadigmen. So werden objektorientierte, aspektorientierte und funktionale Programmierung unterstützt. Wie andere dynamische Sprachen wird Python oft als Skriptsprache genutzt.
"""
99 bottles of beer in Python
"""
for quant in range(99, 0, -1):
if quant > 1:
print(quant, "bottles of beer on the wall,", quant, "bottles of beer.")
if quant > 2:
suffix = str(quant - 1) + " bottles of beer on the wall."
else:
suffix = "1 bottle of beer on the wall."
elif quant == 1:
print("1 bottle of beer on the wall, 1 bottle of beer.")
suffix = "no more beer on the wall!"
print("Take one down, pass it around,", suffix)
print("--")
Hier die Python Lösung zum Ausführen
Java
Java ist eine objektorientierte Programmiersprache und eine eingetragene Marke des Unternehmens Sun Microsystems (seit 2010 Oracle). Die Programmiersprache ist ein Bestandteil der Java-Technologie – diese besteht grundsätzlich aus dem Java-Entwicklungswerkzeug (JDK) zum Erstellen von Java-Programmen und der Java-Laufzeitumgebung (JRE) zu deren Ausführung. Die Laufzeitumgebung besteht selbst aus der virtuellen Maschine (JVM) sowie den mitgelieferten Bibliotheken der Java-Laufzeitumgebung.
/*
* 99 bottles of beer in Java
*/
class bottles {
public static void main(String args[]) {
String s = "s";
for (int beers=99; beers>-1;) {
System.out.print(beers + " bottle" + s + " of beer on the wall, ");
System.out.println(beers + " bottle" + s + " of beer, ");
if (beers==0) {
System.out.print("Go to the store, buy some more, ");
System.out.println("99 bottles of beer on the wall.\n");
System.exit(0);
} else
System.out.print("Take one down, pass it around, ");
s = (--beers == 1)?"":"s";
System.out.println(beers + " bottle" + s + " of beer on the wall.\n");
}
}
}
C
C ist eine imperative Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories für die Systemprogrammierung des Betriebssystems Unix entwickelte. Seitdem ist sie auf vielen Computersystemen verbreitet. Die Anwendungsbereiche von C sind sehr verschieden. Sie wird zur System- und Anwendungsprogrammierung eingesetzt. Die grundlegenden Programme aller Unix-Systeme und die Systemkerne vieler Betriebssysteme sind in C programmiert. Zahlreiche Sprachen, wie C++, Objective-C, C#, Java, PHP, Vala oder Perl orientieren sich an der Syntax und anderen Eigenschaften von C.
/*
* 99 bottles of beer in C
*/
#define MAXBEER (99)
void chug(int beers);
main()
{
register beers;
for(beers = MAXBEER; beers; chug(beers--))
puts("");
puts("\nTime to buy more beer!\n");
exit(0);
}
void chug(register beers)
{
char howmany[8], *s;
s = beers != 1 ? "s" : "";
printf("%d bottle%s of beer on the wall,\n", beers, s);
printf("%d bottle%s of beeeeer . . . ,\n", beers, s);
printf("Take one down, pass it around,\n");
if(--beers) sprintf(howmany, "%d", beers); else strcpy(howmany, "No more");
s = beers != 1 ? "s" : "";
printf("%s bottle%s of beer on the wall.\n", howmany, s);
}
C++
C++ ist eine von der ISO genormte Programmiersprache. Sie wurde ab 1979 von Bjarne Stroustrup bei AT&T als Erweiterung der Programmiersprache C entwickelt. C++ ermöglicht sowohl die effiziente und maschinennahe Programmierung als auch eine Programmierung auf hohem Abstraktionsniveau.C++ unterstützt mehrere Programmierparadigmen:
/*
* 99 bottles of beer in C++
*/
#include <iostream>
using namespace std;
int main()
{
int bottles = 99;
while ( bottles > 0 )
{
cout << bottles << " bottle(s) of beer on the wall," << endl;
cout << bottles << " bottle(s) of beer." << endl;
cout << "Take one down, pass it around," << endl;
cout << --bottles << " bottle(s) of beer on the wall." << endl;
}
return 0;
}
C#
C# (lies englisch c sharp, englische Aussprache [ˌsiːˈʃɑːp]) ist eine vom Softwarehersteller Microsoft im Rahmen seiner .NET-Strategie entwickelte Programmiersprache. C# ist bei ECMA und ISO als Standard registriert.C# unterstützt mehrere Programmierparadigmen:
/*
* 99 bottles of beer in C#
*/
using System;
using System.Linq;
using System.Text;
namespace NinetyNineBottles
{
class Beer
{
static void Main(string[] args)
{
StringBuilder beerLyric = new StringBuilder();
string nl = System.Environment.NewLine;
var beers =
(from n in Enumerable.Range(0, 100)
select new {
Say = n == 0 ? "No more bottles" :
(n == 1 ? "1 bottle" : n.ToString() + " bottles"),
Next = n == 1 ? "no more bottles" :
(n == 0 ? "99 bottles" :
(n == 2 ? "1 bottle" : n.ToString() + " bottles")),
Action = n == 0 ? "Go to the store and buy some more" :
"Take one down and pass it around"
}).Reverse();
foreach (var beer in beers)
{
beerLyric.AppendFormat("{0} of beer on the wall, {1} of beer.{2}",
beer.Say, beer.Say.ToLower(), nl);
beerLyric.AppendFormat("{0}, {1} of beer on the wall.{2}",
beer.Action, beer.Next, nl);
beerLyric.AppendLine();
}
Console.WriteLine(beerLyric.ToString());
Console.ReadLine();
}
}
}
Labels: allgemeines, C, C#, C++, Java
Montag, 10. Januar 2011
TIOBE-Index: Python ist Programmiersprache 2010
Detaillierte Informationen gibt es hier und hier.
Labels: C, C#, C++, Go, Objective C, Programmiersprachen, Python, ruby
Donnerstag, 11. November 2010
Code-Kata
Auch Programmieren beherrscht man nur durch ständiges Training. Nur durch Üben wird man auch hier zum Meister. Aber nicht nur durch den Kampf (Programmieren für das Geschäft) sondern auch durch Katas. Diese Idee für's Programmieren hat Dave Thomas von den Pragmatischen Programmieren (meines Wissens) erstmalig aufgegriffen und publiziert: Code Kata
Sehr empfehlenswert für alle, die Programmieren meistern wollen.
Die Idee der Code Kata fasziniert und berührt mich besonders, da ich selber jahrelang
trainiert habe.Labels: allgemeines, C, C#, C++, Java, POS1-1, POS1-2, PR5
Montag, 11. Januar 2010
Googles Go ist TIOBEs Programmiersprache des Jahres 2009
Googles Go wurde von TIOBE deshalb als "Programmiersprache des Jahres 2009" gewählt, weil die Verbreitung dieser Sprache im Jahr 2009 am meisten gestiegen ist, von 0% auf 1,25%. Die am häufigsten verwendete Sprache nach diesem Index ist nach wie vor Java.
| Position Jan 2010 | Position Jan 2009 | Delta in Position | Programming Language | Ratings Jan 2010 | Delta Jan 2009 | Status |
|---|---|---|---|---|---|---|
| 1 | 1 | Java | 17.482% | -1.54% | A | |
| 2 | 2 | C | 16.215% | +0.28% | A | |
| 3 | 5 | PHP | 10.071% | +1.19% | A | |
| 4 | 3 | C++ | 9.709% | -0.41% | A | |
| 5 | 4 | (Visual) Basic | 7.354% | -1.81% | A | |
| 6 | 6 | C# | 5.767% | +0.16% | A | |
| 7 | 7 | Python | 4.453% | -0.28% | A | |
| 8 | 8 | Perl | 3.562% | -0.74% | A | |
| 9 | 9 | JavaScript | 2.707% | -0.65% | A | |
| 10 | 11 | Ruby | 2.474% | -0.67% | A | |
| 11 | 10 | Delphi | 2.392% | -0.91% | A | |
| 12 | 37 | Objective-C | 1.379% | +1.24% | A | |
| 13 | - | Go | 1.247% | +1.25% | A-- | |
| 14 | 14 | SAS | 0.809% | +0.01% | A | |
| 15 | 13 | PL/SQL | 0.718% | -0.29% | A | |
| 16 | 18 | ABAP | 0.641% | +0.10% | A-- | |
| 17 | 15 | Pascal | 0.624% | -0.04% | B | |
| 18 | 23 | Lisp/Scheme | 0.576% | +0.14% | B | |
| 19 | 20 | ActionScript | 0.566% | +0.11% | B | |
| 20 | 24 | MATLAB | 0.540% | +0.11% | B |
Labels: C, C#, C++, Go, Java, Programmiersprachen, Python
Abonnieren Posts [Atom]


