PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zeichen zählen



baldi123
03.12.2004, 20:44
könnt ihr mir helfen, möchte gerne wissen wei so etwas funktioniert !!!

BITTE !!!!!!!!!!



Schreibe ein Programm welches in einem Text die vorkommenden Buchstaben zählt und deren Häufigkeit ausgibt. Auch der analysierte Text soll ausgegeben werden.

Beispiel für die Ausgabe:

Uebersicht des Zustands von Europa zur Zeit des ersten Kreuzzugs
Der europaeische Okzident, in so viele Staaten er auch zerteilt ist,
gibt im elften Jahrhundert einen sehr einfoermigen Anblick.
Durchgaengig von Nationen in Besitz genommen, die zur Zeit ihrer
Niederlassung ziemlich auf einerlei Stufe gesellschaftlicher Bildung standen,
im Ganzen denselben Stammescharakter trugen und bei Besitznehmung
des Landes in einerlei Lage sich befanden, haette er seinen
neuen Bewohnern ein merklich verschiedenes Lokal anbieten muessen, wenn sich
in der Folge der Zeit wichtige Verschiedenheiten
unter denselben haetten aeussern sollen.
Aber die gleiche Wut der Verwuestung, womit diese Nationen ihre Eroberung
begleiteten, machte alle noch so verschieden bewohnten,
noch so verschieden bebauten Laender, die der Schauplatz
derselben waren, einander gleich, indem sie alles, was sich in ihnen vorfand,
auf gleiche Weise niedertrat und vertilgte und ihren neuen Zustand
mit demjenigen, worin sie sich vorher befunden, fast au¯er aller Verbindung
setzte.

A 45 5.12% |**********
B 21 2.39% |****
C 26 2.96% |*****
D 40 4.55% |*********
E 172 19.57% |***************************************
F 11 1.25% |**
G 25 2.84% |*****
H 39 4.44% |********
I 75 8.53% |*****************
J 2 0.23% |
K 6 0.68% |*
L 36 4.10% |********
M 16 1.82% |***
N 99 11.26% |**********************
O 24 2.73% |*****
P 3 0.34% |
Q 0 0.00% |
R 57 6.48% |************
S 55 6.26% |************
T 51 5.80% |***********
U 36 4.10% |********
V 12 1.37% |**
W 11 1.25% |**
X 0 0.00% |
Y 0 0.00% |
Z 17 1.93% |***
Es wurden 879 Buchstaben gelesen!


PROGRAMM-ENDE!


Annahmen:

 Der Text enthält außer Satzzeichen (Punkt, Beistrich, ...) nur die Buchstaben 'a' bis 'z' . Umlaute, scharfes s und dergleichen kommen im Text nicht vor bzw. sollen nicht berücksichtigt werden.

 Es ist egal, ob der Buchstabe als Groß- oder Kleinbuchstabe vorkommt.


Zur Aufnahme des Textes ist ein zweidimensionales Zeichen-Array text wie folgt zu definieren:

char text [100][80]; // Text mit 100 Zeilen zu je 80 Zeichen

Der zu analysierende Text kann am Programmanfang fix zugewiesen werden (max. 100 Zeilen):

strcpy(text[0],"Uebersicht des Zustands von Europa zur Zeit des ersten Kreuzzugs");
strcpy(text[1],"Der europaeische Okzident, in so viele Staaten er auch zerteilt ist,");
strcpy(text[2],"gibt im elften Jahrhundert einen sehr einfoermigen Anblick.");
strcpy(text[3],"Durchgaengig von Nationen in Besitz genommen, die zur Zeit ihrer");
strcpy(text[4],"Niederlassung ziemlich auf einerlei Stufe gesellschaftlicher Bildung standen,");
// u.s.w.

Beachte: Du kannst deinen Text beliebig wählen. Er sollten aber zumindest 10 Zeilen umfassen. Die Länge einer Zeile darf 80 nicht übersteigen!

churchi
03.12.2004, 20:55
#include <iostream>
using namespace std;
#include <string.h>
#include <ctype.h>
#include <stdlib.h>



char text [100][80]; // Text mit 100 Zeilen zu je 80 Zeichen
int wert[26];
int i=0;
int y=0;
int anzahl=0;

void main(void)
{
int zeilen = 17;
strcpy(text[0],"Uebersicht des Zustands von Europa zur Zeit des ersten Kreuzzugs");
strcpy(text[1],"Der europaeische Okzident, in so viele Staaten er auch zerteilt ist,");
strcpy(text[2],"gibt im elften Jahrhundert einen sehr einfoermigen Anblick.");
strcpy(text[3],"Durchgaengig von Nationen in Besitz genommen, die zur Zeit ihrer");
strcpy(text[4],"Niederlassung ziemlich auf einerlei Stufe gesellschaftlicher Bildung standen,");
strcpy(text[5],"im Ganzen denselben Stammescharakter trugen und bei Besitznehmung");
strcpy(text[6],"des Landes in einerlei Lage sich befanden, haette er seinen");
strcpy(text[7],"neuen Bewohnern ein merklich verschiedenes Lokal anbieten muessen, wenn sich");
strcpy(text[8],"in der Folge der Zeit wichtige Verschiedenheiten");
strcpy(text[9],"unter denselben haetten aeussern sollen.");
strcpy(text[10],"Aber die gleiche Wut der Verwuestung, womit diese Nationen ihre Eroberung");
strcpy(text[11],"begleiteten, machte alle noch so verschieden bewohnten,");
strcpy(text[12],"noch so verschieden bebauten Laender, die der Schauplatz");
strcpy(text[13],"derselben waren, einander gleich, indem sie alles, was sich in ihnen vorfand,");
strcpy(text[14],"auf gleiche Weise niedertrat und vertilgte und ihren neuen Zustand");
strcpy(text[15],"mit demjenigen, worin sie sich vorher befunden, fast au¯er aller Verbindung");
strcpy(text[16],"setzte.");



for(i=0;i<26;i++)
{
wert[i]=0;
}

printf("Uebung 3\n\n");

for(i=0;i<zeilen;i++)
{
printf("%s\n",text[i]);
}

printf("\n");

for(i=0;i<zeilen;i++)
{
for(y=0;y<80;y++)
{
text[i][y] = tolower(text[i][y]);
if((text[i][y] > 96) && (text[i][y] < 123))
{
wert[text[i][y]-97]=wert[text[i][y]-97]+1;
anzahl++;
}
}
}

printf("\nes wurden %i Buchstaben gelesen.\n\n",anzahl);

for(i=0;i<26;i++)
{
printf("%c\t %i\t %3.2f\t|",i+97-32,wert[i],(float)100/anzahl*wert[i]);
for(y=0;y<(float)100/anzahl*wert[i];y++)
{
printf("*");
}
printf("\n");
}


printf("ENDE\n\n");
system("pause");
}


es währ vielleicht schöner wenn das Zeichenzählen in einer extra Funktion geschehen würde, aber naja.

Das is übrigends ein C++/C Code - ich denke, dass du genau das brauchst... - ich nehme mal stark an wir gehen in die gleiche Schule - wenn nicht sogar in die gleiche Klasse :-k

Könnt natürlich auch sein, dass es eine Standardaufgabe ist...

nestler
03.12.2004, 20:56
Um dir nicht gleich deine Hausaufgabe bzw. Übungsaufgabe komplett
zu lösen (wonach sich das anhört...), nur die Lösungsidee:

Laufe einfach in zwei verschachtelten Schleifen durch das Array. In
einer Schleife wird der erste Index erhöht, in der anderen der zweite.
Ermittle in jedem Schritt das Zeichen und erhöhe deinen Zähler für
das entsprechende Zeichen.

(Um nicht 26 matches zu benötigen, könnte man geschickt mit dem
ASCI-Wert des Zeichens arbeiten und ein int-Array zur Speicherung der Werte verwenden...).

Gruss,
Simon

nestler
03.12.2004, 20:58
Hm...

Das ist so ziemlich genau die Umsetzung meiner Lösungsidee - und
dabei wollte ich ihn doch noch ein bisschen nachdenken lassen ;-)

churchi
03.12.2004, 21:06
Ja - klar - aber er muss das Programm sowieso verstehen, ansonsten hat er beim Test/Prüfung keine Chance.

Er hat selbst Schuld, wenn er jetzt einfach den Code abgiebt und ihn nicht versteht und nicht weiß wie man auf das kommen könnte...

baldi1234
03.12.2004, 21:26
ich kenn mich e so halbwegs aus.
in welche schule gehst du??
HTL vöcklabruck ???????????

churchi
03.12.2004, 21:30
:cheesy: ja - hab ich mir fast gedacht... - und der Lehrer ist GRUG?

aber das is doch eh eine einfache Aufgabe gewesen...