Zur IDE-Software Code::Blocks (für C++) finden Sie bei Bedarf ein Online-User-Manual unter codeblocks.org/user-manual. Zur (u.a. Java-)IDE Eclipse finden Sie ein Tutorial zum Beispiel unter java-tutorial.org.
Schreiben Sie bitte zum allerersten EInstieg das klassische Hello, world!-Programm in C++ und in Java.
(Diesen spannenden Code gibt (oder gab) es übrigens auch als Schutzhülle für Smartphones, wie nebenstehend gezeigt.
Quelle:
www.redbubble.com/ de/ people/ rapplatt/ works/ 9123349-hello-world-c?p=iphone-case.)
Zugegeben: in Code Blocks wird Ihnen das entsprechende C++-Programm bereits beim Starten eines neuen C++-Projektes
angeboten. Wenn Ihnen das also daher zu langweilig ist, schauen Sie sich stattdessen ein
Video an, das Ihnen (in etwa 12 Minuten) erklärt,
wie Sie mit Microsoft Visual Studio© diese Aufgabe lösen können.
Oder gehen Sie direkt zu Aufgabe 1-1.
Teil 1: C++
Schreiben Sie bitte zwei Funktionen ausgabe() mit den Prototypen
void ausgabe(char c);
bzw.
void ausgabe(char *s);
die dafür sorgen, dass entsprechend ein einzelnes Zeichen oder aber eine ganze Zeichenkette schön
durch Sterne eingerahmt auf den Bildschirm ausgegeben wird.
So soll
ausgabe('A');
dafür sorgen, dass folgende Ausgabe auf dem Bildschirm erscheint:
***** * A * *****
Analog soll
ausgabe("Autobahnraststaette");
für die nachstehende Bildschirmausgabe sorgen:
*********************** * Autobahnraststaette * ***********************
Teil 2: Java
Schreiben Sie entsprechend in einer Java-Klasse Demo bitte die beiden oben beschriebenen Methoden ausgabe() mit den Parametertypen char bzw. String.
Erweitern Sie Ihre Lösung(en) aus Aufgabe 1-1 bitte um die folgende dritte Version von ausgabe() mit dem nachfolgend genannten C++-Prototypen bzw. in Java der Parameterliste String, char.
void ausgabe(char *s, char zeichen);
wobei die Arbeitsweise analog wie zuvor sein soll, nur dass statt des Sterns als Einrahmungszeichen das in
der Variablen zeichen übergebene Zeichen verwendet werden soll.
Beispiel: Der Aufruf
ausgabe("Autobahnraststaette",'+');
führt zu folgender Ausgabe.
+++++++++++++++++++++++ + Autobahnraststaette + +++++++++++++++++++++++
Der Funktionsaufruf
ausgabe("Autobahnraststaette",'?');
dagegen führt zur folgenden Ausgabe.
??????????????????????? ? Autobahnraststaette ? ???????????????????????
Zusatzaufgabe: Können Sie nach Implementation dieser Erweiterung Ihr C++- bzw. Java-Programm wieder vereinfachen? Haben Sie eine Idee?
Schreiben Sie eine C++-spezifische Variante der einfachen Funktion tauschen(): es sollen zwei übergebene int-Variablen ausgetauscht werden.Verwenden Sie hierfür die Übergabe per Referenz, die in ANSI-C nicht zur Verfügung steht. [Falls Sie sich das Thema Referenzen elementar noch einmal im Video ansehen wollen, hier ist eines. (Laufzeit: 11'30)]
Ein korrekter Aufruf der Funktion tauschen() kann also etwa sein:
int a=1, b=2; // ... tauschen(a,b);
Erweitern Sie Ihr Programm anschließend so, dass auch die Werte zweier float-Variablen x und y durch den Aufruf
tauschen(x,y);
ausgetauscht werden können.
Schließlich erweitern Sie bitte Ihr Programm erneut so dass nun auch die Inhalte zweier float-Arrays data1 und data2 durch den Aufruf
tauschen(data1,data2,10);
ausgetauscht werden können. Bei diesem Aufrufbeispiel sollen die Arrays natürlich jeweils zehn Elemente besitzen, wie nachstehender Programmauszug illustriert.
float data1[10] = { 2.0, 3.3, 4.5 }; float data2[10] = { 3.5, 4.5, 1.2, 5.7, 8.7, 1.2, 3.3, 4.4, 2.3, 0.0 }; // ... tauschen(data1,data2,10);
Ergänzen Sie anschließend diese letzte Version um die korrespondierende Java-Variante static void tauschen(float[] data1, float[] data2) { ... }.
Zusatzfrage: weshalb können Sie die ersten beiden Funktionen so in Java nicht umsetzen?
Zwei kleine Methoden in Java
Schreiben Sie bitte (in einer Klasse Demo) die beiden Java-Methoden mini() und maxi(), die zu einem übergebenen Array von int-Werten (naheliegenderweise) das Minimum bzw. das Maximum der Werte im Array ermitteln und jeweils zurückliefern.
Nachstehend sehen Sie einen möglichen Programmauszug zur Illustration.
int[] data = { 4, 8, 23, -17, 2, -6 }; System.out.println("Minimum: " + mini(data) + ", Maximum: " + maxi(data));
Hinweis: ab bzw. seit Java 5 gibt es die foreach-Schleife, mit der die Werte eines Arrays implizit durchlaufen (iteriert) werden können.
// foreach-Schleife - ersetzt die u.a. klassische for-Schleife for (int wert : data) // wert durchläuft im Sinne einer Kopie sukzessive die Werte des Arrays. { // In dieser Form können die Original-Inhalte des Arrays nicht verändert werden! } // klassische for-Schleife for (int i=0; i<data.length; i++) { }
Ein weiteres Beispiel für call by reference [nur C++]
Implementieren Sie bitte eine C++-Funktion minmax(), die zu einem übergebenen Array von int-Werten in ebenfalls übergebenen Variablen min bzw. max das Minimum bzw. das Maximum der Werte im Array abspeichert.
Nachstehend sehen Sie einen möglichen Programmauszug zur Illustration.
int data[] = { 4, 8, 23, -17, 2, -6 }; int anzahl = sizeof(data) / sizeof(data[0]); int min = 0, max = 0; // ... minmax(data, anzahl, min, max);
Implementierung fehlenden Programmcodes
Das nachfolgende Beispielprogramm setzt auf einem früheren Struktur-Beispiel von C auf. Erweitert wurde
die (nunmehr) Klasse um die (Deklaration der) Methoden und Konstruktoren. - Ergänzen Sie bitte den fehlenden
Programmcode zunächst in C++. (Der Aufgabenteil zu Java folgt weiter unten.)
(Diese Aufgabe bitte bevorzugt dann bearbeiten, wenn in der Vorlesung zumindest elementar bereits auf Klassenbildung eingegangen wurde.)
/* C++ - Klasse Person */ #include <iostream> #include <cstdlib> using namespace std; class Person { private: int PersonNr; char Nachname[50]; char Vorname[30]; float Gehalt; public: Person(); // Default-Konstruktor Person(int, char*, char*, float); // Weiterer Konstruktor void setPersonNr(int); void setNachname(char*); void setVorname(char*); void setGehalt(float); void ausgabe(); }; // end class Person int main() { Person person1(111,"Meier","Alfons",999.99), person2; person2.setNachname("Kaiser"); person2.setVorname("Anna"); person2.setPersonNr(112); person2.setGehalt(1300.45); cout << "Person 1: "; person1.ausgabe(); cout << "Person 2: "; person2.ausgabe(); return EXIT_SUCCESS; } // end main() // end of file Person.cpp |
Setzen Sie anschließend bitte die entsprechende Klasse Person mit den o.g. Methoden und Konstruktoren auch in Java um.
// Java - Klasse Person (Dateiname: Person.java) [Auszug] public class Person { private int PersonNr; private String Nachname; private String Vorname; private float Gehalt; public Person(){ } // Default-Konstruktor public Person(int PersonNr, String Nachname, String Vorname, float Gehalt){ } // Weiterer Konstruktor public void setPersonNr(int PersonNr) { } public void setNachname(String Nachname){ } public void setVorname(String Vorname){ } public void setGehalt(float Gehalt ){ } public void ausgabe(){ } public static void main(String[] args) { System.out.println("Und nun die Java-Version..."); Person person1 = new Person(111,"Meier","Alfons",(float)999.99); Person person2 = new Person(); person2.setNachname("Kaiser"); person2.setVorname("Anna"); person2.setPersonNr(112); person2.setGehalt((float)1300.45); System.out.println("Person 1: "); person1.ausgabe(); System.out.println("Person 2: "); person2.ausgabe(); } // end main() } // end class Person // end of file Person.java |
© 1999-2023 FHDW/Peter Baeumle-Courth. Document-Id: fhdwbap:opg:027906-3