61

(14 533 відповідей, залишених у Інше)

хто проходив курс CS50, що можете про нього сказати?

62

(33 відповідей, залишених у Обговорення)

Сhibi написав:
iovchynnikov написав:

Я створив ішью щодо перекладу згідно з їх інструкціями: https://github.com/liuderchi/atom-i18n/issues/101
Почну перекладати у вільний час, бо сам користуюся. Запрошую долучатися, брати 1-2 файли і перекладати. Дайте знати який файл взяли там в коментарях.
How-to: https://github.com/liuderchi/atom-i18n/ … IBUTING.md

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

Дуже доступно для тих, хто ще не працював з гітом
http://www-cs-students.stanford.edu/~bl … c/intl/uk/

63

(8 відповідей, залишених у C#, .NET)

файно, дякую :)

64

(8 відповідей, залишених у C#, .NET)

{
    threadsArr[i] = new Thread(() => ThreadSearch(arr, searchedVal, part * i, part * (i + 1)));
    threadsArr[i].Start();
}

ага, тобто обчислення part * i відбудеться коли сред буде запускатися, а оскільки це процес довгий, то ітерація встигне закінчитись і відповідно і зміниться, так?

65

(8 відповідей, залишених у C#, .NET)

дякую, але мені здаєтья, що те що значення береться по посиланню в даному випадку ніяк не впливає, оскільки ми передаємо результат множення, а не саме i(та і саме i ніяк не модифікується ніде). Думаю проблемою було це

koala написав:

значення змінної i береться лямбдою вже по закінченні циклу.

, але мені не дуже вкладаєтсья в голову чому це так працює

66

(8 відповідей, залишених у C#, .NET)

koala написав:

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

Задача - розпаралелити лінійний пошук
Проблема вилазить, коли значення у потік я передаю не змінними, а безпосереднім результатом множенням, тоді крешає у функції ThreadSearch, бо туди прийшли старт = 25 і енд = 30, а таке могло статись, тільки якщо 
i == threadsCount

static void ParalellSearch(int[] arr, int searchedVal)
        {
            int threadsCount = 5;
            Thread[] threadsArr = new Thread[threadsCount];
            int part = arr.Length / threadsCount; // arr.Length == 25
            for (int i = 0; i < threadsCount; i++)
            {
                int start = part * i;
                int end = part * (i + 1);
                threadsArr[i] = new Thread(() => ThreadSearch(arr, searchedVal, start, end));
                threadsArr[i].Start();
            }
            for (int i = 0; i < threadsCount - 1; i++) 
            {
                threadsArr[i].Join();
            }
        }

static void ThreadSearch(int[] arr, int searchedVal, int start, int end)
        {
            for (int i = start; i < end; i++)
            {
                if (arr[i] == searchedVal)
                {
                    foundIndexes.Add(i);
                }
            }
        }

67

(8 відповідей, залишених у C#, .NET)

Всім привіт!
Зіштовхнувся з проблемкою в наступному коді при передачі аргументів у потік

int start = part * i;
int end = part * (i + 1);
threadsArr[i] = new Thread(() => ThreadSearch(arr, searchedVal, start, end));

у вас є ідеї, чому якщо замінити аргументи безпосередньо на rvalue

threadsArr[i] = new Thread(() => ThreadSearch(arr, searchedVal, part * i, part * (i + 1)));

, то в потік передається не коректна інформація (результат множення виходить такий, ніби "i" більше за позволене у for'i)

68

(11 відповідей, залишених у C#, .NET)

FakiNyan написав:

а це шо за оператор?

https://msdn.microsoft.com/uk-ua/library/b451xz31.aspx
для явного визначення звідки брати конкретний метод

неймспейс::якась_функція, 
клас::метод

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

69

(11 відповідей, залишених у C#, .NET)

можливо оператором розширення видимості вказуйте з якого класу який метод викликаєте?

70

(6 відповідей, залишених у C++)

Koala, дуже дякую, нарешті все стало на свої місця)

71

(6 відповідей, залишених у C++)

Всім привіт
В мене зараз в голові дуже багато питань і взагалі повна каша, тому перейду до суті

В мовах в яких є GC, чи працюючи в с++ з розумними вказівниками меморі лік отримати можна тільки через проблему циклічних посилань(чи є ще якісь?), коли маємо шось типу

p1 = p2
p2 = p1

але що це спричиняє?
кажуть що це трапляється через те, що лічильник кожного вказівника не зможе зменшитись (стати < 2) і відповідно GC не зможе почистити ту пам'ять на яку вони вказують, бо на неї вічно існуватимуть посилання

але чому? хіба при виході з такого скоупу ці вказівники не почнуть знищуватись (р2, р1) тим самим декрементуючи свій лічильник і в кінцевому результаті не очистять пам'ять?

{
   p1 = p2
   p2 = p1
}  

чи я якось неправильно зрозумів проблему?

ну і я чув що ця проблема вирішується певним чином weak_ptr'ами, бо їхнє посилнання не є значущим, тобто через них лічильник не збільшуватиметься

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

72

(8 відповідей, залишених у C++)

Це число ж ніколи явно не задається, воно автоматично визначається з кількості аргументів які ми передали

73

(8 відповідей, залишених у C++)

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

int  main(int argc, char* argv[])

Якщо не складно розкрийте це питання більш детально