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

برنامج لإيجاد أكبر رقم وثاني أكبر رقم

مغلق
بدأه علاء السلال في 6 مايو 2005 · 12 رد · 13,922 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

أرجو مساعدتي في اكتشاف الخطأ الذي وقعت فيه وأرشدوني إلى كيفية تصحيحه..

السؤال هو: قم بعمل برنامج يقرأ عدد من الأرقام ومن ثم يقوم بتحديد أكبر رقم وثاني أكبر رقم،

مثال : عند إدخال الأرقام : 5 10 20 36

فإن البرنامج يخرج لك أكبر رقم وهو : 36

وثاني أكبر رقم وهو : 5

لقد حاولت حل السؤال وهذه هي محاولتي:

**********************************

/* Max - second max program by ala101
***/
#include <iostream.h>
void main ()
{ int n , x , y , min , max , t , i;
cout << " How many numbers do you want to enter ? " << endl;
cin >> n;
cout << " Enter the first number \n ";
cin >> x;
max=x;
for (i=1; i<=n; ++i)
{
cout << " Enter number " << endl;
cin >> y;
if (max>y)
min=y;
if (y>max)
min=max;
max=y;
while (i==1) t=min;
if (min>t)
t=min;
} //end for 
cout << max<<endl<<t;
}

*******************

لكن عند تجربة هذا الكود في الكومبايلر فإنه لا يعمل بشكل صحيح..

أرجو المساعدة

أخوكم

علاء

;)

تم تعديل هذه المشاركة بواسطة HGB في 6 مايو 2005 في 15:42

اللهم طهر أرض فلسطين من العملاء والخونة

#2

ثاني اكبر رقم 5 ؟؟؟؟؟؟؟؟؟؟؟

ارى انه ثاني اكبر رقم هو 20 ؟؟؟؟؟؟؟؟؟؟؟؟؟

البرنامج حيختلف ياريت توضح ؟

52gv0m.gif
#3

السلام عليكم

أشكرك على الرد

وأعتذر عن الخطأ..

كما قلت أنت ثاني أكبر رقم هو 20

أرجو أن تساعدني في الكود

تحية طيبة

أخوكم

علاء

:)

اللهم طهر أرض فلسطين من العملاء والخونة

#4

لماذا أخترت هذه الطريقه , أفضل لو ترتب الأرقام ستعطيك مرونه أكثر ، تستطيع أن تطبع الأكبر ثم ثاني أكبر رقم أو العكس

شوف الكود بسيط وسهل :-

#include "iostream.h"

int main()
{
	// always make your programs as simple as possible 
	int n,tmp,j,largarray[512];
	cout << "how many numbers do you want to enter ? \n";
	cin >> n; //do a check on "n" musnt be larger than largarray[]
	for(int i =0;i<n;i++)
	{
  int x=i+1;
  cout << "enter "<<x<<" number :\n";
  cin >> largarray;
	}
	for (i=0; i<n-1; i++) 
	{
  for (j=0; j<n-1-i; j++)
     if (largarray[j] < largarray[j+1]) //<- switch [j] with [j+1]
  {           // to get the oppesite  
 	 tmp = largarray[j];
 	 largarray[j] = largarray[j+1];
 	 largarray[j+1] = tmp;
  }
	}
	cout <<"the largest number is "<<largarray[0]<<endl	//  ^
	<<"the 2nd largest is "<<largarray[1]<<endl;  //  |
	/* the first element contains the biggest number   |
    the last element is the smallest, also it depends on  |
    so it will be the oppesite if you switch j with j+1 */
	return 0;
}
#5

لسلام عليكم،

أخي العزيز..

أشكرك على المساعدة وعلى الكود الجميل..

قمت بتجربته وهو ممتاز وبسيط..

لكنني لا أعرف ما هي ال largarray ..

و largarray[j]

و largarray[512];

وهذا السؤال مطلوب حله بأبسط الإمكانيات..

أتمنى أن تستطيع أن تعطيني كود بسيط جداً لا يقوم باستدعاء أي مكتبة من ال functions

بحيث يكون كود بدائي .. يتناسب وفق ما طلبه منا الدكتور حيث هذا الكود ضمن مادة أساسيات البرمجة..

أنا ما زلت أحاول حل السؤال لكنني لم أصل إلى نتيجة بعد..

تحية طيبة ،

أخوكم،

علاء

:)

اللهم طهر أرض فلسطين من العملاء والخونة

#6

أتمنى لو تستطيع تعديل الكود الذي قمت أنا بكتابته في المقدمة..

لا أعرف ما الخطأ فيه بالضبط..

اللهم طهر أرض فلسطين من العملاء والخونة

#7

اخي انظر الى هذا الكود البسيط ...

#include<iostream.h>
int main ()
{
	int x,y,z,max,max2;
	cout <<" enter the number 1:";
	cin>>x;
	cout << endl;
	cout << " enter the number 2:";
	cin>>y;
	cout << endl;
	cout << "enter the number 3:";
	cin>>z;
	cout << endl;
	if ( x>y){ max=x;} else {max=y;}
	if ( max<z){max=z;} 
	if (x<y){max2=y;}else {max2=x;}
	if (max2>z){max2=z;}
	cout <<"max="<<max<<endl;
	cout << "max2="<<max2<<endl;
	return 0;
}

ان شاء الله تكون تستخلص الفكره من البرنامج :lol:

لم اجرب البرنامج لكني متاكد من صحته :rolleyes: :rolleyes:

بالتوفيق

52gv0m.gif
#8

أخي نوري..

أشكرك على الكود .. لكنه لا يستقبل إلا 3 أرقام..

Write a program to read n integer numbers and then find the maximum value and the second maximum value

لذلك أعتقد أنه يجب تعديل الكود واستخدام جملة for أو while

في انتظار ردكم

أخوكم

علاء

:)

اللهم طهر أرض فلسطين من العملاء والخونة

#9
ala101 كتب:
أخي نوري..

أشكرك على الكود .. لكنه لا يستقبل إلا 3 أرقام..

Write a program to read n integer numbers and then find the maximum value and the second maximum value

لذلك أعتقد أنه يجب تعديل الكود واستخدام جملة for أو while

في انتظار ردكم

أخوكم

علاء

:)

اخي فعلا يستقبل ثلاث ارقام ...

خلالالاص ما بقي عليك شي انت ...

يعني افهم الفكره وعدل بالبرنامج متل ما انت بدك ...

ويوجد مثاليين عندك .. شوف وحاول واذا لم تستطع نساعدك ..

تحياتي

52gv0m.gif
#10

أشكرك على التواصل..

فهمت الفكرة وقمت بكتابة الكود التالي:

********************

/* Welcome to ala' program!!

Good Luck!

***/

#include <iostream.h>

void main ()

{ int x, y, z, max, max2, s, i , n ;

cout << " How many Numbers do you want to enter? " << endl ;

cin >> n ;

cout << " Enter the First Number " << endl ;

cin >> x ;

cout << " Enter the second Number " << endl ;

cin >> y ;

cout << " Enter the third Number " << endl ;

cin >> z ;

if ( x > y && x > z )

{

max = x ;

max2 = z ;

if ( y > z )

max2 = y ;

}

if ( y > z && y > x )

{

max = y ;

max2 = z ;

if ( x > z )

max2 = x ;

}

if ( z > y && z > x )

{

max = z ;

max2 = x ;

if ( y > x )

max2 = y ;

}

for ( i = 4 ; i <= n ; ++i )

{

cout << " Enter Number " << i <<" : " << endl;

cin >> s ;

if ( s > max )

{max2 = max ;

max = s ; }

else if ( s > max2 )

max2 = s ;

}

cout << " The Maximum Number is " << max << endl ;

cout << " The second Maximum Number is " << max2 << endl ;

cout << " Thanks a lot for using our program! " << endl ;

}

************

أرجو أن تدققه لي وأتمنى أن يكون صحيحاً هذه المرة

تحية طيبة

أخوكم

علاء

:)

تم تعديل هذه المشاركة بواسطة ala101 في 7 مايو 2005 في 13:18

اللهم طهر أرض فلسطين من العملاء والخونة

#11

:( :( :( :(

اخي العزيز ....

انت لم تقوم سوا باضافه قليله على البرنامج بدون التفكير بالبرنامج ... :( :(

الفكره هيي انك ستقوم بايجاد اكبر عدد عن طريق اداه الشرط if

وتتبع النتايج ونضع الاحتمالات لكل عدد ..

طبعا كلما زاد عدد الارقام زادت الاحتمالات ...

وستكون طويله وتشتت الافكار .. خاص في هذا المثال ...

لانه يريد ايضا ايجاد ثاني اكبر رقم .. وقد فصلت بين ايجاد الاكبر وثاني الاكبر ...

كي لا تتشت وتستطيع متابعه الكود ...

for ( i = 4; i <= n; ++i )
{
cout << " Enter Number " << i <<" : " << endl;
cin >> s;
if ( s > max )
{max2 = max;
max = s; }
else if ( s > max2 )
max2 = s;
}

اخي هنا يوجد الكثير من الاخطاء ... والله اعلم

يعني ما فائده for هنا وانت فقط سوف تدخل رقم واحد وهو

cin>>s;

ان كان البرنامج 4 ارقام فما عليك سوا اضافه عدد الشروط دون الحاجه الى for loop هنا

وتقوم بالمقارنه الرقم الجديد ببقيه الارقام ووضع الاحتمالات ليكون الرقم الرابع هو الاكبر او ثاني الاكبر

اتمنى ان تكون قد فهمت

تحياتي

52gv0m.gif
#12

أشكرك على المتابعة..

أخي العزيز البرنامج ليس فقط لأربع أرقام..

ولكن لعدد مجهول من الأرقام حسب رغبة المستخدم ( n numbers )

ذلك فإن اللوب في جملة For يطلب من المستخدم الاستمرار في إدخال الأرقام حسب قيمة n التي أدخلها المستخدم في بداية البرنامج..

مثلاً.. لو قام المستخدم بإدخال قيمة n = 4

فسيتم تنفيذ جملة التكرار مرة واحدة، وهكذا يكون قد تم إدخال 4 قيم والمقارنة بينهم..

أما إن كانت قيمة ال n على سبيل المثال 7

فإن جملة التكرار ستتكرر 4 مرات ، وهكذا يكون المستخدم قد أدخل 7 قيم وتتم المقارنة بينهم..

وعلى هذا الأساس فإن الكود يعمل لكل قيم n : n>= 3

لأنه منطقياً يتم المقارنة بين 3 أرقام على الأقل لتحديد أكبر رقم وثاني أكبر رقم..

أتمنى أن يكون الكود صحيح ..

وشكراً لك على مساعدتك وتواصلك..

:)

اللهم طهر أرض فلسطين من العملاء والخونة

#13

اخي عليك هنا استخدام arrays

#include "iostream.h"

int main()
{
// always make your programs as simple as possible 
int n,tmp,j,largarray[512];
cout << "how many numbers do you want to enter ? \n";
cin >> n; //do a check on "n" musnt be larger than largarray[]
for(int i =0;i<n;i++)
{
 int x=i+1;
 cout << "enter "<<x<<" number :\n";
 cin >> largarray;
}
for (i=0; i<n-1; i++) 
{
 for (j=0; j<n-1-i; j++)
    if (largarray[j] < largarray[j+1]) //<- switch [j] with [j+1]
 {           // to get the oppesite  
  tmp = largarray[j];
  largarray[j] = largarray[j+1];
  largarray[j+1] = tmp;
 }
}
cout <<"the largest number is "<<largarray[0]<<endl //  ^
<<"the 2nd largest is "<<largarray[1]<<endl;  //  |
/* the first element contains the biggest number   |
   the last element is the smallest, also it depends on  |
   so it will be the oppesite if you switch j with j+1 */
return 0;
}

لا توجد طريقة سواها .. اذا ما ارد اليوزر ان يدخل العدد الذي يريده من الارقام ...

وكما قال لك اخي في المثال هذا .. فهو الحل الصحيح ...

for ( i = 4; i <= n; ++i )
{
cout << " Enter Number " << i <<" : " << endl;
cin >> s;

اخي القيمه s من نوع int ... وسوف تاخد قيمه واحد ...

وتحتاج هنا الى الاراي كما اسلفت ذكره

بالتوفيق

52gv0m.gif

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

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