Sortierung einer .txt-Datei < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 14:08 Do 23.05.2013 | Autor: | Nicky92 |
Aufgabe | Für diese Aufgabe wird die folgende Datei benötigt: „Names.txt“. Diese Textdatei enthält über 5000
Vornamen. Beginnen Sie damit, die Namen alphabetisch zu sortieren. Anschließend ermitteln Sie den
alphabetischen Wert jedes Namens und multiplizieren diesen mit der Position in der Liste, um die Punktzahl
des Namens zu finden.
Beispiel:
Wenn die Liste alphabetisch sortiert ist, ist COLIN der 938ste Name. Der Wert des Namens ist
3+15+12+9+14=53
Die Punktzahl ist also
938∗53=49714
a) Wie groß ist die Summe aller Punktzahlen in der Datei? |
Hallo,
ich verzweifele gerade an der Aufgabe :-(
Hier mein Ansatz:
___________________________________________
tic %beginn der Zeitmessung
textscan('Names.txt', '%s');
Names = sort(Names);
n = length(Names);
res = 0;
for i = 1:n
c = char(Names(i));
d = double(c)-ones(1, length(double(c)))*64;
res = res+sum(d)*i;
end
res
toc %ende der Zeitmessung
end
__________________________________________
>>>Matlab spuckt mit immer diesen Fehler aus:
??? Undefined function or variable "Names".
Error in ==> Summe at 8
Names = sort(Names);
Ich hab schon fast alles Ausprobiert, den Befehl "sort" so anzuwenden, dass ich die Text-Datei sortieren kann :-(
Bin allerdings auch kein Programmier-Genie.
Kann mir jemand sagen, wo mein Fehler liegt?
Dateianhänge: Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 16:02 Do 23.05.2013 | Autor: | QCO |
Diese Aufgabe ist die deutsche Übersetzung von aufgabe 22 des Euler-Projekts (http://projecteuler.net/problem=22). Du willst hier doch nicht etwa schummeln? :-/
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 18:49 Do 23.05.2013 | Autor: | Nicky92 |
Ums schummeln geht es mir nicht,
aber man sollte im Rahmen seiner Informatikveranstaltung, die Übungsufgaben bearbeiten, die einem gestellt werden um den Anschluss nicht zu verlieren :-P
Ist aber mal Interessant zu sehen, wo die Hochschule ihre Aufgaben
her nimmt...vlt sehe ich da noch mehr parallelen...
Habe, deinen Tip angewendet und musste leider feststellen, dass es
einen weiteren Fehler gibt:
?? Error using ==> sort
Input argument must be a cell array of strings.
Error in ==> Summe at 8
Names = sort(Names);
_____________________________________________
Kann es sein, dass der Befehl "sort" in der Matlab-Version 7.12 andere Syntax hat?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:47 Do 23.05.2013 | Autor: | QCO |
Hallo, wenn du weitere Nachfragen hast, wäre es gut diese auch in dem System hier als Frage zu stellen und nicht als Mitteilung. Denn nur dann werden die Leute auch reinschauen.
Zum Problem mit sort:
wenn es noch um den obigen Code geht, dann hast du noch ein Problem, bevor es überhaupt ans sortieren geht.
Lass dir mal anzeigen, was
Names = textscan('Names.txt', '%s');
überhaupt produziert. Ich habe dich bisher nur auf einen Teil des Problems hingewiesen; die Zeile macht noch nicht das, was du willst.
Tipp: Wenn man eine Befehlszeile mit Matlab nicht mit einem Semikolon abschließt, wird die Rückgabe des Befehls angezeigt.
Also führ mal
Names = textscan('Names.txt', '%s')
aus und schau dir im Workspace an, was da eigentlich in Names gespeichert wird...
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 13:51 Fr 24.05.2013 | Autor: | Nicky92 |
In Names speichert er mit dem Befehl "textread" gar nichts,
habe aber auf anraten eines Bekannten den Befehl "textread" mal ausprobiert und schwupps,es Funktioniert
Jetzt speichert er in Names alle Namen aus der .txt.-Datei und sortiert sie
anschließend alpabetisch an.
War es das, worauf du hinaus wolltest?
__________________________________________
Names = textread('Names.txt', '%s') %Liest die Namen ein
Names =sort(Names) %Sortiert die Namen alphbetisch
fid = [mm] fopen('Names_5.txt','w'); [/mm] %Öffnet eine neue Text-Datei
fwrite(fid,Names); %Schreibt in die neue Datei
fclose(fid); %Schließt die neue Datei
end
__________________________________________
Als nächstes möchte ich alle Namen in eine neue txt.-Datei speichern.
Ich bekomme die geordneten Namen nicht in die neue Datei geschrieben, geordnet bekomme ich sie aber...
Es stockt bei dem fwrite(fid,Names)
Habe nach mühseliger recherche den Fehler endeckt
Names = textread('Names.txt', '%s');
s = sort(Names);
fid = [mm] fopen('Names_5.txt','wt'); [/mm]
[mm] fprintf(fid,'%s\n' [/mm] ,s{:});
fclose(fid);
Jetzt beleibt nur noch herrauszufinden, wie ich die die Namen eingrenzen kann, sodass ich nur die Namen mit 4 Buchstaben in der Datei ausgebe
|
|
|
|
|
Guten Abend Nicky,
Ich glaube der richtige Code sieht folgendermaßen aus:
clear
Names = textread('Names.txt', '%s');
s = sort(Names);
fid = fopen('Names _ 5.txt','wt');
fprintf(fid,'%s\ n' ,s{:});
fclose(fid);
end
Jetzt fehlt nur noch eine "Fallunterscheidung" also ist der String größer oder kleiner als 5 Zeichen, um ihn dann entsprechend der Aufgabenstellung der Textdatei zu zuordnen.
Vermutlich musst du den String jetzt erstmal mit dem Befehl int5 auf 5 Bit reduzieren und anschließend den Befehl fscanf benutzen der folgendermaßen definiert ist: fscanf(fid,format,(,Zahl))
Mit freundlichen Grüßen
J.DEan
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:07 Do 23.05.2013 | Autor: | QCO |
Problem ist folgende Zeile:
textscan('Names.txt', '%s');
Wie die Code-Beispiele unter http://www.mathworks.de/de/help/matlab/ref/textscan.html
auch zeigen, musst du die Rückgabe von textscan erstmal irgendwie in eine Variable speichern, also
Names = textscan('Names.txt', '%s');
dann kannst du auch sort darauf anwenden.
|
|
|
|
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 15:27 Sa 25.05.2013 | Autor: | Nicky92 |
Hallo Leute,
erstmal danke für eure Tips und Anregungen!
Und entschuldigt das durcheinander...
Ich bräuchte nochmal ein wenig Unterstützung
bei der Fallunterscheidung für folgendes Programm.
Ich möchte die Namen aus einer Textdatei, die
aus 4 Buchstaben bestehen, in eine neue Textdatei speichern.
Alle anderen Namen sollen entfallen.
Ich hab leider gar kein Ansatz für die Fallunterscheidung :-(
|
|
|
|