ورود

View Full Version : سوال: آرایه با اندیس غیر صفر



sinaprog
سه شنبه 16 فروردین 1390, 21:41 عصر
سلام
چطوری یه آرایه تعریف کرد که از عددی غیر از 0 شروع بشه؟

returnx
سه شنبه 16 فروردین 1390, 22:20 عصر
تا اونجا که من اطلاع دارم نمیشه ، شما میتونید بجای این کار آرایه تون رو یه خونه بیشتر بگیرید و بجاش خونه اول را خالی بزارید و در حلقه ها از یک شروع کنید...
شایدم شد،نمیدونم(در کل بعید می دونم تو C++بشه)...:متفکر:

sinaprog
سه شنبه 16 فروردین 1390, 22:28 عصر
منظورم مثلا از 1800 اگه بخوایم اون کارو بکنیم خیلی حافظه اشغال میکنه
لطفا کامل توضیح بدید

vasilopita
چهارشنبه 17 فروردین 1390, 16:56 عصر
کمک.................................
سوالت رو واضح تر بپرس

sinaprog
چهارشنبه 17 فروردین 1390, 18:08 عصر
معلمون 25 سوال داده که یکیشون اینه
"آراية يك بعدي از نمرات 50 دانشجو به گونه‌اي تعريف كنيد كه انديس‌هاي آن شمارة دانشجويي دانشجويان از عدد 18201 تا 18250 باشد. به عنوان مثال a[18203] شامل نمرة دانشجويي با شمارة دانشجويي 18203 مي‌باشد. برنامه‌اي بنويسيد كه نمرات دانشجويان را در اين آرايه وارد كرده، بزرگترين آن‌ها را به همراه شمارة دانشجويي آن نمايش دهد."
خواهش می کنم تاپیک رو حذف نکنید

vasilopita
پنج شنبه 18 فروردین 1390, 00:19 صبح
معلمون 25 سوال داده که یکیشون اینه
"آراية يك بعدي از نمرات 50 دانشجو به گونه‌اي تعريف كنيد كه انديس‌هاي آن شمارة دانشجويي دانشجويان از عدد 18201 تا 18250 باشد. به عنوان مثال a[18203] شامل نمرة دانشجويي با شمارة دانشجويي 18203 مي‌باشد. برنامه‌اي بنويسيد كه نمرات دانشجويان را در اين آرايه وارد كرده، بزرگترين آن‌ها را به همراه شمارة دانشجويي آن نمايش دهد."
خواهش می کنم تاپیک رو حذف نکنید
بصورت عادی همچین کاری در c++ امکان پذیر نیست ولی با یه سری ترفندها میشه همچین کاری کرد. به این لینک سر بزن اطلاعات خوبی دستگیرت می شه :
http://stackoverflow.com/questions/2289548/array-indexing-starting-at-a-number-not-0-in-c

quiet_programmer
پنج شنبه 18 فروردین 1390, 14:14 عصر
با سلام.

خوب شماره دانشجویی از 18201 شروع میشه و به صورت sequential جلو میره. خوب میتونی اونرو تبدیل به ایندکس صفر کنی.
مثلا برای وارد کردن اطلاعات فرد با شماره دانشجویی مثلا 18225 اینکارو انجام میدی. 18201 رو از 18225 کم میکنی میشه 24 بعد تو ایندکس 24 اطلاعات فرد رو ذخیره میکنی. وبرای واکشی اطلاعات دانشجو با شماره دانشجویی X هم ایندکس X-18021 رو میخونی.
یه روش دیگه هم استفاده Hash Map هست که تو کتابخونه STL تعریف شده که میتونی از اون استفاده کنی یا خودت به صورت دستی پیاده سازیش کنی. به این صورت که شماره دانشجویی میشه کلید و اطلاعات دانشجو هم میشه value. استفاده از map هم دقیقا میاد کلید رو به یه چیز دیگه تبدیل میکنه تا یه عدد کوچیک تولید بشه حالا تابع hash اون خیلی پیشرفته تره ولی تابع hashی که اون بالا گفتم بهتره. پس بهتره خودت پیاده سازیش کنی.
ولی از اونجایی که شماره دانشجویی تکراری وجود نداره و تابع هش تو (X-18201) هم عدد تکراری تولید نمیکنه بهتره از همون روش بالا استفاده کنی (یعنی همون آرایه و ایندکس X-18201) که یه نوع ساده (اساتید خرده نگیرن گفتم یه نوع ساده) از پیاده سازی هشه. امیدوارم که متوجه شده باشی.

NIMA_1981
شنبه 20 فروردین 1390, 03:43 صبح
یه سری به این لینک بزن
http://www.codeproject.com/KB/cpp/New_Dynamic_Array_in_C__.aspx

واسه خودم حالب این موضوع دارم روش کار میکنم به نتیجه برسم میگم

FastCode
شنبه 20 فروردین 1390, 16:07 عصر
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
int main()
{
int* mydata;
{ //initialize
mydata = (int*)malloc(100 * sizeof(int));
mydata-=1000;
}
mydata[1020] = 432343;
printf("%i\ndo you has teh code?\n", mydata[1020]);
{ //free
mydata+=1000;
free(mydata);
}
return 0;
}


compiled with g++4.4.5 GNU/Linux, works fine
من شخصاً اینطوری دوست دارم.ولی هر موقع این کار رو کردم از قبلش اطمینان داشتم که یه اشتباهی کردم.

NIMA_1981
شنبه 20 فروردین 1390, 23:20 عصر
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
int main()
{
int* mydata;
{ //initialize
mydata = (int*)malloc(100 * sizeof(int));
mydata-=1000;
}
mydata[1020] = 432343;
printf("%i\ndo you has teh code?\n", mydata[1020]);
{ //free
mydata+=1000;
free(mydata);
}
return 0;
}


compiled with g++4.4.5 GNU/Linux, works fine
من شخصاً اینطوری دوست دارم.ولی هر موقع این کار رو کردم از قبلش اطمینان داشتم که یه اشتباهی کردم.

ببنن الان شما mydata[1]=2000; رو تعریف کن - توی حافظه ذخیره میشه این باز این مقدار فضا رو اشغال میکنه

FastCode
شنبه 27 فروردین 1390, 20:18 عصر
ببنن الان شما mydata[1]=2000; رو تعریف کن - توی حافظه ذخیره میشه این باز این مقدار فضا رو اشغال میکنه

نمیکنه.
malloc(100 * sizeof(int));

لطفاً به عدد ۱۰۰ دقت کنید.
mallo هم که احتمالاً میدونید چکار میکنه.