Brüche systematisch kürzen

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von martinibook, 09.08.2006.

  1. martinibook

    martinibook Thread Starter MacUser Mitglied

    Beiträge:
    8.564
    Zustimmungen:
    350
    MacUser seit:
    20.08.2005
    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
     
  2. Spacemojo

    Spacemojo MacUser Mitglied

    Beiträge:
    616
    Zustimmungen:
    21
    MacUser seit:
    16.05.2004
    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;
    	}
    }
    
     
  3. Gerundium

    Gerundium MacUser Mitglied

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

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

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    MacUser seit:
    02.09.2004
    hmmm, .....durchaus ;)
     
  5. der_Kay

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    MacUser seit:
    02.09.2004
    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;
    }
     
    Zuletzt bearbeitet: 09.08.2006
  6. martinibook

    martinibook Thread Starter MacUser Mitglied

    Beiträge:
    8.564
    Zustimmungen:
    350
    MacUser seit:
    20.08.2005
    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.
     
  7. der_Kay

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    MacUser seit:
    02.09.2004
    Wo hapert´s denn?
     
  8. martinibook

    martinibook Thread Starter MacUser Mitglied

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

    Martin
     
  9. martinibook

    martinibook Thread Starter MacUser Mitglied

    Beiträge:
    8.564
    Zustimmungen:
    350
    MacUser seit:
    20.08.2005
    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
     
  10. der_Kay

    der_Kay MacUser Mitglied

    Beiträge:
    1.693
    Zustimmungen:
    7
    MacUser seit:
    02.09.2004
    Also das halte ich für ein durchaus akzeptables Ergebnis!! ;)
     

Diese Seite empfehlen