Musterklausur Informatik I Dr. Norbert Spangler FB Informatik Fehler

Werbung
Musterklausur Informatik I
Dr. Norbert Spangler
FB Informatik
Fehler
#include <iostream>
using namespace std;
void main()
{
int i,n,summe;
int summe (int);
cout << " n eingeben ";
while (n>0)
{
cin>n;
i=summme(n);
cout << " summe fuer n="<<n<<" ist
cout << i <<" neues n";
}
Dieses Programm soll die Summe der ersten n
natürlichen Zahlen berechnen. Durch welche
Korrekturen sind die Compilermeldungen zu
beseitigen? Leider läuft das Programm nach
Beseitigung dieser Fehler nicht richtig. Wieso?
}
int summe (int n)
{
int h=0.0;
for (int i=0;i<n;i=+1)
h+=i;
return i;
}
-------------------Konfiguration: scratch - Win32 Debug-------------------Kompilierung läuft...
main.cpp
D:\cpp\test\scratch\main.cpp(6) : error C2373: 'summe' : Neudefinition; unterschiedliche Modifizierer
D:\cpp\test\scratch\main.cpp(5) : Siehe Deklaration von 'summe'
D:\cpp\test\scratch\main.cpp(10) : error C2676: Binaerer Operator '>' : 'class std::basic_istream<char,struct
std::char_traits<char> >' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten
Operator geeigneten Typ nicht
D:\cpp\test\scratch\main.cpp(11) : error C2065: 'summme' : nichtdeklarierter Bezeichner
D:\cpp\test\scratch\main.cpp(12) : error C2001: Zeilenumbruch innerhalb einer Konstanten
D:\cpp\test\scratch\main.cpp(13) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'cout'
Fehler beim Ausführen von cl.exe.
scratch.exe - 5 Fehler, 0 Warnung(en)
Testplan
Ein Programm soll quadratische Gleichungen ax2+bx+c=0 lösen. Hierzu werden a,b und c
eingelesen und das Ergebnis der Berechnung am Bildschirm ausgegeben. Vervollständigen
Sie den Testplan :
Fall
1
Unzulässige Eingabe (keine Zahlen)
---------ab hier zulässige Eingaben
2
Normalfall
3
...
4
...
5
...
6
...
7
...
a b
? ?
c
?
1 0.5 -3
Ergebnis
Abbruch
Lösungen 1.5 und -2
Musterklausur Informatik I
Dr. Norbert Spangler
FB Informatik
Wie ist die Ausgabe am Bildschirm ?
# include <iostream>
using namespace std;
void main()
{
int vec[10]={1},i,j,summe;
for (i=1;i<=5;i++)
{
summe=0;
for (j=i-1;j>=0;j--)
summe+=vec[j];
vec[i]=summe;
}
for (i=0;i<=5;i++)
cout << vec[i] << " ";
}
Klassen
Definieren Sie eine Klasse Uhrzeit (sekundengenau!). Geben Sie dabei exemplarisch
wenigstens 4 Methoden an (zusätzlich zur Methode hole_minute). Formulieren Sie den
Programmcode für die Methode hole_minute und zum Test dieser Methode ein
Testprogramm.
Definition
Erklären Sie den Datentyp int.
Erklären Sie den Befehl Zuweisung.
Programm
Ein Programm soll die Messwerte einer Produktionsanlage auswerten. Diese stehen in einer
Datei. Zur Bereitstellung der Messwerte steht Ihnen die Funktion
bool mw_lesen(int n,int sensor[],double werte[])
zur Verfügung. Dabei ist n die Anzahl der zu lesenden Werte, sensor[i] die Nummer des
Sensors (eine positive ganze Zahl), der den i-ten Wert geliefert hat und werte[i] der i-te
Messwert. Falls die Bereitstellung nicht erfolgreich war ist der Wert der Funktion mw_lesen
false, ansonsten true.
Erstellen Sie ein Programm inkl. Struktogramm, welches von Tastatur die Anzahl n der
erforderlichen Messwerte und eine Sensornummer einliest, und den Durchschnittswert aller
eingelesenen Messwerte bildet, welche von diesem Sensor geliefert wurden. Falls keine
Werte vorliegen ist das Programm mit einer Meldung zu beenden.
Musterklausur Informatik I
Dr. Norbert Spangler
FB Informatik
Lösungen
Fehler
1)
2)
3)
4)
summe zwei mal definiert; int-Deklaration streichen in Zeile 5
> ersetzen durch >> in Zeile 10
Summe statt summme
In Zeile 13 “; ergänzen nach ist (eliminiert 2 Meldungen)
Weitere Fehler
In main:
n nicht initialisiert; daher wird die while-Schleife nicht durchlaufen
In summe:
i+=+1 (statt i=+1) in der for-Schleife der Funktion summe
return h statt return i
es werden die ersten n-1 natürlichen Zahlen summiert
Testplan
Fall
1
Unzulässige Eingabe (keine Zahlen)
---------ab hier zulässige Eingaben
2
Normalfall
3
triviale Gleichung
4
keine Lösung
5
eine Lösung
6
doppelte Nullstelle
7
keine relle Lösung
a b
? ?
c
?
1 0.5 -3
0 0 0
0 0 1
0 1 1
1 -2 1
1 1 1
Ausgabe
1 1 2 4 8 16 Press any key to continue
Klassen
Class Uhrzeit
{
private:
int stunde,minute,sekunde;
public:
Uhrzeit();//Defaultkonstruktor
Uhrzeit(int,int,int);//Konstruktor
setzeZeit(int,int,int);// stunde,minite, sekunde setzen
bool operator < (Uhrzeit);// Zeiten vergleichen
Uhrzeit operator + (Uhrzeit);// Zeit addieren
ínt hole_minute(){return minute;}
//usw
};
void main()
{
Uhrzeit t(1,2,3);
cout<< “Minute “<<t.hole_minute()<<endl;
}
Ergebnis
Abbruch
Lösungen 1.5 und -2
jede Zahl ist Lösung
keine Lösung
Lösung -1
doppelte Nullstelle 1
keine reelle Lösung
Musterklausur Informatik I
Dr. Norbert Spangler
FB Informatik
Definition
Der Datentyp int dient zur Abspeicherung von ganzen Zahlen als Dualzahl. Negative zahlen
werden mittels 2er-Kompliment abgespeichert. Jede Variable belegt 4 Byte.
Bei einer Zuweisung wird der rechts vom =-Operator stehende Wert am Speicherplatz der
links vom =-Operator angegebenen Operanden gespeichert.
Programm
# include <iostream>
using namespace std;
void main()
{
int n,sensor_nr;
int sensoren[100];
double messwert[100];
bool mw_lesen(int,int[],double[]);//Prototyp
// Daten lesen
cout << " Anzahl der Messwerte + Sensornummer";
cin >>n>>sensor_nr;
if ( !mw_lesen(n,sensoren,messwert) )
{
cout << " Keine Messwerte gelesen ";
return;
}
// Verarbeitung
double summe=0.0;
int anzahl_sensor=0;
for (int i=0;i<n;i++)
if ( sensoren[i]==sensor_nr )
{
anzahl_sensor++;
summe+=messwert[i];
}
// Ausgabe
if ( anzahl_sensor==0 )
cout <<" Keine Sensorwerte"<<endl;
else
{
summe/=anzahl_sensor;
cout << " Durchschnittswert Sensor "<<sensor_nr<<" ist "<<summe<<endl;
}
return;
}
Musterklausur Informatik I
Dr. Norbert Spangler
FB Informatik
n und sensor_nr lesen
Messwerte lesen missglückt
Wahr
Falsch
Meldung und Abbruch
i=0,...,n-1
sensor_nr=sensoren[i]
Wahr
Falsch
anzahl_sensor++
summe=summe+messwert[i]
anzahl_sensor = 0
Wahr
Ausgabe : keine Werte
Falsch
Ausgabe summe/amzahl_sensor
Herunterladen