ورود

View Full Version : نحوه دادن ورودی های یک تابع از نوع آرایه در هنگام فراخوانی



meysam jahedi
سه شنبه 29 مهر 1393, 23:35 عصر
سلام
اگه یک تابع به این صورت تعریف کنیم void insertion (int x[],int n) ، و بخواهیم بعدا لیستی از اعداد به تعداد مثلا n=5 رو بهش بدیم چطور نوشته میشه (مثلا: 7،5،8،11،30)
مثلا اگه بخوایم کد روبرو رو تو eclips پیاده سازی کنیم و تو یه دکمه فراخوانی کنیم ، به چه صورت؟

void insertion (int x[],int n)
{
int temp;
for(int i=1;i<n;i++)
{
j=i;

while( j>0 && x[j-1]>x[j])
{
temp = x[j];
x[j] = x[j-1];
x[j-1] = temp;
j--;
}
}
}

meysam jahedi
چهارشنبه 30 مهر 1393, 10:08 صبح
کسی نیست جواب بده؟:گریه:

bia2joker
چهارشنبه 30 مهر 1393, 10:54 صبح
void insertion (int...x)

{

int n= x.length;



}

StoPpeR
چهارشنبه 30 مهر 1393, 11:00 صبح
سوالتون یکم گنگه دوست عزیز
یا اینکه من نفهمیدم دقیق
منظور دقیقتون از "فراخوانی توی یه دکمه" چیه؟ خب چرا همون دستور void ـی که دادید رو در onclick یه دکمه قرار نمی دین؟

meysam jahedi
چهارشنبه 30 مهر 1393, 19:52 عصر
سوالتون یکم گنگه دوست عزیز
یا اینکه من نفهمیدم دقیق
منظور دقیقتون از "فراخوانی توی یه دکمه" چیه؟ خب چرا همون دستور void ـی که دادید رو در onclick یه دکمه قرار نمی دین؟

احتمالا من بد بیان کردم ، وقتی توی یه کلاس تابع تعریف میکنیم بعدش توی یه فرم دیگه اونو فراخوانی میکنیم و اسمشو مینویسیم و جلوش داخل پرانتز ورودی میدیم تا پردازش کنه ، برای این الگوریتم چجوریه؟ ورودی هاش یه لیست از آرایه هستش، چجوری بعدا باید فراخوانی بشه و ورودی بدیمش؟ نحوه نوشتن لیست آرایه توی پرانتزش موقع فراخوانی چجوریه؟مثلا [1,2,8,9,17] رو چجوری باید بهش وارد کنیم

StoPpeR
چهارشنبه 30 مهر 1393, 22:35 عصر
خب شما ابتدا یه آرایه درست می کنین و بعد اون رو بعنوان ورودی در نظر می گیرین

مثال:

int[] myarray = [2,3,5,4,6];
insertion (myarray,5);

meysam jahedi
چهارشنبه 30 مهر 1393, 22:49 عصر
الگوریتم مقابل رو داریم و همینطور لیست int[] A = {24, 13, 9, 64, 7, 23, 34, 47, 87, 9, 37, 1992}; ، اگه بخوایم خروجی این الگوریتم رو تو ListView نشون بدیم به چه صورت؟
void insertSort(int[] A){
for(int i = 1; i < A.length; i++){
int value = A[i];
int j = i - 1;
while(j >= 0 && A[j] > value){
A[j + 1] = A[j];
j--;
}
A[j + 1] = value;

}
}


شایدم کلا کارم اشتباه

StoPpeR
چهارشنبه 30 مهر 1393, 22:58 عصر
متد شما یه voidـه و فقط یه سری پردازش رو انجام می ده و هیچ خروجی نداره
برای دریافت خروجی ابتدا فرمت رو از void به int[] تغییر بدید و بعد اون آرایه ای که بدست میارین رو با دستور return بعنوان خروجی تعریف کنین
بعد در جایی که این متد رو فراخونی می کنین این خروجی رو دریافت کنین

یعنی به این شکل فرمت رو تغییر می دین:

public int[] insertSort(int[] A) {

.....
.....
}

و بعد به این صورت اونو فراخونی می کنین و هر جایی خواستین ازش استفاده می کنین:

int[] myarray = insertSort(array);


پ.ن: پیشنهاد می کنم بیشتر روی پایه برنامه نویسی جاواتون کار کنین، چون با ندونستن این چیزای جزئی با هر خط نوشتن یه کد، هزار تا مشکل و سوال واستون پیش میاد

meysam jahedi
چهارشنبه 30 مهر 1393, 23:44 عصر
اون آرایه ای که بدست میارین رو با دستور return بعنوان خروجی تعریف کنین
چرا تو return فقط مقدار A رو مینویسه؟ A که ورودی هستش ،پس باید یه آرایه دیگه از خروجی ساخت و RETURN کرد ؟

StoPpeR
چهارشنبه 30 مهر 1393, 23:47 عصر
چرا تو return فقط مقدار A رو مینویسه؟ A که ورودی هستش ،پس باید یه آرایه دیگه از خروجی ساخت و RETURN کرد ؟

بله
دلیل اینکه پیش فرض A رو می نویسه اینه که می گرده ببینه آخرین داده ای که با شرایطش همخونی داره چیه و همون رو بصورت خروجی تعریف می کنه
شما یه آرایه دیگه بسازین و بعد اونو return کنین

meysam jahedi
پنج شنبه 01 آبان 1393, 00:14 صبح
اصلا این الگوریتم جواب میده بهمون و اون لیست رو مرتب میکنه؟
دو روز دنبال اینم یه مثال عینی کار با ارایه ببینم ، اگه لطف کنید خودتون آرایه خروجی رو ازش بگیرید
1,15,10,17 رو مرتب کنه



public int[] insertSort(int[] A){
for(int i = 1; i < A.length; i++){
int value = A[i];
int j = i - 1;
while(j >= 0 && A[j] > value){
A[j + 1] = A[j];
j--;
}
A[j + 1] = value;

}
return A;
}

StoPpeR
پنج شنبه 01 آبان 1393, 00:34 صبح
اگه تنها هدفتون فقط همینه که لیستی از اعداد رو مرتب کنین خب می تونین با دستور ساده Arrays.sort لیست رو مرتب کنین
به این صورت:

int[] myarray = {1,5,7,3};
Arrays.sort(myarray);

meysam jahedi
پنج شنبه 01 آبان 1393, 00:39 صبح
نه میخوام با حلقه ها اینکار انجام بشه (مرتب سازی درجی)

meysam jahedi
پنج شنبه 01 آبان 1393, 16:00 عصر
دوستان کسی نظری نداره