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
GitLab 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
Dec 3, 2020
by
Peter Gerwinski
Browse files
Options
Downloads
Patches
Plain Diff
Musterlösung 19.11.2020: Links korrigiert
parent
ee4bfcb6
No related branches found
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
% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019 Peter Gerwinski
% hp-musterloesung-20
201119
.pdf - Solutions to the Exercises on Low-Level Programming / Applied Computer Sciences
% Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019
, 2020
Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
...
...
@@ -29,14 +29,14 @@
\begin{document}
\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
}
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)
\\
die Programme
\gitfile
{
hp
}{
20
191024
}{
test-1.c
}
,
\gitfile
{
hp
}{
20
191024
}{
test-2.c
}
und
\gitfile
{
hp
}{
20
191024
}{
test-3.c
}
.
die Programme
\gitfile
{
hp
}{
20
201119
}{
test-1.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?
...
...
@@ -44,7 +44,7 @@
\begin{itemize}
\item
\gitfile
{
hp
}{
20
191024
}{
test-1.c
}
\gitfile
{
hp
}{
20
201119
}{
test-1.c
}
Hinter
\lstinline
{
return
}
steht ein Ausdruck mit dem
Komma-Operator. Dieser bewirkt, daß der Wert vor dem Komma
...
...
@@ -59,7 +59,7 @@
übergeben und daher
\lstinline
{
return 0
}
ausgeführt.
\item
\gitfile
{
hp
}{
20
191024
}{
test-2.c
}
\gitfile
{
hp
}{
20
201119
}{
test-2.c
}
Das Programm gibt die Zeile
\lstinline
[style=terminal]
{
Die Antwort lautet: 42
}
aus.
...
...
@@ -72,7 +72,7 @@
\lstinline
{
else
}
-Zweig.
\item
\gitfile
{
hp
}{
20
191024
}{
test-3.c
}
\gitfile
{
hp
}{
20
201119
}{
test-3.c
}
Das Programm stürzt mit einer Fehlermeldung
"`Speicherzugriffsfehler"' oder "`Schutzverletzung"' ab.
...
...
@@ -104,7 +104,7 @@
\strut\hfill\url
{
http://heise.de/-193332
}
,
\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 Jahr und den Tag innerhalb des Jahres
für den
\lstinline
{
days
}
-ten Tag nach dem 1.
\,
1.
\,
1980 berechnen soll:
...
...
@@ -195,9 +195,9 @@
Um das Programm zu testen, genügt es, das Datum auf den
31.
\,
12.
\,
1980 zu stellen, also
\lstinline
{
days
}
auf den Wert
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)
reproduziert.
...
...
@@ -205,12 +205,12 @@
Es liegt nahe, den Fehler in der
\lstinline
{
while
}
-Bedingung
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
Oder-Verknüpfungen (
\lstinline
{
||
}
) in der
\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
Verwendung des ternären Operators
\lstinline
{
?:
}
. Dieser
stellt eine "`
\lstinline
{
if
}
-Anweisung für Ausdrücke"' bereit.
...
...
@@ -218,7 +218,7 @@
\lstinline
{
days >
}
den Wert 366 im Falle eines Schaltjahrs
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
}
.
Diese lautet: "`Schreiben Sie das Quelltextfragment so um,
daß es die beschriebenen Probleme nicht mehr enthält."'
...
...
@@ -230,7 +230,7 @@
\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
Variablen
\lstinline
{
DaysInYear
}
. Damit erübrigen sich die
\lstinline
{
if
}
-Anweisungen innerhalb der
...
...
@@ -246,24 +246,24 @@
Um diese Code-Verdopplung loszuwerden, kann man das
\lstinline
{
if
}
durch den
\lstinline
{
?:
}
-Operator ersetzen und
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
\/
}
wird, wenn eine Zuweisung innerhalb einer Bedingung
stattfindet.
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,
daß die Berechnung von
\lstinline
{
DaysInYear()
}
zweimal statt
nur einmal pro Schleifendurchlauf erfolgt, wodurch Rechenzeit
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
an eine Variable -- einmal innerhalb der
\lstinline
{
while
}
-Bedingung und einmal außerhalb.
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
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