Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/98: Рейтинг темы: голосов - 98, средняя оценка - 4.91
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
.NET 4.x

Задача о рюкзаке методом динамического программирования, исправить код

20.12.2012, 14:12. Показов 19591. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться! Написал прогу, которая должна решать задачу о рюкзаке методом Беллмана (динамическое программирование), однако она не работает...

Код C#
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ryukzak
{
    class Article //товар
    {
        public string name; //название товара
        public int weight; //вес товара
        public int price; //цена товара
 
        public Article(string n, int w, int p)
        {
            name = n;
            weight = w;
            price = p;
        }
    }
    
    class Program
    {
        public static Article[] articles;
        public static int numsArticle; // Количество товаров
        public static bool incorrEnter; //Переменная, что проверяет корректность ввода
        public static string name; // Имя товара
        public static int weight, price, maxWeight; // Вес и цена товара, размер рюкзака
        public static int[,] func; //массив для хранения значений функции
 
        // Метод выводит на экран рюкзак
        static void Print(int s, int n)
        {
            foreach (int x in func)
                Console.Write(x + " ");
            /*if (func[s, n] != 0)
                if (func[s - 1, n] == func[s, n])
                    Print(s - 1, n);
                else
                {
                    Print(s - 1, n - articles[s].weight);
                    Console.WriteLine(s);
                }*/
        }
 
        static void Main(string[] args)
        {
            int s, n; //просто переменные :)
 
            Console.WriteLine("Данная программа поможет Вам заполнить Ваш рюкзак максимально ценными товарами\nАвтор: Владимир Рыбалка");
            
            //Введем количество товаров
            do 
            {
                incorrEnter = false;
                Console.Write("\nКакое количество товаров вы рассматриваете для приобретения: ");
                try 
                {
                    numsArticle = Convert.ToInt32(Console.ReadLine());
                }
                catch(FormatException) 
                {
                    incorrEnter = true;
                    numsArticle = 0;
                }
            } while (incorrEnter);
 
            articles = new Article[numsArticle]; //Создаем массив заданного размера
 
            //Создадим объекты товаров
            for (int i = 0; i < articles.Length; i++)
            {
                Console.Write("\n\nВведите название " + i+1 + "-го товара: ");
                name = Console.ReadLine();
                do
                {
                    incorrEnter = false;
                    Console.Write("Введите вес товара: ");
                    try
                    {
                        weight = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        weight = 0;
                    }
                } while (incorrEnter);
                do
                {
                    incorrEnter = false;
                    Console.Write("Введите цену товара: ");
                    try
                    {
                        price = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        price = 0;
                    }
                } while (incorrEnter);
                articles[i] = new Article(name, weight, price); //Создаем объект
            }
 
            // Введем размер рюкзака
            do
                {
                    incorrEnter = false;
                    Console.Write("\nВведите размер вашего рюкзака (контейнера): ");
                    try
                    {
                        maxWeight = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        maxWeight = 0;
                    }
                } while (incorrEnter);
 
            func = new int[numsArticle, maxWeight]; //Реализуем массив функции
 
            //Реализуем алгоритм Беллмана
            for (n = 0; n < maxWeight; n++)
                func[0, n] = 0;
 
            for (s = 1; s < numsArticle; s++)
                for (n = 0; n < maxWeight; n++)
                {
                    func[s, n] = func[s - 1, n];
                    if ((n >= articles[s].weight) && ((func[s - 1, n - articles[s].weight] + articles[s].price) > func[s, n]) && (n - articles[s].weight + articles[s].price < maxWeight))
                        func[s, n] = func[s - 1, n -  articles[s].weight + articles[s].price];
                }
 
            Print(numsArticle, maxWeight);
            Console.ReadKey();
        }
    }
}


В методе Print есть закомментированный кусок, по идее он рабочий. Проблема в том, что в итоговом массиве одни нули... Я делал по примеру на паскале, что нашел в инете:
код паскаля
Pascal
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
const k=5; ww=15;
    w:array [1..k] of integer=(6,4,3,2,5);
    p:array [1..k] of integer=(5,3,1,3,6);
 
var a:array [0..k,0..ww] of integer;
    s,n:integer;
procedure Print(s,n:integer);
begin
  if (A[s,n]<>0) then
    if (A[s-1,n] = A[s,n])
      then Print(s-1,n)
      else begin
        Print(s-1,n-w[s]);
        writeln(s);
      end;
end;
 
begin
 for n:=0 to ww do A[0,n]:=0;
 for s:=1 to k do
    for n:=0 to ww do
    begin
        A[s,n]:=A[s-1,n];
        if  (n>=w[s]) and (A[s-1,n-w[s]]+p[s] > A[s,n])
          then A[s,n]:= A[s-1][n-w[s]]+p[s];
    end;
 print(k,ww);
end.

Пример рабочий, проверял. Но мне пришлось сделать видоизменения на C# т.к. индексы выходили за пределы массива в циклах, где написано про реализацию алгоритма Беллмана, а также в строке
C#
1
if ((n >= articles[s].weight) && ((func[s - 1, n - articles[s].weight] + articles[s].price) > func[s, n]) && (n - articles[s].weight + articles[s].price < maxWeight))
пришлось добавить третье условие:
C#
1
(n - articles[s].weight + articles[s].price < maxWeight)
т.к. второй индекс присваиваемого значения превышал за пределы массива.

Я уже голову сломал. Подскажите, буду очень признателен!
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.12.2012, 14:12
Ответы с готовыми решениями:

Задача о рюкзаке методом динамического программирования
Здравствуйте, помогите, пожалуйста, реализовать до конца программу. Входные данные должны быть следующими: Данные подаются на...

Решение задачи о рюкзаке методом динамического программирования
Разбейте задачу на подзадачи и постройте рекуррентное соотношение для вычисления значений подзадач. Определите порядок вычисления...

Задача методом динамического программирования
Добрый день. Передо мной стоит решение задачи методом динамического программирования (табличный метод). Суть задачи : На трех...

13
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
22.12.2012, 12:55  [ТС]
Все так и помогли...
0
3 / 3 / 2
Регистрация: 14.03.2012
Сообщений: 23
22.12.2012, 14:28
посмотри у тебя в Паскале массивы весов и цен инициируются с единицы, C# инициализация начинается с нуля,
Pascal
1
2
w:array [1..k] of integer=(6,4,3,2,5);
    p:array [1..k] of integer=(5,3,1,3,6);
соответственно при реализации алгоритма Беллмана, нужно писать не
C#
1
articles[s]
а
C#
1
articles[s-1]
то есть на единицу меньше (это тогда ты обращаешься к массивам весов и цен, но не к матрице функций)

Кроме того заметь, что в Паскале матрица функций задается как
Pascal
1
a:array [0..k,0..ww] of integer;
, то есть это матрица k+1 на ww+1 элемент.
соответственно тебе нужно задать матрицу так
C#
1
func = new int[numsArticle+1, maxWeight+1];
а в цикле будут соответственные изменения
C#
1
2
3
4
5
for (n = 0; n < maxWeight+1; n++)
                func[0, n] = 0;
 
            for (s = 1; s < numsArticle+1; s++)
                for (n = 0; n < maxWeight+1; n++)
да, и убери свое условие
0
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
22.12.2012, 14:32  [ТС]
Большое спасибо! Но я уже за пару дней сам додумался обо всем Для следующих поколений оставлю свое решение:
Решение задачи о рюкзаке на С#
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ryukzak
{
    class Article //товар
    {
        public string name; //название товара
        public int weight; //вес товара
        public int price; //цена товара
        public bool take; //берем ли товар
 
        public Article(string n, int w, int p)
        {
            name = n;
            weight = w;
            price = p;
        }
    }
    
    class Program
    {
        public static Article[] articles;
        public static int numsArticle; // Количество товаров
        public static bool incorrEnter; //Переменная, что проверяет корректность ввода
        public static string name; // Имя товара
        public static int weight, price, maxWeight; // Вес и цена товара, размер рюкзака
        public static int[,] func; //массив для хранения значений функции
 
        // Метод выводит на экран рюкзак
        static void Print()
        {
            Console.WriteLine("\nМаксимальная стоимость: " + func[maxWeight, numsArticle-1]);
            Console.Write("Взяты следующие предметы: ");
            foreach (Article x in articles)
                if (x.take)
                    Console.Write(x.name + " ");
        }
 
        static void Main(string[] args)
        {
            int s, n, i; //просто переменные :)
 
            Console.WriteLine("Данная программа поможет Вам заполнить Ваш рюкзак максимально ценными товарами\nАвтор: Владимир Рыбалка");
            
            //Введем количество товаров
            do 
            {
                incorrEnter = false;
                Console.Write("\nКакое количество товаров вы рассматриваете для приобретения: ");
                try 
                {
                    numsArticle = Convert.ToInt32(Console.ReadLine());
                }
                catch(FormatException) 
                {
                    incorrEnter = true;
                    numsArticle = 0;
                }
            } while (incorrEnter);
 
            articles = new Article[numsArticle]; //Создаем массив заданного размера
 
            //Создадим объекты товаров
            for (i = 0; i < articles.Length; i++)
            {
                Console.Write("\n\nВведите название " + i+1 + "-го товара: ");
                name = Console.ReadLine();
                do
                {
                    incorrEnter = false;
                    Console.Write("Введите вес товара: ");
                    try
                    {
                        weight = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        weight = 0;
                    }
                } while (incorrEnter);
                do
                {
                    incorrEnter = false;
                    Console.Write("Введите цену товара: ");
                    try
                    {
                        price = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        price = 0;
                    }
                } while (incorrEnter);
                articles[i] = new Article(name, weight, price); //Создаем объект
            }
 
            // Введем размер рюкзака
            do
                {
                    incorrEnter = false;
                    Console.Write("\nВведите размер вашего рюкзака (контейнера): ");
                    try
                    {
                        maxWeight = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        maxWeight = 0;
                    }
                } while (incorrEnter);
 
            func = new int[maxWeight+1, numsArticle]; //Реализуем массив функции
 
            //Реализуем алгоритм Беллмана
            for (weight = 1; weight <= maxWeight; weight++) // Загружаем рюкзак если его вместимость = Weight
                for (i = 1; i < numsArticle; i++) // берем предметы с 1 по numsArticle
                    //если вес предмета больше Weight, или предыдущий набор лучше выбираемого
                    if (articles[i].weight > weight)
                    {
                        func[weight, i] = func[weight, i - 1]; //тогда берем предыдущий набор
                        articles[i].take = false;
                    }
                    else if (func[weight, i - 1] >= (func[weight - articles[i].weight, i - 1] + articles[i].price))
                    {
                        func[weight, i] = func[weight, i - 1]; //тогда берем предыдущий набор
                        articles[i].take = false;
                    }
                    else
                    {
                        func[weight, i] = func[weight - articles[i].weight, i - 1] + articles[i].price; //иначе добавляем к предыдущему набору текущий предмет
                        articles[i].take = true;
                    }
 
            Print();
            
            Console.ReadKey();
        }
    }
}


Только единственно мне бы еще хотелось как-то подсчитывать не сам факт взятия того или иного товара, а его количество... Пробовал вводить счетчики, получается какая-то ерунда...
2
3 / 3 / 2
Регистрация: 14.03.2012
Сообщений: 23
22.12.2012, 14:40
чесно говоря, в эту реализацию алгоритма особо не вникал, просто посмотрел где возможны ошибки, поэтому такой вопрос: что тебе возвращает паскалевский алгоритм? Наведи пример входный данных и результат.
0
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
23.12.2012, 12:06  [ТС]
Немного подправил код:
Решение задачи о рюкзаке методом динамического программирования на C#
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
using System;
 
namespace ryukzak
{
    class Article //товар
    {
        public string name; //название товара
        public int weight; //вес товара
        public int price; //цена товара
        public bool take; //берем ли товар
 
        public Article(string n, int w, int p)
        {
            name = n;
            weight = w;
            price = p;
        }
    }
    
    class Program
    {
        public static Article[] articles;
        public static int numsArticle; // Количество товаров
        public static bool incorrEnter; //Переменная, что проверяет корректность ввода
        public static string name; // Имя товара
        public static int weight, price, maxWeight; // Вес и цена товара, размер рюкзака
        public static int[,] func; //массив для хранения значений функции
 
        // Метод выводит на экран рюкзак
        static void Print()
        {
            Console.WriteLine("\nМаксимальная стоимость: " + func[maxWeight, numsArticle-1]);
            Console.Write("Взяты следующие предметы: ");
            foreach (Article x in articles)
                if (x.take)
                    Console.Write(x.name + " ");
        }
 
        static void Main(string[] args)
        {
            int i, j; //просто переменные :)
 
            Console.WriteLine("Данная программа поможет Вам заполнить Ваш рюкзак максимально ценными товарами\nАвтор: Владимир Рыбалка");
            
            //Введем количество товаров
            do 
            {
                incorrEnter = false;
                Console.Write("\nКакое количество товаров вы рассматриваете для приобретения: ");
                try 
                {
                    numsArticle = Convert.ToInt32(Console.ReadLine());
                }
                catch(FormatException) 
                {
                    incorrEnter = true;
                    numsArticle = 0;
                }
            } while (incorrEnter);
 
            articles = new Article[numsArticle]; //Создаем массив заданного размера
 
            //Создадим объекты товаров
            for (i = 0, j = i + 1; i < articles.Length; i++, j++)
            {
                Console.Write("\n\nВведите название " + j + "-го товара: ");
                name = Console.ReadLine();
                do
                {
                    incorrEnter = false;
                    Console.Write("Введите вес товара: ");
                    try
                    {
                        weight = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        weight = 0;
                    }
                } while (incorrEnter);
                do
                {
                    incorrEnter = false;
                    Console.Write("Введите цену товара: ");
                    try
                    {
                        price = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        price = 0;
                    }
                } while (incorrEnter);
                articles[i] = new Article(name, weight, price); //Создаем объект
            }
 
            // Введем размер рюкзака
            do
                {
                    incorrEnter = false;
                    Console.Write("\nВведите размер вашего рюкзака (контейнера): ");
                    try
                    {
                        maxWeight = Convert.ToInt32(Console.ReadLine());
                    }
                    catch (FormatException)
                    {
                        incorrEnter = true;
                        maxWeight = 0;
                    }
                } while (incorrEnter);
 
            func = new int[maxWeight+1, numsArticle]; //Реализуем массив функции
 
            //Реализуем алгоритм Беллмана
            for (weight = 1; weight <= maxWeight; weight++) // Загружаем рюкзак если его вместимость = Weight
                for (i = 1; i < numsArticle; i++) // берем предметы с 1 по numsArticle
                    //если вес предмета больше Weight, или предыдущий набор лучше выбираемого
                    if (articles[i].weight > weight)
                    {
                        func[weight, i] = func[weight, i - 1]; //тогда берем предыдущий набор
                        articles[i].take = false;
                    }
                    else if (func[weight, i - 1] >= (func[weight - articles[i].weight, i - 1] + articles[i].price))
                    {
                        func[weight, i] = func[weight, i - 1]; //тогда берем предыдущий набор
                        articles[i].take = false;
                    }
                    else
                    {
                        func[weight, i] = func[weight - articles[i].weight, i - 1] + articles[i].price; //иначе добавляем к предыдущему набору текущий предмет
                        articles[i].take = true;
                    }
 
            Print();
            
            Console.ReadKey();
        }
    }
}
2
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
23.12.2012, 12:19
Цитата Сообщение от Pirokar Посмотреть сообщение
не сам факт взятия того или иного товара, а его количество..
к-во товара в рюкзаке?
Есть же массив весов товаров или их цен - берем mas.Length - и получаем количество.
Если же есть нулевые - цикл,пробег,счетчик.
0
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
23.12.2012, 12:24  [ТС]
Нужно не количество товара, которое учавствует в выборке, а количество выбранных товаров.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
23.12.2012, 12:39
C#
1
 Console.WriteLine("К-во элементов в рюкзаке = {0}", articles.Count()-1);
Это?
0
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
23.12.2012, 12:44  [ТС]
Да, я пробовал реализовать счетчик в объекте, чтобы он инкрементировался каждый раз вместо
C#
1
articles[i].take = true;
и декрементировался каждый раз вместо
C#
1
articles[i].take = false;
Однако при запуске программы выяснилось, что он отображает неверно (намного больше, чем возможно запихнуть в рюкзак).
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
23.12.2012, 12:46
Pirokar, Плохая идея..
Шарп не тот язык в котором за использование лишних 4 байтов будут бить по руках.

p.s. Но если можно,почему б и нет)
0
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
23.12.2012, 12:48  [ТС]
Я че-т вообще не понял, в чем идея плохая... Мы точно говорим об одном и том же?
Проблема в том, что счетчик неверный. Наверное, я просто недопонимаю сам алгоритм. Вопрос тут не в 4-х байтах.
0
Темная сторона .Net
 Аватар для Noob.net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
23.12.2012, 12:57
У тебя же массив объектов,какой счетчик в объекте)

Повторюсь,булы-"тру" все равно считать пришлось бы позже.
0
5 / 5 / 0
Регистрация: 21.10.2012
Сообщений: 54
23.12.2012, 13:01  [ТС]
По-моему меня не понимают
У меня в итоге выводятся только какие товары нужно взять. Никто от булов не отказывается.
Просто бывают рюкзаки не только на 4 предмета и объемом 20 единиц. Скажем, есть 10 легковесных товаров от 1 до 5 кг, и рюкзак объемом в 1000 кг. Тогда встает уже вопрос не только какие товары должны быть взяты, но и сколько их должно быть взято. Т.е. хотелось бы, чтобы в конце программа выдавала что-то вроде:
Взяли: телевизоры, 50 штук
магнитолы, 25 штук
DVD-плееры, 75 штук
Простое добавление после була что-то типа
articles[i].count++ или articles[i].count-- не дает желаемого результата, счетчик оказывается накручен чрезмерно (к примеру, ести топоры по 1 кг каждый и рюкзак объемом 7 единиц, а он показывает, что топорв можно засунуть 15 штук).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2012, 13:01
Помогаю со студенческими работами здесь

Задача коммивояжера методом динамического программирования
Помогите пожалуйста переделать коммивояжера методом динамического программирования. Пусть n - это количество вершин графа. Тогда в цикле...

Задача о выборе траектории методом динамического программирования
Очень нужна программа. Помогите пожалуйста.

Задача о выборе траектории методом динамического программирования
Необходимо проехать от Киева до Симферополя. Возможны несколько путей (см.сеть). Число, соответствующее каждой дуге - количество часов,...

Задача о рюкзаке методом ПОИСКА ПО ШИРИНЕ python
import time start = time.time() from queue import Queue from queue import LifoQueue from copy import copy class Uzel: def...

Игра Ним методом динамического программирования
добрый день помогите решить задачу методом динамического программирования. Игра Ним с одной кучей камней и с инвертированными правилами...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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