-
January 14th, 2010, 13:25
#1
کی پاسکال بلده ؟
سلام
از دوستانی که پاسکال بلدند برای کمک به جمعی از دانشجویان دعوت به عمل می آید 
والا امروز یکی از دوستانی که باهاش رودرواسی داشتم باهام تماس گرفت و گفت که تو درسش نمره کم داره و اگه این پروژه رو ببره نمره قبولی رو میاره. ما هم حس جوانمردیمون گل کرد و گفتیم یه کاریش میکنیم برات و از دوستامون میپرسیم ... 
ایشونم پر رو شد و گفت دمت گرم حالا که اینکار و میکنی چهار تا تغییر بده توش و چهار تا پروژه بده تا به بقیه دوستامم بدم 
اصل پروژه اینه که هر string به ورودی دادیم اون رو تفکیک کنه و بعد هم حساب کنه اون رو (عبارت ریاضی)
مثلا:
sin(90)+cos(0)-25*80
رو بتونه حساب کنه ... رایکال و رگاریتم و توان و مابقی چیزها هم بتونه حساب کنه !!
اما گفت از متعلقاتش فاکتور بگیر و یه چیزی بنویس که بتونه چهار عمل اصلی رو حساب کنه !
یعنی
25*66/456+36-55
رو حساب کنه کافیه !!!! بعد گفت اگه اینم سخته یه چیزی رو بنویس که دو تا عدد رو بتونه روش عملهای اصلی رو انجام بده هم کافیه !!!
یعنی مثلا
445*5656
انجام بده کافیه...
حالا از دوستان اگه کسی میتونه نحوه کار رو بگه من خودم شاید بتونم یکاریش بکنم...
اگر هم بتونه بنویسه که دیگه خیلی خیلی بهتر میشه...
فکر کنم بهترین روش هم postfix باشه ؟
حالا یه خیری پیدا بشه و مددی برسونه این چهار نفر نمره بگیرن
-
-
January 14th, 2010 13:25
# ADS
-
January 14th, 2010, 16:40
#2
عضو انجمن
-
تعداد تشکر ها از RezaFH به دلیل پست مفید
-
January 14th, 2010, 21:09
#3
پاسخ : کی پاسکال بلده ؟
اولویت بندی کردم دیگه !
اگه کسی اولی رو بتونه بگه چجوریه که خیلی عالی میشه !
دومی بگه بازم خوبه !
سومی هم بگه کار راه انداز هست !
-
-
January 14th, 2010, 22:51
#4
عضو انجمن
پاسخ : کی پاسکال بلده ؟
والا من پاسکال بلد نیستم!
اما برای منطق برنامه میتونم راهنماییتون کنم
اول از همه ورودی رو میگیرید و میریزید تو یه رشته!
در مرحله دوم این رشته رو تفکیک میکیند یعنی عددها رو از بقیه چیزها جدا میکنید و میریزید تو یه آرایه!
تفکیک عدد از بقیه چیزها هم که کاری نداره! تو رشته میرین جلو و هی تا جایی که رقم هست در 10 ضرب میکنید با رقم جدید جمع میکنید تا برسید به جایی که رقم نیست!
یه مثال بزنم:
مثلا ورودی بوده
خوب اینجا اول پذرانتز باز رو می خونید که چون رقم نیست میریزیدش تو یه خونه آرایه بعد 5 رو میخونید که عدد هست و میریزیدش تو یه متغیر، بعد 2 رو میخونید که رقم هست، 5 رو در 10 ضرب میکنید و با 2 جمع میکنید و دوباره تو همون متغیر نگه میدارید. حالا علامت + رو میخونید که چون رقم نیست، 52 رو تو یه خونه آرایه میریزید و + رو تو یه خونه و به همین ترتیب ادامه میدید، آخر سر تو یه آرایه عددها و عملگرها رو جدا جدا دارید. اگه بخواید سینوس و اینا هم حساب کنه این مرحله یه خورده طولانی تر میشه ولی اونم خیلی سخت نیست.
خوب حالا که عملوندها و عملگرها تفکیک شدند، باید حساب کنید و اینجا هست که باید اولویت عملگرها و پرانتز رو لحاظ کنید!
خوب برای راحت تر شدن محاسبه باید فرم میانوندی یا همون اینفیکس رو به postfix تبدیل کنید که الگوریتمش به صورت زیر هست:
1- عبارت infix رو از چپ به راست پیمایش میکنیم(از اول آرایه به آخرش)
2- پرانتزهای سمت چپ (پرانتز باز) رو تو استک پوش میکنیم
3- هنگامی که به یک عملوند میرسیم آن را در یک صف مینویسیم.
4- هنگامی که به یک عملگر میرسیم آنگاه عملگرهای بالای استک را که دارای اولویتی یکسان یا بالاتر از آن هستند پاپ میکنیم و در صف میریزیم و سپس عملگر را در استک پوش میکنیم
5- هنگامی که به پرانتز سمت راست (پرانتز بسته) میرسیم آنگاه عملگرهای بالای استک را پاپ کرده و در صف میریزیم تا زمانی که به پرانتز سمت چپ استک برسیم و آن را پاپ میکنیم.
اینجا اگه بخوای کلاس بزاری می تونی صف رو چاپ کنی که معلوم بشه فرم postfix رو حساب کردی!
خوب بعد از به دست آوردن فرم postfix کار محاسبه آسون هست و باید از سر صف عملوند ها رو برداری تا برسی به عملگر، بعد عملگر رو اعمال کنی و نتیجه رو دوباره بزاری سر صف! پرانتزی هم که نمونده! آخر دست نتیجه به دست میاد! البته میشه مستقیم هم محاسبه کرد، الگوریتم مستقیمش شبیه همین هست الان دقیقش یادم نمیاد!
نکته:
1- اگه منفی تک عملوندی داری (منفی که عدد رو منفی میکنه!) باید علامت خاصی براش تعریف بشه و ...
2- سینوس و اینا رو هم بخوای بزاری یه خورده سخت تر میشه!
3- امیدوارم تونسته باشم توضیح بدم! کد سی این رو یه زمانی به عنوان تکلیف داشتیم، اما پیداش نکردم که براتون بزارمش!
4- اینم یه نمونه ساده از کار کرد برنامه!
کد:
vorudi: ((52+34)*(23+34))
tabdil be araye:
( ( 52 + 34 ) * ( 23 + 34 ) )
tabdil be postfix:
saf: 52 34 + 23 34 + *
mohasebat: saf:52 34 + 23 34 + *
a)52+34=86 saf:86 23 34 + *
b)23+34=57 saf:86 57 *
c)57*86=4092 saf:4092
khoruji=4092
-
تعداد تشکر ها ازMohsen به دلیل پست مفید
-
January 14th, 2010, 23:12
#5
پاسخ : کی پاسکال بلده ؟
توضیحاتت دقیق بود تسنیم جان...
اون برنامه که میگی داشتی به زبان سی رو اگه بیزحمت بتونی بذاری خیلی خوب میشه...
٫
rezafh2 جان نتیجه چه شد؟
-
-
January 14th, 2010, 23:35
#6
عضو انجمن
پاسخ : کی پاسکال بلده ؟
متاسفانه پیداش نکردم!
شما میخوای همون حالت سوم رو فعلا براشون بنویس چون خیلی آسون هست و هیچ کدوم اون کارا رو نمیخواد! بعد اگه رسیدی و شد اون دو حالت رو بهش فکر کن!
تو حالت سوم، شما فقط باید دو تا عدد و عملگر رو تشخیص بدی و اون عملگر رو روش اعمال کنی! دیگه اولویت و تبدیل و اینا نمیخواد!
حالا من بازم میگردم رو هاردم رو، ولی اون جایی که باید میبود، نبود، بعید میدونم جای دیگه باشه.
-
تعداد تشکر ها از Mohsen به دلیل پست مفید
-
January 15th, 2010, 00:00
#7
پاسخ : کی پاسکال بلده ؟
والا منطق کار برنامه رو میدونم اما چجوری به زبان ماشین ترجمه کنم که این بیچاره بفهمه رو قاطی کردم...
-
-
January 15th, 2010, 00:10
#8
عضو انجمن
پاسخ : کی پاسکال بلده ؟

نوشته اصلی توسط
Sajad
والا منطق کار برنامه رو میدونم اما چجوری به زبان ماشین ترجمه کنم که این بیچاره بفهمه رو قاطی کردم...
زبان ماشین! اسمبلی که منظورتون نیست؟!؟ فکر کنم منظورتون همون نوشتن برنامه هست!
خوب پاسکال که شیگرا نیست! مثل c تابع مینویسند دیگه!
برای هر کدوم از اون کارا یه تابع بنویسید!
مثلا یه تابع برای تبدیل رشته ورودی به آرایه
یه تابع برای تبدیل آرایه به حالت postfix و به همین ترتیب
به تابعهای پاسکال البته فکر میکنم میگن پروسیجر! و مقداری هم که بر میگردونند با متغییری هست که هم نام تابع هست، return و اینا ندارند! (هیچی c نمیشه!)
بگذریم! تابعها رو هر چقدر کوچیک تر کنید فهمیدن برنامه آسون تر میشه! یه مقدار سواد اولیه البته میخواد که اگه ندارن، شما بی خودی داری خودت رو اذیت میکنی!
-
تعداد تشکر ها از Mohsen به دلیل پست مفید
-
January 15th, 2010, 00:45
#9
عضو انجمن
پاسخ : کی پاسکال بلده ؟
منظورم این بود که میشه یه چیز دیگه هم نوشت ؟
دومی و سومی ساده هستن
بذارید من مثال بنویسم :
برنامه ای که 10 عدد صحیح را بگیرد و در آرایه ها ذخیره کند . سپس تعداد اعداد زوج را نمایش دهد ! 
روال نوشتن برنامه به این شکل هست :
کد:
program t1;
var
i,m:integer;
no:array[1..10] of integer;
begin
writeln ('please enter your numbers :')
for i:= 1 to 10 do
readln (no [i] mod 2=0 then
m:=m+1;
writeln (' teedAde aadAde zooj =')
end.
در اینجا وقتی ورودی ها گرفته میشن ، در آرایه ها ذخیره میشن
مثلا :[no[1 میشه عدد اول و بعد فراخوانی میشه و توی کارهای بعدی استفاده میشه
راستش امتحان دارم و نمیرسم بشینم بنویسم
اگه وقت هست بگید ، فردا صبح مینویسم
-
-
January 15th, 2010, 00:57
#10
پاسخ : کی پاسکال بلده ؟
به functionهای پاسکال نمیگن procedure. هر کدومشون یه چیز جدا هستند.
که البته فانکشن رو به صورت پروسیجر هم میشه نوشت...
کار نداریم.
من خودم صبح یه کارایی خواستم بکنم اما قاطی کردم 
اولین کاری که کردم بعد از گرفتن رشته و اندازه گرفتن طول اون شروع کردم به verify کردن تک تک اون ...
یعنی چک کردم که اون استرینگ شامل اعداد ۰..۹ باشه و یا اپراتورهای × ÷ − + باشه و اگه چیز دیگه ای هست اخطار بده !
اگر استرینگ بدین صورت بهش میدادیم sfsfgsggs خطا میگرفت اگر 2232+2323 میدادی خطا نمیگرفت.
اما یه مشکلی داشت که اگر 3243ddf232+3434 هم بهش میدادی خطا نمیگرفت
در حالی که ddf وقتی اون وسط هست باید خطا میداد ؟
---------- Post added at 12:57 AM ---------- Previous post was at 12:48 AM ----------

نوشته اصلی توسط
rezafh2
منظورم این بود که میشه یه چیز دیگه هم نوشت ؟
دومی و سومی ساده هستن
بذارید من مثال بنویسم :
برنامه ای که 10 عدد صحیح را بگیرد و در آرایه ها ذخیره کند . سپس تعداد اعداد زوج را نمایش دهد !
روال نوشتن برنامه به این شکل هست :
کد:
program t1;
var
i,m:integer;
no:array[1..10] of integer;
begin
writeln ('please enter your numbers :')
for i:= 1 to 10 do
readln (no [i] mod 2=0 then
m:=m+1;
writeln (' teedAde aadAde zooj =')
end.
در اینجا وقتی ورودی ها گرفته میشن ، در آرایه ها ذخیره میشن
مثلا :[no[1 میشه عدد اول و بعد فراخوانی میشه و توی کارهای بعدی استفاده میشه
راستش امتحان دارم و نمیرسم بشینم بنویسم
اگه وقت هست بگید ، فردا صبح مینویسم
ظاهرا فقط همین رو میشه نوشت که همه گفتن یه برنامه بنویسم دیگه
اگه دلخواهی بود همشون اینو نمیگفتن . راست راست هم کلیک نمیکردن رو این !
از لحاظ وقت مشکلی نیست تا شنبه صبح وقت دارن ببرن...
من خودم کلا با حل مسائل ریاضی مشکل دارم چه برسه برنامه ای بخوام بنویسم که عبارت ریاضی رو حل کنه
-