Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

BKluszynski 14. Juni 2012 10:24   reply report
Hinweis zu meiner ABAP-Lösung.... Hübscher und verständlicher ist es, wenn man noch die Selektionstexte zu den Parametern anlegt. Das kann ich hier ja schlecht posten :-)...

LG

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Schwer
Webcode: dcen-0oqy
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen