www.vorkurse.de
Ein Projekt von vorhilfe.de
Die Online-Kurse der Vorhilfe

E-Learning leicht gemacht.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Teams · Forum · Wissen · Kurse · Impressum
Forenbaum
^ Forenbaum
Status Mathe-Vorkurse
  Status Organisatorisches
  Status Schule
    Status Wiederholung Algebra
    Status Einführung Analysis
    Status Einführung Analytisc
    Status VK 21: Mathematik 6.
    Status VK 37: Kurvendiskussionen
    Status VK Abivorbereitungen
  Status Universität
    Status Lerngruppe LinAlg
    Status VK 13 Analysis I FH
    Status Algebra 2006
    Status VK 22: Algebra 2007
    Status GruMiHH 06
    Status VK 58: Algebra 1
    Status VK 59: Lineare Algebra
    Status VK 60: Analysis
    Status Wahrscheinlichkeitst

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Maple" - Sortier-Programm
Sortier-Programm < Maple < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Maple"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Sortier-Programm: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:44 Mi 21.11.2007
Autor: tundrablume03

Aufgabe
Der Lokalsender off air möchte ein Sortier-Programm für seinen Veranstaltungskalender. Da die Veranstaltungen weder nach Terminen noch alphabetisch sortiert beim Sender eingehen, sollen sie eine kleine Funktion mysort schreiben. Diese Funktion soll die Daten, die in einer Datei abgelegt sind, einlesen, alphabetisch sortieren und in einer zweiten Datei ablegen und ferner eine chronologische Sortierung der Daten in einer dritten Datei speichern. Daher sollte der Aufruf in der Form mysort('Datei1','Datei2','Datei3') erfolgen.
Eine beispieldatei für die Veranstaltungshinweise ist die Datei Veranstaltung.txt.

Beispiel eines Veranstaltungshinweis:

Dietrich Sauwetter: Samstag, 17.12.2134 "Geschichte der Frankfurter Mathematik"
Harald Riesenhagel: Freitag, 24.1.2135 "Wo war Frankfurt"
Ferdinand Niederschlag: Donnerstag, 18.12.2134 "Vorsemesterkurse in Matlab"
Richard-Ludwig Dauerregen: Montag, 2.1.2135 "Programmieren mit Matlab"


Ich weiß nur, dass mit
t=[text,'...']
n=double(t(1:6))
gearbeitet werden muss, aber ich weiß nicht genau wie ich anfangen soll. Der erste Schritt fehlt mir einfach.
Um Hilfe bin ich mega dankbar.

Liebe Grüße
Anna






Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
Sortier-Programm: Antwort
Status: (Antwort) fertig Status 
Datum: 23:02 Mi 21.11.2007
Autor: Martin243

Hallo,

ich wette, du bist versehentlich im Maple-Forum gelandet und willst eigentlich mit Matlab arbeiten...

Wie schon in diesem Thread solltest du deine Datei zeilenweise einlesen und die Zeilen jeweils mit Regular Expressions zerlegen.
Eine Struktur wäre auch nicht angebracht, z.B. mit den Feldern:
event.person
event.date
event.title
Das Thema kennst du ja schon.

Die Darstellung des Datums musst du in Zahlen umrechnen. ich empfehle da datenum.

Nun musst du zweimal sortieren. Falls du das eingebaute sort benutzen darfst, dann bist du aus dem Schneider. Sonst musst du noch einen kleinen Sortieralgorithmus implementieren. Such dir einfach einen aus.

Du sortierst einmal die Daten und einmal die Titel und merkst dir jeweils den Indexvektor (s. Hilfe zu sort).

Beim Speichern der Dateien gehst du dabei jeweils in der Reihenfolge der Indexvektoren vor.

Versuch es erstmal und schreib, welche Probleme aufgetreten sind.


Gruß
Martin

Bezug
        
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:45 Fr 23.11.2007
Autor: tundrablume03

Hi Martin,
danke für die Hilfe, aber irgendwie komm ich nicht weiter.
Bereits am Anfang hab ich Probleme, d.h. die Datei einzulesen. Ich hab es mit

fid = fopen(Veranstaltungen.txt,’r’)

versucht, aber das Einlesen funktioniert nicht.  

Bezug
                
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 12:49 Fr 23.11.2007
Autor: Martin243

Hallo,

> Bereits am Anfang hab ich Probleme, d.h. die Datei einzulesen. Ich hab es mit

>

> fid = fopen(Veranstaltungen.txt,’r’)

Das sollte ja auch
fid = fopen('Veranstaltungen.txt',’r’)
heißen. Schau dir doch immer die Fehlermeldungen an. Die helfen manchmal weiter.


Gruß
Martin


Bezug
                        
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:34 Di 27.11.2007
Autor: tundrablume03

Die Hilfen von MAtlab schau ich mir an, aber problem ist halt, dass ich nicht alles genau verstehe, weil es auf englisch ist.
Ich hab das alphabetische Sortieren folgender versucht:
fid = fopen('Veranstaltungen.txt','r') ;
text = fscanf(fid,'%c')
fclose(fid);

s = struct('name','Dieter Sauwetter','Datum','Samstag,17.12.2134','Thema','Geschichte der Frankfurter Mathematik')
    struct('name','Alfred Müller','Datum','Samstag,17.12.2134','Thema','Geschichte der Frankfurter Mathematik')

[snew,perm] = orderfields(s,{name})

Wo liegt, denn der Fehler, dass ich die Namen nicht alphabetisch ordnen kann?

Gruß
Anna

Bezug
                                
Bezug
Sortier-Programm: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:37 Di 27.11.2007
Autor: tundrablume03

Das Sortieren hab ich einiger Maßen hinbekommen:
fid = fopen('Veranstaltungen.txt','r') ;
text = fscanf(fid,'%c')
fclose(fid);

c(1,:) = [{'Dieter'} {'Sauwetter'} {'Samstag'} {datenum(2134, 12, 17)} {'Geschichte der Frankfurter Mathematik'}];
c(2,:) = [{'Alfred'} {'Müller'} {'Samstag'} {datenum(2134, 11, 20)} {'Geschichte der Frankfurter Mathematik'}];
c(3,:) = [{'Bauer'} {'Sauwetter'} {'Samstag'} {datenum(2134, 10, 17)} {'Geschichte der Frankfurter Mathematik'}];
[cneu,ind]=sort(c(:,1));
SortName=c(ind,:)

[cneu,ind]=sort(c(:,3));
SortDate=c(ind,:)


Aber:
1. Kann man die Sortierung dierekt von der eingelesenen Datei machen, oder muss man dafür die Daten einzeln eingeben?
2. Ich hab versucht die chronologische Sortierung analog durchzuführen, ist das falsch? Weil ich das Datum irgendwie nicht soriteren kann.

Liebe Grüße
Anna


Bezug
                                        
Bezug
Sortier-Programm: Antwort
Status: (Antwort) fertig Status 
Datum: 00:37 Mi 28.11.2007
Autor: Martin243

Hallo,

> 2. Ich hab versucht die chronologische Sortierung analog durchzuführen, ist das falsch? Weil ich das Datum irgendwie nicht soriteren kann.

Versuch es mal hiermit:
sort(cell2mat(c(:,4)))


> 1. Kann man die Sortierung dierekt von der eingelesenen Datei machen, oder muss man dafür die Daten einzeln eingeben?

Hatten wir das nicht schon einmal?
Lies die Daten zeilenweise per fgetl ein und verarbeite sie dann am besten mit regexp.


Gruß
Martin

Bezug
                                                
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 16:21 Mi 28.11.2007
Autor: tundrablume03

Ich versteh nicht ganz was du damit meinst, dass die Zeilen einzeln eingelesen werden sollen. Meinst du die Informationen von der Datei Veranstaltungen.txt? Aber dann würde ich ja nicht direkt mit der eingelesenen Datei weiter arbeiten.

Was ich bisher hab ist:
fid = fopen('Veranstaltungen.txt','r') ;
text = fscanf(fid,'%c')
fclose(fid);

c(1,:) = [{'Dieter'} {'Sauwetter'} {'Samstag'} {datenum(2134, 12, 17)} {'Geschichte der Frankfurter MAthematik'}];
c(2,:) = [{'Harald'} {'Riesenhagel'} {'Freitag'} {datenum(2135, 1, 24)} {'Wo war Frankfurt'}];
c(3,:) = [{'Ferdinand'} {'Niederschlag'} {'Donnerstag'} {datenum(2134, 12, 18)} {'Vorsemesterkurse in Matlab'}];
c(4,:) = [{'Richard-Ludwig'} {'Dauerregen'} {'Montag'} {datenum(2135, 1, 2)} {'Programmieren mit Matlab'}];
[cneu,ind]=sort(c(:,1));
SortName=c(ind,:)

[cneu,ind]=sort(cell2mat(c(:,4)))
SortDate=c(ind,:)


Ich hab die Datei eingelesen und die dann sortiert, aber die Daten halt einzeln eingegeben. Muss aber die eingelesene Datei direkt sortieren

Liebe Grüße
Anna

Ps.: Ich glaube du verwechselst mich mit dem Benutzer tundrablume :)

Bezug
                                                        
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:34 Mi 28.11.2007
Autor: Martin243

Hallo,

> Ps.: Ich glaube du verwechselst mich mit dem Benutzer tundrablume :)

Oh, sorry. Wen wundert's? Der Name, die Aufgabenstellung...

> Ich versteh nicht ganz was du damit meinst, dass die Zeilen einzeln eingelesen werden sollen. Meinst du die Informationen von der Datei Veranstaltungen.txt? Aber dann würde ich ja nicht direkt mit der eingelesenen Datei weiter arbeiten.

Das kann auch keiner verlangen. Man kann nur Daten sortieren, nicht die Datei.


> Ich hab die Datei eingelesen und die dann sortiert, aber die Daten halt einzeln eingegeben. Muss aber die eingelesene Datei direkt sortieren

Wenn du mir sagst, wie das gemeint ist, sage ich dir auch, wie das geht. Ansonsten gilt: Um etwas bewegen zu können, muss man es schon anfassen. Also: zuerst Daten aus der Datei herausholen, dann sortieren und schließlich zurückschreiben.
Es steht ja auch in der Aufgabenstellung, dass du zwei neue Dateien erzeugen sollst. Also nix mit Datei sortieren.


Gruß
Martin

Bezug
                                                                
Bezug
Sortier-Programm: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 08:19 Do 29.11.2007
Autor: tundrablume03

Laut Aufgabenstellung  braucht man einen Quellcode, der die beiden Ausgabe-Dateien erzeugt. Die Ausgabe-Dateien sind ja die sortierten eingehenden Daten. Aber wie sieht denn so ein Code aus? Ich weiß nicht wie ich den hinbekomme.

Bezug
                                                                        
Bezug
Sortier-Programm: Antwort
Status: (Antwort) fertig Status 
Datum: 10:41 Do 29.11.2007
Autor: Martin243

Hallo,

> Laut Aufgabenstellung  braucht man einen Quellcode, der die beiden Ausgabe-Dateien erzeugt. Die Ausgabe-Dateien sind ja die sortierten eingehenden Daten. Aber wie sieht denn so ein Code aus? Ich weiß nicht wie ich den hinbekomme.

Erlaube mir zuerst die Frage: Du weißt schon, dass der Code in eine Datei mit der Endung .m hineingehört, oder? Nur dann ist es tatsächlich eine Funktion (es gibt zwar noch eine andere Möglichkeit, aber...)

Du hast ja nun angefangen, also bastle ich mal die Grundstruktur dieser Datei und dann kannst du konkrete Fragen stellen.

function mysort(infile, namesortfile, datesortfile)
fid = fopen(infile,'r') ; 
eventIndex = 0; 
while ~feof(fid),
   textline = fgetl(fid);
   eventIndex = eventIndex + 1;
  <Hier zerlegst du die eingelesene Textzeile per regexp>
  <Zuweisung der Bestandteile zu Bestandteilen der Struktur>
end;
fclose(fid);
<Sortieren nach Namen>
<Erzeugen einer neuen Datei namesortfile>
<Zeilenweises Schreiben der neuen Datei>
<Schließen der Datei>
<Sortieren nach Daten>
<Erzeugen einer neuen Datei datesortfile>
<Zeilenweises Schreiben der neuen Datei>
<Schließen der Datei>

Schreib doch mal, was dir die größten Probleme bereitet.


Gruß
Martin

Bezug
                                                                                
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:30 Do 29.11.2007
Autor: tundrablume03

Ich versteh leider schon den Anfang nicht. Das mit dem Zerlegen.
Meinst du es etwa so:
c1 = [{'Dieter'} {'Sauwetter'} {'Samstag'} {datenum(2134, 12, 17)} {'Geschichte der Frankfurter MAthematik'}];
c2 = [{'Harald'} {'Riesenhagel'} {'Freitag'} {datenum(2135, 1, 24)} {'Wo war Frankfurt'}];
regexp(c1,c2)

Mein größtes Problem liegt eigentlich darin, dass ich die Befehle nicht kenne, die man verwenden muss, um die Aufgabe zu lösen. Deine Hilfen versuch ich alle bei help zu verstehen und zu ergooglen, wie zum Beispiel regexp, aber daraus werd ich kaum schlauer, weil alles auf Englisch ist. Morgen muss ich schon die Aufgabe gelöst haben und bis dahin wäre ich niemals alleine auf deine Grundstruktur gekommen. Fraglich ob ich den Rest überhaupt schaffe :(

Liebe Grüße
Anna

Bezug
                                                                                        
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:07 Do 29.11.2007
Autor: Martin243


> Mein größtes Problem liegt eigentlich darin, dass ich Anfänger bin und die Befehle nicht kenne, die man verwenden muss. Wenn ich nicht weiß, dass der Befehl existiert, kann ich nicht damit arbeiten.

Natürlich, das verstehe ich, geht mir ja nicht anders. Vieles finde ich eher zufällig. Aber manchmal hilft es, wenn man nach Schlagwörtern sucht.

> Deine Hilfen versuch ich alle bei help zu verstehen, wie zum Beispiel regexp, aber daraus werd ich kaum schlauer, weil alles auf Englisch ist.

Hmmm, ohne englische Hilfe kommst du aber nicht weit. Man muss ja nicht immer alles verstehen. Vieles ergibt sich aus dem Zusammenhang.

> Auf diese Grundstruktur wäre ich niemals gekommen.

Die ist aber nicht wirklich Matlab-spezifisch.
Bevor du dich ans Programmieren setzt (in Matlab, C, Fortran oder sonstwas), musst du dir zuerst grob überlegen, was du in welcher Reihenfolge machst. Die Struktur, die ich angeschrieben habe, gilt für so ungefähr alle Programmiersprachen, die mir einfallen. Und als Mathe-Studentin solltest du dir Rechenvorschriften überlegen können.


> Meinst du es etwa so: ...

Nein. Du sollst ja nichts mehr von Hand eingeben.
Nach dem Öffnen der Datei liest du die Daten Zeile für Zeile ein, bis das Ende der Datei erreicht ist (dafür sorgt das while-Konstrukt).
Die erste Zeile, die du aus der einliest, hat die Form:
Dietrich Sauwetter: Samstag, 17.12.2134 "Geschichte der Frankfurter Mathematik"

Nun gilt es, die Datei in "Tokens" zu zerlegen, also einfach in die Bestandteile. Nun kann man einfach Leerzeichen als Trennzeichen nehmen, um die ersten Elemente zu erkennen.

Die Aufteilung nach Trennzeichen gelingt mit dem Befehl strtok.
Hierzu sei (wie in meiner Grundstruktur) die Textzeile in textline abgelegt. eventIndex sei der aktuelle Index (also die Nummer der Zeile, s. Grundstruktur). Dann können wir mit der Aufteilung beginnen:
[t,r] = strtok(textline, ' ');  %t enthät das erste Token, r den Rest
event(eventIndex).vorname = t;
[t,r] = strtok(r, ' ');  %wir wiederholen das Vorgehen mit dem Rest
event(eventIndex).nachname = t;
[t,r] = strtok(r, ' ');  %wir wiederholen das Vorgehen mit dem Rest
event(eventIndex).wochentag = t;  %hier hängt noch das Komma dran
[t,r] = strtok(r, ' ');  %wir wiederholen das Vorgehen mit dem Rest
event(eventIndex).datum = t;  %im dd.mm.yyyy-Format
event(eventIndex).titel = r;  %der Rest ergibt den Titel

Damit hätten wir eine Zeile zerlegt. Da in jeden Schleifendurchgang eine neue Textzeile eingelesen und eventIndex um 1 erhöht wird, haben wir am Ende eine entsprechende Darstellung der gesamten Daten aus der Datei.
Das mit regexp bietet sich an, wenn Besonderheiten berücksichtigt werden sollen wie mehrere Vornamen oder Adelsprädikate:
Wolfgang Karl Dietrich von Haltestelle kriegst du mit obigem Vorgehen nicht richtig zerlegt. Wenn du daran auch Interesse hast, dann schreib mal.

Nach der erfolgreichen Zerlegung kommt der Rest. Schau dir das erstmal in Ruhe an.


Gruß
Martin

Bezug
                                                                                                
Bezug
Sortier-Programm: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 00:25 Sa 01.12.2007
Autor: tundrablume03

Erst Mal ganz vielen Dank für deine Hilfe. Ich habe die Aufgabe jetzt noch mit Hilfe anderer Kommilitonen lösen können.

Liebe Grüße
Anna

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Maple"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorkurse.de
[ Startseite | Mitglieder | Teams | Forum | Wissen | Kurse | Impressum ]