ffprog:ffprogjava2016:inputoutput

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
ffprog:ffprogjava2016:inputoutput [2016/09/09 10:57]
Ivo Blöchliger [Input / Output]
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 23: Line 23:
 Mehr Infos auf https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html Mehr Infos auf https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
  
-Eingabe auf der Konsole:+=== Eingabe auf der Konsole ===
 <code java> <code java>
         // Eingabe. Scanner auf System.in (Konsolen-Eingabe)         // Eingabe. Scanner auf System.in (Konsolen-Eingabe)
Line 36: Line 36:
 </code> </code>
  
-=== Textdateien ===+==== 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: 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> <code java>
Line 53: Line 53:
 </code> </code>
  
-**Ausgabe in eine Datei**. Ohne absolute Pfadangabe landen die Dateien im aktuellen Projekt-Verzeichnis.+=== Ausgabe in eine Datei === 
 +Ohne absolute Pfadangabe landen die Dateien im aktuellen Projekt-Verzeichnis.
 <code java> <code java>
         // Ausgabe in Datei         // Ausgabe in Datei
Line 65: Line 66:
 </code> </code>
  
-**Lesen aus einer Datei**.+=== Lesen aus einer Datei ===
 <code java> <code java>
         int x;         int x;
         int y;         int y;
 +        Path datei = Paths.get("ausgabe.txt");
         // Datei öffnen und in einen Scanner einbinden         // Datei öffnen und in einen Scanner einbinden
         // Scanner und Datei werden am Ende vom try-Block automatisch geschlossen.         // Scanner und Datei werden am Ende vom try-Block automatisch geschlossen.
Line 77: Line 79:
         System.out.format("Aus Datei: %d und %d%n", x,y);         System.out.format("Aus Datei: %d und %d%n", x,y);
 </code> </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