Verschütt (Chemie) (Simulationen)
Gegeben ist ein volles 1dl Glas Sirup (100ml), das fälschlicherweise mit 1:3 (Sirup zu Wasser) verdünnt wurde [d. h. 25% Sirup = 25ml]. Auf der Sirupflasche ist aber angegeben, dass der Sirup mit 1:4 [d. h. 20% Sirup = 20ml] verdünnt werden soll. Entfernen Sie nun solange 1ml Siruplösung aus dem Glas, füllen Sie einen ml Wasser nach und rühren Sie bei jedem Einfüllen um, solange bis eine 20% Lösung (1:4) erreicht ist. Die Ausgabe des Programmes soll angeben, wie viele ml ersetzt wurden.
Vorgehen: Am besten führen Sie in einer Programmschleife eine Variable mit, die angibt, wie viel ml (oder Prozente) Sirup im Glas sind. Berechnen Sie dann prozentual, wie viel Sirup bzw. wie viel Wasser mit dem aktuellen ml herausgenommen werden.
Schreiben Sie danach Ihr Progamm so um, dass auch mit anderen Startwerten und anderen Schritten (z. B. 0.5ml oder 0.1ml) verfahren werden kann.
1 Kommentare
8 Lösung(en)
package ch.programmieraufgaben.simulation.verschuett;
public class Verschuett {
public static void main(String[] args) {
new Verschuett(). top();
}
// Alle angaben in Millilitern (ml):
double glasMl = 100;
double sirupIstMl = 25;
double sirupSollMl = 20;
double schrittMl = 1; // bzw. 0.5, 0.1
int anzahlSchritte = 0;
void top() {
while(sirupIstMl > sirupSollMl) {
ersetzungsschritt();
anzahlSchritte = anzahlSchritte + 1;
}
System.out.println("Es werden total " + (schrittMl * anzahlSchritte) + "ml ausgewechselt.");
}
void ersetzungsschritt() {
// wie viel wird prozentual entfernt
double procSirupMl = schrittMl * sirupIstMl / glasMl;
sirupIstMl = sirupIstMl - procSirupMl;
}
} // end of class Verschuett
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
*&---------------------------------------------------------------------*
*& Report ZT_CHEM_CHECK
*&
*&---------------------------------------------------------------------*
*Gegeben ist ein volles 1dl Glas Sirup (100ml), das fälschlicherweise
*mit 1:3 (Sirup zu Wasser) verdünnt wurde [d. h. 25% Sirup = 25ml]. Auf
*der Sirupflasche ist aber angegeben, dass der Sirup mit 1:4 [d. h. 20%
*Sirup = 20ml] verdünnt werden soll. Entfernen Sie nun solange 1ml
*Siruplösung aus dem Glas, rühren Sie um und füllen Sie einen ml Wasser
*nach, bis eine 20% Lösung (1:4) erreicht ist. Die Ausgabe des
*Programmes soll angeben, wie viele ml ersetzt wurden.
*
*Vorgehen: Am besten führen Sie in einer Programmschleife eine
*Variable mit, die angibt, wie viel ml (oder Prozente) Sirup im Glas
*sind. Berechnen Sie dann prozentual, wie viel Sirup bzw. wie viel
*Wasser mit dem aktuellen ml herausgenommen werden.
*
*Schreiben Sie danach Ihr Progamm so um, dass auch mit anderen
*Startwerten und anderen Schritten (z. B. 0.5ml oder 0.1ml) verfahren
*werden kann.
*&
*&---------------------------------------------------------------------*
REPORT zt_chem_check.
DATA: g_aktsir TYPE p DECIMALS 2. "aktueller sirupanteil
PARAMETERS: g_antwas TYPE P DECIMALS 2, "wasseranteil
g_antsir TYPE p DECIMALS 2, "sirupanteil
g_zielan TYPE p DECIMALS 2, "zielsirupanteil
g_step TYPE p DECIMALS 2.
*g_sirupglas = 100.
*g_step = 1.
*
*g_antwas = 75.
*g_antsir = 25.
*g_zielan = '0.20'.
g_aktsir = g_antsir / ( g_antwas +
g_antsir ).
IF g_aktsir GT g_zielan.
WHILE g_aktsir GT g_zielan.
g_antwas = g_antwas + 1.
g_antsir = g_antsir - 1.
g_aktsir = g_antsir / ( g_antwas +
g_antsir ).
WRITE: / g_step , 'Sirup entnommen & ' , g_step , ' Wasser hinzugefügt!'.
ENDWHILE.
ENDIF.
IF g_aktsir LT g_zielan.
WHILE g_aktsir LT g_zielan.
g_antwas = g_antwas - 1.
g_antsir = g_antsir + 1.
g_aktsir = g_antsir / ( g_antwas +
g_antsir ).
WRITE: / g_step , 'Sirup hinzugefügt & ' , g_step , ' Wasser entnommen!'.
ENDWHILE.
ENDIF.
set BLANK LINES on.
WRITE: /.
WRITE: / 'Zielanteil: ', g_aktsir.
Lösung von: Benjamin Kluszynski (( Coder :-) ))
// Autor: Andy Großhennig
// Solution for task: Verschütt (Chemie) (Simulationen)
#include <iostream>
using namespace std;
// Function: Provides all values and calculate the replacing
void calculateMix()
{
float fJarSizeMl = 100.0f;
float fSirupMlIs = 25.0f;
float fSirupDecrease = 0.0f;
float fSirupMlShall = 20.0f;
float fReplacing = 1.0f;
int iCount = 0;
// Loop: Calculate the decrease percentage to the jar size and the amount of replacing until the amount of sirup current is higher than the target amount
while(fSirupMlIs > fSirupMlShall)
{
fSirupDecrease = fSirupMlIs * fReplacing / fJarSizeMl;
fSirupMlIs -= fSirupDecrease;
iCount++;
}
cout << "Es wurden " << ((float)iCount * fReplacing) << " ml Sirup ersetzt.";
}
int main()
{
calculateMix();
cout << "\n\n";
system("Pause");
return 0;
}
Lösung von: Andy Großhennig (Bundeswehr)
bool bolerreicht = true;
double dobersetzt = 0;
Console.Write("Gefäßvolumen (in ml): ");
double dobgefäßvolumen = Convert.ToDouble(Console.ReadLine());
Console.Write("Sirupanteil (in ml): ");
double dobsirupanteil = Convert.ToDouble(Console.ReadLine());
Console.Write("Schrittweises Ersetzen (in ml): ");
double dobschrittgröße = Convert.ToDouble(Console.ReadLine());
double dobwasseranteil = dobgefäßvolumen - dobsirupanteil;
// es soll das Verhältnis (1:4) erreicht werden
while (true)
{
if (Math.Round(dobsirupanteil / dobgefäßvolumen, 2) == 0.2)
break;
dobsirupanteil -= dobschrittgröße;
dobwasseranteil += dobschrittgröße;
dobersetzt += dobschrittgröße;
if (dobsirupanteil <= 0)
{
Console.WriteLine("Mit dieser Schrittgröße wird das Ziel nie erreicht werden.");
bolerreicht = false;
break;
}
}
if (bolerreicht == true)
Console.WriteLine("Es wurden {0} ml ersetzt.",dobersetzt);
Console.ReadKey();
Lösung von: Dennis Müller ()
def berechne(wasser=75, sirup=25, schritte=1):
zähler = 0
while (1/4) != (sirup/wasser):
wasser += schritte
sirup -= schritte
zähler += 1
print('Es müssen', zähler * schritte, 'ml entfernt/hinzugefügt werden.')
def eingabe():
print("(S)Standardwerte verwenden")
print("(E)ingabe der Werte")
print()
wahl = input("Ihre wahl: ")
wahl = wahl.upper()
print()
if 'S' == wahl:
berechne()
elif 'E' == wahl:
a = float(input('Wasser (ml): '))
b = float(input('Sirup (ml): '))
c = float(input('Schritte (ml): '))
berechne(a,b,c)
else:
print('Fehler!')
eingabe()
Lösung von: Name nicht veröffentlicht
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
float gemisch;
float sirup;
gemisch=100;
float verhaeltnis;
verhaeltnis=0.25;
sirup=25;
int i;
i=0;
while(verhaeltnis>0.2)
{
sirup=sirup-(1*verhaeltnis);
printf("%f\n",sirup);
verhaeltnis=(sirup/gemisch);
printf("%f\n",verhaeltnis);
i++;
}
printf("so viele schritte wurden benoetigt %d\n",i);
system("PAUSE");
return 0;
}
Lösung von: philipp roth ()
def Sirup():
x = float(input("Schritte: "))
y = float(input("Startwert: "))
z = float(input("Zielwert: "))
Milliliter = float(input("Milliliter: "))
l = y
Glas = []
p = 1
AnzahlDurchführungen = 0
for i in range (0, int(y)): #Sirup im Glas
Glas.append(1)
for i in range(0,int(100-y)): #Wasser im Glas
Glas.append(0)
count = Glas.count(1)
while y > z:
Sirup = count/Milliliter*x
count = y - Sirup
y = count
if l - y >= p:
Glas[p-1] = 0 #Sirup wird im Glas mit Wasser ersetzt
p += 1
AnzahlDurchführungen += 1
print(AnzahlDurchführungen/(1/x),"ml wurden ersetzt")
Sirup()
Lösung von: Daniel Kronich (Energie BKK)
function dilute(vol = 100, ded = 1, cur = 25, tgt = 20) {
return Math.ceil(Math.abs(Math.log(tgt/cur) * vol / ded));
}
console.log(dilute());
console.log(dilute(100, .5, 25, 20));
console.log(dilute(100, .1, 25, 20));
console.log(dilute(1, .00001, 100, 36.7879));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
Verifikation/Checksumme:
Bei der im Aufgabentext gestellten Konfiguration muss 23 mal ausgewechselt werden, was genau 23ml Wasser entspricht. Wird in 0.5 ml-Schritten verfahren, so werden 22.5ml ersetzt. Wenn wir gar in 0.1ml-Schritten ersetzen, so schütten wir 22.4ml Frischwasser ein.
Starten wir mit einer 100% Siruplösung von einem Liter und ersetzen jeweils in 0.01ml-Schritten, so lange, bis wir eine Lösung von 36.7879% erhalten, so müssen wir genau einen Liter Wasser einfüllen. Dies entspricht auch dem theoretischen Resultat, wenn wir einen Liter Wasser in einen Liter Sirup unter ständigem Rühren einfließen und den Überschuss gleichzeitig abfließen lassen (Bem: 36.7879% = 1/e).
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 1 |
Schwierigkeit: | Schwer |
Webcode: | dcen-0oqy |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |
Kommentare (1)
LG