[JS] Loops - All homework tasks


22

Реших да си няправя един темплейт за задачките, ако ви харесва го използвайте и променяйте свободно, ако не - приемам критики и препоръки :).

repository
 

1.Write a script that prints all the numbers from 1 to N.
demo
code

2.Write a script that prints all the numbers from 1 to N, that are not divisible by 3 and 7 at the same time.

demo
code

3.Write a script that finds the max and min number from a sequence of numbers.

demo
code

4.Write a script that finds the lexicographically smallest and largest property in document, window and navigator objects.

demo
code




Отговори



4
И аз на четвърта само малко запънах. Тоя forin цикъл малко ме обърква, като го пуснеш на обикновен цикъл ти връща последователно индексите, пък като го пуснеш на document или window, връша property-тата им... :)

от tankovski (2828 точки)


0
For цикъла се използва за обхождане елементите на масив, а for/in цикъла се използва за обхождане пропъртитата на обект.



1
На трета задача могат ли да се използват вградени фунции - напр. Math.max.apply / Math.min.apply? Аз така я написах и стана толкова кратка, че се зачудих дали това е идеята :)

от vanina_nenova (327 точки)


0
аз я направих по два начина, с Math.min.apply (стана наистина много кратка) и с for-че което е по-бавно и по-тромаво, но все пак върши работа ...

от dam_dam (578 точки)

0
може и да сортираш масива и да вземеш първия елемент и втория, но масивите са в следващата лекция




2

Моето тешение на зад.1 е тук:

https://github.com/stoyanovalexander/TheRepositoryOfAlexanderStoyanov/blob/master/03.Loops/02.ConditionalStatements/OperatorsAndExpressions/1.PrintNumbers1ToN.html

Просто с един FOR цикъл принтирам числата от 1 до N. Твоето решение за мойте моменти знания идва прекалено сложно. И тук не хвърлям камъни в твоята градина те са си в моята. 


от alexander (147 точки)


0
Колега имате едит бутон. Може да съберете решенията си в един пост.

от Teodor92 (13062 точки)


1

Колеги отново request за javascript help Идеята ми е с един бутон add number да се взема число да се бута в масив и да се обработва:

Ето ми го  частта от ХТМЛ-а:

 

<div> <strong>Task3</strong>
<p>Write a script that finds the max and min number from a sequence of numbers</p>
<form name="Task3"> Input number:
<input type=text name="item3" id="myTextArea3"> <input type="button" value="Add number" id="Button3"> <input type="button" value="Result" id="Button33"> 
</form> <p id="demo3"></p>
</div>
 
Ето и javascripta:
var myNumbers = new Array();
var button3 = document.getElementById('Button3');
button3.addEventListener('click',function (e) {
  var number3 = parseInt(document.getElementById('myTextArea3').value,[10]);
  myNumbers.push(number3);
},false);
var button33 = document.getElementById('Button33');
button33.addEventListener('click',function(e) {
var maxNumber=""; var minNumber="";
  for (i=0;i<myNumbers.length;i++)  {
var temp = myNumbers[i];
 if (temp > maxNumber)               {
                    maxNumber = temp;                 }
                else if (temp < minNumber)                 {
                    minNumber = temp;                }
               else {}         }         }
maxNumber = "The max number in the inputed sequence is:" + maxNumber +"<br>";
minNumber = "The min number in the inputed sequence is:" + minNumber +"<br>";
document.getElementById("demo3").innerHTML=maxNumber;
document.getElementById("demo3").innerHTML=minNumber;
     }
  }
 },false);

Предварително благодаря!

 

 




0
Здравей, много готина идея за решение, още не я бях почвала тази задача и сигурно ще ти открадна идеята :):) Ето тук съм ти преправила кода http://pastebin.com/5SkBG1yp , за да сдобие някакъв работещ вид. Честно да ти кажа ми беше много трудно да се ориентирам в това което си писал. Първо - Всички тези имена button3 button33 и т.н са доста объркващи. Второ - предпочитам да работя с готовите event-handler-и , а не да си пиша свои - поне в тези задачки досега. Има си чудесна функция за тази цел - onclick(). Трето - document.getElementById("demo3").innerHTML=maxNumber; document.getElementById("demo3").innerHTML=minNumber; втория ред презаписва резултатът от първия! Едно решение е да използваш два параграфа за резултата. Имаше и други неща които ми направиха впечатление, ако се сетя ще ги допиша :)
p.s - пак е свързано с имената на елементите :) - myTextArea3 - доста е подвеждащо, защото в html има такъв елемент textarea , а ти в контекста имаш предвид input type=text

от pdrenovska (2196 точки)

0
мерси много - това решение се сетих докато четях w3school А бутоните са номерирани така просто защото всичко ми е на 1 страница - тоест бутон 1 е таск 1 и т.н. (33 значи втори бутон на 3ти таск, 333 ще е 3ти бутон на 3ти таск и т.н.). Сега е мои ред да по-копирам и да видя дали ще проработи




1
var n = 43; for (var i = 0; i <= n; i++) { if ((i%3!=0)&&(i%7!=0)) { jsConsole.write(i+" "); } } Много ме е срам, но съм длъжен да питам . Защо не ми работи горният код? Искам да не ми печати само числата, които се делят едновременно на 3 и 7. В този диапазон те са 21 и 42. Обаче при мене "изчезват и 3 , 7, 14 ... Определено проверката не ми работи коректно, но аз така я знам от Сишарпа и не мога да измисля друго. Моля някой по-наблюдателен да ме светне, защото явно съм зациклил....;)))

от ilv323 (803 точки)


0
Значи, ето така ще сработи if ((i % 3 != 0) || (i % 7 != 0)), неговото противоположно, т.е числата които няма да ти печата, е if ((i % 3 == 0) && (i % 7 == 0)) Числото 3 например, ти изчезва, защото се дели на 7 с остатък - изпълнява втората част на if-а, но не се дели на 3 с остатък - не изпълнява първата част на условието ти

от pdrenovska (2196 точки)

0
Това, че съм изключително тъп си го зная, но защо непрекъснато го афиширам?!? Дреновска ти редовно ми "наливаш акъл" и ти благодаря. Сега разбирам, защо доста хора във форума ми пишат в женски род....явно им мязам на естествена блондинка..;)))! Още не са измислили компютри, по които да се предава миризмата на мъжки крака.....Айде чао

от ilv323 (803 точки)


1

@bobbykolev:

Малка неточност - на трета задача си написал да се въвеждат със запетайка разделени, а ги разделяш по интервал.

Ето моето демо и код


от shristoff (747 точки)


0
"Enter some numbers separated by spaces."

от bobbykolev (4168 точки)

0
странно защо ми се видя, че пише commas, явно съм се заблудил...

от shristoff (747 точки)



1

Само да отбележа, че във втора задача се иска да не се принтират числата, които едноверемнно се делят на 3 и 7, а при теб не се принтират числата които се делят на 3 или 7. 

Условието ти трябва да е следното, за да работи : 

if((i%3!=0) || (i%7!=0))


от Charity (95 точки)


0
Или просто проверяваме дали числото се дели без остатък на 21 :)

от Teodor92 (13062 точки)

0
да, по-лесния вариант :)

от Charity (95 точки)



2
Някой има ли идея как да зачиствам конзолата на Дончо преди всяко отечатване, за да не ми се трупат резултатите един под друг? Програмно, не с F5...

от AntonPetrov (654 точки)


0
ето така май се получи
естествено командата може да си я извикваш където поискаш - например преди всяко печатане

от pdrenovska (2196 точки)

0
Благодаря за бързия отговор, сега ще пробвам. Edit: Нещо не става. След като използвам Clear(), вече нищо не се показва на конзолата...

от AntonPetrov (654 точки)



1

Аз имам следния проблем - направил съм в html-a отделни бутони за всяка задача, и на тях им слагам при ивен клик да решават определената задача. Проблема е че като дам да се запази резултата във innerHTML, се показва за части от секундата и после изчезва. Ако дам обаче да се показва в алерт бокс, всичко си работи. Някой има ли идея как да го оправя? Ето кода:

http://jsbin.com/ohiros/1/edit


от stann1 (1378 точки)


0
Здравей, мисля че схванах откъде ти идва проблема. Разкарай елемента
, не ти е нужен. Тъй като по подразбиране този елемент има action ="", т.е ще се презареди текущата страница, и след като ти се обработи скрипта, ще се зареди отново

с празно съдържание

от pdrenovska (2196 точки)

0
Е нееее, направо си златна. Толкова време да си блъскам главата с това, а то каква тъпотия било. Имам да те черпя ;)

от stann1 (1378 точки)


3

За четвърта задача, следният алгоритъм дава желания резултат:

  1.     for (var property in objectType) {
  2.         var minimalElement = property;
  3.         var maximalElement = property;
  4.         break;
  5.     }
  6.  
  7.     for (property in objectType) {
  8.         if (property > maximalElement) {
  9.             maximalElement = property;
  10.         }
  11.  
  12.         if (property < minimalElement) {
  13.             minimalElement = property;
  14.         }
  15.     }
  16.  
  17.     jsConsole.writeLine(objectType);
  18.     jsConsole.writeLine(String.format("Min: {0}", minimalElement));
  19.     jsConsole.writeLine(String.format("Max: {0}", maximalElement));

от Anubis_Black (1521 точки)


0
Незнам, малко изкуствено се получава. Това не е ли по-удачен вариант за инициализация на променливите: var min = null; var max = null; for (var prop in document) { if (min == null || prop < min) min = prop; if (max == null || prop > max) max = prop; }

от psotirov (492 точки)

0
Не, защото извършваш проверките min == null и max == null при всяко завъртане на цикъла, което довежда до изключително слаб пърформанс. Ако ги завъртиш, първо да проверява prop < min и prop > max, има някаква идея, но все пак вариантът, даден от мен, ползва особеността на JavaScript, че property продължава от втората итерация във втория цикъл, т.е. не се прави допълнителна проверка.
В общи линии, моят вариант ще върви пъти по- бързо от твоя, а ако направиш размяната, която споменах, има вариант да е близко като пърформанс.

от Anubis_Black (1521 точки)