الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال في المصفوفات

مغلق
بدأه mazen_is في 7 فبراير 2007 · 5 رد · 730 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم عدتكم بطلب مساعدة

أرجو أن لا تخذلوني:

السؤال:

اكتب برنامجاً يقوم أولاً بقراءة (إدخال) 150 قيمة عددية صحيحة على شكل مصفوفة ثم يقوم بحساب عدد القيم التي لم يتكرر إدخالها وحساب عدد القيم التي تكرر إدخالها

الشرح القيم المككرة المذكورة تختلف عن تكرارات القيم أي مثلا:2,1,2,1,1

الثيم المكررة هي 1,2 وعددها 2

وقد حاولت جاهدا أن أصل لحل وهذة هي محاولاتي:

#include <iostream.h>
int R[100];
int Rrept[100];
void ReadArray()
{
	for (int i=0;i<10;i++){
	cout << "Enter the item "<<i+1<< " to Array ";
	cin>>R;
	}

}
int A()
{
	int temp=0;int count=0;
	for(int i=0;i<10;i++){
		if (Rrept==R[temp]) break;
		for (int j=i+1;j<10;j++){
			if (R==R[j]){
				Rrept[temp]=R;
				cout << Rrept[temp] << " -- " << R << endl;
				count++;
				temp++;

			}
		}

	}

	return count;
}

ولم أصل للحل الصحيح هل من مساعدة؟

لا أملك الكثير من الوقت :wacko:

#2

الأخ الفاضل ...

أرجو أن يفيدك هذا المثال فى ما تريد إنجازه

بإستخدام (MS-VC 6.0)

RepeatedData.zip

#include <iostream.h>

struct val
{
int value;
int repeats;
};

struct val R[150];
int  iIndex = -1;

int AddValutToArray(int v);
void ReadArray(int x);
void WriteArray();
void CalcRepeats();

int main(int argc, char* argv[])
{
ReadArray(10);
WriteArray();
CalcRepeats();

cout  << endl<< "Press any key to exit." << endl;
getchar();

return 0;
}

int AddValutToArray(int v)
{
for(int i=0; i<=iIndex; i++)
  if (R.value == v)
  {
   R.repeats++;
   return R.repeats;
  }

iIndex++;

R[iIndex].value  = v;
R[iIndex].repeats = 1;

return R[iIndex].repeats;
}

void ReadArray(int x)
{
int v;

	for (int i=0; i<x; i++)
{
  cout << "Enter the item "<<i+1<< " to Array: ";
  cin >> v;

  AddValutToArray(v);
	}
}

void WriteArray()
{
cout  << endl << "Values and Repeats" << endl << endl;

	for (int i=0; i<=iIndex; i++)
  cout << "Item [" << i+1 << "] -> Value: " << R.value << " Repeate: " << R.repeats << endl;
}

void CalcRepeats()
{
int repeated, unrepeated;

cout  << endl << "Repeated and Unrepeated" << endl << endl;

	repeated = 0;
unrepeated = 0;
for (int i=0; i<=iIndex; i++)
{
  if (R.repeats > 1)
	  repeated++;
  else
   unrepeated++;
}

cout  << "Repeated Items:   " << repeated << endl;
cout  << "UnRepeated Items: " << unrepeated << endl;
}

يوجد مثال مشابه : /index.ph...howtopic=115923

وشكراً

تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 7 فبراير 2007 في 04:13

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#3

السلام عليكم ورحمة الله

أخى الكريم mazen_is

مشكلتك حلها سهل ان شاء الله

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

ولعمل ذلك , مرفق كود بلغة matlab ( هى ما تمكنت من استخدامه حاليا بسبب عدم وجود VC على جهازى ) والكود سهل جدا ان شاء الله وبه توضيح لكل خطوة. ويمكنك بعد ذلك ترجمته باللغة التى تحب.

function [rep, notrep, r]=test

														 %ادخال البيانات
A=[1 2 3 4 1 4 2 8 4 7 15 2 4 6 15 7 5 8 4 4 9 15];


num=0;													%عداد
for i=1:length(A)										 %length(A)=عدد القيم
	if A(i)~=10000000									  % اى رقم اكون واثق انه غير موجود فى المصفوفه
		num=num+1;		
												   %نعرف مصفوفه جديده مكونه من صفين		
		B(1,num)=A(i);									 %الصف الاول وبه عناصر المصفوفة الاصليه بدون تكرار
		B(2,num)=1;										%الصف الثانى وبه عدد تكرار كل عنصر بدية يوضع بواحد
		for j=i+1:length(A)
			if A(j)~=10000000 & A(j)==A(i)
				B(2,num)=B(2,num)+1;						% فى حالة التكرار يتم الزيادةبمقدار واحد
				A(j)=10000000;
			end
		end
	end
end
r=B;
														   % يتم العمل الان على عناصر المصفوفه الجديده 
rep=0;
notrep=0;
for i=1:num
	if B(2,i)==1 
		notrep=notrep+1;									 % حساب عدد غير المكرر
	else
		rep=rep+1;											% حساب عدد المكرر
	end
end

والنتائج للمثال السابق هى كالتالى

rep=6
notrep=4
r=
العناصر الاصلية(غير مكررة)	  1	 2	 3	 4	 8	 7	15	 6	 5	 9
التكرار لكل عنصر					   2	 3	 1	 6	 2	 2	 3	 1	 1	 1

ملاحظه: العلامة == تعنى التساوى فى الجمل الشرطيه للغة matlab بينما ~= تعنى عدم التساوى.

ومستعد لاى توضيحات اضافيه ,

والله الموفق ,,,

تم تعديل هذه المشاركة بواسطة عماد حمدي احمد في 7 فبراير 2007 في 06:25

أشهد أن لا إله إلا الله وأشهد أن محمدا رسول الله

bnr025.gif

مـــوقـــعـــى

#5

وصلني الرد مشكورين سأنابع ردكم السريع والرائع وسأعود للتعليق

شكراااا

وصلني الرد مشكورين سأنابع ردكم السريع والرائع وسأعود للتعليق

شكراااا

#6

اخي مازن فكرت في برنامجك ووجدت هذه الطريقة ساذكرها لك من دون الكود لاني اكتب به لحد الان وهو برنامج جميل جدا واريد منك ان تقرأ فكرتي وتكتب هل فهمي عن السؤال صح ام لا ..؟؟؟؟؟

الطريقة هي كالتالي وبرمجة تقريبا 80 % منها بالسي ..

نقوم بانشاء ثلاثة مصفوفات .. الاولى لادخال الارقام (كم تريد من الارقام ولنفرض عشرة ارقام ) . والمصفوفة الثانية نستعملها لنقل الارقام من المصفوفة الاولى (نفس القيمة والموقع ..اي :-

لو كان الموقع 0 يحمل القيمة 1 في المصفوفة الاولى .. فإن الموقع 0 في المصفوفة الثانية يحمل القيمة 1 ايضا .

والغرض من هذه العملية هو التالي .. نقوم بالمقارنه بين جميع قيم المصفوفة الاولى مع القيمة الاولى من المصفوفة الثانية اذا كانت متكرره تخزن بالمصفوفه الثالثه ، وبعدها نقارن مره اخرى جميع عناصر المصفوفة الاولى مع القيمة الثانية من المصفوفة الثانية وهكذا . بعد الانتهاء من هذه العمليه نطبع المصفوفة الثالثه . وهي الارقام المتكرره . واذا كنت تريد كم مره متكرره الرقم فتصبح هناك اضافة بسيطة بعداد المقارنه .

انا لا اريد ان اطيل بالكلام ولكن اريد منك الرد هل هذا هو المطلوب جرب هذه الطريقة لعلها تنفعك وإن شاء الله ساكمل الكود واضعه لكي تكمل المشاركة ولكن اريد منك الرد في اسرع وقت .

تحياتي ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

هذا الموضوع مغلق.

مواضيع مشابهة