Programmieren mit Harald R. Haberstroh (original) (raw)

Mittwoch, 12. November 2014

Mini-Vergleich von Programmiersprachen

Dieser Artikel vergleicht ein paar Programmiersprachen (die in der Abteilung Informatik der HTL Wiener Neustadt unterrichtet werden) und dient nur zur Demonstration der "Optik" dieser Sprachen.

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.

/*

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.

/*

#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:

/*

#include 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:

/*

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

Montag, 24. September 2012

Mini-Vergleich verschiedener Programmiersprachen

Dieser Artikel vergleicht ein paar Programmiersprachen (die in der Abteilung Informatik der HTL Wiener Neustadt unterrichtet werden) und dient nur zur Demonstration der "Optik" dieser Sprachen.

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.

/*

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.

/*

#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:

/*

#include 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:

/*

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

# Eingestellt von Harald R. Haberstroh @ 14:33 0 Kommentare

Montag, 10. Januar 2011

TIOBE-Index: Python ist Programmiersprache 2010

Die Programmiersprache Python konnte unter den im TIOBE-Index gelisteten Sprachen im vergangenen Jahr den größten Zuwachs verzeichnen. Den zweitgrößten Zuwachs hatte Objective-C wegen iPhone- und iPad-Entwicklung. Objective-C galt daher lange Zeit als Kandidat für die Sprache des Jahres 2010.
Detaillierte Informationen gibt es hier und hier.

Labels: C, C#, C++, Go, Objective C, Programmiersprachen, Python, ruby

# Eingestellt von Harald R. Haberstroh @ 17:19 0 Kommentare

Mittwoch, 15. Dezember 2010

Dynamische Speicherverwaltung in C (PR: 5A, 5B)

Implementieren Sie eine einfache dynamische Speicherverwaltung, die nach dem in der folgenden Skizze gezeigten Prinzip funktioniert.

Diese Speicherverwaltung soll es ermöglichen, Speicher in beliebiger Reihenfolge zu allozieren und wieder freizugeben. Siehe auch Dynamische Speicherverwaltung
Schreiben Sie ein Modul heap für die Speicherverwaltung selbst, welches folgende Funktionen enthält (exportiert):

Erstellen Sie eine weitere Version des Moduls heap, welches bei jedem Aufruf von halloc() bzw. hfree() den gesamten Speicher in lesbarer Form auf stderr ausgibt, damit man das Allozieren der Speicherblöcke sehen kann (die Größe des Heaps sollte dabei eher klein gewählt werden!).
Schreiben Sie weiters ein Modul, welches Ihre Speicherverwaltung testet durch Anfordern von Speicher, belegen und lesen des allozierten Speichers und wieder Freigeben des Speichers in verschiedenen Varianten.
Erstellen Sie dazu eine Liste von Testfällen und beschreiben Sie das Ergebnis der Tests (die Speicherauszüge bekommen Sie mit obiger Variante des Moduls).
Beispiele von Testfällen:
n. Test: allozieren eines Strings der Länge HEAPSIZE - sizeof(heap_t), füllen des Strings mit lauter 'A' und ausgeben des Strings. OK
n+1. Test: freigeben des Speichers aus Test n. OK

Zu jedem Test ist anzugeben, ob der Test erfolgreich war. Falls ein Test nicht erfolgreich war, so ist festzustellen, warum und ggf. der Fehler zu beheben. Wird am Programm etwas verändert, so müssen alle Tests noch einmal gemacht werden!
Schreiben Sie ein passendes Makefile, mit dem man alternativ die normale Variante von heap und die Testvariante von heap erzeugen kann!
Organisieren Sie sich in Kleingruppen und versuchen Sie die einzelnen Funktionen gemeinsam zu entwerfen und zu programmieren. Welche Hilfsfunktionen braucht z.B. das halloc()?
Erweitern Sie die Speicherverwaltung um eine "Garbage Collection", die freie Speicherbereiche, die hintereinanderliegen zusammenfasst.
Erstellen Sie eine geeignete Verzeichnisstruktur und verwenden Sie **CVS**.
Tauschen Sie die Module mit anderen Gruppen aus (das müßte ganz einfach sein, da die Schnittstellen immer gleich sind (s.o.).
Abgabe:
Nennen Sie das Projekt 5ad-_name_-heap bzw. 5bd-_name_-heap und checken Sie es ein.
Beantworten Sie weiters folgende Fragen (die Antworten müssen in der Datei heap.txt gespeichert werden):

  1. Was passiert, wenn man einen String der Länge n alloziert und einen String der Länge n speichert?
  2. Was passiert, wenn man einen String der Länge n alloziert und einen String der Länge n + 1 speichert?
  3. Sie allozieren einen String der Länge 11 und speichern "0123456789" und geben den String wieder frei. Danach allozieren Sie einen String der Länge 20 und geben diesen String aus. Was passiert? (die Speicheranforderungen bzw. die Freigabe muss unmittelbar hintereinander erfolgen).
  4. Welche Speicheranforderungen benötigen mehr Speicher - 10 Strings der Länge 100 oder 100 Strings der Länge 10? Begründen Sie die Antwort.
  5. Wie könnten Sie im Modul heap sicherstellen, dass bei einem Aufruf von hfree(p); der Parameter p tatsächlich auf einen mit halloc() allozierten Speicherbereich zeigt?

heap.txt muss auch die Liste der Testfälle mit ihren Ergebnissen enthalten.
Geben Sie einen Ausdruck der ausgearbeiteten Fragen ab!

Labels: Aufgabe, C, PR5

# Eingestellt von Harald R. Haberstroh @ 12:20 0 Kommentare

Donnerstag, 2. Dezember 2010

Datum in C selbst gebastelt

Datumsberechnungen sind immer wieder eine Quelle großer langwieriger, fehleranfälliger Programmteile. Vor allem in Sprachen, die solche Datumsoperationen nicht unterstützen. Sie sind auch immer wieder geeignet, Programmieren zu üben. Hier die Musterlösung zu einem einfachen Kalenderprogramm in C, bei dem ein Großteil der Datumsfunktionen selbstgestrickt sind. Viel Spaß damit!
Verwendung:
Ohne Parameter gibt es einfach das aktuelle Monat mit Markierung < 2> für den heutigen Tag und : 8: als Markierung für österreichische Feiertage. Danach wird die Liste der Feiertage ausgegeben.

$ ./cal Dezember 2010

Montag       6  13  20  27     

Dienstag 7 14 21 28
Mittwoch 1 : 8: 15 22 29
Donnerstag < 2> 9 16 23 30
Freitag 3 10 17 :24::31:
Samstag 4 11 18 :25:
Sonntag : 5::12::19::26:

5.12. 2. Advent 8.12. Maria Empfängnis 12.12. 3. Advent 19.12. 4. Advent 24.12. Heiligabend 25.12. Christtag 26.12. Stefanitag 31.12. Silvester :-)

Here comes the Source...

/*

*/

/--------------------------- includes ------------------------------/ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> #include <time.h>

/--------------------------- defines -------------------------------/ #define WOCHENTAG 3 /* Wochentag des 1.1.1582 */ #define MONTAG 0 #define DIENSTAG 1 #define MITTWOCH 2 #define DONNERSTAG 3 #define FREITAG 4 #define SAMSTAG 5 #define SONNTAG 6

/--------------------------- typedefs ------------------------------/

/--------------------------- globals -------------------------------/ enum { KEIN = 0, NEUJAHR, HL3KOENIGE, ASCHERMITTWOCH, PALMSONNTAG, KARFREITAG, OSTERSONNTAG, OSTERMONTAG, STAATSFEIERTAG, MUTTERTAG, PFINGSTSONNTAG, PFINGSTMONTAG, DREIFALTIGKEITSSONNTAG, FRONLEICHNAM, MARIAHIMMELFAHRT, NATIONALFEIERTAG, REFORMATIONSTAG, ALLERHEILIGEN, ALLERSEELEN, MARIAEMPFAENGNIS, ADVENT1, ADVENT2, ADVENT3, ADVENT4, HEILIGABEND, CHRISTIANI, STEFANI, SILVESTER };

/-------------------------- prototypes -----------------------------/ void printFeiertage(int jahr, int monat); int tagemonat( int jahr, int monat ); int sonntag( int jahr, int monat, int tag ); void tag2datum( int tagzahl, int *jahr, int *monat, int *tag ); void ostern( int jahr, int *monat, int *tag ); int feiertag(int jahr, int monat, int tag); int anzProMonat(int jahr, int monat); void printcal(int start, int anz, int heute, int monat, int jahr); int schaltjahr( int Jahr ); int Anzahl_Tage( int Jahr, int Monat, int Tag );

/----------------------------- main --------------------------------/ int main( int argc, char *argv[] ) { int tage, tag, monat, jahr, start; struct tm *zeit; time_t sec;

if (argc == 2 && strcmp(argv[1], "-i") == 0) { /* interaktiv */ printf("Jahr> ");scanf("%d", &jahr); printf("Monat> ");scanf("%d", &monat); printf("Tag (0 für kein bestimmter)> ");scanf("%d", &tag); if (tag == 0) { tag = 1; if (1 <= monat && monat <= 12 && 1582 < jahr && jahr < 3000) { tage = Anzahl_Tage( jahr, monat, 1); start = (tage + WOCHENTAG) % 7; printcal(start, anzProMonat(jahr, monat), 0, monat, jahr); return 0; } else { fprintf(stderr, "Monat zwischen 1 und 12 und Jahr zwischen " "1583 und 2999\n"); return 2; } } if (1 <= monat && monat <= 12 && 1582 < jahr && jahr < 3000 && 1 <= tag && tag <= anzProMonat(jahr,monat)) { tage = Anzahl_Tage( jahr, monat, 1); start = (tage + WOCHENTAG) % 7; printcal(start, anzProMonat(jahr, monat), tag, monat, jahr); return 0; } else { fprintf(stderr, "Monat zwischen 1 und 12 und Jahr zwischen " "1583 und 2999\n" "[Tag zwischen 1 und Anzahl für dieses Monat]\n"); return 2; } } else if (argc == 3) /* Monat, Jahr */ { monat = atoi(argv[1]); jahr = atoi(argv[2]); tag = 1; if (1 <= monat && monat <= 12 && 1582 < jahr && jahr < 3000) { tage = Anzahl_Tage( jahr, monat, 1); start = (tage + WOCHENTAG) % 7; printcal(start, anzProMonat(jahr, monat), 0, monat, jahr); return 0; } else { fprintf(stderr, "Monat zwischen 1 und 12 und Jahr zwischen " "1583 und 2999\n"); return 2; } } else if (argc == 4) /* ganzes Datum */ { monat = atoi(argv[2]); jahr = atoi(argv[3]); tag = atoi(argv[1]); if (1 <= monat && monat <= 12 && 1582 < jahr && jahr < 3000 && 1 <= tag && tag <= anzProMonat(jahr,monat)) { tage = Anzahl_Tage( jahr, monat, 1); start = (tage + WOCHENTAG) % 7; printcal(start, anzProMonat(jahr, monat), tag, monat, jahr); return 0; } else { fprintf(stderr, "Monat zwischen 1 und 12 und Jahr zwischen " "1583 und 2999\n" "[Tag zwischen 1 und Anzahl für dieses Monat]\n"); return 2; } } else if (argc == 1) /* aktuelles Monat */ { time(&sec); zeit = localtime(&sec); tag = zeit->tm_mday; monat = zeit->tm_mon + 1; jahr = zeit->tm_year + 1900; tage = Anzahl_Tage( jahr, monat, 1); start = (tage + WOCHENTAG) % 7; printcal(start, anzProMonat(jahr, monat), tag, monat, jahr); return 0; } else { fprintf(stderr, "Aufruf:\n%s [[tag] monat jahr]\n", argv[0]); return 1; } }

/-------------------------- functions ------------------------------/ /** Kalender ausgeben

char *monate[] = { "Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; int i; int tag;

printf("%s %d\n\n", monate[monat-1], jahr); for (i = 0; i < 7; i++) { printf("%10s ", tage[i]); for (tag = i + 1 - start; tag < anz + 7 + start; tag += 7) if (tag == heute && feiertag(jahr, monat, tag) && tag >= 1 && tag <= anz) printf("[%2d]", tag); else if (tag == heute && tag >= 1 && tag <= anz) printf("<%2d>", tag); else if (feiertag(jahr, monat, tag) && tag >= 1 && tag <= anz) printf(":%2d:", tag); else if (tag >= 1 && tag <= anz) printf("%3d ", tag); else printf(" "); printf("\n"); } printf("\n"); printFeiertage(jahr, monat); }

/*

*/ int schaltjahr( int Jahr ) { if ( Jahr % 400 == 0 ) return 1; else if ( Jahr % 100 == 0 ) return 0; else if ( Jahr % 4 == 0 ) return 1; else return 0; }

int anzProMonat(int jahr, int monat) { switch(monat) { case 2: return 28 + schaltjahr(jahr); break; case 4: case 6: case 9: case 11: return 30; break; default: return 31; } }

/*

}

/** Bestimmt Feiertag.

if (monat == m && tag == t) /* Ostern / return OSTERSONNTAG; tag2datum(tagzahl + 1, &j, &m, &t); if (monat == m && tag == t) / Ostern / return OSTERMONTAG; tag2datum(tagzahl - 46, &j, &m, &t); if (monat == m && tag == t) / Aschermittwoch / return ASCHERMITTWOCH; tag2datum(tagzahl - 7, &j, &m, &t); if (monat == m && tag == t) / Palmsonntag / return PALMSONNTAG; tag2datum(tagzahl - 2, &j, &m, &t); if (monat == m && tag == t) / Karfreitag / return KARFREITAG; tag2datum(tagzahl + 49, &j, &m, &t); if (monat == m && tag == t) / Pfingstsonntag / return PFINGSTSONNTAG; tag2datum(tagzahl + 50, &j, &m, &t); if (monat == m && tag == t) / Pfingstmontag / return PFINGSTMONTAG; tag2datum(tagzahl + 56, &j, &m, &t); if (monat == m && tag == t) / Dreifaltigkeitssonntag / return DREIFALTIGKEITSSONNTAG; tag2datum(tagzahl + 60, &j, &m, &t); if (monat == m && tag == t) / Fronleichnam */ return FRONLEICHNAM;

if (monat == 1 && tag == 1) /* Neujahr / return NEUJAHR; if (monat == 1 && tag == 6) / Heilige 3 Könige / return HL3KOENIGE; if (monat == 5 && tag == 1) / Staatsfeiertag / return STAATSFEIERTAG; tag2datum(sonntag(jahr, 5, 13), &j, &m, &t); if (monat == 5 && tag == t) / Muttertag FIXME / return MUTTERTAG; if (monat == 8 && tag == 15) / Mariahimmelfahrt / return MARIAHIMMELFAHRT; if (monat == 10 && tag == 26) / Nationalfeiertag / return NATIONALFEIERTAG; if (monat == 10 && tag == 31) / Reformationstag / return REFORMATIONSTAG; if (monat == 11 && tag == 1) / Allerheiligen / return ALLERHEILIGEN; if (monat == 11 && tag == 2) / Allersselen / return ALLERSEELEN; if (monat == 11) { if (sonntag(jahr, 12, 24) == Anzahl_Tage(jahr, 12, 24)) tagzahl = sonntag(jahr, 12, 24) - 21; else tagzahl = sonntag(jahr, 12, 24) - 28; tag2datum(tagzahl, &j, &m, &t); if (tag == t && m == 11) / 1. Advent / return ADVENT1; } if (monat == 12) { if (tag == 8) / Maria Emfängnis */ return MARIAEMPFAENGNIS;

  if (sonntag(jahr, 12, 24) == Anzahl_Tage(jahr, 12, 24))
     tagzahl = sonntag(jahr, 12, 24) - 21;
  else
     tagzahl = sonntag(jahr, 12, 24) - 28;
  tag2datum(tagzahl, &j, &m, &t);
  if (tag == t && m == 12)         /* 1. Advent */
     return ADVENT1;
  tag2datum(tagzahl+7, &j, &m, &t);
  if (tag == t)                    /* 2. Advent */
     return ADVENT2;
  tag2datum(tagzahl+14, &j, &m, &t);
  if (tag == t)                    /* 3. Advent */
     return ADVENT3;
  tag2datum(tagzahl+21, &j, &m, &t);
  if (tag == t)                    /* 4. Advent */
     return ADVENT4;
  if (tag == 24)                   /* Hl. Abend */
     return HEILIGABEND;
  if (tag == 25)                   /* Christiani */
     return CHRISTIANI;
  if (tag == 26)                   /* Stefanitag */
     return STEFANI;
  if (tag == 31)                   /* Silvester :-) */
     return SILVESTER;

}

return KEIN; /* Kein Feiertag */ }

void ostern( int jahr, int *monat, int *tag ) { int a = jahr % 19; int b = jahr / 100; int c = jahr % 100; int d = b / 4; int e = b % 4; int f = ( b + 8 ) / 25; int g = ( b - f + 1 ) / 3; int h = ( 19 * a + b - d - g + 15 ) % 30; int i = c / 4; int k = c % 4; int l = ( 32 + 2 * e + 2 * i -h -k ) % 7; int m = ( a + 11 * h + 22 * l ) / 451; int p = ( h + l - 7 * m + 114 ) % 31;

*monat = ( h + l - 7 * m + 114 ) / 31; *tag = p + 1; } void tag2datum( int tagzahl, int *jahr, int *monat, int tag ) { / * Jahr berechnen */ *jahr = 1582; while ( tagzahl > 365 + schaltjahr( *jahr ) ) { tagzahl -= 365 + schaltjahr( *jahr ); (jahr)++; } / * Monat */ for ( *monat = 1; tagzahl > tagemonat( *jahr, *monat ); (*monat)++ ) tagzahl -= tagemonat( *jahr, monat ); / * Tag */ *tag = tagzahl; }

int sonntag( int jahr, int monat, int tag ) { int tagzahl = Anzahl_Tage( jahr, monat, tag ); int wt = ( DONNERSTAG + tagzahl ) % 7; if ( wt == SONNTAG ) /* bereits Sonntag */ return tagzahl; else return tagzahl + ( SONNTAG - wt ); } int tagemonat( int jahr, int monat ) { switch( monat ) { case 2: return 28 + schaltjahr( jahr ); break; case 4: case 6: case 9: case 11: return 30; break; default: return 31; } }

/** gib eine Liste der Feiertage aus.

} }

Labels: C, Lösung, PR5

# Eingestellt von Harald R. Haberstroh @ 12:20 0 Kommentare

Donnerstag, 11. November 2010

Code-Kata

Beim Karate (z.B. Karatedo Doshinkan) gibt es Kata (dt. "Form", siehe auch Kata auf Wikipedia), eine spezielle Übungsform, bei der man als Training gegen einen oder mehrere (vorgestellte) Gegner kämpft. Dabei ist der Bewegungsablauf aber stilisiert und fix vorgegeben. Das oftmalige Wiederholen der Bewegungsabläufe in Form von Kata ist unerlässlich für den persönlichen Fortschritt. Denn nur Übung macht den Meister.

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

# Eingestellt von Harald R. Haberstroh @ 16:00 0 Kommentare

Donnerstag, 28. Oktober 2010

C lernen (PR5: 5AD, 5BD)

Lernen Sie C anhand der Vorgangsweise 15 Exercises for Learning a new Programming Language.

Machen Sie ein Projekt 5ad-_name_-learn-c bzw. 5bd-_name_-learn-c, in dem Sie die Lösungen der 15 Aufgaben dokumentieren (in erster Linie getesteter und kommentierter Source-Code).

Achtung: die erste Aufgabe ist ziemlich schwierig, da das Prüfen, ob eine Taste gedrückt wurde, systemabhängig ist. Lösen Sie diese Aufgabe sowohl für Windows als auch für Linux.

Informationen:

Die Links zu jobsnake funktionieren nicht mehr. Am besten sucht man nach

Labels: Aufgabe, C, PR5

# Eingestellt von Harald R. Haberstroh @ 09:22 0 Kommentare

Montag, 11. Januar 2010

Googles Go ist TIOBEs Programmiersprache des Jahres 2009

TIOBE erstellt monatlich einen TIOBE Programming Community Index, in dem die populärsten Programmiersprachen ermittelt werden. Die Reihung erfolgt aufgrund der Anzahl der qualifizierten Ingenieure weltweit, Kursen und Drittanbietern. Die Suchmaschinen Google, MSN, Yahoo und YouTube werden zur Berechnung der Reihung herangezogen. In dieser Reihung geht es nicht um die beste Programmiersprache und auch nicht und jene Sprache in der diemeisten Zeilen geschrieben wurden.

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.

Hier die TOP 20 (Jänner 2010):

PositionJan 2010 PositionJan 2009 Delta in Position Programming Language RatingsJan 2010 DeltaJan 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

Ich habe die Tabelle aus TIOBE Programming Community Index kopiert, da über diesen Link nur die aktuellen Daten verfügbar sind.

Ranking über die Jahre:

Labels: C, C#, C++, Go, Java, Programmiersprachen, Python

# Eingestellt von Harald R. Haberstroh @ 15:00 0 Kommentare

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

Abonnieren Kommentare [Atom]