Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
H
hp
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Peter Gerwinski
hp
Commits
4b2b6534
Commit
4b2b6534
authored
4 years ago
by
Peter Gerwinski
Browse files
Options
Downloads
Patches
Plain Diff
Musterlösung 19.11.2020: Links korrigiert
parent
ee4bfcb6
Branches
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
20201119/hp-musterloesung-20201119.pdf
+0
-0
0 additions, 0 deletions
20201119/hp-musterloesung-20201119.pdf
20201119/hp-musterloesung-20201119.tex
+20
-20
20 additions, 20 deletions
20201119/hp-musterloesung-20201119.tex
with
20 additions
and
20 deletions
20201119/hp-musterloesung-20201119.pdf
+
0
−
0
View file @
4b2b6534
No preview for this file type
This diff is collapsed.
Click to expand it.
20201119/hp-musterloesung-20201119.tex
+
20
−
20
View file @
4b2b6534
% hp-musterloesung-20
191024
.pdf - Solutions to the Exercises on Low-Level Programming / Applied Computer Sciences
% hp-musterloesung-20
201119
.pdf - Solutions to the Exercises on Low-Level Programming / Applied Computer Sciences
% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019 Peter Gerwinski
% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019
, 2020
Peter Gerwinski
%
%
% This document is free software: you can redistribute it and/or
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% modify it either under the terms of the Creative Commons
...
@@ -29,14 +29,14 @@
...
@@ -29,14 +29,14 @@
\begin{document}
\begin{document}
\section*
{
Hardwarenahe Programmierung
\\
\section*
{
Hardwarenahe Programmierung
\\
Musterlösung zu den Übungsaufgaben --
24
.
\
Okto
ber 20
19
}
Musterlösung zu den Übungsaufgaben --
19
.
\
Novem
ber 20
20
}
\exercise
{
Seltsame Programme
}
\exercise
{
Seltsame Programme
}
Unter
\url
{
https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20
191024
}
Unter
\url
{
https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20
201119
}
finden Sie (unter anderem)
\\
finden Sie (unter anderem)
\\
die Programme
\gitfile
{
hp
}{
20
191024
}{
test-1.c
}
,
die Programme
\gitfile
{
hp
}{
20
201119
}{
test-1.c
}
,
\gitfile
{
hp
}{
20
191024
}{
test-2.c
}
und
\gitfile
{
hp
}{
20
191024
}{
test-3.c
}
.
\gitfile
{
hp
}{
20
201119
}{
test-2.c
}
und
\gitfile
{
hp
}{
20
201119
}{
test-3.c
}
.
Was bewirken diese Programme, und warum verhalten sie sich so?
Was bewirken diese Programme, und warum verhalten sie sich so?
...
@@ -44,7 +44,7 @@
...
@@ -44,7 +44,7 @@
\begin{itemize}
\begin{itemize}
\item
\item
\gitfile
{
hp
}{
20
191024
}{
test-1.c
}
\gitfile
{
hp
}{
20
201119
}{
test-1.c
}
Hinter
\lstinline
{
return
}
steht ein Ausdruck mit dem
Hinter
\lstinline
{
return
}
steht ein Ausdruck mit dem
Komma-Operator. Dieser bewirkt, daß der Wert vor dem Komma
Komma-Operator. Dieser bewirkt, daß der Wert vor dem Komma
...
@@ -59,7 +59,7 @@
...
@@ -59,7 +59,7 @@
übergeben und daher
\lstinline
{
return 0
}
ausgeführt.
übergeben und daher
\lstinline
{
return 0
}
ausgeführt.
\item
\item
\gitfile
{
hp
}{
20
191024
}{
test-2.c
}
\gitfile
{
hp
}{
20
201119
}{
test-2.c
}
Das Programm gibt die Zeile
Das Programm gibt die Zeile
\lstinline
[style=terminal]
{
Die Antwort lautet: 42
}
aus.
\lstinline
[style=terminal]
{
Die Antwort lautet: 42
}
aus.
...
@@ -72,7 +72,7 @@
...
@@ -72,7 +72,7 @@
\lstinline
{
else
}
-Zweig.
\lstinline
{
else
}
-Zweig.
\item
\item
\gitfile
{
hp
}{
20
191024
}{
test-3.c
}
\gitfile
{
hp
}{
20
201119
}{
test-3.c
}
Das Programm stürzt mit einer Fehlermeldung
Das Programm stürzt mit einer Fehlermeldung
"`Speicherzugriffsfehler"' oder "`Schutzverletzung"' ab.
"`Speicherzugriffsfehler"' oder "`Schutzverletzung"' ab.
...
@@ -104,7 +104,7 @@
...
@@ -104,7 +104,7 @@
\strut\hfill\url
{
http://heise.de/-193332
}
,
\strut\hfill\url
{
http://heise.de/-193332
}
,
\end{quote}
\end{quote}
Der Artikel verweist auf ein Quelltextfragment (Datei:
\gitfile
{
hp
}{
20
191024
}{
aufgabe-2.c
}
),
Der Artikel verweist auf ein Quelltextfragment (Datei:
\gitfile
{
hp
}{
20
201119
}{
aufgabe-2.c
}
),
das für einen gegebenen Wert
\lstinline
{
days
}
das für einen gegebenen Wert
\lstinline
{
days
}
das Jahr und den Tag innerhalb des Jahres
das Jahr und den Tag innerhalb des Jahres
für den
\lstinline
{
days
}
-ten Tag nach dem 1.
\,
1.
\,
1980 berechnen soll:
für den
\lstinline
{
days
}
-ten Tag nach dem 1.
\,
1.
\,
1980 berechnen soll:
...
@@ -195,9 +195,9 @@
...
@@ -195,9 +195,9 @@
Um das Programm zu testen, genügt es, das Datum auf den
Um das Programm zu testen, genügt es, das Datum auf den
31.
\,
12.
\,
1980 zu stellen, also
\lstinline
{
days
}
auf den Wert
31.
\,
12.
\,
1980 zu stellen, also
\lstinline
{
days
}
auf den Wert
366 zu setzen. Darüberhinaus muß man die Funktion
366 zu setzen. Darüberhinaus muß man die Funktion
\lstinline
{
IsLeapYear()
}
bereitstellen (vgl.
\
Aufgabe 1 vom 1
7
.
\,
1
0
.
\,
20
19
).
\lstinline
{
IsLeapYear()
}
bereitstellen (vgl.
\
Aufgabe 1 vom 1
2
.
\,
1
1
.
\,
20
20
).
Der Quelltext
\gitfile
{
hp
}{
20
191024
}{
loesung-2-f1.c
}
ist eine lauffähige
Der Quelltext
\gitfile
{
hp
}{
20
201119
}{
loesung-2-f1.c
}
ist eine lauffähige
Version des Programms, die den Fehler (Endlosschleife)
Version des Programms, die den Fehler (Endlosschleife)
reproduziert.
reproduziert.
...
@@ -205,12 +205,12 @@
...
@@ -205,12 +205,12 @@
Es liegt nahe, den Fehler in der
\lstinline
{
while
}
-Bedingung
Es liegt nahe, den Fehler in der
\lstinline
{
while
}
-Bedingung
zu korrigieren, so daß diese Schaltjahre berücksichtigt. Der
zu korrigieren, so daß diese Schaltjahre berücksichtigt. Der
Quelltext
\gitfile
{
hp
}{
20
191024
}{
loesung-2-f2.c
}
behebt den Fehler auf diese
Quelltext
\gitfile
{
hp
}{
20
201119
}{
loesung-2-f2.c
}
behebt den Fehler auf diese
Weise mit Hilfe von Und- (
\lstinline
{&&}
) und
Weise mit Hilfe von Und- (
\lstinline
{&&}
) und
Oder-Verknüpfungen (
\lstinline
{
||
}
) in der
Oder-Verknüpfungen (
\lstinline
{
||
}
) in der
\lstinline
{
while
}
-Bedingung.
\lstinline
{
while
}
-Bedingung.
Der Quelltext
\gitfile
{
hp
}{
20
191024
}{
loesung-2-f3.c
}
vermeidet die umständliche
Der Quelltext
\gitfile
{
hp
}{
20
201119
}{
loesung-2-f3.c
}
vermeidet die umständliche
Formulierung mit
\lstinline
{&&}
und
\lstinline
{
||
}
durch
Formulierung mit
\lstinline
{&&}
und
\lstinline
{
||
}
durch
Verwendung des ternären Operators
\lstinline
{
?:
}
. Dieser
Verwendung des ternären Operators
\lstinline
{
?:
}
. Dieser
stellt eine "`
\lstinline
{
if
}
-Anweisung für Ausdrücke"' bereit.
stellt eine "`
\lstinline
{
if
}
-Anweisung für Ausdrücke"' bereit.
...
@@ -218,7 +218,7 @@
...
@@ -218,7 +218,7 @@
\lstinline
{
days >
}
den Wert 366 im Falle eines Schaltjahrs
\lstinline
{
days >
}
den Wert 366 im Falle eines Schaltjahrs
bzw.
\
ansonsten den Wert 365.
bzw.
\
ansonsten den Wert 365.
Beide Lösungen
\gitfile
{
hp
}{
20
191024
}{
loesung-2-f2.c
}
und
\gitfile
{
hp
}{
20
191024
}{
loesung-2-f3.c
}
Beide Lösungen
\gitfile
{
hp
}{
20
201119
}{
loesung-2-f2.c
}
und
\gitfile
{
hp
}{
20
201119
}{
loesung-2-f3.c
}
sind jedoch im Sinne der Aufgabenstellung
\textbf
{
falsch
}
.
sind jedoch im Sinne der Aufgabenstellung
\textbf
{
falsch
}
.
Diese lautet: "`Schreiben Sie das Quelltextfragment so um,
Diese lautet: "`Schreiben Sie das Quelltextfragment so um,
daß es die beschriebenen Probleme nicht mehr enthält."'
daß es die beschriebenen Probleme nicht mehr enthält."'
...
@@ -230,7 +230,7 @@
...
@@ -230,7 +230,7 @@
\breath
\breath
Eine richtige Lösung liefert
\gitfile
{
hp
}{
20
191024
}{
loesung-2-4.c
}
. Dieses
Eine richtige Lösung liefert
\gitfile
{
hp
}{
20
201119
}{
loesung-2-4.c
}
. Dieses
Programm speichert den Wert der Tage im Jahr in einer
Programm speichert den Wert der Tage im Jahr in einer
Variablen
\lstinline
{
DaysInYear
}
. Damit erübrigen sich die
Variablen
\lstinline
{
DaysInYear
}
. Damit erübrigen sich die
\lstinline
{
if
}
-Anweisungen innerhalb der
\lstinline
{
if
}
-Anweisungen innerhalb der
...
@@ -246,24 +246,24 @@
...
@@ -246,24 +246,24 @@
Um diese Code-Verdopplung loszuwerden, kann man das
Um diese Code-Verdopplung loszuwerden, kann man das
\lstinline
{
if
}
durch den
\lstinline
{
?:
}
-Operator ersetzen und
\lstinline
{
if
}
durch den
\lstinline
{
?:
}
-Operator ersetzen und
die Zuweisung innerhalb der
\lstinline
{
while
}
-Bedingung
die Zuweisung innerhalb der
\lstinline
{
while
}
-Bedingung
vornehmen -- siehe
\gitfile
{
hp
}{
20
191024
}{
loesung-2-5.c
}
. Dies ist einer der
vornehmen -- siehe
\gitfile
{
hp
}{
20
201119
}{
loesung-2-5.c
}
. Dies ist einer der
seltenen Fälle, in denen ein Programm
\emph
{
übersichtlicher
\/
}
seltenen Fälle, in denen ein Programm
\emph
{
übersichtlicher
\/
}
wird, wenn eine Zuweisung innerhalb einer Bedingung
wird, wenn eine Zuweisung innerhalb einer Bedingung
stattfindet.
stattfindet.
Alternativ kann
\lstinline
{
DaysInYear()
}
auch eine Funktion
Alternativ kann
\lstinline
{
DaysInYear()
}
auch eine Funktion
sein -- siehe
\gitfile
{
hp
}{
20
191024
}{
loesung-2-6.c
}
. Diese Version ist
sein -- siehe
\gitfile
{
hp
}{
20
201119
}{
loesung-2-6.c
}
. Diese Version ist
wahrscheinlich die übersichtlichste, hat jedoch den Nachteil,
wahrscheinlich die übersichtlichste, hat jedoch den Nachteil,
daß die Berechnung von
\lstinline
{
DaysInYear()
}
zweimal statt
daß die Berechnung von
\lstinline
{
DaysInYear()
}
zweimal statt
nur einmal pro Schleifendurchlauf erfolgt, wodurch Rechenzeit
nur einmal pro Schleifendurchlauf erfolgt, wodurch Rechenzeit
verschwendet wird.
verschwendet wird.
\gitfile
{
hp
}{
20
191024
}{
loesung-2-7.c
}
und
\gitfile
{
hp
}{
20
191024
}{
loesung-2-8.c
}
beseitigen
\gitfile
{
hp
}{
20
201119
}{
loesung-2-7.c
}
und
\gitfile
{
hp
}{
20
201119
}{
loesung-2-8.c
}
beseitigen
dieses Problem durch eine Zuweisung des Funktionsergebnisses
dieses Problem durch eine Zuweisung des Funktionsergebnisses
an eine Variable -- einmal innerhalb der
an eine Variable -- einmal innerhalb der
\lstinline
{
while
}
-Bedingung und einmal außerhalb.
\lstinline
{
while
}
-Bedingung und einmal außerhalb.
Der zweimalige Aufruf der Funktion
\lstinline
{
DaysInYear()
}
in
Der zweimalige Aufruf der Funktion
\lstinline
{
DaysInYear()
}
in
\gitfile
{
hp
}{
20
191024
}{
loesung-2-8.c
}
zählt nicht als Code-Verdopplung, denn
\gitfile
{
hp
}{
20
201119
}{
loesung-2-8.c
}
zählt nicht als Code-Verdopplung, denn
der Code ist ja in einer Funktion gekapselt. (Genau dazu sind
der Code ist ja in einer Funktion gekapselt. (Genau dazu sind
Funktionen ja da: daß man sie mehrfach aufrufen kann.)
Funktionen ja da: daß man sie mehrfach aufrufen kann.)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment