PDA

View Full Version : الگوریتم های موازی باmulti pascal



nima1364
دوشنبه 10 دی 1386, 07:24 صبح
سلام دوستان
من اینجا جستجو هم کردم ولی چیزی پیدا نکردم
من باید الگوریتم های آرایشگر خواننده نویسنده و تولید کننده مصرف کننده رو با multi pascal بنویسم برای درس همروند
یه کم multi pascal بلدم ولی اصلا نمی فهمم این الگوریتم ها رو توی این زبان چه جوری پیاده کنم
اگه کسی نمونه ای داره یا بتونه راهنمایی کنه ممنون می شم.

whitehat
دوشنبه 10 دی 1386, 12:06 عصر
شاید بتوانید از این تاپیک (http://barnamenevis.org/forum/showthread.php?t=57969) ایده بگیرید
موفق باشید

empoly
دوشنبه 10 دی 1386, 18:40 عصر
دوست عزیز راهنمایی دوستمان می تواند راهگشای شما باشد ولی اگر کد این سوال را دقیقا با مالتی پاسکال می خواهید با ایمیل من تماس بگیرید تا خدمتتون عرض کنم که چه کارهایی می توانید بکنید و اگر وقت داشتم و لازم شد در همین تاپیک در باره ی این موضوع صحبت می کنم.
یه سوال هم از مدیر این بخش دارم:
ایجاد چنین تاپیکی مورد نداره؟ آخه موضوع پروژه ی دانشجویی در میان است. هر چند می توان مساله را آموزش نرم زبان قدیمی و صرفا آموزشی مالتی پاسکال دانست!!!
------------------------------------------
ایمیل
e.mollaahmadi@yahoo.co.uk

بلاگ :
نوشته های قبل از کنکور ارشد (http://blog.itpars.ir)

nima1364
سه شنبه 11 دی 1386, 06:22 صبح
دوست عزیز این تاپیک رو قبلا دیدم
ولی اینا دقیقا همون الگوریتم های کتابه که یه کم syntaxاونا عوض شده
فکر کنم با multi pascal تفاوت داشته باشه.
به هر حال ممنون

nima1364
چهارشنبه 12 دی 1386, 22:08 عصر
آقای employ
من براتون ایمیل زدم.لطف کنید اگه می تونید زودتر راهنماییم کنید
آخه من سه شنبه امتحان دارم:افسرده:

empoly
چهارشنبه 12 دی 1386, 22:56 عصر
دوست عزیز کامپایلری که استفاده می کنی همینه دیگه؟

کامپایلر (http://itpars.ir/blog/wp-content/uploads/2008/01/mpwwwitparsir.zip)

empoly
چهارشنبه 12 دی 1386, 23:08 عصر
یه سری برنامه به زبان مالتی پاسکال هم همراه کامپایلر هست شاید به درد بخوره!

اگر کامپایلرتون جدید تره قرار بده تا همه استفاده کنند هر چند بعید می دونم.

اگر تونستی خودت کد را بنویسی که هیچ (آسونه ) اگه نشد مشکلاتت را بپرس.

nima1364
جمعه 14 دی 1386, 11:00 صبح
بله کامپایلرم همینه ولی من تحت ویندوزش رو استفاده می کنم.راحت تره.
من برای تولید کننده مصرف کننده با بافر نامحدود یه چیزی نوشتم.البته از لحاظsyntax چکش نکردم هنوز.

فکر نمی کنم به این آسونی که من نوشتم باشه ولی شما مشکلاتشو بگید.




Program Producer_Concumer;

type
semaphor:channel of integer;

var
s,delay:semaphor;

procedure wait(var sem:semaphor)
var in:integer;
begin
in:= sem;
end;
procedure signal(var sem:semaphor)
begin
sem:=1;
end;
proceure producer;
begin
while 1 do
begin
product x;
wait(s);
n:=n+1;
buffer[n]:=x;
if n=1 then signal(delay);
signal(s);
end;
end;

proceure consumer;
var m:integer;
begin
wait(delay)
while 1 do
begin
wait(s);
x:= buffer[n];
n:=n-1;
m:=n;
signal(s);
consume x;
if m=0 then wait(delay);
end;
end;
begin
s:=1;
n:=0;
fork producer;
fork concumer;
end.

empoly
جمعه 14 دی 1386, 11:47 صبح
دوست عزیز اگر ممکنه همون کامپایلری را که استفاده می کنید قرار دهید.

nima1364
جمعه 14 دی 1386, 17:22 عصر
من این برنامه رو هنوز توی محیط ننوشتم.
فعلا دستی نوشتم.
تا همین حدش رو ببینید کجاش اشکال داره
ممنون میشم.

empoly
جمعه 14 دی 1386, 22:12 عصر
این چیزی که شما نوشته اید شبه کد هست پیشنهاد می کنم از آنجایی که این برنامه بزرگ نیست مستقیما کد برای آن بنویسید و البته آن را کامپایل کنید واین که اصرار دارم که کامپایلرتون را قرار دهید به این خاطر است که احتمالا کامپایلر سمافور داره و نیاز نیست اون را پیاده کنید( البته ممکن هم هست که نداشته باشه) من کدی را که به زبان c++ نوشته شده قرار می دم تا از اون ایده بگیرید ولی باز هم تاکید می کنم که حتما کامپایلرتون را قرار دهید تا بقیه اون را استفاده کنند.
این کد در لینوکس نوشته شده و کامپایل هم شده و مشکلی نداشته است.


5) #ifdef HAVE_CONFIG_H
6) #include <config.h>
7) #endif
8)
9) #include <iostream>
10) #include <cstdlib>
11) #include <pthread.h>
12) #include <stdio.h>
13) #include <malloc.h>
14) #include <pthread.h>
15) #include <semaphore.h>
16)
17)
18) using namespace std;
19)
20)
21) int counter;
22) #define MaxSize 200
23) int count_thread;
24)
25) char arr[MaxSize] ;
26) sem_t empty , full;
27) pthread_mutex_t l = PTHREAD_MUTEX_INITIALIZER;
28)
29) int random_range(unsigned const low, unsigned const high)
30) {
31) unsigned const range = high - low + 1;
32) return low + (int)(((double)range)*rand() / (RAND_MAX + 1.0));
33) }
34)
35) void* produce (void* unused)
36) {
37) //srand(time(NULL));
38) pthread_mutex_lock (&l);
39)
40) int r = random_range(0, 25) + 'a';
41) cout << "I produce character: '" << (char)r << "'\n";
42) arr[counter]=(char)r;
43) counter++;
44)
45) pthread_mutex_unlock (&l);
46)
47) return NULL;
48) }
49)
50) void* consume (void* unused)
51) {
52) counter--;
53) cout << "I consume character: '" << arr[counter] << "'\n";
54)
55) return NULL;
56) }
57)
58) int main ()
59) {
60) int type[MaxSize];
61)
62) pthread_t threads[MaxSize];
63) counter =0;
64) int count;
65) cout <<" size of buffer:";
66) cin >> count;
67) sem_init (&empty, MaxSize, MaxSize);
68) sem_init (&full, MaxSize, 0);
69)
70) cout << "number of threads:";
71) cin >> count_thread;
72)
73) cout << "Give type of threads('1' for producer and '0' for consumer):\n";
74) for (int i=0; i<count_thread; i++)
75) cin >> type[i];
76) int sw;
77) for (int i =0 ; i < count_thread ; i++)
78) {
79) if(type[i] == 0)
80) {
81) // consumer
82) sem_wait (&full);
83) pthread_create (&(threads[i]), NULL, consume, NULL);
84) pthread_join(threads[i],NULL);
85) sem_post (&empty);
86) }
87) else
88) {
89) sem_wait (&empty);
90) pthread_create (&(threads[i]), NULL, produce, NULL);
91) pthread_join(threads[i],NULL);
92) sem_post (&full);
93) }
94)
95) }//end of for
96)
97)
98)
99) return 0;
100) }

nima1364
یک شنبه 23 دی 1386, 16:07 عصر
این زبان multi pascal مشکلش اینه که اصلا سمافور نداره.
یه چند تا امکان استفاده از کانال و دستورات lock ,unlock و ... داره.
کسی می تونه تو پیاده سازی سمافورا توی این محیط کمک کنه؟

empoly
چهارشنبه 26 دی 1386, 12:31 عصر
خوب خودت براش درست کن!:چشمک:

من با C++ برات می نویسم :(شبه کد هست) ن تبدیل کردن به مالتی پاسکال و اجراش با خودت اگر مشکلت هم حل شد کد قابل اجرا را بزار تا بقیه استفاده کنند اگر هم نشد بگو .


struct semaphore
{
int count;
PQ Queue;
};

void Wait(semaphore s)
{
if (s.count > 0)
s .count =s.count -1;
else
s.PQ.insert();//block this process
}

void Signal(semaphore s)
{
if (s.PQ.empty())
s.count = s.count+1;
else
s.PQ.remove();
}

البته اونجاهایی که می خواهی count را تغییر بدی باید lock کنی.

nasrin13
پنج شنبه 02 دی 1389, 18:32 عصر
سلام
کسی میتونه درمورد نوشتن الگوریتمbuket sort با مالتی پاسکال به من کمک کنه؟؟؟
لطفا