21

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

Ніж блок-схеми вчити, краще б учили код вирівнювати.

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

22

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

koala написав:

Ніж блок-схеми вчити, краще б учили код вирівнювати.

100%
Причому можна ж розказати студентам, що є плагін, який достатньо скачати та встановити, і о чудо, він сам все вирівняє. Або розказали про системи контролю версій. Але ні, от блок схеми це, звісно, те, що дуже потрібно. А найгірше, що все ще є люди, які це намагаються виправдати деякою міфічною необхідністю.

23

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

Не треба про плагін. І тим більше викладачам не треба про нього розповідати - бо тоді вимагатимуть, щоб було ТОЧНО так, як плагін вирівнює, а це теж не завжди правильно.
А от як правильно питання по концепціях і коду ставити - це обов'язково треба. В школі.

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

24

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

Плагін можна налаштувати і він вирівнюватиме так як буде потрібно вам.

25

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

wander написав:

Плагін можна налаштувати і він вирівнюватиме так як буде потрібно вам.

Навряд. Бувають досить складні ситуації, на кшталт

int  some_var1 = 5 * x + 3 * y +         -2 * t;
int other_var2 = 5 * x +         3 * z +  2 * t;

Я поки що не бачив плагінів, здатних на таке.

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

26

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

не поділяю вашого хейту щодо блок-схем, панове. По-перше, блок схеми то є мова програмування 5го покоління. Нагадаю, що мови на кшталт С є мовами 3го покоління. 5те покоління можна характеризувати як мови програмування без програмування, якщо хто не в курсі. Краще б ви направили свої зусилля на розробку програмного продукту, що реалізував би цю ідею. Чи може вже є таке? Бо це, по-друге великі кошти, державне фінансування або підтримка. Зараз користь від блок-схем здається сумнівною, але якщо вони будуть працювати, якщо студент відразу зможе побачити результат, це стане новою віхою у вивченні програмування і навіть діти зможуть долучитися до вивчення простих алгоритмів обробки даних.

27

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

Scratch мова програмування для дітей

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

28

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

Блок-схема - це не мова програмування, це засіб візуалізації алгоритму. Не для комп'ютера, а для людини.

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

29 Востаннє редагувалося P.Y. (10.10.2020 21:32:18)

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

koala написав:
P.Y. написав:

З іншого боку, якщо студентові не показати ні блок-схем, ні переходів на мітку, то як йому взагалі пояснити, що таке цикл і чим while відрізняється від do while?

Словесний опис алгоритму. Я вважаю, що перші два-три алгоритми треба показувати саме словами, а вже потім переходити на МП, і це у будь-якому разі.

Чи справді словесне пояснення для всіх однаково ефективне? Слухове та зорове сприйняття в різних людей бувають різними. Для когось зрозуміліше «пройдіть три квартали й поверніть ліворуч», а комусь зручніше бачити маршрут на карті.

Р.Ѕ. Власне, й той факт, що програмний код заведено оформлювати відступами (навіть коли синтаксис мови цього не вимагає), свідчить про важливість візуального сприйняття для програміста.

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

30

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

koala написав:

Я поки що не бачив плагінів, здатних на таке.

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

31

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

P.Y. написав:
koala написав:
P.Y. написав:

З іншого боку, якщо студентові не показати ні блок-схем, ні переходів на мітку, то як йому взагалі пояснити, що таке цикл і чим while відрізняється від do while?

Словесний опис алгоритму. Я вважаю, що перші два-три алгоритми треба показувати саме словами, а вже потім переходити на МП, і це у будь-якому разі.

Чи справді словесне пояснення для всіх однаково ефективне? Слухове та зорове сприйняття в різних людей бувають різними. Для когось зрозуміліше «пройдіть три квартали й поверніть ліворуч», а комусь зручніше бачити маршрут на карті.

Р.Ѕ. Власне, й той факт, що програмний код заведено оформлювати відступами (навіть коли синтаксис мови цього не вимагає), свідчить про важливість візуального сприйняття для програміста.

Так я і не заперечую цього. Але, по-перше, блок-схеми застаріли і не використовуються у виробництві; по-друге, сприймаються недовикладачами саме як строга мова (бачите, дехто з форумчан теж так вважає), а не як напівформальний засіб візуалізації. Блок-схеми так, як вони використовуються в нашій освіті, коли їх то дають робити за кодом (нащо, якщо код уже написаний?), то використовують у них навіть не математичні позначення, а позначення з інших мов програмування (як-от у цій темі) - це шкідництво.

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

32 Востаннє редагувалося koala (10.10.2020 23:47:30)

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

wander написав:
koala написав:

Я поки що не бачив плагінів, здатних на таке.

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

В один рядок? Серйозно? Ви вважаєте, що

int some_var1 = 5*x + 3*z - 2*t; int other_var2 = 5*x + 3*z + 2*t;

сприймається краще за попередній варіант?

Подякували: 0xDADA11C71

33

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

koala написав:

В один рядок? Серйозно?

Ем, ні :)
Я мав на увазі не в рядок, а разом. Не знаю, чому написав так..

int  some_var1 = 5 * x + 3 * y + -2 * t;
int other_var2 = 5 * x + 3 * z +  2 * t;

34 Востаннє редагувалося leofun01 (11.10.2020 02:27:47)

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

wander написав:
int  some_var1 = 5 * x + 3 * y + -2 * t;
int other_var2 = 5 * x + 3 * z +  2 * t;

Підкажіть, який плаґін вміє так вирівнювати ? (хоча би так)

В мене виходить тільки це

int some_var1 = 5 * x + 3 * y + -2 * t;
int other_var2 = 5 * x + 3 * z + 2 * t;

і його варіанти без пробілів навколо деяких операторів.

upd

Приклад з проекту, де автоматичне вирівнювання тільки заважає.

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

35

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

У вас коефіцієнти при t і z написані один під одним. А у моєму прикладі вони рознесені. Якщо це не два рядки, а 5-6, то це може бути суттєво - не додавати ж множення на 0, щоб не загубити коефіцієнт.

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

36

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

якщо вам кортить форматування, зробіть окрему тему, блок-схеми - окрему тему

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

37

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

leofun01 написав:

Підкажіть, який плаґін вміє так вирівнювати ? (хоча би так)

clang-format

leofun01 написав:

В мене виходить тільки це

Взяв ось такий початковий кусочок:

int  some_var1 = 5 * x + 3 * y +         -2 * t;
int other_var2 = 5 * x +         3 * z +  2 * t;

На виході (після автоформатування) отримав:

int some_var1  = 5 * x + 3 * y + -2 * t;
int other_var2 = 5 * x + 3 * z + 2 * t;

Мої налаштування файлу .clang-format

Прихований текст
---
BasedOnStyle: LLVM
IndentWidth: 4
UseTab: Never
ColumnLimit: 120
---
Language: Cpp
AlwaysBreakTemplateDeclarations: true
FixNamespaceComments: true
AccessModifierOffset: -4
IndentPPDirectives: AfterHash
AlignConsecutiveAssignments: true 
AlignConsecutiveDeclarations: true
BinPackArguments: false
BinPackParameters: false
AlwaysBreakAfterReturnType: None
AlwaysBreakAfterDefinitionReturnType: None
PenaltyReturnTypeOnItsOwnLine: 400
PenaltyBreakBeforeFirstCallParameter: 400
PenaltyBreakAssignment: 400
PointerAlignment: Left
DerivePointerAlignment: false
IndentCaseLabels: true
AllowAllParametersOfDeclarationOnNextLine: false
AlignAfterOpenBracket: Align
MaxEmptyLinesToKeep: 2
Подякували: leofun011

38

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

Гаразд, а якщо отак:

int  very_long_vaiable_name = 52 * x + 31 * y + 7335 * z + -42 * t;
int                some_var =  5 * x +  3 * y +             -2 * t;
int               other_var =  5 * x +             3 * z +   2 * t;

Тепер видно, чим зумовлені відступи всередині формул?

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

39 Востаннє редагувалося wander (11.10.2020 23:04:31)

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

koala написав:

Тепер видно, чим зумовлені відступи всередині формул?

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

int  very_long_vaiable_name = 52 * x + 31 * y + 7335 * z + -42 * t;
int                some_var =  5 * x +  3 * y +             -2 * t;
int               other_var =  5 * x +             3 * z +   2 * t;
int       long_vaiable_name = 52 * x + 31 * y +   51 * z +       t;
int               some_var2 =           3 * y +             -2 * t;
int              other_var3 =  5 * x +                       2 * t;

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

Прихований текст
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
class   T_FSM_base
{
    //-----------------------------------------------------------------------------------
    typedef int                                                 T_state;
    typedef std::pair   < T_state,              char        >   T_state_and_symb;
    typedef std::map    < T_state_and_symb,     T_state     >   T_state_transition_table;
    typedef std::set    < T_state                           >   T_states;
    //-----------------------------------------------------------------------------------
    T_state                     cur_state_;
    T_state_transition_table    state_transition_table_;
    T_states                    final_states_;
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    T_FSM_base( T_state     start_state )
        :
        cur_state_( start_state )
    {}
    //-----------------------------------------------------------------------------------
    bool    string_is_accepted( T_str   &   s )
    {
        for( auto  c_it = s.begin(); c_it != s.end(); ++c_it )
        {
            if  (
                    !successfully_set_cur_state_for_symb( *c_it )
                )
            {
                return  false;
            }
        }//for
 
        return  cur_state_is_final();
    }
    //-----------------------------------------------------------------------------------
    void    add_rule
        (
            T_state     cur_state,
            char        symb,
            T_state     new_state
        )
    {
        state_transition_table_
            [    
                T_state_and_symb
                    (
                        cur_state,
                        symb
                    )
            ]
        
            =   new_state;
    }

Це і в продакшні було теж )

40

Re: Допоможіть зрозуміти, що означає таки запис масиву у блок схемі

koala написав:

... блок-схеми ... сприймаються недовикладачами саме як строга мова (бачите, дехто з форумчан теж так вважає), а не як напівформальний засіб візуалізації. Блок-схеми так, як вони використовуються в нашій освіті, коли їх то дають робити за кодом (нащо, якщо код уже написаний?), то використовують у них навіть не математичні позначення, а позначення з інших мов програмування (як-от у цій темі) - це шкідництво.

Позначення з інших мов програмування — закономірний наслідок того, що це не строга мова, і в ній з однаковим успіхом одне й те ж поняття може позначатись і як а[і][ј]++, і яка[і,ј]:=а[і,ј]+1, і як аi, j+1→ai,j, і як «збільшуємо елемент а(і,ј) на 1». Зазвичай орієнтуються на т.зв. «алгоритмічну мову», котра являє собою суржикуватий алголоподібний псевдокод.

«Математичні позначення» — ну, не знаю, а вони справді зрозуміліші за фортранівські для пересічного студента, який з матрицями в математиці зустрічається інколи пізніше, ніж з масивами в сішному коді? Або, як у математичній нотації записати присвоєння (чого ні на шкільній алгебрі, ні на інститутському матані не проходять)?.. Тобто, це теж ще одна строга мова, яку треба спеціально вчити. Достатньо розлога й неоднорідна, щоб володіння математичною нотацією в одній галузі математики було недостатньо для іншої. Достатньо погано задокументована — зазвичай автор будь-якої книжки з формулами виходить з припущення, що читач звідкись цю нотацію вже знає. Крім того, стандарт цієї нотації достатньо розхитаний — навіть з деякими базовими арифметичними операціями дійти згоди не можуть, плюс розбіжності між варіантами, поширеними в різних країнах.

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