Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wypisanie w kolejności nierosnące 3 liczby
Forum PHP.pl > Forum > Przedszkole
victor_19
Wypisanie w kolejności nierosnące 3 liczby. Czy jest inny sposób na krótszy kod?


  1. $a = 1;
  2. $b = 2;
  3. $c = 4;
  4.  
  5. if($a>$b)
  6. {
  7. if($b>$c)
  8. {
  9. echo '$a='.$a;
  10. echo '$b='.$b;
  11. echo '$c='.$c;
  12. }
  13. else
  14. {
  15. echo '$a='.$a;
  16. echo '$c='.$c;
  17. echo '$b='.$b;
  18. }
  19. }
  20. elseif($b>$a)
  21. {
  22. if($a>$c)
  23. {
  24. echo '$b='.$b;
  25. echo '$a='.$a;
  26. echo '$c='.$c;
  27. }
  28. else
  29. {
  30. echo '$b='.$b;
  31. echo '$c='.$c;
  32. echo '$a='.$a;
  33.  
  34. }
  35. }
  36. elseif($c>$b)
  37. {
  38. if($b>$a)
  39. {
  40. echo '$c='.$c;
  41. echo '$b='.$b;
  42. echo '$a='.$a;
  43. }
  44. else
  45. {
  46. echo '$c='.$c;
  47. echo '$a='.$a;
  48. echo '$b='.$b;
  49. }
  50. }
  51.  
  52. elseif($c<$b)
  53. {
  54. if($b>$a)
  55. {
  56. echo '$c='.$c;
  57. echo '$b='.$b;
  58. echo '$a='.$a;
  59. }
  60. else
  61. {
  62. echo '$c='.$c;
  63. echo '$a='.$a;
  64. echo '$b='.$b;
  65. }
  66. }
nospor
Cytat
Czy jest inny sposób na krótszy kod?
Tak, najpierw sortowanie, potem wyswietlanie
Wicepsik
Wrzuć to do tablicy i skorzystaj z asort
victor_19
Chodzi o funkcję sort()? Na początek chcę spróbować pisać samemu bez wpisania wbudowanych funkcji
nospor
Cytat
Na początek chcę spróbować pisać samemu bez wpisania wbudowanych funkcji
To w takim razie zacznij naukę assemblera smile.gif

Jak masz awersje do funkcji to zrob jak mowilem. Najpierw posortuj (do tego zadna funkcja nie jest potrzebna tylko odrobina pomyslunku. Wkoncu to tylko 3 zmienne....) a potem wyswietlaj. A nie jak ty teraz w kazdym kroku masz wyswietlanie. Porazka jakas.
victor_19
Z czym jest porażka?
nospor
No z tymi 8-mioma bloczkami do wyswietlania. Do wyswietlania powinien byc tylko jeden bloczek, juz po posortowaniu. No juz trzeci raz ci to mowie. a mowie ci to w odpowiedzi na pytanie : "czy mozna krocej". Tak mozna, krocej: wyswietlac raz a nie 8.
victor_19
Hmm... jakoś nic mi nie wchodzi do głowy jak to napisać krócej. Mógłbym prosić o wskazówki?
nospor
Cytat
Mógłbym prosić o wskazówki?
Ok. To zacznijmy od malych kroczkow. Będą ich dwa. W tym poscie zajmijmy się kroczkiem nr 1:

Kroczek nr 1
Posortuj najpierw te liczby.
Masz 3 liczby. Musisz je posortować. Umiesz?

Pseudokod:
- jesli a > b wowczas b staje sie a, a staje sie b
- jesli b > c wowczas b staje sie c, c staje sie b
- i znowy jesli a > b wowczas b staje sie a, a staje sie b
victor_19
  1. $tablica[0]=7;
  2. $tablica[1]=3;
  3. $tablica[2]=1;
  4.  
  5. for ($i=0;$i<=3;$i++)
  6. {
  7. for ($j=0;$j<=3;$j++)
  8. {
  9. if ($tablica[$j]>$tablica[$j+1])
  10. {
  11. $tmp = $tablica[$j];
  12. $tablica[$j] = $tablica[$j+1];
  13. $tablica[$j+1] = $tmp;
  14. }
  15. }
  16. }
  17. for ($i=0; $i<=4; $i++)
  18. {
  19. echo "$tablica[$i]";
  20. echo "<br />";
  21. }


Chodzi o takie sortowanie?
nospor
Jakim cudem z tego kodu:
Cytat
- jesli a > b wowczas b staje sie a, a staje sie b
- jesli b > c wowczas b staje sie c, c staje sie b
- i znowy jesli a > b wowczas b staje sie a, a staje sie b
doszedles do tego co pokazales? Wspominalem gdzies cos o petli? O tablicy?

Weź uzyj tego asort i po sprawie smile.gif
victor_19
Tak, użyłem sortowania bąbelkowego.

nospor@ - jak wyglądał Twój sposób tego kodziku?
nospor
Cytat
Tak, użyłem sortowania bąbelkowego.
Ja sie nie pytam czego uzyles tylko jakim cudem z mojego kodu doszedles do tamtego winksmiley.jpg
Kolejna zagwostka: masz 3 elementy a iterujesz po 4 winksmiley.jpg Wlacz wyswietlanie wszystkich bledow a zaroi sie od NOTICEow

Cytat
nospor@ - jak wyglądał Twój sposób tego kodziku?
Dokladnie tak jak napisalem. Nic dodac, nic ujac. Zadnej petli czy tablic winksmiley.jpg

ps: no nie mniej jednak + dla Ciebie za fakt, ze slyszales o sortowaniu babelkowym i ze prawie udalo ci się go dobrze napisac
victor_19
Kod z pierwszego postu był zły - Przepraszam.

Znalazłem coś podobnego w necie

  1. $a = 2;
  2. $b = 3;
  3. $c = 1;
  4. if($a>$b)
  5. {
  6. if($b>$c)
  7. {
  8. echo '$a='.$a;
  9. echo '$b='.$b;
  10. echo '$c='.$c;
  11. }
  12. elseif($a>$c)
  13. {
  14. echo '$a='.$a;
  15. echo '$c='.$c;
  16. echo '$b='.$b;
  17. }
  18. else
  19. {
  20. echo '$c='.$c;
  21. echo '$a='.$a;
  22. echo '$b='.$b;
  23. }
  24. }
  25. elseif($a>$c)
  26. {
  27. echo '$b='.$b;
  28. echo '$a='.$a;
  29. echo '$c='.$c;
  30. }
  31. else
  32. {
  33. if($b>$c)
  34. {
  35. echo '$b='.$b;
  36. echo '$c='.$c;
  37. echo '$a='.$a;
  38. }
  39. else
  40. {
  41. echo '$c='.$c;
  42. echo '$b='.$b;
  43. echo '$a='.$a;
  44. }
  45. }


Nie da się już napisać krócej bez wbudowanej funkcji i sortowania bąbelkowego?
lobopol
  1. kolejność 1,2,3
  2. $a =1;
  3. $b =7;
  4. $c =5;
  5. if($a >$c){
  6. $temp = $a;
  7. $a = $c;
  8. $c = $temp;
  9. }
  10. if($a>$b){
  11. $temp = $a;
  12. $a = $b;
  13. $b = $temp;
  14. }
  15. if($b >$c){
  16. $temp = $b;
  17. $b = $c;
  18. $c = $temp;
  19. }
  20.  
  21. echo $a.' '.$b.' '.$c;
  22. kolejność 3,2,1
  23. echo $c.' '.$b.' '.$a

a znacznie lepiej użyj sort (tak to to co nospor napisał)
victor_19
Jak to zrobić za pomocą foreach?

  1. $tablica = array(4, 2, 3, 17);
  2. $a=0;
  3. foreach ($tablica as $tab)
  4. {
  5. $a++;
  6. echo $a;
  7. }
  8.  
thek
Żartobliwie patrząc... Skoro ma być to ciąg nierosnący, to znaczy, że nie może zajść sytuacja, by pomiędzy wszystkimi krokami elementy były większe. Może jednak z takiego wnioskowania wynikać, że wystarczy choć jedno miejsce, gdzie ciąg maleje, a staje się on nierosnący. Jaki z tego wniosek? Użyj array_rand by elementy ustawiły się losowo, a będziesz miał ciąg nierosnący winksmiley.jpg
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.