Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة: عداد تكرار الكلمات

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 63 من 63.

challenge icon

التحدي

سهل

قم بإنشاء برنامج بلغة C ينفذ عداداً لتردد الكلمات لتحليل النص المدخل. يجب على برنامجك القيام بما يلي:

  1. كتابة دالة باسم countWordOccurrences تقوم بما يلي:
    • تأخذ معاملين من نوع char* هما: sentence و targetWord
    • تعيد عدداً صحيحاً يمثل عدد المرات التي ظهرت فيها الكلمة المستهدفة في الجملة
    • تستخدم حلقة (loop) لمعالجة الجملة حرفاً بحرف
    • تحدد حدود الكلمات باستخدام المسافات كفواصل
    • تستخرج كل كلمة من الجملة وتقارنها بالكلمة المستهدفة باستخدام strcmp()
    • تحسب التطابقات التامة (مقارنة حساسة لحالة الأحرف)
  2. كتابة دالة باسم extractWord تقوم بما يلي:
    • تأخذ جملة char*، وعدداً صحيحاً startIndex، ومعامل كلمة char*
    • تعيد عدداً صحيحاً يمثل الفهرس (index) بعد الكلمة المستخرجة
    • تستخرج كلمة واحدة تبدأ من startIndex حتى يتم العثور على مسافة أو علامة نهاية السلسلة (null terminator)
    • تخزن الكلمة المستخرجة في معامل word
    • تضيف علامة نهاية السلسلة (null terminator) لإكمال الكلمة المستخرجة
  3. كتابة دالة باسم analyzeText تقوم بما يلي:
    • تأخذ معامل جملة char*
    • تعيد عدداً صحيحاً يمثل العدد الإجمالي للكلمات في الجملة
    • تحسب الكلمات عن طريق تحديد المسافات كفواصل
    • تتعامل مع المسافات المتتالية المتعددة بشكل صحيح (تعتبرها فاصلاً واحداً)
  4. في الدالة الرئيسية (main function):
    • تصريح عن مصفوفة أحرف inputSentence بحجم 200
    • تصريح عن مصفوفة أحرف searchWord بحجم 50
    • قراءة جملة من المدخلات (قد تحتوي على كلمات متعددة مفصولة بمسافات)
    • قراءة الكلمة المستهدفة للبحث عنها
    • استدعاء دالة analyzeText وطباعة إجمالي عدد الكلمات بهذا التنسيق الدقيق: Total words: [count]
    • استدعاء دالة countWordOccurrences وطباعة النتيجة بهذا التنسيق الدقيق: Occurrences of '[searchWord]': [count]
    • حساب وطباعة تردد الكلمة كنسبة مئوية مع منزلة عشرية واحدة بالضبط بهذا التنسيق الدقيق: Frequency: [percentage]%
    • تحديد وطباعة فئة التردد:
      • إذا كان التردد 0.0%: اطبع Category: Not found
      • إذا كان التردد أكبر من 0.0% وأقل من 20.0%: اطبع Category: Rare
      • إذا كان التردد بين 20.0% و 50.0% (شاملاً): اطبع Category: Common
      • إذا كان التردد أكبر من 50.0%: اطبع Category: Frequent

يختبر هذا التحدي إتقانك لمعالجة السلاسل النصية (string manipulation)، والتقطيع (tokenization)، ومعالجة النصوص. ستتدرب على تقسيم الجمل إلى كلمات فردية، ومقارنة السلاسل النصية للتطابقات التامة، وتنفيذ دوال متعددة تعمل معاً لتحليل بيانات النص. يوضح البرنامج تقنيات معالجة النصوص في العالم الحقيقي والضرورية للعديد من تطبيقات لغة C.

جرّب بنفسك

#include <stdio.h>
#include <string.h>

// TODO: اكتب دالة extractWord هنا

// TODO: اكتب دالة countWordOccurrences هنا

// TODO: اكتب دالة analyzeText هنا

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // قراءة جملة الإدخال
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // إزالة حرف السطر الجديد إذا وجد
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // قراءة كلمة البحث
    scanf("%s", searchWord);
    
    // TODO: اكتب الكود الخاص بك أدناه
    // استدعاء دالة analyzeText وتخزين إجمالي عدد الكلمات
    // استدعاء دالة countWordOccurrences وتخزين عدد مرات التكرار
    // حساب النسبة المئوية للتكرار
    // تحديد فئة التكرار
    
    // إخراج النتائج بالتنسيق المطلوب
    // printf("Total words: %d\n", totalWords);
    // printf("Occurrences of '%s': %d\n", searchWord, occurrences);
    // printf("Frequency: %.1f%%\n", frequency);
    // printf("Category: %s\n", category);
    
    return 0;
}

جميع دروس Logic & Flow