Psycho~zicke Geschrieben 24. August 2007 Geschrieben 24. August 2007 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 Zitieren
Guybrush Threepwood Geschrieben 24. August 2007 Geschrieben 24. August 2007 wäre lieb wenn mir da evt jemand nen anstoß geben könnt wie ich weiter komme. gerne, aber dafür müssten wir wissen wo genau du hängst und nicht weiter kommst. PS: Ist der Code da vorgegeben oder von dir? Zitieren
Psycho~zicke Geschrieben 24. August 2007 Autor Geschrieben 24. August 2007 Der Code ist von mir. Und genau da komm ich nicht weiter weil ich nicht weiß wie ich weiter machen soll. hab zwar auch ma weiter geschrieben aber naja das is wohl eher völligster quatsch. Ist halt nicht so einfach als komplett Neuling. Zitieren
Klotzkopp Geschrieben 24. August 2007 Geschrieben 24. August 2007 Soll das in C sein, oder C++? Zitieren
Psycho~zicke Geschrieben 24. August 2007 Autor Geschrieben 24. August 2007 oh sorry hab das wohl vergessen dazu zu schreiben. Das ist in C. Zitieren
Guybrush Threepwood Geschrieben 24. August 2007 Geschrieben 24. August 2007 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... Zitieren
Psycho~zicke Geschrieben 26. August 2007 Autor Geschrieben 26. August 2007 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 Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 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 klapptSiehe 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. Zitieren
Bläk Geschrieben 27. August 2007 Geschrieben 27. August 2007 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 Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 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] Zitieren
LordTerra Geschrieben 27. August 2007 Geschrieben 27. August 2007 if(liste!=0) hmmm also wenn sie das so schreibt wird nie was abgespeicher... richtiger wäre hier wohl ein == und net ein != Zitieren
Psycho~zicke Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 Irgendwie bin ich nun total verwirrt... Da sind überall soviel sachen dabei die ich noch nicht dran hatte in meinem Buch das ich echt da steh mir riesen fragezeichen überm kopf. Naja ich versuch die ma aufzulösen. Trotzdem vielen danke!! Zitieren
Psycho~zicke Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 Irgendwie das ganze! Ich hab bisher nur mit int, while, if else, for un getchar un putchar gearbeitet. Steh also so ganz am Anfang. Mehr kann ich noch nicht. Aber mit den funktionen scheint es wohl nicht zu gehen. Oder ich bekomms nur net hin. Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 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. Zitieren
Psycho~zicke Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 oh doch bei "hello, world" hatte ich printf mit drin. Ok dann schau ich sie mir mal an un hoffe das ich dann weiter komme. Danke!! Zitieren
Bläk Geschrieben 27. August 2007 Geschrieben 27. August 2007 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) Zitieren
LordTerra Geschrieben 27. August 2007 Geschrieben 27. August 2007 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 Zitieren
Guybrush Threepwood Geschrieben 27. August 2007 Geschrieben 27. August 2007 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 Zitieren
Psycho~zicke Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 @ 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. Zitieren
Psycho~zicke Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 @ 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. Zitieren
Bläk Geschrieben 27. August 2007 Geschrieben 27. August 2007 @ 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 Zitieren
Guybrush Threepwood Geschrieben 27. August 2007 Geschrieben 27. August 2007 @ 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. Zitieren
Psycho~zicke Geschrieben 27. August 2007 Autor Geschrieben 27. August 2007 es kommen beim compilieren fehlermeldungen: 4.c 4 declaration syntax error 4.c 6 declaration terminated incorrectly 4.c 6 declaration syntax error 4.c 6 declaration syntax error 4.c 13 declaration terminated incorrectly Zitieren
Klotzkopp Geschrieben 27. August 2007 Geschrieben 27. August 2007 4.c 4 declaration syntax error 4.c 6 declaration terminated incorrectly 4.c 6 declaration syntax error 4.c 6 declaration syntax error 4.c 13 declaration terminated incorrectlyDiese Fehlermeldungen sind ohne den dazugehörigen Quellcode nutzlos. Zitieren
Empfohlene Beiträge
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.