Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Nächstgelegenen Wert ermitteln

Frage Entwicklung PHP

Mitglied: Maik87

Maik87 (Level 2) - Jetzt verbinden

27.05.2013 um 15:11 Uhr, 1649 Aufrufe, 11 Kommentare, 2 Danke

Hallo Leute,

ich weiß nicht, wie ich mein Problem genau beschreiben soll. Ich versuche es mal anhand eines täglichen Beispiels zu erklären:

Wir stellen uns mal vor, es würde eine Schätzfrage geben.

Wie viele Kilometer Entfernung sind es von der Erde zur Sonne?
Richtige Antwort: 149,6 Mio. km
Kandidat 1: 10 Mio km
Kandidat 2: 200 Mio km
Kandidat 3: 101 Mio km
...

Wie könnte ich am unkompliziertesten ermitteln, wer die Schätzfrage gewonnen hat? Gibt es eine Funktion oder muss ich das ganze durch eine Schleife jagen?
Mitglied: certifiedit.net
27.05.2013 um 15:13 Uhr
Eine Funktion wird es dafür wohl nicht geben. Von daher die Differenz vergleichen als eigene Funktion.
Bitte warten ..
Mitglied: colinardo
27.05.2013, aktualisiert um 15:19 Uhr
Hi,
zieh doch den Betrag von jedem Kandidaten von der Lösung ab schreib den Kanidat und den "absoluten" Wert zusammen in ein Array und sortiere dieses von klein nach groß. Der der am nächsten dran liegt steht dann an Position 1 des Arrays.

Grüße Uwe
Bitte warten ..
Mitglied: Honksen
27.05.2013 um 15:28 Uhr
Hai,

vergleiche in einer Schleife die Werte mit der richtigen Lösung. Bilde die Differenz und danach den Betrag (falls negative Ergebnisse herauskommen). Vergleiche jeden mal 2 Werte. Den kleineren Werte (also näher an der Lösung) behälts Du in einer Variablen.
Wenn alle Werte einzeln verglichen sind, hast Du denjenigen, der am besten geschätzt hat.

Honksen
Bitte warten ..
Mitglied: Maik87
27.05.2013 um 15:44 Uhr
Also gaaanz quick and dirty:

$antworten=array();
$antworten['Kandidat_01'] = 10;
$antworten['Kandidat_02'] = 200;
$antworten['Kandidat_03'] = 101;

$richtig = 149.6;

$entfernung = array();

foreach ($antworten as $key => $antwort){
$entfernung[$key] = abs($richtig-$antwort);
}

asort($entfernung);

echo 'Gewinner: ' .array_search(reset($entfernung),$entfernung);

Optimierung folgt
Bitte warten ..
Mitglied: peter-
27.05.2013 um 15:47 Uhr
Hi,

am Rande bemerkt:

Es mag der Sonderfall auftreten, das 2 oder mehrere Kandidaten absolut gesehen gleiche Schätzungen abgeben. Daran sollte man dann auch denken. Uwe's Array könnte man entsprechend abfragen, Honksen's Lösung läßt vermutlich nur den ersten besten Schätzer gewinnen.
Bitte warten ..
Mitglied: Maik87
27.05.2013, aktualisiert um 15:56 Uhr
Danke für den Einwand!
Bitte warten ..
Mitglied: hmarkus
27.05.2013, aktualisiert um 16:22 Uhr
Hallo,

die Lösung mit dem Array ist im Prinzip richtig. Allerdings würde ich anstatt eine Schleife zu durchlaufen die Werte nach den Differenzen Sortieren. Wie das mit PHP geht weiß ich nicht. Aber dann kannst Du prüfen, ob die beiden ersten Werte identisch sind (also im sortierten Array), wenn ja, dann gibt's mehr als eine richtige Antwort.

Markus
Bitte warten ..
Mitglied: Maik87
27.05.2013 um 16:14 Uhr
Zitat von hmarkus:

die Lösung mit dem Array ist im Prinzip richtig. Allerdings würde ich anstatt eine Schleife zu durchlaufen die Werte
nach den Differenzen Sortieren.

Mach ich doch, oder?
In der Schleife rechne ich die Differenzen aus, dann sortiere ich die Differenzen aufsteigend und nehm den ersten Wert. Klar kann man noch eine Schleife hinterhängen, die - soforn es x gleiche richtige Antworten gibt - alle ausgibt.
Bitte warten ..
Mitglied: hmarkus
27.05.2013 um 16:21 Uhr
Ach so, ich hatte das anders gesehen.

Markus
Bitte warten ..
Mitglied: Maik87
27.05.2013 um 16:24 Uhr
und wie hast du es gesehen??
Bitte warten ..
Mitglied: hmarkus
27.05.2013 um 16:34 Uhr
Ich hatte das so aufgefasst, dass der Vergleich in der Schleife vorgenommen wird.

Ich würde, wenn ich sowas programmiere (mit Perl, PHP kann ich nicht) mir eine Funktionen schreiben "differenz", die den Betrag der Differenz zweier Zahlen zurückgibt. Wenn man die Antworten gleich in einem Array sammelt, dann braucht man eigentlich keine Schleife mehr.
01.
sort { differenz($antworten[$a], $richtigerwert <=> differenz($antworten[$b], $richtigerwert } ;
Oder z.B. eine Sortierfunktion, die den korrekten Lösungswert und eine Referenz auf das Array als Argument bekommt. Ich halte das für übersichtlicher als eine Schleife. Wie gesagt, Perl.

Markus
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
DNS
Hostnames für mehrere IPs ermitteln (3)

Frage von Oneil-1989 zum Thema DNS ...

Mac OS X
gelöst 500 Wordfiles die jeweilige Anzahl an Wörtern ermitteln (26)

Frage von xp-user zum Thema Mac OS X ...

Router & Routing
gelöst Netzwerkbelastung ermitteln (6)

Frage von Azubine zum Thema Router & Routing ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...