Modellierung und Simulation - Wiederholung 1-6
| Autor: | Prof. Dr.-Ing. Schneider |
| Termin: | 11.04.2025 |
Aufgabe 7.1 - Funktionen
Schreiben Sie die Funktion Celsius im m-File „Celsius.m“, die eine übergebene Fahrenheit-Temperatur in den zugehörigen Celsius-Wert umrechnet und diesen zurückgibt:
function c = Celsius(fahr)
Zur Umrechnung von Grad Fahrenheit in Grad Celsius dient die Formel:
c = (5.0/9.0) * (fahr − 32)
Testen Sie Ihre Funktion mit mehreren Temperaturen. Schreiben Sie eine weitere Funktion Fahrenheit, die eine übergebene Celsius-Temperatur in den Fahrenheit-Wert umrechnet:
function f = Fahrenheit(c)
Rufen Sie die beiden Funktionen auch hintereinander auf, also beispielsweise
>> f = Fahrenheit( Celsius( fahr ) )
| Musterlösung 7.1 |
% Aufgabe 7.1.1: Umrechung Fahrenheit nach Celsius
% c = Celsius( fahr )
function c = Celsius( fahr )
c = (5.0/9.0) * ( fahr - 32 );
end
% Aufgabe 7.1.2: Umrechung Celsius nach Fahrenheit
% f = Fahrenheit(c)
function f = Fahrenheit( c )
f = (9.0/5.0) * c + 32;
end
|
Aufgabe 7.2 - Funktionen
Erstellen Sie die Funktion Pythagoras im m-File Pythagoras.m, die aus den zwei
übergebenen Argumenten a und b die Zahl c nach dem Satz von Pythagoras berechnet,
also . Vor der Zuweisung des Rückgabewerts müssen Sie natürlich
noch die Wurzel aus ziehen:
function c = Pythagoras(a, b)
Testen Sie Ihre Funktion mit mehreren Zahlenpaaren.
| Musterlösung 7.2 |
%% Musterlösung Aufgabe 7.2 - Ein- und Ausgaben
function c = Pythagoras( a, b )
c_2 = a^2 + b^2;
c = sqrt( c_2 );
end);
|
Aufgabe 7.3 - Ein- und Ausgabe
Schreiben Sie die Funktion function u = UmfangInput(prompt).Die Daten für den Radius sollen über input von der Tastatur abgefragt werden. Die neue
Funktion mit dem Namen UmfangInput muss in dem neuen m-File UmfangInput.m abgespeichert werden.
Als Eingabe-Aufforderung für den Radius dient der an die Funktion übergebene Text, der im Parameter prompt abgelegt ist. Nach der Berechnung des Umfangs werden der Radius und der Umfang mithilfe der Funktion fprintf ausgegeben.
| Musterlösung 7.3 |
%% Musterlösung Aufgabe 7.3 - Ein- und Ausgaben
function u = UmfangInput( prompt )
r = input( prompt ); % Radius von Tastatur einlesen
u = 2 * pi * r; % u enthält berechneten Umfang
fprintf( 'Der Umfang zum Radius %g ist: %g \n', r,u );
end
|
Aufgabe 7.4 - Ein- und Ausgabe
Erweitern Sie die Funktion UmfangInput, damit sie außer dem Umfang auch noch die Kreisfläche berechnet. Die beiden Ergebnisse sollen sowohl mit fprintf ausgege- ben als auch von der Funktion zurückgegeben werden. Experimentieren Sie mit unterschiedlichen Formatanweisungen bei der Ausgabe mit fprintf, beispielsweise durch eine Variation der Zahl der Nachkommastellen.
| Musterlösung 7.4 |
function [umf, F] = KreisInput()
% Aufgabe 7.4: berechnet Kreisumfang und -fläche
% [umf, F] = KreisInput()
% Radius wird von der Tastatur eingelesen
% Einlesen des Radius von der Tastatur
r = input( 'Bitte Radius eingeben: ' );
% Berechnung des Umfangs aus dem Eingabewert und Rückgabe
umf = 2 * pi * r;
F = pi * r * r;
% Ausgabe des Ergebnisses auf dem Bildschirm
fprintf( 'Der Umfang zum Radius %g ist: %g \n', [r, umf] );
fprintf( 'Die Fläche zum Radius %g ist: %g \n', [r, F] );
end
|
Aufgabe 7.5 - Ein- und Ausgabe
rstellen Sie die Funktion AdditionInput, die nacheinander zwei Zahlen über den Aufruf von input anfordert und in den Variablen a und b speichert. Diese Zahlen werden danach addiert. Ihre Summe wird in der Variablen c zurückgegeben:
function c = AdditionInput()
Verwenden Sie zur Eingabe-Aufforderung einen geeigneten Prompt und testen Sie Ihre Funktion mit unterschiedlichen Zahlenpaaren. Schreiben Sie eine zweite Funktion zur Addition, die analog UmfangVar mit einer variablen Übergabeliste arbeitet:
function c = AdditionVar(varargin)
| Musterlösung 7.4 |
% Aufgabe 7.5.1: Addiert zwei Zahlen
% c = AdditionInput()
% Die beiden Zahlen werden von der Tastatur eingelesen.
function c = AdditionInput()
fprintf( 'Die Funktion addiert zwei Zahlen: \n' );
% Einlesen der Zahlen von der Tastatur
a = input( 'Bitte 1. Zahl eingeben: ' );
b = input( 'Bitte 2. Zahl eingeben: ' );
% Berechnung der Summe
c = a + b;
% Ausgabe des Ergebnisses auf dem Bildschirm
fprintf( 'Die Summe von %g + %g ist %g \n', a, b, c );
end
% Aufgabe 7.5.2: Addiert zwei Zahlen, mit varargs
% c = AdditionVar(varargin)
% Die beiden Zahlen werden von der Tastatur eingelesen oder übergeben.
function c = AdditionVar(varargin)
fprintf( 'Die Funktion addiert zwei Zahlen: \n' );
% Test der Zahl der übergebenen Werte
if(nargin < 2)
% Einlesen der Zahlen von der Tastatur
a = input( 'Bitte 1. Zahl eingeben: ' );
b = input( 'Bitte 2. Zahl eingeben: ' );
else
a = varargin{1};
b = varargin{2};
end
% Berechnung der Summe
c = a + b;
% Ausgabe des Ergebnisses auf dem Bildschirm
fprintf( 'Die Summe von %g + %g ist %g \n', a, b, c );
end
|
Aufgabe 7.6 - Verzweigung
Schreiben Sie eine Funktion, die zwei Zahlen a und b von der Tastatur einliest. Prüfen Sie, ob b gleich null ist. Geben Sie in diesem Fall eine Fehlermeldung aus. Berechnen Sie ansonsten den Quotienten a/b und geben Sie das Ergebnis mit fprintf aus. Testen Sie die Funktion mit mehreren Zahlenwerten.
Aufgabe 7.7 - Verzweigung
Schreiben Sie die Funktion intervall, die von der Tastatur eine Zahl einliest. Liegt diese Zahl im Intervall zwischen 10 und 99, wird sie zurückgegeben. Anderenfalls erfolgt eine Fehlermeldung. Testen Sie die drei möglichen Fälle mit mehreren Zah- lenwerten. Schreiben Sie die weitere Funktion intervall2, die analog nur Eingabewerte außer- halb des Intervalls von 1 und 2 bearbeitet. Testen Sie die Funktion.
Aufgabe 7.8 - Verzweigung
Erstellen Sie die Funktion Auswahl, die als Erstes von der Tastatur ein Zeichen c einliest. Mit einer verschachtelten if-else-Abfrage soll dann in Abhängigkeit von c wie folgt verfahren werden: Ist c das Zeichen „k“, wird von der Tastatur ein Radiuswert r abgefragt und die Kreisfläche pi * r * r berechnet. Ist c das Zeichen „q“, wird von der Tastatur die Kan- tenlänge a abgefragt und die Quadratfläche a * a berechnet. Ist c das Zeichen „r“, werden von der Tastatur die Länge l und die Breite b abgefragt und die Rechteckflä- che l * b berechnet. Kommt ein anderes Zeichen, wird eine Fehlermeldung ausge- geben. Zu jedem der regulären Fälle sollen die Lösung und der Flächentyp mit fprintf ausgegeben werden. Schreiben Sie eine weitere Funktion Auswahl2, die anstelle der verschachtelten if- else-Abfragen eine switch-Anweisung verwendet, und testen Sie alle möglichen Fälle.
Aufgabe 7.9 - Verzweigung
Erstellen Sie die Funktion Umfangsprache, die wie UmfangInput aus Abschnitt 2.2.5 arbeitet, die jedoch einen Eingabeparameter besitzt, mit dem man für die Aufforde- rung zur Radiuseingabe unterschiedliche Sprachen wählen kann, zum Beispiel mit „g“ für Deutsch: „Bitte Radius eingeben: “, mit „e“ für Englisch: „Please type in ra- dius value: “ etc.
→ MATLAB® Befehlsübersicht
→ zurück zum Hauptartikel: BSE Modellierung und Simulation - SoSe25