ffprog:ffprogjava2016:inputoutput

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revision Both sides next revision
ffprog:ffprogjava2016:inputoutput [2016/09/09 09:17]
Ivo Blöchliger created
ffprog:ffprogjava2016:inputoutput [2016/09/09 20:50]
Ivo Blöchliger [SOI - Aufgaben]
Line 1: Line 1:
 {{backlinks>.}} {{backlinks>.}}
-==== Input / Output ==== +===== Input / Output ===== 
-=== Konsole === +==== Konsole ==== 
-Output auf die Konsole:+=== Output auf die Konsole ===
 <code java> <code java>
         int a = 24;         int a = 24;
Line 20: Line 20:
         // (Viel) mehr Info zu format: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html         // (Viel) mehr Info zu format: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
 </code> </code>
 +
 +Mehr Infos auf https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
 +
 +=== Eingabe auf der Konsole ===
 +<code java>
 +        // Eingabe. Scanner auf System.in (Konsolen-Eingabe)
 +        Scanner scan = new Scanner(System.in);
 +        System.out.print("Ihr Name bitte: ");
 +        // Nächste Zeile einlsesen
 +        String name = scan.nextLine();
 +        System.out.print("Ihr Alter: ");
 +        // Achtung: Diese Methode produziert Fehler, wenn nicht eine Ganzzahl eingegeben wird.
 +        int alter = scan.nextInt();
 +        System.out.format("%s ist %d Jahre alt.\n", name,alter);
 +</code>
 +
 +==== Textdateien ====
 +Hinweis: Operationen mit Dateien können Fehler verursachen (z.B. weil die Datei nicht (mehr) existiert). Diese Fehler können entweder abgefangen werden (mit try / catch) oder "ignoriert" werden, indem man die main-Methode wie folgt erweitert:
 +<code java>
 +public static void main(String[] args) throws IOException {
 +   // ....
 +}
 +</code>
 +Für die Manipulation von Datei sind einige Imports nötig. Netbeans schlägt diese Imports vor, manuelles Eingeben bzw. Abschreiben ist nicht nötig:
 +<code java>
 +import java.io.BufferedWriter;
 +import java.io.IOException;
 +import java.nio.file.Files;
 +import java.nio.file.Path;
 +import java.nio.file.Paths;
 +import java.util.Scanner;
 +</code>
 +
 +=== Ausgabe in eine Datei ===
 +Ohne absolute Pfadangabe landen die Dateien im aktuellen Projekt-Verzeichnis.
 +<code java>
 +        // Ausgabe in Datei
 +        Path datei = Paths.get("ausgabe.txt");
 +        // Datei öffnen (wird am Ende des try-Blocks automatisch geschlossen)
 +        try (BufferedWriter writer = Files.newBufferedWriter(datei)) {
 +            // Daten schreiben.
 +            writer.write(String.format("%d%n%d%n",a,b));
 +        }
 +        System.out.format("Habe die Zahlen %d und %d in die Datei %s geschrieben.%n", a,b,datei.toRealPath());
 +</code>
 +
 +=== Lesen aus einer Datei ===
 +<code java>
 +        int x;
 +        int y;
 +        Path datei = Paths.get("ausgabe.txt");
 +        // Datei öffnen und in einen Scanner einbinden
 +        // Scanner und Datei werden am Ende vom try-Block automatisch geschlossen.
 +        try (Scanner scanner = new Scanner(Files.newInputStream(datei))) {
 +            x = scanner.nextInt();
 +            y = scanner.nextInt();
 +        }
 +        System.out.format("Aus Datei: %d und %d%n", x,y);
 +</code>
 +
 +===== Aufgaben =====
 +==== Addition ====
 +Gegeben ist eine Text-Datei mit einer positiven natürlichen Zahl pro Zeile. 
 +Die erste Zahl gibt an, wie viele Serien in der Datei gespeichert sind.
 +Für jede Serie gibt die erste Zahl an, wie viele Zahlen gespeichert sind.
 +
 +Die Ausgabe (auf die Konsole) ist ebenfalls eine Zahl pro Zeile, die der Summe aller Zahlen einer Serie entspricht.
 +Beispiel: (2 Serien, die erste mit 3 Zahlen (1,2,3), die zweite mit 2 Zahlen (1,2)):
 +<code text>
 +2
 +3
 +1
 +2
 +3
 +2
 +1
 +2
 +</code>
 +Das korrekte Resultat in diesem Fall wäre:
 +<code text>
 +6
 +3
 +</code>
 +Beispieldateien:
 +  * Input: {{ :ffprog:ffprogjava2016:other.txt |other.txt}}. Korrekter Output: {{ :ffprog:ffprogjava2016:other-sol.txt |other-sol.txt}}
 +  * Input: {{ :ffprog:ffprogjava2016:simple.txt |simple.txt}}. Korrekter Output: {{ :ffprog:ffprogjava2016:simple-lsg.txt |simple-lsg.txt}}
 +
 +==== SOI - Aufgaben ====
 +=== CableCar ===
 +Aufgabentext: https://soi.ch/contests/2016/round1/cablecar/
 +
 +  * Cable-Car Instanzen und Lösungen. Aufgabe 1 {{ :ffprog:ffprogjava2016:cable-10-100.txt |}} {{ :ffprog:ffprogjava2016:cable-10-100-output.txt |}} {{ :ffprog:ffprogjava2016:cable-50-10000.txt |}} {{ :ffprog:ffprogjava2016:cable-50-10000-output.txt |}} {{ :ffprog:ffprogjava2016:cable-100-1000000.txt |}} {{ :ffprog:ffprogjava2016:cable-100-1000000-output.txt |}}
 +  * Cable-Car Aufgabe 2: {{ :ffprog:ffprogjava2016:cable2-100-1000-1000000.txt |}} {{ :ffprog:ffprogjava2016:cable2-100-1000-1000000-output.txt |}}
 +
 +== Lösungsvorschlag Cablecar Aufgaben 1 und 2 ==
 +<hidden Anzeigen>
 +<code java>
 +        Path datei = Paths.get("cable2-100-1000-1000000.txt");
 +        // Speicher für die Ausgabe
 +        ArrayList<String> lines = new ArrayList<>();
 +        try (Scanner scanner = new Scanner(Files.newInputStream(datei))) {
 +            int n = scanner.nextInt();
 +            for (int i=0; i<n; i++) {
 +                int m = scanner.nextInt();
 +                boolean ok = true;
 +                int a = scanner.nextInt();
 +                int b = scanner.nextInt();
 +                int d = b-a; // Differenz zwischen Masten 0 und 1
 +                for (int j=2; j<m; j++) {
 +                    int c = scanner.nextInt();
 +                    if (c-b!=d) { // Mit letztem Masten vergleichen
 +                        ok = false;
 +                    }
 +                    b = c;  // Aktueller Mast wird letzter Mast
 +                }
 +                lines.add(String.format("Case #%d: %s", i+1, ok ? "yes" : "no"));
 +            }
 +        }
 +        // Einzeiler, das eine Liste von Strings in eine Datei schreibt.
 +        Files.write(Paths.get("output.txt"), lines);
 +</code>
 +</hidden>
  • ffprog/ffprogjava2016/inputoutput.txt
  • Last modified: 2016/09/11 21:05
  • by Ivo Blöchliger