BPS #1: Buchstaben zählen - Auswertung
Übersicht

![]() |
hamZtaAdministratorBetreff: BPS #1: Buchstaben zählen - Auswertung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nachdem das Ende der ersten BPS etwas ungünstig auf die Feiertag gefallen ist, kommt nun verspätet aber doch der Auswertungsthread für die erste Aufgabe.
Aufgabenstellung Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern. Diskussion Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen. Nächste Aufgabe Ihr habt eine Woche Zeit, eure erste Aufgabe zu verbessern bzw. zu besprechen, dann kommt die nächste Aufgabe. Viel Spaß! |
||
Blog. |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tjoa irgendwie will wohl keiner ![]() Ein Array mit 26 Plätzen für jeden Buchstaben, da zwischen Klein- und Großschreibung nicht unterschieden werden sollte, reicht. Dann braucht man einen Stream zum lesen aus der Textdatei und einen Zwischenspeicher für jede Zeile die ich lese. Dann hangele ich jeden Buchstaben der ausgelesenen Zeile ab und prüfe welchen Buchstaben ich da gerade habe. Damit ich nicht 26 Mal If benutzen muss, benutze ich Mod zum angeben des richtigen Platzes im Array. Das wird getan bis die letzte Zeile gelesen ist und dann wird ausgegeben, wie oft welcher Buchstabe vorkommt. Finde die ganze Sache übrigens sehr nett, Lob an euch ![]() BlitzMax: [AUSKLAPPEN] SuperStrict |
||
Blessed is the mind too small for doubt |
![]() |
markus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meinen Code habe ich so schreiben wollen, dass die Ausgabe ähnlich aussieht wie in der Aufgabenstellung gezeigt.
Also einfach per Schleife die Buchstaben A bis Z aufgelistet mit der Anzahl der im Text enthaltenen Buchstaben. A: X B: X ... Die Textdatei habe ich als "test01.txt" gespeichert und im selben Ordner abgelegt wie die bmx-Datei mit meiner BPS-Lösung. Als Text habe ich den Beispieltext aus der Aufgabenstellung genommen. Hier mein grobes Vorgehen: 1) Jede Zeile des Textes wird gelesen, wobei ich - sieht man ja in meinem Code - von maximal 1001 (For i=0 To 1000) Zeilen ausgehe. 2) Von jeder Zeile wird mit Len(Zeile) die Zeichenlänge der jeweiligen Zeile erfasst und aufgrund dessen... 3) jedes einzelne Zeichen der aktuellen Zeile (For j=0 To Len(Zeile)) mit Mid$() durchgegangen. 4) Jedes Zeichen, das aktuell im der Variable B3$ erfasst ist wird jetzt geprüft. Dabei werden Groß- und Kleinbuchstaben berücksichtigt. Der Abstand bei Ascii zwischen den Klein- und Großbuchstaben beträgt immer 32 Zeichen, deswegen habe ich die Prüfung so formuliert: Wenn aktuelles Zeichen den Ascii-Code von 65(Großes A) oder 65+32(kleines a) aufweist, dann wird der Wert im Array B(65) um 1 erhöht. Wenn Zeichen-Ascii-Code 66(Großes B) oder 66+32(kleines b), dann B(66):+1, ... Hoffe, dass es verständlich und richtig ist ^^" Code: [AUSKLAPPEN] Strict
AppTitle="Buchstaben zaehlen" Graphics 640,800 Global B[123],i,j,k start() Repeat Cls For i = 65 To 90 DrawText Chr$(i)+": "+B[i],5,(i-65)*15 Next Flip Until KeyHit(Key_Escape) Or AppTerminate() Function start() Local Datei:TStream Datei = ReadFile("test01.txt") Local B2$,B3$ For i=0 To 1000 B2$ = ReadLine(Datei) For j=0 To Len(B2) B3$ = Mid$(B2,j,1) For k = 65 To 90 If Asc(B3$) = k Then B[k]:+1 ElseIf Asc(B3$) = (k+32) Then B[k]:+1 EndIf Next Next Next End Function Edit: Jetzt habe ich bei anderen etwas gutes gesehen. Der unten stehende Code unterscheidet sich nur insofern, dass anstatt stur 1.000 Zeilen durchzugehen funktioniert er jetzt mit Return ... Until EoF(Datei) ![]() BlitzMax: [AUSKLAPPEN]
|
||
- Zuletzt bearbeitet von markus am Mi, Jan 05, 2011 17:07, insgesamt 2-mal bearbeitet
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dank der Erwähnung von Slices habe ich auf jedenfall wieder was neues gelernt und bin somit um große if-Abfragen drum herum gekommen.
Es werden beim zählen der Zeichen alle Ascii-Codes(0-255) berücksichtigt, wodurch auch Steuer und Satzzeichen ganz einfach ausgelesen werden können, ohne den Code groß umbauen zu müssen. Zum testen habe ich lediglich den Beispieltext aus dem Aufgabenthread herangezogen und mal ein paar andere Zeichen mit eingabaut um auf Fehler zu testen. Kommentare stehen direkt im Code, so wie es gefordert war. BlitzMax: [AUSKLAPPEN]
|
||
![]() |
Biesi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wollte den Programm-Code so einfach wie möglich (mit möglichst nur BASIC-Teile, die ein Anfänger kennen könnte) und von der Struktur her gleich mit 'SuperStrict' erstellen.
Der Teil mit den Dateioperationen war für mich ganz neu (Anfänger ![]() ![]() Die Aufgabe setzte nur das Auswerten der (Groß)Buchstaben und die Ausgabe in einer Bildschirmliste voraus. Code-Beschreibung (Übersicht): - Definition aller im Programm vorkommenden Variablen - Generierung eines zweidimensionalen Feldes mit 2 Spalten a 26 Zeilen Aufgabenlösung wird über ein vordefiniertes Feld gehandhabt mit einer Spalte für alle 26 Großbuchstaben und einer Spalte zum Zählen - Datei öffnen und in einer While-Wend Schleife Zeilenweise auslesen 'ReadLine' alle Buchstaben in Großbuchstaben wandeln 'Upper' Zeilenlänge ermittlen 'Len' Mit 2 verschachtelten For-Schleifen jeden Buchstaben mit allen 26 möglichen ASCII-Codes vergleichen 'If' und 'a$[i]' und wenn eine Übereinstimmung gefunden wurde, dann das Zählfeld für den gefundenen ASCII-Code um 1 erhöhen Die While-Schleife läuft bis zum Ende der Datei - Hier die 3te Zeile Datei schließen - Array-Werte auf den Bildschirm ausgeben Mit einer For-Schleife alle 26 Zeilen des Arrays auslesen, ASCII-Code wieder in Buchstaben wandeln 'Chr' und den Wert des Zählfeldes anhängen BlitzMax: [AUSKLAPPEN] ' BPS #1: Buchstaben zählen |
||
Macintosh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So... Hier Mein Code
:) Es werden alle Zeichen gezählt, aber nur buchstaben aA-zZ ausgegeben. 1. Datei Öffnen 2. Datei bis zum Ende auslesen und jeden Character im array +1 3. Alle Character von aA-zZ ausgeben und ein "Balkendiagram" ausgeben. - Die zahlen werden Rechtbündig dargestellt, dies wird durch die Funktion "FormatedNumber( string, n )" ermöglicht. BlitzMax: [AUSKLAPPEN] ' Und die Ausgabe des Textes "Hello World!" (mit "Diagramm" :D ) Code: [AUSKLAPPEN] ---------
A: 0 | B: 0 | C: 0 | D: 1 |- E: 1 |- F: 0 | G: 0 | H: 1 |- I: 0 | J: 0 | K: 0 | L: 3 |--- M: 0 | N: 0 | O: 2 |-- P: 0 | Q: 0 | R: 1 |- S: 0 | T: 0 | U: 0 | V: 0 | W: 1 |- X: 0 | Y: 0 | Z: 0 | --------- |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich bewerbe mich hiermit für den Sonderpreis des längsten Codes! ![]() BlitzMax: [AUSKLAPPEN] SuperStrict Hier ist außerdem der Kandidat für den kleinsten und unübersichtlichsten Code, welcher genau das gleiche macht: BlitzMax: [AUSKLAPPEN] t$=Lower(LoadText(RequestFile(""))) Hier wurde einfach ein bisschen mit der Ersetzfunktion herumgetrickst. Zu Empfehlen ist dieser Code aber aus mehreren Gründen, darunter auch die Notwendigkeit eines guten Programmierstiles, nicht. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group