Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Ablaufdatum (Schleifen)

Arzneimittel enthalten einen kritischen Wirkstoff. Dieser darf eine gewisse Konzentration nicht unterschreiten, sonst verliert das Medikament an Wirkung. Gehen wir davon aus, dass ein Medikament bei der Herstellung 80mg des Wirkstoffs enthält aber jeden Monat 0.25% des Wirkstoffs verliert. Minimal muss das Medikament jedoch immer 70mg des Wirkstoffs enthalten.

Ihr Programm soll berechnen, nach wie vielen Monaten das Medikament seine kritische Wirkstoffkonzentration unterschreitet - m. a. W.: Nach wie vielen Monaten darf das Medikament nicht mehr angewendet werden.

Der Anwender gibt die Anfangskonzentration (mg) und die kritische Minimalkonzentration (mg) ein. Ebeneso muss er die monatliche prozentuale Abnahme angeben.

4 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (4)

gressly 18. Juni 2012 21:38   reply report
Mischi
Beispiel Nummer 3 in "generic" ist in PureBasic verfasst.

Leider gabs die Sprache nicht im Auswahlmenü...

@Mishi: Anstelle von PuerBasic habe ich VisualBasic angegeben. Dies ist zwar nicht ganz korrekt, stellt die Syntax aber nahezu identisch dar.
gressly 18. Juni 2012 21:37   reply report
python
Bei der Checksumme ist Dir offensichtlich ein Fehler unterlaufen. Beim ersten Beispiel ist das Medikament nach 54 Monaten abgelaufen.

Richtig, die Checksumme (Verifikation) war falsch. Das Programm hingegen rechnet richtig. Bei 80mg nach 70mg und einer Abnahme von 0.25% dauert es 54 Monate.
Mischi 9. Juni 2012 17:28   reply report
Beispiel Nummer 3 in "generic" ist in PureBasic verfasst.

Leider gabs die Sprache nicht im Auswahlmenü...
python 27. Mai 2012 05:29   reply report
Bei der Checksumme ist Dir offensichtlich ein Fehler unterlaufen. Beim ersten Beispiel ist das Medikament nach 54 Monaten abgelaufen.

15 Lösung(en)

package ch.programmieraufgaben.iteration.ablaufdatum;

import java.util.Scanner;

/**
 * Ablaufdatum berechnen
 * @author Philipp Gressly (phi@gressly.ch)
 */
/*
 * History: first Implementation: May 17, 2012
 * Bugs   :
 */
public class Ablaufdatum {
  public static void main(String[] args) {
    new Ablaufdatum().top();
  }
  
  void top() {
    double mgAnfang  = einlesen("mg am Anfang");
    double mgMuss    = einlesen("mg minimum");
    double procMonat = einlesen("wie viel sich pro Monat verflüchtigt (Prozent)");
    
    schleife(mgAnfang, mgMuss, procMonat);    
  }
  
  void schleife(double mgAnfang, double mgMuss, double procMonat) {
     double mgIst = mgAnfang;
     int monate   = 0;
     while(mgIst >= mgMuss) {
         monate = monate + 1;
         mgIst = mgIst * (1 - procMonat/100);
     }
     System.out.println("Das Medikament läuft nach " + monate + " Monaten aus.");
  }
  
  Scanner sc = new Scanner(System.in);
  double einlesen(String groesse) {
      System.out.println("Bitte " + groesse + " eingeben: ");
      return sc.nextDouble();
  }
}
 // end of class Ablaufdatum
                

Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

"""Konzentrationsabnahme/Haltbarkeit"""

konz = float(input("Anfangskonzentration in mg: "))
minKonz = float(input ("Minimalkonzentration in mg: "))
abnahme = float(input ("Monatliche prozentule Abnahem der Konzentration: "))
monat = 0

while konz >= minKonz:
    konz = konz*(1-(abnahme/100))
    monat +=1
    print monat
                

Lösung von: Py Thon ()

; Programmiersprache: PureBasic, Version 4.60

OpenConsole()
PrintN("Wie viel Wirkstoff ist enthalten? (mg)")
anfangswert.f=ValF(Input())
PrintN("Wie viel Wirkstoff muss mndestes enthalten sein? (mg)")
grenzwert.f=ValF(Input())
PrintN("Um wie viel Prozent nimmt die Wirkstoffkonzentration monatlich ab?")
abnahme.f=ValF(Input())

i=0
aktuellerwert.f = anfangswert.f

While aktuellerwert.f >= grenzwert.f
  PrintN("Nach "+Str(i)+" Monaten sind noch "+StrF(aktuellerwert.f)+"mg enthalten.")
  aktuellerwert.f = aktuellerwert.f*((100-abnahme.f)/100)
  i=i+1
Wend

PrintN("")
PrintN("Nach "+Str(i)+" Monaten ist das Medikament nicht mehr zu verwenden, der Grenzwert von "+StrF(grenzwert.f)+"mg wurde mit "+StrF(aktuellerwert.f)+"mg um "+StrF(grenzwert.f-aktuellerwert.f)+"mg unterschritten.")
Input()
                

Lösung von: Ich Bins (tubs)

/**
 * Autor: ph. gressly freimann 
 * Datum: 27. Juni 2012
 * Berechne das Ablaufdatum eines Medikamentes
 */

#include <stdio.h>

/**
 * Einlesen der Größen.
 * mg am Anfang: Wie viel mg der benötigten Substanz sind am Anfang im 
 *               Medikament vorhanden.
 * mg Muss     : Wie viel der benötigten Substanz muss mindestens im
 *               Medikament vorhanden sein, damit es noch wie
 *               angegeben wirkt.
 * proc Monat  : Wie viel (in %) sich pro Monat "verflüchtigt" oder
 *               andrswertig "auflöst" (z. B. chemisch verändert wird)
 */
void eingabe(float* mgAnfang, float* mgMuss, float* procMonat)
{
  printf("Vorhandene Substanz in mg am Anfang: ");
  scanf ("%f", mgAnfang );
  printf("Minimale Konzentration (in mg)     : ");
  scanf ("%f", mgMuss   );
  printf("Monatliche prozentuale Abnahme     : ");
  scanf ("%f", procMonat);
}

/**
 * Berechne die Anzahl Monate (ganzzahlig)
 * nach welchen die Konzentration das Minimum unterschreiten wird.
 */
int berechneMonate(float mgAnfang, float mgMuss, float procMonat) 
{
  float mgIst ;
  int   monate;
  float rate  ; /* Verflüchtigungsrate */

  mgIst  = mgAnfang                ; 
  monate = 0                       ;
  rate   = (1.0 - procMonat/100.0) ;

  while(mgIst >= mgMuss)
  {
    monate = monate + 1;
    mgIst  = mgIst * rate;
  }
  return monate;
}

/**
 * Hauptprogramm
 * Drei nötige Größen einlesen und Monate berechnen und ausgeben.
 */
main() 
{
  float mgAnfang, mgMuss, procMonat;
  int   monate;

  eingabe                (&mgAnfang, &mgMuss, &procMonat);
  monate = berechneMonate( mgAnfang,  mgMuss,  procMonat);

  printf("Das Medikament läuft nach %d Monaten aus.\n", monate);
}
                

Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

#include <stdio.h>

int main (void) {
float wirkstoff, untergrenze;
float verfall, abzug;
int monate = 0;

printf("Wirkstoff Menge: ");
scanf("%f", &wirkstoff);
printf("Kritische Untergrenze: ");
scanf("%f", &untergrenze);
printf("Monatlicher prozentualer Verfall: ");
scanf("%f", &verfall);

abzug = (100.0 - verfall) / 100.0;

do {
wirkstoff *= abzug;
monate++;
} while(wirkstoff >= untergrenze);

printf("Nach %d Monaten verfallen!\n", monate);

return 0;
}
                

Lösung von: Name nicht veröffentlicht

// Autor:				Andy Großhennig
// Solution for task:	Ablaufdatum (Schleifen)

#include <iostream>

using namespace std;

// Function: Get the input data's
void getData(float &fOriginalSubstance, float &fMinSubstance, float &fDecreasePercent)
{
	cout << "Dez-Zahlen mit Punkt trennen!\nGeben sie an wieviel mg Wirkstoff das Medikament enthaelt: ";
	cin >> fOriginalSubstance;
	cout << "\nGeben sie an wieviel mg Wirkstoff das Medikament enthalten muss: ";
	cin >> fMinSubstance;
	cout << "\nGeben sie an um wieviel Prozent sich die Konzentration des Wirkstoffs monatlich verringert: ";
	cin >> fDecreasePercent;
	cout << endl;
}

void calculateTime()
{
	float fOriginalSubstance, fMinSubstance, fDecreasePercent, fActualSubstance, fDecreaseMg;
	int iMonth;

	getData(fOriginalSubstance, fMinSubstance, fDecreasePercent);
	
	fActualSubstance = fOriginalSubstance;	//Set the start value for the actually substance amount
	fDecreaseMg = fOriginalSubstance * fDecreasePercent / 100; //Calculate the amount of decrease from the percent input

	// Loop: Decrease the amount of input percent and count how much the loop go through until the amount of the substance is lower than the minimum
	for(iMonth = 0;fActualSubstance >= fMinSubstance;iMonth ++)
	{
		fActualSubstance -= fDecreaseMg;
	}

	cout << "\nDas Medikament ist nach " << iMonth << " Monaten abgelaufen";
}

int main()
{
	calculateTime();

	cout << "\n\n";
	system("Pause");
	return 0;
}
                

Lösung von: Andy Großhennig (Bundeswehr)

<HTML>
<HEAD>
    <TITLE>Rechner</TITLE>
    <meta charset="UTF-8">
    <script type="text/javascript">
    function berechne(){
        var anfang = document.formular.anfang.value
        var ende = document.formular.ende.value
        var abnahme = document.formular.abnahme.value/100
        var i=0;
        if (abnahme<=1){
        while (anfang>ende)
        {
            anfang=anfang*(1-abnahme);
            i++;
        }
            alert("Das Medikament ist " +i+ " Monate haltbar.")
        }
    }
    </script>
</HEAD>
<BODY style="background-color: dimgrey; color: white">
<H1>Rechner</H1>
<form name="formular">
    <input type="text" name="anfang" placeholder="Anfangswert in mg">
    <input type="text" name="ende" placeholder="Minimaler Wert in mg">
    <input type="text" name="abnahme" placeholder="Monatliche Abnahme in %">
    <input type="button" value="Berechne" onclick="berechne()">
</form>
</BODY>
</HTML>
                

Lösung von: Dennis Müller ()

import java.util.Scanner;

public class medikamente {

    // gibt die Anzahl an Monaten wieder, die das Medikament wirkend ist
    private int berechneMonate(float startwert, float ablaufwert, float ablauf) {

	// Anzahl der Monate
	int monat = 0;

	/*
	 * rechnet die % so lange runter bis die Startkonzentration kleiner als
	 * die Mindestkonzentration ist
	 */
	while (startwert > ablaufwert) {
	    startwert = startwert - (startwert / 100 * ablauf);
	    monat++;
	}

	return monat;
    }

    // Hauptmethode
    public static void main(String[] args) {
	// Klassenobjekt um Methode aufrufen zu können
	medikamente tue = new medikamente();

	// Scanner um die Werte einzulesen
	Scanner scan = new Scanner(System.in);
	System.out.println("Geben Sie die Anfangskonzentration in mg an: ");
	float startwert = scan.nextFloat();

	System.out.println("Geben Sie die Mindestkonzentration in mg an: ");
	float ablaufwert = scan.nextFloat();

	System.out
		.println("Geben Sie die monatliche prozentuale Abnahme an (ohne %): ");
	float ablauf = scan.nextFloat();

	scan.close();

	// berechnet und gibt die Zeit in Monaten
	System.out.println("Nach dem "
		+ tue.berechneMonate(startwert, ablaufwert, ablauf)
		+ " Monat ist das Medikament abgelaufen");
    }
}
                

Lösung von: Sebastian Littel ()

import math

def flinput(prompt=''):
    return float(input(prompt))

def ablaufdatum(wirkstoff, minwirkstoff, abnahme):
    if wirkstoff < minwirkstoff: return 0
    else: return math.ceil(math.log(minwirkstoff/wirkstoff, (1-abnahme)))

w = flinput("Gib die Anfangsmenge des Wirkstoffs ein: ")
m = flinput("Gib die Mindestmenge des Wirkstoffs ein: ")
a = flinput("Gib die monatliche Abnahme der Konzentration in Prozent ein: ")/100

print(ablaufdatum(w, m, a))
                

Lösung von: Karl Welzel ()

Update: es war ein Fehler in der Formel. Der Code berücksichtigt, dass die Verringerung der Wirksamkeit immer gleich dem erstmalig festgestellten Prozentsatz ist. 

# -*- coding: utf-8 -*-
anfangsk = input("Anfangskonzentration in mg: ")
minimalk = input("Minimalkonzentration in mg: ")          # darf nicht höher als Anfangskonzentration sein
pabnahme = input("Monatliche prozentuale Abnahme: ")      # darf nicht höher als 100 sein
prozent = anfangsk / 100.0 * pabnahme
ergebn = (anfangsk - minimalk) / prozent
print "\nDas Medikament ist {0:2.0f}".format(ergebn)," Monate haltbar."
                

Lösung von: J. Reppe ()

HTML:


<html>
<body>

Bitte geben Sie alle Zahlen ein:

<form action="ablaufdatum.php" method="post">
    <input title="ak" type="number" min="0" id="ak" name="ak">Anfangskonzentration (in mg)<br>
    <input title="kmk" type="number" min="0" id="kmk" name="kmk">kritische Minimalkonzentration (in mg)<br>
    <input title="pa" type="number" min="0" step="0.01" id="pa" name="pa">Prozentuale Abnahme (in Prozent)<br>
    <input type="submit" value="Abschicken"><input type="reset" value="Zurücksetzen">
</form>

</body>
</html>




PHP:


<?php
$ak = $_POST["ak"];
$fk = $ak;
$kmk = $_POST["kmk"];
$pa = $_POST["pa"];
$monate = 0;



echo "Die Anfangzkonzentration beträgt: " . $_POST["ak"] . "mg";
echo "<br>";
echo "Kritische Minimalkonzentration: " . $_POST["kmk"] . "mg";
echo "<br>";
echo "Monatliche prozentuale Abnahme: " . $_POST["pa"] . "%";
echo "<br>";


while ($fk > $kmk)
{
    $fk = $fk - ($fk * ($pa/100));

        $monate = $monate + 1;
}

echo $monate;
?>
                

Lösung von: Maik Scheiermann (Powercloud GmbH)

//eingabemaske
document.write(
  '<input type="number" onchange="calculate()" id="start" value="80">' +
    'Anfangskonzentration (mg) <br>' +
  '<input type="number" onchange="calculate()" id="end" value="70">' +
    'Kritische Minimalkonzentration (mg) <br>' +
  '<input type="number" onchange="calculate()" id="prc" value="0.25"' +
    'step="0.01" max="100" min="0">Monatliche prozentuale Abnahme (%) <br>' +
  '<input id="result" readonly>' +
    'Haltbarkeit (Monate)'
);

function expirationMonth(start, minimum, percentage) {
  for (var i = 0; start >= minimum; start *= 1 - percentage / 100) i++;
  return i;
}

// ausgabe
function calculate() {
  document.getElementById("result").value =
    expirationMonth(
      document.getElementById("start").value,
      document.getElementById("end").value,
      document.getElementById("prc").value
    );
}
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

REPORT  ZABLAUFDATUM.

PARAMETERS: pa_ist TYPE p DECIMALS 2, " Startwert
            pa_min TYPE p DECIMALS 2, " Minimalwert
            pa_neg TYPE p DECIMALS 2. " Abnahme in %

DATA: lv_prozent TYPE p DECIMALS 2,
      lv_monate TYPE i.

WHILE pa_ist >= pa_min.
  lv_prozent = pa_ist / 100 * pa_neg.
  pa_ist = pa_ist - lv_prozent.
  add 1 to lv_monate.
ENDWHILE.

WRITE: / 'Das Medikament läuft nach',
         lv_monate,
         ' Monaten ab.'.
                

Lösung von: Alexander S. (msg systems)

anfangsKonzentration = float(input("Anfangskonzentration in mg: "))
minimalKonzentration = float(input("Minimalkonzentration in mg: "))
monatlicheAbnahme = float(input("Monatliche Abnahme in Prozent: "))

monat = 0
konzentration = anfangsKonzentration
while konzentration > minimalKonzentration:
    konzentration *= (100 - monatlicheAbnahme) / 100
    monat += 1

print("Minimalkonzentration (" + str(round(minimalKonzentration, 2)) + " mg) nach", monat, "Monaten unterschritten (" + str(round(konzentration, 2)), "mg).
                

Lösung von: Peter Pan (Home Office)

// C++20 | VS-2022
// MSVC std:c++20 only!

#include <iostream>
#include <chrono>

using namespace std::chrono;
using u = unsigned int;

struct medicine {
    std::string name;       /* Bezeichnung              */
    year_month_day date;    /* Herstellungsdatum        */
    double sub;             /* Wirkstoff in mg          */
    double min;             /* Minimum Wirkstoff in mg  */
    double decr;            /* Verlust pro Monat in %   */
};

const auto get_expiration_date(const medicine& med_) {
    const auto mon{ static_cast<u>(
        ceil(log(med_.min / med_.sub) /
        log(1.0 - med_.decr/100))) };
    return std::make_tuple(med_.date + std::chrono::months{ mon }, mon);
}

const auto& operator<<(std::ostream& os_, const medicine& med_) {
    const auto& [date, mon]{ get_expiration_date(med_) };
    return os_
    << std::format("Bezeichnung: {}\n", med_.name)
    << std::format("Herstellung: {:02}/{}\n", u(med_.date.month()), med_.date.year())
    << std::format("Haltbarkeit: {} Monat(e)\n", mon)
    << std::format("Ablauf:      {:02}/{}\n", u(date.month()), date.year());
}

int main() {
    medicine med{ "med_a1", { 2022y / February / 2d }, 80, 70, 0.25 };
    std::cout << med;

/*
Ausgabe:
    Bezeichnung: med_a1
    Herstellung: 02/2022
    Haltbarkeit: 54 Monat(e)
    Ablauf:      08/2026
*/
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Anfang 80 mg, muss (min.) 70mg, Abnahme 0.25% → 54 Monate

Anfang 2mg, muss (min.) 1.8mg, Abnahme 1% →11 Monate

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Mittel
Webcode: ytso-8p8h
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen