PDA

View Full Version : آرایه



mononok
شنبه 07 اردیبهشت 1387, 14:52 عصر
سلام دوستان
من تازه برنامه نویسی C رو شروع کردم
می خواستم بدونم چطور می شه در یه برنامه اول ما یه عددی رو به برنامه بدیم و بعد برنامه آرایه ای با همان اندازه خونه ایجاد کنه
هم اکنون نیازمند یاری سبزتان هستم:لبخندساده:

SMRAH1
شنبه 07 اردیبهشت 1387, 18:18 عصر
در سی از تابع malloc استفاده می شه که مقدار درخواستی رو به عنوان آرگومان می گیری و یک اشارگر بر می گردونه.در صورتی که سیستم نتونه حافظه رو اختصاص بده مقدار اشارگر NULL است.بعد از پایان کار باید اون رو با تابع free آزاد کنید.توضیحات بیشتر در راهنمای نرم افزار برنامه نویسی یا کتابهابب در این زمینه هست.
در C++ می تونید از عملگر های new و delete برای دریافت و رها سازی حافظه مورد نیاز استفاده کنید.

Nima_NF
شنبه 07 اردیبهشت 1387, 22:07 عصر
به این شکل:



char *str;
int n;

printf ("How long ? ");
scanf ("%d", &n);

// Allocate space
str = malloc( n );
// use it
free( str );

mononok
یک شنبه 08 اردیبهشت 1387, 12:00 عصر
از کمکتون ممنونم
من درباره آرایه عددی امتحان کردم و نتیجه گرفتم ولی در مورد آرایه رشته ای موقع چاپ بعضی نام ها رو null چاپ میکنه میشه بگید اشکال کد من چیه؟؟؟
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
main()
{
clrscr();
char* s; int n,i;
printf("how many name to add? \n");
scanf("%d",&n);
s=(char *)malloc(n);
printf("enter name \n");
for(i=0;i<n;i++)
scanf("%s",s[i]);
for(i=0;i<n;++i)
{printf("\n %s",s[i]);}
free(s);
getche();
}

Nima_NF
یک شنبه 08 اردیبهشت 1387, 15:55 عصر
خط scanf شما به این شکل اشتباه هست، چون []s به یک کارکتر اشاره می کند نه یک رشته.
پیاده سازی این کار در C راحت نیست، پس به کتاب C مراجعه کنید و نحوه ساختن یک "لیست پیوندی" را مطالعه کنید.

در ++C این کار به راحتی توسط کلاس های استانداردی که در STL وجود دارد مثل vector و list به راحتی قابل انجام هست.

Nima_NF
یک شنبه 08 اردیبهشت 1387, 16:41 عصر
می توانید از کد زیر نیز استفاده کنید، به این شکل که در ازای هر نام که می خواهید به آن حافظه اختصاص دهید 21 بایت نیز برای نام با حداکثر 20 کارکتر اختصاص می دهیم که اتلاف حافظه نیز خواهید داشت ، در scanf نیز %20s قرار دادیم تا حداکثر 20 کارکتر ورودی را به عنوان نام ذخیره کند:



#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

const int MAX_NAME = 21;

void main(void)
{
clrscr();
char* s;
int n,i;

printf("how many names to add? \n");
scanf("%d",&n);

s=(char *)malloc(n * MAX_NAME);

printf("enter name \n");

for(i=0; i< n;i++)
scanf("%20s",&s[i * MAX_NAME]);

for(i=0; i<n; i++)
{
printf("\n %s",&s[i * MAX_NAME ]);
}

free(s);
getche();
}

mononok
دوشنبه 09 اردیبهشت 1387, 19:52 عصر
دوباره سلام
من با راهنمایی شما برنامه ای نوشتم که با استفاده از آرایه با زدن 1 چند نام رو دریافت کنه
2 delete و 3 edit کنه برنامه عمل می کنه فقط مشکل اینه که می خواهم در هر بار که 1 رو زدم نام های جدیدم رو به نام های قبلی اضافه کنه و مقدار خانه های آرایه رو زیاد کنه
کدی رو هم نوشتم ولی سیستمم خودش رو کشت و هنگ کرد:لبخندساده:
ممنون می شم اگه یه نگاه به برنامه ام بندازید

mononok
سه شنبه 10 اردیبهشت 1387, 08:39 صبح
اينم آخرين سوالم:چشمک:
کد زير رو براي جست و جو نوشتم نمي دونم چقدر درسته ولي عمل نمي کنه و error ميده

char str[20]; int *pi;
printf("enter search name:");
scanf("%s",str);
for(i=0;i<n;i++)
{
pi=&s[i * max];
if(strcmp(*pi,str)==0)
printf("this name is exist");
}

Nima_NF
سه شنبه 10 اردیبهشت 1387, 15:07 عصر
دوباره تاکید می کنم، برای این برنامه شما باید به سراغ لیست پیوندی بروید، به این شکل عمل کردن کاملا اشتباه هست و حتی اگر برنامه شما کار کند اصلا اصولی نوشته نشده است.
در لیست پیوندی شما یک رکورد (strcut) می سازید که نام ها و سایر موارد را در خود ذخیره می کند و سپس در ازای اضافه کردن یا پاک کردن یک رکورد، به اندازه همان رکورد حافظه اختصاص می دهید یا حافظه را آزاد می کنید. ( حتما به کتاب های مربوطه مراجعه کنید )

mononok
سه شنبه 10 اردیبهشت 1387, 17:05 عصر
من به توصییتون گوش کردم
حق با شما بود کار با استراکچر و لیست پیوندی هم خیلی راحت تر هم کدش بهتره
بابت همه چیز ازتون ممنونم

Salar Ashgi
دوشنبه 11 شهریور 1387, 16:00 عصر
سلام ، ایجاد آرایه های پویا در سی پلاس پلاس

یک بعدی بطول n :


int * a = new int[n];

دو بعدی با سایز n*n :


int **a = new int*[n];
for(int i=0;i<n;i++)
a[i]= new int[n];


توضیح : آرایه دوبعدی یعنی آرایه ای که هر عضو آن یک آرایه است ، و میدانیم هر آرایه یک

اشاره گر به خانه اولش است ، پس آرایه دوبعدی میشود = اشاره گر به اشاره گر ( a**)

bsng110
دوشنبه 11 شهریور 1387, 16:41 عصر
هوالحکیم. سلام. می شه ساخت سه بعدی اش را نیز توضیح دهید؟ یا علی. حق نگهدارتون

Salar Ashgi
دوشنبه 11 شهریور 1387, 20:19 عصر
هوالحکیم. سلام. می شه ساخت سه بعدی اش را نیز توضیح دهید؟ یا علی. حق نگهدارتون

================================

باید از سه تا ستاره استفاده کنی !!!! (*** int )

bsng110
پنج شنبه 14 شهریور 1387, 09:24 صبح
هوالحکیم. سلام. اگه قرار باشه یک n از کاربر بگیریم و آرایه ای n بعدی برای اون بسازیم(که ابعاد هر بعد را در مرجله بعد می گیریم)، چه کار باید کرد؟ آیا اصلاً چنین کاری ممکن است؟ آیا چند بعدی حاصل، مکعبی است یا می تواند نا منظم باشد؟ ممنون می شوم به این سوالات نیز پاسخ دهید یا علی حق نگهدارتان

Salar Ashgi
پنج شنبه 14 شهریور 1387, 10:27 صبح
هوالحکیم. سلام. اگه قرار باشه یک n از کاربر بگیریم و آرایه ای n بعدی برای اون بسازیم(که ابعاد هر بعد را در مرجله بعد می گیریم)، چه کار باید کرد؟ آیا اصلاً چنین کاری ممکن است؟ آیا چند بعدی حاصل، مکعبی است یا می تواند نا منظم باشد؟ ممنون می شوم به این سوالات نیز پاسخ دهید یا علی حق نگهدارتان

=========================================

سلام ، ممکن بودنش را نمیدانم ، چراکه در دنیای کامپیوتر و برنامه نویسی چیز غیر ممکن

وجود ندارد ( یا حداقل به ندرت یافت میشود) ، ولی اگر شدنی هم باشد ، کار کردن با آرایه

های بیش از 3 بعد ، پیچیدگی خاصی دارد ، و معمولا ازشون استفاده نمیشود و کاربردی

هم ندارند چراکه درک کردنشان کمی سخت است !!!

موفق و پیروز باشید در پناه حق تعالی ، انشاالله !!!

bsng110
شنبه 16 شهریور 1387, 18:27 عصر
هوالحکیم. سلام. به کتاب ساختمان داده سری بزنید، شاید بشود. در ضمن چونکه یک چیز سخت است و یا ما دید انتزاعی از آن نداریم، دلیل بر عدم پیاده سازی اش نمی باشد. اما نکته اینه که خواستم بگم پیاده سازی این جور آرایه ها، توسط دو سه تا ستاره امکان پذیر نیست. در کتاب ساختمان داده، ساختن آرایه های مکعبی توضیح داده شده ولی حالا سوال من اینه که می شه آرایه های چند بعدی غیر مکعبی(نا منظم) هم ساخت؟ یا علی حق نگهدارتون

Salar Ashgi
شنبه 16 شهریور 1387, 20:25 عصر
هوالحکیم. سلام. به کتاب ساختمان داده سری بزنید، شاید بشود. در ضمن چونکه یک چیز سخت است و یا ما دید انتزاعی از آن نداریم، دلیل بر عدم پیاده سازی اش نمی باشد. اما نکته اینه که خواستم بگم پیاده سازی این جور آرایه ها، توسط دو سه تا ستاره امکان پذیر نیست. در کتاب ساختمان داده، ساختن آرایه های مکعبی توضیح داده شده ولی حالا سوال من اینه که می شه آرایه های چند بعدی غیر مکعبی(نا منظم) هم ساخت؟ یا علی حق نگهدارتون

========================================

سلام ، من هم نگفتم ممکن نیست ، فقط گفتم کاربرد ندارند !!!

bsng110
یک شنبه 17 شهریور 1387, 17:54 عصر
هوالحکیم.
سلام.
من هم هر چی فکر می کنم، می بینم برنامه های شما کاربرد مفید و چندانی ندارند. نکته آموزشی نیز ندارند. فقط بازی با حلقه for و while و دستورات if و ... می باشند. ولی این حرف کاملاً غلط است. این ما هستیم که موجب می شویم دیگران احترامی برای ما قائل شوند. لطفاً اینگونه پاسخ سوالات مرا ندهید. از خیر این عمل نیز گذشتم چونکه کار هر کس نیست ...! در مورد نیتم از این سوال هم توضیح نمی دهم چرا که اصلاً برای شما مهم نیست. در ضمن من کاربردی برای این کار دارم(غیر از آموزش و یادگیری). در مورد نحوه پیاده سازی هم فکر کنید یک کلاسی داریم به صورت زیر:

Array<void *,...>
حالا ببینید می شه یا نه(عبارت بالا فقط شبه کده، ساختمان دقیقش را باید خودمون طراحی کنیم)!
یا علی.
حق نگهدارتون