PDA

View Full Version : سوال: آرایه پویا



hafez1
یک شنبه 19 شهریور 1391, 00:04 صبح
یه سوال هست که غیر پویاشو نوشتم ولی نمی دونم چی جوری باید پویاشو بنویسم.
سوال به این شرحه:

برنامه ای که اعداد اول کوچکتر از 1000 را در آرایه ای به ترتیب ذخیره کند.

hadi0x7c7
یک شنبه 19 شهریور 1391, 01:15 صبح
پویا و غیر پویا فرقی ندارن ! میبینی که من از خط 9 به بعد عین ارایه باهاش رفتار کردم.
این روش با حالی هست به نام غربال اراتستن !
#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
int *a = (int *)malloc(sizeof(int) * 1000);
for(int i = 2; i < 1000;i++)
a[i] = 1;
a[0] = a[1] = 0;

for(int i = 2; i <= 500; i++)
if(a[i])
for(int j = i * i; j < 1000; j += i)
a[j] = 0;

for(int i = 0; i < 1000;i++)
if(a[i])
cout << i << endl;
system("pause");
}

hafez1
دوشنبه 20 شهریور 1391, 23:39 عصر
من باmalloc کار نمی کنم. اگه می شه با new و delete توضیح بدید.
در ضمن شمادر حل مسئله اندازه رو بهش دادید من می خام هر دفعه که یه عدد اول پیدا می کنه یه خونه به حافظه اضافه بشه ولی شما از همون اول یه حافظه ای رو اشغال کردید.

Ananas
سه شنبه 21 شهریور 1391, 00:18 صبح
می خام هر دفعه که یه عدد اول پیدا می کنه یه خونه به حافظه اضافه بشه
با vector میتونید این کار رو انجام بدید. اضافه کنید حذف کنید حتی از وسط آرایه.

hadi0x7c7
سه شنبه 21 شهریور 1391, 00:32 صبح
اینو همین الان نوشتم
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;

bool is_prime(int n)
{
if(n <= 1)
return false;

for(int i = 2; i <= n/2; i++)
if(n % i == 0)
return false;
return true;
}

int main()
{
int *primes = new int[1]; // room for 2
primes[0] = 2;
int nprimes = 1;
int next_num = 3;

while(true) {
if(is_prime(next_num)) {
primes = (int *)realloc(primes, sizeof(int) * (nprimes + 1));
nprimes++;
primes[nprimes - 1] = next_num;


}
next_num += 1;
if(next_num == 1000)
break;
}

for(int i = 0; i < nprimes - 1; i++)
printf("%d ", primes[i]);

system("pause");
return 0;

}

Alireza_1387
سه شنبه 21 شهریور 1391, 17:30 عصر
دوستمون که می گن آرایه پویا و غیر پویا فرقی نداره درست می گن
چون اصولا آرایه پویا وقتی به کار میره که ما نمی دونم به چندتا آرایه برای ذخیره نیازمندیم
مثلا اگه بگن برنامه ای بنویسین که n نمره را بگیرد و میانگین آن ها را حساب کند
چون ما نمی دونیم این n تا چقدر میشه ، اگه بخوایم آرایه ای مثل [ int Array[100 را تعریف کنیم اولا تعداد زیادی از حافظه را شاغال می کند
دوم اینکه شاید تنها 20 یا 10 تا از این آرایه استفاده شود ، که این یعنی اتلاف حافظه

hafez1
سه شنبه 21 شهریور 1391, 22:41 عصر
با vector میتونید این کار رو انجام بدید. اضافه کنید حذف کنید حتی از وسط آرایه.
می شه روشش رو توضیح بدید.

hafez1
سه شنبه 21 شهریور 1391, 22:48 عصر
دوستمون که می گن آرایه پویا و غیر پویا فرقی نداره درست می گن
چون اصولا آرایه پویا وقتی به کار میره که ما نمی دونم به چندتا آرایه برای ذخیره نیازمندیم

حرفاتون یکم ضدو نقیض نیسن؟این طور که شما توضیح دادید آرایه پویا و غیر پویا متفاوت شد که.شایدم من اشتباه فهمیدم.
توی این سوال هم مشخص نیست که چند تا آرایه برای ذخیره نیاز داریم پس طبق گفته خودتون بهتره برنامه پویا باشه.درسته؟

Alireza_1387
چهارشنبه 22 شهریور 1391, 13:30 عصر
حرفاتون یکم ضدو نقیض نیسن؟این طور که شما توضیح دادید آرایه پویا و غیر پویا متفاوت شد که.شایدم من اشتباه فهمیدم.
توی این سوال هم مشخص نیست که چند تا آرایه برای ذخیره نیاز داریم پس طبق گفته خودتون بهتره برنامه پویا باشه.درسته؟
توی این سوال اصلا ما نمی دونیم تعداد اعداد اول بین 1 تا 1000 چندتا است که استفاده از آرایه پویا و غیر پویا فرقی نمی کنه
همونطور که می بینید دوستمون آقای هادی ، تو خط هشتم برنامه اول حافظه ای به اندازه 1000 تا ایجاد کرده ، در واقع در این مسئله ارایه پویا کارای خودش رو نداره

چون همونطور که تو مسئله n تا دانشجو گفتم
وقتی برنامه اجرا میشه ، ما می خوایم فقط نمره 3 تا دانشجو رو اضافه کنیم
پس عدد سه رو تایپ می کنیم
در واقع کدش اینجوری می شه
int n;
scanf("%d",n);
int *a = (int *)malloc(sizeof(int) * n);



همونطور که می بینید ما به جای 1000 ، n رو گذاشته ایم
و در واقع n را هرچقدر وارد کنیم به همان مقدار ارایه برای ذخیره ایجا می شود
و اینجا کارایی آرایه پویا خودش رو نشون می ده
و توی این برنامه ای که شما می خواید پویا بودن و غیر پویا بودن آنچنان فرقی نداره