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

أكبر عددين

مغلق
بدأه abdulrahman1407 في 21 أغسطس 2006 · 12 رد · 955 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أنا حاولت أن أكتب برنامج بـ C++ لكي أطلع لأكبر عددين من بين عشرة وحاولت إلى أن وصلت إلى الكود التالي

#include <iostream>
using namespace std;

void main (void)
{
	double large1 = 0 ,
		   large2 = 0 ,
		   number	 ,
		   lastnum	 ;

	for (int i = 1; i <= 10; i++)
	{
		cout << "Enter a number: ";
		cin  >> number;
		if (number > large1)
			large1 = number;
		else if ( (number < large1) && (number > large2) )
			large2 = number;
	}
	cout << "The 1st largest number is " << large1 
	 << " ,\nThe 2nd largest number is " << large2 << endl;
	system ("pause");
}

ولكن البرنامج يشتغل لو كانت الأرقام ملخبطة أو مرتبة تصاعديأً أما لو كانت مرتبة تنازلياً مثل 10 9 8 7 6 5 4 3 2 1 فالبرنامج يطلع الأكبر الأول ويخلي الثاني صفر، أرجو منكم التصحيح.

#2

طبعاً نسيت أقول إن المتغير lastnum ماله فايدة نسيت أمسحه من الكود.

#3

قصدك لما بترتب تصاعديا من 1 إلى 10, هو السبب إنك كل رقم بتدخله عمره ما حيحقق الشرط دا >

(number < large1) && (number > large2)

لأن number عمره ما حيكون أقل من large1

تم تعديل هذه المشاركة بواسطة Blueteeth في 21 أغسطس 2006 في 21:27

#4

البرنامج يعمل على ما أظن على الأرقام المرتبة تنازليا لكن لا يعمل على المرتبة تصاعديا

في الترتيب التصاعدي : :o

اكيد رح يطلع الرقم التاني صفر لأنه جملة if التانية هي عبارة عن شرطين بينهما and يعني لو ما تحقق الأول (false) لن يتحقق من التاني

عند ادخالك الرقم الأصغر في البداية سيحتل المتغير large1

عند ادخال اي رقم اخر أكبر(ترتيب تصاعدي)منه لن يتحقق شرط (number<large1) لذلك ستبقى قيمة المتغير large2 = 0

مشان تخلص من هالمشكلة ممكن انك تزيل الشرط (number<large1) في جملة if التانية لأنها ضمنيا مطبقة

على الترتيب التنازلي اعتقد انه يعمل

white soul

تم تعديل هذه المشاركة بواسطة white soul في 21 أغسطس 2006 في 21:16

Computer Engineer

2007

"اللهم يا مثبت القلوب ثبت قلبي على دينك "

ولدتك امك باكيا والناس حولك يضحكون سرورا

فافعل لنفسك ان تكون اذا بكوا في يوم موتك ضاحكا مسرورا

#5

المشكلة في else if

else if ( (number < large1) && (number > large2)

خليها جملة if لوحدها وان شاء الله تشتغل مظيوط على ما اعتقد

APCO

#6

المشكلة في else if

else if ( (number < large1) && (number > large2)

خليها جملة if لوحدها وان شاء الله تشتغل مظيوط على ما اعتقد

APCO

** آسف للتكرار

تم تعديل هذه المشاركة بواسطة apco1974 في 21 أغسطس 2006 في 21:35

#7

الأخ Blueteeth و white soul و apco1974 أعلم أن المشكلة في الأعداد التصاعدية ولكن يمكن من العجلة أخطيت وكذلك أعلم أن عبارة else if فيها مشكلة بس كيف أصححها، الحلول السابقة كانت مجربها قبل هذا الكود ولكن لا حل.

#8

أنا ولله كنت كاتبلك حل بس أخدت بالى إنه بيعمل نفس المشكلة مع التنازليه :) فحذفته.

كحل مبدئى ممكن تخزن الأعداد فى مصفوفة و البحث حينها سيصبح سهل جدا و مباشر؟

إن شاء الله غدا سوف أبحث عن طريقة لحسابها on the fly زى مانتا عامل كدة.

#9

السلام عليكم

سيكون الحل المنطقي لسؤالك هكذا

#include <iostream>
using namespace std;

void main (void)
{
	double large1 = 0 ,
		   large2 = 0 ,
		   lastnum	;
		  double[] number;

	for (int i = 1; i <= 10; i++)
	{
		cout << "Enter a number: ";
		cin  >> number;

	 }

	 for (int i = 1; i <= 10; i++)
	{
		if (large1 < number)
			large2 = large1;
			large1 = number;
	}

	cout << "The 1st largest number is " << large1 
	 << " ,\nThe 2nd largest number is " << large2 << endl;
	system ("pause");
}

I Feel Hunger (; without Windows Bugs" Dr.Penguin

98-problem.jpg
#10

شكراً أخوي Microsoft.com على الحل لكن السؤال هذا وارد في كتاب C++ How To Program 5th Edition في الفصل الرابع منه وعنوان الفصل Control Statements: Part1 لذلك أنا ما أحببت أستخدم المصفوفات وهي واردة في الفصل السابع من الكتاب هذا اللي خلاني أكتب الكود بهذه الطريقة، فالسؤال يمكن أن يحل بدون مصفوفات فلو كنت تعرف الحل يا ليت تكبه بدون مصفوفات وشكراًً مقدماً.

#11

العضو الكريم.

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

انا هنا افترضت ان عدد العناصر مش معلوم. لكن عشان نحافظ على صلب الموضوع اعتبرت شرط الانتهاء ان العدد 10. ده ممكن تستبدلة بالوصول لنهاية الملف او ما شابه.

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

جرب ادخال اكبر رقم مكرر.

البرنامج ده اظنه شغال

#include <iostream>
using namespace std;

void main (void)
{
	double large1 , large2 , number;

	int i=0;
	do {
		cout << "Enter a number" << i+1 << ": ";
		cin  >> number;

		if(i==0){
			large1 =large2 = number;
		}
		if(i==1){
			if(number<large2){
				large2 = number;
			}
		}
		if (number >= large1){
			large2 = large1;
			large1 = number;
		}
		i++;
	}while(i<10);
	if(i!=0){
		cout << "The 1st largest number is " << large1 << endl;
		cout << "The 2nd largest number is " << large2 << endl;
		system ("pause");
	}else{
		out << "No numbers given" << endl;
	}
}

اسف ياجماعة

system ("pause");

لازم تكون اخر سطر و خارج جملة if

اسف على الازعاج

#12

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

هذا السؤال طرح في المنتدى أكثر من مرة

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

MPSI/MP* - CPR Tanger

#13

موضوع أتكرر كتير بس كويس للمبتدئين

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

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