e2:ersteschritte2

Unser zweites JAVA-Programm - Die Strafarbeit des kleinen Gauß

Angeblich bekam der Mathematiker Gauß als Erstklässler von seinem Lehrer die Strafarbeit die Zahlen von 1 bis 100 zusammen zu zählen. Praktisch sofort antwortete er „5050“. Da wir lehrerfreundlich sind, wollen wir das so tun, wie es der Lehrer erwartet hat, nämlich bei 1 beginnen und bei 100 aufhören, allerdings mit Computerunterstützung.

Überlege, selbst wie du beim Addieren dieser Zahlen vorgehst. Was muss man sich merken? Was wiederholt sich immer wieder?

Man kann solche Überlegungen in ein Flussdiagramm kleiden:

Mit Hilfe eines Java-Programms kann man das Problem natürlich lösen. Dazu wählt man zunächst im Java-Editor ein neues Frame und platziert zwei Felder für die Eingabe (Anfangs- und Endzahl) und ein Feld für die Ausgabe der Summe:

Die Berechnung soll beim Druck auf den Button gestartet werden: Beispiel ansehen

public void jButton1_ActionPerformed(ActionEvent evt)
  {
    // Ab hier müssen wir selbst das Programm erstellen
    //Eingabe:
    int start = Integer.parseInt(jTextField1.getText());
      // reserviert einen Speicher für Ganzzahlen mit Namen start
      // und füllt ihn mit dem Wert aus dem ersten Textfeld. Da dieser
      // ein String ist, er vorher in eine Ganzzahl int gewandelt werden.
 
    int stopp = Integer.parseInt(jTextField2.getText());
      // reserviert einen Speicher für Ganzzahlen mit Namen stopp
      // und füllt ihn mit dem Wert aus dem zweiten Textfeld.
 
    int summe = 0;
      // reserviert einen Speicher für Ganzzahlen mit Namen summe
      // und setzt den Wert 0 ein.
 
 
 
    for (int zaehler = start; zaehler <= stopp; zaehler++)
         // eine Schleife, in der zunächst ein Ganzzahl-Speicher zaehler
         // angelegt und mit dem Wert des Speichers start gefüllt wird
         // der Wert von zaehler wird nach jedem Durchlauf um 1 erhöht,
         // das macht der Befehl zaehler++
         // (es ginge auch zaehler = zaehler+1)
         // die Schleife wird solange durchlaufen, wie i<=stopp ist (d.h.
	       // in diesem Fall bis zaehler 100 ist)
         // es werden alle Befehle im folgenden Block immer wiederholt:
      {
         summe = summe + zaehler;
         // der Wert des Speichers Summe wird um den Wert des Speichers
         // zaehler erhöht und der neue Wert in den Speicher summe
         // geschrieben.
      }
 
    //Ausgabe:
    jTextField3.setText(String.valueOf(summe));
      // das dritte Textfeld wird mit dem Ergebnis, das im Speicher summe
      // steht, gefüllt. Dazu muss es vorher in einen String verwandelt
      // werden. Damit ist unser Teil des Programms geschrieben.
  }

Teste das Programm, verwende auch anderen Grenzen!

Beschrifte die Textfelder mit Labels aus dem Swing-Paket.

Ändere das Programm so, dass die ersten 100 Zahlen der Folge 4,7,10,13,….. addiert werden.

Die Schrittweite in Aufgabe (3) beträgt 3. Ergänze ein weiteres Eingabefeld, in das man eine Schrittweite eingeben kann. Lösung

Entwickle einen Taschenrechner, der addiert, subtrahiert, multipliziert und dividiert (Fenster ähnlich wie Abbildung). Lösung

Erstellt ein weiteres Programm mit graphischer Oberfläche, das Kubikzahlen addieren kann (d.h. 13, 23, 33 usw.). Lösung

Ein Java-Programm soll die Belohnung des Schachspielerfinders ausrechnen. Zur Erinnerung: Er wollte für das erste Feld des Schachbretts ein Reiskorn, für das zweite 2, für das dritte 4, für das vierte 8, usw. Dabei werden die Zahlen so groß, dass int nicht ausreicht (int reicht von ca. -2 Milliarden bis 2 Milliarden). Es gibt den Typ long, das sind Ganzzahlen von ca. $-9\cdot10^{18}$ bis $9\cdot10^{18}$. Trotzdem wird die Summe noch zu groß, deswegen soll das Schachfeld nur 60 Felder groß sein. Mit dem Typ double aus Aufgabe 8 kann man auch den korrekten Wert für dieses Problem ermitteln. Lösung

Mit Hilfe des neuen Speichertyps double kann man mit Kommazahlen rechnen. Berechnet damit, auf wie viel ein Kapital von 100 € nach 20 Jahren angewachsen ist, wenn man jährlich mit 4% verzinst und die Zinsen dem Kapital zugeschlagen werden. Lösung

Untersucht die Summe aller Stammbrüche, d.h. 1/1 + 1/2 + 1/3 + 1/4 + 1/5 + ….. Nähert sie sich einem Grenzwert? Testet dazu die Summe der ersten 100, der ersten 10000 und der ersten Million dieser Brüche. Gauss.java Lösung

Jetzt soll die Summe der inversen Quadrate 1/12 + 1/22 + 1/32 + …. untersucht werden. Versucht auch herauszufinden, welcher besonderen Zahl sich dieser Grenzwert nähert. Lösung

Die jährliche Wanderung der Menschen von den Städten aufs Land bzw. umgekehrt werde durch folgendes Diagramm beschrieben: Geht davon aus, dass zu Beginn des ersten Jahres 200 Menschen in der Stadt und 100 auf dem Land leben und erstellt ein Programm, das die Menschen in der Stadt und auf dem Land nach einer bestimmten Anzahl Jahren berechnet. Untersuche damit, wie sich die Bevölkerungszahlen langfristig entwickeln! (Lösung „javabeispiele\Kapitel_4\stadtland.java“) Eine Lösung mittels grafischer Oberfläche könnte so aussehen:

  public void jButton1_ActionPerformed(ActionEvent evt)
  {
     //Einlesen der Textfelder, Umwandeln der Werte in Double-Variablen
     //Die Textfelder Stadt & Land enthalten zu Beginn die Werte 200 und 100
     double Stadt = Double.parseDouble(jTextFieldStadt.getText());
     double Land = Double.parseDouble(jTextFieldLand.getText());
     int Jahre = Integer.parseInt(jTextFieldJahre.getText());
     //Simulation der Bevölkerungsentwicklung. Die Schleife wird sooft
     //durchlaufen, wie der Wert der Variablen Jahre ist:
     for(int i = 1 ; i <= Jahre; i++)
     {
       //Berechne die Population ein Jahr später:
       Double StadtNeu = Stadt * 0.96 + Land * 0.01;
       Land = Stadt * 0.04 + Land * 0.99;
       Stadt = StadtNeu;
     }
     //Ausgabe der Ergebnisse:
     jTextFieldStadt.setText(Double.toString(Stadt));
     jTextFieldLand.setText(Double.toString(Land));
  }
  • /var/www/infowiki/data/pages/e2/ersteschritte2.txt
  • Zuletzt geändert: 2017/09/22 13:38
  • von admin03