Advertisement
madegoff

C_Kurs_2Blatt

Nov 8th, 2023
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.27 KB | None | 0 0
  1. /*
  2. Willkommen zum zweiten Aufgabenblatt vom Programmierkurs. Auf diesem Aufgabenblatt geht es um folgende neue Konzepte:
  3.  
  4. - Blöcke und Scope
  5. - else und else-if
  6. - && und ||
  7. - verschachtelte Schleifen
  8.  
  9. Um die Tests für dieses Blatt zu kompilieren und zu starten, führen Sie den folgenden Befehl aus:
  10. cc -std=c11 -g -Wall 02ex_test.c -o 02ex_test.o -lm && ./02ex_test.o
  11. */
  12.  
  13. /*
  14. Wie auch auf dem ersten Aufgabenblatt können Sie alles außer den Kommentaren ignorieren,
  15. und Ihre Lösungen zwischen den "BEGIN CHANGES" und "END CHANGES" eintragen.
  16. */
  17.  
  18. #include <stdio.h>
  19.  
  20. int sum_divisible_both(int n) {
  21.     int result = 0;
  22.     /*
  23.     Aufgabe 1a:
  24.     Weisen Sie der Variable `result` die Summe aller Ganzzahlen zwischen `0` und `n` (inklusive) zu, welche sowohl
  25.     durch `7` *als auch* durch `13` teilbar sind.
  26.     */
  27.     /* BEGIN CHANGES */
  28.     for (int i = 13; i<=n; i++){
  29.         if ((i%7 == 0) && (i%13 == 0)) result+=i;
  30.     }
  31.  
  32.     /* END CHANGES */
  33.     return result;
  34. }
  35.  
  36. int sum_divisible_or(int n) {
  37.     int result = 0;
  38.     /*
  39.     Aufgabe 1b:
  40.     Weisen Sie der Variable `result` die Summe aller Ganzzahlen zwischen `0` und `n` (inklusive) zu, welche
  41.     durch `7` *oder* durch `13` teilbar sind (das beinhaltet auch die Zahlen, die durch beides teilbar sind).
  42.     */
  43.     /* BEGIN CHANGES */
  44.     for (int i = 7; i<=n; i++){
  45.         if ((i%7 == 0) || (i%13 == 0)) result+=i;
  46.     }
  47.     /* END CHANGES */
  48.     return result;
  49. }
  50.  
  51. int sum_divisible_either(int n) {
  52.    int result = 0;
  53.     /*
  54.     Aufgabe 1c:
  55.     Weisen Sie der Variable `result` die Summe aller Ganzzahlen zwischen `0` und `n` (inklusive) zu, welche *entweder*
  56.     durch `7` *oder* durch `13` teilbar sind (aber nicht durch beides).
  57.     */
  58.     /* BEGIN CHANGES */
  59.     for (int i = 7; i<=n; i++){
  60.         if(((i%7==0)&&(i%13!=0))||((i%7!=0)&&(i%13==0))) //entweder auf 7 oder auf 13 teilbar
  61.            result+=i;
  62.         else if((i==7)||(i==13)) result+=i;
  63.     }
  64.     /* END CHANGES */
  65.     return result;
  66. }
  67.  
  68. int signum(int x) {
  69.    int result = 0;
  70.     /*
  71.     Aufgabe 2a:
  72.     Weisen Sie der Variable `result` den Wert `-1` zu, falls `x` strikt negativ ist, `0` falls `x` gleich `0` ist, und
  73.     `1` falls `x` strikt positiv ist.
  74.     */
  75.     /* BEGIN CHANGES */
  76.     if (x==0) result=0;
  77.     else if(x<0) result=-1;
  78.     else result = 1;
  79.     /* END CHANGES */
  80.     return result;
  81. }
  82.  
  83. int is_leapyear(int year) {
  84.     int result = 0;
  85.     /*
  86.     Aufgabe 2b:
  87.     Im gregorianischen Kalender ist ein Jahr ein Schaltjahr, genau dann wenn die Jahreszahl durch 400 teilbar ist, oder
  88.     wenn sie durch vier teilbar ist aber nicht durch 100.
  89.  
  90.     Weisen Sie der Variable `result` den Wert `1` zu, falls `year` ein Schaltjahr ist, und ansonsten `0`.
  91.     */
  92.     /* BEGIN CHANGES */
  93.     if((year%400 == 0) || ((year%4==0)&&(year%100))) result = 1;
  94.     /* END CHANGES */
  95.     return result;
  96. }
  97.  
  98. int greatest_of_three(int a, int b, int c) {
  99.     int result = 0;
  100.     /*
  101.     Aufgabe 2c:
  102.     Weisen Sie der Variable `result` den größten Wert zu, den eine der drei Variablen `a`, `b`, `c` hat.
  103.     */
  104.     /* BEGIN CHANGES */
  105.     if((a>=b)&&(a>=c)) result = a;
  106.     else if((b>=a)&&(b>=c)) result = b;
  107.     else result = c;
  108.     /* END CHANGES */
  109.     return result;
  110. }
  111.  
  112. int is_prime(int n) {
  113.    int result = 0;
  114.     /*
  115.     Aufgabe 3a:
  116.     Eine Primzahl ist eine natürliche Zahl größer gleich 2, deren einzigen ganzzahligen Teiler die eins und die Zahl selbst sind.
  117.     Die ersten Primzahlen sind 2, 3, 5, 7, 11, 13, ...
  118.  
  119.     Weisen Sie der Variable `result` den Wert `1` zu, falls `n` eine Primzahl ist, und ansonsten `0`.
  120.     */
  121.     /* BEGIN CHANGES */
  122.     int res = 1;
  123.     if((n==0) || (n==1)) res = 0;
  124.     for(int i=2; i<n; i++){
  125.         if(n%i == 0) res = 0; //wenn teilbar - keine Primzahl
  126.     }
  127.     result = res;
  128.     /* END CHANGES */
  129.     return result;
  130. }
  131.  
  132. int sum_first_primes(int n) {
  133.    int result = 0;
  134.    int count = 1;
  135.    int num = 2;
  136.     /*
  137.     Aufgabe 3b:
  138.     Weisen Sie der Variable `result` die Summe der ersten `n` Primzahlen zu zu.
  139.     Beispiel für `n = 4`: `2 + 3 + 5 + 7 = 17`.
  140.     */
  141.     /* BEGIN CHANGES */
  142.     while(count<=n){
  143.         if(is_prime(num)){
  144.             result+=num;
  145.             count++;
  146.         }
  147.         num++;
  148.     }
  149.     /* END CHANGES */
  150.     return result;
  151. }
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement