5.2.20
12/07/19
Last Modified 06/30/19 by Walter Tasin
AlgoDat_LU12 Reload Page

Algorithmen und Datenstrukturen

Übung zum Kapitel "Funktionen"

W. Tasin, M.Sc.


Implementierungsaufgaben

  • Es wird eine Funktion namens bitCheck benötigt. Sie überprüft, ob ein bestimmtes Bit in einem int-Wert gesetzt ist. Sie erhält zwei Parameter.
    Als erster Parameter wird der zu überprüfende Wert übergeben, als zweiter Parameter (unsigned char) wird die Bitnummer übertragen.
    • Welchen Typ hat der Rückgabewert der Funktion?
    • Geben Sie zuerst die Vorausdeklaration an.
    • Implementieren Sie nun die Funktion.

Rückgabewert: int (verwendet als bool)

int bitCheck(int value, unsigned char pos);

int bitCheck(int value, unsigned char pos)
{
    int bitmask=0; 
    /* Sinnvoll ist auch die Einschraenkung des Wertebereichs von pos */
    /* (wurde aber nicht erfragt) */
    /* Stelle fest wie die Datenbreite von int ist und reduziere ggf. */
    /* den Wert in pos */
    pos = pos % (sizeof(int) * 8);
    /* Setze den Wert für das korrispondierende Bit */
    bitmask = 1 << pos;
    
    return (value & bitmask) != 0;
}


  • Es werden zwei Funktionen benötigt. volumeCuboid errechnet das Volumen eines Quaders, surfaceCuboid errechnet die Oberfläche. Jede Funktion erhält drei double-Parameter.
    • Welcher Typ wird für die Rückgabewerte sinnvollerweise verwendet?
    • Geben Sie zuerst die Vorausdeklarationen an.
    • Implementieren Sie nun die Funktionen.

Rückgabewert: double (ist ausreichend, da Fließkommazahlen Exponenten besitzen)

double volumeCuboid(double length, double width, double height);
double surfaceCuboid(double length, double width, double height);

double volumeCuboid(double length, double width, double height)
{
    return length*height*width; 
}

/* Sollten die erwarteten Volumenwerte > 1e308 werden */
long double volumeCuboid(double length, double width, double height)
{
    /* Garantiere, dass die folgenden Multiplikationen 
       in long double durchgefuehrt werden. 
     */
    long double ldlength=length;
    return ldlength*height*width;
    /* Alternative: explizite Typumwandlung */
    /* return (long double) length*height*width; */
}

double surfaceCuboid(double length, double width, double height)
{
    return 2.0*length*height+2.0*length*width+2.0*width*height; 
}

/* Sollten die erwarteten Oberflaechenwerte > 1e308 werden */
long double surfaceCuboid(double length, double width, double height)
{
    /* 2.0l garantiert, dass die folgenden Multiplikationen 
       in long double durchgefuehrt werden. 
     */
    return 2.0l*length*height+2.0l*length*width+2.0l*width*height; 
}


  • Es wird eine Funktion namens ggT benötigt, die den größten gemeinsamen Teiler zweier unsigned-Zahlen ermittelt.
    Implementieren Sie die Funktion gemäß dem nachfolgenden Algorithmus und testen Sie die Funktion mit folgender main()-Funktion:

#include <stdio.h>

unsigned ggT(unsigned a, unsigned b)
{
    unsigned temp;
    while(b!=0)
    {
        temp = a % b;
        a = b;
        b = temp;        
    }        
    return a;
}

int main()
{
    unsigned wert1, wert2;
    
    printf("Gib 2 Werte ein: ");
    while (scanf("%u%u", &wert1, &wert2)==2)
    {
        printf("ggT(%u, %u) = %u\n", wert1, wert2, ggT(wert1, wert2));    
        printf("Gib 2 Werte ein: ");
    }
   
    return 0;    
}


Links

Uebungen Algorithmen und Datenstrukturen
Unterlagen Algorithmen und Datenstrukturen
Praktikum Algorithmen und Datenstrukturen
Zur Hauptseite