Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP DigitalRoot
Forum PHP.pl > Forum > PHP
Domson502
Czy ta "funkcja" ma wogole sens ? Niby dziala ale czy da sie to zrobic w inny sposob ?
  1. function compareDigitalRoots($a, $b) {
  2. $arr1 = str_split($a);
  3. $arr2 = str_split($b);
  4.  
  5. $suma1 = array_sum($arr1);
  6. $suma2 = array_sum($arr2);
  7. /* dump($suma1);
  8.   dump($suma2);
  9.   dump($arr1);
  10.   dump($arr2);
  11.   */
  12.  
  13. $arr3 = str_split($suma1);
  14. $arr4 = str_split($suma2);
  15.  
  16. $suma3 = array_sum($arr3);
  17. $suma4 = array_sum($arr4);
  18. /* dump($suma3);
  19.   dump($suma4);
  20.   dump($arr3);
  21.   dump($arr4);
  22.   */
  23. $arr5 = str_split($suma3);
  24. $arr6 = str_split($suma4);
  25. $suma5 = array_sum($arr5);
  26. $suma6 = array_sum($arr6);
  27.  
  28. /* dump($suma5);
  29.   dump($suma6);
  30.   dump($arr5);
  31.   dump($arr6);
  32.   */
  33. if ($suma5 == $suma6) {
  34. return TRUE;
  35. } else {
  36. return FALSE;
  37. }
  38. }
  39.  
  40. dump(compareDigitalRoots(522, 27));
  41. dump(compareDigitalRoots(45613, 4852));




Cytat(Domson502 @ 16.05.2016, 12:24:47 ) *
Czy ta "funkcja" ma wogole sens ? Niby dziala ale czy da sie to zrobic w inny sposob ?
  1. function compareDigitalRoots($a, $b) {
  2. $arr1 = str_split($a);
  3. $arr2 = str_split($b);
  4.  
  5. $suma1 = array_sum($arr1);
  6. $suma2 = array_sum($arr2);
  7. /* dump($suma1);
  8.   dump($suma2);
  9.   dump($arr1);
  10.   dump($arr2);
  11.   */
  12.  
  13. $arr3 = str_split($suma1);
  14. $arr4 = str_split($suma2);
  15.  
  16. $suma3 = array_sum($arr3);
  17. $suma4 = array_sum($arr4);
  18. /* dump($suma3);
  19.   dump($suma4);
  20.   dump($arr3);
  21.   dump($arr4);
  22.   */
  23. $arr5 = str_split($suma3);
  24. $arr6 = str_split($suma4);
  25. $suma5 = array_sum($arr5);
  26. $suma6 = array_sum($arr6);
  27.  
  28. /* dump($suma5);
  29.   dump($suma6);
  30.   dump($arr5);
  31.   dump($arr6);
  32.   */
  33. if ($suma5 == $suma6) {
  34. return TRUE;
  35. } else {
  36. return FALSE;
  37. }
  38. }
  39.  
  40. dump(compareDigitalRoots(522, 27));
  41. dump(compareDigitalRoots(45613, 4852));

To "cos" ma dac true jezeli "digital root" jest taki sam i false jezeli jest inny
kapslokk
  1. function digitalRoot($number){
  2. do{
  3. $digits = str_split($number);
  4. $number = array_sum($digits);
  5. }while($number > 9);
  6. return $number;
  7. }
  8.  
  9. function compareDigitalRoots($a, $b){
  10. return digitalRoot($a) == digitalRoot($b);
  11. }
Domson502
Cytat(kapslokk @ 16.05.2016, 12:33:28 ) *
  1. function digitalRoot($number){
  2. do{
  3. $digits = str_split($number);
  4. $number = array_sum($digits);
  5. }while($number > 9);
  6. return $number;
  7. }
  8.  
  9. function compareDigitalRoots($a, $b){
  10. return digitalRoot($a) == digitalRoot($b);
  11. }

Smiga dzieki ale nie dodalem. To ma byc napisane rekurencyjnie.
Arcioch
  1. <?php
  2.  
  3. function compareDigitalRoots($a, $b) {
  4. return (array_sum(str_split($a)) == array_sum(str_split($b))) ? true : false;
  5. }
  6.  
  7. var_dump(compareDigitalRoots(522, 27));


Oki a co wspólnego ma Twoja funkcja z rekurencją?
kapslokk
@Arcioch
Przeczytaj najpierw co to jest ten digital root.

@Domson502
Po co rekurencyjnie? Przecież to bez sensu.
Domson502
Cytat(Arcioch @ 16.05.2016, 12:37:16 ) *
  1. <?php
  2.  
  3. function compareDigitalRoots($a, $b) {
  4. return (array_sum(str_split($a)) == array_sum(str_split($b))) ? true : false;
  5. }
  6.  
  7. var_dump(compareDigitalRoots(522, 27));


Oki a co wspólnego ma Twoja funkcja z rekurencją?


No za duzo to nie ma ;D. Ucze sie dopiero i swoje bledy zauwazam dopiero po godzinie ;D

Cytat(kapslokk @ 16.05.2016, 12:39:09 ) *
@Arcioch
Przeczytaj najpierw co to jest ten digital root.

@Domson502
Po co rekurencyjnie? Przecież to bez sensu.


Rekurencyjnie dlaczego? Bo tak mam zrobic. Takie zadanie nic na to nie poradze. (Nie nie potrzebuje pomocy zeby dostac dobra ocene. Siedze na praktykach i staram sie zrobic zadanie na kilka sposobow ale rekurencyjnie musze miec to zrobione).
Arcioch
@kapslokk
Racja zakładałem że chodzi tylko o sumę liczb smile.gif
kapslokk
Cytat
Siedze na praktykach i staram sie zrobic zadanie na kilka sposobow ale rekurencyjnie musze miec to zrobione

Jak już musisz mieć rekurencyjnie to zrób tak, żeby Ci wyliczało sumę cyfr z liczby jeśli liczba jest większa od 9 i tak do skutku. Tak czy inaczej, pisanie tego rekurencyjnie jest bez sensu. Totalnie źle dobrany przykład.
Domson502
Cytat(kapslokk @ 16.05.2016, 12:49:39 ) *
Jak już musisz mieć rekurencyjnie to zrób tak, żeby Ci wyliczało sumę cyfr z liczby jeśli liczba jest większa od 9 i tak do skutku. Tak czy inaczej, pisanie tego rekurencyjnie jest bez sensu. Totalnie źle dobrany przykład.

Tu podaje treść zadania.
Napisz funkcję przyjmującą dwa argumenty liczbowe (liczby naturalne). Jeżeli dwie liczby mają taki sam `digital root`
* zwróć true, w inenym przypadku zwróć false.
* Zastosuj funkcję rekurencyjną!
Generalnie zrobiłem też coś takiego ale chyba jest totalnie bez sensu.
  1. function compareDigitalRoots($a, $b) {
  2. $arr1 = str_split($a);
  3. $arr2 = str_split($b);
  4. $arr3 = str_split($arr1);
  5. $arr4 = str_split($arr2);
  6.  
  7.  
  8. if (array_sum($arr1) > 9) {
  9. $suma1 = str_split(array_sum(($arr1)));
  10. dump($suma1);
  11. } else {
  12. dump(array_sum($arr1));
  13. }
  14. if (array_sum($arr2) > 9) {
  15. $suma2 = str_split(array_sum(($arr2)));
  16. dump($suma2);
  17. } else {
  18. dump(array_sum($arr2));
  19. }
  20.  
  21. if (array_sum($arr3) > 9) {
  22. $suma3 = str_split(array_sum(($arr3)));
  23. dump($suma3);
  24. } else {
  25. dump(array_sum($arr1));
  26. }
  27. if (array_sum($arr4) > 9) {
  28. $suma4 = str_split(array_sum(($arr4)));
  29. dump($suma4);
  30. } else {
  31. dump(array_sum($arr4));
  32. }
  33. if($suma3==$suma4){
  34. return TRUE;
  35. }
  36. else{
  37. return FALSE;
  38. }
  39.  
  40. dump(compareDigitalRoots(522, 27));
  41. dump(compareDigitalRoots(45613, 4852));
kapslokk
No dobra, coś tam napisałeś, ale jak to sie ma do rekurencji? Wiesz co to w ogóle jest rekurencja?
Domson502
Cytat(kapslokk @ 16.05.2016, 12:52:52 ) *
No dobra, coś tam napisałeś, ale jak to sie ma do rekurencji? Wiesz co to w ogóle jest rekurencja?

No że funkcja wywołuje samą siebie. Jakoś tak.
kapslokk
No a gdzie Twoja funkcja wykonuje samą siebie?
http://stackoverflow.com/questions/3048413...op-and-digitsum
Tu masz przykład w c++. Przepisz sobie na php
Pyton_000
albo:

  1. $number = 23423453245324;
  2. echo (1 + ($number - 1) % 9);


i z tego sobie funkcje zbudować.
Domson502
Ja już zgłupiałem. Działać działa ale miało zwracać wartość true albo false a zwraca wartość liczbową. Nie wiem jestem na to za głupi chyba ;D


  1. function compareDigitalRoots($a, $b) {
  2. if ($a < 10) {
  3. return $a;
  4. } else {
  5.  
  6. return compareDigitalRoots($a % 10 + compareDigitalRoots($a / 10));
  7. }
  8. if ($b < 10) {
  9. return $b;
  10. } else {
  11.  
  12. return compareDigitalRoots($b % 10 + compareDigitalRoots($b / 10));
  13. }
  14. }
  15.  
  16. dump(compareDigitalRoots(522, 27));
  17. dump(compareDigitalRoots(45613, 4852));
Pyton_000
No tak bo to strasznie skomplikowane jest...

  1. function rootDigit($a, $b) {
  2. return (1 + ($a - 1) % 9) === (1 + ($b - 1) % 9);
  3. }
nospor
@Pyton_000 miejze litosc i przeczytaj w koncu tresc zadania

  1. function digitalRoot($x)
  2. {
  3. return $x < 10 ? $x : digitalRoot( $x % 10 + digitalRoot( intval($x / 10) ) );
  4. }
  5.  
  6. function compareDigitalRoots($a, $b) {
  7. return digitalRoot($a) == digitalRoot($b);
  8. }
  9.  
  10.  
  11. $zm = compareDigitalRoots(1729, 1917);
  12. var_dump($zm);
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.