Avatar billede perolsen Novice
14. februar 2000 - 11:25 Der 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  )
Avatar billede perolsen Novice
14. februar 2000 - 11:35 #1
Jeg har glemt at sige at jeg har en skala på papir som fortæler
at en rulle på 15557 meter
med 0,025 my den er så 1000 mm
i diameter


Avatar billede kim_bille Nybegynder
14. februar 2000 - 11:38 #2
Har du glemt du spurgt om det før:

http://www.eksperten.dk/spm.asp?id=9058

det spg er besvaret
Avatar billede kim_bille Nybegynder
14. februar 2000 - 11:39 #3
Åh omkreds undskyld
Avatar billede kim_bille Nybegynder
14. februar 2000 - 11:46 #4
men, hvis du har omk er dia til at regne ud

omk=pi*dia <=> dia=omk/pi
Avatar billede perolsen Novice
14. februar 2000 - 12:30 #5
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


Avatar billede sjensen Nybegynder
14. februar 2000 - 16:35 #6
Perolsen,

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.

sjensen
Avatar billede stone Forsker
14. februar 2000 - 19:38 #7
det ville være rart at løsningen blev vist i spørgsmålet.
Avatar billede sjensen Nybegynder
14. februar 2000 - 20:24 #8
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.

sjensen
Avatar billede sjensen Nybegynder
14. februar 2000 - 22:25 #9
perolsen og stone,

Se i jeres indbakker og se lige nederst i dette svar for en lille fejl i programmet !

Nedenstående er det program jeg har sendt til jer:

Først formen (unit1.dfm):

object Form1: TForm1
  Left = 316
  Top = 212
  Width = 420
  Height = 394
  Caption = 'Diameter Program'
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -13
  Font.Name = 'Times New Roman'
  Font.Style = []
  PixelsPerInch = 96
  TextHeight = 15
  object Label1: TLabel
    Left = 16
    Top = 28
    Width = 192
    Height = 15
    Caption = 'Enhedens længde i Meter (1000 mm)'
  end
  object Label2: TLabel
    Left = 16
    Top = 68
    Width = 139
    Height = 15
    Caption = '- tykkelse i MY (0.001 mm)'
  end
  object Label3: TLabel
    Left = 16
    Top = 108
    Width = 125
    Height = 15
    Caption = 'Kernens Diameter i  mm'
  end
  object Label4: TLabel
    Left = 16
    Top = 200
    Width = 183
    Height = 15
    Caption = 'Antal omgange enheden når rundt'
  end
  object Label5: TLabel
    Left = 272
    Top = 200
    Width = 121
    Height = 15
    Alignment = taRightJustify
    AutoSize = False
    Color = clAqua
    ParentColor = False
  end
  object Label6: TLabel
    Left = 272
    Top = 232
    Width = 121
    Height = 15
    Alignment = taRightJustify
    AutoSize = False
    Color = clAqua
    ParentColor = False
  end
  object Label7: TLabel
    Left = 16
    Top = 232
    Width = 184
    Height = 15
    Caption = 'Diameter for den færdige rulle i mm'
  end
  object Label8: TLabel
    Left = 272
    Top = 264
    Width = 121
    Height = 15
    Alignment = taRightJustify
    AutoSize = False
    Color = clAqua
    ParentColor = False
  end
  object Label9: TLabel
    Left = 16
    Top = 264
    Width = 172
    Height = 15
    Caption = 'Den færdige rulles omkreds i mm'
  end
  object Label10: TLabel
    Left = 16
    Top = 304
    Width = 377
    Height = 41
    AutoSize = False
    Caption =
      'NB! Beregningerne af den endelige diameter og den endelige omkre' +
      'ds gælder KUN den sidste hele omgang.'
    WordWrap = True
  end
  object Edit1: TEdit
    Left = 272
    Top = 24
    Width = 121
    Height = 23
    TabOrder = 0
  end
  object Edit2: TEdit
    Left = 272
    Top = 64
    Width = 121
    Height = 23
    TabOrder = 1
  end
  object Edit3: TEdit
    Left = 272
    Top = 104
    Width = 121
    Height = 23
    TabOrder = 2
  end
  object Button1: TButton
    Left = 272
    Top = 144
    Width = 121
    Height = 25
    Caption = 'Beregn'
    TabOrder = 3
    OnClick = Button1Click
  end
end

og derefter pasfilen (unit1.pas):

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Edit3: TEdit;
    Label3: TLabel;
    Button1: TButton;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function omk(mm : double) : double;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// 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 håber at I kan bruge det til noget.

sjensen
Avatar billede sjensen Nybegynder
14. februar 2000 - 22:39 #10
Stone,

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.

sjensen
Avatar billede sjensen Nybegynder
14. februar 2000 - 22:42 #11
Til de der evt. klipper/klistre programmet ud af ovenstående svar vil jeg lige nævne at den fejl jeg omtaler rettes ved at ændre følgende:

Ret følgende caption for label 1 i formen:

Caption = 'Enhedens længde i Meter 1000 mm)

til

Caption = 'Enhedens længde i mm

sjensen
Avatar billede kim_bille Nybegynder
14. februar 2000 - 23:17 #12
perolsen> jeg har også sendt et prg. (i håd om at være hurtiger end sjensen) men sjensen kom først så giv har pointene.

Kim
Avatar billede perolsen Novice
15. februar 2000 - 12:40 #13
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

og tak for dit program
Avatar billede sjensen Nybegynder
17. februar 2000 - 01:15 #14
perolsen,

jeg kigger lige på det igen, så hører du fra mig.

sjensen
Avatar billede perolsen Novice
17. februar 2000 - 01:56 #15
OK sjensen  og tak

per olsen
Avatar billede sjensen Nybegynder
17. februar 2000 - 12:29 #16
hej Perolsen,

her er en ny version (i D4) af programmet (uden kommentarer dog):

dfm-filen:

object Form1: TForm1
  Left = 200
  Top = 107
  Width = 287
  Height = 295
  Caption = 'Diameter Beregning'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 152
    Top = 175
    Width = 97
    Height = 15
    Alignment = taRightJustify
    AutoSize = False
  end
  object Label2: TLabel
    Left = 152
    Top = 200
    Width = 97
    Height = 13
    Alignment = taRightJustify
    AutoSize = False
  end
  object Label3: TLabel
    Left = 152
    Top = 224
    Width = 97
    Height = 13
    Alignment = taRightJustify
    AutoSize = False
  end
  object Label4: TLabel
    Left = 152
    Top = 248
    Width = 97
    Height = 13
    Alignment = taRightJustify
    AutoSize = False
  end
  object Label5: TLabel
    Left = 8
    Top = 36
    Width = 129
    Height = 13
    AutoSize = False
    Caption = 'Længde i millimeter'
  end
  object Label6: TLabel
    Left = 8
    Top = 68
    Width = 129
    Height = 13
    AutoSize = False
    Caption = 'tykkelse i millimeter'
  end
  object Label7: TLabel
    Left = 8
    Top = 100
    Width = 129
    Height = 13
    AutoSize = False
    Caption = 'Kernediameter i millimeter'
  end
  object Label8: TLabel
    Left = 12
    Top = 176
    Width = 129
    Height = 13
    AutoSize = False
    Caption = 'Kernens omk i millimeter'
  end
  object Label9: TLabel
    Left = 12
    Top = 200
    Width = 129
    Height = 13
    AutoSize = False
    Caption = 'Antal omgange'
  end
  object Label10: TLabel
    Left = 12
    Top = 224
    Width = 129
    Height = 13
    AutoSize = False
    Caption = 'Fuld rulles omk i mm'
  end
  object Label11: TLabel
    Left = 12
    Top = 248
    Width = 129
    Height = 13
    AutoSize = False
    Caption = 'Fuld rulles diameter i mm'
  end
  object Edit1: TEdit
    Left = 176
    Top = 96
    Width = 73
    Height = 21
    TabOrder = 2
  end
  object Button1: TButton
    Left = 176
    Top = 128
    Width = 75
    Height = 25
    Caption = 'Beregn'
    TabOrder = 3
    OnClick = Button1Click
  end
  object Edit2: TEdit
    Left = 176
    Top = 32
    Width = 73
    Height = 21
    TabOrder = 0
  end
  object Edit3: TEdit
    Left = 176
    Top = 64
    Width = 73
    Height = 21
    TabOrder = 1
  end
end

og pas-filen

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function  text_to_tal(s : string) : Double;
    function  omk(r : Double) : Double;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

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);

  label1.Caption := floattostr(omk(r));
  label2.Caption := IntToStr(i-1);
  label3.Caption := floattostr(omk(r+(t*(i-1))));
  label4.Caption := floattostr(d+((t*2)*(i-1)));
end;

end.

Prøv det engang og lad mig høre hvad mener.

sjensen
Avatar billede kim_bille Nybegynder
17. februar 2000 - 13:02 #17
Hvordan klarede mit prg. sig i skala testen?

Kim
Avatar billede kim_bille Nybegynder
17. februar 2000 - 13:24 #18
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.
Avatar billede stone Forsker
17. februar 2000 - 17:59 #19
sjensen:
ja-jeg har problemer med at modtage post
siden jeg skiftede cybercity
men jeg får godt nok spørgsmål fra eksperten-"mærkeligt"
stone
Avatar billede perolsen Novice
18. februar 2000 - 01:48 #20
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

SÅ mig ikke forstå :-)

Hilsen per
Avatar billede kim_bille Nybegynder
18. februar 2000 - 12:34 #21
per> hvad er der så galt med mit regne skykke her over.
Avatar billede perolsen Novice
18. februar 2000 - 16:23 #22
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

kan du ikke sende din kode til mig

hilsen per


Avatar billede kim_bille Nybegynder
18. februar 2000 - 21:59 #23
per> tak, jeg vil gerne se tabelen

kim
Avatar billede perolsen Novice
19. februar 2000 - 17:43 #24
jeg tror ikke at vi kan få det at køre

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
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