Advertisement
madegoff

C_Kurs_8Blatt

Nov 8th, 2023
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.62 KB | None | 0 0
  1. /*
  2. Willkommen zum achten Aufgabenblatt vom Programmierkurs. Auf diesem Aufabenblatt geht es um Pointer und Arrays.
  3.  
  4. Um die Tests für dieses Blatt zu kompilieren und zu starten, führen Sie den folgenden Befehl aus:
  5. cc -std=c11 -g -Wall 08ex_test.c -o 08ex_test.o -lm && ./08ex_test.o
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdint.h>
  10. #include <stdbool.h>
  11. #include "turtlecanvas.h"
  12.  
  13. /*
  14. Aufgabe 1a:
  15. Lesen Sie das Headerfile `turtlecanvas.h`. Diese Funktion soll die Turtle `d` Schritte vorwärts machen lassen.
  16. */
  17. void turtle_advance_by(TurtleCanvas *c, uint32_t d) {
  18.  
  19.     for(int i=0; i<d; i++) turtle_advance(c);
  20.     return;
  21. }
  22.  
  23. /*
  24. Aufgabe 1b:
  25. Füllen Sie die Turtlecanvas mit horizontalen, abwechselnd schwarzen und weißen Linien (die unterste Zeile soll
  26. schwarz gefärbt werden). Die Turtle ist anfangs an Position (0, 0), ist nach rechts orientiert, und zeichnet schwarz.
  27. */
  28. void turtle_stripes(TurtleCanvas *c) {
  29.  
  30.     int width = canvas_width(c->canvas);
  31.     int height = canvas_height(c->canvas);
  32.  
  33.     if(height==1) turtle_advance_by(c,width); //wenn canvas 1 zeile hat
  34.  
  35.     for(int i=0; i<height; i++){
  36.  
  37.         turtle_advance_by(c,width+1); //faerben die zeile komplett unk kommen links raus
  38.         turtle_rotate_left(c); // position nach oben
  39.         turtle_toggle_color(c); //farbe aendern - zu weiss
  40.         turtle_advance_by(c, 2); //2schritte nach oben - eine weisse zeile damit gemacht
  41.         turtle_rotate_right(c); //guckt jz nach rechts
  42.         turtle_toggle_color(c); //farbe aendern zu schwarz
  43.     }
  44.     return;
  45. }
  46.  
  47. /*
  48. Aufgabe 1c:
  49. Lesen Sie die Implementierungen der Turtlecanvas-Funktionen weiter unten in der "turtlecanvas.h".
  50. Der Quellcode sollte vollständig verständlich und unüberraschend sein.
  51. Hinweis: Diese Aufgabe wird nicht bewertet.
  52. */
  53.  
  54. /*
  55. Aufgabe 2a:
  56. Geben Sie einen Pointer auf das erste Vorkommen der größten Zahl im Eingabearray zurück.
  57. */
  58. uint16_t *find_maximal_number(uint16_t numbers[], size_t numbers_len) {
  59.  
  60.     uint16_t maxx = 0;
  61.     uint16_t* ptr;
  62.  
  63.     for(int i=0; i<numbers_len;i++){
  64.         if (numbers[i] > maxx){
  65.             maxx=numbers[i];
  66.             ptr = &numbers[i];
  67.         }
  68.     }
  69.     return ptr;
  70. }
  71.  
  72. /*
  73. Aufgabe 2b:
  74. Geben Sie (einen Pointer auf) das Teilarray zurück, welches ab dem ersten Vorkommen der größten Zahl im Eingabearray beginnt.
  75. */
  76. uint16_t *find_subarray_starting_at_maximal_number(uint16_t numbers[], size_t numbers_len) {
  77.  
  78.     return find_maximal_number(numbers, numbers_len);
  79. }
  80.  
  81. /*
  82. Aufgabe 2c:
  83. Geben Sie die größtmögliche Distanz zwischen zwei Zahlenwerten aus dem Array `numbers` zurück.
  84. Beispiel: Im Array {1, 3, 7, 4} ist die größte Distanz die zwischen 1 und 7, und beträgt damit `6`.
  85. */
  86. uint16_t find_maximum_distance(uint16_t numbers[], size_t numbers_len) {
  87.  
  88.     int res = 0;
  89.  
  90.     for(int i=0; i<numbers_len; i++){
  91.         for(int j=i+1; j<numbers_len; j++){
  92.             int current_distance = abs(numbers[j]-numbers[i]);
  93.             if(current_distance > res) res = current_distance;
  94.         }
  95.     }
  96.  
  97.  
  98.     return res;
  99. }
  100.  
  101. /*
  102. Aufgabe 2d:
  103. Geben Sie die kleinstmögliche Distanz zwischen zwei Zahlenwerten aus dem Array `numbers` zurück.
  104. Beispiel: Im Array {1, 3, 7, 4} ist die kleinste Distanz die zwischen 3 und 4, und beträgt damit `1`.
  105. */
  106. uint16_t find_minimum_distance(uint16_t numbers[], size_t numbers_len) {
  107.  
  108.     int res = 10000;
  109.  
  110.     for(int i=0; i<numbers_len; i++){
  111.         for(int j=i+1; j<numbers_len; j++){
  112.             int current_distance = abs(numbers[j]-numbers[i]);
  113.             if(current_distance < res) res = current_distance;
  114.         }
  115.     }
  116.  
  117.     return res;
  118. }
  119.  
  120. /*
  121. Aufgabe 2e:
  122. Schreiben Sie die ersten `numbers_len` Quadratzahlen aufsteigend in das gegebene Array `numbers`.
  123. Hinweis: Wir starten bei `1`. Sollte numbers_len also `5` sein, sind die ersten 5 Quadratzahlen bis
  124. einschließlich die von 5 gemeint: 1, 4, 9, 16, 25.
  125. */
  126. void square_ascending(uint16_t numbers[], size_t numbers_len) {
  127.  
  128.     for(int i=1; i<=numbers_len; i++){
  129.         //printf("wir sind bei i=%d\n",i);
  130.         numbers[i-1] = i*i;
  131.         //printf("in array schreiben - %d\n", numbers[i-1]);
  132.     }
  133.     return;
  134. }
  135. //meine Funktion fuer debbuging
  136. /*void print_array(uint16_t arrray[], uint16_t len){
  137.  
  138.     for(int i=0; i<len; i++){
  139.         printf("array[%d] = %d\n", i, arrray[i]);
  140.     }
  141.     return;
  142. }
  143. */
  144.  
  145. /*
  146. Aufgabe 2f:
  147. Füllen Sie das Array `out` mit den aufsteigend sortierten Zahlen aus dem `in` Array. Beide Arrays haben die Länge `len`.
  148. Beispiel: Ist `in` {1, 4, 3, 7, 4}, so soll `out` am Ende {1, 3, 4, 4, 7} sein.
  149. */
  150. void sort_ascending(uint16_t in[], uint16_t out[], size_t len) {
  151.  
  152.     for(int count=0; count<len; count++){
  153.  
  154.         //printf("gang nummer %d\n", count);
  155.  
  156.         int current_min = 1000; //augenblickliches min
  157.         int current_min_pos = len+1; //position vom current min (erstmal nicht definiert deswegen len+1 also ungueltige position
  158.  
  159.         for(int i=0; i<len; i++){ //die kleinste zahl im array suchen
  160.             if(in[i]<current_min && in[i]!=0){ //betrachtete zahl kleiner als min und wurde nicht ueberschrieben
  161.  
  162.                 current_min = in[i];
  163.                 current_min_pos = i;
  164.             }
  165.         } //minimum und seine position gefunden
  166.         //printf("minimum gefunden! und zwar = %d an der position %d\n",current_min, current_min_pos);
  167.         in[current_min_pos] = 0; //mit 0 unseren min ueberschreiben
  168.         //printf("in array now: \n");
  169.         //print_array(in, len);
  170.         out[count] = current_min; //naechste minimale zahl in den output array
  171.         //printf("out array now: \n");
  172.         //print_array(out, len);
  173.     }
  174.  
  175.     return;
  176. }
  177.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement