-
Notifications
You must be signed in to change notification settings - Fork 2
/
programmierkurs_fpcu.tex
341 lines (317 loc) · 16.7 KB
/
programmierkurs_fpcu.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
\documentclass{article}[12pt]
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[dvipsnames]{xcolor}
\usepackage{lipsum}
\usepackage{amsfonts}
\usepackage[intlimits]{amsmath}
\usepackage{cite}
\usepackage{epsfig}
\usepackage[usenames,dvipsnames]{pstricks}
\usepackage{pstricks-add}
\usepackage{epsfig}
\usepackage{pst-grad} % For gradients
\usepackage{pst-plot} % For axes
\addtolength{\hoffset}{-1.5cm}
\addtolength{\textwidth}{3cm}
\usepackage{listings}
\usepackage{color}
\definecolor{mygreen}{rgb}{0,0.6,0}
\definecolor{mygray}{rgb}{0.5,0.5,0.5}
\definecolor{mymauve}{rgb}{0.58,0,0.82}
\PassOptionsToPackage{svgnames}{xcolor}
\usepackage{tcolorbox}
\usepackage{lipsum}
\tcbuselibrary{skins,breakable}
\usetikzlibrary{shadings,shadows}
\usepackage[scaled]{beramono}
\lstset{ %
backgroundcolor=\color{white}, % choose the background color; you must add \usepackage{color} or \usepackage{xcolor}; should come as last argument
basicstyle=\footnotesize\ttfamily, % the size of the fonts that are used for the code
breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
breaklines=true, % sets automatic line breaking
captionpos=b, % sets the caption-position to bottom
commentstyle=\color{mygreen}, % comment style
deletekeywords={...}, % if you want to delete keywords from the given language
escapeinside={\%*}{*)}, % if you want to add LaTeX within your code
extendedchars=true, % lets you use non-ASCII characters; for 8-bits encodings only, does not work with UTF-8
frame=single, % adds a frame around the code
keepspaces=true, % keeps spaces in text, useful for keeping indentation of code (possibly needs columns=flexible)
keywordstyle=\color{blue}, % keyword style
language=C, % the language of the code
morekeywords={*,...}, % if you want to add more keywords to the set
numbers=left, % where to put the line-numbers; possible values are (none, left, right)
numbersep=5pt, % how far the line-numbers are from the code
numberstyle=\tiny\color{mygray}, % the style that is used for the line-numbers
rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. comments (green here))
showspaces=false, % show spaces everywhere adding particular underscores; it overrides 'showstringspaces'
showstringspaces=false, % underline spaces within strings only
showtabs=false, % show tabs within strings adding particular underscores
stepnumber=1, % the step between two line-numbers. If it's 1, each line will be numbered
stringstyle=\color{mymauve}, % string literal style
tabsize=2, % sets default tabsize to 2 spaces
title=\lstname % show the filename of files included with \lstinputlisting; also try caption instead of title
}
\usepackage{amssymb}
\newenvironment{myexampleblock}[1]{%
\tcolorbox[beamer,%
noparskip,breakable,
colback=White,colframe=ForestGreen,%
colbacklower=LimeGreen!75!White,%
title=#1]}%
{\endtcolorbox}
\newenvironment{myalertblock}[1]{%
\tcolorbox[beamer,%
noparskip,breakable,
colback=White,colframe=Bittersweet,%
colbacklower=Peach!75!White,%
title=#1]}%
{\endtcolorbox}
\newenvironment{myblock}[1]{%
\tcolorbox[beamer,%
noparskip,breakable,
colback=White,colframe=RoyalBlue,%
colbacklower=TealBlue!75!White,%
title=#1]}%
{\endtcolorbox}
\newenvironment{myexampleprogram}[1]{%
\tcolorbox[beamer,%
noparskip,breakable,
colback=White,colframe=Goldenrod,%
colbacklower=Yellow!75!White,%
title=#1]}%
{\endtcolorbox}
%--------
%\usepackage[magyar]{babel}
\title{Programmieren in \texttt{C}}
\author{B.~Kostrzewa, F.~Pittler, M.~Ueding, C.~Urbach}
\begin{document}
\maketitle
\tableofcontents
\include{intro}
%In einem sch\"onen Programm wir nutzten das wenigstens Speicher. In diesem Punkt wir werden lernen,
%wie die Speicherverwaltung behandelt wird.
%Im ersten Teil des Kurses wir haben die elemetare datatypen kennen gelernt. In diesem Punkt wir
%werden lernen, wie mann eigenes Daten Structure herstellen kann. Überhaupt, Warum and Wenn müssen wir neue Structure herstellen.
%Unser Programm mit eigenen Daten strukturen wird leichter lesen zu können. Das ist sehr wichtig. Typischer fehler der Angefangenen Programmern
%ist, dass ihr Code ist sehr schwer zu lesen auch für Sie, und nach einem Monat Sie müssen die ganze Programm
%wieder schreiben. Zum beispiel muss mann eigenes Datenstrukture nutzen, wenn man ein operations sehr often erledigen muss.
%Zum bespiel in der Sorierung eines List, man kann die Daten in einem binären Suchbaum einschließen um die suchen schneller zu lassen.
\include{speichernausdrucken}
\include{variablen}
\include{kontrollstrukturen}
\input{funktionen}
\include{pointersarrays}
\include{standartbibliothek}
\include{einfuegesortieren}
\include{dynamischespeicherverwaltung}
\include{complexdatatypen}
\include{dateinverarbeitung}
\include{stapelspeicher}
%\include{endprojekt}
%as Körper, das C code kannst du oben sehen. Alle C programm besteht aus Funkcionen. Wir nennen function ein part of the code, was eine
%estimmte aufgabe erledigt.
%u wirst es gleich finden, dass du muss zuerst lernenDu musst zuerst den einladen, was jemanden
%eschrieben hat. Zum beispiel, zu computer printen du sollst stdio.h einladen. Sie
%ehören nicht zu den sprache . Danach kommt deine arbeite. Zuerst du sollst andenken was für ein ergebnis deine aufgabe haben soll und
%ie viele eingangsparameter deine programm hat. Du sollst denen es variablen deklarieren. Jetzt kommt die wichtigsten Teil des Program, die
%unktionen. Diese teil rechnet aus den eingangsparameter deine Ergebnis. Es gibt ein specielle function was jeden programm haben
%oll. Das nahme of diese funcktion ist main. Von diesem Punkt beginnt die Ausführung. Wir werden mehr um funckcionen später lernen.
%Im fünften Linie illustrieren wir, dass das Name der Variable nicht mit einem Zahl beginnin darf. Eine practical Beratung ist initializerien
%alle Variables recht im Definition.
%enn zwei operatoren gleichem Prioriät haben, dann zum ersten mal der linkste wird verarbeitet, and danach
%on links nach rechts\footnote{Hier gibt es ausnahme, wenn die Reihenfolge ist umgekehrt. Siehst denn letzten Spalte im Tablellen \ref{priortab}}.
%\begin{lstlisting}{Einf\"ugesortieren in C: Körper }
%#include<stdio.h>
%void read_in_data( int n, int sort[], int unsort[], int argc, char *argv[]){
%statements a1;
%statements b1;
%...
%}
%void einfugesortieren( int n, int sort[], int unsort[]){
%statements a2;
%statements b2;
%...
%}
%void print_out_data( int n, sortiert){
%statements a3;
%statements b3;
%...
%}
%int main( int argc, char *argv[])
%{
% int n=4;
% int sortiert[n];
% int unsortiert[n];
% read_in_data(n, sortiert, unsortier, argc, argv);
% einfugesortieren(n, sortiert, unsortiert);
% print_out_data( n, sortiert);
%
%}
%\end{lstlisting}
%Das Körper, das C code kannst du oben sehen. Alle C programm besteht aus Funkcionen. Wir nennen function ein part of the code, was eine
%bestimmte aufgabe erledigt.
%Du wirst es gleich finden, dass du muss zuerst lernenDu musst zuerst den einladen, was jemanden
%geschrieben hat. Zum beispiel, zu computer printen du sollst stdio.h einladen. Sie
%gehören nicht zu den sprache. Danach kommt deine arbeite. Zuerst du sollst andenken was für ein ergebnis deine aufgabe haben soll und
%wie viele eingangsparameter deine programm hat. Du sollst denen es variablen deklarieren. Jetzt kommt die wichtigsten Teil des Program, die
%Funktionen. Diese teil rechnet aus den eingangsparameter deine Ergebnis. Es gibt ein specielle function was jeden programm haben
%soll. Das nahme of diese funcktion ist main. Von diesem Punkt beginnt die Ausführung. Wir werden mehr um funckcionen später lernen.
%Zum beispiel in C sieht die obene Auflistung so aus:
%\begin{lstlisting}{Einf\"ugesortieren in C}{
%1: int n=4;
% int unsortiert[n], sortiert[n];
%2; sortiert[0]=2;
%3; unsortiert[0]=9;
% unsortiert[1]=5;
% unsortiert[2]=7;
%4; for (int i=1; i<n-1;++i){
% sortiert[length]=unsortiert[i]
%5-6; for (int j=length-1; j>0; --j){
% if (sortiert[j+1]<sortiert[j]){
% int tmp=sortiert[j];
% sortiert[j]=sortiert[j+1];
% sortiert[j+1]=tmp;
% }
% else{
% break;
% }
% }
% length++;
% }
%}
%\end{lstlisting}
%''for`` steht f\"ur Schleife und wir nutzten das "A" array
%Warum solltest du C programmier sprache lernen? Es gibt viele Antwort auf diese Frage. Zum Beispiel:
%\begin{itemize}
%\item C ist nicht kompliziert
%\item C ist sehr effizient
%\item C hat high level konstrukte
%\end{itemize}
%Aber M\"oglicherweise das beste Antwort ist das C Kenntnisse ist unbedingt in Forschungsrechnungen. Die meisten Programme,
%der zum Stand der Technik geh\"oren sind C programme. In diesem Kurz wir werden diese Sprache kennenlernen. Zuerst
%wir zusammenfasseen was in der Sprache inbegriffen ist. Du wirst dich verwundern, das die einfachste funktion, was
%nur etwas auf deinem Monitor zeigt, geh\"ort nicht zu der Sprache. Wir vorstellen das k\"orper einem durchschnittlichen
%C program und erkl\"aren sein Teilen.
%Danach z\"ahlen wir die Komponenten der Sprache auf. Das wird beginnen mit der data Typen und Operationen, in denen wir
%die Typen nutzen k\"onnen. Wir werden alle elementare Data type lernen. Mit Variablen aus diesen Typen k\"onnen wir Operationen machen,
%die unsere Ergebnisse herstellen werden. Dann werden wir elementare Statements und Expressions einf\"uhren, mit denen
%wir kleinen Aufgaben l\"osen k\"onnen.
%Es is sehr wichtig, dass unsere Programm Parameter erhalten zu k\"onnen. Wir k\"onnen das erreichen durch Funkcionen.
%Die Funkcionen arbeiten wie schwarze K\"asten. Sie stellen von den Eingangsparameter ein neues Wert her. Wir zeigen,
%wie man die Standart Eingabe und Ausgabe Bibliothek nutzten kann. Nachdem wir diese F\"ahigkeiten verstehen, werden wir etwas
%komplizierte \"Ubungen schreiben.
%Often gibt es Situationen in den wir mehr als Ein ergebnisse von einem Funktionen wollen. Um das erreichen
%m\"ussen wir die Addressirung der Memorie kennen zu lernen. In diesem Punkt werden wir auch lernen, wie man
%strings verwendet kann.
%
%In einem sch\"onen Programm wir nutzten das wenigstens Speicher. In diesem Punkt wir werden lernen,
%wie die Speicherverwaltung behandelt wird.
%Im ersten Teil des Kurses wir haben die elemetare datatypen kennen gelernt. In diesem Punkt wir
%werden lernen, wie mann eigenes Daten Structure herstellen kann. Überhaupt, Warum and Wenn müssen wir neue Structure herstellen.
%Unser Programm mit eigenen Daten strukturen wird leichter lesen zu können. Das ist sehr wichtig. Typischer fehler der Angefangenen Programmern
%ist, dass ihr Code ist sehr schwer zu lesen auch für Sie, und nach einem Monat Sie müssen die ganze Programm
%wieder schreiben. Zum beispiel muss mann eigenes Datenstrukture nutzen, wenn man ein operations sehr often erledigen muss.
%Zum bespiel in der Sorierung eines List, man kann die Daten in einem binären Suchbaum einschließen um die suchen schneller zu lassen.
%\section{Der Körper des C programms}
%\begin{lstlisting}{caption= Do nothing}
%#include<stdio.h>
%int main( int argv, char *argv[])
%{
%/* do nothing */
%}
%\end{lstlisting}
%Welche Teile hat ein C programm.
%Du wirst es gleich finden, dass du muss zuerst lernenDu musst zuerst den einladen, was jemanden
%geschrieben hat. Zum beispiel, zu computer printen du sollst stdio.h einladen. Sie
%gehören nicht zu den sprache . Danach kommt deine arbeite. Zuerst du sollst andenken was für ein ergebnis deine aufgabe haben soll und
%wie viele eingangsparameter deine programm hat. Du sollst denen es variablen deklarieren. Jetzt kommt die wichtigsten Teil des Program, die
%Funktionen. Diese teil rechnet aus den eingangsparameter deine Ergebnis. Es gibt ein specielle function was jeden programm haben
%soll. Das nahme of diese funcktion ist main. Von diesem Punkt beginnt die Ausführung. Wir werden mehr um funckcionen später lernen.
%\section{Was ist Programmieren}
%Es gibt ein Problem, Sie müssen die Lösung finden. What we call input variables? What are the output variables? Specific problem?
%\section{Definitionen, Statements}
%Die Variablen haben Wert und Typ. Warum ist das Typ der Variable wichtig? Es hängt vom Typ ab, was für ein Wert eine Variable haben
%kann. Das Typ entscheid also die Grösse des Arbeitspeicher zu deine Variable. Mann kann nun solche Funkcionen und Operatoren nutzen, das
%genanue Datentype hat. Es gibt elementare data Typen mit dem wir spielen können. Sie sind
%\begin{itemize}
%\item char
%\item int
%\item float
%\item double
%\end{itemize}
%Im char können wir eine character speichern(die bereich?). Größe, im können wir ein Ganzzeil spiechern von wert 0 bis 2**32-1 größe.
%Im fließkommazahl von bis speichern grösse.
%\subsection{Mein erstes C programm}
%von linein bis linien wir erklären Einfachste Programm der Welt "Hello World.c"
%Ein bisschen schwerer aufgabe, sie müssen ausrechnen die Würzel einer quadratische Gleichung.
%\section{Aufgaben}
%\subsection{Zufallszahlgenerator}
%Zufällige nummer sind sehr wichtig für uns. In numerischen physik wir nutzten Zufallszahlen ganz often. Zum Beispiel
%in die einfachsten method für integration of mehreren variablen Funkctions müssen wir Monte Carlo algorithm nutzten. Die
%enthalten statements, die vom Werte auf Zufällige variablen abhängt. In dieser Aufgabe wir müssen eine Zufallszahlgenerator
%schreiben. Es gibt mehrere methode dazu, aber alle stammt aus linear Kongruenzen:
%\begin{equation}
%I_{j+1}=a I_{j} \left( \mathrm{mod} m\right).
%\label{basics}
%\end{equation}
%Diesen Instruktion macht eine neue Zufallszahl ($I_{j+1}$) aus einem original ($I_j$). Der qualität der Zufallszahl generator
%hängt von dem eingangsparameters (a,m) ab. Eine gute Zufallszahlgenerator hat große period, die Zeit zwischen den beiden gleichen
%Zufallszahl muss sehr groß sein. Park und Miller hat die folgenden parameter für a und m gewählt:
%\begin{equation}
%a=16807, m=2^{31}-1=2147483647.
%\end{equation}
%Leider direkte implementation der Zufallszahlgenerator mit deisen parameters ist nicht möglich in C. Der grund ist
%wir können nicht speichern Zahlen grossen als $m$. Zum glück gibt es eine möglichkeit das Problem umzugehen.
%Wir faktorizieren $m$:
%\begin{equation}
%m= aq + r; r= m \left(\mathrm{mod}a\right); q= \left[m/a\right]
%\end{equation}
%Damit können wir Gleichung \ref{basics} auch bewerten mit ($q,r$):
%\begin{equation}
%a I_j \left( \mathrm{mod} m\right)=
%\left\{ \begin{array}{rc}
%a\left(I_j \mathrm{mod} q\right) -r \left[I_j/q\right] & \mathrm{wenn~es~}>0\mathrm{ist} \\
%a\left(I_j \mathrm{mod} q\right) -r \left[I_j/q\right] + m & \mathrm{andernfalls} \\
%\end{array}\right.
%\label{algo}
%\end{equation}
%wo $r=2836,q=127773$ ist. Implementieren Sie das Zufallszahlgenerator nach eq.\ref{algo}. Ändern Sie die Algorithm
%um die Zahlen zwischen 0 und 1 zu sein werden.
%Es ist wichtig zu test unser Ergebnis. Wir müssen kontrollieren die Verteilung (Distribution) der Zufallszahlgenerator.
%Wir möchten gleichmäßige vertailung zu erreichen. Wir werden eine Histogramms machen aus dem Zufallszahlen. Wir teilen
%das Interval in $n$ Teilen und zahlen wie oft die Zufallszahl in jedem Interval sinkt. Machen Sie ein Histogramm aus
%den Verfügbaren daten und prüfen wie gleichmäßig der Verteilung ist!
%\section{Elementare operatoren}
%\subsection{Binäre, Aritmethic operatoren}
%+,-,*,/, \%, ++, --
%\subsection{Gleichungen}
%==,!=, >,<, >=,<=
%\subsection{Bitwise}
%\&,|,\^, ~, >>,<<
%\subsection{Zuweisungsoperator}
%=,+=,-=,|=,\&=,\^=,\%=,<<|,>>|,
%\subsection{Aufgaben}
%Programm rechnet die Wurzel, der gleichung
%\section{statements}
%\subsection{Schleifen}
%Was ist wichtig, wenn wir ein Schleifen plan? Wir müssen nicht überschreiben eine existierte variable. Wir müssen keine
%statements haben, was nicht von der Schleifenzahlnummer abhängt.
%\subsection{If then else}
%\subsection{case}
%\subsection{Standard input, output}
%\subsection{Conways Spiel des Lebens}
%Wir habe eine quadrate Gitter. In alle Zell der Gitter eine zwei hältige variable. Es sagte uns, wenn der
%kleine microbe im Zell, lebt oder nicht.
%\section{Funkcionen}
%\section{Addressierung}
%\subsection{Stackel(LIFO)}
%\subsection{Fifo}
%\subsection{Umgekehrte Polnische Notation}
%\section{Dynamische speicherverwaltung}
%\section{Daten strukturen}
%\subsection{Ketten listen}
%\subsection{Bäumen}
%\subsection{Recursive functionen, Schnell sortieren}
\end{document}