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

[ تمت الإجابة ]برنامج يعتمد على المصفوفات والدوال

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

السلام عليكم

في البرنامج التالي لاأعلم لماذا لا يقبل بارسال قيم المصفوفة الى الدالة check

اتمنى منكم المساعده

#include <iostream>
using namespace std ;

const int size = 100 ;

int sum_Po = 1,

void check(char [], int) ;

int main()
{
    int f = 0,
            i, stop ;

    char Val ;

    char eq[size] ;

    cout << "Press dot (.) to know that u finished ....... \n\n" ;

    for (i = 0 ; (i <= size - 1 && !f) ; i++)
    {
        cin >> eq ;

        if (eq == '.')
        {
            f = 1 ;
            stop = i - 1;
        }

    }

    cout << "\nEnter the value of x : " ;
    cin >> Val ;
    cout << "\n\n" ;

    for (i = 0 ; i <= stop ; i++)
    {
        if(eq == 'x')
            eq = Val ;
    }

 check(eq, stop) ;

}

void check(char eq[], int stop)
{
   int j = 0 ;

   while (j <= stop)
    {
       if (eq[j] >= 0 && eq[j] <= 9 && j <= stop)
        {

            while (eq[j] != '+' && eq[j] != '-' && j <= stop)
            {
                sum_Po *= eq[j] ;
                j++ ;
            }

        }
    }
}

اتمنى ان توضحوا لي اين خطأي بالضبط

شكراً مقدماً

تم تعديل هذه المشاركة بواسطة بسام العبسي في 7 يوليو 2012 في 04:02

#2

اولا إشرح لنا ماذا يفعل الكود حتى نستطيع التصحيح.

ثانيا خطا إملائي

int sum_Po = 1; وليس ,

ثالثا ان هذا الشرط

 if (eq[j] >= 0 && eq[j] <= 9 && j <= stop)

لا يعني يجب ان يكون (eq + j)* هذه الخانة محصورة بين الرقم 0 و 9 لان 0 هو 30 و 9 هو 39 في جدول ASCII على ماتذكر

فعلى الشرط ان يكون

 if (eq[j] >= '0' && eq[j] <= '9' && j <= stop)

او

 if (eq[j] >= 30 && eq[j] <= 39 && j <= stop)
#3

البرنامج هكذا ممكن يعمل لكن عليك بتوضح ماهية البرنامج

انصحك باﻻستغناء عن المصفوفة الحرفية char واستبدالها بــ int

#include <iostream>
using namespace std;

const int size = 100;
int sum_Po = 1;
void check(char [], int);
int main() 
{
    int f = 0, i, stop;

    char x_Val;

    char eq[size];

    cout << "Press dot (.) to finished: ";

    for (i = 0; i < size ; i++) // u not need to comlex conditions just like this
    {
        cin >> eq;

        if (eq == '.')
        {
            f = 1;
            stop = i - 1;
            break; // to break the for loop if user input .
        }

    }

    cout << "Enter the value of x : ";
    cin >> x_Val; // to be meangfull ..
    // cout << "\n\n"; // u not need to this line so we comment it ..

    for (i = 0; i < stop; i++) {
        if (eq == 'x')
            eq = x_Val;
    }

    check(eq, stop);

   // to check if it modified the eq array ...

    for (i = 0; i < stop; i++) {
        cout <<  eq; 
    }    
    return 0;
}

void check(char eq[], int stop) {
    int j = 0;

    while (j < stop) {
       // if (eq[j] >= 0 && eq[j] <= 9 && j <= stop) {

           // while (eq[j] != '+' && eq[j] != '-' && j <= stop) {
                sum_Po *= eq[j];
                j++;
         //   }
        //}
    }
}

تم تعديل هذه المشاركة بواسطة محمد عودة في 8 يوليو 2012 في 14:37

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#4

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

ولكن لماذا استعملت الدالة void ؟ في ماذا ستنفعك ؟ و هل سترجع لك قيمة حاصل ضرب المصفوفة ؟

void check(char eq[], int stop);

أليس من الأفضل استعمال دالة من نوع long مثلا !!

هكذا كان حلي لها الكود و أتمنى لك التوفيق ولباقي المسلمين

#include <iostream>

using namespace std ;

const int size = 100 ;
long Produit(char [],int );


int main()
{
   char n[11]="0123456789",t[size]="";
   int i=0, j=0 , k=0 ,stop=0,stop1=0;

   cout << "Press dot (.) to know that u finished ....... \n\n"
    	<<   "Do not enter more than one number!!!\n\n" ;

   for(;;i++)
   {
   cout << "entrer t[" << i << "]:\t";
   cin  >> t ;
   if(t=='.') {stop=i; break;}
   }
   for(i=0;i<stop;i++)
  	{
    	for(j=0;j<10;j++)
      	if(t==n[j])
        	{t[k]=t; k++;}
      	stop1 =k;
  	}

   cout <<"\n\np = " << Produit(t,stop1)<<endl;

	return 0;
}


long Produit(char t[],int size )

{
	long pr=1;
	for(int i=0;i<size;i++)
	pr*=(t-48);
	return pr;
}

1341747127351.jpg

تم تعديل هذه المشاركة بواسطة مومو (momo) في 8 يوليو 2012 في 14:35

i love you mama

#5

اشكركم ع التفاعل

لقد وجدت الاجابه المطلوبة

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…