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

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

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

Показать сообщение отдельно
programmerC++
3 / 3 / 1
Регистрация: 04.11.2010
Сообщений: 38
07.11.2010, 12:29  [ТС]
silent_1991, то есть она будет работать на Linux а не на виндвозе?

Добавлено через 15 часов 59 минут
Как тогда данный код переписать под Windows?

Добавлено через 2 часа 54 минуты
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define N 5
/* Global Structures  */
typedef struct {
    int chopstick;
    int eating;
}
 
PHIL;
PHIL philAry [N];
PHIL philWait [N];
 
void think (int i);
void eat (int i);
void waitLeft (int i);
void waitRight (int i);
void check (int i);
void finish (int i);
void get_hungry_and_try_to_eat (int philoNo, int totalPhilo);
void philosopher (int amount);
void running(int waitTime);
 
void think (int i) {
    printf ("\nPhilosopher no. %d is hungry...\n", i);
}
 
void eat (int i) {
    printf ("\nPhilosopher no. %d is eating...\n", i);
    running (rand());
}
 
void finish (int i) {
    printf ("\nPhilosopher no. %d stops eating ", i);
    printf ("and releases chopsticks...\n");
    philAry[i].eating = 0;          // Philosopher stops eating
    philAry[i+1].chopstick = 1;     // Right philosopher takes back chopstick
    philAry[i-1].chopstick = 1;     // Left philosopher takes back chopstick
}
 
void waitLeft (int i) {
    printf ("\nLeft chopstick is not available, so ");
    printf ("philosopher no. %d has to wait...\n", i);
    philWait[i + 1].chopstick = 0;
}
 
void waitRight (int i) {
    printf ("\nRight chopstick is not available, so ");
    printf ("philosopher no. %d has to wait...\n", i);
    philWait[i].chopstick = 0;
}
 
void check (int i) {
    for (int count = 0; count < i; count ++) {
        if (!philWait[count].chopstick && philAry[count].chopstick) {
            printf ("\nPhilosopher no. %d gets both chopsticks.", i - 1);
            eat (i - 1);
            finish (i - 1);
            philWait[count].chopstick = 1;
        }
    }
}
 
void get_hungry_and_try_to_eat (int philoNo, int totalPhilo) {
 
    int left;
    int right;
 
    left = philoNo - 1;
    right = philoNo + 1;
 
    if (left < 0)
        left = totalPhilo;
 
    else if (right > totalPhilo)
        right = 0;
 
    if ((philAry[left].chopstick) && (!philAry[left].eating)) {
        printf ("\nPhilosopher no. %d gets left chopstick...", philoNo);
        philAry[left].chopstick = 0;
 
        if ((philAry[right].chopstick) && (!philAry[left].eating)){
            printf ("\nPhilosopher no. %d gets right chopstick...", philoNo);
            philAry[right].chopstick = 0;
            philAry[philoNo].eating = 1;        // philosopher is eating
            eat (philoNo);          
            finish (philoNo);
            philAry[left].chopstick = 1;        // Left philosopher takes back chopstick
            philAry[right].chopstick = 1;       // Right philosopher takes back chopstick
        }
 
        else {
            waitRight (philoNo);
            philAry[philoNo].eating = 0;
        }
    }
 
    else {
        waitLeft (philoNo);
        philAry[philoNo].eating = 0;
    }
}
 
void philosopher (int amount) {
    int randPhilo;
    int count = amount;
    while (count > 0) {
        running (rand());
        randPhilo = rand() % amount;
        think (randPhilo);
        check (amount);
        get_hungry_and_try_to_eat (randPhilo, amount);
        count--;
    }
    check (amount);
    printf ("\n");
}
 
void running(int waitTime)
{
    clock_t Goal;
    Goal=CLOCKS_PER_SEC*waitTime/1000+clock();
    while(Goal>clock());
}
 
void main () {
    int total, count;
    printf ("How many philosophers are eating?\n\n>>  ");
    scanf ("%d", &total);
    if (total != 0) {
        for (count = 0; count < total; count++) {
            philAry[count].chopstick = 1;
            philWait[count].chopstick = 1;
            philAry[count].eating = 0;
        }
        philosopher (total);
    }
    else {
        printf ("There is no any philosopher eating.\n\n");
    }   
}
Кому не сложно переделайте его на Семафоры и мониторы. =)
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru