Hilfe bei C-Programm



  • grüß euch, sitze schon seit tagen bei meiner aufgabe für c und komm nicht weiter. vielleicht kann mir ein profi von euch unter die arme greifen, da ich das ganze morgen abgeben soll und schon vor lauter panik nicht mehr weiß, was ich tun soll.

    also, wenn mir da jemand helfen könnte.
    lg alexa

    aufgabenstellung:
    schreibe ein programm, das einen zeichenweise über stdin zu lesenden text auf folgendes analysiert:
    - anzahl der worte. ein wort ist dabei eine zusammenhängende folge von buchstaben, also den zeichen A-Z, a-z, ÄäÖöÜüß
    - die mittlere wortlänge
    - die absolute und relative häufigkeit jedes buchstabens. dabei ist nicht zwischen groß- und kleinbuchstaben zu unterscheiden. für die berechnung der ralativen häufigkeit er einzelnen buchstaben ist als grundwert nur die gesamtzahl der buchstaben im text heranzuziehen.

    das programm ist durch umlenken von stdin auf eine textdatei zu testen, die genau den angabetext zu diesem bsp enthält.



  • Original erstellt von <alexa>:
    grüß euch, sitze schon seit tagen bei meiner aufgabe für c und komm nicht weiter. vielleicht kann mir ein profi von euch unter die arme greifen, da ich das ganze morgen abgeben soll und schon vor lauter panik nicht mehr weiß, was ich tun soll.....

    Was hast Du denn schon an C-Code geschrieben? Wo genau liegt Dein Problem (z.B. komplizierte C Anweisung, welche Funktionen müssen verwendet werden, ...)?



  • hallo mady,

    da ich erst später in die c klasse dazu gestoßen bin, hab ich quasi schon von anfang an ein schweres leben mit diesem fach gehabt. deshalb tu ich mir ja auch nicht gerade leicht. trotzdem versuch ich dir, damit du mir ja weiter helfen kannst ein paar wenige infos von mir zu geben.

    grundsätzlich wurde in der aufgabenstellung zu diesem programm nicht mehr mitgeteilt, als ich in meinem ersten beitrag angeführt hab. ich habe so nach weiteren informationen zu einem solchen beispiel im web gesucht und folgendes gefunden. ich denke, dass dies ein hinweis auf die lösung meines programmes ist. mehr hab ich leider noch nicht, da mir schon der start (was passiert hier, soll hier genau passieren) schwierigkeiten macht.

    also, du kannst nun erkennen, dass ich noch ein absoluter beginner in diesem medium bin und würde mich freuen, wenn du mir mit ein paar startschritten, tipps, erklärungen etappenweise zu meinem programmziel verhelfen könntest. was sicher kein leichter weg ist, aber ich bin bemüht.

    Textanalyse
    Ein über die Standardeingabe einzugebender Text soll zeichenweise gelesen und analysiert werden.
    Erstellen Sie ein ANSI-C-Programm, mit dem

    - die Anzahl der Zeichen,
    - die Anzahl der Worte,
    - die Anzahl der Zeilen,
    - die Anzahl der Zeichen der längsten Zeile,
    - die Länge des längsten Wortes

    des Eingabetextes ermittelt werden kann. Unter einem Wort sei dabei jede Zeichenfolge, die mit einem Buchstaben oder Underscore ('') beginnt, nur aus Buchstaben, Ziffern und den Underscore ('') besteht und von beliebigen Steuer- oder Sonder-Zeichen (nicht aber Ziffern) begrenzt wird, verstanden. Beachten Sie, daß nach dieser Definition z. B. die Zeichenfolge ;2abc% kein Wort enthält.

    Hinweise zur Lösung:
    - Der Text ist mit der Funktion getchar() einzulesen und darf nicht in Arrays abgelegt werden. Achtung: Die Eingabe erfolgt gepuffert, d. h. wenn Sie etwas eintippen, wird die Eingabe erst an das Programm übergeben, wenn Sie die Enter-Taste gedrückt habe. Sie geben also immer zeilenweise ein. Das Programm bearbeitet Ihre Eingabe aber trotzdem Zeichen für Zeichen.
    - Aus Vereinfachungs- (u. Portabilitäts-) Gründen kann angenommen werden, daß die deutsche Umlaute nicht im Text vorkommen.
    - Berücksichtigen Sie, daß die letzte Zeile nicht unbedingt mit einem Zeilenendezeichen abgeschlossen sein muß.
    - Andererseits stellt ein Dateiendezeichen unmittelbar nach einem Zeilenende keine neue Zeile dar.
    - Zur Vereinfachung der Wortermittlung sind die folgenden symbolischen Konstanten zu definieren und sinnvoll zu verwenden:
    - symbolische Konstante (--> #define) zur Kennzeichnung der jeweiligen Zeichenklasse
    BUCH (Groß- u. Kleinbuchstaben, Underscore)
    ZIFF (Ziffern)
    SPACE (Leerzeichen (' '), Tabulator ('\t') und Newline ('\n') )
    SONST (restliche Zeichen, d.h. Steuerzeichen und sonstige Sonderzeichen)
    - symbolische Konstante zur Kennzeichnung des jeweils aktuellen Textzustands
    PREWORT (nächstes Zeichen kann Anfang eines Wortes sein)
    INWORT (innerhalb eines Wortes)
    NOWORT (innerhalb einer Zeichenfolge, die kein Wort ist, nächstes Zeichen kann nicht Anfang eines Wortes sein)
    - Überlegen Sie sich den durch ein Zeichen in Abhängigkeit von seiner Klasse und dem alten Textzustand jeweils ausgelösten Zustandsübergang. Betrachten Sie dazu das Zustandsübergangsdiagramm:

    Ein solches Diagramm ist recht einfach aufgebaut:

    Alle Zustände werden als (beschrifteter) Kreis dargestellt.
    Der Übergang zu einem anderen Zustand wird durch einen Pfeil dargestellt. Der Pfeil wird mit der Übergangsbedingung beschriftet.

    - Beschreiben Sie den durch das Programm zu realisierenden Algorithmus vor der Formulierung in C durch ein Struktogramm.

    - Beginnen Sie mit der Programmschleife, die zeichenweise von der Standardeingabe liest. Die Kommentare markieren später zu ergänzende Programmteile. In der mit /* TEST */ gekennzeichneten Zeile steht eine Ausgabeanweisung, mit der Sie die Funktion ihres Programmes testen können. Wenn das Programm zufriedenstellend läuft, wird diese Anweisung gelöscht:

    #include <stdio.h>
    #include <ctype.h>

    /* Textzustaende definieren */

    /* Zeichenklassen definieren */

    int main(void)
    {
    int c; /* Eingelesenes Zeichen /
    int zustand; /
    Textzustand /
    int zklasse; /
    Zeichenklasse von c */

    /* Anfangswerte setzen */

    while( (c=getchar())!=EOF )
    {
    /* ermittle Zeichenklasse */

    /* fuehre Zustandswechsel durch */

    /* TEST */ printf("%c %d %d\n",c,zklasse,zustand);
    }

    /* Ausgabe der Ergebnisse */

    return(0);
    }

    - Schreiben Sie nun Ihr C-Programm in drei Etappen:
    1. Schreiben Sie den Programmteil zum Ermitteln der Zeichenklassse und testen Sie, ob bei den Eingaben die Zeichenklasse richtig ermittelt wird.
    2. Schreiben Sie nun den "Automaten", der die Zustandsübergänge ermittelt und testen Sie auch die Funktion dieses Programmteils. Erst wenn das funktioniert:
    3. Fügen Sie nun die Programmteile hinzu, die Zeichen, Worte und Zeilen zählen.

    - Wenn das Programm einwandfrei funktioniert, er weitern Sie es so, daß von der Tastatur ein Dateiname eingelesen wird und die Textanalyse mit dieser Datei durchgeführt wird.
    - Änder Sie das Programm abschließend so, daß anstelle der mit #define definierten Konstanten die folgenden beiden Aufzählungstypen verwendet werden:

    enum Zeichenklasse { BUCH, ZIFF, SPACE, SONST } zklasse;
    enum Textzustand { PREWORT, INWORT, NOWORT } zustand;



  • Gähhn, wie langweilig... :p (sorry).
    Ist ja richtig schön motivierend die Aufgabe...
    Am besten du suchst dir ein c Buch und studierst das gut.
    Wenn du gar nicht weist wie du anfangen sollst nützt es auch nicht wenn dir
    das jetzt komplett schreibt.
    Für was für eine Lernanstalt musst du das schreiben ?



  • möchte ja nicht, dass mir wer das ganze programm schreibt. ich hätte es nur toll gefunden, wenn mir wer mal auf den weg hilft und mich vielleicht unterstützen könnte. weiss, dass das keine leichte aufgabe ist und jemandem mit sicherheit einigen schweiss kosten könnte. mir wär da aber sehr damit geholfen. hm vielleicht findet sich ja noch jemand, der sich so was antut. ich denke, dass mir auch schon geholfen wäre, wenn mir jemand einen theoretischen lösungsweg aufzeigen könnte. somit hätte ich einmal einen anhaltspunkt an dem ich kobeln kann. mir fehlt ja meist nur so der erste part. beim ausprogrammieren, krieg ich die sachen dann meistens hin. aller anfang ist eben besonders schwer.



  • Hm... schwer ist höchstens die Aufgabe dir deine Aufgabe hier zu erklären. 😃
    Also ist dein Problem eher die denkweise reale Probleme in einen Algorithmus zu verwandeln und nicht das Programmieren ?
    Geh doch einfach mal Schritt für Schritt vor, setz dich nicht gleich vor den PC
    sondern nimm ein Blatt Papier und überleg dir was das Programm machen muss.
    Hab die ewig lange Anleitung jetzt nur überflogen, aber zum Beispiel bei der Eingabe, da musts du für jedes Zeichen was neu eingegeben wird überprüfen welches Zeichen es ist. Ist es ein Buchstabe (groß oder klein) so muss ein Zähler hochgezählt werden das dieser Buchstabe wieder einmal vorkam.
    Ist es ein Leerzeichen so muss ein Zähler hochgezählt werden der die Wörter Zählt. Ein weiterer Zähler Zählt bei jedem neuen Wort die Anzahl der Zeichen des akltuellen Wortes zu denen der bisherigen Wörter. Am ende ergibt das dividiert duch die Zahl der Wörter die mittlere Wortlänge... and so on...
    Aber ich fürchte bis morgen gibt das nix mehr, wenn du gar keinen Plan hast 😞


Anmelden zum Antworten