Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Skrypty]Matematyka
ShadowD
post 18.10.2008, 20:11:30
Post #1





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


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ę.

Ten post edytował ShadowD 19.10.2008, 12:17:16


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
Moli
post 18.10.2008, 20:51:28
Post #2





Grupa: Zarejestrowani
Postów: 662
Pomógł: 45
Dołączył: 26.03.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ShadowD
post 18.10.2008, 20:55:44
Post #3





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


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

Ten post edytował ShadowD 18.10.2008, 20:56:42


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
tiraeth
post 18.10.2008, 21:49:27
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Przenoszę na Algorytmy ...
Go to the top of the page
+Quote Post
Speedy
post 18.10.2008, 21:58:28
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Speedy 18.10.2008, 21:59:15


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
plurr
post 19.10.2008, 11:40:10
Post #6





Grupa: Zarejestrowani
Postów: 175
Pomógł: 12
Dołączył: 28.06.2007
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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.


--------------------
Wyobraźnia bez wiedzy może stworzyć rzeczy piękne.
Wiedza bez wyobraźni najwyżej doskonałe.

Albert Einstein
Go to the top of the page
+Quote Post
ShadowD
post 19.10.2008, 12:16:34
Post #7





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


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...

Ten post edytował ShadowD 19.10.2008, 12:21:22


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
michalkjp
post 19.10.2008, 12:49:10
Post #8





Grupa: Zarejestrowani
Postów: 182
Pomógł: 14
Dołączył: 20.09.2008

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
ShadowD
post 19.10.2008, 13:04:05
Post #9





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


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

Ten post edytował ShadowD 19.10.2008, 13:17:31


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
michalkjp
post 19.10.2008, 13:21:47
Post #10





Grupa: Zarejestrowani
Postów: 182
Pomógł: 14
Dołączył: 20.09.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ShadowD
post 19.10.2008, 13:39:20
Post #11





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


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??


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
michalkjp
post 19.10.2008, 13:52:33
Post #12





Grupa: Zarejestrowani
Postów: 182
Pomógł: 14
Dołączył: 20.09.2008

Ostrzeżenie: (0%)
-----


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


funkcją abs();
Go to the top of the page
+Quote Post
ShadowD
post 19.10.2008, 14:01:58
Post #13





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


By nie wklejać kodu już więcej na forum dam linki do katalogu z nimi...

http://aid.webhost.pl/server-aid/


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
kacka
post 19.10.2008, 14:04:13
Post #14





Grupa: Zarejestrowani
Postów: 44
Pomógł: 5
Dołączył: 29.06.2005

Ostrzeżenie: (0%)
-----


Zmień rozszerzenie na phps


--------------------
Kacper Szurek <--- http://www.kacka.pl
Go to the top of the page
+Quote Post
ShadowD
post 19.10.2008, 14:20:47
Post #15





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


No tak zapomniałem, dzięki Kacka...


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 11:57