PDA

View Full Version : متناظر این دستورات سی تو پاسکال چیه؟



benyamin_pc
شنبه 19 خرداد 1386, 17:07 عصر
پاس دادن یه عدد صحیح به تابع و فراخوانی تابع
پاس دادن یه آرایه یه بعدی دو بعدی یا .. به یه تابع و فراخوانی تابع
ایجاد یه متغییر توسط یه اشاره گر و فضا دهی به آن به صورت داینامیک malloc :: و تبدیل اون به یه آرایه و صدا زنی آن آرایه به صورت--> *(p + 2)==p[2]
پاس دادن یه اشاره گر عددی یا رشته ای یا اشاره گر یا آرایه ای به تابع و فراخوانی آن تابع
ایجاد یه ساختمان و مقدار دهی اولیه و در حین برنامه به آن
ایجاد آرایه ای از ساختمان ها
متناظر
struct a{
}b;
struct a *b;
------
p=&b;
p->b

باز کردن فایل به طورت خواندنی یا نوشتنی که از قبل بوده یا نبوده
خواندن یا نوشتن کارکتری یا رشته ای از یا در فایل
متناظر rewind()
متناظر remove()
متناظر fseek()
متناظر fflush()
متناظر کارکتری پایانی که در سی آخر فایل را با آن می توان تشخیص داد یعنی EOF در پاسکال؟
با تشکر

mozdour
یک شنبه 20 خرداد 1386, 13:06 عصر
EOF در پاسکال همون در eof می باشد
منظورت از پاس دادن چیه؟

benyamin_pc
یک شنبه 20 خرداد 1386, 21:03 عصر
کسی نیست؟؟؟؟؟؟؟؟؟
پاس دادن یعنی ارسال یعنی یه عدد یا یه آرایه به تابع ارسال شه و تابع باهاش کار کنه

mozdour
دوشنبه 21 خرداد 1386, 14:33 عصر
تابع جمع زدن در C:
int plus(int a,int b)
{
return a+b;
}

در پاسکال:
function plus(a,b : integer):integer;
begin
plus:=a+b;
end;
امیدوارم مشکلت حل بشه

benyamin_pc
دوشنبه 21 خرداد 1386, 17:06 عصر
تو سی اگه تابع بعد از main تعریف شه باید یه شکل کلی از تابع قبل از main تعریف شه
تو پاسکال همچین چیزی نداریم؟
بقیه سوال ها رم هر کی می دونه لطف کنه بگه ممنون می شم

magicsara
جمعه 25 خرداد 1386, 10:51 صبح
کل تابع رو قبل از main و بعد از program ... تعریف کن:

program test;
type
a:array[1..100] of integer;
function f(var p:a; var m:integer) : integer;
var k:integer;
...
...other variable........
begin
......codes...
f:=k;
end;

امیدوارم موفق باشی.

benyamin_pc
جمعه 25 خرداد 1386, 12:51 عصر
ممنون اما اگه بقیه دستورارم یه حالی بدین ممنون می شم

benyamin_pc
دوشنبه 28 خرداد 1386, 16:09 عصر
کسی نیست اینجا پاسکال خوب بلد باشه؟اگه فرومی برای پاسکال میشناسین بگین لطفا"

someCoder
دوشنبه 28 خرداد 1386, 16:36 عصر
اینو یه نگاهی بکن: http://en.wikipedia.org/wiki/Pascal_(programming_language)#Data_structures

sm_hossein
دوشنبه 28 خرداد 1386, 19:02 عصر
فراخوانی تابع و پروسیجر (پروسیجر=تابع بدون خروجی(void)) در پاسکال شبیه به C هست، فقط اگه تابع یا پروسیجر ورودی نداشته باشن، پرانتز بازوبسته نباید بذاری. مثلاً:



function Pi:real;
begin
Pi := 3.141592;
end;
procedure WritePi;
begin
writeln(Pi);
end;
begin
WritePi;
end.

پاس کردن عدد به تابع، به دو صورت پاس کردن با مقدار (call by value) و یا پاس کردن با مرجع انجام میشه. توی دومی فقط کافیه یک var قبل از تعریف متغیر بذاریم. مثلاً:



procedure valu(a,b:integer;c:real);
procedure ref(var a,b : integer;var c:real);
procedure refval(var a : integer;b : integer;c:real);

توی مثال اولی همه ی متغیرها با مقدار فراخوانی شدن، توی دومی همه با مرجع و توی سومی a با مرجع و b,c با مقدار.
خروجی تابع توی پاسکال نمی تونه یه مرجع یا یک آرایه یا یک ساختمان باشه و فقط می تونه یک مقدار ساده مثلاً یک عدد یا یک اشاره گر باشه.
آرایه ی یک بعدی رو به دو روش میشه به یک تابع یا پروسیجر پاس کرد. روش اول اینه که موقع تعریف تابع، اندازه ی آرایه رو مشخص نکنی و فقط بنویسی:


procedure p(a : array of integer);

و اگر اندازه ی آرایه ی n خونه باشه، مستقل از اینکه شماره خونه های آرایه ی a از چند تا چند تعریف شده باشه، توی تابع شماره ی خونه ها از صفر تا n-1 میشه. اینجا بر خلاف C آرایه ها اشاره گر نیستن و اگه بخوای مقدارشون رو توی تابع عوض کنی و به بیرون تابع بفرستی باید قبل از تعریف آرایه var بذاری و اگه نذاری فراخوانی با مقدار صورت میگیره.
روش دوم که باهاش می تونی هم آرایه ی یک بعدی و هم چند بعدی رو به تابع بفرستی استفاده از قسمت type. اینطوری:



type myArray1 = array [1..10] of integer;
myArray2 = array[1..10, 1..5, 1..7] of real;
procedure P(a:myArray1;var b : myArray2);


فقط باید دقت کنی که آرایه هایی که به تابع پاس می کنی باید حتماً اینطوری تعریف شده باشن:




var
a1 : myArray1;
a2 : myArray2;
begin

...

P(a1, a2);
end.








تعریف یک ساختمان توی قسمت type به اینصورت:



type
myRec = record
a, b : integer;
c:real;
end;



;end مربوط به record است نه پایان قسمت type.


معادل با:



struct myRec{
int a, b;
float c;
};



مقدار اولیه دادن به ساختمان در قسمت ثابت ها صورت میگیره که البته به این معنا نیست که دیگر نمیشه رکورد رو تو برنامه تغییر داد:




const
r : myRec = (a:5;b:7;c:5.5);



مقدار دادن در برنامه :




var
r1 : myRec;
begin
r1.a := 1;

r1.c := 3.14;

r.a := 10;
end.





r در بالا در قسمت const تعریف شده بود.


تعریف فایل در پاسکال به یکی از سه صورت زیر می تونه باشه، که اولی فایل متنی و بقیه به صورت باینری تعریف میشن :




var

f1 : text;

f2 : file of integer; {a type : char, real, ..., user defined type}
f3 : file;






نسبت دادن یک متغیر فایل به یک آدرس با دستور Assign صورت میگیره :





Assign (f2, 'c:\a.txt');





دستور Rewrite یک فایل رو در صورت عدم وجود می سازه و در صورت وجود اون رو پاک میکنه و یک فایل خالی درست می کنه و اگر فایل متنی باشه به صورت فقط نوشتنی باز می شه.
دستور Append فقط برای فایل های متنیه و فایل را به صورت فقط نوشتنی باز می کنه و در انتهای فایل برای نوشتن قرار می گیره. اگر فایل وجود نداشته باشه با خطا روبرو می شه.
دستور reset برای فایل های متنی، فایل رو به صورت فقط خواندنی باز می کنه و در ابتدای فایل قرار می گیره. اگر فایل وجود نداشته باشه با خطا روبرو می شه.
خواندن و نوشتن با دستورات read و write (برای فایل های متنی readln و writeln هم هست) صورت میگیره. اگر بخواهی کاراکتر یا رشته از فایل بخونی باید فایل رو اینطوری تعریف کنی :



var
f1 : file of char;
f2 : file of string;


و اینطوری از توش بخونی:



var
c : char;
begin
assign(f1,'c:\a.txt');
reset(f1);
read(f1,c);
end.


پایان فایل رو با تابع eof میشه فهمید. مثلاً:



while (not eof(f2))...


معادل ()rewind تو پاسکال نمی دونم چیه ولی می تونی از دستور (seek(f2,0 استفاده کنی. معادل ()remove تو پاسکال (erase(f1 که باید f1 قبل از این دستور بسته شده باشه. معادل fseek همون seek که برای فایل های باینری و معادل fflush هم Flush که فقط فایل متنی ورودی می گیره.
توی پاسکال بعد از .end هیچ چیزی خونده و کامپایل نمی شه ولی میشه یک تابع را به صورت forward تعریف کرد، یعنی اینکه این تابع قراره بعداً تعریف شه. مثلاً:



procedure A(i:integer);forward;
procedure B;
begin
...
A(10);
end;
procedure A(i:integer);
begin
...
B;
end;