14. februar 2000 - 11:25Der er
22 kommentarer og 2 løsninger
diameter
Jeg håber i kan hjælpe mig med den her opgave som går Ud på at hvis jeg har en rulle på 4500 meter af plastic som er 0,025 my tyk som der er spole op på et pap rør som er 80 mm i diameter Så der det jeg er ude efter hvordan men laver en kode i delphi Som der regner ud hvor stor den pågælden rulle er I diameter og ikke i omkreds ( hvor dan finder jeg så ud af hvor stor rullen er i mm )
hej kim_bille nej jeg har ikke glemt at jeg har spurgt om det før men jeg kan ikke få det at virke det er ikke sådan at du har en kode som du vil sene til mig
Jeg vil gerne lave det lille program og sende til dig. Jeg troede du havde fået det til at virke, eftersom du accepterede mit svar på ovenstående spm. Men det gjorde du så ikke.
Jeg laver et lille program og sender til dig, men det kan ikke blive før i morgen.
Stone, det har du ret i og det gør jeg gerne, men du er også velkommen til at få en kopi på mail hvis du vil. Mange gange er det bare lettere for spørgeren hvis han/hun får en source direkte med mail.
Har du en mail-id på mini-site eller kan du give mig en ?
For alle de små programmer jeg sender til spørgere gælder at alle andre også er velkomne til at få en kopi. De er ikke forbeholdt nogen bestemt. Det er bare at sige til.
// generel funktion til at omdanne de tre inputfelters indhold til et tal // uden at vise en delphi fejl hvis teksten ikke er et tal function text_to_mm(s : string) : double; var d : double; begin
s := trim(s); // fjern evt. blanke før og efter tallene try // try .. except .. end sørger for at fejl fanges uden at // delphi viser en fejlmeddelelse d := strtofloat(s); // prøv at omdanne taksten i s til et tal except on exception do // ups det gik ikke. teksten i s er ikke et tal d := -1.0; // default værdi til at teste på der hvor funktionen kaldes. // Hvis resultatet er -1.0 er teksten i S ikke et korrekt tal end; result := d; // returner resultatet end;
// generel funktion til at udregne omkredsen function TForm1.omk(mm : double) : double; begin result := (pi * mm); // "pi" er en indbygget delphi konstant med en // værdi svarende til 22/7-dele, d.v.s. 3,14159265359 end;
procedure TForm1.Button1Click(Sender: TObject); var lmm : double; // enhedens længde i mm som tal tmm : double; // enhedens tykkelse i mm som tal (my * 1000) kmm : double; // kernens diameter i mm som tal før første omlægning
dmm : double; // diametren på den fulde rulle i mm som tal omm : double; // omkredsen for den fulde rulle i mm som tal
i : integer; // antal omlægninger af enheden (omgange enden kan nu rundt om rullen) len : double; // tal til at summere den forbrugte længde for hver omgang
begin lmm := text_to_mm(edit1.text); // omdan edit1.text til et tal if lmm = -1.0 then // edit1.text indeholder ikke et korrekt tal begin showmessage('Længden skal være et tal !'); edit1.setfocus; // sæt markøren tilbage til edit1 feltet exit; end;
tmm := text_to_mm(edit2.text); // omdan edit2.text til et tal if tmm = -1.0 then // edit2.text indeholder ikke et korrekt tal begin showmessage('Tykkelsen skal være et tal !'); edit2.setfocus; // sæt markøren tilbage til edit1 feltet exit; end;
kmm := text_to_mm(edit3.text); // omdan edit3.text til et tal if kmm = -1.0 then // edit1.text indeholder ikke et korrekt tal begin showmessage('Kernens diameter skal være et tal !'); edit3.setfocus; // sæt markøren tilbage til edit1 feltet exit; end;
// ok, alle indtastede tal er ok
// for hver omgang bruges 2 gange tykkelsen (en bane i hver ende af diametren) // så diametren forøges med (2 gange tykkelsen) for hver omgang. // D.v.s. at længden af det mængde af enheden der forbruges pr. omgang er // Omkredsen af: kernen + ((2 gange tykkelsen) ganged med antal omgange) // len : omk(kernens diameter + ((2 gange tykkelsen) gange antal omgange) eller // len := omk(kmm+((2*tmm)*i) hvor i er antl omgange // når len hele tiden opsummeres vil den til sidst være lig med den samlede // længde og så kender men dels antallet af hele omgange, og dels omkredsen af den sidste // omgang. // diametren vil så være kernens diameter + (antal omgange * (2 gange tykkelsen): // diameter := kmm + ((i * (2 * tmm));
// så starter vi.....
i := 0; len := 0.0; repeat i := i + 1; len := len + omk(kmm+((tmm*2) * i)); // forbrugt længde skal være lig med // kernens diameter gange (tykkelsen *2) // gange antal omgange (i)
until (len >= lmm); // NB! Stop når der ikke er nok til at nå rundt om
dmm := kmm+((tmm*2) * i); // diametren af den fulde rulle omm := omk(kmm+((tmm*2) * i)); // omkreden af den fulde rulle
if len <> lmm then i := i - 1; // træk 1 fra natal omgange hvis den sidste omgang // ikke nåede hele vejen rundt
label5.caption := inttostr(i-1); // vis antal omgange
label6.caption := floattostr(dmm); // vis den endelige diameter
label8.caption := floattostr(omm); // vis omkredsen af den fulde rulle
// NB! Unøjagtigheden i dette eksempel ligger i om den sidste omgang kunne // nå helt rundt eller ej. // Den endelige diameter kan derfor være op til 2*tykkelsen mindre end beregnet // og omkredsen op til kernens diameter + (2 gange tykkelsen gange antal omgange) mindre
// Den helt nøjagtige diameter kan derfor kun beregnes korrekt af den sidste hele omgang // ligesom omkredsen også kun kan gælde den sidste hele omgang. // tilgengæld kan en evt. rest beregnes som længden af resten. end;
end.
Bemærkninger:
Formen indeholder 3 indtastningsfelter: Længden af enheden, tykkelsen af enheden og diametren på kernen.
og en knap til beregning og
3 labels der viser følgende:
1. Antal omgange enheden nåede rundt i alt 2. Diametren af den fulde rulle og 3. Omkredsen af den fulde rulle.
Med værdier som Længden af enheden = 4500 m Tykkelsen af enheden = 0.0025 my og Diametren på kernen = 80 mm
bliver resultatet:
Antal omgange = 12790 Diametren af den fulde rulle = 143,96 mm og Omkredsen af den fulde rulle = 452,2636.. mm
NB! Der er en lille fejl i programmet. Jeg har skrevet at længden af enheden skal indtastes i meter. Det er forkert. det skal være i mm. D.v.s. at 4500 m bliver til 4500000 mm.
Jeg prøvede at sende programmet som en zipfil til den mail-id du har opgivet på dit minisite her på eksperten men jeg fik den tilbage igen med en "Returned Mail: Service Unavailable".
Hvis du vil have en kopi så sig lige til. Men du kan selvfølgeligt også bare kopiere det jeg har vist.
hej sjensen jeg kan ikke få det til at passe at 289 meter i 0,017 my giver ( ø= 90 mm efter den scaler du fik af mig er den på 17 mm eller skal man måle fra midten af ???????? efter scaler
function TForm1.text_to_tal(s : string) : Double; begin Result := 0.0; s := trim(s); if s = '' then Exit; try Result := StrToFloat(s); except on Exception do ; end; end;
function TForm1.omk(r : Double) : Double; begin Result := (2*pi) * r; end;
procedure TForm1.Button1Click(Sender: TObject); var d : Double; r : Double; l : Double; t : Double; i : integer; m : Double; begin l := text_to_tal(edit2.Text); if l <= 0.0 then begin ShowMessage('Længde skal være større end 0.0'); edit2.setfocus; Exit; end; t := text_to_tal(edit3.Text); if t <= 0.0 then begin ShowMessage('Tykkelse skal være større end 0.0'); edit3.setfocus; Exit; end; d := text_to_tal(edit1.Text); if d <= 0.0 then begin ShowMessage('Kernens diameter skal være større end 0.0'); edit1.setfocus; Exit; end; r := d / 2; // radius af kernen i := 1; m := 0.0; repeat m := m + omk(r+(t*i)); i := i + 1; until (m > l);
Jeg kan altså ikke forstå at din skala er korrekt: Hvis kernen er 80 mm i dia, så vil første tur rundt være 80*pi = 251,33 ca. Lad os så antage at vi klippe 15557 m = 15557000 mm lange plastic op i 251,33 mm lange stykker og stabler dem. 15557000/251,33=61898,70 stk 61898,70 * 0,000025 mm = 1,547 mm
Hvis vi nu havde rullet plasticen på kernen ville turen rundt blive længere og længere og det ville kun forminske de 1,547 mm!. Så hvis vi bare læggger de 80 mm (kernens dia) til er det tal vi få faktisk for stort! 80mm + 1,547mm = 81,547 mm !!!
Det er ret langt fra din skalas 1000mm, faktisk mere end en faktor 10.
Kan det tænkes at det skal medregnet luft mellem lagende?
Kim
ps: af dette at det jo tydelig at mit prg ville regne forkert.
Hej sjensen tak for den sidste kode Men den regner desværre ikke rigtig i nu Ja undskylde at jeg er så besværlig
men hvis man tager den første Rulle. i tabellen som du fik
så er det en rørfolie som der betyder at der er 2 lag bare tænk på en bærepose som der så bare er 289 meter lang og der så er rullet op på et pap rør som der er 7,6 cm = 76 mm Ø
som tabel 1 hvor der står Folie tykkelse = 0,017 my. så er der rulle Ø i cm = 15 = ( 115 mm ) der giver en rulle på 289 meter = ( 289000 mm )
men i programmet giver det en rulle på 289152 mm = ( 289,152 cm Ø ) og nej kim_bille det kan ikke tænkes at der er luft i mellem lagende
hej kim_bille den er jo ikke galt med dit regne skykke Men den regner desværre ikke rigtig i dit program
der vil en rulle med en folie på 289 meter i en 0,017 my der er rullet op på et pap rør som der er 7,6 cm så så ville denkun være 76,041174 mm = 7.9 cm ??? det er jo næsetn det samme som paprøret er da det jo er 7,6 cm
efter den tabel som jeg har er rulle 15 Ø i cm = 115 mm og skriv hvis du vil have en kopi af den tabel
så sjensen 70 point for for den fine kode han sende til mig og kim_bille får 30 point
tak i to hilsen per
Synes godt om
Ny brugerNybegynder
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.