• 0
alaadiaa

ورشة عمل عن المصفوفات

سؤال

السلام عليكم

كيف حال الشباب هنا

يبدو لي أنه لا وجود لكم أصلاً :wink:

بشكل عام المصفوفات عمود أساسي في البرمجة

وأصل في حل الكثير من المشكلات

الموضوع ليس لشرح المصفوفات

وإنما سنضع بعض المشكلات هنا

نحاول حلها

نتناقش فيها

أريد أن أرى تفاعلاً هاهنا

لا تضطوروني إلى ذكر أسماء معينة :lol:

سأبدأ أنا بمشكلة بسيطة

كيف تطبع مصفوفة؟

السؤال سهل لذا أريد إبداع

كيف يكون الإبداع في هذا السؤال؟

هذه هي مشكلتكم :P

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

22 إجابة على هذا السؤال .

  • 0

فكره جيده أخي علاء ،،

حل مُبَدِع :) /

انسخ الكود
  1.  
  2. [color= #000066; font-weight: bold;]int[/color] array[color= #009900;][[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #009900;]{[/color][color= #cc66cc;]3[/color],[color= #cc66cc;]5[/color],[color= #cc66cc;]6[/color][color= #009900;]}[/color] [color= #339933;];[/color]
  3. [color= #000000; font-weight: bold;]for[/color] [color= #009900;]([/color][color= #000066; font-weight: bold;]int[/color] element [color= #339933;]:[/color] array[color= #009900;])[/color]
  4. [color= #003399;]System[/color].[color= #006633;]out[/color].[color= #006633;]printf[/color][color= #009900;]([/color][color= #0000ff;]"%d[color= #000099; font-weight: bold;]n[/color]"[/color],element[color= #009900;])[/color][color= #339933;];[/color]
  5.  
  6.  

استخدام for each للوصول الى القيم في المصفوفه ، بدلا من استخدام الحلقه العاديه ... ولن نضطر الى عمل counter ولا زيادته ، for each تقوم بالمهمه ..

بالتوفيق ،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي علاء فكره جميله تسلم ايدك

هذه باستخدام جمله for

int array={2,6,7,8,9,4};
for(int i=0;i<=array.length;i++)
System.out.println("array number "+array[i]);

والان للتفاعل الاكثر اريد طباعه هذه المصوفه بالترتيب

{d,s,a,e,g,a,s,e,r,e,y,u,}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ماذا عن الطباعة العكسية؟

ماذا عن الطباعة من المنتصف حرف من الأمام وحرف من الخلف؟

هيا أرونا الإبداعات

char[] array={'d','s','a','e','g','a','s','e','r','e','y','u'};

for(int i=0;i<=array.length;i++){
for(int j=i;j<=array.length;j++)
if((int)array[i]<(int)array[j])
swap(i,j);
System.out.println("array number "+array[i]);
}

بصراحة لست متأكد من موضوع casting

هل سيفهم المترجم الجملة بدونه

لكني وضعته للاحتياط

بالمناسبة الدالة swap تقوم بالتبديل بين العناصر في المصفوفتين

ويجب عليك كتابتها بنفسك :P

وأخيراً أقول ربما يكون هناك مشاكل في الشيفرة من ناحية المنطق

لأني لم أجربها

تحياتي

تم تعديل بواسطه علاء الصالحي
تعديل على الشيفرة مع الشكر للأخ بيشوي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أخي وجدي هل الكود الذي كتبته هو مزيج بين الـ c و الـ java أم أن الكتابة ممكنة في الجافا (لم أرها من قبل)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
أخي وجدي هل الكود الذي كتبته هو مزيج بين الـ c و الـ Java أم أن الكتابة ممكنة في الجافا (لم أرها من قبل)

يسمى هذا الـ Loop بـ For each .. و يتم استخدامه مع الجافا ، و مع الـ Objects بشكل خاص على اعتبار ان المصفوفة عبارة

عن كائن ...

ايضاً ممكن تجد For each في بعض اللغات مثل PHP و على ما اذكر في VB

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

اسمه كرر لكل عنصر foreach

وهو موجود في كل لغات البرمجة تقريباً أذكر منها c# vb php

ويذكر أن php أول لغة احتوتها

كما ستجدها في تلك اللغات باسم foreach

لكن هنا في جافا رؤوا أن الموضوع ليس بحاجة إلى إضافة كلمة محجوزة keyword جديدة

وأن كلمة for القديمة مع شكل foreach قادرة على تغطية الأمر

ويمكن تطبيقه في الجافا على المصفوفات وعلى كل ماله علاقة بالواجهة Iteratable

كنت كتبت مقالين عن الموضوع

لمحة جافاوية 17: كرر لكل عنصر

لمحة جافاوية 18: الفئات القابلة للتكرار

لاحظ أن هذا التكرار لا يأتي بشيء جديد

ويهيألي أن جافا تستعيض بنفس الـ byte code الخاص بـ for عند الترجمة

وهذه شيفرة الطباعة العكسية

int array={2,6,7,8,9,4};
for(int i=array.length-1;i>0;i--)
System.out.println("array number "+array[i]);

هل هناك من يقوم بطباعة العناصر عنصر من البداية وعنصر من النهاية؟

طيب نريد من يطبع المصفوفة في نفس التكرار مرة من البداية ومرة من النهاية؟

هيا يا شباب أريد إبداعاً

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فكرة رائعة جدا جدا يا علاء ...

كما اتمنى ان يكون هناك دروس اخرى بنفس الأسلوب .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مره من البدايه ومره من النهايه ، الأمر سهل اذا كانت المصفوفه خاناته زوجيه ، أما لو كانت عدد فردي فلازم نشوف حيله ما :)

انسخ الكود
  1.  
  2. [color= #000000; font-weight: bold;]public[/color] [color= #000000; font-weight: bold;]class[/color] Demo
  3. [color= #009900;]{[/color]
  4. [color= #000000; font-weight: bold;]public[/color] [color= #000000; font-weight: bold;]static[/color] [color= #000066; font-weight: bold;]void[/color] main [color= #009900;]([/color][color= #003399;]String[/color] args[color= #009900;][[/color][color= #009900;]][/color][color= #009900;])[/color] [color= #009900;]{[/color]
  5. [color= #000066; font-weight: bold;]int[/color] array[color= #009900;][[/color][color= #009900;]][/color] [color= #339933;]=[/color] [color= #009900;]{[/color][color= #cc66cc;]4[/color],[color= #cc66cc;]5[/color],[color= #cc66cc;]66[/color],[color= #cc66cc;]7[/color],[color= #cc66cc;]9[/color],[color= #cc66cc;]83[/color],[color= #cc66cc;]1[/color],[color= #cc66cc;]3[/color],[color= #cc66cc;]6[/color][color= #009900;]}[/color] [color= #339933;];[/color]
  6.  
  7. [color= #000066; font-weight: bold;]int[/color] i[color= #339933;]=[/color][color= #cc66cc;]0[/color] , j[color= #339933;]=[/color]array.[color= #006633;]length[/color][color= #cc66cc;]-1[/color] [color= #339933;];[/color]
  8.  
  9. [color= #000000; font-weight: bold;]for[/color] [color= #009900;]([/color][color= #339933;];[/color] i[color= #339933;]<[/color] array.[color= #006633;]length[/color][color= #339933;]/[/color][color= #cc66cc;]2[/color] [color= #339933;];[/color] i[color= #339933;]++[/color],j[color= #339933;]--[/color][color= #009900;])[/color]
  10. [color= #003399;]System[/color].[color= #006633;]out[/color].[color= #006633;]printf[/color][color= #009900;]([/color][color= #0000ff;]"%d %d "[/color],array[color= #009900;][[/color]i[color= #009900;]][/color],array[color= #009900;][[/color]j[color= #009900;]][/color][color= #009900;])[/color][color= #339933;];[/color]
  11.  
  12. [color= #000000; font-weight: bold;]if[/color] [color= #009900;]([/color] array.[color= #006633;]length[/color] [color= #339933;]%[/color] [color= #cc66cc;]2[/color] [color= #339933;]!=[/color] [color= #cc66cc;]0[/color] [color= #009900;])[/color]
  13. [color= #003399;]System[/color].[color= #006633;]out[/color].[color= #006633;]printf[/color][color= #009900;]([/color][color= #0000ff;]"%d"[/color],array[color= #009900;][[/color]i[color= #009900;]][/color][color= #009900;])[/color][color= #339933;];[/color]
  14.  
  15. [color= #009900;]}[/color]
  16. [color= #009900;]}[/color]
  17.  
  18.  

أخ Djug زي ما قال الشباب ، وكمان printf تستخدم في جافا (من اصدار 5 وما فوق) ، وهي جيده في عمليه تنسيق المخرج Formating ..

حسناً ، من يقوم بأخذ تقاطع مصفوفتين(عناصر مشتركه) ووضعهم في مصفوفه جديده ثالثه ،

Array A: 17 1 3 19 3 7 9 13 15 2

Array B: 2 3 6 8 9 3 5 16

Elements in Common: 3 9 2

:wink:

تم تعديل بواسطه Wajdy Essam
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سادخل قيم لمصفوفة بارقام عشوائية :lol:

فأنا لا احب الطباعة :angry:


int x[]=new int [ARRAY];
for(int i=0;i<ARRAY;i++)
{
x[i]=(int)(Math.random()*5);
}
int ARRAY=100;

ولا احب الوظائف ايضا :angry:

بالتوفيق

الله معكم..

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شد حيلك معانا أخي MKSoft

وإن شاء الله في نيتي هذا الشيء

شادي ليست واجب

هل رأيت أحد قال شادي يحل السؤال

لكن أبشر المرة القادمة عيلك :)

أختي بنت اليمن شاركينا

وجدي هذا حل السؤال

ArrayList list=new ArrayList();
if(a.length<b.length)
swap(a,b);
for(int i :a)
for(int j:b)
if(i==j){
list.add(i);
break;
}

هذه الطريقة السهلة

طبعاً بتعقيد m*n حيث n وm هي أطوال المصفوفتين a و b

هل هناك طرق أسهل وجدي؟

نريد طباعة المصفوفة مرتين في نفس التكرار

مرة تكون الطباعة من أولها

ومرة تكون الطباعة من آخرها

هيا إبداع يا شباب

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اوكي راح احاول اشارك ... :)

نريد طباعة المصفوفة مرتين في نفس التكرار

مرة تكون الطباعة من أولها

ومرة تكون الطباعة من آخرها

هذا حل سريع ... و هناك ايضاً حل اخر في بالي (قريباً في الاسواق :) )

الحل هذا لو حابين ان تتم الطباعة من الشمال الى اليمين و بعده العكس

public static void main(String[] args) {

int array[] = {2,5,8,0,2,4,7};
String rtl = "";
String ltr = "";

int j = array.length - 1;

for(int i=0; i < array.length; i++)
{
ltr += array[i] + "\t";
rtl += array[j] + "\t";

j--;
}

System.out.println (ltr);
System.out.println (rtl);

}

اما اذا نريد ان نطبع مرة من البداية و مرة من النهاية :

public static void main(String[] args) {

int array[] = {2,5,8,0,2,4,7};

int j = array.length - 1;

for(int i=0; i < array.length; i++)
{
System.out.print (array[i] + "\t" +array[j] + "\t");

j--;
}

}

تم تعديل بواسطه بنت اليمن
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سؤال للحج شادي

كيف أرتب مصفوفة تصاعدياً؟

(هات وصلة لموضوعك الي بيتكلم عن الترتيب :lol: )

سؤال للجميع

لو كان لدينا مصفوفة أ تحتوي على عدد من العناصر س

نريد كشف بالعناصر للمصفوفة وتكرار كل عنصر

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ..

سؤال للجميع

لو كان لدينا مصفوفة أ تحتوي على عدد من العناصر س

نريد كشف بالعناصر للمصفوفة وتكرار كل عنصر

اعتقد هذا ما يسمى بالهستوجرام (تكرار لون في صورة او ذبذبة في ملف صوت) ...

لنفترض ان لدنا مصفوفة ِA قيمها بين الصفر و التسعة (كمثال : تكون اي قيمه داخلها بين 0 و 9) ، و تحتوي على 50 عنصر داخلها ..

int A[] = new int[50];

سوف نحتاج الى مصفوفة اخرى مدها بين الصفر و التسعة ، بجيث تحمل الخانة ذات الفهرس صفر عدد الاصفار

في المصفوفة A و الخانة ذات الفهرس 1 عدد الواحدت في المصفوفة A و هكذا ...

لنفترض اننا سوف ندخل القيم بشكل عشوائي الى المصفوفة A .. فسيكون الكود اللزم لإدخال العناضر و إحتساب عدد

تكرار كل عنصر كما يلي :

for (int i = 0; i<A.length; i++) {
A[i] = rnd.nextInt(10);
counters[A[i]]++;
}

و هذا كود شامل للعملية مع توضيح الطباعة :

import java.util.Random;

public class testArray {

public static void main(String[] args) {

Random rnd = new Random();
int A[] = new int[50];
int counters[] = new int[10];

for (int i = 0; i<A.length; i++) {
A[i] = rnd.nextInt(10);
counters[A[i]]++;
}

for (int i = 0; i<A.length; i++) {
System.out.print (A[i] + "\t");
}

System.out.println ();

for (int i = 0; i<counters.length; i++) {
System.out.println (i + " was found " + counters[i] + " times");
}
}
}

امنياتي بالتوفيق ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

موضوع جميل جدا جدا جدا و يجعل الواحد يتقن الoop و مش كده وبس ويعرف أفكار متعددة للمشكلة الواحدة

و إن شاء الله هشارك معاكم

و ياريت مستر علاء تعمل كده فى موضوعات تانى

و ربنا يوفقك و يجعلك سبب خير لكل أعضاء قسم الجافا

بيشوى عاطف

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

صحيح أخت بنت اليمن

وهذا الموضوع إحصائي أصلاً

ويستخدم في الكثير من العلوم

في معالجة الصور والأصوات يستخدم في تحديد نوعية الفلتر المستخدمة لتحسين الجودة

طيب ماذا لو قلنا لا نريد حدود للقيم

بمعنى أن لدي مجموعة من القيم أنا جاهل لماهيتها

شادي شكلي هقتلك :lol:

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلاً وسهلاً أخ بيشوي

نريد تفاعلاُ في هذا الموضوع

حتى نستطيع أن نكمل في غيره

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا أعتقد يوجد حل أفضل من حلك يا علاء ، لكن ممكن تحسينه بترتيب المصفوفه أولا ،،

بالنسبه لكيفيه عد العناصر من غير معرفتها ؟ فهذا سؤال جيد .. وربما الحل بعمل مصفوفه count بنفس عدد خانات المصفوفه التي تحتوي على العناصر ،، أي كل خانه في count تمثل لي تكرار الخانه المناظره لها في مصفوفه العناصر..

ونقوم بالبحث من البدايه للنهايه في مصفوفه العناصر، في حال وجدنا أن العدد غير موجود نقوم بزياده الموقع المناظر له في count ، والا نقوم بزياده موقع نفس العدد الموجود في count ..

انسخ الكود
  1.  
  2. [color= #000000; font-weight: bold;]for[/color] [color= #009900;]([/color][color= #000066; font-weight: bold;]int[/color] i[color= #339933;]=[/color][color= #cc66cc;]0[/color] [color= #339933;];[/color] i[color= #339933;]<[/color]array.[color= #006633;]length[/color] [color= #339933;];[/color] i[color= #339933;]++[/color][color= #009900;])[/color] [color= #009900;]{[/color]
  3. [color= #000066; font-weight: bold;]int[/color] num [color= #339933;]=[/color] array[color= #009900;][[/color]i[color= #009900;]][/color] [color= #339933;];[/color]
  4. [color= #000000; font-weight: bold;]if[/color] [color= #009900;]([/color] [color= #009900;]([/color]tmp [color= #339933;]=[/color] isFound[color= #009900;]([/color]num,array,i[color= #009900;])[/color][color= #009900;])[/color] [color= #339933;]!=[/color] [color= #cc66cc;]-1[/color][color= #009900;])[/color]
  5. count[color= #009900;][[/color]tmp[color= #009900;]][/color][color= #339933;]++;[/color]
  6. [color= #000000; font-weight: bold;]else[/color]
  7. count[color= #009900;][[/color]i[color= #009900;]][/color][color= #339933;]++;[/color]
  8. [color= #009900;]}[/color]
  9.  

وهذا الحل كامل ،، وربما هناك طرق أفضل :

import java.util.Random;

public class Demo {
public static void main (String args[]) {
int array[] = new int[30];
int count[] = new int[30];
Random rnd = new Random();
int tmp = 0;

for ( int i=0; i<array.length; i++)
array[i] = rnd.nextInt(10);

printArray(array);

for (int i=0; i<array.length; i++) {
int num = array[i];
if ( (tmp = isFound(num,array,i)) != -1)
count[tmp]++;
else
count[i]++;
}

for (int i=0; i<array.length; i++) {
if (( tmp=isFound(array[i],array,i)) == -1 )
System.out.println( array[i] + " : " + count[i] );
}
}

public static int isFound (int num , int arr[],int c) {
for (int i=0; i<c; i++)
if ( num == arr[i] )
return i;

return -1;
}

public static void printArray (int arr[]){
for (int element : arr)
System.out.print(element + " " );

System.out.println("\n\n");
}

}

بالتوفيق ،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جميل جداً وجدي

باستخدام المصفوفات هذا الحل الأفضل

وهو المطلوب في موضوعنا هذا

لكن استخدام List يوفر مساحة كبيرة

طيب لدينا كائن من نوع جملة String

نريد أن نجري عليه العملية indexOf

هذه العملية تأخذ مدخلين الجملة التي نريد البحث فيها

ولنسميها a

والجملة التي يتم البحث عنها

ولنسميها b

و ترجع كل الأماكن في الجملة a التي تتواجد فيها الجملة b

طبعاً لن أوصيكم بأن استخدام الدوال في String

غير مسموح به ما عدا charAt

أنا كمان أريد أن أشارك معكم

هل من أحد يطرح أسئلة :(

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أنا أعلم أن مشاركتي جائة متأخرة لكن هي فكرة أحببت وضعها

مارأيكم في طباعة المصفوفة بإحدى الدوال العكسية


// BlackBeard

public class Main {
static int[] array1={1,2,3,4,5,6,7};
static int[][] array2={{8,9,10,11,12,13,14},{15,16,17,18,19,20,21}};
static int i=-1;
static int j=-1;

public static void printArray(int[] a){
i++;
if(i<a.length){
System.out.print(a[i]+" ");
printArray(a);
}else{
i=-1;
}
}

public static void printArray2(int[][] a){
j++;
if(j<a.length){
printArray(a[j]);
System.out.println();
printArray2(a);
}else{
j=-1;
}
}

public static void main(String[] args) {
printArray(array1);
System.out.println();
printArray2(array2);
}
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تقصد العودية recursive؟

صدقاً لا أنصح باستخدامها إلا في الحالات التي تصعب البرمجة بدونها

مثل التكوينات الشجرية أو ماشابه

لأن مناداة دالة calling method والعودة إليها في آخر المطاف عند العملية الحسبة النهائية عبارة عن عمليات قفز في الذاكرة

ومعروف أن عمليات القفز تأخذ أعلى حمل

على الهامش أحيي فيك حب الإطلاع :)

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تقصد العودية recursive؟

صدقاً لا أنصح باستخدامها إلا في الحالات التي تصعب البرمجة بدونها

مثل التكوينات الشجرية أو ماشابه

لأن مناداة دالة calling method والعودة إليها في آخر المطاف عند العملية الحسبة النهائية عبارة عن عمليات قفز في الذاكرة

ومعروف أن عمليات القفز تأخذ أعلى حمل

على الهامش أحيي فيك حب الإطلاع :)

تحياتي

لم أكن أعلم أنها تسمى بالدالة العودية *قصدي المصطلح بالعربية*

على العموم هي فكرة عدم الإعتماد على الحلقة لم يتم ذكرها

مشكور أخي الكريم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ماذا عن الطباعة العكسية؟

ماذا عن الطباعة من المنتصف حرف من الأمام وحرف من الخلف؟

هيا أرونا الإبداعات

char[] array={'d','s','a','e','g','a','s','e','r','e','y','u'};

for(int i=0;i<=array.length;i++){
for(int j=i;j<=array.length;j++)
if((int)array[i]<(int)array[j])
swap(i,j);
System.out.println("array number "+array[i]);
}

بصراحة لست متأكد من موضوع casting

هل سيفهم المترجم الجملة بدونه

لكني وضعته للاحتياط

بالمناسبة الدالة swap تقوم بالتبديل بين العناصر في المصفوفتين

ويجب عليك كتابتها بنفسك :P

وأخيراً أقول ربما يكون هناك مشاكل في الشيفرة من ناحية المنطق

لأني لم أجربها

تحياتي

ولماذا لا تستخدم ال sort في كلاس Arrays


public class Test {

/**
* @param args
*/
public static void main(String[] args) {
char[] array={'d','s','a','e','g','a','s','e','r','e','y','u'};
java.util.Arrays.sort(array);
for(int i=0;i<array.length;i++)
System.out.println("array char "+array[i]);


}


}

على فكرة لديك خطأ في الكود الخاص بك حيث أن ال for التي وضعتها تخرج اكسبشن ارراي اوت اوف باوندريز لانك واضع >=

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .