Zum Inhalt springen

Zeichen zählen und ein Histogramm erstellen.


Psycho~zicke

Empfohlene Beiträge

Hallo zusammen!

Ich mache seit Anfang des Monats ne Ausbildung zur FIAE und hab bis dahin absolut keinen plan davon gehabt. Langsam arbeite ich mich da rein aber komme irgendwie nicht weiter. Häng un schon seit 2 tagen an einer Aufgabe und hoffe das ihr mir evt weiterhelfen könnt.

Die Aufgabe lautet:

Schreibe in Programm, das ein Histogramm der Länge der eingegebenen Wörter ausgibt. Es ist am einfachsten, dieses Histogramm horizontal anzuordnen; eine vertikale Anordnung erfordert etwas höheren Aufwand.

Ich habe damit angefangen komme aber nicht weiter weil ich genau das noch nicht bearbeitet habe un in meinem buch nix drüber steht.

Der Anfang:

#include <stdio.h>

// Max. Wortlänge

#define MAXWORD 11

// Max. Histogramm länge

#define MAXHISTO 15

void main()

{

// deklaration der Variablen

int iEingabe;

int maxword;

int maxhisto;

// Zuordnung der Werte

iEingabe = 0;

maxword = 11;

maxhisto = 15;

// Wird solange ausgeführt bis (iEingabe = getchar () != 'A') zutrifft.

while (getchar() != 'A')

wäre lieb wenn mir da evt jemand nen anstoß geben könnt wie ich weiter komme.

Liebe Grüße

die Zicke

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 51
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Also du kannst das zwar so machen wie du oben angefangen hast, aber sehr viel einfacher wäre es alles aufeinmal in ein char Array einzulesen und das dann zu untersuchen.

Das Einlesen würde ich dann mit fgets machen, weil du da eine maximale Länge angeben kannst und somit verhinderst das der Benutzer mehr eingibt als in dein Array passt.

BSP:


char szString[512];
fgets(szString,5120,stdin);
[/PHP]

jetzt musst du nur noch schauen wie lang die einzelnen Wörter in szString sind und die Längen ausgeben...

Link zu diesem Kommentar
Auf anderen Seiten teilen

hmm also mit dem tip den du mir gegeben hast hab ich das nicht wirklich verstanden... dafür hab ich wohl noch nciht genug gelernt was das Programmieren betrifft...

ich habs aber mal so geschrieben wie ich denke das es richtig ist. Aber es funktioniert noch nicht so richtig.

Evt kann mir ja jemand sagen wieso es nicht richtig klappt un wie es evt sein sollte... Bin mit meinem bissel wissen das ich hab absolut am ende... Aber oft ist es ja so das man die Bäume vor lauter Wald nicht sieht und die lösung ganz einfach ist.

Meine Version:

#include <stdio.h>

void main()

{

// deklaration der Variablen

int iEingabe;

int iEingabe2;

int nwhite;

int nletter;

int ndigit[10];

// Zuordnung der Werte

iEingabe = 0;

nwhite = nletter = 0;

for (iEingabe2 = 0 ; iEingabe2 <10; ++iEingabe2)

ndigit[iEingabe2] = 0;

while ((iEingabe = getchar()) !='A')

if (iEingabe >= '0' && iEingabe <= '9')

++ndigit[iEingabe-'0'];

else if (iEingabe == ' ' || iEingabe == '\n' || iEingabe == '\t')

{

++nwhite;

}

else

{

++ nletter;

}

printf ("digits=");

for (iEingabe2 = 0; iEingabe2 <10; ++iEingabe2)

{

printf ("%d", ndigit[iEingabe2]);

printf (", white space = %d, other = %d\n", nwhite, nletter);

}

}

Liebe Grüße

die Zicke

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habs aber mal so geschrieben wie ich denke das es richtig ist.
Willst du uns veräppeln?

Das Programm liest zeichenweise ein und untersucht dann, ob das eingegebene Zeichen eine Ziffer, Whitespace oder ein anderes Zeichen ist. Weit und breit keine Spur von Wörtern, deren Länge, oder gar einem Histogramm. Das Programm löst womöglich eine Aufgabe, aber nicht deine.

Daher vermute ich auch, dass du es nicht selbst geschrieben, sondern nur irgendwo kopiert hast.

Evt kann mir ja jemand sagen wieso es nicht richtig klappt
Siehe oben. Das Programm hat nichts mit deiner Aufgabenstellung zu tun.

un wie es evt sein sollte...

Du brauchst ein int-Array für die statistischen Daten. Und du musst Wörter einlesen, keine Zeichen. Also weg mit getchar. fgets von STDIN (bitte nicht gets), oder auch einfach scanf. Dann prüfst du die Länge des eingegeben Wortes, und inkrementierst den dazugehörigen Wert in deinem Array.

Mach das erst mal so weit, dann kümmern wir uns um die Ausgabe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

man bist du gemein ^^

ich hoffe ich hab die aufgabe richtig vertanden

einbischen starthülfe

char *wort; // variable für das eingegebene wort (* = Zeiger)

int liste[100]; // array für die länge der einzelnen strings ^^

// dynamisch wäre jetzt wohl zu kompliziert

// initialisiere liste

for(i=0;i<100;i++) // soviele wörter gib erstmal ein

{

liste=0; // das sind dann leere einträge

// (weil nicht sicher ist das die alle von anfang an 0 sind)

}

dateneingabe(wort); // zum einlesen eines wortes

int i=0;

bool ende=false;

while(ende=false)

{

if(i>99){ ende=true; }

else

{

if(liste!=0)

{

liste=strlen(wort);

ende=true;

}

else i++;

}

// jetzt könnte noch ein wort mehr eingelesen werden

// -----------------------------------------------------------

datenausgabe(); // alle listen inhalte die nicht 0 sind ausgeben

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du speicherst nacheinander die Stringlängen in deiner Liste. Das ist zwar nicht falsch, aber dennoch überflüssig. Denn die Information, in welcher Reihenfolge die Worte eingegeben wurden, brauchst du nicht.

Ich dachte eher daran, dass du in deinem Array die Werte so speicherst:

In liste[0] steht, wieviele Wörter der Länge 0 eingegeben wurden (das werden nicht so viele sein ;)). In liste[1] steht die Anzahl der Wörter mit 1 Buchstaben, usw.

Du brauchst also im Prinzip nur das hier:

int len = strlen(wort);
// Bereichsprüfung
++liste[len];[/code]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab bisher nur mit int, while, if else, for un getchar un putchar gearbeitet.
Du kennst printf nicht? War dein erstes Helloworld-Programm eine Folge von putchar-Aufrufen?

Aber mit den funktionen scheint es wohl nicht zu gehen.

Das geht schon, ist aber IMHO unnötig kompliziert. Du solltest dir wohl zumindest noch printf und scanf ansehen, bevor du dich mit dieser Aufgabe beschäftigst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

du könntest ja mal aufzählen welche befehle du schon kennst

oder welche ihr schon kennen müsstet

um zu verstehen auf welchem niveau die aufgabe aufgebaut ist

und vorallem welche du überhaupt nicht kennst

neuerdings lernen viele mädchen in der schule programmieren das gabs bei uns früher nich (son mist)

anbei die lösung von klotzskopp (was für ein name ^^) is nicht schlecht könnte einfacher werden dadurch

:in kurz deutsch:

--v

lese wort in variable

ermittle wortlänge

erhöhe array[wortlänge] um 1

^-- hier könnte eine wiederholung stattfinden

ausgabe der statistik

Edit: ~.~ (doofer proxycache)

Link zu diesem Kommentar
Auf anderen Seiten teilen


char *wort; 

int liste[100]; 

int i=0;

bool ende=false;


for(i=0;i<100;i++) {

  liste[i]=0; 

}


fgets(wort,25,stdin); 


while(ende=false){

  if(i>99){ 

    ende=true; 

  }else{

    if(liste[i]!=0){

      liste[i]=strlen(wort);

      ende=true;

    }else{

      i++;

    }

  }

}


--> ausgabe

so find ich es am schönsten...

bin mir aber net sicher ob das so mit fgets geht wenn net musst du wort halt noch ne feste größe verpassen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Irgendwie bin ich nun total verwirrt...

Das bin ich bei manchen Beiträgen hier auch ;)

Also überleg dir erstmal ganz genau was dein Programm machen soll und was du dafür brauchst. Klotzkopp hat ja schon einen guten Hinweis gegeben wie das am Ende ausschauen muss, nämlich eine List wo dann z.B. steht

Wörter mit 3 Zeichen: 2

Wörter mit 6 Zeichen: 5

Wörter mit 9 Zeichen: 4

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ Bläk

Ich mach das nicht in der Schule zumindest nicht nur hab am 1.08.07 ne ausbildung zur FIAE angefangen und da lern ich das nun nach un nach... Muss mir halt sehr viel selbst beibringen...

ich werd heut abend hier ma ne auflistung machen...

@ LordTerra

also bei mir läuft das nicht. Auch nicht wenn "word" nen festen wert hat. Aber vllt hab ich ja nur wieder was falsch gemacht... ich schau noch ma nach.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ Bläk

Ich mach das nicht in der Schule zumindest nicht nur hab am 1.08.07 ne ausbildung zur FIAE angefangen und da lern ich das nun nach un nach... Muss mir halt sehr viel selbst beibringen...

ich werd heut abend hier ma ne auflistung machen...

@ LordTerra

also bei mir läuft das nicht. Auch nicht wenn "word" nen festen wert hat. Aber vllt hab ich ja nur wieder was falsch gemacht... ich schau noch ma nach.

was meinst du es läuft nicht

lässt es sich ohne fehler comilieren macht aber nichts oder was anderes

oder kommen fehlermeldungen Oo und wenn welche

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ LordTerra

also bei mir läuft das nicht. Auch nicht wenn "word" nen festen wert hat. Aber vllt hab ich ja nur wieder was falsch gemacht... ich schau noch ma nach.

Das "Beispiel" solltest du auch lieber komplett ignorieren.

@ Guybrush Threepwood

Was das Programm machen soll weiß ich ja... ich weiß nur nicht wie bzw was ich dafür eintippen muss das es das dann auch macht.

Ja, aber bevor du irgendetwas rumprobierst solltest du erstmal versuchen dir darüber klar zu werden was genau das Programm machen soll und was du brauchst. Ohne dabei konkret an irgendwelche Programmierbefehle zu denken.

Also zum Beispiel:

- Eine Liste von Zahlen welche die Anzahl der Wörter speichert.

Am aller einfachsten würde das Element an Stelle 0 die Anzahl der Wörter mit 0 Zeichen speichern. Das an Stelle 1 die Wärter mit einem Zeichen, an Stelle 2 mit 2 Zeichen usw.

- Eine Schleife die bis zu einer bestimmten Bedingung Wörter einliest, die Länge ermittelt und dann das entsprechende Element in der Liste hochzählt

- Die Ausgabe deiner Liste der Anzahl an Wörtern.

Wenn du das zusammen hast und weißt was da passieren soll kannst du dir überlegen wie du die einzelnen Punkte genau umsetzt. Also wie legst du so eine Liste an und arbeitest damit? Wie liest du Wörter ein und ermittelst die Länge? Wie gibst du die Liste am Ende wieder aus usw.

Klotzkopp hat ja schon einen Hinweis mit scanf und printf gegeben und zu der Liste geb ich dir mal den Tipp das du dich nach Arrays umschauen solltest.

Alles weitere können wir dir ja dann bei konkreten Fragen beantworten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...