Avatar billede vunde Nybegynder
08. maj 2009 - 18:55 Der er 12 kommentarer og
1 løsning

Bubblesort med string

Hej Eksperter

Jeg sidder med en opgave i noget programmering og har meget brug for hjælp.
Jeg vil skrive et program der er opbygget på følgende måde.
Jeg vil oprette en fil hvori jeg vha. af en combobox og en read-only editbox skal kunne skrive hhv. genre og filmtitel. Dette skal skrives ind i en fil med det formål at lave en filmliste organiseret over i første omgang genre, og under genre skal det organiseres alfabetisk efter filmtitel.
Indtil videre har jeg skrevet kode til at oprette min fil, og har yderligere skrevet kode til at skrive til filen, dog uden nogen form for organisering.

Jeg sidder nu og kæmper frem og tilbage med at forstå hvordan jeg skal få, i første omgang læst min tekstfil over i et array. Hvordan jeg så skal få noget bubblesort kode til at organisere mit array, og hvordan jeg skal få den til at organisere det alfabetisk. Så må genre komme senere hvis jeg finder ud af det andet.

Jeg vil gerne skrive stykker af min kode som den er nu, men ser ingen point i det, da det hurtigt bliver uoverskueligt med en masse kode. Så derfor vil jeg gerne om i beder om stykker af kode, hvis det er til nogen hjælp.

Jeg synes selv dette er et svært problem, så sætter 200 point på det.

Mvh. Vunde
Avatar billede kroning Nybegynder
08. maj 2009 - 19:12 #1
Jeg ville bruge en TStringList til det, den har en Sort funktion der gør arbejdet for dig.
Avatar billede kroning Nybegynder
08. maj 2009 - 19:16 #2
og lidt kode måske:

var
  SL : TStringList;
begin
  //opret stringlist
  SL:=TStringList.Create;
// Indlæs dine linier her
.
.
// sorter linierne
  SL.Sort;
.
.
Avatar billede vunde Nybegynder
08. maj 2009 - 20:14 #3
Så jeg ville kunne skrive mine data ind i en memobox, og derefter gemme linierne i den stringlist. Så ville stringlist blive opdateret løbende.

SL:=stringList.Create;
memobox.Lines.Add(filmnavn + #9 + genre);
SL:=memobox.Text;
..
..
..
if buttonclose.execute then
  begin
    SL.Sort;
  end;

Noget i den retning..??
Avatar billede vunde Nybegynder
08. maj 2009 - 20:18 #4
eller formclose.... bare noget sådan den kun gør det til allersidst..
Avatar billede kroning Nybegynder
08. maj 2009 - 20:44 #5
Ja hvis du til sidst vil have alle linier fra en memo over i en TStringList og derefter sorteret kan du gører således:

SL.Text:=Memobox.Lines.Text;
SL.Sort;

Jeg lavede lige en test med TStringList sort på min ikke særlig hurtige bærbare, 100000 linier tog 1 sekund at sorterer.
Avatar billede vunde Nybegynder
08. maj 2009 - 21:27 #6
Nice.. :) Jeg har fået det til at virke. Jeg har dog lige et tillægsspørgsmål. Hvis jeg gerne vil have den til at organisere det efter genrer også, og under genrer skal den så sætte det i alfabetisk orden, er det så muligt med stringlist..?

Jeg har en opskrivnings'syntax' der er sådan her.

var
genre, filmnavn: string;

begin
  memobox.Lines.Add( Filmnavn + #9 + genre);
end;

og ligenu organiserer den det efter filmnavn udelukkende, fordi det er det første der står.

Er det muligt at få den til at lave noget custom sort, hvor den organiserer i en anden rækkefølge.
Avatar billede kroning Nybegynder
08. maj 2009 - 21:45 #7
StringList har en CustomSort funktion men så tror jeg det begynder at blive lidt bøvligt hvis du vil sortere efter ( Filmnavn + #9 + genre); Det kan gøres lettere på en anden måde, men nu kender jeg jo ikke noget til hvordan din fil er sat op.
Avatar billede vunde Nybegynder
09. maj 2009 - 18:10 #8
Det er bare en txt fil som jeg opretter med en savedialog, og lidt kode dertil..

begin
  form1.SaveDialog1.DefaultExt:='TXT';
  form1.SaveDialog1.FileName:='*.TXT';
    if SaveDialog1.Execute then
      assignfile(filnavn, savedialog1.FileName);
      .. // noget skrivning til filen med reset og writeln med
      writeln(filnavn, Filmnavn + #9 + genre);
end;

Idéen var oprindeligt at den skulle lave under inddelinger af de forskellige genrer, og derefter skulle alfabetisere indenfor genrerne. Men er det så ikke noget med at jeg evt. ku lave en "læse"-algoritme der læste hvilken genre der var indtastet og indlæste i et antal stringlists som var fastsat af antal genrer, hvorefter alle filmnavne indenfor eksempelvis genren Actionfilm, ville blive skrevet ind i én stringlist, der kunne sortes og den samme procedure for de andre genrer. Hvorefter den så til sidst kunne skrive de forskellige stringlist ind med en append..? om det er muligt..?
Avatar billede kroning Nybegynder
09. maj 2009 - 21:39 #9
Der er vel ikke grund til at have mere end en stringlist, når du vælger en genre så gennemgåes alle linier i filen og dem med den valgte genre plukkes ud og puttes ind i stringlisten og sorteres.
Avatar billede vunde Nybegynder
12. maj 2009 - 10:21 #10
Nej.. Det er selvfølgelig rigtigt.

Hvis jeg lige må komme med et tillægsspørgsmål. Hvis man har et datasæt opskrevet i variable strings, hvordan kan man så skrive dem ind i en tabel og sætte dem ind i en graf..?
Avatar billede kroning Nybegynder
12. maj 2009 - 10:37 #11
Det kan jeg ikke svare på, jeg har aldrig brugt grafer. Men delphi (Delphi 7) har noget der hedder TDBChart som sikkert kan bruges.
Avatar billede vunde Nybegynder
12. maj 2009 - 11:34 #12
Øv.. Men smid da lige et svar.. Det fortjener du helt sikkert.. :D Mange tak for hjælpen.. :)
Avatar billede kroning Nybegynder
12. maj 2009 - 12:06 #13
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester