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

حل نشاط Write a C++ function that takes a pointer to a string

اذهب الى الأسفل

حل نشاط Write a C++ function that takes a pointer to a string Empty حل نشاط Write a C++ function that takes a pointer to a string

مُساهمة من طرف أحمد مناع الجمعة فبراير 26, 2021 6:13 pm

اهلا بكم ....النشاط كان على النحو التالى :

Write a C++ function that takes a pointer to a string. The function should return the number of times Odd ASCII numbers appeared in the string.

اذن المطلوب فى هذا النشاط ما يلى :

1_وظيفة تاخذ معلمتها تاخذ مؤشر تشير الى سلسة نصية
2_الوظيفة تقوم بارجاع عدد مرات أرقام ASCII الفردية

1_بداية ماذا يقصد بالمؤشر فى لغة السي بلس بلس وكيف يمكن انشائة

المؤشر [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]....هو عبارة عن متغير تحتوي قيمته على عنوان متغير آخر في الذاكرة، ومن الإسم فهو يشير إلى عنوان متغير آخر ...ولانشاء مؤشر جديد نستخدم الرمز #* مع الإشارة إلى أن نوع المؤشر ....لذلك فى هذا المثال سنقوم بانشاء مؤشر أحرف [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] و ليكن باسم p وتمرير كمعلمة لوظيفة وليكن باسم getascll  وذلك على النحو التالى :

الكود:
int  get_ASCII(char *p)

ويمكنك ملاحظة أن السؤال حدد أن تقوم الطريقة بارجاع عدد صحيح لذلك جلعنها من نوع int

2_المطلوب من تلك الوظيفية هو حساب عدد الاعداد الفردية Odd numbers لقيم الاسكي [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]  الموجودة بالنص...

و الاسكي ASCII هو نظام ترميز (قيمة تتراوح بين 0 و 127) لتمثيل الحروف والرموز فى الحاسب الالى ....بمعنى ان كل حرف او رمز فى الكيبورد له رقم معين فى هذا النظام و يمكنك الحصولة علية بكل سهولة من خلال الوظيفة int() في السي بلس بلس ....فمثلا اريد معرفة قيمة الرقم المقابل لحرف A بالسي بلس بلس سيكون على النحو التالى :

الكود:
#include <iostream>
using namespace std;
int main()
{
    char c = 'A';
    cout << "The ASCII value of " << c << " is " << int(c);
    return 0;
}


Output:

The ASCII value of A is 65

3_المطلوب فى السؤال ليس فقط ايجاد قيمة كل حرف في نظام الترميز [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] من السلسة النصية المدخلة بل ايجاد عدد الاعداد الفردية التى ظهرت ....لذلك لابد من معرفة اية هو العدد الفردي هو كل عدد لا يقبل القسمة على ( 2 ) بدون باقي....فمثلا العدد 3 عدد فردى لانه لايقبل القسمة على الرقم 2 ....فلو تم قسمته سيظهر لنا فواصل عشرية 1.5....ويمكن الاطلاع على كيفية التحقق من الاعداد الفردية و الزوجية من خلال شفرة السي بلس بلس من خلال الرابط التالى :

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]


بعد هذه المعلومات تعالوا نروح للسؤال

الكود:

#include <iostream>

using namespace std;

 int  get_ASCII(char *p){
    
     int cont =0;        // متغير لتخزين عدد مرات ظهور الارقام الفردية
    
    
     while(*p) {            // حلقة دوران للمرور على كافة احرف السلسة
        
          if(int(*p)% 2 != 0)  // قسمة قيمة مؤشر السلسة على الرقم 2
                               // اذا كانت ناتج القسمة لا يساوي الصفر معنى ذلك توجد كسور عشرية
                               // وطالما ناتج القسمة به علامات عشرية اذن العدد فردي
          cont++;              // فيجب زيادة العداد
        
        p++;      
     }
    
    return cont;
    
 }

int main()
{
    
    // إنشاء سلسة نصية
    char arr[] = "my name is ahmed";
    
    // إنشاء مؤشر سلسلة
    char *ptr = arr;
    
    // انشاء متغير لتخزين قيمة ارجاع الوظيقة مع تمرير مؤشر الى الوظيفة
    int c= get_ASCII(ptr);
    
    cout << "the number of times Odd ASCII numbers appeared is :" << c;

    return 0;
}

لتشغيل المثال و الاخراج على الرابط التالى :

[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1077
النقاط : 201961
التقيم : 130
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى