Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Trójkąt pascala
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
karrts
Witam.
Mam za zadanie domowe zrobić trójkąt pascala w JS.
Głowię się już kilka godzin i nic nie potrafię wymyślić.
Miałby ktoś jakiś pomysł jakby to zrobić?
vokiel
Ale narysować?

1. Canvas
2. Generowanie HTML w JS + CSS
karrts
Polecenie mam takie

7. Wygeneruj trójkąt Pascala dla n wierszy. Liczbę wierszy podaje użytkownik.
rad11
http://rosettacode.org/wiki/Pascal%27s_triangle#JavaScript

Zakladka javascript.

  1. <input type="text" id="rows"/>
  2. <input type="submit" id="submit" onclick="createPascalTriangle(document.getElementById('rows').value)"/>
  3. <script type="text/javascript">
  4. // Pascal's triangle object
  5. function pascalTriangle (rows) {
  6.  
  7. // Number of rows the triangle contains
  8. this.rows = rows;
  9.  
  10. // The 2D array holding the rows of the triangle
  11. this.triangle = new Array();
  12. for (var r = 0; r < rows; r++) {
  13. this.triangle[r] = new Array();
  14. for (var i = 0; i <= r; i++) {
  15. if (i == 0 || i == r)
  16. this.triangle[r][i] = 1;
  17. else
  18. this.triangle[r][i] = this.triangle[r-1][i-1]+this.triangle[r-1][i];
  19. }
  20. }
  21.  
  22. // Method to print the triangle
  23. this.print = function(base) {
  24. if (!base)
  25. base = 10;
  26.  
  27. // Private method to calculate digits in number
  28. var digits = function(n,b) {
  29. var d = 0;
  30. while (n >= 1) {
  31. d++;
  32. n /= b;
  33. }
  34. return d;
  35. }
  36.  
  37. // Calculate max spaces needed
  38. var spacing = digits(this.triangle[this.rows-1][Math.round(this.rows/2)],base);
  39.  
  40. // Private method to add spacing between numbers
  41. var insertSpaces = function(s) {
  42. var buf = "";
  43. while (s > 0) {
  44. s--;
  45. buf += " ";
  46. }
  47. return buf;
  48. }
  49.  
  50. // Print the triangle line by line
  51. for (var r = 0; r < this.triangle.length; r++) {
  52. var l = "";
  53. for (var s = 0; s < Math.round(this.rows-1-r); s++) {
  54. l += insertSpaces(spacing);
  55. }
  56. for (var i = 0; i < this.triangle[r].length; i++) {
  57. if (i != 0)
  58. l += insertSpaces(spacing-Math.ceil(digits(this.triangle[r][i],base)/2));
  59. l += this.triangle[r][i].toString(base);
  60. if (i < this.triangle[r].length-1)
  61. l += insertSpaces(spacing-Math.floor(digits(this.triangle[r][i],base)/2));
  62. }
  63. print(l);
  64. }
  65. }
  66.  
  67. }
  68.  
  69. function createPascalTriangle(rows){
  70. rows = parseInt(rows)+1;
  71. var tri = new pascalTriangle(rows);
  72.  
  73. for(i=0;i<tri.triangle.length;i++){
  74. document.write('<br>'+tri.triangle[i]+'<br/>');
  75. }
  76. }
  77. </script>
  78.  


Jezeli chcesz aby to byl trójkat to zmien:

  1. document.write('<br>'+tri.triangle[i]+'<br/>');

na
  1. document.write('<div style="text-align:center;">'+tri.triangle[i]+'</div>');
karrts
Ale to chodzi o to, że wy w szkole dopiero uczyliśmy się:
Prompt,
Pętli (While, Do While, for, if)
I Tablicy,

Czy za pomocą tego jest możliwe wykonanie takiego czegoś?
rad11
To skroc kod tak mam nadzieje ze to Ci wystarczy:
  1. <button onclick="myFunction()">Kliknij</button>
  2. <script type="text/javascript">
  3. //funkcja rysujaca trojkat
  4. function pascalTriangle (rows) {
  5.  
  6. this.rows = rows; // przypisanie parametru do jako obiekt
  7.  
  8. this.triangle = new Array(); //tablica
  9.  
  10. for (var r = 0; r < rows; r++) { //rozpoczynamy petle dopoki r = rows
  11. this.triangle[r] = new Array(); //tworzymy tablice o indeksie r
  12. for (var i = 0; i <= r; i++) { //rozpoczynamy petle dopoki i <= r
  13. if (i == 0 || i == r) // jezeli i = 0 lub i = r
  14. this.triangle[r][i] = 1; // ustawiamy pierwszy rzad na 1
  15. else
  16. this.triangle[r][i] = this.triangle[r-1][i-1]+this.triangle[r-1][i]; //tutaj zachodzi cala operacja tworzenia trojkata
  17. }
  18. }
  19.  
  20. for(i=0;i<this.triangle.length;i++){//rozpoczynamy petle dopoki r < dlugosci tablicy triangle
  21. document.write('<div style="text-align:center;">'+this.triangle[i]+'<div/>');//centrujemy aby uzyskac trojkat
  22. }
  23.  
  24. }
  25. //funkcja pokazujaca prompt i przekazujaca parametr do funkcji rysujacej trojkat
  26. function myFunction() {
  27. var row = prompt("Podaj ilosc rzędów");
  28. if (row != null) {
  29. pascalTriangle(parseInt(row)+1);
  30. }
  31. }
  32.  
  33. </script>
  34.  
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.