erstellt 31.05.03 übersetzt 22.06.03; überarbeitet 01.02.05; © Copyright 2003 - 2005 Deutsche Übersetzung Heinrich Gailer


Kapitel 47 Programmieraufgaben


Aufgabe 1 — Summe der geraden, ungeraden und aller Elemente

Vervollständigen Sie das folgende Programm, so dass es die Summe aller Elemente des Arrays, die Summe der geraden Elemente und die Summe der ungeraden Elemente errechnet. Setzen Sie voraus, dass alle Zahlen null oder positiv sind. Gerade Integer sind solche, für die N%2 == 0 ist.

class DreiSummen
{

  public static void main ( String[] args )
  {
    int[] array = {3, 2, 5, 7, 9, 12, 97, 24, 54};

    // drei Variablen für die Summen deklarieren und initialisieren


    // Summen berechnen
    for ( int index = 0; index < array.length; index++ )
    {
    }

    // Summen ausgeben
    System.out.println(  );

  }
}

Zurück zum Inhaltsverzeichnis.


Aufgabe 2 — Die zwei größten Elemente

Vervollständigen Sie das folgende Programm, so dass es die zwei größten Elemente des Arrays berechnet und ausgibt.

class DieZweiGroessten
{

  public static void main ( String[] args )
  {
    int[] array = {3, 1, 5, 7, 4, 12, -3, 8, -2};

    // Variablen für die zwei größten Elemente deklarieren und initialisieren


    // die zwei größten Elemente berechnen
    for ( int index= ; index < array.length; index++)
    {
    }

    // die zwei größten Elemente ausgeben
    System.out.println(  );

  }
}

Zurück zum Inhaltsverzeichnis.


Aufgabe 3 — Elemente umkehren

Vervollständigen Sie das folgende Programm, so dass es die Reihenfolge der Werte in array umkehrt und sie ausgibt.

In der ersten Version des Programms gibt es nur ein Array und seine Werte werden durch eine etwas trickreiche Programmierung umgekehrt.

class ArrayUmkehren1
{

  public static void main ( String[] args )
  {
    int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14};

    // Daten umkehren
    for ( int j = 0; j < seien Sie vorsichtig hier; j++)
    {

    }

    // neuen Daten ausgeben
    for ( int j = 0; j < array.length; j++)
    {

    }

  }
}

Schreiben Sie jetzt ein weiteres Programm, das zwei Arrays verwendet. Das erste Array array wird nicht geändert. Das zweite Array ziel bekommt die Elemente von array in umgekehrter Reihenfolge.

class ArrayUmkehren2
{

  public static void main ( String[] args )
  {
    int[] array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14};
    int[]  ziel =

    // die Daten von array in umgekehrter Reihenfolge nach ziel kopieren
    for ( int j = 0; j < be careful here; j++)
    {

    }

    // Ergebnis ausgeben
    for ( int j = 0; j < ziel.length; j++)
    {

    }

  }
}

Zurück zum Inhaltsverzeichnis.


Aufgabe 4 — Tonfilter

Ein Tonsignal wird manchmal als Liste von int-Werten gespeichert. Die Werte repräsentieren die Intensität des Signals in aufeinanderfolgenden Zeitintervallen. Natürlich wird in einem Programm das Signal durch ein Array repräsentiert.

Oft ist in dem Signal ein kleiner Anteil von Störgeräuschen enthalten. Störgeräusche sind üblicherweise kleine, momentane Änderungen der Tonhöhe. Ein Beispiel ist das "Geräusch", das zusätzlich zum Ton eines AM Radios zu hören ist.

Das Glätten des Tons entfernt das Störgeräusch und verbessert die Wahrnehmung der Tonqualität. Diese Aufgabe besteht darin, die Werte eines Integerarrays zu glätten.

Angenommen, dass die ursprünglichen Werte in dem Array "signal" sind. Berechnen Sie das geglättete Array, in dem Sie folgendes tun: Jeder Wert geglaettet[N] ist der Durchschnitt von drei Werten: signal[N-1], signal[N] und signal[N+1].

Berechnen Sie für das erste Element von geglaettet den Durchschnitt der ersten zwei Elemente von signal. Berechnen Sie für das letzte Element von geglaettet den Durchschnitt der letzten zwei Elemente von signal.

Verwenden Sie dafür Integerarithmetik , so dass die Werte in geglaettet Integer sind.

class Glaetten
{

  public static void main ( String[] args )
  {
    int[] signal  = {5, 5, 4, 5, 6, 6, 7, 6, 5, 4, 1, 4};
    int[] geglaettet

    // berechnen Sie den geglätteten Wert für jeden Slot
    // von Array geglaettet
    geglaettet[0]  =
    geglaettet[ signal.length-1 ] =
    for (  )
    {

    }

    // Geben Sie den Input aus
    for ( int j = 0; j < geglaettet.length; j++)
    {

    }

    // Geben Sie das Ergebnis aus
    for ( int j = 0; j < geglaettet.length; j++)
    {

    }

  }
}

Denken Sie daran, wenn Sie die Ergebnisse interpretieren, dass Integerdivision den Rest verwirft. Sie berechnet keinen gerundeten Wert. Hier ist, was das Programm ausgibt.

C:\data\JavaNotes>java Glaetten
signal: 1 5 4 5 7 6 8 6 5 4 5 4
geglaettet: 3 3 4 5 6 7 6 6 5 4 4 4
C:\data\JavaNotes>

Zurück zum Inhaltsverzeichnis.


Aufgabe 5 — Daten-Optimierer (double)

Angenommen, dass Sie an der Berechnung des durchschnittlichen Säuregehalts von Kaffee intressiert sind, wie er in den Cafés in Ihrer Heimatstadt serviert wird. Sie besuchen viele Cafés und tauchen Ihr pH-Messgerät in Kaffeeproben. Sie zeichnen das Ergebnis in einer Textdatei wie der folgenden auf. Die erste Zeile zeigt die Anzahl der Werte an, die folgen werden.

13
5.6
6.2
6.0
5.5
5.7
6.1
7.4
5.5
5.5
6.3
6.4
4.0
6.9

Allerdings wissen Sie, dass Ihr pH-Messgerät manchmal falsche Ergebnisse liefert. Also entschließen Sie sich den Messwert, der am weitesten vom Durchschnitt entfernt ist, nicht zu berücksichtigen.

Erzeugen Sie eine Textdatei wie die oben stehende oder eine mit ähnlichen Daten. Schreiben Sie jetzt ein Programm, dass die Daten in ein Array einliest (verwenden Sie Input-Umlenkung wie sie im Kapitel 22 erklärt wird). Berechnen Sie den Durchschnitt aller Daten. Durchsuchen Sie jetzt das Array, um den Wert zu finden, der am weitesten (in jeder Richtung) vom Durchschnitt entfernt ist. Setzen Sie den Wert auf -1, um anzuzeigen, dass der Wert nicht aufgenommen wird. Berechnen und geben Sie den neuen Durchschnitt aus.

Hier ist ein Ablauf des Programms:

C:\>java KaffeeDurchschnitt < KaffeeDaten.txt
array[ 0 ] = 5.6
array[ 1 ] = 6.2
array[ 2 ] = 6.0
array[ 3 ] = 5.5
array[ 4 ] = 5.7
array[ 5 ] = 6.1
array[ 6 ] = 7.4
array[ 7 ] = 5.5
array[ 8 ] = 5.5
array[ 9 ] = 6.3
array[ 10 ] = 6.4
array[ 11 ] = 4.0
array[ 12 ] = 6.9
Durchschnitt: 5.930769230769231
entferntester Wert: 4.0
neuer Durchschnitt: 6.091666666666668

Hinweis: dies ist eine schwierigere Aufgabe als Sie denken mögen. Ich stelle sie manchmal in den Prüfungen Mitte des Semesters und manche Studenten können sie nicht lösen.

Zurück zum Inhaltsverzeichnis.


Ende der Aufgaben