Skip to content
Snippets Groups Projects
Select Git revision
  • e5944132b6e5d18eed605e367f67c4524bd8ccbf
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

Rakefile

  • hp-uebung-20191205.tex 5.13 KiB
    % hp-uebung-20191205.pdf - Exercises on Low-Level Programming
    % Copyright (C) 2013, 2015, 2016, 2017, 2018, 2019  Peter Gerwinski
    %
    % This document is free software: you can redistribute it and/or
    % modify it either under the terms of the Creative Commons
    % Attribution-ShareAlike 3.0 License, or under the terms of the
    % GNU General Public License as published by the Free Software
    % Foundation, either version 3 of the License, or (at your option)
    % any later version.
    %
    % This document is distributed in the hope that it will be useful,
    % but WITHOUT ANY WARRANTY; without even the implied warranty of
    % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    % GNU General Public License for more details.
    %
    % You should have received a copy of the GNU General Public License
    % along with this document.  If not, see <http://www.gnu.org/licenses/>.
    %
    % You should have received a copy of the Creative Commons
    % Attribution-ShareAlike 3.0 Unported License along with this
    % document.  If not, see <http://creativecommons.org/licenses/>.
    
    % README: Löschen aus Strings, Hexdumps
    
    \documentclass[a4paper]{article}
    
    \usepackage{pgscript}
    
    \begin{document}
    
    %  \thispagestyle{empty}
    
      \section*{Hardwarenahe Programmierung\\
                Übungsaufgaben -- 5.\ Dezember 2019}
    
      Diese Übung enthält Punkteangaben wie in einer Klausur.
      Um zu "`bestehen"', müssen Sie innerhalb von 60 Minuten
      unter Verwendung ausschließlich zugelassener Hilfsmittel
      10 Punkte (von insgesamt \totalpoints) erreichen.
    
      \exercise{Löschen aus Strings}
    
      Wir betrachten das folgende Programm (\gitfile{hp}{20191205}{aufgabe-1.c}):
      \begin{lstlisting}[style=numbered]
        #include <stdio.h>
        #include <string.h>
    
        void delete_char_from_string (char *s, int pos)
        {
          for (int i = strlen (s) - 1; i > pos; i--)
            s[i - 1] = s[i];
        }
    
        int main (void)
        {
          char test[] = "Hochschule Boochum";
          delete_char_from_string (test, 12);
          printf ("%s\n", test);
          return 0;
        }
      \end{lstlisting}
      Die Ausgabe des Programms lautet:
      \lstinline[style=terminal]{Hochschule Bmmmmmm}
    
      \begin{enumerate}[\quad(a)]
        \item
          Erklären Sie, wie die Ausgabe zustandekommt.
          \points{3}
    %      \workspace{12}
        \item
          Schreiben Sie die Funktion \lstinline{delete_char_from_string()} so um,
          daß sie aus dem String \lstinline{s} das Zeichen an der Stelle \lstinline{pos}
          löscht.\par
          Die Ausgabe des Programms müßte dann
          \lstinline[style=terminal]{Hochschule Bochum} lauten.
          \points{4}
    %      \workspace{15}
        \item
          Was kann passieren, wenn Sie 
          \lstinline{char test[] = "Hochschule Boochum";} \\
          durch
          \lstinline{char *test = "Hochschule Boochum";}
          ersetzen? Begründen Sie Ihre Antwort.
          \points{2}
    %      \workspace{9}
        \item
          Schreiben Sie eine Funktion
          \lstinline{void delete_from_string (char *s, int pos, int length)},
          die \lstinline{length} Zeichen ab der Stelle \lstinline{pos}
          aus dem String \lstinline{s} löscht,
          \emph{indem sie die in Aufgabenteil (b) korrigierte Funktion\/}
          \lstinline{void delete_char_from_string (char *s, int pos)}
          \emph{wiederholt aufruft}. \par
    %      Wie schnell (Landau-Symbol in Abhängigkeit von der Länge $n$ des Strings)
    %      arbeitet diese Funktion
    %      \lstinline{delete_from_string()}?
    %      Begründen Sie Ihre Antwort.
    %      \points{3}
          \points{2}
    %      \workspace{15}
        \item
          Schreiben Sie eine \emph{optimierte\/} Funktion
          \lstinline{void quick_delete_from_string (char *s, int pos, int length)},
          die ebenfalls \lstinline{length} Zeichen ab der Stelle \lstinline{pos}
          aus dem String \lstinline{s} löscht,
    %      dafür aber höchstens $\mathcal{O}(n)$ an Rechenzeit benötigt.
          aber mit einer einzigen Schleife auskommt.
          \points{4}
    %      \workspace{15}
      \end{enumerate}
    
      \clearpage
      \exercise{Hexdumps}
    
      Das folgende Programm (\gitfile{hp}{20191205}{aufgabe-2.c}) liest
      einen String ein und gibt die ASCII-Werte der Buchstaben hexadezimal aus.
      (Anders als z.\,B.\ \lstinline{scanf()}
      akzeptiert die Funktion \lstinline{fgets()} zum Lesen von Strings auch Leerzeichen,
      und sie vermeidet Pufferüberläufe.)
      \begin{lstlisting}[style=numbered]
        #include <stdio.h>
    
        int main (void)
        {
          char buffer[100];
          fgets (buffer, 100, stdin);
          for (char *p = buffer; *p; p++)
            printf ("%02x", *p);
          printf ("\n");
        }
      \end{lstlisting}
      Beispiel: Bei der Eingabe von \lstinline[style=cmd]{Dies ist ein Test.}
      erscheint die Ausgabe\\
      \lstinline[style=terminal]{44696573206973742065696e20546573742e0a}.
    
      Schreiben Sie ein Programm, das diese Umwandlung in umgekehrter Richtung vornimmt,
      also z.\,B.\ bei Eingabe von \lstinline[style=cmd]{44696573206973742065696e20546573742e0a}
      wieder \lstinline[style=terminal]{Dies ist ein Test.} ausgibt.
    
      \points{6}
    
      Hinweis für die Klausur:
      Abgabe in digitaler Form ist erwünscht, aber nicht zwingend.
    
      \begin{flushright}
        \textit{Viel Erfolg!}
      \end{flushright}
    
      \makeatletter
        \immediate\write\@mainaux{\string\gdef\string\totalpoints{\arabic{points}}}
      \makeatother
    
    \end{document}