C :: Aufgabe #301

2 Lösungen Lösungen öffentlich

Mobilfunkanbieter (Monatsabrechnung)

Anfänger - C von JKooP - 07.11.2020 um 09:42 Uhr
Ein Mobilfunkanbieter stellt folgende Pakete zur Verfügung:

Paket-Typ....Basispreis....Freiminuten....Minutenpreis
P_Basis........2,95€..............0...................0,10€
P_100..........3.95€.............100................0,12€
P_300..........7,95€.............300................0,15€
P_600..........12,95€...........600................0,20€
P_Flat..........29,95€...........unbegrenzt.....0,00€

Schreibe eine Funktion/Methode, bei der sowohl der Paket-Typ als auch die telefonierten Minuten übergeben werden.
Als Ergebnis soll der Gesamtpreis inklusive Basispreis für den Monat ausgegeben werden.

Viel Spaß


Lösungen:

vote_ok
von DaXn (180 Punkte) - 16.12.2020 um 18:45 Uhr
Quellcode ausblenden C-Code
/* Ein Mobilfunkanbieter stellt folgende Pakete zur Verfügung:
 *
 * Paket-Typ....Basispreis....Freiminuten....Minutenpreis
 * P_Basis........2,95€..............0...................0,10€
 * P_100..........3.95€.............100................0,12€
 * P_300..........7,95€.............300................0,15€
 * P_600..........12,95€...........600................0,20€
 * P_Flat..........29,95€...........unbegrenzt.....0,00€
 *
 * Schreibe eine Funktion/Methode, bei der sowohl der Paket-Typ als auch die telefonierten Minuten übergeben werden.
 * Als Ergebnis soll der Gesamtpreis inklusive Basispreis für den Monat ausgegeben werden.
 */

typedef enum
{
    EPT_BASE = 0,
    EPT_P100,
    EPT_P300,
    EPT_P600,
    EPT_FLAT,

    EPT_COUNT
} E_PACKAGE_TYPE;


typedef struct
{
    int baseCharge, freeMins, minPrice;
} Tpackage;

Tpackage g_packages [EPT_COUNT];


void InitializePackages (void)
{
    g_packages [EPT_BASE].baseCharge = 295;
    g_packages [EPT_BASE].freeMins   = 0;
    g_packages [EPT_BASE].minPrice   = 10;

    g_packages [EPT_P100].baseCharge = 395;
    g_packages [EPT_P100].freeMins   = 100;
    g_packages [EPT_P100].minPrice   = 12;

    g_packages [EPT_P300].baseCharge = 795;
    g_packages [EPT_P300].freeMins   = 300;
    g_packages [EPT_P300].minPrice   = 15;

    g_packages [EPT_P600].baseCharge = 1295;
    g_packages [EPT_P600].freeMins   = 600;
    g_packages [EPT_P600].minPrice   = 20;

    g_packages [EPT_FLAT].baseCharge = 2995;
    g_packages [EPT_FLAT].freeMins   = 50000;
    g_packages [EPT_FLAT].minPrice   = 0;
}


int CalcMonthCharge (E_PACKAGE_TYPE pt, int minutes)
{
    int minutesToCharge = minutes - g_packages [pt].freeMins;
    if (0 > minutesToCharge)
        minutesToCharge = 0;

    return g_packages [pt].baseCharge + g_packages [pt].minPrice * minutesToCharge;
}





vote_ok
von JKooP (18090 Punkte) - 09.01.2021 um 17:31 Uhr
Quellcode ausblenden C-Code
#include <stdio.h>
#include <limits.h>
#define ANZ_TARIFE 5

enum Pakete {
    PBasis = 0, P100 = 100, P300 = 300, P600 = 600, PFlat = INT_MAX
};

struct Mobilfunktarif {
    enum Pakete p;  // Paket
    double g;       // Grundpreis
    int f;          // Freiminuten
    double m;       // Minutenpreis
}t[ANZ_TARIFE];

void erstelle_tarife() {
    t[0].p = PBasis;    t[0].g = 2.95;      t[0].f = PBasis;   t[0].m = 0.10;
    t[1].p = P100;      t[1].g = 4.95;      t[1].f = P100;     t[1].m = 0.12;
    t[2].p = P300;      t[2].g = 7.95;      t[2].f = P300;     t[2].m = 0.15;
    t[3].p = P600;      t[3].g = 12.95;     t[3].f = P600;     t[3].m = 0.20;
    t[4].p = PFlat;     t[4].g = 29.95;     t[4].f = PFlat;    t[4].m = 0.00;
}

double gesamt_preis(enum Pakete paket, int minuten) {
    double g_preis = 0.0;
    for (unsigned int i = 0; i < ANZ_TARIFE; i++)
    {
        if (t[i].p == paket) {
            int rest = minuten - t[i].f;
            if (rest < 0) rest = 0;
            g_preis = rest * t[i].m + t[i].g;
            break;
        }
    }
    return g_preis;
}

void main() {
    erstelle_tarife();
    enum Pakete paket = P300;
    int minuten = 400;
    printf("Der Gesamtpreis im Monat betraegt %.2f Euro.\n", gesamt_preis(paket, minuten));
}