C :: Aufgabe #301
2 Lösungen
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ß
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:
/* 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;
}
#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));
}
