PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (3): [1] 2 3 »

> Найдено сообщений: 44
Эдвард Отправлено: 09 Октября, 2014 - 10:50:31 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
Возвращаясь к первоначальной задаче ( http://med-75[dot]hol[dot]es/4/1.php ), решил её следующим способом (благодаря подсказке Sail):

CODE (javascript):
скопировать код в буфер обмена
  1. function calculator(form) {
  2.  
  3. var k = new Array(form.k1.value, form.k2.value, form.k3.value);
  4. var a = new Array("", "", "");
  5. var b = new Array("", "", "");
  6. var c = new Array("", "", "");
  7.  
  8. for(var i = 0; i < k.length; i++) {
  9.         switch(k[i]) {
  10.             case "Игра 1 " : a[i]=1 , b[i]=1 , c[i]=""; break;
  11.             case "Игра 2 " : a[i]=1 , b[i]="" , c[i]=1; break;
  12.             case "Игра 3 " : a[i]="" , b[i]=1 , c[i]=1; break;
  13.             case "Резерв " : a[i]=0 , b[i]=0 , c[i]=0; break;
  14.             default:  a[i]="" , b[i]="" , c[i]="";
  15.         }
  16.     }
  17.  
  18. var a4 = (a[0]*1)+(a[1]*1)+(a[2]*1);
  19. var b4 = (b[0]*1)+(b[1]*1)+(b[2]*1);
  20. var c4 = (c[0]*1)+(c[1]*1)+(c[2]*1);
  21.  
  22.    if (a[1] == 1){a[1] = 1+a[0]; }
  23.    if (a[2] == 1){a[2] = 1+(Math.ceil(a[0]/100)+Math.ceil(a[1]/100)); }
  24.  
  25.    if (b[1] == 1){b[1] = 1+b[0]; }
  26.    if (b[2] == 1){b[2] = 1+(Math.ceil(b[0]/100)+Math.ceil(b[1]/100)); }
  27.  
  28.    if (c[1] == 1){c[1] = 1+c[0]; }
  29.    if (c[2] == 1){c[2] = 1+(Math.ceil(c[0]/100)+Math.ceil(c[1]/100)); }
  30.  
  31.    if (a[0] == "0"){a[0] = "P"; }
  32.    if (a[1] == "0"){a[1] = "P"; }
  33.    if (a[2] == "0"){a[2] = "P"; }
  34.  
  35.    if (b[0] == "0"){b[0] = "P"; }
  36.    if (b[1] == "0"){b[1] = "P"; }
  37.    if (b[2] == "0"){b[2] = "P"; }
  38.  
  39.    if (c[0] == "0"){c[0] = "P"; }
  40.    if (c[1] == "0"){c[1] = "P"; }
  41.    if (c[2] == "0"){c[2] = "P"; }
  42.  
  43. form.a1.value = a[0];
  44. form.a2.value = a[1];
  45. form.a3.value = a[2];
  46. form.a4.value = a4;
  47.  
  48. form.b1.value = b[0];
  49. form.b2.value = b[1];
  50. form.b3.value = b[2];
  51. form.b4.value = b4;
  52.  
  53. form.c1.value = c[0];
  54. form.c2.value = c[1];
  55. form.c3.value = c[2];
  56. form.c4.value = c4;
  57. }


Наверное, можно ещё более компактно сделать, но там, вероятно, пришлось бы прибегнуть к двумерным массивам, что для меня пока недосягаемо.
Эдвард Отправлено: 08 Октября, 2014 - 16:45:38 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
Sail пишет:
Потому что "по условию задачи" они одинаковой длинны (с одинаковым количеством элементов).
К тому-же в данном случае можно на этапе определения массива е заполнять его значением "form.e1.value + form.f1.value"


Ясно. Спасибо. Теперь ломаю голову над тем, как менять все значения в каждом последующем столбце по заданному алгоритму (например, для значений первого столбца = +10, второго = +20, третьего = +30). Пока ничего вразумительного не приходит на ум.
Эдвард Отправлено: 08 Октября, 2014 - 16:29:08 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
Попробовал немного усложнить задачу, добавив ещё один ряд селектов с условиями: http://med-75[dot]hol[dot]es/1/9[dot]html :

CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <meta charset="utf-8">
  3.  
  4. <head>
  5. <script type="text/javascript">
  6.  
  7. function calculator(form) {
  8.  
  9.     var e = new Array(form.e1.value, form.e2.value, form.e3.value);
  10.     var f = new Array(form.f1.value, form.f2.value, form.f3.value);
  11.  
  12.     var a = new Array("", "", "");
  13.     var b = new Array("", "", "");
  14.     var c = new Array("", "", "");
  15.  
  16.     for(var i = 0; i < e.length; i++) {
  17. var x = e[i]+f[i];
  18.        switch(x) {
  19.            case "ab1" : a[i]=1 , b[i]=1 , c[i]=""; break;
  20.            case "ab2" : a[i]=2 , b[i]=2 , c[i]=""; break;
  21.            case "ab3" : a[i]=3 , b[i]=3 , c[i]=""; break;
  22.  
  23.            case "ac1" : a[i]=1 , b[i]="" , c[i]=1; break;
  24.            case "ac2" : a[i]=2 , b[i]="" , c[i]=2; break;
  25.            case "ac3" : a[i]=3 , b[i]="" , c[i]=3; break;
  26.  
  27.            case "bc1" : a[i]="" , b[i]=1 , c[i]=1; break;
  28.            case "bc2" : a[i]="" , b[i]=2 , c[i]=2; break;
  29.            case "bc3" : a[i]="" , b[i]=3 , c[i]=3; break;
  30.  
  31.            default:  a[i]="" , b[i]="" , c[i]="";
  32.        }
  33.    }
  34.  
  35.    form.a1.value = a[0];
  36.    form.a2.value = a[1];
  37.    form.a3.value = a[2];
  38.  
  39.    form.b1.value = b[0];
  40.    form.b2.value = b[1];
  41.    form.b3.value = b[2];
  42.  
  43.    form.c1.value = c[0];
  44.    form.c2.value = c[1];
  45.    form.c3.value = c[2];
  46. }
  47.  
  48. </script>
  49. </head>
  50.  
  51. <style type="text/css">
  52.     .s1 {
  53.       text-align: center;
  54.       font-weight: bold;
  55.       width: 100px;
  56.     }
  57. </style>
  58.  
  59. <form name="f1">
  60.  
  61. <select name="e1" class="s1">
  62.  <option>ab</option>
  63.  <option>ac</option>
  64.  <option>bc</option>
  65. </select>
  66. <select name="e2" class="s1">
  67.  <option>ab</option>
  68.  <option>ac</option>
  69.  <option>bc</option>
  70. </select>
  71. <select name="e3" class="s1">
  72.  <option>ab</option>
  73.  <option>ac</option>
  74.  <option>bc</option>
  75.  </select>
  76.  
  77. <br>
  78.  
  79. <select name="f1" class="s1">
  80.  <option>1</option>
  81.  <option>2</option>
  82.  <option>3</option>
  83. </select>
  84. <select name="f2" class="s1">
  85.  <option>1</option>
  86.  <option>2</option>
  87.  <option>3</option>
  88. </select>
  89. <select name="f3" class="s1">
  90.  <option>1</option>
  91.  <option>2</option>
  92.  <option>3</option>
  93.  </select>
  94.  
  95. <br>
  96.  
  97. <input name="a1" type="text" class="s1"> <input name="a2" type="text" class="s1"> <input name="a3" type="text" class="s1">
  98.  
  99. <br>
  100.  
  101. <input name="b1" type="text" class="s1"> <input name="b2" type="text" class="s1"> <input name="b3" type="text" class="s1">
  102.  
  103. <br>
  104.  
  105. <input name="c1" type="text" class="s1"> <input name="c2" type="text" class="s1"> <input name="c3" type="text" class="s1">
  106.  
  107. <br><br>
  108.  
  109. <input type="button" value="Калькуляция" onClick="calculator(this.form)">
  110. <input type="reset" value="Сброс">
  111.  
  112. </form>
  113. </html>


Работает, как надо. Но возможно, связку цикл + switch записал не совсем грамотно (по крайней мере, не понятно, почему e.length распространяется также и на f).
Эдвард Отправлено: 08 Октября, 2014 - 11:24:02 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
[quote=Sail][/quote]

Это как раз то, что мне нужно. Огромное спасибо!
Эдвард Отправлено: 08 Октября, 2014 - 09:45:47 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
IllusionMH пишет:
только вы знаете что ж там за логика должна быть реализована


В задаче с игроками ничего сложного нет. Вся суть – в заполнении обычного графика средствами javascript. Но чтобы не напрягать людей вниканием в логику и чтением объёмного кода, специально создал упрощённую задачку с тремя условиями заполнения графика (ab, ac, bc). Единственное, что там требуется – это вместо трёх switch сделать один. К сожалению, как ни встраивал предложенную Вами конструкцию, ничего не работает. Неужели не найдётся более простого цикла для этой задачи: http://forum.php.su/topic.php?fo...12618#1412612618 ?..
Эдвард Отправлено: 07 Октября, 2014 - 13:56:57 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
IllusionMH пишет:
Эдвард, и в чем смысл верхнего ряда с селектами?


Они задают условия для ячеек столбца. На данном принципе построены графики и расписания.

IllusionMH пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. var a = [];var inputs = document.querySelectorAll('.r1');var n = inputs.length;var i; for(i = 0; i< n; i += 1) {  a[i] = parseInt(inputs[i].value, 10) || 0;} console.log(a);


Честно говоря, не понял, как эта конструкция должна работать с оператором switch и как выводить данные на экран.
Эдвард Отправлено: 06 Октября, 2014 - 20:55:45 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
IllusionMH пишет:
Эдвард, ну так из 1,2,3 всегда будут три единицы.

Эдвард, i - индекс,
- элемент массива. В данном случае значения 1,2,3


Ок. Учитывая, что значения переменных могут меняться (в т. ч. отсутствовать вовсе), как сделать работающими массивы без значений?

Такая конструкция тоже не работала:

CODE (javascript):
скопировать код в буфер обмена
  1. var d = new Array();
  2. var a = new Array();
  3. var b = new Array();
  4. var c = new Array();

(Добавление)
IllusionMH пишет:
На всякий случай уточню. Рассматриваю только код из поста http://forum.php.su/topic.php?fo...48069#1412248069


Так и понял. Но на примере упрощённой задачи ( http://med-75[dot]hol[dot]es/1/8[dot]html ) разобраться, наверное, было бы легче.
Эдвард Отправлено: 06 Октября, 2014 - 20:37:20 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
IllusionMH пишет:
Огругление вверх Math.ceil для любого числа в диапазоне 0 < x <=1 выдаст 1


Так в том и заключается задумка счётчика, чтобы любое число (кроме 0) было преобразовано в 1.

IllusionMH пишет:
в примере кода элементы массивов принимают только 3 значения: 1, 2, 3. Какое из этих значений равно нулю?


Это ведь не буквальные значения, а значения индексов переменных.
Эдвард Отправлено: 06 Октября, 2014 - 20:21:43 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
IllusionMH пишет:
Эдвард, а чему равно Math.ceil(1/100)? Math.ceil(2/100)? Math.ceil(3/100)? И почему результат сложения не должен равнятся трем?


В том-то и вопрос, почему переменные a, b, c не участвуют в математической операции. Сколько не пытался добиться ответа по ошибке, пока только издевательское молчание. Недовольство, огорчение

IllusionMH пишет:
Как условие if должно выполниться, если у вас в массивах значения 1,2,3 не равные 0?


Наоборот: если значение переменной = 0, в окне должна проявиться буква «Р». Без использования массивов данная конструкция работает без проблем: http://med-75[dot]hol[dot]es/1/7[dot]html .
Эдвард Отправлено: 06 Октября, 2014 - 19:23:38 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
tato пишет:
Должно прийти озарение


Озарение так и не пришло, хотя перелопатил кучу «учебников» и провёл массу экспериментов. Лишний раз убедился, что доступная для понимания информация по массивам и циклам в Сети попросту отсутствует. Скудные и невнятные уроки/примеры всюду практически одни и те же – словно скопированы из одного убогого источника, где изначально не ставилась цель – внести ясность и сделать уроки максимально доступными для новичков. Более того, закралось подозрение, что сама по себе тема массивов и циклов сложна и для некоторых программистов (хотя оные стесняются в этом признаться).

dcc0 пишет:
Скрипт довольно объемный, чтобы его доработать нужно вникать, а не хочется


Максимально упрощённый вариант моей задачи: http://med-75[dot]hol[dot]es/1/8[dot]html :

CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <meta charset="utf-8">
  3.  
  4. <head>
  5. <script type="text/javascript">
  6.  
  7. function calculator(form) {
  8.  
  9. var e1 = form.e1.value;
  10. var e2 = form.e2.value;
  11. var e3 = form.e3.value;
  12.  
  13. switch (e1)
  14. {      
  15. case "ab" : a1=1 , b1=1 , c1=""; break;
  16. case "ac" : a1=1 , b1="" , c1=1; break;
  17. case "bc" : a1="" , b1=1 , c1=1; break;
  18. default:  a1="" , b1="" , c1="";
  19. }
  20.  
  21. switch (e2)
  22. {      
  23. case "ab" : a2=1 , b2=1 , c2=""; break;
  24. case "ac" : a2=1 , b2="" , c2=1; break;
  25. case "bc" : a2="" , b2=1 , c2=1; break;
  26. default:  a2="" , b2="" , c2="";
  27. }
  28.  
  29. switch (e3)
  30. {      
  31. case "ab" : a3=1 , b3=1 , c3=""; break;
  32. case "ac" : a3=1 , b3="" , c3=1; break;
  33. case "bc" : a3="" , b3=1 , c3=1; break;
  34. default:  a3="" , b3="" , c3="";
  35. }
  36.  
  37. form.a1.value = a1;
  38. form.a2.value = a2;
  39. form.a3.value = a3;
  40.  
  41. form.b1.value = b1;
  42. form.b2.value = b2;
  43. form.b3.value = b3;
  44.  
  45. form.c1.value = c1;
  46. form.c2.value = c2;
  47. form.c3.value = c3;
  48. }
  49.  
  50. </script>
  51. </head>
  52.  
  53. <style type="text/css">
  54.     .s1 {
  55.       text-align: center;
  56.       font-weight: bold;
  57.       width: 100px;
  58.     }
  59. </style>
  60.  
  61. <form name="f1">
  62.  
  63. <select name="e1" class="s1">
  64.  <option>ab</option>
  65.  <option>ac</option>
  66.  <option>bc</option>
  67. </select>
  68. <select name="e2" class="s1">
  69.  <option>ab</option>
  70.  <option>ac</option>
  71.  <option>bc</option>
  72. </select>
  73. <select name="e3" class="s1">
  74.  <option>ab</option>
  75.  <option>ac</option>
  76.  <option>bc</option>
  77.  </select>
  78.  
  79. <br>
  80.  
  81. <input name="a1" type="text" class="s1"> <input name="a2" type="text" class="s1"> <input name="a3" type="text" class="s1">
  82.  
  83. <br>
  84.  
  85. <input name="b1" type="text" class="s1"> <input name="b2" type="text" class="s1"> <input name="b3" type="text" class="s1">
  86.  
  87. <br>
  88.  
  89. <input name="c1" type="text" class="s1"> <input name="c2" type="text" class="s1"> <input name="c3" type="text" class="s1">
  90.  
  91. <br><br>
  92.  
  93. <input type="button" value="Калькуляция" onClick="calculator(this.form)">
  94. <input type="reset" value="Сброс">
  95.  
  96. </form>
  97. </html>


В идеале вместо трёх switch-ей должен быть один – например, такой:

CODE (javascript):
скопировать код в буфер обмена
  1. switch (e[i])
  2. {      
  3. case "ab" : a[i]=1 , b[i]=1 , c[i]=""; break;
  4. case "ac" : a[i]=1 , b[i]="" , c[i]=1; break;
  5. case "bc" : a[i]="" , b[i]=1 , c[i]=1; break;
  6. default:  a[i]="" , b[i]="" , c[i]="";
  7. }


Но опять же встаёт вопрос, как грамотно заполнить массивы для переменных e, a, b, c и создать для них соответствующий цикл.
Эдвард Отправлено: 02 Октября, 2014 - 14:07:49 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
Ещё одна попытка:

CODE (javascript):
скопировать код в буфер обмена
  1. var d = [1, 2, 3];
  2.  
  3. var a = [1, 2, 3];
  4. var b = [1, 2, 3];
  5. var c = [1, 2, 3];
  6.  
  7. for (i = 0; i <= 3; i++){
  8.         d[i] = Math.ceil(a[i]/100)+Math.ceil(b[i]/100)+Math.ceil(c[i]/100);
  9.  
  10.    if (a[i] == 0){a[i] = "P"; }
  11.    if (b[i] == 0){b[i] = "P"; }
  12.    if (c[i] == 0){c[i] = "P"; }
  13. }
  14.  
  15. form.total10.value = d[0];
  16. form.total11.value = d[1];
  17. form.total12.value = d[2];



В колонке «Итого игр» появились цифры, но при любых комбинациях – только «тройки». Конструкция «if» вообще не работает. Опять что-то упустил. Недовольство, огорчение
Эдвард Отправлено: 02 Октября, 2014 - 13:38:40 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
esterio пишет:
смотрите в контексте JS
CODE (javascript):
скопировать код в буфер обмена
  1. var arr = [1, 2, 3, 4, 5, 6];
  2. var i = 0;
  3. var n = arr.length;
  4. for(i = 0; i < n; i++){
  5.     alert(arr[i]);
  6. }


В Сети уже видел уйму подобных примеров. Только вот какое отношение они имеют к моей задаче (особенно alert)?

Многого не прошу: объясните хотя бы, как исправить ошибку с вводом массивов a, b и c. Если разберусь в этом, дальше проще должно быть.
Эдвард Отправлено: 02 Октября, 2014 - 10:52:07 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
dcc0 пишет:
есть смысл поискать специализированные форумы JS, вероятно, найдутся люди, которые тренировки ради перепишут скрипт


На специализированном форуме тоже пока глухо: http://javascript[dot]ru/forum/dom-w[dot][dot][dot]stit-skript[dot]html .
(Добавление)
esterio пишет:
вы ленитесь сами поискать по ключевых словах (массивы, циклы) в гугле и не особо проявляете интерес к учебе программирования


Сам не из ленивых. С поисковыми системами работаю постоянно. Но всё равно пока не въезжаю в синтаксис массивов и циклов. Ещё раз повторю: нужны близкие по смыслу примеры – и не просто код, а демонстрация работы.
Эдвард Отправлено: 30 Сентября, 2014 - 21:35:39 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
dcc0 пишет:
но не у всех получается сразу въехать в массивы


Это как раз про меня. Без близких по смыслу примеров, на голой теории вряд ли получится разобраться.

dcc0 пишет:
я бы посоветовал отложить основную задачу на некоторое время и прочитать


Отклад не идёт в лад. Раз никто не хочет помогать, придётся пока работать на switch-ах, хоть это и убьёт уйму времени и, возможно, скажется на быстродействии скрипта. Недовольство, огорчение
(Добавление)
esterio пишет:
а еще мета тег в начале


Это PHP-часть. По идее, данный код должен быть скрыт.
Эдвард Отправлено: 30 Сентября, 2014 - 13:59:19 • Тема: Помогите упростить скрипт • Форум: JavaScript & VBScript

Ответов: 43
Просмотров: 22009
dcc0 пишет:
Чтобы заниматься отладкой чужого скрипта, нужно видеть весь код


Весь код сюда не перенесёшь – он слишком громоздкий. Но его можно просмотреть непосредственно на самой странице: http://med-75[dot]hol[dot]es/4/1.php .

dcc0 пишет:
Я почему-то думаю, что с циклом так:


IllusionMH пишет:
Эдвард, массивы вы сооздали, а заполнять их кто будет?


С массивом и циклом для переменной d вроде понятно, но как заполнить массивы для переменных a, b и c, не понимаю.

Страниц (3): [1] 2 3 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB