Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: "Magiczny kwadrat"
Forum PHP.pl > Forum > PHP
kornel-php
Załóżmy, że:

  1. <?php
  2.  
  3. $suma = 33;
  4.  
  5. $a1 = 9;
  6.  
  7.  
  8. $a1 + $a2 + $a3 = $suma;
  9. $b1 + $b2 + $b3 = $suma;
  10. $c1 + $c2 + $c3 = $suma;
  11. $a1 + $b1 + $c1 = $suma;
  12. $a2 + $b2 + $c2 = $suma;
  13. $a3 + $b3 + $c3 = $suma;
  14.  
  15. ?>


Jak wygenerować i wyświetlić kolejne zmienne (a2, a2, a3...).

Wydawało mi się to proste, ale po skrypt:

  1. <?php
  2. echo ($a1);
  3. echo (' ');
  4. echo ($a2);
  5. echo (' ');
  6. echo ($a3);
  7. echo ('<br><br>');
  8. echo ($b1);
  9. echo (' ');
  10. echo ($b2);
  11. echo (' ');
  12. echo ($b3);
  13. echo ('<br><br>');
  14. echo ($c1);
  15. echo (' ');
  16. echo ($c2);
  17. echo (' ');
  18. echo ($c3);
  19. ?>


wyświetla:

  1. 9 33
  2.  
  3. 33
  4.  
  5. 33 33 33


Proszę o szybką pomoc...
Albitos
A nie latwiej to w html?
  1. <?php
  2. echo '<table><tr>';
  3. echo '<td>'.$a1.'<td>'.$a2.'<td>'.$a3.'</tr>';
  4. echo '<tr><td>'.$b1.'<td>'.$b2.'<td>'.$b3.'</tr>';
  5. echo '<tr><td>'.$c1.'<td>'.$c2.'<td>'.$c3.'</tr></table>';
  6. ?>


W ogole, radze zastosowac tablice i petle foreach().
kornel-php
Cytat
A nie latwiej to w html?


Nie rozumiem, o co Ci chodzi z tym html...

Czekam na jakieś inne pomysły, ewentualnie rozwinięcie pomysłu Albitosa, bo nie wiem, co miał na myśli...
dr_bonzo
Ale co ty chcesz w ogole osiagnac: wygenerowac magiczny kwadrat czy go wypisac?
MagnuM
Omg.. nie wiesz czym jest html ?

Chodziło o wstawienie tych danych do tabel i jej komórek. To jest najbardziej prawidłowy sposób w tym przypadku.
kornel-php
Co to jest html wiem....

Mając sumę liczb w jednej linii i podaną jedną z liczb chce wygenerować kwadrat...
byq_pl
Cytat
Co to jest html wiem....


Nie wystarczy wiedziec co to jest html, trzeba go trochę znać. Nie jestem ekspertem od php ale i tak wiem, ze html to podstawa.

Albitos pisał o tym, żebyś umieścił w tabelce te zmienne coby to lepiej wyglądało.

Szczerze mówiąc pogubiłem się w tym Twoim kwadracie, narysuj może w Paint-cie i pokaż to co chcesz zrobić, będzie łatwiej..

Pozdrawiam
Cysiaczek
Co to za język?
  1. <?php
  2. $a1 + $a2 + $a3 = $suma;
  3. ?>


To nie ma prawa zadziałać i dlatego nie działa. rolleyes.gif
kornel-php
  1. 1 | 8 | 2
  2. 9 | 1 | 1
  3. 1 | 2 | 8


Oto mój magiczny kwadrat (przykładowy)...

Suma liczb w każdym jego wierszu i kolumnie musi być równa (w tym przypadku 11)...

Chcę stworzyć generator, który wyświetli mi taki magiczny kwadrat po podaniu jego pierwszej cyfry oraz sumy liczb w linii...

Proszę nie robić mi wykładów na temat tego co to jest html, bo to wiem, nie zrozumiałem po prostu wypowiedzi kolegi Albitosa...

Czekam na jakiś pomysł skryptu, mi nic nie przychodzi do głowy, a Google zamiast mi pomagać robią jeszcze większy mętlik w głowie...

@Cysiaczek - to powiedz mi jak to mam zapisać...

sad.gif
Cysiaczek
Co do kwadratu magicznego, to się nie wypowiem, ale sam zapis to musisz zrobic dokładnie odwrotnie
  1. <?php
  2. $suma=$a1 + $a2 + $a3; // to jest poprawne przypisanie do $suma sumy zmiennych a1-a3
  3. //teraz możesz sobie sprawdzić, czy pola maja dobrą wartosć
  4.  
  5. if ($suma==11){ //jesli suma tych liczb wynosi 11, to: 
  6. //zrób coś
  7. }
  8. else{ //w przeciwnym wypadku
  9. //zrób coś innego
  10. }
  11. ?>
kornel-php
Dlaczego wpisałeś w kod instrukcję warunkową blinksmiley.gif ?

Jest mi ona nie potrzebna..

Ta zmiana zapisu nie wiele daje... Właściwie ona nic nie daje...

Widzę, że długa noc przede mną.

Pozdrawiam - Kornel
Cysiaczek
No przecież chcesz wygenerowac kwadrat magiczny - jak chcesz sprawdzić, czy jest prawidłowy?
Ja bym na słowo nie uwierzył biggrin.gif
kornel-php
To, czy jest prawdziwy sam bym sprawdził smile.gif

W sumie to liczyć chyba jeszcze umiem smile.gif
Cysiaczek
No to nie rozumiem - chcesz liczyć na piechotę? Jak już bedziesz miał kwadrat wyświetlony na ekranie?
To niby skąd php ma wiedzieć, że liczby, które podstawi pod zmienne będę dobre?

Sam piszesz, że na wejściu dajesz tylko sumę pierwszego wiersza i jedną liczbę ($a1?).
to masz np tak: 11= 3 + x + y -dwie niewiadome w równaniu. Szukamy x oraz y.
php wyliczy sobie np, że te liczy to 3 i 5 - podstawi do równania i sprawdzi. Niestety php znajdzie też możliwość 4 i 4, 1 i 7, 2 i 6. Jest tego sporo.

Czy na pewno chcesz kwadrat generować?
kornel-php
Ale php powinien wyświetlić prawidłowe liczby, gdyż nie mamy doczynienia z pojedyńczym równaniem, a z układem równań...

Poprawność wygenerowanego kwadratu sprawdze licząc w pamięci, ew. na palcach smile.gif
nospor
Cytat
Ale php powinien wyświetlić prawidłowe liczby, gdyż nie mamy doczynienia z pojedyńczym równaniem, a z układem równań...
Ale php samo z siebie nie rozwiązuje ukladow rownan. zeby to wyliczyc musisz uzyc algorytmow do rozwiazywania ukladow rownan. ale to musisz ty sam napisac...

To tak jakbyc napisal przepis na ciasto z truskawami i czekal az samo sie zrobi smile.gif
Cysiaczek
Najpierw ten układ równań trzeba zaprogramować biggrin.gif
Życie nie jes takie proste, ze php zrobi za Ciebie wszystko (podobno kawy nie parzy, ale niedługo wersja 6.0 więc kto wie... ) To tak, jakbyś kupił puzzle, wysypał i został Harry Potterem - "Puzzzllooo" i ułożone tongue.gif

Niestety musisz rozwiązać sobie to na kartce, a nastepnie przenieść do komputera w postaci kodu php, który się wykona i przedstawi wyniki.
dr_bonzo
Mozna tez brute force, przeciez to tylko 7! = 5040 permutacji (1 pozycja znana, a w srodku zawsze chyba musi byc 5)
Cysiaczek
Może to Ci trochę pomoże.

http://pl.wikipedia.org/wiki/Kwadrat_magic...28matematyka%29
kornel-php
To zabieram się za przekształcanie układów równań... sad.gif

Jeszcze jedno pytanie: nie natknął się ktoś gdzieś na gotowy skrypt lub chociaż jakiś opis jak to zrobić?

Teraz to już w ogóle nic nie wiem... sad.gif
Alkagar
Witam,
Sory za kod srednio czytelny, szybki etc. ale pisalem przed wyjsciem do pracy rano :-p.

  1. <?php
  2. $l[11] = 5;
  3. do{
  4. $max = 10 - $l[11]; //pomocnicza;
  5. $l[12] = rand(1, $max);
  6. $l[13] = 11 - $l[11] - $l[12];
  7. $l[21] = rand(1, $max);
  8. $l[31] = 11 - $l[11] - $l[21];
  9. if($l[12] > $l[31])
  10. {
  11. $max = 10 - $l[12];
  12. }else
  13. {
  14. $max = 10 - $l[31];
  15. }
  16. $l[32] = rand(1,$max);
  17. $l[33] = 11 - $l[31] - $l[32];
  18.  
  19. $l[22] = 11 - $l[12] - $l[32];
  20. $l[23] = 11 - $l[13] - $l[33];
  21.  
  22.  
  23. }while(
  24. $l[11] <= 0 ||
  25. $l[12] <= 0 ||
  26. $l[13] <= 0 ||
  27. $l[21] <= 0 ||
  28. $l[22] <= 0 ||
  29. $l[23] <= 0 ||
  30. $l[31] <= 0 ||
  31. $l[32] <= 0 ||
  32. $l[33] <= 0 
  33. );
  34.  
  35.  
  36.  
  37. echo($l[11].' '.$l[12].' '.$l[13].'<br>');
  38. echo($l[21].' '.$l[22].' '.$l[23].'<br>');
  39. echo($l[31].' '.$l[32].' '.$l[33].'<br>');
  40.  
  41. ?>


Mam nadzieje ze o coś takiego chodziło, działa dla pierwszej wprowadzonej liczby(lewy gorny rog) i dla dowolnej sumy liczb w rzedzie. Żeby zmienić sume pozmieniaj po prostu 11 na ta liczbę co chcesz mieć(a tam gdzie sa 10 na o jeden mniejsza, albo najlepiej wprowadz sobie zmienna jakąś zamiast tego).

P.S.
Potraktuj ten Kod jako wskazowke raczej bo jest pisany na szybko i można to zrobić duzo lepiej :-P.

Pozdrawiam,
Alk
kornel-php
Dzięki, zaraz to rozbiorę na częsci pierwsze i coś z tym pokombinuje smile.gif

Jakby ktoś kiedyś kombinował coś podobnego to pełny kodzik:

  1. <?php
  2.  
  3. $liczba = $_POST['liczba'];
  4. $suma = $_POST['suma'];
  5.  
  6.  
  7. $l[11] = $liczba;
  8. do{
  9. $max = 10 - $l[11];
  10. $l[12] = rand(1, $max);
  11. $l[13] = $suma - $l[11] - $l[12];
  12. $l[21] = rand(1, $max);
  13. $l[31] = $suma - $l[11] - $l[21];
  14. if($l[12] > $l[31])
  15. {
  16. $max = 10 - $l[12];
  17. }else
  18. {
  19. $max = 10 - $l[31];
  20. }
  21. $l[32] = rand(1,$max);
  22. $l[33] = $suma - $l[31] - $l[32];
  23.  
  24. $l[22] = $suma - $l[12] - $l[32];
  25. $l[23] = $suma - $l[13] - $l[33];
  26.  
  27.  
  28. }while(
  29. $l[11] <= 0 ||
  30. $l[12] <= 0 ||
  31. $l[13] <= 0 ||
  32. $l[21] <= 0 ||
  33. $l[22] <= 0 ||
  34. $l[23] <= 0 ||
  35. $l[31] <= 0 ||
  36. $l[32] <= 0 ||
  37. $l[33] <= 0
  38. );
  39.  
  40.  
  41. echo ('<table><tr>');
  42. echo ('<td>'.$1[11].'<td>'.$1[12].'<td>'.$1[13].'</tr>');
  43. echo ('<tr><td>'.$1[21].'<td>'.$1[22].'<td>'.$1[23].'</tr>');
  44. echo ('<tr><td>'.$1[31].'<td>'.$1[32].'<td>'.$1[24].'</tr></table>');
  45.  
  46. ?>


Mało czytelny, ale działa bez zarzutu...

Dzięki Alkagar - wisze Ci duże piwo smile.gif
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.