Hallo,
ich habe eine Aufgabe gestellt bekommen, allerdings komme ich damit
absolut nicht zu recht.
Die Fragestellung lautet:
Entwerfen Sie ein Unterprogramm void histogram( char * data, int length)
nach der folgenden Spezifikation:
Es soll über einen vorgegebenen Speicherbereich nach ASCII-Ziffern 0..9
gesucht und deren Häufigkeit registriert werden. Der Speicherbereich
wird über den Parameter 'data' vorgegeben. 'length' ist die Anzahl der
insgesamt zu durchsuchenden Bytes. Das Ergebnis ist in einem globalen
int-Array abzulegen.
Vergessen Sie nicht, das Array zu deklarieren und bei Beginn zu
initialisieren.
Das Unterprogramm in C kodiert werden.
Ich weiss nicht wie ich diese Aufgabe ansetzten soll bzw. wie ich
Anfangen soll. Zu dem weiss ich nicht, wie ich die syntax nicht, wie ich
ASCII verwenden soll. Das was ich bisher habe ist:
unsigned Array [10];
uint8_t data;
uint8_t length;
void histogram (char*data, int length)
{
}
-------
Ich hoffe das mir jemand helfen kann, denn ich bin mittlerweile übelst
am verzweifeln :-( :-(
Da würde ich ein Feld machen, das so groß ist wie es Zeichen
gibt, alle Feldelemente zu 0 initialisieren, und dann den
Speicher durchlaufen und bei jedem Zeichen das Feldelement
mit dem Index des Zeichenwerts um 1 erhöhen.
Alle weitere im C-Buch deines Vertrauens...
okay danke.
also ich hab jetzt das hier:
unsigned char array []={1,2,3,4};
unsigned char data []={1,2,3,4};
uint8_t length;
void histogram (char*data,int length)
{
int i = 1;
while(i=4)
{
data[i]==0;
i++;
}
}
...
..
.
den speicher kann ich genauso durchlaufen, oder?! und was meinst du mit'
bei jedemZeichen das Feldelement
mit dem Index des Zeichenwerts um 1 erhöhen ' ? sry aber, das hab ich
nicht ganz gerafft :-(
Das liegt daran, daß du von C keinerlei Ahnung hast.
Das ist insoweit keine Schande.
Aber niemand kann dir die Mühe abnehmen, das zu ändern.
Obwohl das Jahr erst gerade knapp drei Tage hat, bist du nicht der
erste, der hier seine Hausaufgaben gelöst haben will.
Aber so funktioniert das nicht.
Du musst selbst die Sprache lernen und deine Hausaufgaben lösen.
Das hier ist ein Mikrocontrollerforum und für gegenseitige Hilfe
gedacht.
Wenn du dir nicht die Mühe machst, dir die Grundlagen anzueignen,
schaffst du die Aufgabe halt nicht.
> ich habe eine Aufgabe gestellt bekommen.
Wie kann man bloss so gemein sein? Einem Frisör solch eine Aufgabe
stellen, also wirklich!
Jungchen, setz dich auf deine Arschbacken und hol nach was du im
Unterricht verpennt hast! Ich glaub es ja nicht!
avr_niete schrieb:> den speicher kann ich genauso durchlaufen, oder?!
Kleiner Tip:
Die for-Schleife ist schon erfunden.
Ansonsten: sieh zu dass du das was du im ersten Halbjahr versäumt hast
schleunigst nachholst. Du gerätst immer mehr ins Hintertreffen und
kannst das nie wieder aufholen.
avr_niete schrieb:> Hallo,>> ich habe eine Aufgabe gestellt bekommen, allerdings komme ich damit> absolut nicht zu recht.>> Die Fragestellung lautet:>> Entwerfen Sie ein Unterprogramm void histogram( char * data, int length)> nach der folgenden Spezifikation:>> Es soll über einen vorgegebenen Speicherbereich nach ASCII-Ziffern 0..9> gesucht und deren Häufigkeit registriert werden. Der Speicherbereich> wird über den Parameter 'data' vorgegeben. 'length' ist die Anzahl der> insgesamt zu durchsuchenden Bytes. Das Ergebnis ist in einem globalen> int-Array abzulegen.> Vergessen Sie nicht, das Array zu deklarieren und bei Beginn zu> initialisieren.>> Das Unterprogramm in C kodiert werden.>> Ich weiss nicht wie ich diese Aufgabe ansetzten soll bzw. wie ich> Anfangen soll.
Okay zerlegen wir die aufgabe doch in Teile.
0.) du sollt wenn ich die aufgabe richtig lese in einen globalen Array
die heufigkeiten der jeweiligen ASCII Zeichen von 0..9 Speichern. Was
das ASCII meint, kommt später. Also legst du ein globales Array
Häufigkeit an
in dein Programm und initialiesiert es an den beginn der Funktion
histogram mit 0 in jeden feld. ist also eine for schleife die 10mal 0 in
das Array Heufigkeit schreibt.
1.) du sollt über ab der Adresse data, length mal, gucken ob der Inhalt
der Adresse denn Ascii zeichen 0...9 entspricht.
Das sagt die also du brauchst eine schleife denn data ist ein Feld und
du must dir jedes element ansehen ob es zu dein Schema passt. Stichwort
hier ist for schleife.
2.) wenn du via forschleife und Index das Aktuelle element untersuchst
siehts du dir an ob dort irgendwas zwischen '0' und '9' drin steht.
'0' ist die ASCII representation einer 0. '1' die ASCII Darstellung
einer eins und so weiter. Wenn das Zeichen auf eine der Bedinungen
zutrifft musst du den jeweiligen wert im Array Heufigkeit
inkrementieren.
du brauchst also eine Art If abfrage oder ein switch, case.
Das switch case erscheint denn Anfängern erstmal Intuitiver aber du
kannst hier die tatsache nutzen das wenn du '9'-'0' rechnest eine
Differenz von 9 herauskommt und du somit schnell und einfach von den
ASCII Werten zu den Interger werten kommst. Also reicht auch ein if
abfrage.
@Imon (Gast)
WAS SOLL DAS?
Einerseits beschweren wir uns hier völlig zu Recht über die faulen Säcke
die hier ihre Hausaufgaben gemacht haben wollen. Aber andererseits
bekommen letztere schlussendlich doch immer von irgendjemandem die
komplette Lösung serviert. Warum sollten sie sich also die Mühe machen
selber zu denken? Stattdessen kommen sie bei der nächsten Aufgabe wieder
und das Spiel geht von vorne los. Kapiert ihr das nicht oder wollt ihr
es nicht kapieren?
@Mod:
Den Beitrag von Imon bitte löschen, einfach damit der TO mal selber
denken muss.
Imon schrieb:> for( i = 0 ; i < length; i ++) {> if (( data[i] >= '0' ) && ( data[i] <='9')) {> tmp = data[i] - '0';> heufigkeit[tmp]++;> }
die for schleife ist mir klar, allerdings kann ich mir nicht herleiten,
warum im data[i] - '0' machen muss. hat das damit zu tun das mein array
feld aus 11 elementen besteht?
Vielen Dank
avr_niete schrieb:> die for schleife ist mir klar, allerdings kann ich mir nicht herleiten,> warum im data[i] - '0' machen muss. hat das damit zu tun das mein array> feld aus 11 elementen besteht?
Wenn dir diese Zeile nicht klar ist, machs anders.
In der Schleife:
wenn Zeichen gleich '0'
Element in data für '0' erhöhen (+1)
wenn Zeichen gleich '1'
Element in data für '1' erhöhen (+1)
und so weiter für alle 10 Zeichen.
schreiben musst dus selber. :-)
Floh schrieb:> In der Schleife:> wenn Zeichen gleich '0'> Element in data für '0' erhöhen (+1)> wenn Zeichen gleich '1'> Element in data für '1' erhöhen (+1)>> und so weiter für alle 10 Zeichen.> schreiben musst dus selber. :-)
ahhh dank dir. habs jetzt gerafft, was damit gemeint war.
??? schrieb:> @Imon (Gast)> WAS SOLL DAS?>
Ich hatte nicht das gefühl das der Fragende ein Problem mit der Sprache
C hat sondern eher das er nicht in der lage ist sein Problem in
vernüfigte Brocken zu zerlegen. Ausserdem habe ich denn eindruck das der
TO keine Ahnung hat was der Unterschied zwischen ASCII und anderen
Darstellungen ist.
Ich denke wir haben alle mal klein angefangen und waren sicher nicht
alle die Hellsten als wir mit der Entwicklung von C Programmen
angefangen haben.
Sicher der C Code am ende war viel zu viel, Da bin ich über das Ziel
weit hinausgeschossen. Aber mal ehrlich der TO hat ein Problem und
einfach nur zu sagen kauf dir ein Buch, kann es echt nicht sein.
Ihm fehlen die elementarsten Dinge - er hat sicher noch keinerlei
Übung in C. Und das ist erstmal sein Problem, das er selbst beheben
muß.
Imon schrieb:> Ich denke wir haben alle mal klein angefangen und waren sicher nicht> alle die Hellsten als wir mit der Entwicklung von C Programmen> angefangen haben.
Das ist richtig.
Aber in dem Stadium habe ich nicht anderen Leuten meine
Hausaufgaben hingeworfen, sondern habe mich ums Programmieren
gekümmert.
> Das ist richtig.> Aber in dem Stadium habe ich nicht anderen Leuten meine> Hausaufgaben hingeworfen, sondern habe mich ums Programmieren> gekümmert.
Woher weisst du mein Stadium? Das du darüber ein Urteil aussprechen
kannst. Zu dem ob ich mit C programmiert habe. Ja habe ich. In den
ersten beiden Semestern meine Studiums. Allerdings ist das schon einige
Zeit her. Ich gebe zu das es so klang als ob ich meine Hausaufgaben hier
hingeschmissen haette, aber nein, in diesem Sinne war es von mir nicht
gedacht. Ich habe alle Beiträge gelesen - wollte eigentlich dazu nichts
äußern- habe mich aber nun doch dazu entschieden.
Ich dachte mir nur, dass ich evntl. hier auf menschen stoßen könnte, die
mir wieder einwenig auf die Sprünge helfen könnten - so wie das Imon
gemacht hat, wofür ich ihm auch wirklich sehr dankbar bin. Das war nur
eine Beispielaufgabe, die ich mit Hilfe von Imon und einigen andren
Überwinden konnte. Nach dieser Aufgabe habe ich eine weitere, alleine
gemeistert. Jetzt sitze ich grad an der dritten aufgabe.
soviel zu dem Thema ich würde ja nichts selber machen.
Aber ich bin weder auf Klaus noch auf ??? sauer wegen ihren Beiträgen,
denn ich bin davon überzeugt das Sie mit ihren Reaktionen es nur gut mit
mir gemeint haben. Ist ja auch okay. Der eine versteht unter Hilfe das
eine, der andere versteht halt etwas anderes darunter. Aber trotzdem bin
ich allen dankbar!
avr_niete schrieb:> Woher weisst du mein Stadium?
Aus deinem ersten Posting.
Klaus, ich und viele andere hier haben haufenweise C Code gesehen aus
allen Lernstadien. Wir können anhand des Codes ganz gut einschätzen, wo
jemand steht.
und wer so etw3as schreibt
1
voidhistogram(char*data,intlength)
2
3
{
4
inti=1;
5
while(i=4)
6
{
7
data[i]==0;
8
i++;
9
}
10
11
}
hat ganz einfach geglaubt er kann ein paar Lektionen überspringen. Ob
das jetzt das Überspringen von ein paar Kapiteln eines Buches ist, oder
ob das ein paar mal Fehlen in der Vorlesung ist oder ob das das
Auslassen der ersten Übungen ist (weil ja eh alles so einfach ist), kann
man von hier nicht feststellen. Aber dass sich hier jemand ein paar
Brocken abgebissen hat, die zu groß für ihn waren, dass sieht man.
Denn wenn man in seiner Lernphase bei Funktionen und Arrays angelangt
ist, dann dürfen diese Fehler hier einfach nicht mehr passieren. Noch
nicht mal morgens um halb 5 nach einer durchzechten Nacht. Wenn du so
was schreibst, dann müssen dir sofort die Augen weh tun.
Karl heinz Buchegger schrieb:> Denn wenn man in seiner Lernphase bei Funktionen und Arrays angelangt> ist, dann dürfen diese Fehler hier einfach nicht mehr passieren. Noch> nicht mal morgens um halb 5 nach einer durchzechten Nacht. Wenn du so> was schreibst, dann müssen dir sofort die Augen weh tun.
Ich möchte nicht ausschließen dass ich aus Unachtsamkeit mal ein '='
vergesse oder eines zuviel tippe, wobei die Bedingung in der Schleife
selbt korrekt (i==4) keinen Sinn macht.
Spätestens beim Compilieren fällt so etwas aber auf:
??? schrieb:> Aber Warnungen lesen (und versuchen sie zu verstehen) ist ja soooo> uncool...
nein ist es nicht. Das genau ist aber immer das problem wenn man auf dem
blattpapier geprüft wird.
Och komm, das ist ne dämliche Ausrede! Wenn ich mir deinen bisherigen
"Ergüsse" so angucke, das liegt nicht am Papier. Bis zur Prüfung sollte
man sich u.a. durch praktische Übungen (und sei es daheim mit der
kostenlosen GNU Toolchain) genug Wissen angeignet haben um zumindestens
Programme zu schreiben welche auch als solche erkennbar sind.
avr_niete schrieb:> Das Ergebnis ist in einem globalen int-Array abzulegen.
Und dann das:
1
unsignedArray[10];
Warum mußt du da was neu erfinden? Wenn ein int-Array verlangt ist, dann
legst du doch am einfachsten ein int-Array an... :-/
Das wäre sogar noch weniger Tipparbeit gewesen.
avr_niete schrieb:>> Aber Warnungen lesen (und versuchen sie zu verstehen) ist ja soooo>> uncool...> nein ist es nicht. Das genau ist aber immer das problem wenn man auf dem> blattpapier geprüft wird.
Das unterscheidet aber den, der schon oft den Fehler gemacht hat, von
dem der den Fehler noch nie gemacht hat. Der, der den Fehler schon oft
gemacht hat, macht den Fehler auch auf einem Blatt Papier nicht mehr!!
Um die Diskussion abzukürzen:
Hier eine Lösung, die ich in 1 Minute aus deiner Beschreibung oben
hingeschreiben habe:
Lothar Miller schrieb:>> nein ist es nicht. Das genau ist aber immer das problem wenn man auf dem>> blattpapier geprüft wird.> Das unterscheidet aber den, der schon oft den Fehler gemacht hat, von> dem der den Fehler noch nie gemacht hat. Der, der den Fehler schon oft> gemacht hat, macht den Fehler auch auf einem Blatt Papier nicht mehr!!
Musiker und Tänzer nenne das im Übrigen 'üben' bzw. 'proben'. Kein
Musiker käme auf die Idee zu einem Konzert zu gehen (geprüft zu werden)
ohne vorher ausgiebig geübt zu haben. Bis seine Finger die
Tasten/Klappen/Löcher/Saiten ganz von alleine an den richtigen Stellen
finden.
An dem Spruch 'Übung macht den Meister' ist mehr drann als viele
glauben.
Karl heinz Buchegger schrieb:> und wer so etw3as schreibt> void histogram (char*data,int length)> {> int i = 1;> while(i=4)> {> data[i]==0;> i++;> }> }
...provoziert zumindest keinen BSOD. Mir gefällt das.