Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/41: Рейтинг темы: голосов - 41, средняя оценка - 4.56
30 / 30 / 21
Регистрация: 19.02.2011
Сообщений: 171

Исправить ошибки в тесте Миллера и тесте Соловея-Штрассена

10.03.2014, 20:40. Показов 8861. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо написать программу, которая имеет 2 алгоритма:

Тест Миллера
http://ru.wikipedia.org/wiki/%... %B5%D0%BB)

и

Тест Соловея-Штрассена
http://ru.wikipedia.org/wiki/%... 0%BD%D0%B0



Я написал, но имеются какие-то ошибки. Не могли бы Вы посмотреть? За ранее спасибо.

Вот код [cut]
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2014, 20:40
Ответы с готовыми решениями:

Ошибки в тесте
Сделал что-то типа теста. Если выбираю в ИЗМЕНЕНИЕ теста во втором вопросе, что правильный вариант первый, то потом тест ломается. С чем...

Найти ошибки в тесте
В общем седня закончил второй курс Cisco (для малых сетей, CCNA2). Финальный тест сдал средненько. Не ожидал что будет таким сложным. Хотя...

1С Профессионал по платформе. Ошибки в тесте
Добрый день. Столкнулся со следующей проблемой При сдаче на сертификат 1С Профессионал по платформе 8.3 был вопрос 11.28 Каким...

19
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
11.03.2014, 16:15
Simak63, загрузите пожалуйста архив на форум.
0
place status here
 Аватар для gunslinger
3190 / 2226 / 640
Регистрация: 20.07.2013
Сообщений: 6,022
11.03.2014, 19:22
Лови.
Вложения
Тип файла: rar Тест.rar (335.8 Кб, 132 просмотров)
0
30 / 30 / 21
Регистрация: 19.02.2011
Сообщений: 171
11.03.2014, 21:16  [ТС]
gunslinger , спасибо что архив перезалил на форум
0
30 / 30 / 21
Регистрация: 19.02.2011
Сообщений: 171
13.03.2014, 08:36  [ТС]
Тема ещё популярная. помогите пожалуйста
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
13.03.2014, 08:57
Simak63, не знаю найдется ли кто смелый переписать за вас полностью всю программу. Так как если исправить там все ошибки, то она как раз вся и перепишется.
Вы бы сами что-нибудь поделали, переделали чуток. Глядишь, народ и потянется.

кому лениво качать
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <math>
#include <windows.h>
#include <windef.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
 
 
//Тест  Миллера
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
 
{
 Label1->Caption="";
 long n; //n > 2, нечётное натуральное число, которое необходимо проверить на простоту;
 long k; //k — какое-то число.
 long m;
 long s=0, q, i, j;
  bool pr;
 n=StrToInt(Edit1->Text);
 k=StrToInt(Edit2->Text);
 
/////////////////////////ШАГ 1////////////////////////////////////
 while (k % n == 0)
 {
 k = k/n;
if (k == 0)
pr=true;
if(pr){Label1->Caption="Составное";break;}
if (Label1->Caption!="Составное")
Label1->Caption="Простое";
}
/////////////////////////ШАГ 2/////////////////////////////////////////
while (!((n-1)%int(pow(2,s))))
 s++;
 s--;
 q=(n-1)/pow(2,s);
  i=1;
 ////////////////////////ШАГ 3//////////////////////////////////////////
 pr=true;
 if (i<=m) {i++;}
 if(i>m){Label1->Caption="Простое"; break;}
 ////////////////////////ШАГ 4/////////////////////////////////////////
 if ( pi % n == 0)
 if(){Label1->Caption="Составное"; break;}
 pow(p,q)%n;
 ////////////////////////ШАГ 5////////////////////////////////////////
 if(((pow(p,q*pow(2,s))%n)!=1)
 {Label1->Caption="Составное"; break;}
 ////////////////////////ШАГ 6////////////////////////////////////////
 if((pow(p,q)%n)==1){pr=false; break;}
 j=max(j,pow(p,q*pow(2,j))%n)!=1);
 ////////////////////////ШАГ 7/////////////////////////////////////////
 if((pow(p,q*pow(2,j))%n)==n-1)
 {pr=false; break;}
 ////////////////////////ШАГ 8//////////////////////////////////////////
 if (pr) {Label1->Caption="Составное"; break;}
 
}
 
 
 
 
 
 
//Тест Соловея-Штрассена
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label1->Caption="";
 long n; //n > 2, нечётное натуральное число, которое необходимо проверить на простоту;
 long k; //k — параметр, определяющий точность теста.
 long  t, x, a;
 bool pr;
 n=StrToInt(Edit3->Text);
 k=StrToInt(Edit4->Text);
 
 randomize();
 for (int i=1; i<k; i++)
  {
  pr=true;
   a=random(n-2)+2;
if (nod(a,n) > 1
{Label4->Caption="Составное"; break;}
if((pow(a,(n-1)/2))!=(a/n)%n)
{Label4->Caption="Составное"; break;}
}
 
 
long nod(long a, long n)
{
    while (a && n)
        if (a >= n)
           a %= n;
        else
           n %= a;
    return a | n;
}
//---------------------------------------------------------------------------
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.03.2014, 20:52
Цитата Сообщение от Simak63 Посмотреть сообщение
Не могли бы Вы посмотреть?
Посмотрел, спасибо
1
30 / 30 / 21
Регистрация: 19.02.2011
Сообщений: 171
17.03.2014, 20:57  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Посмотрел, спасибо
А исправить ошибки?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.03.2014, 21:01
Цитата Сообщение от Simak63 Посмотреть сообщение
А исправить ошибки?
Например, какие?
0
30 / 30 / 21
Регистрация: 19.02.2011
Сообщений: 171
17.03.2014, 22:51  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Например, какие?
Ну исходники есть. При компиляции всё показано.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.03.2014, 23:29
Цитата Сообщение от Simak63 Посмотреть сообщение
А исправить ошибки?
Может ты это сделаешь это за нас?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.03.2014, 05:32
gunslinger, добавь файл vcl60.bpl.
0
30 / 30 / 21
Регистрация: 19.02.2011
Сообщений: 171
18.03.2014, 07:12  [ТС]
Обновил исходники
Вложения
Тип файла: rar Тест.rar (300.4 Кб, 65 просмотров)
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.03.2014, 07:35
И что не так?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
18.03.2014, 11:22
Цитата Сообщение от Simak63 Посмотреть сообщение
Ну исходники есть. При компиляции всё показано.
Другими словами, ты считаешь, что тебе кто-то что-то должен. Я принципиально не помогаю людям, которые вообще ничего не хотят делать сами. Просьба в личку больше мне ничего не писать
2
30 / 30 / 21
Регистрация: 19.02.2011
Сообщений: 171
18.03.2014, 18:02  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Я принципиально не помогаю людям, которые вообще ничего не хотят делать сами.
Вы не правы, так как я скидываю вам исходник, который дорабатываю и прошу помощи. Посмотреть ошибки и отредактировать их.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.03.2014, 18:49
Бесплатным учителем никто не нанимался.
Либо вы конкретны в описании проблемы и уважительно относитесь к форумчанам, либо вас просто посылают игнорируют ....
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
18.03.2014, 20:02
Цитата Сообщение от Simak63 Посмотреть сообщение
Вы не правы, так как я скидываю вам исходник, который дорабатываю и прошу помощи. Посмотреть ошибки и отредактировать их.
Прга ни о каких ошибках не сообщает.
0
place status here
 Аватар для gunslinger
3190 / 2226 / 640
Регистрация: 20.07.2013
Сообщений: 6,022
21.03.2014, 14:19
Лучший ответ Сообщение было отмечено Simak63 как решение

Решение

Simak63, у тебя в реализации теста Миллера, честно говоря, бардак.
Написал код на основе той информации, что есть в Википедии (алгоритм показался мне избыточным, некоторые условия кажутся излишними, может быть, старею; точное математическое описание не искал). Два момента под сомнением, см. пояснительный текст в программе. Проверил на достаточно большом количестве чисел, ошибочные результаты получаются при 11-значных числах.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// нахождение остатка от деления на n числа number, возведенного в степень power
// доп. информация: http://stackoverflow.com/questions/8496182/calculating-powa-b-mod-n
// unsigned long long можно попробовать заменить на unsigned __int64
unsigned long long mod(unsigned int number, unsigned long long power, unsigned long long n)
{
  unsigned long long res = 1;
  while (power)
  {
    if (power % 2)
      res = (1ull * res * number) % n;
    number = (1ull * number * number) % n;
    power /= 2;
  }
  return res;
}
Тест Миллера:
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
85
86
87
88
89
90
91
92
  unsigned long long i, temp, n = 2971215073ull;
  bool not_prime = 0;
  const count = 58;
  // p - массив простых чисел, их (возможно) должно быть достаточно, поэтому не применяется вычисление значений каждый раз
  // pq - "коэффициенты", их кол-во невелико, можно использовать динамический массив, но для простоты взят "статический"
  unsigned int s = 0, q, m, j, k, p[count] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,\
      131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271}, pq[count];
 
// (1) проверка n на то, является ли оно степенью числа
  for (i = 3; i <= sqrt(n); i+=2)
  {
    temp = n;
    unsigned int power = 0;
    while (temp/i > 0 && temp%i == 0)
    {
      temp /= i;
      power++;
    }
    if (temp == 1 && power > 1)
    {
      ShowMessage("составное (является степенью числа)");
      not_prime = 1;
      break;
    }
  }
 
  if (!not_prime)
  {
// (2) определяем первые m простых чисел p[m]
// функция f(n) = n^0.133 определяется из того, что расширенная гипотеза Римана не доказана
// иначе можно использовать f(n) = 2*log^2(n)
// здесь и далее в коментариях ^ - возведение в степень
    for (m = 0; m < count-1; m++)
      if (p[m]<=pow(n, 0.133) && pow(n, 0.133)<=p[m+1])
      {
        m++;
        break;
      }
// находим s и q, где n-1 = q*2^s, q - нечетное
    temp = n-1;
    while (temp/2 > 0 && temp%2 == 0)
    {
      temp /= 2;
      s++;
    }
    q = (n-1)/pow(2, s);
// i=1, (4)
 
// (3) если i<=m, то i=i+1
    for (i = 1; i <= m; i++)
    {
// (4) не очень понятна запись p[i] | n
// полагаю, что означает она делимость n на p[i], т.е. является ли p[i] делителем n
      if (n % p[i-1] == 0)
      {
        ShowMessage("составное (делится на простое)");
        not_prime = 1;
        break;
      }
// вычисляем p[i]^q mod n, p[i]^(q*2) mod n, ..., p[i]^(q*2^s) mod n, обозначим их pq[i]
      for (j = 0; j <= s; j++)
        pq[j] = mod(p[i-1], q*pow(2, j), n);
// (5) проверяем условие pq[i]^(q*2^s) != 1, если да, то число составное
      if (pq[s] != 1)
      {
        ShowMessage("составное (остаток от деления на pq[s] после возведения в степень не равен 1)");
        not_prime = 1;
        break;
      }
// (6) проверяем условие pq[i]^q == 1, если да, то идем на (3)
      if (pq[0] == 1)
        continue;
// тут тоже мало понятно, предположил, что нужно найти индекс j, для которого pq[j] максимален и не равен 1
      temp = 0;
      for (j = 0; j <= s; j++)
        if (pq[j] != 1 && pq[j] > temp)
        {
          temp = pq[j];
          k = j;  // запоминаем индекс j (в переменной k)
        }
// (7) если pq[j] (j=k, см. чуть выше), то (3)
      if (pq[k] == n-1)
        continue;
 
// (8)
      ShowMessage("составное");
      not_prime = 1;
    }
// (3) случай i>m
    if (!not_prime)
      ShowMessage("простое");
  }
Добавлено через 19 часов 21 минуту
Второй тест (Соловея-Штрассена).

НОД (алгоритм Евклида):
C++
1
2
3
4
5
6
7
8
9
10
11
unsigned __int64 nod(unsigned __int64 m, unsigned __int64 n)
{
  while(m!=0 && n!=0)
  {
    if(m>=n)
      m%=n;
    else
      n%=m;
  }
  return m+n;
}
Символ Якоби:
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
int jacob_char(unsigned __int64 a, unsigned __int64 b)
{
  if (nod(a, b) != 1)
    return 0;
  else
  {
    int r = 1;
    if (a < 0)
    {
      a = -a;
      if (b%4 == 3)
        r = -r;
    }
    do
    {
      int t = 0;
      while (a%2 == 0)
      {
        t += 1;
        a /= 2;
      }
      if (t%2 == 1 && (b%8 == 3 || b%8 == 5))
          r = -r;
      if (a%4 == 3 && b%4 == 3)
        r = -r;
      unsigned __int64 c = a;
      a = b%c;
      b = c;
    }
    while (a != 0);
    return r;
  }
}
Тест Соловея-Штрассена (для указанных значений n и a считает простое число n составным, хотя a нечетное и даже простое; либо ошибка в описании алгоритма, либо я что-то не понимаю):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  unsigned __int64 n = 45212177, k = 1, i, a;
  bool not_prime = 0;
  randomize();
  for (i = 1; i <= k; i++)
  {
// a должно быть случайным, например, random(n-4)+3;
// думаю, что числа a не должны повторяться и должны быть нечетными
    a = 17;
/*  ShowMessage(a);
    ShowMessage(nod(a, n));
    ShowMessage(mod(a, (n-1)/2, n));
    ShowMessage(jacob_char(a, n));*/
    if (nod(a, n) > 1 || mod(a, 1ull*(n-1)/2, n) != jacob_char(a, n))
    {
      ShowMessage("n составное");
      not_prime = 1;
      break;
    }
  }
  if (!not_prime)
    ShowMessage("n простое с вероятностью " + String(1.-pow(2., -k*1.)));
Функция mod описана ранее.
2
 Аватар для S0l0mka
1 / 1 / 0
Регистрация: 09.04.2013
Сообщений: 5
08.03.2015, 15:48
если в условии сравнения mod с символом Якоби поставить не "!=" а "<=" то все считает правильно)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//---------------------------------------------------------------------------
 
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#pragma hdrstop
 
using namespace std;
//---------------------------------------------------------------------------
//пример простых чисел 13, 109, 193, 433, 769, 1201, 1453, 2029, 3469, 3889, 4801, 10093, 12289, 13873, 18253, 20173, 21169, 22189, 28813, 37633, 43201, 47629, 60493, 63949, 65713, 69313, 73009, 76801, 84673, 106033, 108301, 112909, 115249
// нахождение остатка от деления на n числа number, возведенного в степень power
 long long mod( int number,  long long power,  long long n)
{
  unsigned long long res = 1;
  while (power)
  {
    if (power % 2)
      res = (res * number) % n;
    number = (number * number) % n;
    power /= 2;
  }
  return res;
}
 
 long NOD(long m, long n)
{
  while(m!=0 && n!=0)
  {
    if(m>=n)
      m%=n;
    else
      n%=m;
  }
  return m+n;
}
 
int jacob_char(int a, int b)
{
  if (NOD(a, b) != 1)
    return 0;
  else
  {
    int r = 1;
    if (a < 0)
    {
      a = -a;
      if (b%4 == 3)
        r = -r;
    }
    do
    {
      int t = 0;
      while (a%2 == 0)
      {
        t += 1;
        a /= 2;
      }
      if (t%2 != 0 && (b%8 == 3 || b%8 == 5))
          r = -r;
      if (a%4 == 3 && b%4 == 3)
        r = -r;
      int c = a;
      a = b%c;
      b = c;
    }
    while (a != 0);
    return r;
  }
}
 
int main(int argc, char* argv[])
{
        long n;/*n>2, нечетное натуральное число, которое необходимо проверить на простоту*/
        long k;/* параметр, определяющий точность теста*/
        long a;
        double t;
        int flag = 0;
                 
 
        cin>>n;
        cin>>k;
        t=1-1/pow(2.0,k);
                    
            for (int i=1; i <= k; i++)
            {
            a=rand()%(n-2)+2;
            if (NOD(a, n) > 1)
            {
                
                flag=1;
                break;
            }
            else if ( mod(a,(n-1)/2,n) <= jacob_char(a, n))
            {
                
                flag=2;
                break;
            }
            }
        
              
  if (flag !=0)
  {
      cout<<"sostavnoe \n";
  }
  else
       cout<<"prostoe s veroyatnost'u = " << t << "\n";
     getch();                                 
   
    
                
    return 0;
}
//---------------------------------------------------------------------------
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.03.2015, 15:48
Помогаю со студенческими работами здесь

Решение ошибки при тесте
Всем привет! Решаю задачку на codeforces, не совсем понимаю почему при тестах мое решение не проходит. Если можно, то распишите...

Повторение в программе-тесте, как исправить?
Программа тест читает вопросы из текстового файла, вопросов всего 20 шт. Проблема в том что она повторяет эти вопросы Помогите...

Парни, подскажите пожалуйста нубу на ошибки в тесте
Уже третий раз пытаюсь сдать тест и окончательно сам себя запутал. Зеленым отмечены мои ответы. Судя по результатам почти треть...

Таймер в тесте
Доброго времени суток. Такая проблема: нужен в тесте таймер. Да не простой, а чтобы по истечении времени жал на кнопку и начинал отсчет...

Рандом в тесте
У меня есть код, который запускает тест, но мне надо добавить так, чтобы вопросы выпадали на рандом и без повторов, но как? Imports...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru