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