View Full Version : چطوری میشه برنامه به طور اتوماتیک متغیر تعریف کنه(پاسکال)
dezchilds
شنبه 19 اردیبهشت 1388, 15:52 عصر
سلام دوستان من این برنامه رو با پاسکال نوشتم
program miangin;
var
a1,b1,c1,d1,e1,f1:integer;
begin
writeln('tedade adad ke mikhahid mohasebe shavand ra vared konid'); readln(a1);
b1:=0;
for c1:=1 to a1 do
begin
b1:=b1+1;
writeln('enter number',b1); readln(d1);
e1:=a1+...;
end;
readln;
end.
در خط ده میخوام به طور خودکار به تعداد اعدادی که کاربر وارد وارد میکنه متغیر تعریف بشه مثلآ a1,a2,... و بعد در خط 12 تعداد متغیرها رو باهم جمع کنه چطوری میشه این کار کرد ؟ لطفآ به ساده شکل ممکن توضیح بدید
mossaferin
شنبه 19 اردیبهشت 1388, 18:28 عصر
برای این منظور باید از آرایه ها استفاده کنی ،
var
i:array of integer;
این طوری متغییر با نوع مشخص ولی با طول نامشخص تعریف میکنم
بعد با استفاده از دستورات زیر طول آنرا تغییر میدیم
setlength(i,10);
در واقع الان ما یه آرایه دارم به نام i ، از نوع integer و با طول 10 (اندیس) که دسترسی به آن شبیه آرایه های دیگه س
length(i)
این دستور نیز طول آرایه مارا بر میگردونه که با توجه به سوال شما میشه ازش اینجوری استفاده کرد
setlength(i,length(i)+1)
در واقع با هربار فراخوانی این کد ، یک اندیس به آرایه ما اضافه خواهد شد
موفق باشی
در این مورد توی سایت مطلب زیاد هست بیشتر سرچ کن
navid_8x
یک شنبه 20 اردیبهشت 1388, 04:46 صبح
استفاده از لیست پیوندی بهترین راهه.
dezchilds
یک شنبه 20 اردیبهشت 1388, 13:09 عصر
سلام دوست من نمیشه این برنامه رو با حلقه های while یا for نوشت ؟
merced
یک شنبه 20 اردیبهشت 1388, 23:36 عصر
شما ضمن دريافت اطلاعات مي توني اونا رو با هم جمع بزني اين كد تا زماني كه صفر وارد نكرده ايد اعداد ورودي رو با هم جمع مي كنه
var inp , sum : integer ;
..
repeat
readln(inp) ;
sum := sum + inp
until inp = 0
writeln('sum : ' + sum )
dezchilds
دوشنبه 21 اردیبهشت 1388, 19:44 عصر
سلام دوست من, من هنوز ترم اولم و معنی این کد شما رو نفهمیدم چون هنوز نخوندیمش اگه میشه یه توضیحی بدید ممنون میشم
Sundown
دوشنبه 21 اردیبهشت 1388, 21:29 عصر
سلام دوست من, من هنوز ترم اولم و معنی این کد شما رو نفهمیدم چون هنوز نخوندیمش اگه میشه یه توضیحی بدید ممنون میشم
ببنید کدی که دوستومون گذاشتن به این معنا هست که مثلا من از شما بخوام یک سری عدد به من بدهید و من هر عددی که از شما میگیرم را با حاصل جمع اعداد قبلی جمع کنم و حاصل را در حافظه خود بسپارم و این کار را ادامه دهیم تا زمانی که شما عدد صفر را به من تحویل بدهید. و در نهایت جواب را به شما برگردانم.
موفق باشید
Felony
دوشنبه 21 اردیبهشت 1388, 21:32 عصر
سلام دوست من, من هنوز ترم اولم و معنی این کد شما رو نفهمیدم چون هنوز نخوندیمش اگه میشه یه توضیحی بدید ممنون میشم
کدی که دوستمون براتون گزاشتن به این شکل هست :
در خط اول متغییرهای inp و sum ار نوع عدد صحیح تعریف شدن
var inp , sum : integer ;
کلمه ی کلیدی Repeat یک حلقه ی تکرار هست که تا برقرار شدن صحت یک شرط یک عمل خاصی رو انجام میده
repeat
readln(inp) ;
sum := sum + inp
until inp = 0
در اینجا در هر بار متغییر inp با مقدار وارد شده توسط شما مقدار دهی میشه و مقدارش با متغییر Sum جمع میشه و جواب این عملیات در خود متغییر sum ذخیره میشه .
در خط آخر هم until به معنای " تا زمانی که " هست و در اینجا شرط خاتمه ی حلقه ی تکرار ( Repeat ) میباشد و هر دفعه که حلقه میچرخه چک میکنه ببینه عدد وارد شده توسط کاربر 0 هست یا نه اگر نبود به کار حلقه ادامه میده ولی اگر مساوی 0 بود شرط برقرار میشه و از حلقه خارج میشه .
dezchilds
سه شنبه 22 اردیبهشت 1388, 00:28 صبح
سلام این جوری نمیشه آخه سوال اینه (برنامه ای بنویسید که چند عدد از کاربر بگیرد و میانگینشونو به دست بیاره ) من اصل برنامه رو نوشتم و 4 تا عدد میگیرم و تقسیم بر 4 میکنم ولی مثلآ شاید کسی میخواست 10 عدد یا بیشتر بده برای این کار چی باید بکنم مثلآ من میخوام از کاربر بپرسم چندتا عدد میخوای وارد کنی و به تعداد اون متغیر تشکیل بشه مثلآ a1 , a2 , a3 الی آخر و هر کدوم از این متغیر ها هم یه readln(a1) و عددی وارد بشه توسط کاربر سپس عدد ها رو جمع کنه و تقسیم بر تعداد متغیرها بکنه توی برنامه خودم هم که اولش گذاشتم یه نمونه اش رو گذاشتم ولی هوشمند نیست میخوام اینو کامل کنم دوستان خاهشآ سریعتر چون باید فردا ساعت 12 تحویل بدم
vcldeveloper
سه شنبه 22 اردیبهشت 1388, 03:36 صبح
این طوری متغییر با نوع مشخص ولی با طول نامشخص تعریف میکنم
بعد با استفاده از دستورات زیر طول آنرا تغییر میدیمآرایه های دینامیک مربوط به دلفی هستند، و شما نمی تونید در توربوپاسکال به آن شکل آرایه دینامیک تعریف کنید، و با استفاده از SetLength اندازه آن را تغییر بدید.
آخه سوال اینه (برنامه ای بنویسید که چند عدد از کاربر بگیرد و میانگینشونو به دست بیاره ) من اصل برنامه رو نوشتم و 4 تا عدد میگیرم و تقسیم بر 4 میکنم ولی مثلآ شاید کسی میخواست 10 عدد یا بیشتر بده برای این کار چی باید بکنم مثلآ من میخوام از کاربر بپرسم چندتا عدد میخوای وارد کنی و به تعداد اون متغیر تشکیل بشه مثلآ a1 , a2 , a3 الی آخر و هر کدوم از این متغیر ها هم یه readln(a1) و عددی وارد بشه توسط کاربر سپس عدد ها رو جمع کنه و تقسیم بر تعداد متغیرها بکنه توی برنامه خودم هم که اولش گذاشتم یه نمونه اش رو گذاشتم ولی هوشمند نیست میخوام اینو کامل کنمهمانطوری که دوستان در پست شماره 3 مطرح کردند، موقعی که تعداد ورودی شما مشخص نیست، از لیست های پیوندی استفاده میشه، که احتمالا شما با آنها آشنا نیستید.
در مورد مسئله شما، چون هدف فقط میانگین گرفتن از یک سری اعداد هست، نیازی نیست که حتما از لیست پیوندی استفاده کنید، و میشه بدون استفاده از آن هم به نتیجه مورد نظر رسید. به اینصورت که شما باید دو متغیر داشته باشید، یکی برای شمارش تعداد اعداد وارد شده، و یکی هم برای نگهداری حاصل جمع اعداد وارد شده. در داخل یک حلقه باید از کاربر عدد ورودی را دریافت کنید، و به اعضاء هر عدد ورودی، یک واحد به متغیر شمارنده اعداد اضافه کنید. مقدار عدد ورودی را هم به متغیر نگهداری کننده حاصل جمع اضافه کنید. به این ترتیب، شما همواره تعداد اعداد وارد شده و حاصل جمع این اعداد را خواهید داشت. برای خروج از حلقه هم باید یک شرط معین تعیین کنید، مثلا تا زمانی که کاربر عدد منفی وارد نکرده، حلقه ادامه داشته باشه. به این ترتیب، کاربر به وارد کردن اعداد ادامه میده، و هر وقت کارش تمام شد، یک عدد منفی وارد میکنه، تا از حلقه خارج بشه. وقتی از حلقه خارج شد، شما می توانید با تقسیم مقدار دو متغیری که برای شمارش اعداد و حاصل جمع آنها داشتید، مقدار میانگین را حساب کنید، و به کاربر نمایش بدید:
var
Counter : integer;
Sum : real;
Mark : real;
begin
Counter := 0;
Sum := 0.0;
Mark := 0.0;
while True do
begin
write('Enter new mark: ');
readln(Mark);
if Mark < 0.0 then
Break;
Counter := Counter + 1;
Sum := Sum + Mark;
end;
if Counter > 0 then
writeln('Your average is: ', Sum / counter);
readln;
end.
dezchilds
سه شنبه 22 اردیبهشت 1388, 18:56 عصر
سلام آقای کشاورز و با تشکر متاسفانه دیر به جوابم رسیدم امروز استثنا بود و کلاس ساعت 9 تشکیل شد وقتی رفتیم گفت کاری که من کردم درسته ولی برنامه باید هوشمند باشه یعنی به تعداد دلخواه خودمون عدد بگیره و دقیقآ جوابش همینی بود که الان شما نوشتید :ناراحت:
واقعآ نمیدونم چرا اینقدر توی پاسکال میلنگم شما میتونی راهنماییم کنی تا پاسکالم قوی تر بشه ؟
Felony
سه شنبه 22 اردیبهشت 1388, 19:13 عصر
فقط تمرین ، تمرین ، تمرین
هر برنامه ای هرجا دیدی و یا به فکرت رسید شروع کن به نوشتنش ، مشکلاتت رو هم تو همین انجمن بپرس ، یواش یواش راه میافتی ....
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.