AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Auf einen standartisierten Wert aufrunden

Auf einen standartisierten Wert aufrunden

Ein Thema von rebellpk · begonnen am 1. Mär 2006 · letzter Beitrag vom 2. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2   
rebellpk

Registriert seit: 1. Mär 2006
5 Beiträge
 
#1

Auf einen standartisierten Wert aufrunden

  Alt 1. Mär 2006, 18:32
Hallo Leute,
ich bin neu hier und schon komme ich mit einem Problem
Ich schreibe grad ein kleines Programm, bei dem ich einen bereits errechneten Wert auf den nächst höheren Wert (die Werte sind festgelegt) runden möchte.
Hier mal ein symbolisches Beispiel:

festgelegte Werte:
10
11
13
16
17

Aufgabe:
x + y = 13,2
Ergebnisausgabe soll aber 16 sein da der nächsthöhere mögliche Wert ist 16

Ich hoffe es ist verständlich was ich will
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Auf einen standartisierten Wert aufrunden

  Alt 1. Mär 2006, 18:51
Herzlich willkommen in der Delphi-PRAXiS.

Da deine Ergebnisse Float-Werte sind, welche auf einen Integer-Wert abgebildet werden sollen, brauchst du zuerst eine Funktion, die dir die kleinste Ganzzahl liefert, welche größer oder gleich deinem Ergebnis ist. Suche in der Delphi-Hilfe nach Ceil.

Dann ist es zweckmäßig, wenn die Bildwerte deiner Abbildung aufsteigend sortiert vorgehalten werden - wie du es schon zeigst. Da die Bildwerte nicht lückenlos sind, musst du dir eine eigene Ceil-Funktion schreiben, die den oben beschriebenen Wert durch Suchen in der geordneten Bildmenge ermittelt. Ein naiver Ansatz wäre die schrittweise Suche. Ein etwas professionellerer Ansatz ist die binäre Suche (binary search).

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
rebellpk

Registriert seit: 1. Mär 2006
5 Beiträge
 
#3

Re: Auf einen standartisierten Wert aufrunden

  Alt 1. Mär 2006, 19:40
Das mit der Ceil-Funtion wäre geschaft...

Zitat:
Da die Bildwerte nicht lückenlos sind, musst du dir eine eigene Ceil-Funktion schreiben, die den oben beschriebenen Wert durch Suchen in der geordneten Bildmenge ermittelt.
Wie soll ich hier ran gehen?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Auf einen standartisierten Wert aufrunden

  Alt 1. Mär 2006, 20:16
Ich habe dir zwei Wege aufgezeigt - am Bach lang oder über den Berg. Du musst dich nur entscheiden.

marabu
  Mit Zitat antworten Zitat
rebellpk

Registriert seit: 1. Mär 2006
5 Beiträge
 
#5

Re: Auf einen standartisierten Wert aufrunden

  Alt 2. Mär 2006, 12:26
Sorry, dafür muss ich aber erstmal laufen lernen...

Ich kenn mich noch nicht so gut mit Delphi aus.

Ich stelle mir das so vor:

Delphi-Quellcode:
var
StdWidst: array [0..23] of integer;
   StdWidst[0] = 10;
   StdWidst[1] = 11;
   StdWidst[2] = 12;
   StdWidst[3] = 13;
   StdWidst[4] = 15;
   StdWidst[5] = 16;
   StdWidst[6] = 18;
   StdWidst[7] = 20;
   StdWidst[8] = 22;
   StdWidst[9] = 24;
   StdWidst[10] = 27;
   StdWidst[11] = 30;
   StdWidst[12] = 33;
   StdWidst[13] = 36;
   StdWidst[14] = 39;
   StdWidst[15] = 43;
   StdWidst[16] = 47;
   StdWidst[17] = 51;
   StdWidst[18] = 56;
   StdWidst[19] = 62;
   StdWidst[20] = 68;
   StdWidst[21] = 75;
   StdWidst[22] = 82;
   StdWidst[23] = 91;
Weiß echt nicht wie ich das angehen soll...
  Mit Zitat antworten Zitat
Benutzerbild von Grishnak
Grishnak

Registriert seit: 15. Sep 2005
Ort: Neu-Ulm
111 Beiträge
 
RAD-Studio 2009 Arc
 
#6

Re: Auf einen standartisierten Wert aufrunden

  Alt 2. Mär 2006, 12:45
Ich würde im Array nach der ersten Zahl suchen, die größer als meine ungerundete Zahl ist (dazu sollte das Array als letzte Zahl einen "Stopper" erhalten "StdWidst[24]:=High(integer);"). Anschließend die Differenz zu dieser und zur nächstkleineren Zahl bestimmen. Dann von den beiden die Zahl nehmen, wo die Differenz am kleinsten ist.
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
  Mit Zitat antworten Zitat
rebellpk

Registriert seit: 1. Mär 2006
5 Beiträge
 
#7

Re: Auf einen standartisierten Wert aufrunden

  Alt 2. Mär 2006, 12:53
Ok, danke!
Aber so wie ich das oben auf geführt habe kann es ja schon nicht richtig sein.

[Fehler] Widerstand.pas(51): Bezeichner redefiniert: 'StdWidst'

wo liegt hier der Fehler?
  Mit Zitat antworten Zitat
Benutzerbild von Grishnak
Grishnak

Registriert seit: 15. Sep 2005
Ort: Neu-Ulm
111 Beiträge
 
RAD-Studio 2009 Arc
 
#8

Re: Auf einen standartisierten Wert aufrunden

  Alt 2. Mär 2006, 13:09
Delphi-Quellcode:
var
  StdWidst: array [0..23] of integer = (10, 11, 12, 13, 15 ... 91);
oder

Delphi-Quellcode:
var
  StdWidst: array [0..23] of integer;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  StdWidst[0]:=10;
  StdWidst[1]:=11;
  StdWidst[2]:=12;

...

  StdWidst[23]:=91;
end;
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
871 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Auf einen standartisierten Wert aufrunden

  Alt 2. Mär 2006, 13:34
Versuch es mal hiermit.
In Edit1 gibst Du Deinen Wert ein, wenn dur die Enter-Taste drrückst sollte der (evtl. nächsthöhere) Standardwert in Edit2 stehen.
Hab ich nicht vollständig getestet......

Gruß, Klaus

Delphi-Quellcode:
const StdWidst:array [0..23] of integer=(10,11,12,13,15,16,18,
         20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91);

FUNCTION FindValue(const data:array of integer; value:integer):integer;
var first,last,actual:integer;
begin
   first:=Low(data);
   last:=High(data);
   repeat
      actual:=(first+last) shr 1;
      result:=data[actual];
      if result<value then first:=actual+1
         else if result>value then last:=actual-1
            else exit;
   until first>last;
   if first<=High(data) then result:=data[first];
end;

procedure TMain.Edit1KeyPress(Sender: TObject; var Key: Char);
var v:extended; vc:integer;
begin
   if key=#13 then begin
      val(edit1.Text,v,vc);
      edit2.text:=IntToStr(FindValue(StdWidst,ceil(v)));
   end else begin
      edit2.text:='';
   end;
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
rebellpk

Registriert seit: 1. Mär 2006
5 Beiträge
 
#10

Re: Auf einen standartisierten Wert aufrunden

  Alt 2. Mär 2006, 15:52
Danke Klaus!
Aber könnetest du mir das ganze schrittweise erklären?
Das wäre echt super... denn einfach den Q-Text kopieren und drin rum fuschen bringt mich ja nicht wirklich weiter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf