Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Schmetterlingseffekt (Schleifen)

Unter dem Begriff Schmetterlingseffekt bezeichnet man eine kleine Ursache, die eine große Wirkung zeigt.

Die folgende Iteration soll 10'000 mal ausgeführt werden:

wert ← 4 * wert * (1 - wert)

Starten Sie mit den Werten 0.12345; 0.123456789012345 und 0.123456789012344

Begründen Sie das Resultat.

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

9 Lösung(en)

package ch.programmieraufgaben.iteration.butterfly;

import java.util.Scanner;

/**
 * Schmetterlingseffekt an 10'000facher Iteration
 * @author Philipp Gressly (phi AT gressly DOT ch)
 */
public class ButterFly {

    public static void main(String[] args) {
        new ButterFly().top();
    }
    

    void top() {
      double start       = eingabeDouble("Startzahl"  );
      int    iterationen = 10_000; //eingabeInt   ("Iterationen");
      
      double end         = iteriere(start, iterationen);
      System.out.println("Endpunkt: " + end);
    }
    
    double iteriere(double start, int iterationen) {
       double wert = start;
       while(iterationen > 0) {
           wert = 4 * wert * (1 - wert);
           iterationen = iterationen - 1;
       }
       return wert;
    }
    
    Scanner sc = new Scanner(System.in);
    String eingabe(String wertAnfrage) {
       System.out.println("Bitte " + wertAnfrage + " eingeben: ");
       return sc.nextLine();
    }
    double eingabeDouble(String wert) {
       return Double.parseDouble(eingabe(wert));
    }
    int eingabeInt(String wert) {
       return Integer.parseInt(eingabe(wert));
    }

} // end of class ButterFly
                

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

wert = float (input("Geben Sie den Wert ein: "))

def calculate(wert):
    for i in range(10000):
        wert = 4*wert*(1-wert)
    print(wert)

calculate(wert)
                

Lösung von: Py Thon ()

#include <iostream>
using namespace std;

int main()
{
	int iterations = 10000;
	int chooser = 0;
	long double value = 0.0;
	do
	{
		cout << "Wähle einen Startwert" << endl;
		cout << " 1 = 0.12345" << endl;
		cout << " 2 = 0.123456789012345" << endl;
		cout << " 3 = 0.123456789012344" << endl;
		cin >> chooser;
	}while(chooser != 1 && chooser != 2 && chooser != 3);

	switch(chooser)
	{
	case(1):
		value = 0.12345;
		break;
	case(2):
		value = 0.123456789012345;
		break;
	case(3):
		value = 0.123456789012344;
		break;
	default:
		break;
	}
	cout << value << endl;
	for(int i = 0; i < iterations; i++)
	{
		value = 4 * value * (1-value);
		cout << value << endl;
	}
	cin.ignore();
	cin.get();
}
                

Lösung von: R. Z. (FH-Dortmund)

#!/usr/bin/env perl
use strict;
use warnings;

print "Bitte geben Sie den Wert ein: ";
my $wert = <STDIN>;
chomp( $wert );

my $ergebnis;

sub calculate {
    my $self = shift;

    for ( my $i = 0; $i <= 10000; $i++ ) {
        $ergebnis = 4 * $self * ( 1 - $self );
    }
    return $ergebnis;
}

print "Ergebnis: " . calculate($wert) . "\n";
                

Lösung von: Josef Florian Sedlmeier (Exirius IT-Dienstleistungen GmbH)

program Schmetterlingseffekt (input, output);
{ uebungsbeispiel fuer Schleifen }

    const
    DURCHLAEUFE = 10000;

    type
    tIndex = 1..DURCHLAEUFE;

    var
    i: tIndex; { laufvariable }
    Zahl: double;

begin
    writeln('Bitte eine Zahl eingeben: ');
    readln(Zahl);
    for i := 1 to DURCHLAEUFE do
        Zahl := 4 * Zahl * (1-Zahl);
    writeln('Das Ergebnis ist: ', Zahl);
end. { Schmetterlingseffekt }
                

Lösung von: Patrick Reif ()

var value = parseFloat(prompt("Startwert")),
    i = 0;
    
for (i; i <= 10000; i++) {
   value = 4 * value * (1 - value);
}

console.log(value);
                

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

<?php

$wert1 = 0.12345;
$wert2 = 0.123456789012345;
$wert3 = 0.123456789012344;

echo 'Startwert 1 = '. $wert1. '<br>';

for($i = 0; $i <= 10000; $i++){
    $wert1 = 4 * $wert1 * (1 - $wert1);
}

echo 'Endwert 1 = '. $wert1. '<br>';
echo '<br>';
echo 'Startwert 2 = '. $wert2. '<br>';

for($i = 0; $i <= 10000; $i++){
    $wert2 = 4 * $wert2 * (1 - $wert2);
}

echo 'Endwert 2 = '. $wert2. '<br>';
echo '<br>';
echo 'Startwert 3 = '. $wert3. '<br>';

for($i = 0; $i <= 10000; $i++){
    $wert3 = 4 * $wert3 * (1 - $wert3);
}

echo 'Endwert 3 = '. $wert3. '<br>';
                

Lösung von: Julian Mueller (BSZ Würzburg)

// NET 6.x | C# 10.x | VS-2022
var lstStartwerte = new List<double> { 0.12345, 0.123456789012345, 0.123456789012344 };
double Iter(double v, int n) {
	for (var i = 0; i < n; i++)
		v = 4 * v * (1 - v); 
	return v;
}
lstStartwerte.ForEach(x => Console.WriteLine($"Eingabe: {x}\nAusgabe: {Iter(x, 10_000)}\n"));
                

Lösung von: Jens Kelm (@JKooP)

// C++ 17
#include <iostream>
#include <vector>
#include <iomanip>

int main() {
    const std::vector<double>startwerte{ 0.12345, 0.123456789012345, 0.123456789012344 };
    const auto iter{ [&startwerte](double v, int n) {for (auto i{ 0 }; i < n; ++i) v = 4 * v * (1 - v); return v;} };
    for(const auto& sw : startwerte)
        std::cout << std::fixed  << "Eingabe: " << sw << "\nAusgabe: " << std::setprecision(15) << iter(sw, 10'000) << "\n\n";
}
                

Lösung von: Jens Kelm (@JKooP)

Verifikation/Checksumme:

Je nach Rechengenauigkeit kommen die verschiedensten Resultate (jedoch alle im im Zahlenbereich Null bis Eins) vor.

Die Reihenentwicklung der gegebenen Formel zeigt ein stark chaotisches Verhalten.

Hier meine Resultate (Java):

Eingabe: 0.12345
Ausgabe: 0.8459851292988083

Eingabe: 0.123456789012345
Ausgabe: 0.9932530780939162

Eingabe: 0.123456789012344
Ausgabe: 0.475016701262336

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Mittel
Webcode: 0ws8-2b4f
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen