Autor Beitrag
moondragon
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 28.05.07 13:08 
Hi,
ich will/ muss ein Medienverwaltungsprogramm schreiben,
gegeben ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 TMedium = record
            ID : Byte;
            Name : string[50];
            Typ : record
                    CD, DVD : boolean;
                  end;
            Kategorie : record
                          Film : TFilm;
                          Musik: TMusik;
                          Software: TSoftware;
                          Sonstiges: TSonstiges;
                        end;
           end;

Arraygröße : 20

Bedingungen: - Medien sollen einer ID zugeordnet werden (-> wie speichert man das??)
- Die medien( einer ID zugeordet) sollen in einem array gespeichtert werden und sollen dann nach
Name oder ID im Bubblesortverfahren sortiert werden.(-> HILFE!!!!! wie soll das gehen?!)
- der Eintrag soll seine possition im array verändern können (halt durch das sortieren)aber nicht seine ID
verändern.
(- die Ausgabe soll später über ein sringgrid erfolgen..)

Ich hoffe ihr könnt mir helfen
mfg moondragon

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 28.05.07 23:22 
Moin und :welcome: im Forum!

user profile iconmoondragon hat folgendes geschrieben:
Medien sollen einer ID zugeordnet werden (-> wie speichert man das??)

Damit ist gemeint, dass ein Medium durch eine Nummer von den anderen eindeutig unterscheidbar sein soll; das brauchst du nicht irgendwie extra zu speichern, dadurch wird das schon so gemacht. ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
TMedium = record
            ID : Byte;
            Name : string[50];
//...


user profile iconmoondragon hat folgendes geschrieben:
Die medien sollen in einem array gespeichtert werden

Da du die Array-Größe ja auch bereits angegeben hattest, dürfte das etwa so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type // Typ deklarieren
  TMedienArray = array[1..20] of TMedium;

var // Speicherplatz anfordern
  MedienArray: TMedienArray;


user profile iconmoondragon hat folgendes geschrieben:
sollen dann nach Name oder ID im Bubblesortverfahren sortiert werden.(-> HILFE!!!!! wie soll das gehen?!)

Schau mal hier, da habe ich schonmal was zu BubbleSort geschrieben. ;)

user profile iconmoondragon hat folgendes geschrieben:
der Eintrag soll seine possition im array verändern können (halt durch das sortieren)aber nicht seine ID verändern.

Damit ist gemeint, dass du beim Vertauschen der Array-Elemente vom Typ TMedium immer alle Verbundelemente (=record-Teile) mit tauschen sollst (ist doch auch eigentlich logisch - und deshalb wohl so schwer verständlich, diese "Bedingung"...) :?

user profile iconmoondragon hat folgendes geschrieben:
die Ausgabe soll später über ein sringgrid erfolgen.

Na, ein bischen was sollst du schließlich auch noch selbst erledigen; abgesehen davon gibt´s hier zum Thema StringGrid Threads genug, such halt mal ein bischen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
moondragon Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 30.05.07 18:14 
user profile iconNarses hat folgendes geschrieben:
Moin und :welcome: im Forum!

viele dank für die nette begrüßung und danke das sich jamend sich die mühe macht mir aus meiner verwirrung zu helfen..

ich habe inzwischen rausgefunden das meine ursprüngliche typdekleration falsch war korrekt lautet sie:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
const MaxSpeicher = 500;
type
{Typen allgemein}
  TID = 1..MaxSpeicher;
  TName = string[50];
  TTyp = 0..1;
  TKategorie = 0..3;

{Typen der Kategorie Film}
  TFilmFormat = string[50];
  TFilmLaenge = cardinal;
  TFilmKategorie = string[50];

{Typen der Kategorie Musik}
  TMusikFormat = string[50];
  TMusikKategorie = string[50];

{Typen der Kategorie Software}
  TSoftwareHersteller = string[50];
  TSoftwareSchluessel = string[50];

{Typen der Kategorie Sonstige Daten}
  TSonstigeZusatz = string[70];

{Struktur des Datensatzes}
  TMedium = record
              ID : TID;
              Name : TName;
              Typ : TTyp;
              case Kategorie : TKategorie of
              {Kategorie Film}
                0 : (FilmFormat : TFilmFormat; FilmLaenge : TFilmLaenge;
                       FilmKategorie : TFilmKategorie);
              {Kategorie Musik}
                1 : (Musikformat : TMusikFormat;
                       MusikKategorie : TMusikKategorie);
              {Kategorie Software}
                2 : (SoftwareHersteller : TSoftwareHersteller;
                       SoftwareSchluessel : TSoftwareSchluessel);
              {Kategorie Sonstige Daten}
                3 : (Zusatz : TSonstigeZusatz);
              end;
{Array für das Feld, in dem die Datensätze aus TMedium gespeichert werden}
  TFeld = Array[TID] of TMedium;


user profile iconmoondragon hat folgendes geschrieben:
Die medien sollen in einem array gespeichtert werden

Da du die Array-Größe ja auch bereits angegeben hattest, dürfte das etwa so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
type // Typ deklarieren
  TMedienArray = array[1..20] of TMedium;

var // Speicherplatz anfordern
  MedienArray: TMedienArray;
[/quote]

ganz dämlich gefragt wo muss ich denn den var teil reinschreiben im interfacepart in der unit der typdekleration oder in meinem Mainformular (im interfaceteil)?

user profile iconmoondragon hat folgendes geschrieben:
sollen dann nach Name oder ID im Bubblesortverfahren sortiert werden.(-> HILFE!!!!! wie soll das gehen?!)

Schau mal hier, da habe ich schonmal was zu BubbleSort geschrieben. ;)[/quote]

leider hilft mir das noch nicht so weiter, weil ich ja mit einem record und array arbeite in deinem einfachen beispiel arbeitest du ja mit integer werten....
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure MedienSortieren(index:TID);
var Datenfeld : TFeld;// enthält das array
    temp :TMedium;
    zaehler : integer;
 begin
  zaehler := MaxSpeicher-1;
   repeat
    index:= 1;
     repeat
      if (Datenfeld[index] > datenfeld[index]) then
         begin
           temp := datenfeld[index];
           datenfeld[index] := datenfeld[index+1];
           datenfeld[index+1] := temp;
         end;
      index:= index +1;
     until  (index > zaehler);
     zaehler := zaehler-1;
   until (zaehler <= 0);
 end;

>> aber hier bekomme ich die Fehlermeldung: UDaten.pas(74): Operator ist auf diesen Operandentyp nicht anwendbar

user profile iconmoondragon hat folgendes geschrieben:
die Ausgabe soll später über ein sringgrid erfolgen.
Na, ein bischen was sollst du schließlich auch noch selbst erledigen; abgesehen davon gibt´s hier zum Thema StringGrid Threads genug, such halt mal ein bischen. ;)


ich suche ja schon *gg*

ach ja und habt etwas nachsehen mit mir ich hab das mit dem zitieren in einem( diesem ) forum noch nicht raus...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 30.05.07 22:38 
Moin!

user profile iconmoondragon hat folgendes geschrieben:
ich hab das mit dem zitieren in einem( diesem ) forum noch nicht raus...

Kein Thema; Tipp: klicke den Cursor mit der Maus an die Stelle, wo du ein Zitat auftrennen willst und klick dann auf "Quote aufspalten" oben im Editor, dann fügt der dir die Tags gleich passend ein! :D

user profile iconmoondragon hat folgendes geschrieben:
ich habe inzwischen rausgefunden das meine ursprüngliche typdekleration falsch war

Sollte keine Geige spielen. ;)

user profile iconmoondragon hat folgendes geschrieben:
ganz dämlich gefragt wo muss ich denn den var teil reinschreiben im interfacepart in der unit der typdekleration oder in meinem Mainformular (im interfaceteil)?

Das kommt darauf an, was für einen Typ (= global, klassenglobal, lokal, etc.) von Variable du deklarieren willst. Ich würde es im public-Teil der Hauptformularklasse machen. :nixweiss:

user profile iconmoondragon hat folgendes geschrieben:
leider hilft mir das noch nicht so weiter, weil ich ja mit einem record und array arbeite in deinem einfachen beispiel arbeitest du ja mit integer werten....

Ob du nun Integers oder Elemente eines Verbundes sortierst, ist doch egal, oder? ;)

Deine Prozedur kann so nicht klappen, du darfst das Datenfeld doch nicht lokal in der Prozedur deklarieren, das muss für die Sortierprozedur global sein (oder als Referenzparameter übergeben werden). Weiterhin: als Parameter brauchst du doch eigentlich nur die Information, wonach du sortieren sollst, also Namen oder IDs: ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure MedienSortieren(const NachName: Boolean);
  var
    i,j: Integer;
begin
  for i := MaxSpeicher-2 downto 0 do
    for j := 0 to i do
      if (NachName) then begin
        if (Datenfeld[j].Name < Datenfeld[j+1].Name) then
          Tausche(j,j+1);
      end
      else begin
        if (Datenfeld[j].ID < Datenfeld[j+1].ID) then
          Tausche(j,j+1);
      end;
end;

Damit sollte sich die Sortierung machen lassen, du brauchst (=du musst sie noch selbst schreiben) allerdings noch die Prozedur Tausche(Index1,Index2: Integer), die den Eintrag Index1 mit Index2 im Array mit den Daten austauscht.

Viel Erfolg! :zustimm:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Mi 30.05.07 22:56, insgesamt 1-mal bearbeitet
moondragon Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 30.05.07 22:54 
Ok.
Danke den Rest werd ich hoffentlich alleine hinbekommen.