Софтуерно Инженерство
Loading...
+ Нов въпрос
ugdaka avatar ugdaka 4 Точки

Debugging Exercise: Sequence of Commands

Здравейте колеги,

опитавам се да реша  Sequence of Commands задачата и не можах да измисля изместванията наляво и насясно... може ли малко помощ?
Ето го и кода: http://pastebin.com/rybUciPe

Благодаря, предварително :)

0
Programming Fundamentals
Nikola_Andreev avatar Nikola_Andreev 671 Точки

Добре щом не си успял да го измислиш ще ти дам направо готов код, но само за единия случай.

private static void ArrayShiftRight(long[] array)
        {
            long a = array[array.Length - 1];
            for (int i = array.Length - 1; i >= 1; i--)
            {
                array[i] = array[i - 1];
            }
            array[0] = a;
        }

Надявам се за ArrayShiftLeft ще можеш и сам да го направиш.

   

 

-2
msmilkoff avatar msmilkoff 344 Точки

Подсказка: Ако искаш да преместиш елемент по масив наляво (с превъртане) - arr[i] = arr[(i +1) % arr.Length()] 

2
ugdaka avatar ugdaka 4 Точки

Да и аз това си мислех, но не можах да се сетя как точно да стане, но нещо не можах да го направя... пак не работи по този начин.

0
22/05/2016 20:57:54
KrasimirPetkov avatar KrasimirPetkov 331 Точки

Друг вариант с по-малко писане на код и без цикли (използва System.Linq):

Отместване наляво:

int[] a = { 1, 2, 3 };
a = a.Skip(1).Concat(a.Take(1)).ToArray();    // Result: a = [ 2, 3, 1 ]

 

Отместване надясно:

int[] a = { 1, 2, 3 };
a = a.Skip(a.Length - 1).Concat(a.Take(a.Length - 1)).ToArray();   // Result: a = [ 3, 1, 2 ]

 

Успех със задачите :)

4
msmilkoff avatar msmilkoff 344 Точки

Не знам дали е правилно в Programming Fundamentals да се използват тези готови методи, ако човек има затруднения да разбере как точно работят отвътре. По-добре да си реши задачките само с if и for, докато си развие алгоритмичното мислене.
Освен това, ако декомпилираш въпросните методи, ще видиш, че вътре има множество цикли и функционалното решение едва ли е най-оптималното. Например .Concat() прави нов масив и прехвърля всички елементи от стария в новия + допълнително зададените като аргумент в скобите. Да, изглежда по елегантно така на един ред, но не мисля, че е най-подходящия вариант за начинаещи.

0
KrasimirPetkov avatar KrasimirPetkov 331 Точки

Аз показвам един от вариантите. Всеки може сам да прецени как смята за удачно да си реши задачата. Във всички случаи е от полза, ако знаеш още един вариант за решение на даден проблем :) Така имаш по-голям избор и можеш да се разровиш за плюсовете и минусите на всеки от начините.

1
r3v3nan7 avatar r3v3nan7 364 Точки

Здравей :) Ако желаеш разгледай и моето решение. Може нещо да ти е полезно https://github.com/pkindalov/Programming-fundamentals/blob/master/ArrayTest/ArrayTest.cs

0