03. juni 2002 - 16:14Der er
7 kommentarer og 1 løsning
Borland C++ Builder 5: Hvordan laves simpelt beregningsprogram?
Hej Eksperter Jeg vil gerne vide hvordan jeg skal lave et lille program der udførere en beregning af to formler samtidig. Jeg vil derne have en form der har 5 input felter - vil hver sin variabel i min formel, derefter skal resultatet - to resultater - vises uden at input parametrene resettes.
Det må være noget med fen edit felter hvor værdierne løber gennem mine foprmler og så vises på en label eller er jeg helt ude i skoven?
Det lyder ret simpelt. Men det er umuligt uden at kende formlerne og variablerne :-) Skriv lidt mere om hvad det er du vil have regnet ud (altså input og forventet output)
Det er en formel til at beregne fordelingen at vægt i en bil der bremser eller accellererer - der er 5 variabler G = bilens vægt i kilo, h = højde på tyngdepunkt målt i cm, B = bremsekraft målt i kg, d = andel af vægten der er på forhjulene w = længde mellem for og baghjul
Formlerne ser således ud: Lf(vægt på forhjulene) = d*G + B*h/w Lr(vægt på baghjulene) = (1-d)*G - B*h/w
Resultaterne (Lf og Lr) er et udtryk for hvor mange kilo henholdsvis for- og baghjul belastes med når der bremses med en bestemt kraft.
Jeg vil gerne kunne lægge mine variabler ind i fem input bokse -> klikke på en "Beregn" knap -> se resultatet i to bokse.
Jeg ved det ikke er svært - jeg har bare ikke lært en pind om GUI programmering endnu - og det er lidt irriterende at lægge alle variabler ind i dos programmet hver gang jeg vil lave en ny beregning.
Hej igen. Jeg foretrækker Borland idet jeg har hørt at den laver kode der er tættere på standarden end MS V C++ -men jeg har Visual C++ - den skal bare lige installeres :)
Jeg placerer 5 edits på formen, en for hver variabel. Desuden en "Beregn"-button, og 2 labels til at vise resultaterne i.
Jeg dobbeltklikker på "Beregn"-knappen, hvilket vil tilføje en handler til knappens "OnClick"-event. I denne skriver man så den kode som skal udføres når man trykker på knappen. Jeg skriver følgende kode i denne event-handler :
void __fastcall TForm1::Button1Click(TObject *Sender) { int G = Edit1->Text.ToInt(); int h = Edit2->Text.ToInt(); int B = Edit3->Text.ToInt(); int d = Edit4->Text.ToInt(); int w = Edit5->Text.ToInt(); int Lf = d * G + B * h/w; int Lr = (1 - d) * G - B * h/w; Label1->Caption = Lr; Label2->Caption = Lf; }
Når runner programmet og trykker på knappen bliver de to labels udfyldt med de beregnede værdier. Du skal dog være opmærksom på at Edit::Text::ToInt funktionen thrower en exception hvis der står noget andet end en integer-værdi i felterne. Så du kan enten lave en try/catch blok uden om funktionskaldene, og lave din fejl-behandlingskode her, eller du kan lave en event-handler for edit-kontrollernes OnChange-event, det kommer an på hvornår de vil have at felt-værdierne skal evalueres, om det skal ske når man indtaster noget eller om det først skal ske når man trykker beregn.
Hvad angår det med at Builder skulle lave kode der er tættere på standarden mener jeg at det er noget vrøvl. Du kan lave standard-kode både i Builder og Visual C++,hvis du skriver det hele i hånden og kun bruger standard-bibliotekerne. Eller du kan tage eksisterende C++-programmer skrevet i standard C++ og generelt umiddelbart kompilere dem i begge miljøer. Men lige så snart du bruger de medfølgende api'er, eller sætter dem til at genere noget kode, så er det allerede fyldt med ting der ligger uden for standarderne. Builder indeholder en hel del udvidelser i forhold til standarden, mange af dem for at gøre det kompatibelt med Object Pascal /Delphi. Der er f.eks. closures, properties, classid, declspec og published af udvidelser i Builder. Hvis du bruger Builder til at genere et simpelt gui-program som ovenstående, så er der allerede massere af "ikke-standard"-kode.
Det virker jo lige præcis som det jeg spurgte til.
Mange tak bjk
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.