From ff4bce70e230b942c8165e01e0c4ec1215bed822 Mon Sep 17 00:00:00 2001 From: flavis Date: Wed, 11 Dec 2019 02:14:21 +0100 Subject: [PATCH] update ana, add ipi7 --- ws2019/ana/lectures/analysis.pdf | Bin 370758 -> 370761 bytes ws2019/ana/lectures/analysis13.pdf | Bin 154246 -> 155222 bytes ws2019/ana/lectures/analysis13.tex | 6 +- ws2019/ana/lectures/analysis14.tex | 8 +- ws2019/ipi/uebungen/haseigel.cpp | 147 ++++++++++++++++++++++++++ ws2019/ipi/uebungen/ipi7.pdf | Bin 20138 -> 29444 bytes ws2019/ipi/uebungen/ipi7.tex | 32 +++++- ws2019/ipi/uebungen/queue.cpp | 84 +++++++++++++++ ws2019/ipi/uebungen/queue_einfach.cpp | 83 +++++++++++++++ 9 files changed, 352 insertions(+), 8 deletions(-) create mode 100644 ws2019/ipi/uebungen/haseigel.cpp create mode 100644 ws2019/ipi/uebungen/queue.cpp create mode 100644 ws2019/ipi/uebungen/queue_einfach.cpp diff --git a/ws2019/ana/lectures/analysis.pdf b/ws2019/ana/lectures/analysis.pdf index 3f0fba0c63ca6b3173e50ce5800ff4f9e2ec92fa..63f7a3a5b49857fed02190f46a797bc106e50c98 100644 GIT binary patch delta 12838 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 delta 12808 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 S^MmDO6=WGjM05;w8UF)Vs`jM- delta 19261 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 NGB`L2B_%~qMhdqtuIB&% diff --git a/ws2019/ana/lectures/analysis13.tex b/ws2019/ana/lectures/analysis13.tex index 3cd406e..5c1058b 100644 --- a/ws2019/ana/lectures/analysis13.tex +++ b/ws2019/ana/lectures/analysis13.tex @@ -45,7 +45,7 @@ Aus Definitionen: betrachten die Folge der $n$-ten Partialsumme $(s_n)_{n \in \N}$ definiert durch: \[ - s_n := \sum_{k=1}^{\infty} a_k + s_n := \sum_{k=1}^{n} a_k .\] Die Reihe $\sum_{k=1}^{\infty} a_k $ konvergiert (divergiert), wenn die Folge der Partialsummen $(s_n)_{n\in\N}$ konvergiert (divergiert). @@ -65,14 +65,14 @@ Aus Definitionen: \sum_{k=0}^{\infty} q^{k} = 1 + q + q^2 + q^{3} + \ldots .\] $\sum_{k=0}^{\infty} q^{k}$ konvergiert genau für alle $ q \in \mathbb{C}$ mit $|q| < 1$ und - es gilt $\sum_{0=1}^{\infty} q^{k} = \frac{1}{1-q}$. + es gilt $\sum_{k=0}^{\infty} q^{k} = \frac{1}{1-q}$. \label{geometrischereihe} \end{bsp} \begin{proof} Folge der Partialsummen \[ - s_n = \sum_{k=0}^{\infty} q^{k} = \begin{cases} + s_n = \sum_{k=0}^{n} q^{k} = \begin{cases} \frac{1 - q^{n+1}}{1 - q} \quad q \neq 1 & q \neq 1 \\ n + 1 & q = 1 \end{cases} diff --git a/ws2019/ana/lectures/analysis14.tex b/ws2019/ana/lectures/analysis14.tex index 6e51eeb..21c1b99 100644 --- a/ws2019/ana/lectures/analysis14.tex +++ b/ws2019/ana/lectures/analysis14.tex @@ -48,7 +48,7 @@ .\] $\implies \sum_{n=1}^{\infty} (\frac{1}{2})^{n}$ konvergente Majorante für $\sum_{n=1}^{\infty} \frac{n}{4^{n}}$. \item $\sum_{n=1}^{\infty} \frac{1}{\sqrt{n} } $ ist divergent, weil - $\frac{1}{\sqrt{n} } \ge \frac{1}{n}$ ($\sqrt{n} \ge 1$ + $\frac{1}{\sqrt{n} } \ge \frac{1}{n}$ ($\sqrt{n} \ge 1$) $\implies \sum_{n=1}^{\infty} \frac{1}{n}$ divergente Minorante. \end{enumerate} @@ -74,9 +74,9 @@ Kostina glaubt, dass das so stimmt, aber offensichtlich ist sie sich nicht siche \item $\forall n \ge N_0$ gilt: \[ |a_n| \le q |a_{n-1}| \le \ldots \le q^{n-N_0} |a_{N_0}| - .\] $\implies \frac{|a_{N_0}}{q^{N_0}} \sum_{n=1}^{\infty} q^{n}$ + .\] $\implies \frac{|a_{N_0}|}{q^{N_0}} \sum_{n=1}^{\infty} q^{n}$ ist konvergente Majorante. - \item $|a_n| \ge |a_{n-1}| \ge \ldots \ge |a_n| \implies + \item $|a_n| \ge |a_{n-1}| \ge \ldots \ge |a_{N}| \implies (a_n)_{n\in\N}$ keine Nullfolge $\implies \sum_{n=1}^{\infty} a_n$ divergiert. \end{enumerate} @@ -131,7 +131,7 @@ Kostina glaubt, dass das so stimmt, aber offensichtlich ist sie sich nicht siche Sei $(a_n)_{n\in\N}$, $a_n \in \R_{+}$, eine reelle, positive monoton fallende Nullfolge. Dann gilt \[ - \sum_{k=1}^{\infty} a_k \text{ konvergent } \iff \sum_{k=1}^{\infty} 2^{k} a_{2k} \text{ konvergent} + \sum_{k=1}^{\infty} a_k \text{ konvergent } \iff \sum_{k=1}^{\infty} 2^{k} a_{2^{k}} \text{ konvergent} .\] \end{satz} diff --git a/ws2019/ipi/uebungen/haseigel.cpp b/ws2019/ipi/uebungen/haseigel.cpp new file mode 100644 index 0000000..ffc6d91 --- /dev/null +++ b/ws2019/ipi/uebungen/haseigel.cpp @@ -0,0 +1,147 @@ +#include + +// Ein Listenelement +struct IntListElem { + IntListElem* next; // Zeiger auf nächstes Element + int value; // Daten zu diesem Element +} ; + +// Eine Liste +struct IntList { + int count; // Anzahl Elemente in der Liste + IntListElem* first; // Zeiger auf erstes Element der Liste +} ; + + +// Initialisiere eine Listenstruktur +void empty_list (IntList* l) +{ + l->first = 0; // 0 ist keine gueltige Adresse: Liste ist leer + l->count = 0; +} + +// Fuege ein Element nach einem gegebenem ein +void insert_in_list (IntList* list, IntListElem* where, IntListElem* ins) +{ + if (where==0) // fuege am Anfang ein + { + ins->next = list->first; + list->first = ins; + list->count = list->count + 1; + } + else // fuege nach where ein + { + ins->next = where->next; + where->next = ins; + list->count = list->count + 1; + } +} + +// Entferne ein Element nach einem gegebenem +// Liefere das entfernte Element zurueck +IntListElem* remove_from_list (IntList* list, IntListElem* where) +{ + IntListElem* p; // das entfernte Element + + // where==0 dann entferne erstes Element + if (where==0) + { + p = list->first; + if (p!=0) + { + list->first = p->next; + list->count = list->count - 1; + } + return p; + } + + // entferne Element nach where + p = where->next; + if (p!=0) + { + where->next = p->next; + list->count = list->count - 1; + } + return p; +} + +// creates a cyclic list with a linear part of k elements +// and a cyclic part of n elements +IntList* make_cyclic_list(int k, int n) { + IntList* list = new IntList(); + empty_list(list); + + // create cyclic list of length n + if (n > 0) { + // create last element of list (its inserted first) + IntListElem* last = new IntListElem(); + last->value = n+k; + // insert the (now first, but later) last element into the list + insert_in_list(list, 0, last); + // now iterate over every other number + for (int i = n+k-1; i > k; i--) { + // and create a new list element + IntListElem* elem = new IntListElem(); + // with the given number + elem->value = i; + // and add it to the list in the very beginning + insert_in_list(list, 0, elem); + } + // make the last element reference the first one + last->next = list->first; + } + IntListElem* firstCyclic = list->first; + // add a linear part + for (int i = k; i > 0; i--) { + // create new list element + IntListElem* elem = new IntListElem(); + // with given value + elem->value = i; + // and insert in the very beginning + insert_in_list(list, 0, elem); + // if it is the (first inserted, but later) last element of the linear + // part, make it point to the first cyclic element + if (i == k) { + elem->next = firstCyclic; + } + } + return list; +} + +// Hase-Igel Algorithmus zum Finden eines Zyklus in einer Liste +int hase_igel(IntList* list) { + // create igel, that goes on by one + IntListElem* igel = list->first; + // create hase that always skips one element + IntListElem* hase = list->first; + // count the number of steps needed + int n = 0; + // this is the first occurence of a cycle + int first = 0; + // move forward with igel and hase until we hit the end of the list + while (igel != 0 && hase != 0) { + // increment igel and hase + igel = igel->next; + hase = hase->next->next; + // increment the step counter + n++; + // if igel and hase point to the same element, there + // has to be a cycle + if (igel == hase) { + // save the first occurence + if (first == 0) { + first = n; + // if we find the second one, return the difference + } else { + return n - first; + } + } + } + // if there is an end, there can't be a cycle + return 0; +} + +int main() { + IntList* list = make_cyclic_list(10, 0); + printf("Laenge des Zyklus: %d\n", hase_igel(list)); +} diff --git a/ws2019/ipi/uebungen/ipi7.pdf b/ws2019/ipi/uebungen/ipi7.pdf index 83212bfd5e82d3bc579410d863b778cf6681b598..f62686e5294749ea59d3e60cf13cd6426af23b4e 100644 GIT binary patch delta 10895 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 W3GhODi7)~oEJDD+p{%1q@V@{r+_J#{ delta 3296 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 +#include + +// Ein Queue Element +struct QueueElem { + QueueElem* next; // Zeiger auf nächstes Element + QueueElem* previous; // Zeiger auf vorheriges Element + int value; // Daten zu diesem Element +} ; + +// Eine Queue +struct Queue { + int count; // Anzahl Elemente in der queuee + QueueElem* first; // Zeiger auf erstes Element der queue + QueueElem* last; // Zeiger auf letztes Element der queue +} ; + + +// Initialisiere eine queue +void empty_queue (Queue* l) +{ + l->first = 0; // 0 ist keine gueltige Adresse: queue ist leer + l->last = 0; + l->count = 0; +} + +// Fuege neues Element am Ende der Schlange ein +void add_to_queue(Queue* queue, QueueElem* elem) +{ + if (queue->last == 0) { + queue->first = elem; + queue->last = elem; + } else { + queue->last->next = elem; + elem->next = 0; + elem->previous = queue->last; + queue->last = elem; + } + queue->count = queue->count + 1; +} + +// Remove last Element from queue and return it +QueueElem* remove_from_queue (Queue* queue) +{ + if (queue->first == 0) { + return 0; // return null if queue is empty + } + QueueElem* p; + p = queue->first; + queue->first = p->next; + queue->count = queue->count -1; + return p; +} + +// print a queue +void print_queue(Queue* queue) { + // index pointer + QueueElem* current = queue->first; + printf("Queue: "); + // print every element until the last + while (current != 0) { + printf("%d ", current->value); + current = current->next; + } + printf("\n"); +} + +int main() { + // create a queue + Queue* queue = new Queue(); + empty_queue(queue); + // and some elements + for (int i = 0; i < 100000; i++) { + QueueElem* elem = new QueueElem(); + elem -> value = rand(); + add_to_queue(queue, elem); + } + // and remove them again + for (int i = 0; i < 100000; i++) { + remove_from_queue(queue); + } + // check if queue is empty + print_queue(queue); +} diff --git a/ws2019/ipi/uebungen/queue_einfach.cpp b/ws2019/ipi/uebungen/queue_einfach.cpp new file mode 100644 index 0000000..b21770b --- /dev/null +++ b/ws2019/ipi/uebungen/queue_einfach.cpp @@ -0,0 +1,83 @@ +#include +#include + +// Ein Schlangenelement +struct QueueElem { + QueueElem* next; // Zeiger auf nächstes Element + int value; // Daten zu diesem Element +} ; + +// Eine Schlange +struct Queue { + int count; // Anzahl Elemente in der Liste + QueueElem* first; // Zeiger auf erstes Element der Liste +} ; + +// Initialisiere eine Schlange +void empty_queue (Queue* l) +{ + l->first = 0; // 0 ist keine gueltige Adresse: Liste ist leer + l->count = 0; +} + +// Fuege ein Element ans Ende der Schlange an +void add_to_queue (Queue* queue, QueueElem* elem) +{ + // Laufpointer + QueueElem* current = queue->first; + if (queue->first == 0) { // if queue is empty, put the new element as the first one + queue->first = elem; + return; + } + // find last element of list + while (current->next != 0) { + current = current->next; + } + current->next = elem; // set new element as the follower of the old last one + queue->count = queue->count + 1; // increment queue size +} + +// Entferne das erste Element der Schlange +QueueElem* remove_from_queue(Queue* queue) +{ + QueueElem* p; // das entfernte Element + if (queue->first == 0) { // check if list is empty + return p; // then just return null pointer + } else { + p = queue->first; // return the first element of the queue + queue->first = p->next; // set the second to be the new first + queue->count = queue->count-1; // decrement queue size + return p; // return the removed element + } +} + +// print a queue +void print_queue(Queue* queue) { + // index pointer + QueueElem* current = queue->first; + printf("Queue: "); + // print every element until the last + while (current != 0) { + printf("%d ", current->value); + current = current->next; + } + printf("\n"); +} + +int main() { + // create a queue + Queue* queue = new Queue(); + empty_queue(queue); + // and some elements + for (int i = 0; i < 100000; i++) { + QueueElem* elem = new QueueElem(); + elem -> value = rand(); + add_to_queue(queue, elem); + } + // and remove them again + for (int i = 0; i < 100000; i++) { + remove_from_queue(queue); + } + // check if queue is empty + print_queue(queue); +}