View Full Version : تعریف 100 متغیر با استفاده از حلقه در ++C
Aftabgardan-cc
جمعه 04 خرداد 1386, 17:12 عصر
سلام؛
من با سینتکس ++C خیلی آشنا نیستم. در PHP ما میتونیم با استفاده از حلقه for، هر چند تا که میخواهیم متغیر ایجاد کنیم.
به اینصورت که یه شمارنده در نظر میگیریم و در هر بار گردش، یک حرف (مثلا a) رو در نظر میگیریم و شمارنده رو میذاریم جلوش، میشه یه متغیر جدید... مثل a1 , a2 , a3 , a4و... اینطوری:
a".$i."
حالا میخوام بدونم توی ++C چطور میشه این کار رو کرد؟
فرض کنید شمارنده ما i هست و متغیرمون a
چطوری باید این دو تا رو ترکیب کنیم که مثلا a1 تولید بشه؟
من x&i رو نوشتم، ایراد گرفت.
ممنون:چشمک:
h_c2005
جمعه 04 خرداد 1386, 17:32 عصر
سلام
از طریق آرایه ها راحت می شه همچین کاری را کرد .
emad_67
جمعه 04 خرداد 1386, 18:40 عصر
احتیاجی به شمارنده نیست
همونطور که گفتن میشه از آرایه استفاده کنی یعنی بنویسی
int a[100]
که میابد یه آرایه با 100 خونه از نوع int تعریف میکنه
saeid5977
جمعه 04 خرداد 1386, 18:56 عصر
سلام
این امکان به این شکل در C و ++C وجود نداره.
اما با استفاده از آرایه ها میتونی این کار رو انجام بدی. البته اگر طول آرایه از اول معلوم نیست میتونی از dynamic memory allocation استفاده کنی. به شکل زیر:
int *a;
int n;
scanf("%d",&n);
a=(int*) new a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
.
.
.
.
delete[] a;
حتما وقتی کارت با متغیر های دینامیک تموم شد باید آزادشون کنی. با delete یا اگه از malloc استفاده کرده باشی با free .
موفق باشید.
RED-C0DE
جمعه 04 خرداد 1386, 23:02 عصر
به جای آرایه از Vector هم می شه استفاده کرد . (یک آرایه پویا که راحت تر می شه باهاش کار کرد)
emad_67
جمعه 04 خرداد 1386, 23:35 عصر
به جای آرایه از Vector هم می شه استفاده کرد . (یک آرایه پویا که راحت تر می شه باهاش کار کرد)
میشه در مورد این vector بیشتر توضیح بدی که اصلا چی هست و چی کار میکنه؟
Aftabgardan-cc
جمعه 04 خرداد 1386, 23:55 عصر
بد فکری نیست، به قول شما از آرایه هم میشه استفاده کرد.
ممنون.
اما اگر میشد اونجوری که گفتم بشه، خیلی خوب میشد، به هر حال ممنون... :چشمک:
Aftabgardan-cc
شنبه 05 خرداد 1386, 00:28 صبح
آقا یه مشکل!
ببینید من این متغیرهایی که میخوام تولید کنم، خودشون آرایه دو بعدی هستن :(
اینطوریه که با استفاده از اون حلقه، مثلا 100 تا آرایه دو بعدی تولید میشه و هر بار یکی از اونها برای چک شدن به یه تابع ارسال میشه.
اسم اون آرایه یک a داره و یک شماره که اون شماره بر اساس یه سری محاسبات به دست مییاد...
نمیدونم میتونید از این عکس منظورم رو بفهمید یا نه:
http://i17.tinypic.com/4yaf12x.jpg
(توی عکس آخرین خطایی که توی پایین عکس مشخصه، مربوط به تعریف a&count-y هستش، نمیدونم چه خطایی گرفته)
راستش من برای پروژه درس «هوش مصنوعی» باید بازی 8puzzle (جورچین اعداد 1 تا 8) رو به صورت سطحی (BFS) برنامه نویسی کنم.
توی این بازی مجبورم برای هر حالت، یه آرایه دو بعدی در نظر بگیرم و اون حالت رو برای دسترسی های بعدی ذخیره کنم.
یعنی باید هر آرایه یه اسمی داشته باشه که بشه بعدا بهش دسترسی داشت.
حالا به نظرتون چطور می تونم چندین آرایه طوری بسازم که اسمشون رو طبق یک الگوریتم خاص تولید کنم؟
ممنون میشم راهنمایی کنید...
saeid5977
شنبه 05 خرداد 1386, 02:02 صبح
ببینید علامت & در C تعریف شده است و آدرس متغیر رو برمیگردونه.
با توجه به توضیح شما در مورد حفظ وضعیت صفحه بازی شما باید از آرایه 3 بعدی استفاده کنید یعنی:
a[state_number][x][y]
state_number میشه count شما x,y هم تک تک خونه هارو نشون میدن!
Aftabgardan-cc
شنبه 05 خرداد 1386, 13:35 عصر
ممنون سعید جان، میرم که تست کنم...
لطف کردی :چشمک:
saeid5977
شنبه 05 خرداد 1386, 15:45 عصر
خواهش میکنم
RED-C0DE
شنبه 05 خرداد 1386, 19:36 عصر
میشه در مورد این vector بیشتر توضیح بدی که اصلا چی هست و چی کار میکنه؟
برای مثال اگر که بخوایم توی یک برنامه از آرایه استفاده کنیم اما اندازه آرایه از ابتدا مشخص نباشه و یا در طول برنامه اندازش تغییر کنه (یک عضو حذف بشه یا اضافه بشه)، می تونیم از vector استفاده کنیم. همونطور که با آرایه کار می کنی (دسترسی بصورت اندیسی)با vector هم می شه رفتار کرد.
بعضی از متدهای مهمش :
(vector.push_back(value
یک مقدار از نوع خانه های vector به آخر اون اضافه می کنه
()vector.pop_back
آخرین خانه vector رو برمی داره و یه جورایی آخرین خونه رو حذف می کنه
()vector.size
تعداد خانه های vector رو برمی گردونه. مقدار برگشتی از نوع size_t
چندتا دیگه هم داره که از اسماشون معلومه چیکاره هستن...
#include <iostream>
#include <vector>
using namespace std;
vector <int> vecNumbers;
int main()
{
int num;
while(cin >> num && num)
vecNumbers.push_back(num);
cout << "The size of Vector = " << vecNumbers.size() << endl;
size_t sz=vecNumbers.size();
for(size_t i=0; i<sz; i++)
cout << vecNumbers[i] << endl;
return 0;
}
این برنامه تا وقتی که از ورودی عدد وارد بشه و عدد غیر صفر بشه اعداد خونده شده رو به انتهای vecNumbers اضافه می کنه و در آخر اندازه vector و مقادیر داخلش رو چاپ می کنه. همونطور که می بینید می شه درست مثل یک آرایه بصورت اندیسی به تک تک اعضا دسترسی داشت (راههای دیگه ای هم داره)...
Arash_j13
شنبه 05 خرداد 1386, 23:05 عصر
البته استراسروپ تو کتاب مقدس سی++ توصیه کرده که همیشه به جای آرایه از وکتور استفاده کنیم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.