www.matheraum.de
Das Matheforum.
Das Matheforum des MatheRaum.

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenC/C++Programm zur Textanalyse
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Informatik • Physik • Technik • Biologie • Chemie
Forum "C/C++" - Programm zur Textanalyse
Programm zur Textanalyse < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Programm zur Textanalyse: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 14:07 Di 12.01.2010
Autor: Sanny

Hallo, ich sitze schon seit Ewigkeiten an dem Programm und finde meine(n) Fehler nicht. Kann mir jemand helfen?

Buchstaben, Zeichen, Wortlänge und Satzlänge sollen gezählt werden.

#include <stdio.h>           /* Ein- Ausgabe der C-Bibliothek laden */
#include <stdlib.h>
#include <string.h>          /* Bibliothek zu String-Verarbeitung         */
#include <vsconio.h>          /* Borland Bildschirm-Bibliothek laden */
#include "fileread.h"
/******************************************************************************/
/*                   Vereinbahrung der Unterprogramme                         */
/******************************************************************************/
  /* Unterprogramm zum Einlesen des Namens des zu Analysierenden Textes*/
void DateiName (int *fehler, char *txtname, int *Programmende);
  /*Unterprogramm zum Einlesen der Textdatei in das varaible Feld*/                                                  
void einlesenTextdatei(char*txtName, char *(*Zeigerfeld)[26]);
  /* Unterprogramm zum Analysieren des gegebenen textes*/
void textAnalyse (char *(*Zeigerfeld)[26]);
void Ausgabe(char *txtName);
/******************************************************************************/
/*            main() Hauptprogramm                                            */
/******************************************************************************/
int main(int argc, char *argv[]) {
  int Programmende;
  int fehler;
  char   *Zeigerfeld[26];     /*Zeigerfeld mit 26 Elementen       */
  char   txtName[81];         /*Name des zu analysierenden Textes   */
  char   dummy[81];           /*dummy, zum Anhalten des Programmes  */

  do{
  clrscr();               /*Bildschirm löschen                          */
    DateiName(&fehler, txtName, &Programmende);//Aufruf Unterprogramm DateiName
     /*wenn Programmende ungleich 1 */
    if(Programmende !=1 && fehler == 0) {
      einlesenTextdatei(txtName, &Zeigerfeld);
      textAnalyse(&Zeigerfeld);  //Aufruf des Unterprogrammes einlesenTextDatei
       Ausgabe(txtName);         //Aufruf des Unterprogrammes Ausgabe
    } // Ende "(Programmende !=1 && fehler == 0)"
  }while (Programmende !=1); /*Ende while-Schleife*/
  return 0; //Rückgabe zum Betriebssystem
}/*Ende main*/
/******************************************************************************/
/*   Unterprogramm zum Einlesen des Namens der Textdatei                      */
/******************************************************************************/
void DateiName( int *fehler, char *txtName, int *Programmende) {
  FILE *datei;                     // Zeiger auf Datei
  char dateianfang[81];            // Anfang der Datei
  char *pdanfg;                    // Zeiger auf das Feld Dateianfang
  char *pdleer;                    // Zeiger auf leere Datei
  char dummy[81];
  
  *fehler =0;
  printf(" Programm zur statischen Analyse von Texten");  /*Ausgabe von       */
  printf("     Name 1, Name 2, Name 3, Name [mm] 4\n\n"); [/mm]  /*dem Text         */
  printf(" Eingabe Dateinmame [e=Ende, Return=TESTTEXT] : ");
  gets(txtName);                             /*Einlesen des Dateinamens*/

  pdanfg = dateianfang;              // Zeiger auf Dateianfang zuweisen
                                                          
  [mm] if(txtName[0]=='\0') [/mm] strcpy(txtName, "TESTTEXT");
    else { if(txtName[0] == 'e' && txtName[1] == [mm] '\0') [/mm] {*Programmende=1;}}
  /*Wenn als Eingabe nur die return-Taste gedrückt wird Belegen des           */
  /*char-Feldes mit dem Text TESTTEXT zur Auswahl des Testtextes              */
  /* Bei Eingabe von 'e', wird Programmende auf "1" gesetzt */
  
  if(*Programmende != 1){
    datei=fopen(txtName, "r");   /*Datei öffnen*/
    if(datei!= NULL) {
      pdleer= fgets(pdanfg, 81, datei);
      fclose(datei);
      if(pdleer) *fehler = 0;
        else *fehler =1;
    }// Ende "(datei!= NULL)"
      else *fehler = 1;
    if ( *fehler == 1){
    [mm] printf("\n [/mm] Fehler: Datei nicht gefunden oder Datei leer");
    gets(dummy);
    }// Ende "( *fehler == 1)"
  }// Ende "if(*Programmende != 1)"
} /*Ende des Unterprogrammes DateiName*/
/******************************************************************************/
/*              Unterprogramm zum Einlesen der Textdatei                      */
/******************************************************************************/
void einlesenTextdatei(char*txtName, char*(*Zeigerfeld)[26]) {
  FILE *datei;                                /*Zeiger auf Datei*/
  int strlaenge;                            /*Laenge des Kopierstrings*/
  int laenge;                              /*Laenge des aktuellen Strings*/
  int Laufindex;        //Laufvariable für jedes einzelne Zeichen eines Strings
  int zeileleer;                //Merker für eine reelle Zeile
  char dummy [81];
  char kopierenZeile[81];            /*String zum kopieren der Zeilen*/
  
  strlaenge=81;                      // Stringlänge auf 81
                        /*Zeigerfeld mit NULL vorbelegen*/
  for (Laufindex=0; Laufindex<26 ; Laufindex++) (*Zeigerfeld)[Laufindex]=NULL;

  Laufindex=0;
  do {        // Schleife zum Auslesen der kompletten Datei
    zeileleer=0;
          /* Aufruf Unterprogramm zum Lesen einer Dateizeile*/
    getFileLine(txtName, kopierenZeile, strlaenge);
    laenge = strlen(kopierenZeile);        //Stringlänge festlegen
       //Erzeugen des dynamischen Variablenfeldes
    (*Zeigerfeld)[Laufindex] = (char*) calloc (laenge+1, sizeof( char));
      
       // Aktuelle Zeile ins Vaiablenfeld kopieren
       //Wenn die Letzte kopierte Zeile anders als die erste Zeile im Text ist
    if(kopierenZeile[0]!=(*Zeigerfeld)[Laufindex-1][0])
        //kopiere die Aktuelle Zeile
      strcpy((*Zeigerfeld)[Laufindex], kopierenZeile);
       //sonst Belege das Zeigerfeld mit NULL
      else (*Zeigerfeld)[Laufindex]=NULL;              
    Laufindex ++;                        //erhöhen des Laufindex um 1
  } while(kopierenZeile[0]!=(*Zeigerfeld)[Laufindex-2][0] &&
          kopierenZeile[1]!=(*Zeigerfeld)[Laufindex-2][2]);
   //widerhole solange das erste und zweite Zeichen der aktuellen
   //Zeile ungleich der ersten Zeile
   // Ausleseschleife beendet
}/*Ende des Unterprogrammes einlesenTextdatei*/
/******************************************************************************/
/*                     Unterprogramm Textanalyse                              */
/******************************************************************************/
void textAnalyse (char *(*Zeigerfeld)[26]) {
  int    bstab;            // Variable für Buchstaben und Zeichen im String
  int    bstabmerker=0;    //Variable für den Letzten Buchstabe in einer Zeile
  int    Laufindex;        // Laufvariable
  int    Wortmerker=0;     // Merker zur Erkennung von Wörtern
  int    zfeldlidx=0;      // Laufvariable zum zählen der einzelnen Zeichen
  int    lidx;             // Laufvariable im Feld
  int    zeichenf[27];     // Feld zum Zählen der einzelnen Buchstaben
  char   aktZeile[81];     // Aktuelle Zeile der Auswertung
  char   dummy[81];
  char   *ptrzeichen;      // Zeiger auf die einzelne Zeichen im String
  
  extern int    zfeld[27];         // Feld fuer die Anzahl aller  Zeichen
  extern int    sondersumme ;      // Summe aller Sonderzeichen
  extern int    satzsumme;         // Summe aller Sätze
  extern int    summwort;          // Summe aller Wörter
  extern int    zeilenzahl;        // Anzahl aller Zeilen
  extern double buchstabensumme;   // Summe aller Buchstaben
  extern double Zeichensumme;      // Summe aller Zeilen
  
                           // Zähler auf Null setzen
  summwort=0, buchstabensumme=0, sondersumme=0, satzsumme=0, lidx=0;
  
                          // Feld mit 0 vorbelegen
  for( Laufindex=0; Laufindex<27; Laufindex++ ) zfeld[Laufindex]=0;

  do {           // Schleife für die komplette Textanalyse
    //Kopieren einer Zeile in den String aktZeile
    strcpy(aktZeile , (*Zeigerfeld)[lidx]);  
    Laufindex=0;                          //Laufindex auf 0 setzen
    while(aktZeile[Laufindex] != NULL) {   //solange kein NULL gefunden wird
      bstab=aktZeile[Laufindex];          //aktuelles Zeichen auf bstab kopieren
      zfeldlidx=0;                        //Laufindex auf 0 setzen
      //solange zfeldlaufindex kleiner 26 -- Schleife zum Zählen jedes
      while(zfeldlidx<26) {                    //einzelnen Buchstabens
         if(bstab==65+zfeldlidx || bstab==97+zfeldlidx) zfeld[zfeldlidx]++;
         zfeldlidx++;                         //zfeldlidx um 1 erhöhen
      }//Ende while-Schleife "(zfeldlidx<26)"
      //bstabmerker auf 0 setzen, wenn bstab ein leerzeichen ist
     if(bstab==32)bstabmerker=0;              
     if(bstab>64 && bstab<91 || bstab>96 && bstab<123)//Wenn bstab ein Buchstabe
         //erhöhe buchstabensumme um 1 und
         //wenn bstabmerker=1 ist erhöhe summwort um 1 und setze bstabmerker=0
        {buchstabensumme++; if (bstabmerker==1) {summwort++;bstabmerker=0;}}
       //ansonsten wenn bstab ein satzabschlusszeichen ist erhöhe
       //satzsumme und sondersumme um eins
       else if(bstab==46 || bstab==33 || bstab==63 || bstab==59 ||
                                  bstab==58) {satzsumme++;sondersumme++;}
          //ansonsten wenn bstab ein leerzeichen nist erhöhe sondersumme um 1
          else if(bstab!=32)sondersumme++;        
     //wenn bstab ein Buchstabe oder ein Bindestrich ist setze Wortmerker auf 1
     if(bstab>64 && bstab<91 || bstab>96 && bstab<123||bstab==45) Wortmerker=1;
       //wenn bstab ein Buchstabe oder ein Bindestrich ist und Wortmerker 1 ist,
       //erhöhe summwort um 1 und setze Wortmerker auf 0
       else if (Wortmerker==1) {summwort++; Wortmerker=0;}  
      Laufindex++; //erhöhe den Laufindex um 1
    }//Ende while- Schleife "(aktZeile[Laufindex] != NULL)"
    bstab=aktZeile[Laufindex-1];//weise bstab das Letzte Zeichen der Zeile zu
    //wenn bstab ein Buchstabe ist setzte bstabmerker auf 1
    if(bstab>64 && bstab<91 || bstab>96 && bstab<123) bstabmerker=1;
    lidx++; //erhöhe lidx um 1
  } while((*Zeigerfeld)[lidx]!=NULL);//Wiederhole solang kein NULL gefunden ist
  Zeichensumme=buchstabensumme+sondersumme; // Berechnung Summe aller Zeichen

  zeilenzahl=lidx;               // Übergabe der Zeilenanzahl
  free(*Zeigerfeld);
}//Ende Unterprogamm Analyse
/******************************************************************************/
/*                          Unterprogramm Ausgabe                             */
/******************************************************************************/
void Ausgabe (char *txtName) {
  double mwwl;                   // Mittelwert Wortlänge
  double mwsl;                   // Mittelwert Satzlaenge
  char dummy[81];
  extern int    zfeld[27];         // Feld fuer die Anzahl aller  Zeichen
  extern int    sondersumme ;      // Summe aller Sonderzeichen
  extern int    satzsumme;         // Summe aller Sätze
  extern int    summwort;          // Summe aller Wörter
  extern int    zeilenzahl;        // Anzahl aller Zeilen
  extern double buchstabensumme;   // Summe aller Buchstaben
  extern double Zeichensumme;      // Summe aller Zeilen
  
  mwwl = buchstabensumme/summwort;  // Berechnung des Mittelwertes der Wortlänge
  mwsl = summwort/(double)satzsumme;// Berechnung des Mittelwertes der Satzlänge
/* Ausgabe aller Buchstaben und deren Haeufigkeiten mit Berechnungen          */
  clrscr();
  printf(" Ergebnis der Analyse von Datei : [mm] %s\n\n\n", [/mm] txtName);
  printf(" Haeufigkeit der einzelnen Buchstaben");
  printf("          Anzahl Buchstaben: [mm] %4.0lf\n", [/mm] buchstabensumme);
  printf(" [mm] ====================================\n\n\n"); [/mm]
  printf(" a: %2.1d %5.1lf%%", zfeld[0], (100/buchstabensumme)*zfeld[0]);
  printf("    b: %2.1d %5.1lf%%", zfeld[1], (100/buchstabensumme)*zfeld[1]);
  printf("    c: %2.1d %5.1lf%%", zfeld[2], (100/buchstabensumme)*zfeld[2]);
  printf("    d: %2.1d %5.1lf%%", zfeld[3], (100/buchstabensumme)*zfeld[3]);
  printf("    e: %2.1d [mm] %5.1lf%%\n", [/mm] zfeld[4], (100/buchstabensumme)*zfeld[4]);
  printf(" f: %2.1d %5.1lf%%", zfeld[5], (100/buchstabensumme)*zfeld[5]);
  printf("    g: %2.1d %5.1lf%%", zfeld[6], (100/buchstabensumme)*zfeld[6]);
  printf("    h: %2.1d %5.1lf%%", zfeld[7], (100/buchstabensumme)*zfeld[7]);
  printf("    i: %2.1d %5.1lf%%", zfeld[8], (100/buchstabensumme)*zfeld[8]);
  printf("    j: %2.1d [mm] %5.1lf%%\n", [/mm] zfeld[9], (100/buchstabensumme)*zfeld[9]);
  printf(" k: %2.1d %5.1lf%%", zfeld[10], (100/buchstabensumme)*zfeld[10]);
  printf("    l: %2.1d %5.1lf%%", zfeld[11], (100/buchstabensumme)*zfeld[11]);
  printf("    m: %2.1d %5.1lf%%", zfeld[12], (100/buchstabensumme)*zfeld[12]);
  printf("    n: %2.1d %5.1lf%%", zfeld[13], (100/buchstabensumme)*zfeld[13]);
  printf("    o: %2.1d [mm] %5.1lf%%\n", [/mm] zfeld[14],(100/buchstabensumme)*zfeld[14]);
  printf(" p: %2.1d %5.1lf%%", zfeld[15], (100/buchstabensumme)*zfeld[15]);
  printf("    q: %2.1d %5.1lf%%", zfeld[16], (100/buchstabensumme)*zfeld[16]);
  printf("    r: %2.1d %5.1lf%%", zfeld[17], (100/buchstabensumme)*zfeld[17]);
  printf("    s: %2.1d %5.1lf%%", zfeld[18], (100/buchstabensumme)*zfeld[18]);
  printf("    t: %2.1d [mm] %5.1lf%%\n", [/mm] zfeld[19],(100/buchstabensumme)*zfeld[19]);
  printf(" u: %2.1d %5.1lf%%", zfeld[20], (100/buchstabensumme)*zfeld[20]);
  printf("    v: %2.1d %5.1lf%%", zfeld[21], (100/buchstabensumme)*zfeld[21]);
  printf("    w: %2.1d %5.1lf%%", zfeld[22], (100/buchstabensumme)*zfeld[22]);
  printf("    x: %2.1d %5.1lf%%", zfeld[23],(100/buchstabensumme)*zfeld[23]);
  printf("    y: %2.1d [mm] %5.1lf%%\n", [/mm] zfeld[24],(100/buchstabensumme)*zfeld[24]);
  printf(" z: %2.1d [mm] %5.1lf%%\n\n\n",zfeld[25],(100/buchstabensumme)*zfeld[25]); [/mm]
  printf(" Lexikalische Analyse [mm] \n"); [/mm]
  printf(" ==================== [mm] \n\n\n"); [/mm]
  printf(" Summe Zeichen:  %4.0lf", Zeichensumme);
  printf("        Zeilen:  %4.0d", zeilenzahl);
  printf("       Mittelwerte [mm] \n"); [/mm]
  printf("                                                 [mm] -----------\n"); [/mm]
  printf(" Buchstaben   :  %4.0lf", buchstabensumme);
  printf("        Worte :  %4.0d", summwort);
  printf("       Wortlaenge:  %2.1lf Buchstaben [mm] \n\n", [/mm] mwwl);
  printf(" Sonderzeichen:  %4.0d", sondersumme);
  printf("        Saetze:  %4.0d", satzsumme);
  printf("       Satzlaenge:  %4.1lf Worte", mwsl);
  gets(dummy);
}//ende Ausgabe
/******************************************************************************/
/*                          Globale Variablen                                 */
/* Zur Kommunikation zwischen den Unterprogrammen "Analyse" und "Ausgabe"     */
/******************************************************************************/
static int    zeilenzahl;             // Anzahl aller Zeilen
static int    zfeld[27];              // Feld fuer die Anzahl aller  Zeichen
static int    sondersumme     = 0;    // Summe aller Sonderzeichen
static int    satzsumme       = 0;    // Summe aller Sätze
static int    summwort        = 0;    // Summe aller Wörter
static double buchstabensumme = 0;    // Summe aller Buchstaben
static double Zeichensumme    = 0;    // Summe aller Zeilen


Liebe Grüße :)

        
Bezug
Programm zur Textanalyse: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:28 Di 12.01.2010
Autor: Frasier

Hallo Sanny,
ich habe keinen Borland-Compiler, kann also nichtmal versuchen, das zu kompilieren.
Wo tritt der Fehler denn auf? Beim Kompilieren oder zur Laufzeit? Wie äußert sich der Fehler, Fehlermeldung?
Diese Informationen solltest du schon noch mit angeben.
Sonst ist man zu Beginn schon etwas erschlagen...
Und eine feiner Zug wäre es, wenn du das Programm soweit einkürzen könntest, dass nur noch der Fehler auftritt. Dann kann man sich auf das Wesentliche konzentrieren und während dieser Arbeit hast den Fehler vermutlich auch schon selbst gefunden. (Plus: Der fehlerproduzierende Code würde vielleicht mit dem gcc zu testen sein)
lg
F.

Bezug
        
Bezug
Programm zur Textanalyse: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 15:54 Di 12.01.2010
Autor: felixf

Hallo!

> Hallo, ich sitze schon seit Ewigkeiten an dem Programm und
> finde meine(n) Fehler nicht. Kann mir jemand helfen?

Dann verrat uns doch mal, um was fuer Fehler es sich handelt, wie sich diese zeigen etc.

Ich hab spontan nicht so viel Lust, mir das alles durchzulesen.

LG Felix


PS: Sagt dir [code]...[/code] was?


Bezug
        
Bezug
Programm zur Textanalyse: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:30 Di 12.01.2010
Autor: Sanny

Hier habe ich die Fehlermeldung einmal kopiert. Damit kann ich gar nix anfangen :( Die kommt gleich, wenn ich das Programm starten möchte.

Felix, nein, davon habe ich noch nichts gehört... ?!

[Dateianhang nicht öffentlich]

Dateianhänge:
Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
Bezug
                
Bezug
Programm zur Textanalyse: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:10 Mi 13.01.2010
Autor: Frasier

Hallo,
womit kompilierst du das denn?
Es sieht nach Microsoft aus, andererseits verwendest du Borland-Bibliotheken.
Keine Ahnung, ob das klappen kann...
lg
F.

Bezug
        
Bezug
Programm zur Textanalyse: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:20 Mi 20.01.2010
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheforum.net
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]