Форум программистов, компьютерный форум, киберфорум
HighPredator
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Задачки для себя 0x01

Запись от HighPredator размещена 15.06.2016 в 14:20
Показов 2435 Комментарии 0
Метки c++11, c89, programming

1)Условие : Реализация многопоточного вычисления числа Pi
Говнокод:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <sstream>
#include <iomanip>
#include <vector>
#include <future>
 
double CalculatePi(const size_t iterationsCount)
{
  double pi = 0.0;
  double nominator = 1.0;
  double denominator = 1.0;
  
  for (size_t i = 0; i < iterationsCount; i++)
  {
    pi = pi + nominator / denominator;
    nominator = nominator * (-1.0);
    denominator = denominator + 2.0;
  }  
  pi = pi * 4.0;
  
  return pi;
}
 
class TPiCalculator
{
private:
  std::vector<unsigned int> iterations;
  std::vector<double> calculationResults;
public:
  TPiCalculator(unsigned int iterations[], const size_t length);
  std::vector<double> getResults();
  void Calculate();
  std::string ComposeResults();
};
 
TPiCalculator::TPiCalculator(unsigned int descriptor[], const size_t length)
{
  iterations.assign(descriptor, descriptor + length);
}
 
void TPiCalculator::Calculate()
{
  std::vector<std::shared_future<double>> executionResults;
  
  for (auto it : iterations)
      executionResults.push_back(std::async(CalculatePi, it));
      
  for (auto it : executionResults)
      calculationResults.push_back(it.get());
}
 
std::vector<double> TPiCalculator::getResults()
{
  return calculationResults;
}
 
std::string TPiCalculator::ComposeResults()
{
  std::ostringstream oss;
  
  oss << std::setprecision(12);
  
  for (size_t i = 0; i < calculationResults.size(); i++)
  {
    oss << "Thread " << std::setw(3) << i + 1 << " : iterations = " 
        << std::setw(10) << iterations[i] << ",\tPi = " << calculationResults[i]
        << std::endl;
  }
  
  return oss.str();
}
 
int main()
{
  unsigned int a[] = {10000000, 1000000, 100000, 10000, 1000, 100, 10, 1};
    
  TPiCalculator calculator(a, sizeof(a) / sizeof(*a));
  
  calculator.Calculate();
  
  std::cout << calculator.ComposeResults() << std::endl;
  
  return 0;
}

2) Старое-старое, причесанное и вроде адекватное.
Условие:
Разработать функцию, определяющую, является ли введенная строка полным палиндромом (т.е. элемент в середине должен быть в битовом представлении также палиндромом, если имеется).
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <string.h>
 
int IsPalyindrome(const char* s)
{
  int isPalyndrome = 1;
 
  const char* headIterator = NULL;
  const char* tailIterator = NULL;
 
  unsigned char blockSize = sizeof(long int);
  unsigned char middleByte = 0;
  unsigned char reversed = 0;
 
  size_t length = strlen(s);
  size_t N = (length / 2) / blockSize;
  size_t i = 0;
  size_t j = 0;
 
  headIterator = s;
  tailIterator = s + length - blockSize;
 
  i = 0;
  while ((i < N) && isPalyndrome)
  {
    j = 0;
    while ((j < blockSize) && isPalyndrome)
    {
      if (*(headIterator + j) != *(tailIterator + blockSize - 1 - j))
      {
        isPalyndrome = 0;
      }
      j++;
    }
 
    headIterator = headIterator + blockSize;
    tailIterator = tailIterator - blockSize;
    i++;
  }
 
  if (length % 2 == 1)
  {
    middleByte = (unsigned char)*(s + length / 2);
    reversed = ((middleByte * 0x0802LU & 0x22110LU) | (middleByte * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
 
    isPalyndrome = (reversed == middleByte);
  }
 
  return isPalyndrome;
}
 
int main(void)
{
  printf("%d\n", IsPalyindrome("qwertyuiop9876543210~0123456789poiuytrewq"));
 
  return 0;
}
Метки c++11, c89, programming
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru