PDA

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 عصر
البته استراسروپ تو کتاب مقدس سی++ توصیه کرده که همیشه به جای آرایه از وکتور استفاده کنیم