Timkor

fnTrickyReverse

Mar 1st, 2021 (edited)
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //це функція main {
  2. //  а = спитатиЛюдинуПроРозмірМасиву()
  3. // створити масив м
  4. //  спитатиЛюдинуПроВсіЕлементиМасиву(м, а)
  5. //  вивестиНаЕкранКрасивоМасив(м)
  6. //  реверснутиМасив(м)
  7. //  написати "ось реверснутий масив:"
  8. //  вивестиНаЕкранКрасивоМасив(м)
  9. //  }
  10.  
  11. function askSizeArr () { /* назва метода це має бути дієслово, що каже нам людською мовою що робить цей метод (метод в java = функція)
  12.  є деякі шаблонні іменування, наприклад отримати щось getШось , встановити значення чомусть setЩось, при цьому ми не
  13.  описуємо в іменуванні що і як ми робимо, чи що намагаємось зробити, а пишемо кінцеву дію. Тут буде норм:
  14.  отриматиРозмірМасиву*/
  15.     return +prompt ('Якій розмір масиву?')
  16. }
  17.  
  18. function askElemArr (array, size)   { // заповнитиМасив. Ви ж знаєте, що іменування параметрів у ваших руках?)
  19.     for (let i = 0; i < size; i++) {
  20.         array[i] = +prompt ('Назвіть елементи масиву?')
  21.     }
  22. }
  23.  
  24. function showArr(m, msg = '')  { // норм іменування, ще можна display   // поки не звертайте уваги на function showArr(m, msg = '')
  25.     let i = 0;
  26.     let nStr = '';
  27.     while (i < (m.length - 1))  {
  28.         nStr = nStr + m[i] + ', ' // можна скорочено nStr += m[i] + ', '; те що зліва від равно якби "переноситься" направо.)
  29.  
  30.         i++
  31.     }
  32.     if (i === (m.length - 1))  {
  33.         nStr = nStr + m[i] + '\n'
  34.     }
  35.     console.put (nStr);
  36. }
  37.  
  38. function reverseArr(m)  {
  39.     /*let i;
  40.     let j; зручно прям у форі створити, якщо вони вам тільки там і потрібні, а після ні.*/
  41.     let other; // іменування не допомагає зрозуміти його призначення, якщо це просто тимчасова змінна , то можна temp (temporary)
  42.     for (let i = 0, j = (m.length - 1); i < j; i++, j--)   { /* круто придумали! я коли писав, що інші масиви тут не створюються
  43.     не подумав, що проміжний тут може бути потрібен, але ви мене підстахували.)  */
  44.         other = m[i];
  45.         m[i] = m[j];
  46.         m[j] = other;
  47.     }
  48.     /* реверс з проміжним масивом виглядав би так:
  49.     let tempArray = []; // створили ще один проміжний масив
  50.     for (let i = 0; i < m.length; i++) {
  51.         tempArray[i] = m[m.length - 1 - i]
  52.     }
  53.       після цього , нам потрібно замінити той масив що на нього зараз вказує параметр m на новий - реверснутий -
  54.     tempArray. І це ми зробити можемо таким просвоюванням
  55.     m = tempArray;
  56.      Але чи зміниться при цьому той масив в мейні що ми передали посилання на нього сюди до функції?
  57.      Спробуйте, поміркуйте чому так, підказка нижче. Як тоді зробити щоб в мейн потрапив звідси реверснутий масив */
  58. }
  59.  
  60. function main() {
  61.     let a = askSizeArr (); // ми хотім не спитати, а нам потрібно отримати, може щось суворіше:  getArraySize ?
  62.     let m = []; // ну то в псевдокоді до задачі супероптимальний кодер надав такі іменування, нам тут можна нормальні давати.)
  63.     askElemArr (m, a); //  setElements, setEveryElements, setArrayElements , fillArray  - я за останню
  64.     showArr(m);
  65.     reverseArr(m);
  66.     console.log("Oсь реверснутий масив: "); /* пропоную доробити функцію showArr(m, msg) щоб вона вміла отримувати
  67.     другим параметром msg строкове повідомлення, що буде виводитися перед тим, що передано першим параметром
  68.     тоді виклик буде showArr(m, "Oсь реверснутий масив: ");
  69.     А ще можна зробити параметр із значенням за замовчуванням.)
  70.     Тобто щоб попередній виклик не було потреби змінювати: якщо передали меседж - вивевся він, а не передали нічого,
  71.     то виведеться той, що за замовчуванням. Хоча в java не так це буде робиться, всеж може бути цікаво. */
  72.     showArr(m);
  73.  
  74. }
  75.  
  76. main();
  77.  
  78.  
  79.  
  80.  
  81. /* це вже нижче, ось та підказка :*/
  82. let arr = [1, 2, 3];
  83. let brr = arr // створили ще одне посилання на той самий 1,2,3 масив. Не створили новий масив.
  84. brr[0] = 888; // тепер ми можемо змінювати масив 1,2,3 звертраючись до нього за будь-яким з посилань: arr чи brr
  85. arr[1] = 777; // маємо  тепер 888,777,3 масив замість 1,2,3
  86. // а тепер увага:
  87. brr = [4, 5, 6]; // що ми зробили з ?? Поміркуйте... а потім подивіться що стало з нашим 888,777,3 масивом через arr
  88. console.log(`arr = ${arr}`); // ось він
  89.  
  90.  
  91.  
  92.  
  93. console.log(`brr = ${brr}`); /* тобто у рядку brr = [4, 5, 6]; - ми поклали до brr посилання на новий масив, "відвязавши"
  94. старий а не змінивши його. Змінює коли міняємо елементи, а коли присвоюємо чи новий (як у нас) чи пустий (brr = []) то
  95.  це посилання більше не вказує на той, що раніше, а тепер воно вказує на інший.*/
  96.  
  97.  
  98. // Гарного коду!)
Add Comment
Please, Sign In to add comment