تمرين من المصدر الأصلي · تطبيق عملي

سهولة القراءة

استخدم الشرح العربي للفهم، واعتمد صفحة CS50 الأصلية مرجعًا نهائيًا للمواصفات والتسليم.

جلسة دراسة مقترحة: حتى 60 دقيقةالجهد الكلي التقريبي: 120 دقيقة · أكمل من حيث توقفت لاحقًا.Week 2
محاور هذه الخطوة
  • المصفوفات
  • السلاسل النصية
  • سطر الأوامر
  • النطاق

ترجمة آلية تحت المراجعة

سهولة القراءة

المصدر الأصلي

قائمة تنفيذ التمرين

تُحفظ علامات هذه القائمة على هذا الجهاز والمتصفح فقط. أنشئ حسابًا مفعّلًا لحفظ إنجاز التمرين في مسارك.

سهولة القراءة

Charlotte's Web Cover

مشكلة بحاجة إلى حل

وفقا ل دراسي، E.B. الأبيض شبكة شارلوت يقع بين مستوى القراءة للصف الثاني والرابع، ومستوى لويس لوري المعطي يقع بين مستوى القراءة للصف الثامن والثاني عشر. ولكن ماذا يعني أن يكون الكتاب في مستوى قراءة معين؟

حسنًا، في كثير من الحالات، قد يقرأ الخبير البشري كتابًا ويتخذ قرارًا بشأن الصف (i.e.، السنة الدراسية) الذي يعتقد أن الكتاب هو الأنسب له. ولكن من المحتمل أن تتمكن الخوارزمية من اكتشاف ذلك أيضًا!

في ملف يسمى readability.c في مجلد يسمى readability، ستقوم بتنفيذ برنامج يحسب مستوى الدرجة التقريبي اللازم لاستيعاب بعض النصوص. يجب أن يطبع برنامجك كمخرج "Grade X" حيث "X" هو مستوى الصف المحسوب، مقربًا إلى أقرب عدد صحيح. إذا كان مستوى الصف 16 أو أعلى (أي ما يعادل أو أكبر من مستوى القراءة في المرحلة الجامعية الأولى)، فيجب أن يقوم برنامجك بإخراج Grade 16+ بدلاً من إعطاء رقم الفهرس الدقيق. إذا كان مستوى الصف أقل من 1، فيجب أن يُخرج برنامجك Before Grade 1.

تجريبي

الخلفية

إذًا ما هي أنواع السمات المميزة لمستويات القراءة الأعلى؟ حسنًا، ربما ترتبط الكلمات الأطول بمستويات قراءة أعلى. وبالمثل، من المحتمل أن ترتبط الجمل الأطول بمستويات قراءة أعلى أيضًا.

تم تطوير عدد من "اختبارات قابلية القراءة" على مر السنين والتي تحدد الصيغ لحساب مستوى قراءة النص. أحد اختبارات سهولة القراءة هو مؤشر كولمان-لياو. تم تصميم فهرس Coleman-Liau للنص لإخراج مستوى الدرجة (U.S.) المطلوب لفهم بعض النصوص. الصيغة هي

index = 0.0588 * L - 0.296 * S - 15.8

حيث L هو متوسط عدد الأحرف لكل 100 كلمة في النص، و S هو متوسط عدد الجمل لكل 100 كلمة في النص.

نصيحة

اكتب بعض الشيفرة التي تعلم أنه سيتم تجميعها
#include <ctype.h>
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

int main(void)
{

}

لاحظ أنك قمت الآن بتضمين بعض ملفات الرأس التي ستمنحك الوصول إلى الوظائف التي قد تساعدك في حل هذه المشكلة.

اكتب بعض الشيفرة الزائفة قبل كتابة المزيد من الشيفرة

إذا لم تكن متأكدًا من كيفية حل المشكلة نفسها، فقم بتقسيمها إلى مشكلات أصغر ربما يمكنك حلها أولاً. على سبيل المثال، هذه المشكلة ليست سوى عدد قليل من المشاكل:

  1. اطلب من المستخدم بعض النصوص
  2. حساب عدد الحروف والكلمات والجمل في النص
  3. احسب مؤشر كولمان-لياو
  4. اطبع مستوى الصف

دعنا نكتب بعض الأكواد الزائفة كتعليقات لتذكيرك بفعل ذلك:

#include <ctype.h>
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    // Prompt the user for some text

    // Count the number of letters, words, and sentences in the text

    // Compute the Coleman-Liau index

    // Print the grade level
}
تحويل الشيفرة الكاذب إلى كود

أولاً، فكر في كيفية مطالبة المستخدم بتقديم بعض النصوص. أذكر ذلك get_string، إحدى الوظائف في مكتبة CS50، يمكنها مطالبة المستخدم بسلسلة.

#include <ctype.h>
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    // Prompt the user for some text
    string text = get_string("Text: ");

    // Count the number of letters, words, and sentences in the text

    // Compute the Coleman-Liau index

    // Print the grade level
}

الآن بعد أن قمت بجمع المدخلات من المستخدم، يمكنك البدء في تحليل تلك المدخلات. أولا، حاول حساب عدد الحروف في النص. اعتبر الحروف أحرفًا أبجدية كبيرة أو صغيرة، وليست علامات ترقيم أو أرقام أو رموز أخرى.

إحدى الطرق لحل هذه المشكلة هي إنشاء دالة تسمى count_letters الذي يأخذ سلسلة، text، كمدخل، ثم يُرجع عدد الأحرف في هذا النص كرقم int.

int count_letters(string text)
{
    // Return the number of letters in text
}

ستحتاج إلى كتابة الشيفرة الخاص بك لحساب عدد الأحرف في النص. لكن ربما يكون هناك شخص أكثر خبرة منك قد كتب بالفعل دالة لتحديد ما إذا كان الحرف أبجديًا أم لا. هذه فرصة جيدة لاستخدام دليل CS50، مجموعة من الشروحات للوظائف الشائعة في مكتبة C القياسية.

يمكنك التكامل count_letters في الشيفرة الذي كتبته بالفعل، على النحو التالي.

#include <ctype.h>
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

int count_letters(string text);

int main(void)
{
    // Prompt the user for some text
    string text = get_string("Text: ");

    // Count the number of letters, words, and sentences in the text
    int letters = count_letters(text);

    // Compute the Coleman-Liau index

    // Print the grade level
}

int count_letters(string text)
{
    // Return the number of letters in text
}

بعد ذلك، اكتب دالة لحساب الكلمات.

int count_words(string text)
{
    // Return the number of words in text
}

لغرض هذه المشكلة، سنعتبر أي تسلسل من الأحرف مفصولة بمسافة بمثابة كلمة (لذا فإن الكلمة الموصولة بواصلة مثل "sister-in-law" يجب اعتبارها كلمة واحدة، وليس ثلاث). يمكنك أن تفترض أن الجملة:

  • سيحتوي على كلمة واحدة على الأقل؛
  • لن يبدأ أو ينتهي بمسافة؛ و لن يحتوي
  • على مسافات متعددة على التوالي.

في ظل هذه الافتراضات، قد تتمكن من العثور على علاقة بين الكلمات الرقمية وعدد المسافات. أنت، بالطبع، مرحب بك لمحاولة حل يسمح بمسافات متعددة بين الكلمات أو في الواقع لا توجد كلمات!

يمكنك الآن التكامل count_words في برنامجك كما يلي:

#include <ctype.h>
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

int count_letters(string text);
int count_words(string text);

int main(void)
{
    // Prompt the user for some text
    string text = get_string("Text: ");

    // Count the number of letters, words, and sentences in the text
    int letters = count_letters(text);
    int words = count_words(text);

    // Compute the Coleman-Liau index

    // Print the grade level
}

int count_letters(string text)
{
    // Return the number of letters in text
}

int count_words(string text)
{
    // Return the number of words in text
}

أخيرًا، اكتب دالة لحساب الجمل. يمكنك التفكير في أي تسلسل من الأحرف ينتهي بـ . أو أ ! أو أ ? لتكون جملة.

int count_sentences(string text)
{
    // Return the number of sentences in text
}

يمكنك التكامل count_sentences في برنامجك كما يلي:

#include <ctype.h>
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>

int count_letters(string text);
int count_words(string text);
int count_sentences(string text);

int main(void)
{
    // Prompt the user for some text
    string text = get_string("Text: ");

    // Count the number of letters, words, and sentences in the text
    int letters = count_letters(text);
    int words = count_words(text);
    int sentences = count_sentences(text);

    // Compute the Coleman-Liau index

    // Print the grade level
}

int count_letters(string text)
{
    // Return the number of letters in text
}

int count_words(string text)
{
    // Return the number of words in text
}

int count_sentences(string text)
{
    // Return the number of sentences in text
}

أخيرًا، قم بحساب مؤشر Coleman-Liau واطبع مستوى الدرجة الناتج.

  • تذكر أنه يتم حساب مؤشر Coleman-Liau باستخدام index = 0.0588 * L - 0.296 * S - 15.8
  • L هو متوسط عدد الحروف لكل 100 كلمة في النص: أي عدد الحروف مقسومًا على عدد الكلمات، الكل مضروب في 100.
  • S هو متوسط عدد الجمل لكل 100 كلمة في النص: أي عدد الجمل مقسومًا على عدد الكلمات، الكل مضروب في 100.
  • ستحتاج إلى تقريب النتيجة إلى أقرب رقم صحيح، لذا تذكر ذلك تم الإعلان عن round في math.h، لكل manual.cs50.io.
  • تذكر ذلك، عند تقسيم قيم النوع int في لغة C، ستكون النتيجة أيضًا int، مع تجاهل أي باقي (i.e.، أرقام بعد العلامة العشرية). وبعبارة أخرى، ستكون النتيجة "مقتطعة". قد ترغب في إرسال قيمة واحدة أو أكثر إلى float قبل إجراء القسمة عند الحساب L و S!

إذا كان رقم الفهرس الناتج هو 16 أو أعلى (أي ما يعادل أو أكبر من مستوى القراءة في المرحلة الجامعية الأولى)، فيجب أن يُخرج برنامجك Grade 16+ بدلاً من إخراج رقم فهرس دقيق. إذا كان رقم الفهرس أقل من 1، فيجب أن يُخرج برنامجك Before Grade 1.

الإرشادات التفصيلية

محتوى خارجي من YouTube

لن نتصل بهذه الخدمة قبل موافقتك. يمكنك فتح المصدر في نافذة مستقلة بدل تحميله هنا.

فتح المصدر

كيفية الاختبار

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

  • One fish. Two fish. Red fish. Blue fish. (Before Grade 1)
  • Would you like them here or there? I would not like them here or there. I would not like them anywhere. (Grade 2)
  • Congratulations! Today is your day. You're off to Great Places! You're off and away! (Grade 3)
  • Harry Potter was a highly unusual boy in many ways. For one thing, he hated the summer holidays more than any other time of year. For another, he really wanted to do his homework, but was forced to do it in secret, in the dead of the night. And he also happened to be a wizard. (Grade 5)
  • In my younger and more vulnerable years my father gave me some advice that I've been turning over in my mind ever since. (Grade 7)
  • Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, "and what is the use of a book," thought Alice "without pictures or conversation?" (Grade 8)
  • When he was nearly thirteen, my brother Jem got his arm badly broken at the elbow. When it healed, and Jem's fears of never being able to play football were assuaged, he was seldom self-conscious about his injury. His left arm was somewhat shorter than his right; when he stood or walked, the back of his hand was at right angles to his body, his thumb parallel to his thigh. (Grade 8)
  • There are more things in Heaven and Earth, Horatio, than are dreamt of in your philosophy. (Grade 9)
  • It was a bright cold day in April, and the clocks were striking thirteen. Winston Smith, his chin nuzzled into his breast in an effort to escape the vile wind, slipped quickly through the glass doors of Victory Mansions, though not quickly enough to prevent a swirl of gritty dust from entering along with him. (Grade 10)
  • A large class of computational problems involve the determination of properties of graphs, digraphs, integers, arrays of integers, finite families of finite sets, boolean formulas and elements of other countable domains. (Grade 16+)

صحة

check50 cs50/problems/2026/x/readability

النمط

style50 readability.c

كيفية الإرسال

في جهازك الطرفي، قم بتنفيذ ما يلي لإرسال عملك، والإجابة على المطالبات التي تظهر أيضًا.

submit50 cs50/problems/2026/x/readability

أنهيت التطبيق؟

راجع عناصر التنفيذ أعلاه، ثم احفظ إنجازك وانتقل إلى التمرين التالي.

حفظ إنجاز التمرين

يمكنك قراءة الدورة كاملة دون حساب. يصبح حفظ التقدم متاحًا بعد تفعيل الحساب، ويبقى محفوظًا بعد انتهاء العضوية.

العودة إلى جميع التمارين