www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Englisch
  Status Grammatik
  Status Lektüre
  Status Korrekturlesen
  Status Übersetzung
  Status Sonstiges (Englisch)

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 "Uni-Numerik" - fortran 95 programmieren
fortran 95 programmieren < Numerik < Hochschule < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

fortran 95 programmieren: Frage
Status: (Frage) beantwortet Status 
Datum: 13:02 Mo 14.03.2005
Autor: blops

hi,
ich hoffe ihr koennt mir helfen. ich arbeite nun schon seit laengerem an einem programm, das dateien vergleichen soll.
nun habe ich folgendes problem.
ich will herausbekommen, welche datensaetze in einer der beiden dateien fehlen.
also, ich dachte dabei an folgendes:
do a=1,b
  do i=1,l
         if(obj1(a).eq.obj2(i))then...
  enddo
enddo

so, wenn diese bedingungen fuer ein objekt nicht ein einziges mal erfuellt wird, dann soll er mir sagen, fuer welches objekt dies der fall ist. nur weiss ich nicht genau wie man das programmiert.
mit .ne. funktioniert das gar nicht, weil ja die meiste zeit die objekte ungleich sind, sind in beiden dateien so an die 800 datensaetze.

bitte bitte helft mir, ich bin schon am verzweifeln.


        
Bezug
fortran 95 programmieren: Idee
Status: (Antwort) fertig Status 
Datum: 12:59 Di 15.03.2005
Autor: highass

Hi,

also wenn ich mir das so anschaue...würd ich dir Hashes empfehlen...
ohne verkettung also jedes wird echt abgebildet...Hab unter fortran noch nix gemacht aber hashes gibts da bestimmt ;):

myHash(obj1.key)=obj;

nicht mit arrays wie in dem ersten ansatz...
damit hast du O(1) zugriff...nun zu deinem Problem:

Iteration über den ersten Hash myHashA:

if (!myHashB(myHashA(key).key))
     "myHash(key) nicht in myHashB enthalten"...

Entsprechend nochmal durch myHasB durchlaufen mit selbiger idee...


das sollte dein problem lösen in vernünftiger laufzeit...

du kannst das auch mit zwei verschateleten schleifen machen...
brauchst noch cotroll boolean der is halt immer true wenns verschieden sind u sobald zwei gleich sind false...ginge auch wär wahrscheins einfacher zu deinem bestehenden prog...

naja...





Bezug
                
Bezug
fortran 95 programmieren: Rückfrage
Status: (Frage) beantwortet Status 
Datum: 13:50 Di 15.03.2005
Autor: blops

hi,
erstmal vielen dank fuer deine antwort. das mit den hashes geht in fortran leider nicht.
das mit der zusaetzlichen logischen variable hab ich schon versucht, das dumme ist halt, dass ich anfaenger bin und ziemlich wenig ahnung von dem zeug habe.
ich weiss nicht genau wie man die logischen variablen da so einbaut. was ich jetzt getan habe ist:
flag=0
do o=1,p
   do a=1,b
     if (obj1(o).eq.obj2(a))then
       flag=flag+1
     endif
   enddo
enddo
jetzt habe ich ausserhalb der do loop folgendes versucht.
if(flag.eq.p)then
  print*,'alles ok'
elseif(flag.ne.p)then
  print*,'fehlt was'
endif

das funktioniert schon, das problem ist nur, dass er mir so nicht sagt, welches objekt fehlt, falls eins fehlt. und das ist ja letztendlich das, was ich wissen moechte.



Bezug
                        
Bezug
fortran 95 programmieren: Antwort + Idee
Status: (Antwort) fertig Status 
Datum: 15:45 Di 15.03.2005
Autor: heinz


> hi,
>  erstmal vielen dank fuer deine antwort. das mit den hashes
> geht in fortran leider nicht.

Das geht auch in fortran ganz ganz sicher :)

>  das mit der zusaetzlichen logischen variable hab ich schon
> versucht, das dumme ist halt, dass ich anfaenger bin und
> ziemlich wenig ahnung von dem zeug habe.
>  ich weiss nicht genau wie man die logischen variablen da
> so einbaut.

Ok, ich werde dir jetzt mal eine Loesung fuer deinen Ansatz geben, wobei auch ich kein Fortran kann. Deshalb geb auch ich nur pseudocode an, in richtiges Fortran musst du es selbst umschreiben.

> was ich jetzt getan habe ist:
>  flag=0
> do o=1,p
>     do a=1,b
>       if (obj1(o).eq.obj2(a))then
>         flag=1
>       endif
>     enddo

      if (flag.eq.0) then print* 'objekt o fehlt'
      flag = 0

>  enddo

Es wird somit fuer jedes Objekt o die innere Schleife durchlaufen. Ist das Objekt o gleich dem Objekt a, wird dies in flag gespeichert. Dann wird geschaut, ob flag == 0 ist. Wenn es 0 ist, heisst dies ja, dass Objekt o nicht in in der 2. Objektliste vorhanden ist und somit fehlt.
Das gleiche musst du jetzt auch noch umgekehrt machen, d.h. fuer jedes Objekt a schaun ob es in der Objektliste o ist und entsprechend fehlende Objekte wieder ausgeben.

Wenn ich mich jetzt nicht vertan hab, sollte das (bis auf syntax so funktionieren) wobei ich als Informatiker anmerken muss, dass dies eine sehr unsaubere Loesung ist, da du fuer jedes Objekt o jeweils alle Objekte a absuchen musst, also ein Aufwand von ungefaehr [mm] n^2 [/mm] (n ist die Anzahl der Objekte in der Liste). Dies ist schlecht.
Daher ein einfacher Verbesserungsvorschlag:
Du sotierst die Beiden Dateien/Listen zuerst. Dass dauert bei Quicksort oder Mergesort O(n*logn). Danach brauchst du nur noch eine Schleife durchlaufen und ueberpruefst welche Objekte nur in einer Liste vorhanden sind.

Die beste Loesung ist aber die von highass, da du da insgesamt nur einen Aufwand von O(n) hast ;)

Hoffe ich konnte dir damit helfen, viel Spass beim programmieren und ueberleg dir, es doch mit Hashes zu machen, die es auch in Fortran zu 100% gibt bzw implementierbar sind.

Nochmal zur Verdeutlichung: Wenn du in den beiden Listen/Dateien je 1000 Objekte hast, brauchst du mit deiner Methode 1000000 Schritte zur Berechnung, wenn du es mit Sortierung machst nur noch ca 3000, bei Hashes nur noch ca 1000. Also bei grossen Dateien merkt man schnell einen Unterschied ob man 2 Wochen oder 2 Stunden auf sein Ergebnis wartet ;)

MfG heinz

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Uni-Numerik"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.englischraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]