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

Vorbereitung 10.12.2015 (Fortsetzung)

parent 60aa3d8d
Branches
No related tags found
No related merge requests found
No preview for this file type
% ainf-20151203.pdf - Lecture Slides on Applied Computer Sciences
% ainf-20151210.pdf - Lecture Slides on Applied Computer Sciences
% Copyright (C) 2012, 2013, 2015 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
......@@ -43,7 +43,7 @@
\title{Angewandte Informatik}
\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
\date{3.\ Dezember 2015}
\date{10.\ Dezember 2015}
\begin{document}
......@@ -336,17 +336,16 @@
\showsubsection
In Output-Port schreiben = Leitungen ansteuern
\medskip
Datei: \file{RP6Base/RP6Base\_Examples/RP6Examples\_20080915/\\
RP6Lib/RP6base/RP6RobotBaseLib.c}
\begin{tabbing}
Datei: \= \file{RP6Base/RP6Base\_Examples/RP6Examples\_20080915/}\\
\> \file{RP6Lib/RP6base/RP6RobotBaseLib.c}
\end{tabbing}
\begin{onlyenv}<1>
Suchbegriff: \lstinline{setMotorDir}
\medskip
\begin{lstlisting}
\begin{lstlisting}[gobble=6]
void setMotorDir(uint8_t left_dir, uint8_t right_dir)
{
/* ... */
......@@ -371,6 +370,35 @@
\vspace*{-1.5cm}
\strut\hfill\textarrow\ Steuerung der Motordrehrichtung
\end{onlyenv}
\begin{onlyenv}<2>
Suchbegriff: \lstinline{updateStatusLEDs}
\medskip
\begin{lstlisting}[gobble=6]
DDRB &= ~0x83;
PORTB &= ~0x83;
if(statusLEDs.LED4){ DDRB |= SL4; PORTB |= SL4; }
if(statusLEDs.LED5){ DDRB |= SL5; PORTB |= SL5; }
if(statusLEDs.LED6){ DDRB |= SL6; PORTB |= SL6; }
DDRC &= ~0x70;
PORTC &= ~0x70;
DDRC |= ((statusLEDs.byte << 4) & 0x70);
PORTC |= ((statusLEDs.byte << 4) & 0x70);
\end{lstlisting}
\begin{picture}(0,0)
\color{red}
\put(3.7,3.9){\vector(-1,0){0.5}}
\put(3.75,3.9){\makebox(0,0)[l]{Data Direction Register: auf Input(!) setzen}}
\put(3.7,3.5){\vector(-1,0){0.5}}
\put(3.75,3.5){\makebox(0,0)[l]{internen Pull-Up-Widerstand ausschalten}}
\put(8.7,2.7){\makebox(0,0)[l]{\shortstack{Manipulation\\einzelner Bits}}}
\put(7.2,1.0){\makebox(0,0)[l]{\shortstack{3 Bits\\gemeinsam}}}
\end{picture}
\lstinline{union statusLEDs}: Bit-Felder vs.\ Byte
\end{onlyenv}
\end{frame}
......@@ -407,7 +435,7 @@
\put(2.0,4.4){\makebox(0,0)[l]{"`Dies ist ein Interrupt-Handler."'}}
\put(2.3,3.6){\vector(-1,-1){0.7}}
\put(2.4,3.6){\makebox(0,0)[l]{Interrupt-Vektor 0 darauf zeigen lassen}}
\put(3.7,2.9){\makebox(0,0)[l]{Schreibweise herstellerspezifisch!}}
\put(3.7,2.9){\makebox(0,0)[l]{Schreibweise abhängig von Prozessor und Compiler!}}
\end{picture}
\vspace*{-1.5cm}
......
#include <stdio.h>
char *find_first (char **name)
{
return "Anna";
}
int main (void)
{
char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
char *first = find_first (name);
printf ("%s\n", first);
return 0;
}
#include <stdio.h>
#include <string.h>
char *find_first (char **name)
{
if (name == NULL || name[0] == NULL)
return NULL;
char *first = name[0];
int i = 1;
while (name[i])
{
if (strcmp (name[i], first) < 0)
first = name[i];
i++;
}
return first;
}
int main (void)
{
char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
char *first = find_first (name);
printf ("%s\n", first);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark1, int mark2)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark1 || i == mark2)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1, -1);
}
int compare (char **name, int left, int right)
{
comp_counter++;
output_marked (name, left, right);
usleep (100000);
return strcmp (name[left], name[right]);
}
void sort (char **name, int size)
{
int sorted = 0;
int n = size;
while (n > 1 && !sorted)
{
sorted = 1;
for (int i = 0; i < n - 1; i++)
if (compare (name, i, i + 1) > 0)
{
sorted = 0;
char *temp = name[i];
name[i] = name[i + 1];
name[i + 1] = temp;
}
n--;
}
}
int main (void)
{
char *names[] = { "Anna", "Berta", "Box", "Dieter", "Fritz", "Hans",
"Heinrich", "Hugo", "Lisa", "Maria", "Otto", "Peter",
"Siegfried", "Thomas", "Ulrich", "Zacharias", NULL };
sort (names, 16);
output (names);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark1, int mark2)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark1 || i == mark2)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1, -1);
}
int compare (char **name, int left, int right)
{
comp_counter++;
output_marked (name, left, right);
usleep (100000);
return strcmp (name[left], name[right]);
}
void sort (char **name, int size) /* BubbleSort */
{ /* Wikipedia: bubblesort3 */
int sorted = 0;
int n = size;
while (n > 1 && !sorted)
{
int newn = 1;
sorted = 1;
for (int i = 0; i < n - 1; i++)
if (compare (name, i, i + 1) > 0)
{
sorted = 0;
char *temp = name[i];
name[i] = name[i + 1];
name[i + 1] = temp;
newn = i + 1;
}
n = newn;
}
}
int main (void)
{
char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
sort (names, 16);
output (names);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark1, int mark2)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark1 || i == mark2)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1, -1);
}
int compare (char **name, int left, int right)
{
comp_counter++;
output_marked (name, left, right);
usleep (100000);
return strcmp (name[left], name[right]);
}
void sort (char **name, int size) /* BubbleSort */
{ /* Wikipedia: bubblesort3 */
int n = size;
while (n > 1)
{
int newn = 1;
for (int i = 0; i < n - 1; i++)
if (compare (name, i, i + 1) > 0)
{
char *temp = name[i];
name[i] = name[i + 1];
name[i + 1] = temp;
newn = i + 1;
}
n = newn;
}
}
int main (void)
{
char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
sort (names, 16);
output (names);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1);
}
int compare (char **name, int left, char *right)
{
comp_counter++;
output_marked (name, left);
usleep (100000);
return strcmp (name[left], right);
}
void sort (char **name, int left, int right) /* QuickSort */
{
if (left < right)
{
int middle = (left + right) / 2;
char *test = name[middle];
int l = left;
int r = right;
while (l <= r)
{
while (compare (name, l, test) < 0)
l++;
while (compare (name, r, test) > 0)
r--;
if (l <= r)
{
char *temp = name[l];
name[l] = name[r];
name[r] = temp;
l++;
r--;
}
}
sort (name, left, r);
sort (name, l, right);
}
}
int main (void)
{
char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
sort (names, 0, 15);
output (names);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1);
}
int compare (char **name, int left, char *right)
{
comp_counter++;
output_marked (name, left);
usleep (100000);
return strcmp (name[left], right);
}
void sort (char **name, int left, int right) /* QuickSort */
{
if (left < right)
{
int middle = left + rand () % (right - left + 1);
char *test = name[middle];
int l = left;
int r = right;
while (l <= r)
{
while (compare (name, l, test) < 0)
l++;
while (compare (name, r, test) > 0)
r--;
if (l <= r)
{
char *temp = name[l];
name[l] = name[r];
name[r] = temp;
l++;
r--;
}
}
sort (name, left, r);
sort (name, l, right);
}
}
int main (void)
{
char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
srand (137);
sort (names, 0, 15);
output (names);
return 0;
}
#include <stdio.h>
#include <string.h>
int find_first (char **name)
{
if (name == NULL || name[0] == NULL)
return -1;
int first_pos = 0;
char *first = name[0];
int i = 1;
while (name[i])
{
if (strcmp (name[i], first) < 0)
{
first_pos = i;
first = name[i];
}
i++;
}
return first_pos;
}
int main (void)
{
char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
int first = find_first (name);
if (first >= 0)
printf ("%s\n", name[first]);
return 0;
}
#include <stdio.h>
#include <string.h>
int find_first (char **name)
{
if (name == NULL || name[0] == NULL)
return -1;
int first_pos = 0;
char *first = name[0];
int i = 1;
while (name[i])
{
if (strcmp (name[i], first) < 0)
{
first_pos = i;
first = name[i];
}
i++;
}
return first_pos;
}
int main (void)
{
char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
int first = find_first (name);
if (first >= 0)
{
printf ("%s\n", name[first]);
char *temp = name[0];
name[0] = name[first];
name[first] = temp;
first = find_first (name + 1);
printf ("%s\n", name[1 + first]);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int find_first (char **name)
{
if (name == NULL || name[0] == NULL)
return -1;
int first_pos = 0;
char *first = name[0];
int i = 1;
while (name[i])
{
if (strcmp (name[i], first) < 0)
{
first_pos = i;
first = name[i];
}
i++;
}
return first_pos;
}
int main (void)
{
char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
int i = 0;
int first = find_first (name + i);
while (first >= 0)
{
printf ("%s\n", name[first + i]);
char *temp = name[0 + i];
name[0 + i] = name[first + i];
name[first + i] = temp;
i++;
first = find_first (name + i);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int find_first (char **name, int start_index)
{
if (name == NULL || name[start_index] == NULL)
return -1;
int first_pos = start_index;
char *first = name[start_index];
int i = start_index + 1;
while (name[i])
{
if (strcmp (name[i], first) < 0)
{
first_pos = i;
first = name[i];
}
i++;
}
return first_pos;
}
int main (void)
{
char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
int start = 0;
int first = find_first (name, start);
while (first >= 0)
{
printf ("%s\n", name[first]);
char *temp = name[start];
name[start] = name[first];
name[first] = temp;
start++;
first = find_first (name, start);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int find_first (char **name, int start_index)
{
if (name == NULL || name[start_index] == NULL)
return -1;
int first_pos = start_index;
char *first = name[start_index];
int i = start_index + 1;
while (name[i])
{
if (strcmp (name[i], first) < 0)
{
first_pos = i;
first = name[i];
}
i++;
}
return first_pos;
}
void sort (char **name)
{
int start = 0;
int first = find_first (name, start);
while (first >= 0)
{
char *temp = name[start];
name[start] = name[first];
name[first] = temp;
start++;
first = find_first (name, start);
}
}
int main (void)
{
char *name[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
sort (name);
for (int i = 0; name[i]; i++)
printf ("%s\n", name[i]);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark1, int mark2)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark1 || i == mark2)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1, -1);
}
int compare (char **name, int left, int right)
{
comp_counter++;
output_marked (name, left, right);
usleep (200000);
return strcmp (name[left], name[right]);
}
int find_first (char **name, int first_pos)
{
if (name == NULL || name[first_pos] == NULL)
return -1;
int i = first_pos + 1;
while (name[i])
{
if (compare (name, i, first_pos) < 0)
first_pos = i;
i++;
}
return first_pos;
}
void sort (char **name)
{
if (name)
for (int i = 0; name[i] != NULL; i++)
{
int first = find_first (name, i);
char *temp = name[i];
name[i] = name[first];
name[first] = temp;
}
}
int main (void)
{
char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
sort (names);
output (names);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark1, int mark2)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark1 || i == mark2)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1, -1);
}
int compare (char **name, int left, int right)
{
comp_counter++;
output_marked (name, left, right);
usleep (100000);
return strcmp (name[left], name[right]);
}
void sort (char **name, int size) /* Wikipedia: bubblesort1 */
{
for (int n = size; n > 1; n--)
for (int i = 0; i < n - 1; i++)
if (compare (name, i, i + 1) > 0)
{
char *temp = name[i];
name[i] = name[i + 1];
name[i + 1] = temp;
}
}
int main (void)
{
char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
sort (names, 16);
output (names);
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int comp_counter = 0;
void clear_screen (void)
{
printf ("\e[H\e[J");
}
void output_marked (char **name, int mark1, int mark2)
{
clear_screen ();
for (int i = 0; name[i]; i++)
if (i == mark1 || i == mark2)
printf ("%s <--\n", name[i]);
else
printf ("%s\n", name[i]);
printf ("%d\n", comp_counter);
}
void output (char **name)
{
output_marked (name, -1, -1);
}
int compare (char **name, int left, int right)
{
comp_counter++;
output_marked (name, left, right);
usleep (100000);
return strcmp (name[left], name[right]);
}
void sort (char **name, int size) /* Wikipedia: bubblesort2 */
{
int sorted = 0;
int n = size;
while (n > 1 && !sorted)
{
sorted = 1;
for (int i = 0; i < n - 1; i++)
if (compare (name, i, i + 1) > 0)
{
sorted = 0;
char *temp = name[i];
name[i] = name[i + 1];
name[i + 1] = temp;
}
n--;
}
}
int main (void)
{
char *names[] = { "Otto", "Lisa", "Anna", "Heinrich", "Siegfried", "Peter",
"Dieter", "Hugo", "Berta", "Maria", "Fritz", "Box", "Hans",
"Thomas", "Ulrich", "Zacharias", NULL };
sort (names, 16);
output (names);
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment