Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с решением задачи на с++ или c#

Верона Ученик (215), на голосовании 8 месяцев назад
Определить какая сумма больше, сумма всех положительных чисел,
стоящих выше главной диагонали и ниже второй главной диагонали (первый
поток), или сумма модулей всех отрицательных чисел, стоящих выше второй
главной диагонали и ниже главной диагонали(второй поток). Входные данные:
целое положительное число n, массив чисел А размерности nxn. Для
синхронизации потоков использовать семафоры.
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (440727) 9 месяцев назад
>ля синхронизации потоков использовать семафоры.
А нахрена, позвольте спросить? У нас 2 потока, они не имеют общих данных, почему бы нам просто в главном потоке не подождать их оба?

 async Task SumUpper(int[,] a) 
{
int Result = 0;
for (int y = 0; y < a.GetLength(0) / 2; y++)
for (int x = y + 1; x < a.GetLength(1) - y - 1; y++)
Result += a[x, y];
return Result;
}

async Task SumLower(int[,] a)
{
int Result = 0;
for (int y = a.GetLength(0) - 1; y > a.GetLength(0) / 2; y--)
for (int x = a.GetLength(0) - 2; x > a.GetLength(0) - y + 1; x--)
Result += a[x, y];
return Result;
}

int[,] GenArray(int n)
{
int[,] Result = new int[n, n];
Random r = new Random();
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
Result[i, j] = r.Next(-100, 100);
return Result;
}

Console.WriteLine("Generating array");
var a = GenArray(5000);
Console.WriteLine("Starting tasks");
var s1 = Task.Run(() => SumUpper(a));
var s2 = Task.Run(() => SumLower(a));
Console.WriteLine("Awaiting results");
await Task.WhenAll(new[] { s1, s2 });
Console.WriteLine($"Result: {s1.Result > s2.Result}");
Похожие вопросы