1

Тема: Допоможіть новачку.

Всім привіт. Не судіть сильно, я тільки вчуся, самоучка.
Маю завдання, не знаю як правильно вирішити так як нема настоятеля.
Як вирішити данне завдання.
Приклад:
Створіть 3 перемінних x=6, y=15, z=4.
я:

    var x = 6;
    var y = 15;
    var z = 4;

Виконайте та відобразіть результат наступної операції для цієї перемінної:

    x +=y - x++ *z;

Як правильно виконати? Зазделегідь дякую.

2

Re: Допоможіть новачку.

Задача більше на подумати, що програма робитиме зі змінною x, значення якої в цьому виразі збільшується двічі.

Якщо ж питання про сам код, то, я так бачу, в цій елементарній задачі ви вже все зробили — лишається тільки відобразити результат.
Вивести результат (тобто, змінну x) можна кількома способами:
якщо код виконується на веб-сторінці, то результат можна відобразити безпосередньо на ній:

document.write(x);

Або ж можна показати його як повідомлення в діалоговому вікні:

alert(x);

Нарешті, результат можна вивести в консоль відлагоджувача (на самій сторінці його не буде видно):

console.log(x)

Останній спосіб придатний і тоді, коли код виконується не в браузері, а в node — результат буде виведено в консоль, у якій запущено node.

Як запустити JavaScript на веб-сторінці, пояснювати треба, чи ви вже з цим розібрались?

Подякували: fed_lviv, flatliner, leofun013

3

Re: Допоможіть новачку.

Як запустити JavaScript на веб-сторінці?:
  Так, дякую розібрався зі всіма способами.

Тоді я можу виводити цю перемінну такими способами в браузері?Який з них правильний, і взагалі чи правильний?
  Спосіб 1:

    var x = 6;
    var y = 15;
    var z = 4;
    x += y - x++ * z;
    document.write(x);

    Рузультат: -3;

  Спосіб 2:

    var x = 6;
    var x = 15;
    var x = 4;
    document.write(x += y - x++ * z);

    Результат: -3;

Мені ще цікаво як сам процес вираховування виконується, поетапно щоб зрозуміти суть?Наприклад дану перемінну хочу виконати вручну у зошиті письмово, як в школі.Це можливо?

4

Re: Допоможіть новачку.

Який з них правильний, і взагалі чи правильний?

Правильні обидва. Хоча перший, можливо, трохи простіший для розуміння.

Мені ще цікаво як сам процес вираховування виконується, поетапно щоб зрозуміти суть?Наприклад дану перемінну хочу виконати вручну у зошиті письмово, як в школі.Це можливо?

Так, це можливо. Можна, наприклад, зробити табличку, де в стовпчиках виписуються значення кожної змінної, а також дії, які виконує програма (після яких значення змінних можуть змінюватись). Складні вирази (як у цьому прикладі) можна розписати як серію простих з використанням тимчасових змінних — наприклад, так:

tmp1=x;
x=x+1;
tmp2=tmp1*z;
tmp3=y - tmp2;
x=x+tmp3;
Подякували: koala, flatliner2

5

Re: Допоможіть новачку.

А в нас тут за RTFM не банять? Бо здається це зараз саме той випадок :)

Подякували: leofun011

6

Re: Допоможіть новачку.

bvn написав:

А в нас тут за RTFM не банять? Бо здається це зараз саме той випадок :)

Ні. Навіть за питання без напрацювань не банять, лише теми видаляють, а тут людина питання по суті ставить. Простенькі, так, але для новачка це нормально.

Подякували: fed_lviv1

7

Re: Допоможіть новачку.

тут найскладніше це роз'яснити, чому получено саме таку відповідь

8

Re: Допоможіть новачку.

Я саме мав на увазі, чи мене тут не забанять, якщо би я йому відповів: "RTFM приорітети і порядок виконання арифметичних дій"? :)

9

Re: Допоможіть новачку.

Так, ситуація трохи нетривіальна, здається тут x++ йде по лісу пішки... воно типу виконується з тим іксом, яким він був десь колись, до того, як... але результат цього інкременту ніколи не застосовується, адже дані для виразу беруться до виконання інкременту.

Подякували: leofun011

10

Re: Допоможіть новачку.

P.Y. написав:
tmp1=x;
x=x+1;
tmp2=tmp1*z;
tmp3=y - tmp2;
x=x+tmp3;

Отут трохи помилка, я б сказав:

tmp1 = x;
x = x + 1; // go to forest
tmp2 = tmp1 * z;
tmp3 = y - tmp2;
x = tmp1 + tmp3;
Подякували: P.Y.1

11

Re: Допоможіть новачку.

Правильні обидва.

Перепрошую, але насправді ні — в другому варіанті розв'язку навіщось тричі оголошується змінна x, а y та z не оголошуються й значення їм не присвоюються — в такому вигляді це призведе до помилки. Хоча, якщо оголосити змінні правильно (як у першому варіанті), то результат відповідатиме очікуаному:

    var x = 6;
    var y = 15;
    var z = 4;
    document.write(x += y - x++ * z);

12 Востаннє редагувалося P.Y. (30.04.2020 15:57:49)

Re: Допоможіть новачку.

Так, ситуація трохи нетривіальна, здається тут x++ йде по лісу пішки... воно типу виконується з тим іксом, яким він був десь колись, до того, як... але результат цього інкременту ніколи не застосовується, адже дані для виразу беруться до виконання інкременту.

Це цікаво. Перевірив з деякими іншими мовами — схоже, BeanShell робить такий же «похід лісом», як і JS — теж виводить -3. І Java також.

Тоді як у Сі (gcc) послідовність дій відповідає тій, що я наводив вище, тому результат відрізняється:

Прихований текст
#include<stdio.h>
main()
{
    int x = 6, y = 15, z = 4;
    x += y - x++ * z;
    printf("%d\n", x); // виводить -2
}

Це ж стосується й perl:

Прихований текст
$x = 6; $y = 15; $z = 4; print($x += $y - $x++ * $z); // виводить -2

та php.

Подякували: flatliner, leofun012

13

Re: Допоможіть новачку.

Всім дякую хто долучився до відповіді. Принцип зрозумів, виведення результату, але у письмовому способі теж трішки роізбрався, але ще не до кінця. Тоді пісдкажіть, як вичислити середнє арифметичне трьох цілочислених значень: x=6; y=15; z=4;
Як, я розумію:

var x = 6;
var y= 15;
var z = 4;
var result = (6 + 15 +4) / 3;
document.write(result);

Результат: 8.333

Чи це правильно? Чи я маю ще дальше ділити, до моменту поки число незможемо розділити?
Тобто: 8/3=2.66.

Перепрошую за навязливість.

14 Востаннє редагувалося P.Y. (30.04.2020 15:56:17)

Re: Допоможіть новачку.

Оскільки тут навіщось використовуються змінні x,y,z, то в рядку var result=... треба використовувати імена цих змінних, а не їхні значення — інакше незрозуміло, для чого ті змінні взагалі потрібні. Ну або можна взагалі без змінних обійтись, написавши програму лише з одного рядка:

document.write((6+15+4)/3);

15

Re: Допоможіть новачку.

Ви б для початку розібралися, як воно без комп'ютера робиться, а потім питали по програмі. Так, це правильно (з певною точністю - там більше трійок у кінці).

Подякували: flatliner1

16

Re: Допоможіть новачку.

Всім дякую, за домогу. Тому я і пишу на форумі, щоб люди хороші і обізнані в цій сфері, мені помогли розібратися, якщо б я сам розібрався, тоді б не писав на форумі =). Я вже зі всім розібрася це приємна новина )

Подякували: Сергій781