Freitag, 19. Dezember 2008

 

Programmierrichtlinen allgemein

Diese Programmierrichtlinien sind für den Programmierunterricht an der HTL Wiener Neustadt, Abteilung EDVO gedacht, sind aber auch für andere ganz praktisch (nach diversen Anpassungen).

Sammlung von Programmierrichtlinen, die für alle Programmiersprachen gelten.

- Verwenden Sie sprechende Namen (für Funktionen, Variable, Methoden usw.)

- Jede Variablendeklaration muss in einer eigenen Zeile stehen.

- Keine Umlaute in Namen (auch wenn sei von der Programmiersprache erlaubt werden).

- Keine Tabulatoren verwenden. Der Editor (vim, eclipse usw.) muss so eingestellt werden, sodass nur Leerzeichen eingefügt werden.

- Einrückungen dürfen nur mit Leerzeichen erfolgen. Eine Ebene muss mindestens zwei Leerzeichen eingerückt werden. Mehr als vier Leerzeichen sind nicht sinnvoll.

- Die Länge von Zeilen soll nicht größer als 80 Zeichen sein (eventuell 90 Zeichen). Zeilen, die deshalb umgebrochen werden müssen, sind nach dem Zeilenumruch (eventuell mit Zeilenfortsetzungszeichen zu markieren) zusätzlich einzurücken.

- Dateinamen, Verzeichnisnamen dürfen keine Umlaute, Sonderzeichen und Leerzeichen enthalten.

- Jede Programmdatei muss einen Kommentarkopf mit folgenden Inhalten haben:

Ihrem Namen
Ihrer Klasse
Ihrer Katalognummer
Ihrer Evidenznummer (und/oder E-Mail-Adresse)
dem Dateinamen
Kurzbeschreibung des Programms oder der Klasse (Zweck)

- Funktionen, Subroutinen, Methoden müssen mindestens durch eine Leerzeile getrennt werden.

- Klassennamen müssen mit einem Großbuchstaben beginnen. Klassennamen sind normalerweise Substantive in der Einzahl.

- Methodennamen müssen mit einem Kleinbuchstaben beginnen. Methoden beschreiben eine Tätigkeit!

- Konstante definieren. Es dürfen keine Zahlen unmotiviert im Code verwendet werden.

- Fixe Dateipfade müssen als Konstante definiert werden. Noch besser wäre die Verwendung von Konfigurationsdateien.

- Bei Vergleichen sollte die Konstante immer links stehen, damit nicht versehentlich eine Zuweisung entsteht.

- Globale Variable sollten vermieden werden.

- Alle Methoden (Funktionen), die nur lokal in einer Klasse oder einem Modul verwendet werden, müssen privat sein (je nach Programmiersprache z.B. private oder static).

- Der Zweck von Parametern/Variablen/Methoden muss durch den Namen erkennbar sein. Alternativ kann auch (zusätzlicher) Kommentar verwendet werden.

- Sichern Sie den Code mit assertions (Zusicherungen assert()) ab.

Ergänzungen zu dieser unvollständigen Liste, werden folgen.

Python

Grundsätzlich gelten obige Richtlinien. Es folgt ein Beispielprogrammkopf zur Demonstration:



#!/usr/bin/python
# -"- coding: UTF8 -*-
# hauf.py
# Worthäufigkeiten ermitteln, indem ein Dictionary mit Worten erzeugt wird.
# Danach wird das Dictionary in eine Liste umgewandelt (mit Elementen der
# Art [häufigkeit,wort]), um ein Sortieren nach Häufigkeit zu ermöglichen.
# Eingelesen wird alles und mittels Regulärem Ausdruck in eine Wortliste
# zerlegt.
#
# 2006-10-12, Maier Lukas, 2BD, 20, d09999

Der Header enthält den Dateinamen hauf.py, den Namen Maier Lukas, die Klasse 2BD, die Katalognummer 20 und die Evidenznummer d09999. Darüberhinaus wird der Zweck des Programms kurz umrissen.

Jede Methode bzw. Funktion soll einen DocString enthalten (zwischen "), in dem der Zweck der Methode und die Parameter beschrieben werden:



def einlesen(fp):
"""
Einlesen der Wörter aus der Datei fp, liefert eine Liste von Worten
"""
text = fp.read() # lies alles ein
# ... Rest fehlt

Java

- Paketnamen sind klein zu schreiben

- Klassennamen beginnen mit einem Großbuchstaben und werden in KamelSchreibWeise geschrieben

- Methoden beginnen mit einem Kleinbuchstaben und werden in kamelSchreibweise geschrieben

- Verwenden Sie Javadoc-Strings in Ihren Komentaren.

- Jede Datei Soll wieder einen Header haben, z.B.:



/**
* automat: bo.Tabelle.java Automaten zeichnen.
*
* @author Maier Lukas, 2BD, 20, d09999
*/
package bo;
//...

Hier ist zusätzlich der Paketname im Kommentar angegeben (bo).

- Jede Klasse muss ebenfalls einen Header haben, der den Zweck beschreibt, z.B.:



/**
* Übergangstabelle eines Automaten. Zeilen sind Knoten (Zustände), Spalten sind
* Mengen von Eingabesymbolen.
*
* @author Maier Lukas, 2BD, 20, d09999
*/
public class Tabelle {
private HashMap knoten = new HashMap();

- Ist nur eine Klasse in einer Datei, so können die beiden Header zusammengefasst werden.

- Methoden sollten mindestens @param und @return Docstrings enthalten:



/**
* Leerstring.
*
* @param anz
* Anzahl Blanks
* @return String mit anz Leerzeichen
*/
private String leer(int anz) {
String ret = "";
//...

Am besten machen Sie sich schon passende Vorlagen in eclipse (Menü Window->Preferences):
eclipse-templates.png

C#

Hier gilt im Wesentlichen das selbe wie für Java, nur dass die Docstrings ein anderes Format haben (XML), ein Beispiel:



/// <summary>
/// Diese Funktion gibt den größeren Betrag zurück
/// </summary>
/// <param name="a">Der erste Übergabeparameter
/// <param name="b">Der zweite Übergabeparameter
/// <returns>Die Zahl mit dem größeren Betrag </returns>
/// <remarks>Diese Funktion gibt den größeren Betrag der beiden Übergegeben
/// <see cref="Int32"/> zurück.
/// Sind die Beträge gleich groß ist dies ein Fehler</remarks>
/// <exception cref="ArgumentException">Der Betrag der beiden Zahlen ist gleich
/// groß</exception>
public int GetGreaterAbs(int a, int b)
{
return Math.Max(Math.Abs(a), Math.Abs(b));
}

C, C++

Beide Sprachen sind wie Java zu dokumentieren. Hier gibt es externe Programme zur Auswertung der DocStrings.

andere Sprachen

Die Regeln müssen entsprechend adaptiert werden. Etliche Sprachen haben ein ähnliches Format für DocStrings wie Java. Bitte verwenden Sie diese Tags.

Labels: , , , , ,


Donnerstag, 18. Dezember 2008

 

Optionen von javac

Falls man Dateien von Computern ohne Unicode oder umgekehrt übersetzen will, so kann man die Kodierung per Option angeben:


javac javac -encoding ISO8859-1 Hello.java

Statt ISO8859-1 kann man auch EUCJIS, SJIS oder UTF8 (Unicode) verwenden. Wird diese Option nicht angegeben, so wird die Systemeinstellung verwendet (i.A. passt diese, wenn man die Datei auf dem selben System erstellt hat).

Um mit dem JDK1.5 auch für andere Java-Versionen Code zu erzeugen, kann man dies mit der Option -target version angeben. version kann sein 1.1, 1.2, 1.3, 1.4, 1.5 oder 5 (Synonym für 1.5).


javac -target 1.4 Hello.java

übersetzt für die Version 1.4.

Eine wichtige Option ist -Xlint, welche mehr Warnungen erzeugt (vergleichbar mit der -Wall -Option beim gcc).

Labels:


 

printf in Java

Seit der Version 1.5 gibt es in Java eine bequeme Möglichkeit die Ausgabe zu formatieren.

Jeder PrintStream besitzt die Methode printf(String format, Object… args). Die Standardausgabe System.out oder die Standardfehlerausgabe System.err sind solche PrintStream s.

Folgendes Codefragment zeigt die prinzipielle Verwendung



/** formatierte Ausgabe */
String s = "Zahl";
int zahl = 23;
double d = 3.1415927;
System.out.printf("%s = %d\n", s, zahl);
// ^ ^ ^ ^
// | | | |
// | +----------+
// | |
// +----------+

System.out.printf("alles: [%f]\n", d);
System.out.printf("3 Nachkommastellen: [%.3f]\n", d);
System.out.printf("10 gesamt, 2 NK: [%10.2f]\n", d);
System.out.printf("10 gesamt, 2 NK: [%10.2f]\n", -d);
System.out.printf("10 gesamt, 2 NK: [%10f]\n", -d);
System.out.printf("%%-Zeichen %.2f%%\n", -d);
System.out.printf("String in 10 Zeichen: [%10s]\n", s);
System.out.printf("String in 10 Zeichen: [%-10s]\n", s);

Die Ausgabe ist dann



Zahl = 23
alles: [3,141593]
3 Nachkommastellen: [3,142]
10 gesamt, 2 NK: [ 3,14]
10 gesamt, 2 NK: [ -3,14]
10 gesamt, 2 NK: [ -3,141593]
%-Zeichen -3,14%
String in 10 Zeichen: [ Zahl]
String in 10 Zeichen: [Zahl ]

Die Seite zum direkten Verwenden in eclipse: printf.jpage

Die Klasse String hat eine Methode format(), die genauso wie das oben beschriebene printf() funktioniert, nur liefert format() eben einen passend formatierten String zurück.



Ein Beispiel:


// Formatieren der Zahl z so, dass sie rechtsbündig innerhalb von 8 Zeichen mit
// 2 Nachkommastellen angezeigt wird. Der Formatstring für printf() wird mittels
// String.format() erzeugt.
int gesamtBreite = 8;
int anzNachkomma = 2;
double z = 2.12345676;
String fmt = String.format("%%%d.%df\n", gesamtBreite, anzNachkomma);
System.out.printf(fmt, z);

// Variante 2, wie oben aber linksbündig
int gesamtBreite = -8;
int anzNachkomma = 2;
double z = 2.12345676;
String fmtZ = String.format("%" + gesamtBreite + "." + anzNachkomma + "f\n",z);
System.out.print(fmtZ);

Labels:


 

Internationalisierung in Java

In dem Beispiel internationalisierung.zip wird demonstriert, wie man die Ein-/Ausgabe sowie eigene Texte internationalisiert.



private String resource = "international.texte"; // Package + Prefix
private ResourceBundle bundle;
private Locale locale = Locale.getDefault();
public International() {
this.bundle = ResourceBundle.getBundle(this.resource);
System.out.println(this.locale.getDisplayName());
}
public International(Locale locale) {
this.bundle = ResourceBundle.getBundle(this.resource, locale);
this.locale = locale;
System.out.println(this.locale.getDisplayName());
}

public void sayHello() {
System.out.println(this.bundle.getString("hallo"));
}

Dieses Code-Fragment zeigt einen Ausschnitt aus der Beipielklasse International. Beim Defaultkonstruktor wird als Sprache die Systemeinstellung verwendet, der zweite Konstruktor wird mit einer Locale aufgerufen:



International i = new International(new Locale("de", "AT"));
i.sayHello();

ResourceBundle.getBundle(this.resource, locale) versucht eine Datei international.texte_locale.properties zu lesen (international ist hier das Package). locale setzt sich in obigem Beispiel aus de_AT zusammen.
sayHello() gibt dann die Übersetzung zum String hallo aus, falls diese Property existiert.

Eine solche Property-Datei enthält Zeilen der Art

 msg = Übersetzung

Z.B. international.texte_de_AT.properties enthält:



# österreichische Texte
hallo = Servus
fehler = Des is foisch
zahl = Zoi
parse = des kaunst net umwaundln
io = des geht net eine oder aussi
null = Nix geht mehr (null pointer exception)

Die Methoden readNumber() bzw. printNumber() zeigen, wie man Zahlen lokalisiert einliest bzw. ausgibt.

Im Scrapbook befindet sich noch ein Code-Fragment, das einfach die Namen der Lokalisierungen in der entsprechenden Sprache ausgibt. Weiters wird ein Unicode-String mit runänischen Zeichen ausgegeben.

Siehe auch Internationalisierung (Softwareentwicklung)

Labels:


 

Einfache Filterprogramme mit Java

Aufgabenstellung:

Nehmen Sie an, Sie wollen (Java-)Listings auf Ihrer Homepage darstellen. Die Listings sollen Zeilennummern haben. Außerdem müssen die Zeichen <, >, &, sowie die Umlaute durch ihre HTML-Codierung ersetzt werden.

Schreiben Sie gemäß der Maxime von Unix 2 Filter, die in Kombination diese Aufabe erledigen:

  1. Nr.java, welches vor jeder Zeile eine Zeilennummer ausgibt. Verwenden Sie zur Formatierung der Zeilennummern %4d: , um die Zeilennummern 4-stellig auszugeben.
  2. A2html.java, welches die oben genannten Ersetzungen für HTML durchführt. Das Programm soll zu Beginn <pre> und am Ende </pre> ausgeben, damit man das Ergebnis nur mehr in eine HTML-Seite einfügen muss.
  3. Schreiben Sie Shell-Scripts, um die Java-Programme einfach aufzurufen: Nr und A2html

Wenn Sie die beiden übersetzten Programme dann kombinieren, erhalten Sie ein HTML-Listing:



hp@linux1: ~/ > cat A2html.java | Nr | A2html
<b>Listing</b>
<pre>
TODO...
</pre>

Sie können dann mit der Ausgabeumlenkung auch eine Datei erzeugen:



hp@linux1: ~/ > cat A2html.java | Nr | A2html > A2html.java.html

Die Datei A2html.java.html enthält dann das numerierte Listing:



1: /** TODO
2: * ...
3: */
...

Labels: , ,


 

Java Dokumentation für eclipse einrichten

Standardmäßig bekommt man bei Hilfeaufruf (shift-F2) die Dokumentation direkt von Sun in einem Browserfenster angeboten. Dazu muss das Internet freigesschaltet sein.

Man kann den Pfad für die Doku einstellen. Zum Beispiel befindet sich unter edvodoc/java/docs_15/api/ auch die Java Dokumentation. Der Server edvodoc ist auch im Testbetrieb bzw. bei gesperrtem Internet erreichbar (interner Server!). Die Dokumentation kann natürlich auch in einem lokalen Verzeichnis sein.

Die Einstellung ist im folgenden Bild zu sehen (Window"->"Preferences"->"Installed JREs, dann die entsprechende VM auswählen, Edit, dann .../jre/lib/rt.jar auswählen und Javadoc Location drücken. Dort muss man dann in geeigneter Weise den Pfad auf edvodoc setzen.

Einstellung Javadoc

Labels: ,


 

String mit Umlauten in Bytes umwandeln

UTF-8 ist eine Kodierung für UNICODE. Damit sind alle Zeichen darstellbar. UTF-8 benötigt nicht für alle Zeichen die gleiche Anzahl Bytes, so werden die Zeichen des ASCII-Codes mit einem Byte dargestellt. Viele Zeichen (z.B. Umlaute und 'ß') benötigen 2 Bytes, noch viel mehr (z.B. Chinesische Zeichen) benötigen 3 Bytes.
Die Umwandlung in Bytes ergibt daher Probleme. Probieren Sie folgenden Code im Scrapbook:



// UTF-8 Problem mit Umlauten

// ohne encoding umwandeln
byte[] bytes = "AÄÖÜäöüßA".getBytes();
System.out.printf("%d bytes (Länge 9)\n", bytes.length);
for (byte b : bytes) {
System.out.printf("%02x ", b);
}
System.out.println(new String(bytes));

Für deutschen Zeichensatz genügt ein Encoding, welches über eine Tabelle jedem Zeichen aus unserem Zeichensatz nur ein Byte zuordnet. Wir können z.B. ISO-8859-1 verwenden:



// mit encoding umwandeln
byte[] bytes = "AÄÖÜäöüßA".getBytes("ISO-8859-1");
System.out.printf("%d bytes (Länge 9)\n", bytes.length);
for (byte b : bytes) {
System.out.printf("%02x ", b);
}
System.out.println(new String(bytes, "ISO-8859-1"));

Scrap Book zum runterladen (Achtung UTF-8)

Weitere Informationen

unterstützte encodings in Java
Unicode for Programmers
Java Tutorials - Converting Non-Unicode Text

Labels:


Sonntag, 14. Dezember 2008

 

Programmierblog auf blogspot

Seit einigen Jahren gibt es in der Schule, in der ich Programmieren unterrichte ein Blog, in dem ich immer wieder Artikel zu Programmierthemen verfasst habe. Leider wurde der Server immer wieder umgestellt, sodass das Blog immer wieder offline war.
Deshalb werde ich die alten Artikel nach und nach hier her transferieren und entsprechend rückdatieren.
Nachteilig wird sein, dass ich die Artikel nicht mehr (so einfach) in ein Versionsverwaltungssystem aufnehmen kann.

Donnerstag, 11. Dezember 2008

 

PR2 - Sitzplan erstellen

Jedes Jahr wird für jede Klasse ein Sitzplan benötigt. Meistens beauftragen wir Lehrer einen Schüler oder eine Schülerin, einen Sitzplan zu erstellen. Meistens ist der Sitzplan dann verkehrt herum, aus der Sicht der Schüler. Die kennen sich aber schon! Für Lehrer ist der Plan praktisch wertlos.

Diese Problematik hat zu dem folgenden Beispiel geführt. Der Sitzplan ist also verkehrt herum. Wenn man nun alle Schüler einfach in umgekehrter Reihenfolge auf die Plätze verteilt (am Plan), dann bekommt man einen richtigen Sitzplan.

Aufgabe: Die Schüler sind von vorne links (Schülersicht) beginnend, entlang der Sitzreihen, bis zur letzten Reihe rechts hinten einzugeben. Immer ein Name und in der nächsten Eingabe der Vorname. Bleiben Plätze frei, so sind dort 2 Leerzeilen einzugeben.

In einer Reihe befinden sich 8 Sitzplätze. Es gibt Plätze für maximal 40.

Das Programm soll dann einen Sitzplan ausgeben, wobei immer der Name über dem Familiennamen steht. Zwischen den Schülern soll ein | (senkrechter Strich) stehen. Namen, die zu lange sind, müssen abgeschnitten werden (bei einer Breite vom 80 Zeichen, darf demnach ein Name nur 9 Zeichen haben).

Ein Beispiel:





Lehrer





Steindl
Lukas
Fischer
Ulrich
Wlaschitz
Emanuel
Pointner
Markus
Weissenböck
Gerhard
Resch
Andreas
Ulbrich
Bernhard
Wenninger
Bastian
Berger
Martin
Opelka
Wilhelm
Fritz
Sebastian
Reisinger
Stefan
Treiber
Katja
Habeler
Nicole
Schweiger
Christian
Fasching
Thomas
Ayvere
Erdenic
Berger
Thomas
Mühlhofer
Peter
Kowar
Thomas
Meyer
Clemens
Dragschitz
Gerhard
Gamperl
Mathias


Lupert
Marlene
Popp
Karin
Rosenpichler
Daniela




Obige Liste als Eingabe ergibt dann folgende Ausgabe:

         |Rosenpich|Popp     |Lupert   |         |Gamperl  |Dragschit|Meyer    |
|Daniela |Karin |Marlene | |Mathias |Gerhard |Clemens |

Kowar |Mühlhofer|Berger |Ayvere |Fasching |Schweiger|Habeler |Treiber |
Thomas |Peter |Thomas |Erdenic |Thomas |Christian|Nicole |Katja |

Reisinger|Fritz |Opelka |Berger |Wenninger|Ulbrich |Resch |Weissenbö|
Stefan |Sebastian|Wilhelm |Martin |Bastian |Bernhard |Andreas |Gerhard |

Pointner |Wlaschitz|Fischer |Steindl | | |Lehrer |
Markus |Emanuel |Ulrich |Lukas | | | |

Labels: , ,


 

PR2 - Bilde Summe von Zahlen, die in der selben Spalte stehen (schwierig)

Erstellen Sie ein Programm summe, welches alle Zahlen, die in der selben Spalte enden addiert und die Summe berechnet und ausgibt.
Die Ausgabe soll auf stdout erfolgen, außer es wird die Option -o Ausgabedatei angegeben. Dann soll das Ergebnis in diese Datei geschrieben werden, wobei in diesem Fall nicht nur die Summe in die Datei geschrieben werden soll, sondern alle eingabedaten und die Summe in der richtigen Spalte als letzte Zeile (pro Eingabedatei).
Eine Zahl ist in der richtigen Spalte, wenn die letzte Ziffer an der selben Stelle ist wie die letzte Ziffer der Zahl in der Zeile davor.
Gibt es mehrere Zahlen in einer Zeile, so soll die letzte Zahl berücksichtigt werden.
Das Programm soll bei Angabe von -h eine kurze Hilfe ausgeben.

Beispiel-Eingabe:

Buch          1 Stk a 19.90 19.90 Euro
CD 2 Stk a 15.50 31.00 Euro
DVD 1 Stk a 16.90 16.90 Euro
Versand 8.00 Euro
Wir danken für Ihre Bestellung!

Ausgabe:
Wurde -o summe.txt angegeben, so sollte summe.txt folgenden Inhalt haben:

Buch          1 Stk a 19.90 19.90 Euro
CD 2 Stk a 15.50 31.00 Euro
DVD 1 Stk a 16.90 16.90 Euro
Versand 8.00 Euro
Wir danken für Ihre Bestellung!
75.80

Ohne Ausgabedatei wird einfach die Summe 75.80 angezeigt.

Hinweise:
- Vorzeichen und Exponenten brauchen nicht berücksichtigt werden.
- Die Suche nach der Zahl sollte am Zeilenende beginnen (wobei die Spalte natürlich vom Zeilenanfang zählt).
- Die Zahl endet am ersten Zeichen, das nicht zur Zahl gehört (bzw. am Zeilenanfang). Zur Zahl gehören nur Ziffern und maximal ein Komma (Punkt).
- Fixieren Sie bei der Ausgabe die Anzahl der Nachkommastellen auf 2.

Labels: , ,


 

PR2 - "Ausschneiden" einer Spalte

Schreiben Sie ein Java-Programm cut, welches eine Spalte in der Eingabe ausschneidet, d.h. nur diese Spalte ausgibt. Spalten sind durch Leerzeichen getrennte Strings. Eine Spalte kann auch leer sein (2 Leerzeichen unmittelbar hintereinander). Kommt in einer Zeile keine gesuchte Spalte vor, so ist eine Leerzeile auszugeben.

Aufruf:

   java Cut [-h|-o out] spalte [datei...]
-h ... Hilfe
-o out ... Ausgabe in Datei out
spalte ... Nummer der Spalte (beginnend mit 1)
datei… ... optional mehrere Dateien, keine Datei –> stdin

Beispiel

Eingabe (z.B. test.txt):

  eins zwei drei vier fünf
eins zwei drei
eins zwei
eins

eins zwei drei vier fünf
eins zwei drei vier fünf
zwei drei
drei

Aufruf: java Cut 3 test.txt

  drei
drei



drei
drei
drei
drei

Aufruf: java Cut 1 test.txt

  eins
eins
eins
eins

eins
eins

Labels: , ,


 

PR2 - Beispiele zeichenweise Bearbeitung

Anzahl der Strings in der Eingabe ermitteln

Schreiben Sie ein Programm, welches die Anzahl der Strings in der Eingabe ermittelt. Strings sind beliebige Zeichenketten zwischen Hochkomma (z.B. ein string). Verwenden Sie wieder Schalter zum Erkennen von Strings.

Anzahl der Zahlen ermitteln

Schreiben Sie ein Programm, welches die Anzahl der Zahlen in der Eingabe ermittelt (ganze Zahlen, müssen durch Leerzeichen, Tabulatoren oder Zeilenumbrüchen von anderen Eingaben getrennt sein).

Ziffern zählen

Schreiben Sie ein Java-Programm, welches die Anzahl der Ziffern in der Standadreingabe ermittelt und ausgibt.

Vokale zählen

Schreiben Sie ein Java-Programm, welches die Anzahl der Vokale in der Standadreingabe ermittelt und ausgibt.

Zeichen, Worte und Zeilen zählen

Schreiben Sie ein Java-Programm, welches die Anzahl der Zeichen, Worte und Zeilen in der Standadreingabe ermittelt und ausgibt.

Labels: , ,


 

PR2 - Worte zählen

Schreiben Sie ein Java-Programmm (Projekt wz), welches aus stdin zeichenweise Worte einliest und zählt, wieviele Worte, Zeilen und Zeichen in der Eingabe waren. Unterscheiden Sie Anzahl der Zeichen Brutto (mit Trennzeichen) und Netto (ohne Trennzeichen). Worte definieren wir einfach als Folgen von Zeichen, die mit Whitespace (Leerzeichen ' ', Tabulatoren '\t' und Zeilenumbrüche '\n') begrenzt sind (Ausnahme 1. Zeile, Ende der Eingabe).

Beispieleingabe:



Das ist ein Text und eine Zahl
12324 auch Sonderzeichen


&&%$§" gelten als Worte

Ausgabe:



83 Zeichen brutto, 67 Zeichen netto, 14 Worte, 5 Zeilen

Labels: , ,


 

PR2 - Count

Aufgabe

Schreiben Sie ein Java-Programm, das aus der Eingabe (Dateien oder stdin) die Zeichen aus einer Menge von Zeichen zählt. Die Menge der Zeichen wird als Kommandozeilenargument angegeben. Weitere Argumente sind die Dateien, die gelesen werden. Ist nur ein Parameter angegeben, so soll aus stdin gelesen werden. Kein Parameter ergibt eine Fehlermeldung. Groß-/Kleinschreibung ist nicht zu berücksichtigen.

Aufrufbeispiele (die Startklasse ist in diesem Beispiel Count):

   ~/workspace/count/bin > java Count aeiou file1.txt file2.txt
a -> 23
e -> 30
i -> 14
o -> 12
u -> 17
~/workspace/count/bin > java Count
Fehler: mindestens die Menge der Zeichen angeben!
~/workspace/count/bin > java Count -h
Bestimmen der Häufigkeiten einer Menge von Zeichen.
Aufruf: java Count [-h] zeichenmenge [dateien...]
~/workspace/count/bin > java Count abc
das ist der Text. Beispiel
zweite Zeile.
^D
a -> 1
b -> 1
c -> 0
~/workspace/count/bin >

Nennen Sie das Projekt count-name-klasse, wobei name Ihr Familienname und klasse Ihre Klasse ist (z.B. count-haberstroh-2a)

Labels: , ,


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

Abonnieren Posts [Atom]