Namensliste < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:40 Sa 25.05.2013 | Autor: | Isi1992 |
Aufgabe | Teil 1 der Aufgabe war es die Namen zu ordnen und den Wert jedes Namens [..] und am Ende die Punktzahl jedes Namens auszugeben. Die Aufgabe ist auch bekannt als Euler Problen 022.
Dieser Teil ist bereits erfolgreich abgeschlossen:
clear %entfernt alle Variablen aus dem aktuellen Arbeitsbereich
tic %beginn der Zeitmessung
Names = textread('Names.txt', '%s'); %die Namensliste wird eingelesen
Names=sort(Names); %sortiert die Namen alphabetisch
n = length(Names); %n ist die Länge der Zeichenkette
Ergebnis = 0; %dem Ergebnis wird der Wert Null zugewiesen
for i = 1:n %Zählschleife beginnt bei Eins
c = char(Names(i)); %Konvertiert den ASCII-Wert in ein Zeichen
d = double(c)-ones(1,length(double(c)))*64; %es muss jeweils 64
%abgezogen werden,
%damit das A den
%Wert 1 bekommt
Ergebnis = Ergebnis+sum(d)*i; %das Endergebnis ist die Summe aus
%der berechneten Zeichenkette und
%dem Wert der vorher dem Ergebnis zu-
%gewiesen wurde
end
Ergebnis
toc %ende der Zeitmessung
end |
Den Teil habe ich mit gepostet, weil er evtl relevanz hat für die nachfolgende Frage:
Aufgabe Teil 2
Speichern Sie alle Namen, die aus fünf Buchstaben bestehen, in einer neuen Datei namens
„Names _ 5.txt“.
Mein Lösungsansatz:
clear %entfernt alle Variablen aus dem aktuellen Arbeitsbereich
Names = textread('Names.txt', '%s'); %die Namensliste wird eingelesen
Names=sort(Names); %sortiert die Namen alphabetisch
fid = fopen('Names _ 5.txt','wt'); %öffnet eine neue Datei
fprintf(fid,'%s\ n' ,s{:}); %schreibt in die Datei Names _ 5.txt
fclose(fid); %schließt die Datei Names _ 5.txt
end
Meine Frage:
um die Namen gemäß der Aufgabenstellung zu ordnen wie gehe ich am besten vor?
Lösungsideen:
-die Namen mittels begrenzung also dem Befehl int5 begrenzen
-oder den Befehl fscanf anzuwenden anstatt fprintf
-oder mittels if schleife eine Fallunterscheidung machen
Könnte mir evtl jemand einen Tipp geben?
gruß Isi
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
[Hier gibst du bitte die direkten Links zu diesen Fragen an.]
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:26 So 26.05.2013 | Autor: | Isi1992 |
Guten Tag,
Gut möglich das sie auch auf der Hochschule ist und den selben Dozenten hat.
Zum zweiten Aufgabenteil hat er nämlich keinerlei Informationen gegeben, werden wahrscheinlich einige dieses Problem haben, die jetzt nicht unbedingt die besten sind im umgang mit matlab. Habe mich auf anraten eines Kommilitonen hier im Forum angemeldet.
Gruß Isi
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:44 So 26.05.2013 | Autor: | QCO |
> Lösungsideen:
>
> -die Namen mittels begrenzung also dem Befehl int5
> begrenzen
Hier weiß ich nicht, was du meinst. Int5 kennt mein Matlab nicht.
> -oder den Befehl fscanf anzuwenden anstatt fprintf
Verstehe ich leider auch nicht - fscanf ließt eine Datei ein, fprintf schreibt in eine Datei.
> -oder mittels if schleife eine Fallunterscheidung machen
Das geht in die richtige Richtung. Irgendwie musst du die Namen mit 5 Buchstaben von den anderen trennen, da ist eine Fallunterscheidung nicht schlecht.
Ein möglicher Ansatz:
a) du musst jeden Namen einzeln prüfen:
for i=1:length(Names)
b) jeden Namen checken, ob er 5 Zeichen lang ist
if length(Names{i})==5
%schreibe in Datei
end
Es gibt aber noch viele andere Wege zum gleichen Ergebnis.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:01 So 26.05.2013 | Autor: | Isi1992 |
Hey,
Ok ich werde deinen tipp gleich mal ausprobieren. Vielen dank schon einmal!
Gruß Isi
|
|
|
|