Benutzerdefinierte Suche

Brüche systematisch kürzen

  1. martinibook

    martinibook Thread StarterMacUser Mitglied

    Mitglied seit:
    20.08.2005
    Beiträge:
    8.632
    Zustimmungen:
    350
    Hallo,

    Mein Casio Taschenrechner kann irgendwie Brüche kürzen. Ich habe das mal gelernt, mit Primfaktorenzerlegung und größter, gemeinsamer Teiler usw.

    Ich möchte bei meiner Bilderdatenbank in PHP das Bildverhältnis angeben, allerdings nicht im 1:1,33 Stil sondern im 3:4 Stil. Geht das irgenwie?

    Martin
     
    martinibook, 09.08.2006
  2. Spacemojo

    SpacemojoMacUser Mitglied

    Mitglied seit:
    16.05.2004
    Beiträge:
    617
    Zustimmungen:
    21
    Ich hab mal irgendwo Code (in C) für den größten gemeinsamen Teiler gefunden:
    Code:
    int gcd(int x, int y) // greatest common divisor
    {	
    	if (x < 0)
    	{
    		x = -x;
    	}
    	if (y < 0)
    	{
    		y = -y;
    	}
    	while (true)
    	{
    		if (x == 0)
    		{
    			return y;
    		}
    		y = y % x;		
    		if (y == 0)
    		{
    			return x;
    		}
    		x = x % y;
    	}
    }
    
     
    Spacemojo, 09.08.2006
  3. Gerundium

    GerundiumMacUser Mitglied

    Mitglied seit:
    22.10.2005
    Beiträge:
    1.997
    Zustimmungen:
    69
    Es ist schon spät, aber ist das nicht identisch?

    3:4 = 3 x (1:1,33)
     
    Gerundium, 09.08.2006
  4. der_Kay

    der_KayMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    hmmm, .....durchaus ;)
     
    der_Kay, 09.08.2006
  5. der_Kay

    der_KayMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    Im Allgemeinen nicht, denn das läuft darauf hinaus, die reellen Zahlen durch die rationalen zu ersetzen, was schwerlich geht. ;)

    ansonsten:
    PHP:
    function kuerze (&$z, &$n)
    {
        if ( 
    == ($z = (int) $z) || == ($n = (int) $n) ) 
              return;
        
         
    $a $z ? -$z $z;
        
    $b $n ? -$n $n;
        
        do
        {
            
    $mod =  $a $b
            
    $a $b
            
    $b $mod;
         }
        while(
    $mod 0);
        
        
    $z /= $a;
        
    $n /= $a;
    }
     
    der_Kay, 09.08.2006
  6. martinibook

    martinibook Thread StarterMacUser Mitglied

    Mitglied seit:
    20.08.2005
    Beiträge:
    8.632
    Zustimmungen:
    350
    Okay, das sieht ganz gut aus. Ich verstehe die Funktionsweise noch nicht so ganz, allerdings kann ich das noch später machen.

    Danke für eure Quelltexte.
     
    martinibook, 09.08.2006
  7. der_Kay

    der_KayMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    Wo hapert´s denn?
     
    der_Kay, 09.08.2006
  8. martinibook

    martinibook Thread StarterMacUser Mitglied

    Mitglied seit:
    20.08.2005
    Beiträge:
    8.632
    Zustimmungen:
    350
    Ich verstehe einfach nicht warum man auf diese Weise einen Teiler rausbekommt, aber wenn ich mal Zeit habe, gehe ich das durch.

    Martin
     
    martinibook, 09.08.2006
  9. martinibook

    martinibook Thread StarterMacUser Mitglied

    Mitglied seit:
    20.08.2005
    Beiträge:
    8.632
    Zustimmungen:
    350
    PHP:
    <?PHP
        
        
    function kuerze (&$z, &$n)
            {
             if (
    == ($z = (int) $z) || == ($n = (int) $n)) 
                 return;
     
             
    $a $z ? -$z $z;
             
    $b $n ? -$n $n;
     
             do
                 {
                 
    $mod $a $b
                 
    $a $b
                 
    $b $mod;
                 }
             while(
    $mod 0);
     
             
    $z /= $a;
             
    $n /= $a;
             } 

     
    $zaehler 24;
     
    $nenner 6;

     
    kuerze($zaehler$nenner);

     echo 
    $zaehler ' &divide; ' $nenner;
    Wird zu:

    4 / 1
     
    martinibook, 09.08.2006
  10. der_Kay

    der_KayMacUser Mitglied

    Mitglied seit:
    02.09.2004
    Beiträge:
    1.685
    Zustimmungen:
    8
    Also das halte ich für ein durchaus akzeptables Ergebnis!! ;)
     
    der_Kay, 09.08.2006