Форум программистов, компьютерный форум CyberForum.ru

Обедающие философы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Указатели http://www.cyberforum.ru/cpp-beginners/thread186701.html
Вам дан текст. Ваша задача написать функцию, которая должна найти самую длинную последовательность внутри цифры. Вход: Первая строка содержит одну линию, что является не более, чем 1000. Выход: Самая длинная последовательность чисел. Все номера положительные и целые числа Заметим, что выход должны быть представлены как в образце. № INPUT ...
C++ Указатели Напишите функцию, которая будет удалять все слова в данном тексте, что соответствует более чем один раз. Примечание. Программы должны использовать указатель. Вход: Первая строка содержит одну линию, что является не более 1000 знаков с пробелами. Каждое слово не длиннее 30 символов. Выход: Форматированный текст. № INPUT OUTPUT 1 Buffalo... http://www.cyberforum.ru/cpp-beginners/thread186693.html
C++ указатели
Напишите функцию, которая должен найти и вернуть последние слова в данном тексте. Прототип функции должны быть следующие MostRecent недействительными (символ * Текст, слова символ *) В символ слова * Ваш функции должны вернуться последние слова, что occurce в тексте. Ваша программа должна быть не чувствительны к регистру (игнорировать регистр - "может" и "может" те же слова) Вход: Первая...
Указатели (Pointers) C++
Напишите функцию, которая будет заменить все "! Символы с точкой "." . Прототип функции должны быть следующие недействительными заменить (символ источника *, символ Dest *) В символ * Dest программы должны вернуться форматированный текст. Вход: Первая строка содержит одну линию, что является не более 1000 знаков с пробелами Выход: Текст с заменой "!" на "." внутри.
C++ Указатели (Pointers) http://www.cyberforum.ru/cpp-beginners/thread186687.html
Напишите функцию, которая формате указать число, помещая одну пустую строку после каждой 3 цифры. Вход: Первая строка содержит одну линию, что является не более чем на 100 Выход: Отформатированный номер. № INPUT OUTPUT 1 200 200
C++ указатели (Pointers) Напишите функцию, которая будет проверять, если подстрока "IPRE" можно найти в данной линии. Вход: Первая строка содержит одну линию, что является не более чем 1000 Выход: ДА или НЕТ. подробнее

Показать сообщение отдельно
programmerC++
3 / 3 / 1
Регистрация: 04.11.2010
Сообщений: 38
05.11.2010, 17:52     Обедающие философы
Здравствуйте участники форума я на форуме нашел программу про обедающих философов вот её исходники
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace Philosopher
{
    public class Philosopher_1
    {
        public static void Phil_1_eat()
        {
            while (true)
            {
                Global.Think.WaitOne();
                Console.WriteLine("Философ 1 размышляет");
                Thread.Sleep(1000);
                Global.Think.Release();
 
                Global.ToHungry.WaitOne();
                Console.WriteLine("Философ 1 голоден");
                Thread.Sleep(1000);
                Global.FromHungry.Release();
 
            check_1:
                {
                    if (Global.vhod_control == 2)
                    {
                        Global.ToHungry.WaitOne();
                        Console.WriteLine("Философ 1 голоден");
                        Thread.Sleep(1000);
                        Global.FromHungry.Release();
                    }
                    else
                        goto check_1_1;
                }
                goto check_1;
            check_1_1:
 
                Global.Eat.WaitOne();
                Global.vhod_control = Global.vhod_control + 1;
                Console.WriteLine("Философ 1 ест");
                Thread.Sleep(1000);
                Global.vhod_control = Global.vhod_control - 1;
                Global.Eat.Release();
            }
        }
    }
 
    public class Philosopher_2
    {
        public static void Phil_2_eat()
        {
            while (true)
            {
                Global.Think.WaitOne();
                Console.WriteLine("Философ 2 размышляет");
                Thread.Sleep(1000);
                Global.Think.Release();
 
                Global.ToHungry.WaitOne();
                Console.WriteLine("Философ 2 голоден");
                Thread.Sleep(1000);
                Global.FromHungry.Release();
 
            check_2:
                {
                    if (Global.vhod_control == 2)
                    {
                        Global.ToHungry.WaitOne();
                        Console.WriteLine("Философ 2 голоден");
                        Thread.Sleep(1000);
                        Global.FromHungry.Release();
                    }
                    else
                        goto check_2_1;
                }
                goto check_2;
            check_2_1:
 
                Global.Eat.WaitOne();
                Global.vhod_control = Global.vhod_control + 1;
                Console.WriteLine("Философ 2 ест");
                Thread.Sleep(1000);
                Global.vhod_control = Global.vhod_control - 1;
                Global.Eat.Release();
            }
        }
    }
 
    public class Philosopher_3
    {
        public static void Phil_3_eat()
        {
            while (true)
            {
                Global.Think.WaitOne();
                Console.WriteLine("Философ 3 размышляет");
                Thread.Sleep(1000);
                Global.Think.Release();
 
                Global.ToHungry.WaitOne();
                Console.WriteLine("Философ 3 голоден");
                Thread.Sleep(1000);
                Global.FromHungry.Release();
 
            check_3:
                {
                    if (Global.vhod_control == 2)
                    {
                        Global.ToHungry.WaitOne();
                        Console.WriteLine("Философ 3 голоден");
                        Thread.Sleep(1000);
                        Global.FromHungry.Release();
                    }
                    else
                        goto check_3_1;
                }
                goto check_3;
            check_3_1:
 
                Global.Eat.WaitOne();
                Global.vhod_control = Global.vhod_control + 1;
                Console.WriteLine("Философ 3 ест");
                Thread.Sleep(1000);
                Global.vhod_control = Global.vhod_control - 1;
                Global.Eat.Release();
            }
        }
    }
 
    public class Philosopher_4
    {
        public static void Phil_4_eat()
        {
            while (true)
            {
                Global.Think.WaitOne();
                Console.WriteLine("Философ 4 размышляет");
                Thread.Sleep(1000);
                Global.Think.Release();
 
                Global.ToHungry.WaitOne();
                Console.WriteLine("Философ 4 голоден");
                Thread.Sleep(1000);
                Global.FromHungry.Release();
 
            check_4:
                {
                    if (Global.vhod_control == 2)
                    {
                        Global.ToHungry.WaitOne();
                        Console.WriteLine("Философ 4 голоден");
                        Thread.Sleep(1000);
                        Global.FromHungry.Release();
                    }
                    else
                        goto check_4_1;
                }
                goto check_4;
            check_4_1:
 
                Global.Eat.WaitOne();
                Global.vhod_control = Global.vhod_control + 1;
                Console.WriteLine("Философ 4 ест");
                Thread.Sleep(1000);
                Global.vhod_control = Global.vhod_control - 1;
                Global.Eat.Release();
            }
        }
    }
 
    public class Philosopher_5
    {
        public static void Phil_5_eat()
        {
            while (true)
            {
                Global.Think.WaitOne();
                Console.WriteLine("Философ 5 размышляет");
                Thread.Sleep(1000);
                Global.Think.Release();
 
                Global.ToHungry.WaitOne();
                Console.WriteLine("Философ 5 голоден");
                Thread.Sleep(1000);
                Global.FromHungry.Release();
 
            check_5:
                {
                    if (Global.vhod_control == 2)
                    {
                        Global.ToHungry.WaitOne();
                        Console.WriteLine("Философ 5 голоден");
                        Thread.Sleep(1000);
                        Global.FromHungry.Release();
                    }
                    else
                        goto check_5_1;
                }
                goto check_5;
            check_5_1:
 
                Global.Eat.WaitOne();
                Global.vhod_control = Global.vhod_control + 1;
                Console.WriteLine("Философ 5 ест");
                Thread.Sleep(1000);
                Global.vhod_control = Global.vhod_control - 1;
                Global.Eat.Release();
            }
        }
    }
 
    class Global
    {
        public static int vhod_control = 0;
        public static int s = 100;
        public static int t = 100;
        public static int n = 2;
        public static Semaphore Eat = new Semaphore(n, n);
        public static Semaphore FromThink = new Semaphore(0, s);
        public static Semaphore Think = new Semaphore(s, s);
        public static Semaphore FromHungry = new Semaphore(0, t);
        public static Semaphore ToHungry = new Semaphore(t, t);
 
        static void Main(string[] args)
        {
            Thread Thread_1 = new Thread(new ThreadStart(Philosopher_1.Phil_1_eat));
            Thread_1.Start();
 
            Thread Thread_2 = new Thread(new ThreadStart(Philosopher_2.Phil_2_eat));
            Thread_2.Start();
 
            Thread Thread_3 = new Thread(new ThreadStart(Philosopher_3.Phil_3_eat));
            Thread_3.Start();
 
            Thread Thread_4 = new Thread(new ThreadStart(Philosopher_4.Phil_4_eat));
            Thread_4.Start();
 
            Thread Thread_5 = new Thread(new ThreadStart(Philosopher_5.Phil_5_eat));
            Thread_5.Start();
        }
    }
}
но в данном коде ошибка, когда ест философ:1, тогда философ:2 не может есть, а он ест. Как это исправить?
Должно быть так: только 2 философа могут есть и с расчетом через одного, так как им надо по 2 вилки, как они закончат приём пищи, могут начинать другие.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru