Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Skrypty]Matematyka
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
ShadowD
Mam skrypty napisane przeze mnie i chciał bym was prosić o ocenę, a tak naprawdę o wytknięcie błędów. Zmienne są brzydko ponazywane ale to wersja, że tak powiem robocza. Skrypty poruszają bajeczne problemy...

Nie będę pisał dużo niech skrypty mówią same za siebie. ;p

[ANR] Zamiana znaków arabskich na rzymskie:

  1. <?php
  2. function anr($a)
  3.  {
  4.        
  5.    $znakiArabskie=array(1,4,5,9,10,40,50,90,100,400,500,900,1000);
  6.    $znakiRzymskie=array('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
  7.    
  8.    for($i=12;$i>=0;$i--)
  9.    {    
  10.      while($a>=$znakiArabskie[$i])
  11.      {
  12.        $a=$a-$znakiArabskie[$i];
  13.        $anr=$anr.$znakiRzymskie[$i];
  14.      }
  15.    }
  16.    
  17.    return $anr;    
  18.  }
  19.  
  20. ?>


[RNA] Zamiana znaków rzymskich na arabskie:

  1. <?php
  2. function rna($a)
  3.  {
  4.  
  5.    $znakiRzymskie=array('I','V','X','L','C','D','M');
  6.    $znakiArabskie=array(1,5,10,50,100,500,1000);
  7.  
  8.    for($i=strlen($a)-1;$i>=0;$i--)
  9.    {
  10.      for($j=6;$j>=0;$j--)
  11.      {
  12.        if($a[$i]===$znakiRzymskie[$j])
  13.          $b[$i]=$znakiArabskie[$j];
  14.      }
  15.    }
  16.  
  17.    for($i=0;$i
  18.    {
  19.      $n=$i+1;
  20.  
  21.      if(isset($b[$n]))
  22.      {
  23.        if($b[$i]>=$b[$n])
  24.          $rna=$rna+$b[$i];
  25.         else
  26.          $rna=$rna-$b[$i];
  27.      }
  28.      else
  29.        $rna=$rna+$b[$i];
  30.    }
  31.  
  32.  return $rna;  
  33.  }
  34.  
  35. ?>


[NWD] Największy wspólny dzielnik:

  1. <?php
  2. function NWD($a,$b)
  3.  {
  4.    
  5.    if($a>=$b)
  6.    {
  7.      $A=$a;
  8.      $B=$b;      
  9.    }
  10.    else
  11.    {
  12.      $A=$b;
  13.      $B=$a;
  14.    }
  15.        
  16.    do
  17.    {
  18.      $R=$A%$B;
  19.    
  20.      $A=$B;
  21.      $B=$R;
  22.    }
  23.    while($R!=0);
  24.    
  25.    return $A;
  26.  }
  27.  
  28. ?>


[NWW] najmniejsza wspólna wielokrotność:

  1. <?php
  2. function zna($a,$b)
  3.  {
  4.    $nwd=nwd($a,$b);
  5.  
  6.    $i=$a*$b;
  7.  
  8.    $nww=$i/$nwd;
  9.    
  10.    return $nww;
  11.  }
  12.  
  13. ?>


Niektóre funkcje korzystają z poprzednich więc powiedzmy, że wszystkie są w jednym pliku.

@Administracja/Opiekunowie - Jeśli istnieje lepsze miejsce na poruszenie owego tematu chciał bym prosić o przeniesienie go w to miejsce. Z góry dziękuję.
Moli
Cytat
@Administracja/Opiekunowie - Jeśli istnieje lepsze miejsce na poruszenie owego tematu chciał bym prosić o przeniesienie go w to miejsce. Z góry dziękuję.


Do takich tematów jest dział Algorytmy, klasy, funkcje.
ShadowD
Może i masz rację, jednak sam tematu nie przeniosę a dublował go nie będę więc i tak muszę czekać na szanowną administrację.

Jednak ten dział jest do oceny skryptów a to oto chodzi, jednak nie zależy mi na oceny np 5/10 czy innej a raczej o porady jak można by łatwiej lub lepiej zapisać owe funkcję.

Ale dzięki za odp... winksmiley.jpg
tiraeth
Przenoszę na Algorytmy ...
Speedy
Cytat
a raczej o porady jak można by łatwiej lub lepiej zapisać owe funkcję.


  1. <?php
  2. for($i=0;$i
  3.   {
  4. ?>


tu masz coś niedokończone

  1. <?php
  2. if($a>=$b)
  3.   {
  4.     $A=$a;
  5.     $B=$b;      
  6.   }
  7.  
  8.   if($a<$b)
  9.   {
  10.     $A=$b;
  11.     $B=$a;
  12.   }
  13. ?>


1. po co generować kolejną instrukcję warunkową? Przecież wiadomo, że w tym przypadku, jak jedna nie zadziała, to uruchomi się druga - wystarczy dać else.
2. Nie podoba mi się zwyczaj tworzenia różnych zmiennych, które różnią się tylko wielkością liter. Na dłuższą metę może to doprowadzić do niezłego bałaganu.
plurr
oferujesz dwie rozne funkcje robiace praktycznie to samo - zamieniaja (mowie tutaj o anr/rna) Nie lepiej ujednolicic to do jednej funkcji ? Do tego spraw aby funkcja sama rozrozniala jaki znak jest podawany przez uzytkownika - latwo to zrobic, poniewaz rzymskie i arabskie liczby znacznie sie od siebie roznia.
ShadowD
Kod poprawiłem brakowało kawałka linii, nie wiem dlaczego się nie skopiował...

1. Faktycznie można zastosować else. <<-- Poprawione
2. Co do nazw zmiennych są takie ponieważ korzystałem przy tworzeniu algorytmów z książki do matematyki i tak tam było to ponazywane, dla ułatwienia zrozumienia kodu dla nauczycieli zastosowałem podobne nazwy. Gdy tylko stworze stronę na której będą prezentowane te skrypty poprawię nazewnictwo.
3. Prace nad połączeniem funkcji zostały rozpoczęte. winksmiley.jpg

Dziękuję za opinie...
michalkjp
Na razie daje 1/10 dlatego, że reimplementujesz funkcje, które już istnieją (znalazłem je w dokumentacji po dwóch minutach szukania).

Jak mi podasz jakiś dobry powód takiego postępowania, to dostaniesz 10/10 smile.gif


BTW. Nie jestem matematykiem, ale wydaje mi się, że największy wspólny dzielnik powinien być liczbą naturalną. Jak podstawię -3 i -15, to wychodzi -3. Nie wiem, czy liczenie największego wspólnego dzielnika z liczb ujemnych jest dozwolone...
ShadowD
Mówiąc szczerze nie wiedziałem że któraś z tych funkcji istnieje, a nawet powiem więcej - nie szukałem ich. Skrypty piszę na matematykę by dostać za nie ocenę więc nie mogę korzystać z gotowców o ile można tak powiedzieć o funkcji która jest wbudowana w php.

A wędź proszę nie oceniać tych skryptów w tym względzie - mogłem to napisać na początku, moja wina... ;p

EDIT:

Połączyłem dwie funkcję w jedną:
  1. <?php
  2.  
  3.  function zar($a)
  4.  {
  5.    if(preg_match('/^[0-9]+$/D', $a))
  6.    {      
  7.      $znakiArabskie=array(1,4,5,9,10,40,50,90,100,400,500,900,1000);
  8.      $znakiRzymskie=array('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
  9.      
  10.      for($i=12;$i>=0;$i--)
  11.      {    
  12.        while($a>=$znakiArabskie[$i])
  13.        {
  14.          $a=$a-$znakiArabskie[$i];
  15.          $zar=$zar.$znakiRzymskie[$i];
  16.        }
  17.      }
  18.    }
  19.    
  20.    if(preg_match('/^[IVXLCDM]+$/D', $a))
  21.    {
  22.      $znakiRzymskie=array('I','V','X','L','C','D','M');
  23.      $znakiArabskie=array(1,5,10,50,100,500,1000);
  24.      
  25.      for($i=strlen($a)-1;$i>=0;$i--)
  26.      {
  27.        for($j=6;$j>=0;$j--)
  28.        {
  29.          if($a[$i]===$znakiRzymskie[$j])
  30.            $b[$i]=$znakiArabskie[$j];
  31.        }
  32.      }
  33.  
  34.      for($i=0;$i<strlen($a);$i++)
  35.      {
  36.        $n=$i+1;
  37.  
  38.        if(isset($b[$n]))
  39.        {
  40.          if($b[$i]>=$b[$n])
  41.            $zar=$zar+$b[$i];
  42.           else
  43.            $zar=$zar-$b[$i];
  44.        }
  45.        else
  46.          $zar=$zar+$b[$i];
  47.      }
  48.    }
  49.    
  50.    if(!isset($zar))
  51.      $zar='Error';
  52.        
  53.    return $zar;    
  54.  }
  55. echo zar('X');
  56. ?>

1. Faktycznie można zastosować else. <<-- Poprawione
2. Prace nad połączeniem funkcji zostały rozpoczęte. <<-- Poprawione
michalkjp
Cytat(ShadowD @ 19.10.2008, 14:04:05 ) *
Skrypty piszę na matematykę by dostać za nie ocenę więc nie mogę korzystać z gotowców o ile można tak powiedzieć o funkcji która jest wbudowana w php.

No to wszystko wyjaśnia.

Przy NWD i NWW proponuję robić return abs($zmienna); bo to chyba jednak zawsze muszą być liczby naturalne – zapytaj się jakiegoś matematyka co o tym myśli, żeby się upewnić na 100%.

W zasadzie zgodnie z definicją mógłbyś przyjąć założenie, że liczby mają być naturalne i już na początku obie powinieneś zmieniać na dodatnie.
ShadowD
Przyznam szczerze, że nie wiem ale -3 i -15 dzieli się przez -3 i 3 a to jest największy wspólny dzielnik a 3>-3 więc chyba masz rację... winksmiley.jpg

Mam pytanie jak zamienić liczby ujemne na dodatnie w php??
michalkjp
Cytat(ShadowD @ 19.10.2008, 14:39:20 ) *
Mam pytanie jak zamienić liczby ujemne na dodatnie w php??


funkcją abs();
ShadowD
By nie wklejać kodu już więcej na forum dam linki do katalogu z nimi...

http://aid.webhost.pl/server-aid/
kacka
Zmień rozszerzenie na phps
ShadowD
No tak zapomniałem, dzięki Kacka...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.