Lesbarkeit

Aufgabe
So funktioniert der Coleman-Liau-Index
Der Index schätzt die Klassenstufe aus zwei Größen: Wie lang sind die Wörter, und wie lang sind die Sätze?
- Buchstaben: Es zählen nur die Buchstaben
abiszundAbisZ. Ziffern, Satzzeichen, Apostrophe und Leerzeichen zählen nicht. - Wörter: Jede durch Leerzeichen getrennte Zeichenfolge ist ein Wort, auch
self-consciousoder „Schritt-für-Schritt-Anleitung“. - Sätze: Jedes
.,!und?beendet einen Satz. - Durchschnitte: ist die Zahl der Buchstaben pro 100 Wörter, die Zahl der Sätze pro 100 Wörter:
- Index: Man setzt und in die Formel ein und rundet das Ergebnis auf die nächste ganze Zahl:
- Ausgabe: Ist der gerundete Index 16 oder größer, lautet die Ausgabe
Grade 16+; ist er kleiner als 1,Before Grade 1; sonstGrade Xmit dem gerundeten Index als X.
Beispiel mit dem Text Congratulations! Today is your day. You're off to Great Places! You're off and away!:
| Schritt | Rechnung | Ergebnis |
|---|---|---|
| Buchstaben | ohne Leerzeichen, !, . und die Apostrophe in You're | 65 |
| Wörter | 13 Leerzeichen, also 14 Wörter | 14 |
| Sätze | !, ., !, ! | 4 |
| 464.29 | ||
| 28.57 | ||
| Index | 3.04 | |
| Ausgabe | gerundet 3 | Grade 3 |
Woher solche Lesbarkeitsformeln kommen, steht am Ende der Seite unter „Zum Weiterlesen“.
Demo
Spezifikation
- Implementieren Sie Ihr Programm in C in einer Datei namens
readability.cin einem Ordner namensreadability. - Ihr Programm fragt mit
get_stringund der AufforderungText:nach einem Text. - Es zählt Buchstaben, Wörter und Sätze nach den Regeln 1 bis 3 oben. Sie können davon ausgehen, dass der Text mindestens ein Wort enthält, nicht mit einem Leerzeichen beginnt oder endet und keine mehrfachen Leerzeichen hintereinander enthält.
- Es berechnet den Coleman-Liau-Index nach den Regeln 4 und 5 und gibt nach Regel 6 genau eine Zeile aus:
Grade X,Grade 16+oderBefore Grade 1, jeweils mit Zeilenumbruch.
Hilfestellung
Klicken Sie auf die folgenden Tipps, um einige Ratschläge zu erhalten. Versuchen Sie aber zunächst, selbst so weit wie möglich zu kommen.
Ordner und Datei anlegen
Beginnen Sie mit Code, der kompilierbar ist
#include <ctype.h>
#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
}Die eingebundenen Header-Dateien geben Ihnen Zugriff auf Funktionen, die Ihnen bei dieser Aufgabe helfen können.
Versuchen Sie das Problem in Pseudocode zu beschreiben
Die Aufgabe besteht aus vier kleineren Problemen:
- Den Benutzer nach einem Text fragen.
- Buchstaben, Wörter und Sätze des Textes zählen.
- Den Coleman-Liau-Index berechnen.
- Die Klassenstufe ausgeben.
Schreiben Sie diese Teilprobleme als Kommentare in Ihr Programm und bearbeiten Sie sie dann nacheinander:
#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
}Wandeln Sie den Pseudocode in Code um
Text abfragen. get_string aus der CS50-Bibliothek fragt den Benutzer nach einer Zeichenkette:
string text = get_string("Text: ");Buchstaben zählen. Schreiben Sie eine Funktion count_letters, die eine Zeichenkette entgegennimmt und die Zahl ihrer Buchstaben als int zurückgibt:
int count_letters(string text)
{
// Return the number of letters in text
}Ob ein Zeichen ein Buchstabe ist, müssen Sie nicht selbst prüfen: Suchen Sie im CS50-Handbuch nach einer passenden Funktion aus der C-Standardbibliothek.
Wörter zählen. Schreiben Sie ebenso eine Funktion count_words. Unter den Annahmen aus der Spezifikation (keine Leerzeichen am Anfang oder Ende, keine mehrfachen Leerzeichen) gibt es eine einfache Beziehung zwischen der Zahl der Wörter und der Zahl der Leerzeichen. Sie können natürlich auch eine Lösung versuchen, die mit mehrfachen Leerzeichen oder ganz ohne Wörter zurechtkommt.
Sätze zählen. Fehlt noch count_sentences, die jedes ., ! und ? zählt.
Zusammen sieht das Gerüst so aus:
#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
}Index berechnen und ausgeben.
- Teilen Sie zwei
int-Werte, ist in C auch das Ergebnis einint: Die Nachkommastellen werden abgeschnitten, nicht gerundet (aus3.7wird3). Wandeln Sie deshalb bei der Berechnung von und mindestens einen Wert infloatum, bevor Sie teilen. - Zum Runden gibt es die Funktion
round, die laut Handbuch inmath.hdeklariert ist. - Vergleichen Sie für die Ausgabe den gerundeten Index mit 16 und 1 (Regel 6).
Testen
Führen Sie Ihr Programm mit den folgenden Texten aus und prüfen Sie, ob die angegebene Klassenstufe erscheint. Kopieren Sie nur den Text, ohne zusätzliche Leerzeichen.
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+)
Korrektheit
Führen Sie in Ihrem Terminal den folgenden Befehl aus, um die Korrektheit Ihrer Arbeit zu überprüfen:
check50 -l inf-zone/exercises/2026/readabilityStyle
Führen Sie den folgenden Befehl aus, um den Stil Ihres Codes mit style50Prüfprogramm von CS50, das zeigt, wo Ihr Code von den Formatierungsregeln abweicht. In Grün zeigt es, was Sie ergänzen sollten, in Rot, was wegfallen soll. Glossar → zu analysieren:
style50 readability.cAbgeben
Geben Sie im Ordner readability ab:
inf upload readabilityDanach sehen Sie, welche Tests Ihr Programm besteht und ob die Übung für die Bonuspunkte zählt. Wie Sie inf installieren und sich anmelden, steht unter Abgeben mit inf.
Zum Weiterlesen: Wie misst man Lesbarkeit?
Für die Lösung der Aufgabe nicht nötig.
Laut Scholastic liegt das Leseniveau von E. B. Whites Charlotte’s Web zwischen der zweiten und vierten Klasse, das von Lois Lowrys The Giver zwischen der achten und zwölften. Oft legen menschliche Fachleute ein solches Leseniveau fest, nachdem sie das Buch gelesen haben.
Man kann es aber auch berechnen. Längere Wörter und längere Sätze gehen meist mit einem höheren Leseniveau einher. Darauf beruhen verschiedene „Lesbarkeitstests“, die das Leseniveau eines Textes per Formel bestimmen. Der Coleman-Liau-Index ist einer davon; er wurde entwickelt, um die US-amerikanische Klassenstufe zu schätzen, die man zum Verständnis eines Textes braucht.
Diese Seite als Markdown: ansehen herunterladen