sinnaelgen Skrevet 2. august 2008 Del Skrevet 2. august 2008 (endret) Jeg har et matematisk problem i delphi som jeg søker en løsning på det er plasseringer av noen verdier etter noen bestemte regler hvordan får jeg det til rutenetter kan være fra 2 x2 til uendelig antall ruter , men det er samme antall i begge retninger. Det er ikke same antall ruter hele tiden , men varierer hver gang jeg har bruk for denne utregningen Eksempel : B : bredde = 5 h: høyde = 5 resultatet skal være som her : 0 0 0 0 17 0 0 0 17 1 0 0 17 1 1 0 17 1 1 1 17 1 1 1 1 feltene med verdien 0 trenger ikke å beregnes ut jeg har bare brukt to tellere for horisontal (t1) og vertikal retning (t2) problemet er å beregne rett posisjon( felt ) til hver av verdiene husk at antall "kolonner" og "linjer" variere for hver gang denne "tabellen " skal beregnes som dere ser så er det digonalen som skal ha verdien 17 og det til høyre og ned verdien 1 tilgjengelige variabler blir da : bredde , høyde og de to tellerne t1 (b) og t2 (h) Endret 10. august 2008 av elg-elg123 Lenke til kommentar
Format71 Skrevet 5. august 2008 Del Skrevet 5. august 2008 (endret) Nå er jeg neimen ikke sikker på at jeg forstår hva du egentlig forsøker å gjøre, men for meg ser det ut som det enkleste må være å lage en funksjon som returnerer verdien i en gitt celle: function ValueInCell(X, Y: integer): integer; begin if x = y then result := 17 else if x > y then result := 1 else result := 0; end; Når du har denne funksjonen kan du bruke denne til å fylle opp tabellen din, eller vurdere om du i det hele tatt trenger noen tabell.. -Vegar Endret 5. august 2008 av Format71 Lenke til kommentar
sinnaelgen Skrevet 6. august 2008 Forfatter Del Skrevet 6. august 2008 (endret) Jeg har tenkt litt feil når det gjaldt problemet . Med andre ord så virker som om jeg egentlig har løst problemet før det har oppstått. Poenget med programmet jeg forsøker å lage er å kunne lage sine egne knapper når man programmer . Egentlig så er det bare bilder som blir laget . Jeg synes det er enklere på denne måten en bruke et vanlig tegne progrm til det . prinsippet at hver knapp består av et rutenett. I dette rutenett plaserer man noen grafiske figurer. Jeg har gjort det slik at men kan velge mellom 173 forskjelige ( 0-172). egentlig så er de noen få grunnfigurer og resten er kombinasjoner av disse . Får å plassere disse figurene så bruker jeg en sekvens med disse variablene : x,y,k,b,h,v,fx,tx-fy-ty eks : 6,0,18,1,1,1,0-1,0-1 x og y er plassering horisontalt og vertikalt k er koden – altså nummeret på den grafiske figuren b og h er bredde og høyde – altså hvor mange ruter den grafiske figuren dekker v virsuelt forteller om fx,tx,fy,ty område med skal skules eller vises fx fra område tx til område fy fray ty til y for å lagge et « knappe bilde» så trenge men mange av disse grafiske figuren plaser på flere steder i rutenett listen med alle disse sekvensen kan bli ganske lang så nå jobber jeg med å redusert den ved å la programmet behandle listen det første blir å splitte noen av figurene til det bare er grunnfigurer joda listen blir lit lengre men så kommer jeg til det punktet der jeg kan redusere jeg går gjennom hver grunnfigur og sammenligner de som er plaser nær hverandre. Hvis to like figurer er plaser ved siden av hverandre så kam man slå dem sammen da fjernes den ene figuren fra listen og den andre kan bli større ( bredere eller høyere ) tilslutt kan man slå sammen to grunnfigurer til en figur når disse figuren tegnes på en bilde image og så lagres som en fil så har man et bilde . I stedet for å bruke en time på å tegne dette bilde så tar det kansje 5 minutter på denne måten figurene kan f.eks se slik ut : luften mellom er bare for å marker at den består av flere mindre figurer det svarte feltet er egentlig gjennomsiktig edit ---------------------------------- det er nå problemene dukker opp som der ser så består de forskjelige "trekantene " av andre figurer jeg har marker de med den figur numret/koden jeg har definert dem etter problemet er å kun sitteigjen med en trekant av hver type og alle koden nr 1 fjernet. først måtte jeg bestemme meg hvilken av figuren jeg skulle fjerne først . det er greit å begynne med nr 17 det var også greit å slå sammen disse figuren etter den metoden som jeg har benyttet tidligere men da ble det litt overlapping av figur nr 1. den måtte nå fjernes da brukte jeg en stringgridd som jeg satte like antal lkolonner og injer som bredde og høyde på den figuren som ble behandlet. da måtte jeg lage en utregning som satte diagoalen i rutenettet rett etter figuren. det neste var å fulle ut de rette rutene ruten er fylt ut i forhold til figuren . da henter man ut posisjone fra kolonne og lije i stringrid-en med litt bearbeiding så kan jeg fjerne alle disse nr1 figurne som over lapper nå gjenstår det å se om det virker fult ut // simulering kode 17 STRINGGRID1.ColCount:=5; STRINGGRID1.RowCount:=5; for t:=0 to 4 do begin for r:=0 to 4 do begin if r = t then begin px:=r; py:=5-t-1; STRINGGRID1.Cells[px,py]:='17'; end; end; end; for t:=0 to 4 do begin endringer2:=false; for r:=0 to 4 do begin px:=r; py:=5-t-1; if STRINGGRID1.Cells[r,t]='17' then endringer2:=true; if STRINGGRID1.Cells[r,t]<> '17' then begin if endringer2 then STRINGGRID1.Cells[r,t]:='*'; end; end; end; // simulering kode 25 STRINGGRID1.ColCount:=5; STRINGGRID1.RowCount:=5; for t:=0 to 4 do begin for r:=0 to 4 do begin if r = t then begin px:=r; py:=t; STRINGGRID1.Cells[px,py]:='25'; end; end; end; for t:=0 to 4 do begin endringer2:=true; for r:=0 to 4 do begin px:=r; py:=5-t-1; if STRINGGRID1.Cells[r,t]='25' then endringer2:=false; if STRINGGRID1.Cells[r,t]<> '25' then begin if endringer2 then STRINGGRID1.Cells[r,t]:='*'; end; end; end; // simulering kode 33 STRINGGRID1.ColCount:=5; STRINGGRID1.RowCount:=5; for t:=0 to 4 do begin for r:=0 to 4 do begin if r = t then begin px:=r; py:=t; STRINGGRID1.Cells[px,py]:='33'; end; end; end; for t:=0 to 4 do begin endringer2:=false; for r:=0 to 4 do begin px:=r; py:=5-t-1; if STRINGGRID1.Cells[r,t]='33' then endringer2:=true; if STRINGGRID1.Cells[r,t]<> '33' then begin if endringer2 then STRINGGRID1.Cells[r,t]:='*'; end; end; end; // simulering kode 41 STRINGGRID1.ColCount:=5; STRINGGRID1.RowCount:=5; for t:=0 to 4 do begin for r:=0 to 4 do begin if r = t then begin px:=r; py:=5-t-1; STRINGGRID1.Cells[px,py]:='41'; end; end; end; for t:=0 to 4 do begin endringer2:=true; for r:=0 to 4 do begin px:=r; py:=5-t-1; if STRINGGRID1.Cells[r,t]='41' then endringer2:=false; if STRINGGRID1.Cells[r,t]<> '41' then begin if endringer2 then STRINGGRID1.Cells[r,t]:='*'; end; end; end; Endret 10. august 2008 av elg-elg123 Lenke til kommentar
Zoxc Skrevet 18. august 2008 Del Skrevet 18. august 2008 Du bør lære deg å bruke TAB, begin bør også vere på en ny linje for å markere en ny blokk :/ Lenke til kommentar
sinnaelgen Skrevet 18. august 2008 Forfatter Del Skrevet 18. august 2008 Du bør lære deg å bruke TAB, begin bør også vere på en ny linje for å markere en ny blokk :/ jeg skal tenke på det . kanskje en vanesak, men for meg så virker det pirkete. uansett med for mange blokker inne i hverandre så mister jeg oversikten uansett. da er det bedre å dele det opp i subrutiner ( funksjoner eller prosedyrer ) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå