Skip to content
Snippets Groups Projects
Commit bd2ab4cc authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

Neue Übungsaufgabe 14.1.2021

parent 0e6f468f
No related branches found
No related tags found
No related merge requests found
#include <stdint.h> #include <stdio.h>
#include <avr/io.h> #include <string.h>
#include <avr/interrupt.h>
uint8_t counter = 1; void insert_into_string (char src, char *target, int pos)
uint8_t leds = 0;
ISR (TIMER0_COMP_vect)
{
if (counter == 0)
{
leds = (leds + 1) % 8;
PORTC = leds << 4;
}
counter++;
}
void init (void)
{ {
cli (); int len = strlen (target);
TCCR0 = (1 << CS01) | (1 << CS00); for (int i = pos; i < len; i++)
TIMSK = 1 << OCIE0; target[i+1] = target[i];
sei (); target[pos] = src;
DDRC = 0x70;
} }
int main (void) int main (void)
{ {
init (); char test[100] = "Hochshule Bochum";
while (1) insert_into_string ('c', test, 5);
; /* do nothing */ printf ("%s\n", test);
return 0; return 0;
} }
No preview for this file type
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
% Attribution-ShareAlike 3.0 Unported License along with this % Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>. % document. If not, see <http://creativecommons.org/licenses/>.
% README: Zahlensysteme, Mikrocontroller, LED-Blinkmuster % README: Zahlensysteme, Mikrocontroller, Einfügen in Strings (Ergänzung)
\documentclass[a4paper]{article} \documentclass[a4paper]{article}
...@@ -161,6 +161,100 @@ ...@@ -161,6 +161,100 @@
\end{itemize} \end{itemize}
\end{minipage} \end{minipage}
\exercise{Einfügen in Strings (Ergänzung)}
Diese Aufgabe ist eine Ergänzung von Aufgabe 2 der Übung vom 10.\ Dezember
2020 um die Teilaufgaben (e), (f) und (g). Für den "`Klausur-Modus"' können
Sie die Teilaufgaben (a) bis (d) als "`bereits gelöst"' voraussetzen.
Wir betrachten das folgende Programm (\gitfile{hp}{2020ws/20210114}{aufgabe-3.c}):
% \begin{lstlisting}[style=numbered]
\begin{lstlisting}
#include <stdio.h>
#include <string.h>
void insert_into_string (char src, char *target, int pos)
{
int len = strlen (target);
for (int i = pos; i < len; i++)
target[i+1] = target[i];
target[pos] = src;
}
int main (void)
{
char test[100] = "Hochshule Bochum";
insert_into_string ('c', test, 5);
printf ("%s\n", test);
return 0;
}
\end{lstlisting}
Die Ausgabe des Programms lautet:
\lstinline[style=terminal]{Hochschhhhhhhhhhh}
\begin{enumerate}[\quad(a)]
\item
Erklären Sie, wie die Ausgabe zustandekommt.
% \points{3}
% \workspace{12}
\item
Schreiben Sie die Funktion \lstinline|insert_into_string()| so um,
daß sie den Buchstaben \lstinline{src} an der Stelle \lstinline{pos}
in den String \lstinline{target} einfügt.\par
Die Ausgabe des Programms müßte dann
\lstinline[style=terminal]{Hochschule Bochum} lauten.
% \points{2}
% \workspace{13}
\item
Was kann passieren, wenn Sie die Zeile
\lstinline{char test[100] = "Hochshule Bochum";}\\
durch
\lstinline{char test[] = "Hochshule Bochum";} ersetzen?
Begründen Sie Ihre Antwort.
% \points{2}
% \workspace{10}
\item
Was kann passieren, wenn Sie die Zeile
\lstinline{char test[100] = "Hochshule Bochum";}\\
durch
\lstinline{char *test = "Hochshule Bochum";} ersetzen?
Begründen Sie Ihre Antwort.
% \points{2}
% \workspace{10}
\item
Schreiben Sie eine Funktion
\lstinline{void insert_into_string_sorted (char src, char *target)},
die voraussetzt, daß der String \lstinline{target} alphabetisch sortiert ist
und den Buchstaben \lstinline{src} an der alphabetisch richtigen Stelle
einfügt. Diese Funktion darf die bereits vorhandene Funktion
\lstinline|insert_into_string()| aufrufen.\\
\points{4}\par
Zum Testen eignen sich die folgenden Zeilen im Hauptprogramm:
\begin{lstlisting}[gobble=8]
char test[100] = "";
insert_into_string_sorted ('c', test);
insert_into_string_sorted ('a', test);
insert_into_string_sorted ('d', test);
insert_into_string_sorted ('b', test);
\end{lstlisting}
Danach sollte \lstinline{test[]} die Zeichenfolge \lstinline{"abcd"} enthalten.
% \workspace{14}
\item
Wie schnell (Landau-Symbol in Abhängigkeit von der Länge $n$ des Strings)
arbeitet Ihre Funktion
\lstinline{void insert_into_string_sorted (char src, char *target)}?
Begründen Sie Ihre Antwort.
\points{1}
% \workspace{10}
\item
Beschreiben Sie -- in Worten oder als C-Quelltext --, wie man die Funktion\\
\lstinline{void insert_into_string_sorted (char src, char *target)}
so gestalten kann,\\
daß sie in $\mathcal{O}(\log n)$ arbeitet.
\points{3}
% \workspace{35}
\end{enumerate}
\begin{flushright} \begin{flushright}
\textit{Viel Erfolg!} \textit{Viel Erfolg!}
\end{flushright} \end{flushright}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment