IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Простые числа - многопоточная реализация, Не могу понять что не так...
-Yupi-
сообщение 26.06.2007 22:42
Сообщение #1


Гость






Есть два процесса - один производит простые числа и заносит в буфер, другой выводит их на экран. Вроде бы все правильно, посмотрите пожалуйста почему все зависает.. буду очень благодарна.

q:=3, w:=1;

procedure in_buf;
var j : word;
begin
if free>0 then
begin
For j:=2 to q-1 do
If (q mod j) = 0 then
begin
inc (q);
end;
inc (w);
for j:=w downto 2 do Buffer_Sqrt[j]:=Buffer_Sqrt[j-1];
Buffer_Sqrt[1]:=w;
inc(w);
end;
end;
procedure out_buf;
begin
if ((Free<max) and (free<>max)) then
Begin
if buf_x>60 then begin buf_x:=45;inc(buf_y); end;
if buf_y=21 then buf_y:=15;
i:=max-Free;
GotoXY(buf_x,buf_y);
Write(Buffer_Sqrt[i]:4);
Free:=Free+1;
buf_x:=buf_x+4;
Delay(10);
End;
end;


Может проблема более глобальная? Если так то покажу всю прогу..
Всем заранее спасибо.

 ! 
-Yupi-, заголовок темы должен быть информативным (правила, п.1)



Сообщение отредактировано: Michael_Rybak - 26.06.2007 23:39
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
мисс_граффити
сообщение 27.06.2007 1:02
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


 if ((Free<max) and (free<>max)) then

можно в 2 словах, чем обусловлено написание такого интересного условия?
    For j:=2 to q-1 do
If (q mod j) = 0 then
begin
inc (q);
end;

при изменении q границы цикла не меняются...

шаманство с w вообще не поняла sad.gif

возможно, выложенный полный код прояснит ситуацию.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 8.08.2025 14:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"