PDA

View Full Version : تعیین تعداد آرایه با دستور cin>>



hosseinam1370
جمعه 10 مرداد 1393, 10:17 صبح
سلام .
من میخام تعداد آرایه ها رو از دستور cin بگیرم و به آرایه بفهمونم من این مقدار حافظه میخام ، به اصطلاح من میخام کاربر تعداد آرایه رو مشخص کنه .
int n = 0;
cout << "chanta adad mikhay vared koni :";
cin >> n;
int adad[n];
ولی نمیدونم چرا نمیشه.دوستان راهی دارید ؟

با تشکر

parvizwpf
جمعه 10 مرداد 1393, 10:35 صبح
int n=0; cout<<"Enter:"; cin>>n; int numbers[n]; for(int i=0;i<n;i++) { cin>>numbers[i]; }
for(int i=0;i<n;i++) { cout<<numbers[i]; }

محمد فدوی
جمعه 10 مرداد 1393, 10:39 صبح
باید آرایه رو بصورت Dynamic مقدار دهی کنی. فقط یادت باشه تو این حالت آرایه ت خود به خود از حافظه پاک نمیشه و باید این کار رو بصورت دستی خودت انجام بدی وگرنه اون آرایه توی RAM باقی می مونه...

برای تعریف آرایه:

int* dynamicArray = new int[n];


وقتی کارت با آرایه ت تموم شد اینجوری پاکش کن:


delete dynamicArray;


ویرایش: باید از []delete استفاده کرد. ممنون از omid_kma عزیز.

hosseinam1370
دوشنبه 13 مرداد 1393, 09:24 صبح
سلام.
نشد که. ببینید :
#include "stdafx.h"
#include <iostream>
using namespace std;
int main ()
{
int meqdar=0;
int* array = new int[meqdar];
cout << "meqdare arry ra vared kon : "<<endl;
cin >> meqdar;
for (int i=3 ; i==3 ; i++)
{
cout <<"adadi ra vared konid :"<< endl;
cin >> array[i];
}

system ("pause");
}

dasssnj
دوشنبه 13 مرداد 1393, 12:00 عصر
اول مقدار را بگیر بعد آرایه را بساز

اینو ببین :

#include "stdafx.h"
#include <iostream>
using namespace std;
int main ()
{
int meqdar = 0;
cout << "meqdare arry ra vared kon : " << endl;
cin >> meqdar;
int* array = new int[meqdar];


for (int i = 0; i < meqdar; i++)
{
cout << "adadi ra vared konid :" << endl;
cin >> array[i];
}


system("pause");
return 0;
}


حلقه ی for هم ایراد داشت درستش کردم


اینم اسکرین شات :

121966

hosseinam1370
دوشنبه 13 مرداد 1393, 12:23 عصر
درست شد دوسته عزیز.

حالا وقتی که f10 میکنم تو قسمته watch ، متغییر array رو فقط با یه عضو نشون میده، و بقیه اعدادی کا با cin>> ریختم تو آرایه رو نشون نمیده، نمیشه کاری کرد بقیه رو هم دید؟


حالا سوال دوم اینکه ، من الان کجای برنامه باید delet رو اضافه کنم تا new پاک شه ؟
و اگه نکنم چی میشه؟
#include "stdafx.h"
#include <iostream>
using namespace std;
int main ()
{
int meqdar = 0;
cout << "meqdare arry ra vared kon : " << endl;
cin >> meqdar;
int* array = new int[meqdar];


for (int i = 0; i < meqdar; i++)
{
cout << "adadi ra vared konid :" << endl;
cin >> array[i];
}
for (int i=0 ; i<meqdar ;i++)
cout << array[i] << endl;


system("pause");

}


با تشکر.

amirtork
دوشنبه 13 مرداد 1393, 12:31 عصر
دستور delete رو باید زمانی صدا بزنید که کارتون با اون خانه هایی از حافظه که اشغال کرده بودید تموم شده، مثلا در انتهای برنامه ها، یه به محض اینکه کارتون با اون خانه های حافظه تموم شد، اگر صدا نزنید، خونه هایی از رم که اشغال کردید حتی پس از پایان برنامه هم نمیتونن در اختیار سایر برنامه ها قرار بگیرن که یک مقدار در عملکرد سیستم تاثیر گذار هست، هرچند در سیستم عامل های بزرگ مثل ویندوز، خانه هایی که بهشون اشاره گری اشاره نکنه، خود به خود در اختیار سایر برنامه ها قرار میگیرن، ولی این امر در مورد میکرو ها مثل ATMega 16 صادق نیست، و بهتره که حتما بعد از اینکه کارتون تموم شد، خانه های حافظه رو به سیستم برگردونید.

dasssnj
دوشنبه 13 مرداد 1393, 12:33 عصر
سوال اولت را نمی دونم چون اصلا من برنامه نویس جاوا هستم و سی ++ زیاد بلد نیستم و با vs هم زیاد کار نکردم.

delete را هم هر وقت کارت با آرایه تموم شد بنویس. اگه ننویسی رم گرفته شده برای آرایه به سیستم بر گردونده نمی شه و به مرور زمان اگه آرایه ها یا عناصر آرایه هات زیاد باشن باعث افت سرعت میشه.

منم یه سوال دارم : چجوری همین برنامه را 64 بیت کامپایل کنیم؟ چون توی تسک منیجیر جلوش می نویسه bit 32

amirtork
دوشنبه 13 مرداد 1393, 12:47 عصر
سلام
برای کامپایل به صورت 64 بیت میتونید از دستور زیر برای لینوکس استفاده کنید:

$ g++ -m64 -o output64 Example.cpp
توی ویندوز هم داخل ویژوال سی پلاس پلاس موقع ریلیز آپشنش هست فکر کنم.
سوال اول حسین جان رو هم تازه الان دیدم! دقت نکرده بودم، توی پست بعدی جواب میدم.

amirtork
دوشنبه 13 مرداد 1393, 12:54 عصر
در مورد سوال اول حسین جان، من با g++ V4.8.1 کامپایل کردن به کامل اجرا شد و همه ی مقادیر رو نشون داد!
این هم اسکرین شات...
http://www.uploadax.ir/images/5u7wtqf4mlwipn5t4n1u.png

dasssnj
دوشنبه 13 مرداد 1393, 12:59 عصر
در مورد سوال اول حسین جان، من با g++ V4.8.1 کامپایل کردن به کامل اجرا شد و همه ی مقادیر رو نشون داد!
این هم اسکرین شات...
http://www.uploadax.ir/images/5u7wtqf4mlwipn5t4n1u.png

برای منم توی ویندوز 64 بیت مثل همین عکس درست کار کرد . نمی دونم چرا برای ایشون کار نمیده

dasssnj
دوشنبه 13 مرداد 1393, 13:38 عصر
گفتم الکی تاپیک نزنم این یه سوالم بپرسم :
توی اکلیپس وقتی روی یه include کلید ctrl را نگه می دارم و کلیک می کنم اون فایل include را باز می کنه . توی vs میشه اینکار را کرد؟

amirtork
دوشنبه 13 مرداد 1393, 13:55 عصر
ویژوال سی پلاس پلاس رو تا اونجایی که من میدونم همچین امکانی به صورت پیشفرض براش وجود نداره، اما شاید بشه اضافه کردش.
اما داخل Qt Creator همچین امکانی مثل ایکیلپس به صورت پیشفرض فعال هست.

omid_kma
چهارشنبه 15 مرداد 1393, 23:22 عصر
باید آرایه رو بصورت Dynamic مقدار دهی کنی. فقط یادت باشه تو این حالت آرایه ت خود به خود از حافظه پاک نمیشه و باید این کار رو بصورت دستی خودت انجام بدی وگرنه اون آرایه توی RAM باقی می مونه...

برای تعریف آرایه:

int* dynamicArray = new int[n];


وقتی کارت با آرایه ت تموم شد اینجوری پاکش کن:


delete dynamicArray;



این نحوه delete کردن که گفتید undefine behavior هست !
باید []delete استفاده کرد وقتی که آرایه new کردین نه delete .

محمد فدوی
شنبه 18 مرداد 1393, 17:58 عصر
این نحوه delete کردن که گفتید undefine behavior هست !
باید []delete استفاده کرد وقتی که آرایه new کردین نه delete .

ممنونم. درسته. اشتباه از من بود.
http://www.cplusplus.com/doc/tutorial/dynamic/