Aufgabenloes - Lehrer-Uni

Werbung
Praktische Informatik mit Java - Lösungen
1.1
1
Ziffernsysteme
Das Binärsystem
Seite 8
 Aufgabe 1:
Schreiben Sie die Zahl 130 im Binärsystem und im Hexadezimalsystem.
130(10) = 10000010(2) = 82(16)
 Aufgabe 2:
Im Anhang ist eine Tabelle mit den Hexadezimalzahlen der Zeichen nach dem Unicode
abgedruckt. Lesen Sie ab, welcher Hexadezimalzahl 'ß' entspricht und rechnen Sie sie um
ins Dezimalsystem.
'ß' = DF(16) = 223(10)
6.1. Einführung in Java
Die ersten Java-Applets
Seite 54
 Aufgabe 18: Drucken Sie den Java-Quelltext aus. Unterstreichen Sie mit einer Farbe die Vokabeln, die
zur Sprache Java gehören, und mit einer anderen die, die Sie selbst gewählt haben.
import java.applet.*;
import java.awt.*;
class Versuch1 extends Applet {
Versuch1() {
Button knopfl = new Button("linker Knopf");
Button knopfr = new Button("rechter Knopf");
add(knopfl);
add(knopfr);
}
}
 Aufgabe 19: Fügen Sie zu obiger Klasse noch weitere Buttons hinzu.
import java.applet.*;
import java.awt.*;
class Versuch2 extends Applet {
Versuch2() {
Button knopfeins = new Button("Knopf eins");
Button knopfzwei = new Button("Knopf zwei");
Button knopfdrei = new Button("Knopf drei");
add(knopfeins);
add(knopfzwei);
add(knopfdrei);
}
}
 Aufgabe 20: Fügen Sie im Text der HTML-Seite Ihren Namen und das Datum hinzu.
<HTML>
<HEAD>
<TITLE> Java - Programm 3 </TITLE>
</HEAD>
<BODY>
<P> Reinhold Ley, 30. 1. 2002 </P>
<APPLET code="Programm3.class" width = 300 height =100>
</APPLET>
2
Praktische Informatik mit Java - Lösungen
</BODY>
</HTML>
 Aufgabe 21: Kopieren Sie den Programmtext, benennen Sie ihn um in Programm3 und verändern Sie
ihn: fügen Sie Labels und Buttons in unterschiedlichen Farben hinzu.
import java.applet.*;
import java.awt.*;
public class Programm3 extends Applet {
public Programm3() {
setBackground(Color.yellow);
Button knopfl = new Button("linker Knopf");
knopfl.setBackground(Color.red);
knopfl.setForeground(Color.green);
Button knopfr = new Button("rechter Knopf");
knopfr.setBackground(Color.magenta);
knopfr.setForeground(Color.orange);
Label schriftz = new Label("Hello World");
schriftz.setBackground(Color.pink);
schriftz.setForeground(Color.blue);
add(knopfl);
add(knopfr);
add(schriftz);
}
}
 Aufgabe 22: Ergänzen Sie die Klasse Quadrat so, dass die Diagonalen des Quadrats in roter Farbe
gezeichnet werden.
import java.applet.*; import java.awt.*;
public class Quadrat2 extends Applet {
public Quadrat2() {
Label ueberschr = new Label("Quadrat mit Diagonalen");
add(ueberschr);
}
public void paint(Graphics stift) {
stift.setColor(Color.blue);
stift.drawLine(10, 50, 10, 150);
stift.drawLine(10, 150, 110, 150);
stift.drawLine(110, 150, 110, 50);
stift.drawLine(110, 50, 10, 50);
stift.setColor(Color.red);
stift.drawLine(10, 50, 110, 150);
stift.drawLine(10, 150, 110, 50);
}
}
Aufgabe 23: Beschreiben Sie zuerst, was das folgende Applet darstellen wird und prüfen Sie
anschließend nach:
import java.applet.*; import java.awt.*;
public class demo1 extends Applet {
public demo1() {
setBackground(Color.green);
}
public void paint(Graphics stift) {
stift.setColor(Color.yellow);
stift.fillRect(10, 50, 100, 100);
stift.setColor(Color.blue);
Praktische Informatik mit Java - Lösungen
3
stift.fillOval(10, 50, 100, 100);
stift.setColor(Color.red);
stift.drawString("Dies ist ein Quadrat mit Kreis
darin!", 10, 60);
}
}
 Aufgabe 24: Zeichnen Sie eine Treppe aus gefüllten Rechtecken. Skizzieren Sie sie zuerst auf einem
Blatt Papier und überlegen Sie sich die Koordinaten.
import java.applet.*;
import java.awt.*;
public class Treppe extends Applet {
public Treppe() {
setBackground(Color.yellow);
}
public void paint(Graphics stift) {
stift.setColor(Color.blue);
stift.fillRect(20, 120, 120, 20);
stift.fillRect(20, 100, 100, 20);
stift.fillRect(20, 80, 80, 20);
stift.fillRect(20, 60, 60, 20);
stift.fillRect(20, 40, 40, 20);
stift.fillRect(20, 20, 20, 20);
}
}
 Aufgabe 25: Berechnen Sie die Werte von x*10, 100-y, 10, und y für die ersten drei Durchläufe und
schreiben Sie sie in einer Tabelle auf.
x
1
2
3
4
5
6
7
8
9
10
x*10
10
20
30
40
50
60
70
80
90
100
100-y
99
96
91
84
75
64
51
36
19
0
10
10
10
10
10
10
10
10
10
10
10
y
1
4
9
16
25
36
49
64
81
100
 Aufgabe 26: Die Variable h gebe die Höhe einer Treppenstufe an. Zeichnen Sie mit Hilfe einer ForSchleife eine Treppe aus gefüllten Rechtecken.
import java.applet.*;
import java.awt.*;
4
Praktische Informatik mit Java - Lösungen
public class Treppe2 extends Applet {
int h=20; int x=50; int b=0;;
public void paint(Graphics g) {
for (int y=50; y<200; y=y+h) {
b=b+40;
g.fillRect(x, y, b, h);
}
}
}
 Aufgabe 27: Zeichnen Sie mit Hilfe einer While-Schleife konzentrische Kreise.
import java.applet.*;
import java.awt.*;
public class Kreise extends Applet {
int x=150; int r=0;
public void paint(Graphics g) {
while (r<100) {
r=r+10;
g.drawOval(x-r, x-r, 2*r, 2*r);
}
}
}
 Aufgabe 28: Schreiben Sie eine Klasse für die Folge der ungeraden Zahlen.
import java.applet.*; import java.awt.*;
public class UZahlen extends Applet {
public UZahlen() {
Label Ueberschrift=new Label("Ungerade Zahlen:");
add(Ueberschrift);
for (int n=1; n<30; n=n+2) {
Label L=new Label(" " + n);
add(L);
}
}
}
Praktische Informatik mit Java - Lösungen
5
 Aufgabe 29: Die Zahlenfolge (an) soll die Summe der ersten n ungeraden Zahlen darstellen. Schreiben
Sie eine Klasse.
import java.applet.*; import java.awt.*;
public class Summe extends Applet {
public Summe() {
Label Ueberschrift=new Label("Summe der ungeraden Z.");
add(Ueberschrift);
int s=0;
for (int n=1; n<30; n=n+2) {
s=s+n;
Label L=new Label(" " + s);
add(L);
}
}
}
 Aufgabe 30: Berechnen Sie die Fakultäten bis 10! und speichern Sie sie in einem Array. (5!=1*2*3*4*5.
Definition: 0!=1)
import java.applet.*; import java.awt.*;
public class Faku extends Applet {
public Faku() {
Label Ueberschrift=new Label("Fakultäten:");
add(Ueberschrift);
int f[]=new int[10];
f[0]=1;
for (int n=1; n<10; n=n+1) {
f[n]=f[n-1]*n;
Label L=new Label(" " + f[n]);
add(L);
}
}
}
 Aufgabe 31: Ein beliebiges Dreieck soll gezeichnet und an einer vertikalen Achse gespiegelt werden.
import java.applet.*;import java.awt.*;
class Spiegelung extends Applet {
int x0, y0, m, xSchirm, ySchirm;
Graphics Stift;
public void init() {
m=20; x0=200; y0=200;
setBackground(Color.white);
}
void zeichneAchsen() {
Stift.drawLine(0,y0,2*x0,y0);
Stift.drawLine(x0,0,x0,2*y0);
}
void zeichneEinheiten() {
Stift.drawOval(x0-5,y0-5,10,10);
for (int i=-10; i<=10; i=i+1)
Stift.drawLine(xSchirm(i),y0-3,xSchirm(i),y0+3);
for (int i=-10; i<=10; i=i+1)
Stift.drawLine(x0-3,ySchirm(i),x0+3,ySchirm(i));
}
void zeichneDreieck(double xa, double ya, double xb,
double yb, double xc, double yc) {
6
Praktische Informatik mit Java - Lösungen
Stift.drawLine(xSchirm(xa),ySchirm(ya),
xSchirm(xb),ySchirm(yb));
Stift.drawLine(xSchirm(xb),ySchirm(yb),
xSchirm(xc),ySchirm(yc));
Stift.drawLine(xSchirm(xc),ySchirm(yc),
xSchirm(xa),ySchirm(ya));
}
int xSchirm(double x){
return xSchirm=(int)(x0+m*x);
}
int ySchirm(double y){
return ySchirm=(int)(y0-m*y);
}
public void paint (Graphics g) {
Stift=g;
zeichneAchsen();
zeichneEinheiten();
Stift.setColor(Color.red);
zeichneDreieck(1,1,5,2,3,8);
zeichneDreieck(-1,1,-5,2,-3,8);
}
}
 Aufgabe 32: Erzeugen Sie Zufallszahlen von 1 bis 6 (Würfelzahlen). Würfeln Sie unter Verwendung
einer For-Schleife 10 mal. Berechnen Sie die Summe der 10 Würfelzahlen und geben Sie
zum Schluss den Durchschnitt aus.
import java.applet.*; import java.awt.*;
public class Wuerfel extends Applet {
int f[]=new int[10]; int su=0; double du;
public Wuerfel() {
Label Ueberschrift=new Label("Wuerfel:");
add(Ueberschrift);
for (int n=0; n<10; n=n+1) {
f[n]=(int)(Math.random()*6)+1;
Label L=new Label(" " + f[n]); add(L);
su=su+f[n];
}
du=(double)su/10;
Label durch=new Label("Durchschnitt: "+du);
add(durch);
}
}
 Aufgabe 33: Erzeugen Sie Zufallszahlen von 1 bis 6 (Würfelzahlen) und stellen Sie eine
Häufigkeitsverteilung auf. import java.applet.*; import java.awt.*;
public class Wuerfel2 extends Applet {
int z; int s[]=new int[7];
public Wuerfel2() {
Label Ueberschrift=new Label("Häufigkeit:");
add(Ueberschrift);
for (int n=0; n<10; n=n+1) {
z=(int)(Math.random()*6)+1;
s[z]=s[z]+1;
}
for (int n=1; n<7; n=n+1) {
Label L=new Label(" "+n+" : "+s[n]);
add(L);
}
Praktische Informatik mit Java - Lösungen
}
}
 Aufgabe 35: Ergänzen Sie in obiger Klasse Rechteck3 eine Methode berechneUmfang().
import java.applet.*; import java.awt.*;
public class Rechteck4 extends Applet {
int a, b; String s;
public void init() {
a = 80; b = 50;
setBackground(Color.green);
}
public int berechneFlaeche(int L, int B) {
int F = L * B;
return F;
}
public int berechneUmfang(int L, int B) {
int U = 2*L + 2*B;
return U;
}
public void paint (Graphics stift) {
int A=berechneFlaeche(a,b);
int Um=berechneUmfang(a,b);
s="Laenge: "+a+" Breite: "+b+" Flaeche:"+A+"
Umfang:"+Um;
stift.drawString(s , 20, 40);
stift.fillRect( 20 , 80 , a , b );
}
}
6. 11 Datenströme, Schreiben in Dateien
Seite 94
 Aufgabe 69: Schreiben Sie eine Applikation, die eine Zahl aus einer Datei von der Festplatte liest, sie
um 1 erhöht und wieder auf Platte schreibt.
import java.io.*;
public class LiesZahl {
public static void main(String[]args) throws IOException {
String x;
int z;
File datei = new File("Zahl.txt");
FileReader dateiLeser=new FileReader(datei);
BufferedReader einLeser=new BufferedReader(dateiLeser);
x=einLeser.readLine();
PrintWriter ausgabe = new PrintWriter(System.out);
ausgabe.println("gelesen: "+x);
z=Integer.parseInt(x);
z=z+1;
FileWriter dateiSchreiber=new FileWriter(datei);
PrintWriter aufPlatte = new PrintWriter(dateiSchreiber);
aufPlatte.println(z);
aufPlatte.close();
ausgabe.println("geschrieben: "+z);
ausgabe.close();
}
7
8
Praktische Informatik mit Java - Lösungen
}
 Aufgabe 70: Ergänzen Sie die GUI-Applikation vom vorigen Abschnitt so, dass der eingegebene Text
in einer Datei auf der Festplatte gespeichert wird, beziehungsweise von der Festplatte
gelesen und in der zweiten TextArea angezeigt wird.
Da hier ein Input-Output-Fehler auftreten kann, muss dieser „abgefangen“ werden. Die
kritischen Zeilen, in denen ein Fehler auftreten kann, werden zwischen try und catch
eingerahmt. Man könnte zum Beispiel versuchen, eine Datei von der Festplatte zu lesen,
die es noch gar nicht gibt.
import java.awt.*; import java.awt.event.*; import java.io.*;
public class FenApp4 extends Frame implements ActionListener{
String z; String eingabeText;
Button A = new Button("speichern");
Button B = new Button("gespeicherten Text holen");
TextArea TextEin = new TextArea("Eingabe hier", 3, 40);
TextArea TextAus = new TextArea("Ausgabe: ");
public FenApp4() {
super("Speichern auf Festplatte");
setLayout(new FlowLayout());
add(TextEin);
add(A); add(B);
A.addActionListener(this);
B.addActionListener(this);
add(TextAus);
TextAus.setEditable(false);
setSize(600, 500);
setVisible(true);
addWindowListener(new FensterLauscher());
}
public String lesen() {
try {
File Datei = new File("Test2.txt");
FileReader DateiLeser=new FileReader(Datei);
BufferedReader Leser=new BufferedReader(DateiLeser);
z=Leser.readLine();
DateiLeser.close();
Leser.close();
}
catch (IOException e) {
TextAus.append("Datei nicht gefunden!");
}
return z;
}
public void schreiben(String t) {
try {
File Datei = new File("Test2.txt");
FileWriter DateiSchreiber = new FileWriter(Datei);
PrintWriter Ausgabe = new PrintWriter(DateiSchreiber);
Ausgabe.println(t);
DateiSchreiber.close();
Ausgabe.close();
}
catch (IOException e) {}
}
public void actionPerformed(ActionEvent e) {
String s=e.getActionCommand();
Praktische Informatik mit Java - Lösungen
if (s.equals("speichern")) {
eingabeText = TextEin.getText();
schreiben(eingabeText);
}
if (s.equals("gespeicherten Text holen")) {
z=lesen();
TextAus.append(z);
}
}
public static void main(String[]args) {
new FenApp4();
}
class FensterLauscher extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}
Hier bietet es sich an, mit Seite 150 weiter zu machen. Anstatt auf Festplatte werden dort Daten mit dem
PrintWriter über einen Port ins Netz oder Internet gesendet.
9
10
10
Praktische Informatik mit Java - Lösungen
Client - Server- Programmierung
Seite 154
 Aufgabe 107: Ergänzen Sie die HTML-Seite durch Radio-Buttons und Auswahlmenüs und untersuchen
Sie, in welcher Form die Daten dann an den Server übermittelt werden.
Siehe Seite 155!
Seite 157
 Aufgabe 108: Erstellen Sie eine HTML-Seite mit einer Umfrage über ein interessantes Thema. Speichern
Sie die übermittelten Daten auf der Server-Festplatte. Schreiben Sie ein Programm, das
eine Auswertung dieser Daten in einer Häufigkeitstabelle darstellt.
public void alleLesen(BufferedReader r, PrintWriter a) {
try {
String zeile[]=new String[4];
int alt[]=new int[22];
a.println("HTTP/1.0 200 OK\nContent-type: text/html\n\n");
a.println("<H3>Haeufigkeiten:</H3> ");
int i=0;
zeile[i]=r.readLine();
while (zeile[i] != null) {
while ((zeile[i] != null) && (i<3)){
i=i+1;
zeile[i]=r.readLine();
}
int alter=Integer.parseInt(zeile[1]);
alt[alter]=alt[alter]+1;
i=0;
zeile[i]=r.readLine();
}
for (int k=10; k<22; k=k+1)
a.println("Alter: "+k+"Häufigkeit: "+alt[k]+"<BR>");
}
catch (Exception e) { e.printStackTrace(); }
}
}
 Aufgabe 109: Schreiben Sie ein Server-Programm, das eine HTML-Seite von der Festplatte liest und
prüft, ob ein bestimmtes Wort vorkommt (Suchmaschine).
Seite 159
 Aufgabe 110: Erstellen Sie eine Datenbank mit einer Tabelle der Adressen der Schülerinnen und Schüler
deiner Klasse. Auf einer grafischen Oberfläche soll ein Name eingegeben und nach
Telefonnummern und E-Mail-Adressen gesucht werden.
Wir öffnen eine neue Datenbank in Access (siehe Lehrbuch Seite 28 ff.) und nennen sie Adressen. Darin
erstellen wir eine Tabelle und nennen sie Klassenliste. Wir nennen die Spalten Vorname, Nachname,
Telefon und E-Mail.
Will man auf Daten in einer Access-Datenbank zugreifen, so registriert man zuerst die Datenquelle, indem
man auf
Start - Einstellungen - (in NT: Verwaltung) - Datenquellen (ODBC)
klickt.
Man benutzt den Treiber sun.jdbc.odbc.JdbcOdbcDriver. um eine Verbindung zwischen der Java- und der
Microsoft-Welt herzustellen:
Praktische Informatik mit Java - Lösungen
import java.awt.*; import java.awt.event.*; import java.sql.*;
public class Adressen extends Frame implements ActionListener{
String treiber="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:Adressen";
String user=""; String psst="";
Label l = new Label("Suchen in DB Adressen");
TextField textEin = new TextField(20);
TextArea textAus = new TextArea("",10,60);
Button b = new Button("Los!");
public Adressen() {
setLayout(new FlowLayout());
add(l);
add(b); b.addActionListener(this);
add(textEin);
add(textAus);
setSize(500,300);
setVisible(true);
addWindowListener(new FensterLauscher());
}
public void actionPerformed(ActionEvent e) {
String str = textEin.getText();
String frage="SELECT * FROM Klassenliste WHERE Nachname
LIKE '"+str+"%'";
Connection con = null;
try {
Class.forName(treiber);
con=java.sql.DriverManager.getConnection(url,user,psst);
Statement st= con.createStatement();
ResultSet res= st.executeQuery(frage);
while (res.next()) {
String Vorname=res.getString("Vorname");
textAus.append(Vorname+"\t");
String Nachname=res.getString("Nachname");
textAus.append(Nachname+"\t");
String Telefon=res.getString("Telefon");
textAus.append(Telefon+"\t");
String EMail=res.getString("E-Mail");
textAus.append(EMail+"\n");
}
res.close(); st.close(); con.close();
}
catch (Exception ex) { textAus.append(""+ex.getMessage());}
}
class FensterLauscher extends WindowAdapter {
public void windowClosing(WindowEvent e) {System.exit(0);}
}
public static void main(String[] args) {
new Adressen();
}
}
11
12
10.1
Praktische Informatik mit Java - Lösungen
Servlets
Als Laufumgebung für Servlets (und für Java Server Pages) eignet sich Tomcat. Der Standalone- Server
Tomcat kann auch unter MSWindows benutzt werden, da er in Java geschrieben ist.
Nach der Installation von Tomcat muss man angeben, wo Java-Compiler, Java-Interpreter und die ClassDateien zu finden sind, die bedarfsweise importiert werden. Das kann man in der Datei Autoexec.bat
machen, wie im Lehrbuch Seite 232 beschrieben. Unter Windows 200 / NT geschieht dies durch setzen der
Umgebungsvariablen. Dazu klickt man mit der rechten Maustaste auf Arbeitsplatz und wählt
Eigenschaften - Erweitert - Umgebungsvariablen - Systemvariablen - Neu.
Als neue Systemvariable trägt man ein: CLASSPATH und als ihr Wert zum Beispiel
C:\jdk1.3\lib;C:\Jsdk20\lib;
Der Variablen JAVA_HOME geben wir beispielsweise den Wert C:\jdk1.3 und der Variablen
TOMCAT_HOME den Wert E:\Tomcat, wenn wir dort Tomcat installiert haben.
Im Verzeichnis Tomcat\Jakarta\bin befindet sich die Datei startup.bat, mit der man Tomcat startet. Im
Verzeichnis Tomcat\jakarta\webapps\examples\servlets befinden sich Html-Dateien, die Beispiel-Servlets
aufrufen können. Im Verzeichnis Tomcat\jakarta\webapps\examples\WEB-INF\classes befinden sich die
Class-Dateien dieser Servlets.
Seite 168
 Aufgabe 111: Schreiben Sie ein Servlet Forum, das Textbeiträge zu einem Thema speichert und ausgibt.
Wir öffnen eine neue Datenbank in Access (siehe Lehrbuch Seite 28 ff.) und nennen sie ForumDB. Darin
erstellen wir eine Tabelle und nennen sie ForumTabelle. Wir nennen Feld1 Name und Feld2 Textbeitrag.
Wir registrieren die Datenbank für den Zugriff wie oben beschrieben.
Praktische Informatik mit Java - Lösungen
import java.io.*; import java.sql.*; import javax.servlet.*;
import javax.servlet.http.*;
public class ForumDrei extends HttpServlet
{
String treiber="sun.jdbc.odbc.JdbcOdbcDriver";
String url="jdbc:odbc:ForumDB";
// Datenbankname
String user=""; String psst="";
Connection con = null; Statement s;
String Name=" "; String Textbeitrag=" ";
String frage="select * from ForumTabelle"; // Tabellenname
String ergebnis="OK";
ResultSet resultat;
public void doPost(HttpServletRequest anfrage, HttpServletResponse
antwort) throws ServletException, IOException{
Name = anfrage.getParameter("Name");
Textbeitrag = anfrage.getParameter("Textbeitrag");
antwort.setContentType("text/html");
PrintWriter ausgabe = antwort.getWriter();
ausgabe.println("<HTML><BODY><FONT SIZE=6>Forum:</FONT><BR>");
String eintrag="insert into ForumTabelle
(Name,Textbeitrag) values('"+Name+"','"+Textbeitrag+"')";
try {
Class.forName(treiber);
con=DriverManager.getConnection(url,user,psst);
s=con.createStatement();
if (Textbeitrag.equals(" ")) s.execute(eintrag);
s.execute(frage);
resultat = s.getResultSet();
while (resultat.next()) {
String Name = resultat.getString("Name");
String Textbeitrag = resultat.getString("Textbeitrag");
ausgabe.println(Name + ":\t" + Textbeitrag + "<BR>");
}
}
catch (Exception e) {ergebnis = e.getMessage();}
ausgabe.println(ergebnis+"</BODY> </HTML>");
}
}
13
Herunterladen