Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z generowaniem procentów (plan treningowy).
Forum PHP.pl > Forum > Przedszkole
mlodygda
Chodzi o generowanie prostej tabelki, która rozpisze ciężary na określoną ilość tygodni. Użytkownik podaje swojego "maxa" a strona generuje rozpiskę na kolejne x tygodni.
Rozpiska wygląda w ten sposób:

1 Tydz: 0,65*max, 0,75*max, 0,85*max
2 Tydz: 0,7*max, 0,8*max, 0,9*max
3 Tydz: 0,75*max, 0,85*max, 0,95*max
4 Tydz(odpoczynek): 0,4*max, 0,5*max, 0,6*max

Rozpiska na pierwszą serie w każdym z 3 tygodni nie stanowi problemu (przykład dla maxa na klatkę):

  1. $klatka=$_POST['klatka'];
  2. $klatka1=0.65*$klatka;
  3.  
  4. for ($i=0;$i<3;$i++){
  5.  
  6. print "<td>". round($klatka1,1)."</td>";
  7. $klatka1=$klatka1+0.05*$klatka;
  8.  
  9. }


Problem pojawia się jak optymalnie to rozpisać na powiedzmy 12 tyg. Za każdym razem muszę po pierwszych 3 tygodniach czwarty tydzień wpisywać ręcznie (poza pętlą) ? I dla każdej serii wpisywać osobną pętle? To bardzo...pracochłonne, lekko mówiąc tongue.gif
Nie wiem czy udało mi się dobrze wytłumaczyć problem, w każdym razie bardzo proszę o POdpowiedzi, niekoniecznie odpowiedzi.
Michael2318
  1. $klatka=$_POST['klatka'];
  2. $klatka1=0.65*$klatka;
  3. $tydzien = 0;
  4. for ($i=0;$i<3;$i++){
  5. $tydzien++;
  6. if ( $tydzien !== 4 )
  7. {
  8. print "<td>". round($klatka1,1)."</td>";
  9. $klatka1=$klatka1+0.05*$klatka;
  10. }
  11. else
  12. {
  13. echo 'odpoczynek'; // tutaj robisz co tam chcesz, nie wiem dokladnie o co chodzi
  14. $tydzien = 0;
  15. }
  16.  
  17. }
mlodygda
ok, sorki bo bardzo nieprecyzyjnie się wyraziłem.

http://www.liftingreport.com/wendler531-calculator/ - chodzi o coś podobnego ( trzeba wpisać obciążenie i kliknąć calculate ) z tym, żeby obliczało to na określoną ilość cykli. doszedłem do czegoś takiego:

  1. <table border="2">
  2. <tr><td>Klatka</td>
  3.  
  4. <?php
  5. $tygodnie=4*$_POST['cykle'];
  6. $klatka=$_POST['klatka'];
  7. $klatka1=0.65*$klatka;
  8. $klatka2=0.7*$klatka;
  9. $klatka3=0.75*$klatka;
  10. $klatka4=0.4*$klatka;
  11. $tablica=array(1 => $klatka1, 2 => $klatka2, 3 => $klatka3, 4 => $klatka4);
  12.  
  13. for($i=1;$i<=$tygodnie;$i++){
  14. print "<td>".$i. "TYDZ </td>";
  15.  
  16. }
  17. ?>
  18.  
  19.  
  20. </tr>
  21. <tr>
  22. <?php
  23.  
  24. for ($j=1;$j<4;$j++){
  25. print "<tr><td>";
  26. for ($i=1;$i<5;$i++){
  27.  
  28. print "<td>". round($tablica[$i],1)."</td>";
  29. $tablica[$i]=$tablica[$i]+0.1*$klatka;
  30.  
  31. }
  32. }
  33. $klatka=$klatka+3; // tu dodaje 3kg, żeby móc rozpocząć nowy cykl z obciążeniem większym o 3kg.
  34.  
  35.  
  36.  
  37. ?>


czyli póki co tworzy tabelę, gdzie wypełnione są w całości tylko pierwsze 4 tygodnie a w następnych kolumnach wypełniony jest tylko wiersz z numerem tygodnia.
po 4 tygodniu ma dodać 3kg i zacząć operację od nowa. szczerze mówiąc trochę się zakręciłem..
Michael2318
Po co to...? Przecież podałem Ci rozwiązanie wyżej, takie wciskanie na siłe pętli za pętlą to bezsens, tym bardziej przy takich prostych efektach, jakich oczekujesz.
  1. <?php
  2. $tydzien = 0;
  3. for($i=0; $i<12; $i++)
  4. {
  5. $tydzien++;
  6. if ( $tydzien !== 4 )
  7. {
  8. echo 'siłka<br>';
  9. }
  10. else
  11. {
  12. echo 'odpoczynek<br>';
  13. $tydzien = 0;
  14. }
  15. }
  16. ?>


zwróci:
Cytat
siłka
siłka
siłka
odpoczynek
siłka
siłka
siłka
odpoczynek
siłka
siłka
siłka
odpoczynek


Z tego co piszesz to nie wiesz co zrobić z tygodniem 4 (odpoczynek). Wyżej masz w pętli kod:
  1. echo 'odpoczynek<br>';


zastepujesz go odpowiednimi danymi/obliczeniami dla tygodnia 4 (odpoczynku).
mlodygda
mocno wydaje mi się, że nie czytasz tego, co piszę.
jakby mi miało wyrzucać 3x to samo i raz odpoczynek to nie ma problemu, ale tutaj wartość ZA KAŻDYM RAZEM jest inna, wg wzorca który podałem.
Michael2318
array, switch i pochodne:
  1. <?php
  2. $wartosci = array(
  3. 0 => 'wartosc dla tyg.1',
  4. 1 => 'wartosc dla tyg.2',
  5. 2 => 'wartosc dla tyg.3',
  6. 3 => 'wartosc dla tyg.4',
  7. 4 => 'wartosc dla tyg.5',
  8. 5 => 'wartosc dla tyg.6',
  9. 6 => 'wartosc dla tyg.7',
  10. 7 => 'wartosc dla tyg.8',
  11. 8 => 'wartosc dla tyg.9',
  12. 9 => 'wartosc dla tyg.10',
  13. 10 => 'wartosc dla tyg.11',
  14. 11 => 'wartosc dla tyg.12');
  15. $tydzien = 0;
  16. for($i=0; $i<12; $i++)
  17. {
  18. $tydzien++;
  19. if ( $tydzien !== 4 )
  20. {
  21. echo $wartosci[$i];
  22. }
  23. else
  24. {
  25. echo $wartosci[$i];
  26. $tydzien = 0;
  27. }
  28. }
  29. ?>


if wewnątrz pętli chyba nie będzie już potrzebny, skoro masz wartość rozłożoną dla każdego tygodnia, ale zależy jak dalej tym pokierujesz, więc to zostawiam Tobie smile.gif
mlodygda
no tak, i tu ręcznie musze wpisywać wartość dla każdego tygodnia, co jest bez sensu, bo po to staram się napisać tą formułkę, żeby tego nie robić. i tak jak pisałem - chodzi mi o możliwość regulowania ilości tych tygodni. jako przykład podałem 12tkę, tak o.
Michael2318
Napisałeś, że wartość dla każdego tygodnia jest inna, więc jak inaczej chcesz te wartości wpisywać? Skad skrypt niby ma to wiedzieć...? ;/
Co innego gdyby wartości były regularne i zwiekszały się np. o 2, wtedy w pętli wystarczy:
  1. $zmienna = $zmienna+2;

ale jeśli te liczby nie mają ze sobą kompletnie nic wspólnego i nijak sie nie powtrzają to jak Ty sobie wyobrażasz inaczej je uzupełniac niż ręcznie?
mlodygda
proszę, przeczytaj jakie dokładnie zadaje pytanie zamiast odpowiadać na to, co uważasz za pytanie.

napisałem w pierwszym poście:

"Rozpiska wygląda w ten sposób:

1 Tydz: 0,65*max, 0,75*max, 0,85*max
2 Tydz: 0,7*max, 0,8*max, 0,9*max
3 Tydz: 0,75*max, 0,85*max, 0,95*max
4 Tydz(odpoczynek): 0,4*max, 0,5*max, 0,6*max"

Michael2318
nadal nie wiem co się dzieje z tygodniami od 5 do 12, bo podajesz wartości dla tygodnia 1-4, a chcesz pociągnąc do tygodnia 12.
mlodygda
po 4 tygodniach dodaje 3kg i rozpiska zaczyna się od nowa z maxem zwiększonym o 3kg.
Michael2318
Taki kod, dostosujesz pod siebie:
  1. <?php
  2.  
  3. $start = 0.6; // na start obciazenie mnozymy razy 0.6
  4. $obciazenie_max = 50; // maksymalnie ktos dzwiga 50kg
  5. $tygodni = 20; // ile mamy tygodni w planie czy tam cyklu
  6. $tygodnie = 1; // licznik w petli
  7. $tyg = 0; // jw
  8. $x = 1; // jw
  9. $zwiekszaj_co = 4; // co ile tyg. ma mnozyc razy iles tam, obecnie co 4 tygodnie i 4 tydzien to odpoczynek (i tak w kolko)
  10. $mnoznik = 3; // o ile mnozymy wartosc, jesli przekroczylismy umowne 4tyg
  11. $mnoznik_s = 3; // ta sama wartosc co wyzej
  12.  
  13. for ( $i = 0; $i<$tygodni; $i++)
  14. {
  15. $tyg++;
  16. if ( $tyg < $zwiekszaj_co )
  17. {
  18. echo $obciazenie_max*$start.'<br>';
  19. }
  20. else if ( ($tyg / $x) == $zwiekszaj_co )
  21. {
  22. if ( $x >= 2 )
  23. {
  24. $mnoznik = $mnoznik*$mnoznik_s;
  25. }
  26. echo 'odpoczynek<br>';
  27. $x++;
  28. $tygodnie++;
  29. }
  30. else if ( $tyg > $zwiekszaj_co )
  31. {
  32. echo $mnoznik*($obciazenie_max*$start).'<br>';
  33. }
  34. }
  35. ?>


Myślę, że zrozumiesz, dodałem komentarze.

Cytat
Obecny przykład zwróci:
30
30
30
odpoczynek
90
90
90
odpoczynek
270
270
270
odpoczynek
810
810
810
odpoczynek
2430
2430
2430
odpoczynek


ponieważ 50*0.6=30, i 30kg jedziemy przez 3 tygodnie, 4 tydzien mamy odpoczynek, potem zwiększamy sobie obciążenie razy 3, więc lecimy już 90kg, w 8 tygodniu mamy odpoczynek itd.
Wartości oczywiście takie byle jakie, dla przykładu.
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.