PDA

View Full Version : سوالاتم درباره پاسکال



hercool
سه شنبه 23 مهر 1387, 15:13 عصر
سلام خدمت دوستان
خوب یه سوال درباره متغییر ها دارم
سوالم اینه که ایا میشه برای حقوق پایه بجای متغییرlongint از متغییر byte استفاده کرد و دقیقا منظور از این جمله دررابطه با این متغییر ها چیست که میگن(این مقدار را میپذیرند)و 1 بایت هستند؟
دقیقا می خوام بدونم دسته بندی متغییر ها به چه شکلی تشخیص داده میشه
مثلا اگه بخوایم جمعیت جهان رو حساب کنیم از چه متغییر استفاده کنیم و اگر بخوایم از یک ضریب استفاده کنیم از چه متغییری استفاده می کنیم

vcldeveloper
چهارشنبه 24 مهر 1387, 04:18 صبح
این اسامی نوع داده ایی که میخواید برای ذخیره مقدار در متغیر استفاده کنید، و اندازه آنها را مشخص می کنند. مثلا byte, integer, longint همگی از نوع داده عدد صحیح هستند؛ یعنی فقط اعداد صحیح (غیراعشاری) را می توانید در متغیرهایی که توسط یکی از اینها تعریف شدند، ذخیره کنید. ولی اندازه آنها در حافظه با هم فرق میکنه، مثلا byte فقط یک بایت حافظه اشغال میکنه، integer در پاسکال (نه در دلفی) 2 بایت (16 بیت) حافظه اشغال میکنه، longint هم 4 بایت (32 بیت) حافظه اشغال میکنه. از طرفی علامت دار بودن یا علامت دار نبودن یک نوع داده عددی هم مهم هست. علامت دار بودن یک نوع داده عددی یعنی اینکه آیا اون نوع داده میتونه مقادیر منفی هم قبول کنه، اما علامت دار نبودن آن یعنی اینکه اون داده نمیتونه مقدار عددی منفی قبول کنه. در کامپیوتر برای تعیین علامت منفی یا مثبت یک عدد از یک بیت استفاده میشه، پس اگر نوع داده ایی 32 بیت و علامتدار باشه، 31 بیت آن برای ذخیره عدد، و یک بیت آن هم برای ذخیره علامت عدد استفاده میشه، اما اگر نوع داده ایی 32 بیت و بدون علامت باشه، تمام 32 بیت آن برای ذخیره عدد استفاده میشه.
هر چه فضای مصرفی یک نوع داده بزرگتر باشه، عدد بزرگتری هم میشه در آن ذخیره کرد.مثلا نوع داده Byte که فقط یک بایت اشغال میکنه و بدون علامت هم هست، میتونه 2 به توان 8 عدد مختلف را در خودش ذخیره کنه، چون هر بایت 8 بیت هست، و هر بیت هم فقط میتونه صفر یا یک باشه. با این توضیح، نوع داده Byte میتونه فقط از 0 تا 255 را در خودش ذخیره کنه. اگر عدد شما بزرگتر از این مقدار باشه، با خطا مواجه میشید. نوع داده Integer که 2 بایت (16 بیت) اشغال میکنه، علامتدار هست، پس فقط میتونه 2 به توان 15 عدد مثبت یا 2 به توان 15 عدد منفی را در خودش ذخیره کنه (یعنی از -32768 تا 32767). نوع داده Word مثل Integer دو بایت از حافظه اشغال میکنه، ولی علامتدار نیست، پس میتونه 2 به توان 16 عدد مختلف را در خودش ذخیره کنه (یعنی از صفر تا 65535). بزرگترین نوع داده عدد صحیح در پاسکال نوع Comp هست که 8 بایت حافظه اشغال میکنه، یعنی از 9223372036854775809- تا 9223372036854775807.

به همین ترتیب انواع داده عددی در پاسکال تعریف میشند. شما باید برای محاسبات خودتان از نوع داده ایی استفاده کنید که محدوده محاسبات شما را پوشش میده، یعنی اگر مطمئن هستید که عدد شما همیشه کمتر از 255 هست، از Byte استفاده کنید، تا حافظه کمتری مصرف بشه. اگر اعداد شما بزرگ هستند، یا نتیجه محاسبه شما عدد بزرگی میشه، باید از نوع داده بزرگتری استفاده کنید. اگر هم نتیجه محاسبات اعشاری هست، باید از نوع داده های اعشاری استفاده کنید که آنها هم انواع مختلفی دارند.
البته بحث Optmization هم مطرح هست، مثلا در CPUهای 32 بیتی انتقال مقادیر با متغیرهای 32 بیتی سریعتر و بهینه تر انجام میشه، ولی شما الان نیازی به این مبحث ندارید، و بهتر هست عادت کنید که برای هر داده ایی از طرف مناسب آن استفاده کنید. ظرف شما اگر بیش از اندازه بزرگ باشد، حافظه را هدر میده، اگر هم کمتر از اندازه لازم باشه، موجب خطا میشه.

لیست این نوع های داده، علامتدار بودن یا نبودن آنها، محدوده عددی که پشتیبانی می کنند، و حافظه مصرفی شان در کتاب های پاسکال، و راهنمای پاسکال موجود هست. برای داده های عدد صحیح، می تونید در راهنمای پاسکال عبارت Integer را جستجو کنید.

hercool
چهارشنبه 24 مهر 1387, 10:02 صبح
ممنون بابت پاسختون اقا علی
سلام خدمت دوستان
مشکل این کد چی هست؟


program test;
var
a,b:integer;
if a>b then
begin
writeln(a);
end
else
writeln(b);
end.

vcldeveloper
پنج شنبه 25 مهر 1387, 02:12 صبح
مشکلش اینه که اولا بعد از تعریف متغیر، کدها داخل بلوک Begin-End قرار نگرفتند، و ثانیا متغیرها هیچ مقداری ندارند که با هم مقایسه بشند. در زمانی که شرط if اجرا میشه، هر دو صفر هستند، پس همیشه بخش else اجرا میشه.


program Test;
var
a,b : integer;
begin
write('Enter A: ');
readln(a);
write('Enter B: ');
readln(b);
if a>b then
writeln(a)
else
writeln(b);
end.

hercool
جمعه 26 مهر 1387, 17:19 عصر
شاید هم مشکل من همین هست که جوابی برام نمیاد و فقط می نویسه قابل کامپایل شدن هست و نتیجه را نمی تونم ببینم میشه بگید باید کجا مقدار به a بدم

vcldeveloper
جمعه 26 مهر 1387, 17:23 عصر
وقتی برنامه اجرا شد، پیغام Enter A: برای دریافت مقدار a و Enter B: برای دریافت مقدار b ظاهر میشه. بعد از اون هم مقدار بزرگتر را نمایش میده.

برای اینجور سوالات و آشنایی با خودِ محیط توسعه Turbo Pascal و چگونگی کامپایل و اجرای برنامه، بهتر هست که حتما یک کتاب آموزش Turbo Pascal تهیه کنید. اینطور سوالات از اولیه ترین مسائلی هستند که در اینگونه کتاب ها توضیح داده میشند.

hercool
پنج شنبه 07 آذر 1387, 10:59 صبح
با سلام
من دقیقا منظور طول میدان رو نمیگیرم هر چی کتاب رو می خونم از طول میدان سر در نمیارم میشه یکی از دوستان توضیح بده؟
و من با کامپایل کردن برنامه مشکل دارم دکمه کامپایل رو میزنم ولی نتیجه کار رو نشون نمیده و فقط موفقیت کامپایل رو اعلام میکنه کسی از دوستان میتونه کمک کنه

Mohammad_Mnt
پنج شنبه 07 آذر 1387, 17:36 عصر
عجب ترجمه ی مسخره ای!
اگه درست فهمیده باشم منظورش طول فیلد یا متغیر است و نشان دهنده ی مقدار حافظه ای است که اون متغیر اشغال می کنه.
این قسمت را دوباره بخونید:

ین اسامی نوع داده ایی که میخواید برای ذخیره مقدار در متغیر استفاده کنید، و اندازه آنها را مشخص می کنند. مثلا byte, integer, longint همگی از نوع داده عدد صحیح هستند؛ یعنی فقط اعداد صحیح (غیراعشاری) را می توانید در متغیرهایی که توسط یکی از اینها تعریف شدند، ذخیره کنید. ولی اندازه آنها در حافظه با هم فرق میکنه، مثلا byte فقط یک بایت حافظه اشغال میکنه، integer در پاسکال (نه در دلفی) 2 بایت (16 بیت) حافظه اشغال میکنه، longint هم 4 بایت (32 بیت) حافظه اشغال میکنه.

hercool
جمعه 08 آذر 1387, 16:36 عصر
با سلام
من دقیقا منظور طول میدان رو نمیگیرم هر چی کتاب رو می خونم از طول میدان سر در نمیارم میشه یکی از دوستان توضیح بده؟
و من با کامپایل کردن برنامه مشکل دارم دکمه کامپایل رو میزنم ولی نتیجه کار رو نشون نمیده و فقط موفقیت کامپایل رو اعلام میکنه کسی از دوستان میتونه کمک کنه

ممنون بابت پاسختون من در این پست یک فایل ضمیمه کردم مشکلم 2 موضوع است در اینجا میگه اگر شماره 12 بدیم درخروجی 12رو به عنوان عدد زوج میده ولی وقتی من این کار را میکنم هیچ کاری رو انجام نمیده میشه یکی کمک کنه ؟و درباره کامپایل برام توضیح بده من موندم؟

hercool
شنبه 09 آذر 1387, 18:24 عصر
من لینک ها رو گشتم کسی میتونه یه کامپایلر بزاره برام دانلود کنم

Mohammad_Mnt
شنبه 09 آذر 1387, 18:59 عصر
این خط را قبل از .end اضافه کن:

Sleep( 4000 );

hercool
یک شنبه 10 آذر 1387, 12:24 عصر
این کار را کردم ولی مشکل داره
ممکنه مشکل از کامپایلر من باشه؟

mafazel
یک شنبه 10 آذر 1387, 12:54 عصر
سلام دوست عزیز
کامپایلر تون مشکل نداره. فایل برنامه تون رو هم دیدم هیچ مشکلی نداره. خودتون در یکی از پستهای قبلی گفتید که موفقیت آمیز بودن کامپایل رو اعلام می کنه. حالا باید برنامه تون رو اجرا (Run) کنید تا نتیجه اش رو ببینید. (تا اونجایی که یادم هست توی پاسکال F9 برنامه رو کامپایل و Ctrl+F9 برنامه رو اجرا میکنه.)
البته اسم فایل برنامه تون رو همون کلمه ای بدید که جلوی کلمه program میدید. الان اسم فایلتون if.pas است ولی اسم برنامه تون te2 است. بنابرین اسم فایلتون رو هم te2.pas بگذارید.
در کل از کلمات رزرو مثل if توی اسامی استفاده نکنید.
در دستور آخر هم بجای عبارت ;(Sleep(4000 عبارت ;Readln بگذارید که پس از نمایش نتایج منتظر زدن کلید Enter بشه و بعد از زدن اون به محیط پاسکال برگرده.

hercool
چهارشنبه 13 آذر 1387, 17:52 عصر
سلام این کار را هم کردم ولی کاری نکرد میشه نگاه کنید فایل رو

mafazel
پنج شنبه 14 آذر 1387, 07:21 صبح
دوست عزیز همونطور که گفتم برنامه تون هیچ مشکلی نداره.
بیشتر از این توی این سایت به جواب نمی رسید. یکنفر رو نزدیک خودتون پیدا کنید که با پاسکال آشنا باشه، ببریدش کنار کامپیوتر و مشکل اجرای برنامه رو براش توضیح بدید.

hercool
شنبه 07 دی 1387, 21:13 عصر
سلام خدمت دوستان
چند سوال درباره عملگر های منطقی و بیتی داشتم
اول ایا فرقی بین این دو عملگر ها هست یعنی مثلا and در عملگر های منطقی با and در عملگرهای بیتی داره؟(و به همین منوال در بقیه عملگر های مشترک)
دوم اینکه اگر در عملگر and را در یک برنامه داشته باشیم این عملگر تقدم کدام ارزش رو بیشتر داره منظورم اینه که غلط یا درست
برای مثال
(3>5) and (7<8)=f
و به همین منوال در در دیگر عملگر ها
برای مثال چنین عبارتی دارای چه ارزشی است؟
not (((3-4 mod 3)<5) and ((6 div 4)<>3))
لطفا مراحل محاسبه این رو بگید و ارجحیت با کدوم است کتاب رو خواندم ولی در شکم بنابراین سوال کردم که مشکلم حلشه
ممنون

vcldeveloper
شنبه 07 دی 1387, 23:58 عصر
چند سوال درباره عملگر های منطقی و بیتی داشتم
سعی نکنید همه سوالاتتان را در یک تاپیک بپرسید. برای هر سوال یک تاپیک جدید با عنوان مناسب ایجاد کنید، و سوال را در آن مطرح کنید.

موفق باشید

hercool
یک شنبه 08 دی 1387, 08:08 صبح
علی اقا مقصود من این بود که از تکثر تاپیک ها خود داری کنم حالا که اینجور می فرمایید چشم
ممنون

hercool
یک شنبه 08 دی 1387, 19:36 عصر
در اینجا یه سوال رو مطرح می کنم من تونستم به کمک شما دوستان عزیز run کنم فایل های رو که می نویسم اما
::::
من باید در هر فایلم یک گزینه readln داشته باشم تا بتونه کامپایل و run بشه و بعد از run دیگه بر نمیگرده و راه خروجی نداره میشه یکی اموزش خروج رو بده و همین طور چرا باید اینجوری باشه با اینکه در کتاب چنین چیزی نوشته نشده
ممنون