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

خطأ في كود اريد فيه مساعده

بدأه Don DaVinci في 22 أكتوبر 2010 · 13 رد · 707 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع


using namespace std;

int main()

{

int arr[20];

int number;

cout << "please put a number between 10 & 100 : ";

for( int i =0 ; i < 20; i++)

{



cin >> number;

while ( number < 10 || number > 100)

{

cout << "invalid number .. " <<endl;

cin >> number;

}

for(int j = 0 ; j < i ; j++)

{



if (number == arr[j] )

{

cout <<"Duplicated number .." <<endl;

cin >> number;



}



}

cout << "number add " << endl;

arr = number;

}

cout << "--------------------------------------------------------" << endl;

cout << "nonduplicate values are : " <<endl;

for ( int z =0 ; z < 20 ; z++)

{

cout << arr[z] << " " ;

}

cout << "please enter a number between 1 and 20: " <<endl;

int choose;

int avarge;

int calculate=0;

cin >> choose;

for ( int y = 0 ; y < choose ; y++)

{

calculate += arr[y];



}

avarge = calculate / choose;

cout << "the avarge of first " << choose << " element(s) in array is : " << endl;

cout << avarge << endl;

cout << " -------------------------------------------------" <<endl;

cout << " the firest element in array is " << endl;

cout << arr[0] <<endl;

cout << " the last element in array is " << endl;

cout << arr[19] << endl;

cout << "the middele element in array is " << endl;

int mid;

mid = 20 / 2 ;

cout << arr[mid] <<" and " << arr[mid+1] << endl;

cout << "------------------------------------------------------------------" <<endl;

bool sort = true;

for ( int k =0; k < 20 ; k ++ )

{

if (arr[k] > arr[k+1])

{

sort = false;

break;

}



}

if(sort == true )

{

cout << "array is sorted .... " <<endl;

}

else

{

cout << " array is not sorted... " << endl;

}



return 0;



}
#include <iostream>

في هذآ الكود عندي خطأ بسيط لا اعلم مآ هوٍ .. لكن الخطأ يقع في هذه المنطقه من الكود ..










for( int i =0 ; i < 20; i++)

{



cin >> number;

while ( number < 10 || number > 100)

{

cout << "invalid number .. " <<endl;

cin >> number;

}

for(int j = 0 ; j < i ; j++)

{



if (number == arr[j] )

{

cout <<"Duplicated number .." <<endl;

cin >> number;



}



}

cout << "number add " << endl;

arr = number;

}

الخطأ في المخرجات عندما اشغل البرنامج َ يطلب مني اول رقم ثم ادخله ..

ثم يطلب مني الرقم الثاني .. عندما ادخل الرقم الثاني يقول ان هناك رقم اخر مشابه له في المصفوفه !

هنا تطلع لي هذه الرساله

"Duplicated number .."

اتمنى تجريب الكود لـ تفهموآ المقصد بالضبط =(

#2

تمام اخي . عندما تدخل رفم موجود بالفعل بالمصفوفة arr تظهر لك رسالة Duplicated number خلاف ذلك لا تظهر 

ارجو التوضيح اكثر ان كان هناك مشكلة

--

Mina Fouad

Computer & Systems Engineering Dpt.

Faculty of Engineering

Alexandria University

#3

domain-ab45765f5b.png

المشكله كما بالصوره

عندما اعيد اضافه الرقم اكثر من مره يضيفه ولا يخرج لي رساله Duplicate ( كأنه رضخ للأمر الواقع :P )

#4
#include <iostream>
using namespace std;

int main()   
{   
    int arr[20];    
    int number;    
    for( int i =0 ; i < 20; i++)    
    {        
entering:      cout << "please put a number between 10 & 100 : ";    
               cin >> number;    

               while ( number < 10 || number > 100)    
	           {  
		     	   cout << "invalid number .. " <<endl;   
		           cout<<"please put a number between 10 & 100: "; 
		           cin >> number;   
	           }

               for(int j = 0 ; j < i ; j++)   
               {   
                   if (number == arr[j] )   
                   {   
                        cout <<"Duplicated number .." <<endl;
				        goto entering ;    // because should check the new number is a valid number...

                   }    
               }

			   // now the number is between 10 and 100 and also is not duplicate
               arr = number;    
               cout << "number added successfully" << endl;    
    }

تم تعديل هذه المشاركة بواسطة u77431 في 23 أكتوبر 2010 في 16:30

#5

الأخ الفاضل / u77431 ,

جربت كودك لكن طلع لي نفس الخطأ ,

post-174533-001834100 1287836901_thumb.j

هذا الكود بعد التصحيح :

#include <iostream>
using namespace std;
int main()  
{  
	int arr[20], number; 
    bool Duplicated = false;
    for( int i =0 ; i < 20 ; i++)   
    {       
		do{
		 Duplicated = false ;
		 cout << "please put a number between 10 & 100 : ";   
         cin >> number;  
         while ( number < 10 || number > 100)   
         {   
               cout <<"Invalid number .. " <<endl;  
               cout<<"please put a number between 10 & 100: ";
               cin >> number;  
         }  

         for(int j = 0 ; j < i ; j++)    
                if (number == arr[j] )  
				{
                    cout <<"Duplicated number .." <<endl;
                    Duplicated = true ;
				}
	     }while (Duplicated);
          arr = number;   
         cout << "number added " << endl;   
	}
    return 0;
}

بالتوفيق :happy: ,

المرفقات
error.JPG
2

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#7

نعم کان فیه خطأ و أنا کنت فی تعدیله من قبل :cool:

لقد صححتها.

الآن لیس فیه خطأ.

تم تعديل هذه المشاركة بواسطة u77431 في 23 أكتوبر 2010 في 16:53

#8

یا أختی أشراقة فجر، فی کودی و کودک خطأ و هو إن دخل حرف کمثل u او a او .... while یدوم و لا یقطع؟!!!

هذا کودی:

#include <iostream> 
using namespace std; 

int main()    
{    
    int arr[20];     
    int number;     
    for( int i =0 ; i < 20; i++)     
    {         
entering:      cout << "please put a number between 10 & 100 : ";     
               cin >> number;     

               while ( number < 10 || number > 100)     
                   {   
                           cout << "invalid number .. " <<endl;    
                           cout<<"please put a number between 10 & 100: ";  
                           cin >> number;    
                   } 

               for(int j = 0 ; j < i ; j++)    
               {    
                   if (number == arr[j] )    
                   {    
                        cout <<"Duplicated number .." <<endl; 
                                        goto entering ;    // because should check the new number is a valid number... 

                   }     
               } 

                           // now the number is between 10 and 100 and also is not duplicate 
               arr = number;     
               cout << "number added successfully" << endl;     
    }

تم تعديل هذه المشاركة بواسطة u77431 في 23 أكتوبر 2010 في 16:44

#9

اشرآقه فجر ٍ

اشكركَ اختي على المسآعدهَ +1

فعلا الكود اصبح صحيح .. لكن كما قآل اخي u77431 عند وضع حروف لا يتوقف البرنامج :)

u77431

كذلك اشكراخي على الـ مسآعده َ كودك بعد التعديل كذلك صحيح

لكن هـل من الممكن ان تشرح لي عمل goto ?

وهل من الممكن ان يشرح لي احد الخطأ الذي وقعت فيه وكذلك الذي وقع فيه u77431 عندما وضع j =0 ??

اقصد كـ تريسنق للكود من المفترض عندما يضع j = 0 فهو يرجع الى اول الـ مصفوفه ويبحث مره اخرى !

هل منطقي صحيح ام خآطئ ! :huh:

كذلك الخطأ الذي وقعت فيه الاخت فجر .. لمآذآ عندما ندخل حرف لا يتوقف البرنامج ..

وهل بالامكان عمل طريقه بدون الكلمه المحجوزه goto ?

اشكركم مره اخرى

تم تعديل هذه المشاركة بواسطة Don DaVinci في 23 أكتوبر 2010 في 19:55

#10
Don DaVinci كتب:

اشرآقه فجر ٍ

اشكركَ اختي على المسآعدهَ +1

فعلا الكود اصبح صحيح .. لكن كما قآل اخي u77431 عند وضع حروف لا يتوقف البرنامج :)

u77431

كذلك اشكراخي على الـ مسآعده َ كودك بعد التعديل كذلك صحيح

لكن هـل من الممكن ان تشرح لي عمل goto ?

وهل من الممكن ان يشرح لي احد الخطأ الذي وقعت فيه وكذلك الذي وقع فيه u77431 عندما وضع j =0 ??

اقصد كـ تريسنق للكود من المفترض عندما يضع j = 0 فهو يرجع الى اول الـ مصفوفه ويبحث مره اخرى !

هل منطقي صحيح ام خآطئ ! :huh:

كذلك الخطأ الذي وقعت فيه الاخت فجر .. لمآذآ عندما ندخل حرف لا يتوقف البرنامج ..

وهل بالامكان عمل طريقه بدون الكلمه المحجوزه goto ?

اشكركم مره اخرى

نعم،

العمل goto:

أنظر إلی هذا فی الکود:

entering:      cout << "please put a number between 10 & 100 : ";

و إیضا أنظر إلی هذا:

  goto entering ;    // because should check the new number is a valid number...

فلکمبایلر إذا وصل إلی الکود الثانی یذهب إلی مکان الذی goto یشیر. فهو الکود الأول.

هذا هو أسهل إذا أردنا أن نترک مکان و ذهبنا إلی مکان آخر.

منطقک صحیح ، إذا نجعل j=0 فهو یبحث مرة أخری کل الأرقام الماضی فهو صحیح. و لکن إن دخل الشخص عدد کمثل هذا: 101؟؟! . while لا یعمل و وقع الخطأ و یثبت عدد 101. فوقع الخطأ. فلذا نستعمل الکلمة المحجوزة goto لنذهب إلی فوق الwhile لنبحث مرة اخری

تم تعديل هذه المشاركة بواسطة u77431 في 23 أكتوبر 2010 في 20:09

#11

شكرآ لـك عزيزي َ

وضحت لي المسأله .. +1

#12

لا أقدر أن أقول کلامی باللغة العربیة بوضوح. سأقول بالأنجلیزیة:

we should put j=0. because assume that j=3,and we insert a duplicate number. then the program asks us for another number. and we insert it. but the compiler doesn't search number before j=3 and searches after it. so if we put another duplicate number it will add

#13
اقتباس
كذلك الخطأ الذي وقعت فيه الاخت فجر .. لمآذآ عندما ندخل حرف لا يتوقف البرنامج ..

وهل بالامكان عمل طريقه بدون الكلمه المحجوزه goto ?

بالنسبة لمشكلة الحروف , يمكن تلافيها بكتابه دالة تشيك ع أن المدخل فقط أرقام ..

ما ادري شنو تقصدين بعمل طريقة أخري بدون goto , شوفي حلي ما أستخدمتها ..

بالتوفيق :happy: ,

سبحآن الله وبحمده .. سبحآن الله العظيم .. ,

#14

نقدر أن نستعمل هذا الکود لکی لا یدوم البرنامج عند وضع الحروف.

               if ( number < 10 || number > 100)      
                   {    
                           cout << "invalid number .. " <<endl;     
                           i-=1;
	                    continue;

تم تعديل هذه المشاركة بواسطة u77431 في 24 أكتوبر 2010 في 17:01

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