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

[ تمت الإجابة ]كتابة كود سي للتحقق من الـ Anagram

مغلقمُجاب
بدأه tantie L في 25 أكتوبر 2013 · 12 رد · 925 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم...من فضلكم عندي مشكلة في هذا البرنامج

عندما أقوم بادخال H E.L/L?O و hello من المفترض أن تكون النتيجة anagramme لأن الأحرف نفسها فالمطلوب أن لا نهتم بالحروف الخاصة  لكن البرنامج يظهر العكس فحاولت استخدام isalpha فلم أستطع لأنني أجهلها فهلا تضيرونا علي بطريقة توظيفها في برنامجي...و سأكون لكم شاكرة

qBpmk.jpg

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#2

السلام عليكم

يرجو الانتباه الى انه لن يتم تنفيذ الجزء من البرنامج الذي يأتي بعد else اذا تم ادخال

"H E.L/L?O"

ثم

"hello"

لأن طول السلسة الاولى  لا يساوي طول السلسلة الثانية وبالتالي سيتحقق الشرط l != L وسيتم تنفيذ:

printf("les mots ne sont pas anagrammes");
#3
abdou001 كتب:

 

السلام عليكم

يرجو الانتباه الى انه لن يتم تنفيذ الجزء من البرنامج الذي يأتي بعد else اذا تم ادخال

"H E.L/L?O"

ثم

"hello"

لأن طول السلسة الاولى  لا يساوي طول السلسلة الثانية وبالتالي سيتحقق الشرط l != L وسيتم تنفيذ:

printf("les mots ne sont pas anagrammes");

و عليكم السلام أخي...

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

و لكنني عندما طرحت سؤالي عليكم عدت و فكرت في الأمر فتبادر الى ذهني ما أخبرتني به فجربته و حذفت الشرط l !=L لكن لم يفلح أنا على يقين أن حل مشكلتي يكمن في استعمالي ل isalpha لكنني لم أعرف كيف فنص التمرين ينصح باستخدامها و اليك البرنامج بعد ما طبقت نصيحتك

o8P0m.jpg

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#4

اذا اتفقنا أن ال anagrame هو تغيير ترتيب الحروف دون المساس بعددها ، فإن هذا يسوجب الابقاء على الشرط الأول الذي يتحقق من تساوي عدد الحروف

ثانيا الدالة isalpha تأخذ حرف واحد من النوع char مثلا 'a' او '5' وتعيد قيمة تختلف عن الصفر اذا كان هذا الحرف المدخل عبارة عن حرف ابجدي [a-z] وقيمة مساوية للصفر غير ذلك

1
#5

السلام عليكم

 

اقتباس
عندما أقوم بادخال H E.L/L?O و hello من المفترض أن تكون النتيجة anagramme لأن الأحرف نفسها فالمطلوب أن لا نهتم بالحروف الخاصة

 

تعريف الـ Anagram ليس الذي ذكرتِه و إنما الذي ذكر العضو abdou001.

 

خطوات الخوارزمية يجب أن تكون من هذا القبيل :

  • طول الكلمتين أن يجب أن يتساوى.
  • جميع حروف الكلمة الجديدة يجب أن تكون ضمن الكلمة الأصلية.
  • عدد ظهور الأحرف متساوي في الكلمتين.

 

اكتبى الآن كود جديد حسب الخوارزمية السابقة و إن شاء الله ستجدين المساعدة.

1
#6

سؤال جانبي : ما دام عندك Code::Block لمَ تستخدمي Turbo ؟ :huh:

#7
Snack3r كتب:

سؤال جانبي : ما دام عندك Code::Block لمَ تستخدمي Turbo ؟ :huh:

صحيح عندي code::block لكنني لا أستخدم turbu  فأنا لم أعرف كيفية استخدامه بل أستخدم Borland بلغة C و ليس C++  :)

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#8
Snack3r كتب:

السلام عليكم

 

تعريف الـ Anagram ليس الذي ذكرتِه و إنما الذي ذكر العضو abdou001.

 

خطوات الخوارزمية يجب أن تكون من هذا القبيل :

  • طول الكلمتين أن يجب أن يتساوى.
  • جميع حروف الكلمة الجديدة يجب أن تكون ضمن الكلمة الأصلية.
  • عدد ظهور الأحرف متساوي في الكلمتين.

 

اكتبى الآن كود جديد حسب الخوارزمية السابقة و إن شاء الله ستجدين المساعدة.

أشكرك على التوضيح 

و اتبعت خطوات الخوارزمية التياقترحتها علي في بداية الأمر و للآن برنامجي بها و لكن تبقى عندي نفس المشكلة

كان بودي اعادتها لكن الوقت يداهمني و يجب أن أقدم الواجب غدا :( على كل ان لم أجد الطريقة المناسبة فسأقدمه و أرى تصحيح الأستاذ النموذجي...أشكرك على نصيحتك :)

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#9
abdou001 كتب:

اذا اتفقنا أن ال anagrame هو تغيير ترتيب الحروف دون المساس بعددها ، فإن هذا يسوجب الابقاء على الشرط الأول الذي يتحقق من تساوي عدد الحروف

ثانيا الدالة isalpha تأخذ حرف واحد من النوع char مثلا 'a' او '5' وتعيد قيمة تختلف عن الصفر اذا كان هذا الحرف المدخل عبارة عن حرف ابجدي [a-z] وقيمة مساوية للصفر غير ذلك

أخي عبدو أود أن أسألك هل يمكنني استخدام isalpha بالطريقة التالية؟ تعمدت استخدام متغير c لأنني أحتاجه ان كانت الطريقة صحيحة...و شكرا لك على اجاباتك الكريمة

 fRV8c.jpg

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#10 أفضل إجابة
اقتباس
صحيح عندي code::block لكنني لا أستخدم turbu  فأنا لم أعرف كيفية استخدامه بل أستخدم Borland بلغة C و ليس C++

 

Borland ليس IDE خاص بلغة السي بل يجمع السي و السي++ معا وهو قديم أيضا (النسخة التي تعملين عليها كُتبت في زمن التسعينات من القرن الماضي :) )

إذا كنت تودين IDE خاص بلغة السي فيمكنك استخدام Pelles.

 

بالنسبة للخوارزمية التي اقترحت عليك :

  • طول الكلمتين يجب أن يتساوى. (الدالة memeLongueur تتولى المهمة)
  • جميع حروف الكلمة الجديدة يجب أن تكون ضمن الكلمة الأصلية. (راجعي الكود الخاص بـ isOk و caracteresAutorises)
  • عدد ظهور الأحرف متساوي في الكلمتين. (راجعي الدالة nombreOccurence) 
#include <stdio.h>#include <string.h>#include <stdbool.h>bool memeLongueur(char *mot, char *anagramme) {    return strlen(mot) == strlen(anagramme);}bool isOk(char* mot, char ch) {    while (*mot) {        if (ch == *mot++)            return true;    }    return false;}bool caracteresAutorises(char *mot, char *anagramme) {    while (*anagramme) {        if (!isOk(mot, *anagramme++))            return false;    }    return true;}int nombreOccurence(char *mot, char ch) {    int ret = 0;    for (int i = 0; i < strlen(mot); i++) {        if (mot == ch)            ret++;    }    return ret;}int main() {    char mot[] = "HELLO";    printf("%d\n", memeLongueur(mot, "HELOL"));    printf("%d\n", caracteresAutorises(mot, "EUH"));    printf("%d\n", nombreOccurence(mot, 'L'));    return 0;}

بالتوفيق.

تم تعديل هذه المشاركة بواسطة Snack3r في 26 أكتوبر 2013 في 16:57

1
#11
Snack3r كتب:

Borland ليس IDE خاص بلغة السي بل يجمع السي و السي++ معا وهو قديم أيضا (النسخة التي تعملين عليها كُتبت في زمن التسعينات من القرن الماضي :) )

إذا كنت تودين IDE خاص بلغة السي فيمكنك استخدام Pelles.

 

بالنسبة للخوارزمية التي اقترحت عليك :

  • طول الكلمتين يجب أن يتساوى. (الدالة memeLongueur تتولى المهمة)
  • جميع حروف الكلمة الجديدة يجب أن تكون ضمن الكلمة الأصلية. (راجعي الكود الخاص بـ isOk و caracteresAutorises)
  • عدد ظهور الأحرف متساوي في الكلمتين. (راجعي الدالة nombreOccurence) 
#include <stdio.h>#include <string.h>#include <stdbool.h>bool memeLongueur(char *mot, char *anagramme) {    return strlen(mot) == strlen(anagramme);}bool isOk(char* mot, char ch) {    while (*mot) {        if (ch == *mot++)            return true;    }    return false;}bool caracteresAutorises(char *mot, char *anagramme) {    while (*anagramme) {        if (!isOk(mot, *anagramme++))            return false;    }    return true;}int nombreOccurence(char *mot, char ch) {    int ret = 0;    for (int i = 0; i < strlen(mot); i++) {        if (mot == ch)            ret++;    }    return ret;}int main() {    char mot[] = "HELLO";    printf("%d\n", memeLongueur(mot, "HELOL"));    printf("%d\n", caracteresAutorises(mot, "EUH"));    printf("%d\n", nombreOccurence(mot, 'L'));    return 0;}

بالتوفيق.

أعلم ذلك و لكنني أنا التي أعمل عليه بلغة C لأنني لا أجيد C++ و لم ندرسها أيضا فقط أراها في بعض المراجع أما فيما يخص قدم البرنامج فهو البرنامج المقرر علينا استخدامه في الكلية و هو الذي نصحنا به الأساتذة و قالوا بأنه سهل الاستعمال و يناسب المبتدئين في البرمجة

أشكرك على نصحك لي بهذا البرنامج سأحاول أن أراه

أما فيما يخص الخوارزمية التي اقترحتها علي ففيها أجزاء لم ندرسها بعد أظن أنها تحتوي مؤشر mot* و أيضا لم ندرس المتغيرات من نوع bool ...فأنا لم أتجاوزالسنة الثانية بعد في دراستي لل informatique كما أن التمرين ينص على استخدام isalpha

لك جزيل الشكر أخي على مساعدتك لي و نصحي و زادك علما و تفوقا  :)  :ty:

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

#12
اقتباس
فيما يخص قدم البرنامج فهو البرنامج المقرر علينا استخدامه في الكلية و هو الذي نصحنا به الأساتذة و قالوا بأنه سهل الاستعمال و يناسب المبتدئين في البرمجة

 

كان الله في عونكم ! :mellow:

نفس المشكلة عانيت منها قبل سنوات عندما كنت أدرس السي في سنة أولى -_-

 

اقتباس
أما فيما يخص الخوارزمية التي اقترحتها علي ففيها أجزاء لم ندرسها بعد أظن أنها تحتوي مؤشر mot* و أيضا لم ندرس المتغيرات من نوع bool ...

 

الخوارزمية بسيطة جدا, mot* تعني مصفوفة محارف و bool تعني متغير منطقي يحمل إحدى القيمتين true or false.

 

اقتباس
التمرين ينص على استخدام isalpha

 

الهدف من التمرين هو معرفة ما إذا كانت الكلمة تُمثل anagramme أو لا و بالتالي إذا قمنا بالتأكد من أن جميع حروف الـ anagramme تظهر في الكلمة الأصلية فلا أرى حاجة في استخدام isalpha لأنه لو وُجدت حروف أخرى لكانت النتيجة false.

إلا إذا كان السؤال يفترض أن جميع الحروف تظهر بشكل سليم و المشكلة موجودة فقط في المحارف الطارئة على الـ anagramme مثل . / ? عندها راح يكون الجواب مختلف.

#13
Snack3r كتب:

كان الله في عونكم ! :mellow:

نفس المشكلة عانيت منها قبل سنوات عندما كنت أدرس السي في سنة أولى  -_-

 

آمين و اياكم  :) 

اذن فلسنا وحدنا فقط من نعاني هذه المشاكل  :( لكن لابأس سنتجاوزها و نلحق بركبكم ان شاء الله  B)

 

الخوارزمية بسيطة جدا, mot* تعني مصفوفة محارف و bool تعني متغير منطقي يحمل إحدى القيمتين true or false.

 

أتقصد بأن mot* ليس مؤشرا أي pointeur كما أننا ان استخدمنا متغير من نوع bool في C فسنتعرض للتوبيخ الشديد و يقولون لا تستبقوا الأمور -_-   

 

الهدف من التمرين هو معرفة ما إذا كانت الكلمة تُمثل anagramme أو لا و بالتالي إذا قمنا بالتأكد من أن جميع حروف الـ anagramme تظهر في الكلمة الأصلية فلا أرى حاجة في استخدام isalpha لأنه لو وُجدت حروف أخرى لكانت النتيجة false.

إلا إذا كان السؤال يفترض أن جميع الحروف تظهر بشكل سليم و المشكلة موجودة فقط في المحارف الطارئة على الـ anagramme مثل . / ? عندها راح يكون الجواب مختلف.

 

أما المطلوب منا فهو كما قلت في الجزء الثاني من حديثك و أظن بأن اجابتي قد ترضي الأستاذ الى الآن  :D ....أشكرك على اجاباتك الرائعة و لك عالي التقدير   ^_^ 

تم تعديل هذه المشاركة بواسطة tantie L في 27 أكتوبر 2013 في 20:00

ابتسم للدنيا تبتسم لك و افعل الخير و انساه و لا تنسى أي أمر سيء قمت به حتى لا تكرره


لا تنسونا من صالح دعائكم أعانكم الله و ثبتكم على سواء السبيل


:)  :lol:  ^_^ 

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

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

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

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

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

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