Kurs:Einführung in die Informatik mit Java/Kurs 2007/Part 3/Kapitel 9B

Aus Wikiversity

Zusammenfassung[Bearbeiten]

Das Kapitel startet hier und endet mit der Sitemap. --Michael Reschke 19:58, 16. Jun. 2007 (CEST)

  • "Ein Operand ist ein Wert, auf den ein Operator einwirkt." (Zitat), z. B. bei 13 - 5 die Literale 13 und 5 die Operanden und - ist der Operator
  • "Unäre Operatoren" haben nur einen Operanden, z. B. -73
  • Regel: " Wenn beide Operanden Ganzzahlen sind, dann ist die Operation eine Ganzzahl-Operation. Wenn einer oder beide Operanden eine Gleitpunktzahl ist, dann ist die Operation eine Gleitpunkt-Operation." (Quelle)

Die Lösung der Aufgabe bei Frage 13 könnte IMHO auch lauten:

public class Frage13 {

    public static void main(String[] args) {
       
        int x = 37 ;

        if ( x % 2 <= 0 )

          System.out.println( x + " Ist gerade " );
        else
          System.out.println( x + " Ist ungerade " );
    }
}

Die Einführung schlägt als "Operator" (?) == vor... Es geht sich darum, dass bei einer geraden Zahl der Rest = 0, nicht aber 1 sein darf.

Hinweis: Der Vergleichsoperator <= ist bei der Division mittels % tatsaechlich nicht notwendig. Denn
x % 2
kann nur die Werte 1 oder 0 annehmen. (Der Rest einer ganzzahligen Division von "x" durch die Zahl 2 kann nur 0 oder 1 sein!) Demzufolge ist der Vergleich auf "kleiner oder gleich Null" immer nur dann erfuellt, wenn die Division den Wert Null ergeben hat. Somit kann auch auf Gleichheit (also "==") geprueft werden. --Exxu 23:52, 25. Jun. 2007 (CEST)
  • Bei Konstanten wird mittels vorangestelltem final festgelegt, dass sich ein Wert für die Laufzeit eines Programms nicht ändern wird, z. B.
    final double HALTBAR = 0.045;
    

Kapitel durchgearbeitet. --Michael Reschke 21:58, 16. Jun. 2007 (CEST)

  • Man bezeichnet derartig deklarierte "Variable" daher auch gern als Konstante. Das heisst, als Speicherplatz, dessen dort gespeicherter Wert konstant bleibt. Als Erkennungsmerkmal schreibt man derartige "Variable" gern in Grossbuchstaben. --Exxu 23:55, 25. Jun. 2007 (CEST)

Programmieraufgaben[Bearbeiten]

3 Programmieraufgaben. --Michael Reschke 19:58, 16. Jun. 2007 (CEST)

Aufgabe 1 (Niederschlag)[Bearbeiten]

Meine Lösung:

package kapitel9B_Aufgaben;

public class Niederschlag {

	public static void main(String[] args) {

		// Deklariere und initialisiere die Variablen
		int    april = 12,
		       mai   = 14,
		       juni  = 8;
		
		// Hier folgt nun der Code für die Ausgabe
		System.out.println("Niederschlag im April:" + '\t' + april);      
		System.out.println("Niederschlag im Mai:" + '\t' + mai); 
		System.out.println("Niederschlag im Juni:" + '\t' + juni); 
		
		System.out.println("Durchschnitt:" + '\t' + '\t' + ((juni + mai + april) / 3.0));
	}
}

Ich deklariere und initialisiere die Monatsvariablen mit dem primitiven Datentypen "int", für die Ausgabe reichen Ganzzahlen vollkommen. Die Ausgabe beim Durchschnittswert wird im vorliegenden Fall durch die Division mit einem Gleitpunktwert (3.0) erreicht. --Michael Reschke 22:19, 16. Jun. 2007 (CEST)

Aufgabe 2 (Trigonometrie)[Bearbeiten]

Meine Lösung:

package kapitel9B_Aufgaben;

public class Trigonometrie {

	public static void main(String[] args) {

		double wert,
		       sinx ,
		       cosx,
		       summe;
		
		wert  = 0.5235;
		sinx  = Math.sin( wert );
		cosx  = Math.cos( wert );
		
		summe = (sinx * sinx) + (cosx * cosx);
		
		System.out.println("Sinus: " + sinx + " Cosinus: " + cosx + " Summe: " + summe );
	}
}
Die Aufgabe hier ist meiner Meinung nach für das Überprüfen der Richtigkeit der errechneten Werte vollkommen unbrauchbar. Denn egal, was hier als Variable mit der Bezeichnung "wert" zugewiesen wird, es muss ohnehin etwas rauskommen, was 1.0 ist, oder jedenfalls sehr dicht an Eins dran liegt (also etwa 0.999999...). Und dies ist nunmal so, weil gilt: sin²(x) + cos²(x) = 1. --Exxu 19:00, 18. Jun. 2007 (CEST)

Aufgabe 3 (Bogenmaß)[Bearbeiten]

"Problem beim Verständnis der Aufgabenstellung" --Michael Reschke 18:44, 18. Jun. 2007 (CEST)

Meine Lösung:

package kapitel9B_Aufgaben;

public class Bogenmaß {

	public static void main(String[] args) {

	double bogenmass,
		   grad = 30;
	
	// bogenmass = grad * Math.PI/180
	// Aber jetzt ist der Winkel 30 Grad (den Sie in Bogenmaß konvertieren werden).

	bogenmass = grad * Math.PI/180;
	
	System.out.println("Winkel " + grad + "; Bogenmaß " + bogenmass);
	}
}

Bei dieser Aufgabe ist mir zu unklar formuliert, ob die Aufgabe "Editieren Sie das vorherige Programm, so dass es die gleichen Dinge tut." sich auf die Aufgabe 2 bezieht oder aber auf den einzelnen Befehl! Obiges Beispiel macht das nur in Bezug auf den vorhergehenden Befehl.

Ich vermute, dass Aufgabe 2 hier gemeint ist. Bei mir hapert es momentan eher etwas am mathematischen Verständnis dessen, worum es genau geht. --Michael Reschke 23:42, 16. Jun. 2007 (CEST)

Einmischen
Java kann ich zwar nicht, dafür aber allgemein Programmieren und die Mathematischen Kenntische dazu habe ich auch.
Ich sage mal wie ich das verstehe:
Aufgabe 2 war es mit den Sinus von ... Bogenmass zu berechen.
Aufgabe 3 ist dann den Sinus von ... Grad zu berechen.
Das sollte dann etwa so aussehen (Syntaxfehler sind Wahrscheinlich, ich kann kein Java)
package kapitel9B_Aufgaben;

public class Trigonometrie_Grad {

	public static void main(String[] args) {

		double sinx ,
		       cosx,
		       summe,
		       bogenmass,
		       grad = 30;

		grad  = 0.5235;
		bogenmass = grad * Math.PI/180;
		sinx  = Math.sin( bogenmass );
		cosx  = Math.cos( bogenmass );
		
		summe = (sinx * sinx) + (cosx * cosx);
		
		System.out.println("Sinus: " + sinx + " Cosinus: " + cosx + " Summe: " + summe );
	}
}
Wenn dich interresiert was man mit Sinus/Kosinus machen kann, kannst du das hier fragen, ich werde es dann probieren zu erklären.
-- MichaelFrey 18:16, 18. Jun. 2007 (CEST)
Ich werde es mir noch mal ansehen... Ehrlich gesagt war ich / bin ich zu faul, mir zu überlegen und rauszusuchen, worum es genau geht und in welcher Maßeinheit mir die Sinus- und Cosinus-Werte ausgegeben werden. Werde da noch mal was frickeln. Ich hatte heute einige referierende Mathestudenten genau zu dem Thema, weshalb ich den ganzen Stoff heute so im Schnelldurchlauf nochmal vermittelt bekam... Referatsthema war "Wie vermittel ich Mathe im Matheunterricht?" und sie haben halt dafür gesorgt, dass wir auch wissen, wovon gesprochen wird: 30 Minuten-Dauerbeschallung mathematischer Formeln ;-) --Michael Reschke 18:44, 18. Jun. 2007 (CEST)
LOL 30 Minuten Unterricht von Mathe Stunde.
Die Ausgabe der Sinus/Cosinus Funktion ist übrigens Einheitslos, nur die Eingabe kann in 3 verschieden Masseinheiten sein (Grad, Neugrad und Bogenmass)
-- MichaelFrey 18:51, 18. Jun. 2007 (CEST)
dazwischenquetsch @Michael Frey: auch die Argumente der Winkelfunktionen sind einheitslose Dezimalzahlen. Denn sowohl Grad, als auch Neugrad oder Bogenmaß stellen nur Bezeichnungen dar, die es dem Menschen ermöglichen sollen, den Wert des Arguments richtig zu interpretieren. Der Winkelfunktion selbst ist das total egal, was sich der Mensch bei diesen Eingabewerten gedacht hat. Sie erwartet einen realen Zahlenwert und berechnet das Ergebnis so, als ob es sich um einen als "Bogenmaß" interpretierbaren Wert handeln würde. --Exxu 19:16, 18. Jun. 2007 (CEST)
Ich schaue es mir an... Asche auf mein Haupt: Letzter Kontakt mit Herrn und Frau Sinus-Cosinus irgendwann um 1999 / 2000, letzter Kontakt mit Mathematik irgendwann so um die Jahresmitte 2001. Dann heute wieder grausiges Erwachen in der Uni ;-) Ich schaue es mir an... --Michael Reschke 18:57, 18. Jun. 2007 (CEST)
Im obigen Beispiel von Michael Frey streiche aber bitte die Zeile
		grad  = 0.5235;
Das soll ja gerade erst in der folgenden Zeile in Bogenmaß umgerechnet werden. Und der Sinn dieser Aufgabe ist es nun, festzustellen, dass sowohl in Aufgabe 2 (mit der "wert"-Variablen von 0.5235), als auch in der jetzigen Aufgabe (mit der "grad"-Variablen von 30 und darauffolgender Umrechnung in die "bogenmass"-Variable) jeweils dasselbe Ergebnis rauskommt. Allerdings halte ich diese Aufgabe für didaktisch zweifelhaft, da (wie bereits zur Aufgabe 2 bemerkt) als "summe"-Variable ohnehin 1 rauskommt. --Exxu 19:08, 18. Jun. 2007 (CEST)
Mein neuer Lösungsversuch

Ich habe eine Zeile für die Umrechnung hinzugefügt und eine neue Variable. Das Ergebnis bleibt, wie Exxu geschrieben hat. --Michael Reschke 16:38, 19. Jun. 2007 (CEST)

package kapitel9B_Aufgaben;

public class TrigoGRAD {

	public static void main(String[] args) {

    // Ein vermutlich fehlgeleiteter Versuch, ich habe keine Ahnung, wo es Grad und
	// wo es Bogenmass-Einheiten gibt...
		
	double wert ,
	       bogenmass ,
	       sinx ,
	       cosx,
	       summe;
	
	// Hier erfolgt die Umrechnung von 30 Grad nach ... Bogenmaß
	wert  = 30;
	bogenmass = wert * Math.PI/180;
	
	// Kontrolle: Das Programm soll die Werte in den beiden Variablen ausgeben.
	System.out.println("Grad (wert): " + wert +  "; Bogenmaß: " + bogenmass);
	
	sinx  = Math.sin( bogenmass );
	cosx  = Math.cos( bogenmass );
	
	summe = (sinx * sinx) + (cosx * cosx);
	
	System.out.println("Sinus: " + sinx + " Cosinus: " + cosx + " Summe: " + summe );
		
	}
}

Das Ergebnis lautet dann (Ausgabe):

Grad (wert): 30.0; Bogenmaß: 0.5235987755982988
Sinus: 0.49999999999999994 Cosinus: 0.8660254037844387 Summe: 1.0

Bei der Aufgabe 2 war die Ausgabe:

Sinus: 0.49991445538358353 Cosinus: 0.866074787358768 Summe: 1.0