; } ?>
:CPP: Loesung
|
Version:
|
Musterlösung |
Aufgabe 1 |
|
Um Ein-Ausgaberoutinen verwenden zu können, sind einfache Einträge in der cpp-Datei vorzunehmen.
Welche sind dies?
![]()
#include <conio.h> // getch() #include <iostream.h> // cin cout
Aufgabe 2 |
|
Aus welchem Grund müssen in c/c++ Variablen deklariert werden?
![]()
Aufgabe 3 |
|
Worin besteht der Unterschied zwischen der Definition und Deklaration von Variablen?
Anhand eines einfachen Beispiels erläutern!
![]()
int susi; // Deklaration, es wird Speicher für eine Integervariable reserviert,
// Speicher ist über den Bezeichner susi ansprechbar,
// Achtung in susi kann noch ein beliebiger Wert stehen!
susi = 17; // Definition, susi wird der Wert 17 zugewiesen, geschiet dies zum ersten mal nach der Deklaration
// spricht man auch von Initialisierung von susi mit dem Wert 17
int otto = 18; // Deklaration und Initialisierung von otto mit 18
Aufgabe 4 |
|
Wie ist der Aufbau und die Wirkungsweise einer Do-While-Schleife?
Zeigen Sie den wesentlichen Unterschied zu While-Schleife anhand eines Quellcodebeispiels!
![]()
do Anweisungen while (Bedingung); Wobei Anweisungen eine einzelne Anweisung oder ein Block von Anweisungen sein kann. Fußgesteuerte Schleife,
solange Bedingung erfüllt ist werden die Anweisungen erneut ausgeführt, d.h im Gegensatz zur While-Schleife mindestens ein mal!
int i = 100;
do{ // tue erst mal
cout << i << " ";
i++;
}while (i<10); // solange i < 10 springe wieder zu do
// Ausgabe 100 i=101
![]() |
Beschreibung des ProjektsDie Statistik eines Webauftritts soll ausgewertet und als Balkendiagramm graphisch dargestellt werden. Im Theorie-Teil soll die Ausgabe auf der Konsole geschehen, im Praxis-Teil soll eine "stats.html" Seite generiert werden. Die Main-Funktion (hier immer mal wieder nachschauen wie die Funkionen verwendet werden): void main()
{
cout << "WebSite-Statistiken v1.0 von Oliver Mezger\n\n";
hits_ausgeben();
cout<<"\n Hits gesammt: "<<prozente_berechnen()<<"\n\n";
cout<<"\n Gesammt: "<<prozente_ausgeben() << "% \n\n";
balken_ausgeben();
getch();
}
|
||
Die Daten liegen in folgender Form vor:
const SITES = 5; // Anzahl der Seiten
string names[SITES] = {"Bananas","Apples","Funk'n","Deep Blue","Fluids"};
int hits[SITES]= {240,34,487,154,85}; // Zugriffe auf die Seiten
int prozente[SITES]; // In Prozent umgerechnete Zugriffe (noch zu berechnen)
|
|||
Aufgabe 5 (name_ausgeben) |
|
Analysieren Sie folgende Funktion (Beschreibung (2 Punkte)), erstellen Sie ein Struktogramm (6 Punkte)!
string name_ausgeben(string s){ // Was tut diese Funktion?
while (s.length() < 10) s=s+'.'; // s.length gibt die Laenge von s zurueck
return s + ": ";
}
Welche Rückgabe ist bei dem Aufrufen name_ausgeben("Hugo") (2 Punkte) und name_ausgeben("Tante Erna geht schwimmen") (2 Punkte) zu erwarten?
![]()
| Funktion name_ausgeben(s) (6 Punkte)
Eingabe: Parameter: s: String |
name_ausgeben(s) ergänzt den String s um '.' bis die Länge 10 erreicht ist, dann wird noch ein ':' angehängt und das Ergebnis zurückgegeben. Der String wird formatiert, unterschiedliche Längen sollen ausgeglichen werden. (2 Punkte)
name_ausgeben("Hugo") (2 Punkte) "Hugo......:" name_ausgeben("Tante Erna geht schwimmen") (2 Punkte) "Tante Erna geht schwimmen:" |
||
![]() |
|||
Aufgabe 6 (hits_ausgeben) |
|
Eine Funktion hits_ausgeben() soll die Seitenzugriffe zu den Web-Seiten aus den Daten formatiert ausgeben. Erstellen Sie ein Struktogramm (6 Punkte) und vervollständigen sie den Programmcode (4 Punkte):
void hits_ausgeben(){ // Ausgabe der Seitenzugriffe
cout << name_ausgeben(names[i]); // Siehe Tip ->
}
|
So soll die Ausgabe aussehen: | ||||
![]() |
|||||
| Tip: Die Funktion name_ausgeben() aus 5 kann verwendet werden! | |||||
![]()
| Funktion hits_ausgeben() (6 Punkte)
Eingabe: globales SITES: integer, globales hits[] : integer |
C-Quellcode: (4 Punkte)
void hits_ausgeben(){ // Ausgabe der Seitenzugriffe
for (int i=0;i<SITES;i++){ // fuer alle SITES
cout << name_ausgeben(names[i]); // Seitenname format
cout << hits[i] << endl; // Zugriffe
} // -fuer alle SITES
}
|
|||
![]() |
||||
Aufgabe 7 (prozente_berechnen) |
|
Erstellen Sie den Programmcode für Funktion prozente_berechnen() mit Kommentaren, wie werden die Prozente berechnet?
Die Funktion greift auf folgende globale Variablen und Konstanten zu: SITES, hits[], prozente[] und hat als Rückgabewert die Summe der Seitenzugriffe aus hits[].
Die Datentypen entnehmen Sie aus der Beschreibung des Projekts.

![]()
int prozente_berechnen(){
int sum_hits=0; // Summe der Gesammt-Zugriffe
for (int i=0; i<SITES;i++){ // fuer alle SITES
sum_hits = sum_hits+hits[i]; // Aufsummieren der Hits
} // -fuer alle SITES
for (int i=0; i<SITES;i++){ // fuer alle SITES
prozente[i] = (100.0*hits[i] / sum_hits)+0.5; // Prozentualen Anteil berechnen und runden
} // -fuer alle SITES
return sum_hits; // Rueckgabe der Gesammt-Hits
}
Aufgabe 8 (prozente_ausgeben) |
|
| Gegeben ist folgender Source-Code, analysieren Sie den Code und kommententieren (10 Punkte) Sie ihn, erstellen Sie ein Struktogramm (15 Punkte)! int prozente_ausgeben(){
int prozsum = 0;
for (int i=0;i<SITES;i++){
cout << name_ausgeben(names[i]);
if (prozente[i] >9)
cout << " ";
else
cout << " ";
cout << prozente[i] << "% ";
cout << endl;
prozsum = prozsum + prozente[i];
}
return prozsum;
}
|
|||
![]() |
|||
| Wozu dient die if-Anweisung?
Welchen Wert gibt die Funkion zurück? |
|||
![]()
| Funktion prozente_ausgeben() (15 Punkte)
Eingabe: globales SITES: integer, Ausgabe: auf Konsole: Name...: prozentuale Zugriffe Lokale Variable: prozsum: integer; i: integer |
||
C-Quellcode: (10 Punkte)
int prozente_ausgeben(){ // Ausgabe der Prozente pro Seite auf Konsole
int prozsum = 0; // Summe der Prozente mit 0 initialiseren
for (int i=0;i<SITES;i++){ // fuer alle SITES
cout << name_ausgeben(names[i]); // Name formatiert ausgeben
if (prozente[i] >9) // wenn Prozentwert 2-stellig
cout << " "; // ein Leerzeichen ausgeben
else // sonst
cout << " "; // 2 Leerzeichen ausgeben
cout << prozente[i] << "% "; // Prozente ausgeben
cout << endl; // neue Zeile
prozsum = prozsum + prozente[i]; // Prozente aufsummieren
} // -fuer alle SITES
return prozsum; // Prozentsumme zurueckgeben
}
|
||
![]() |
Aufgabe 9 (balken_ausgeben) |
|
Erstellen Sie eine Funktion balken_ausgeben(), die proportionale Anzahl (prozente / 2) an Sternen ausgibt. Erstellen Sie ein Struktogramm (10 Punkte) und einen kommentierten Quelltext (15 Punkte)!
void balken_ausgeben(){
}
|
|||
![]() |
![]()
| Funktion balken_ausgeben() (10 Punkte)
Eingabe: globales SITES: integer, Ausgabe: auf Konsole: Name...: prozentuale Zugriffe + Balken Lokale Variable: i,j,k: integer |
C-Quellcode: (15 Punkte)
void balken_ausgeben(){ // Ausgabe der Prozente als Balken
int i,j,k; // lokale Variablen
for (i=0;i<SITES;i++){ // fuer alle SITES
cout << name_ausgeben(names[i]); // Name formatiert ausgeben
if (prozente[i] >9) // wenn Prozentwert 2-stellig
cout << " "; // ein Leerzeichen ausgeben
else // sonst
cout << " "; // 2 Leerzeichen ausgeben
cout << prozente[i] << "% "; // Prozente ausgeben
j= prozente[i]/2; // j proportional prozent/2
for (k=0;k<j;k++){ // j mal
cout << "*"; // einen Stern ausgeben
} // -j mal
cout << endl; // neue Zeile
} // -fuer alle SITES
}
|
||
![]() |
|
| Download | ||||
|---|---|---|---|---|
| Ausführbares Programm | Des Projekts | Quelltext anschauen | ||
| ./. | ||||
| webstats.exe.sit | ./. | webstatistics.sit | webstatistics.zip | main.cpp.txt |