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

Lehrmaterialien 12.11.2018

parent e521201a
Branches
No related tags found
No related merge requests found
File added
% hp-20181112.pdf - Lecture Slides on Low-Level Programming
% Copyright (C) 2012, 2013, 2015, 2016, 2017, 2018 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: String-Operationen
\documentclass[10pt,t]{beamer}
\usepackage{pgslides}
\usepackage{pdftricks}
\usepackage{tikz}
\begin{psinputs}
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
\usepackage[T1]{fontenc}
\usepackage{helvet}
\renewcommand*\familydefault{\sfdefault}
\usepackage{pstricks,pst-grad}
\end{psinputs}
\title{Hardwarenahe Programmierung}
\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
\date{12.\ November 2018}
\begin{document}
\maketitleframe
\nosectionnonumber{\inserttitle}
\begin{frame}
\shownosectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/hp.git}}}
\item[\textbf{2}] \textbf{Einführung in C}
\begin{itemize}
% \item[2.1] Hello, world!
\vspace*{-0.1cm}
\item[\dots]
\item[2.13] Dateien und Fehlerbehandlung
\item[2.14] Parameter des Hauptprogramms
\color{medgreen}
\item[2.15] String-Operationen
\end{itemize}
\item[\textbf{3}] \textbf{Bibliotheken}
\begin{itemize}
\color{medgreen}
\item[3.1] Der Präprozessor
\item[3.2] Bibliotheken einbinden
\color{orange}
\item[3.3] Bibliotheken verwenden
\vspace*{-0.1cm}
\item[\dots]
% \item[3.4] Projekt organisieren: make
\end{itemize}
\item[\textbf{\dots}]
% \item[\textbf{4}] \textbf{Hardwarenahe Programmierung}
% \item[\textbf{5}] \textbf{Algorithmen}
% \item[\textbf{6}] \textbf{Ergänzungen und Ausblicke}
\end{itemize}
\vspace*{-1cm}
\end{frame}
\setcounter{section}{1}
\section{Einführung in C}
\setcounter{subsection}{14}
\subsection{String-Operationen}
\begin{frame}[fragile]
\showsubsection
\begin{lstlisting}
#include <stdio.h>
int main (void)
{
char name[100];
printf ("Ihr Name: ");
fgets (name, 100, stdin);
printf ("Hallo, %s!\n", name);
return 0;
}
\end{lstlisting}
\vspace*{-4.5cm}\strut\hfill
\begin{minipage}{6cm}
Probleme mit \lstinline{scanf ("%s", name)}:
\begin{itemize}
\item
Leerzeichen beendet Eingabe
\item
keine Prüfung der Puffergröße
\end{itemize}
\end{minipage}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\vspace*{-1.4\medskipamount}
\vbox to 0pt{%
\begin{lstlisting}[gobble=6]
#include <stdio.h>
#include <string.h>
int main (void)
{
char hello[] = "Hello, world!\n";
printf ("%s\n", hello);
printf ("%zd\n", strlen (hello));
printf ("%s\n", hello + 7);
printf ("%zd\n", strlen (hello + 7));
hello[5] = 0;
printf ("%s\n", hello);
printf ("%zd\n", strlen (hello));
return 0;
}
\end{lstlisting}
\vss
}
% \pause
\strut\hfill
\begin{minipage}{5.5cm}
\begin{itemize}
\item
\lstinline{strlen()} gibt die\\
Länge eines Strings zurück.
\item
Es enthält eine Schleife.
% \pause
\item
Typ des Rückgabewerts:\\
\lstinline{size_t} = ganze Zahl\\
von der Größe eines Zeigers
\item
in \lstinline{printf()}: \lstinline{%zd} (\emph{si\textbf{z}e})
% \pause
\bigskip
\item
Zeiger erhöhen:\\
String vorne abschneiden
% \pause
\item
\lstinline{0}-Symbol (= Ende-Markierung)\\
in den String schreiben:\\
String hinten abschneiden
% \pause
\item
\textbf{Der für den String reservierte Speicherplatz bleibt derselbe!}
\end{itemize}
\end{minipage}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\vspace*{-1.4\medskipamount}
\vbox to 0pt{%
\begin{lstlisting}[gobble=6]
#include <stdio.h>
#include <string.h>
int main (void)
{
char *anton = "Anton";
char *zacharias = "Zacharias";
printf ("%d\n", strcmp (anton, zacharias));
printf ("%d\n", strcmp (zacharias, anton));
printf ("%d\n", strcmp (anton, anton));
char buffer[100] = "Huber ";
strcat (buffer, anton);
printf ("%s\n", buffer);
return 0;
}
\end{lstlisting}
\vss
}
% \pause
\strut\hfill
\begin{minipage}{5.5cm}
\begin{itemize}
\item
\lstinline{strcmp()}: Strings vergleichen
\item
alphabetisch nach ASCII\\
(Groß- $<$ Kleinbuchstaben,\\
ohne Umlaute usw.)
\item
Rückgabewert:\\
$-1$, wenn linker String kleiner,\\
$+1$, wenn rechter String kleiner,\\
$0$, wenn beide Strings gleich
% \pause
\bigskip
\item
\lstinline{strcat()}: String anhängen\\
(\emph{con\textbf{cat}enate})
% \pause
\item
\textbf{Ob der Speicherplatz reicht, wird nicht geprüft!}
\end{itemize}
\end{minipage}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\vspace*{-1.4\medskipamount}
\vbox to 0pt{%
\begin{lstlisting}[gobble=6]
#include <stdio.h>
#include <string.h>
int main (void)
{
char buffer[100] = "";
sprintf (buffer, "Die Antwort lautet: %d", 42);
printf ("%s\n", buffer);
char *answer = strstr (buffer, "Antwort");
printf ("%s\n", answer);
printf ("found at: %zd\n", answer - buffer);
return 0;
}
\end{lstlisting}
\vss
}
% \pause
\strut\hfill
\begin{minipage}{5.5cm}
\begin{itemize}
\item
\lstinline{sprintf()}: in einen\\
String schreiben
% \pause
\item
\textbf{Ob der Speicherplatz reicht, wird nicht geprüft!}
% \pause
\vspace{4\bigskipamount}
\item
\lstinline{strstr()}: String in String suchen
\item
Rückgabewert: Zeiger auf den gefundenen String
\item
Index berechnen:\\
Zeiger $-$ Zeiger $=$ Zahl\\
von der Größe eines Zeigers
\end{itemize}
\end{minipage}
\end{frame}
\begin{frame}
\showsection
Sprachelemente weitgehend komplett
\bigskip
Es fehlen:
\begin{itemize}
\item
Ergänzungen (z.\,B.\ ternärer Operator, \lstinline{union}, \lstinline{unsigned}, \lstinline{volatile})
\item
Bibliotheksfunktionen (z.\,B.\ \lstinline{malloc()})
\arrowitem
werden eingeführt, wenn wir sie brauchen
\bigskip
\item
Konzepte (z.\,B.\ rekursive Datenstrukturen, Klassen selbst bauen)
\arrowitem
werden eingeführt, wenn wir sie brauchen, oder:
\arrowitem
Literatur\\[\smallskipamount]
(z.\,B.\ Wikibooks: C-Programmierung,\\
Dokumentation zu Compiler und Bibliotheken)
\bigskip
\item
Praxiserfahrung
\arrowitem
Übung und Praktikum: nur Einstieg
\arrowitem
selbständig arbeiten
\end{itemize}
\end{frame}
\end{document}
../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
../common/logo-hochschule-bochum.pdf
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment