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, 1661 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 ..
Ähnliche Inhalte
Festplatten, SSD, Raid
Speicherverbrauch ermitteln (8)

Frage von Yannosch zum Thema Festplatten, SSD, Raid ...

Microsoft Office
gelöst Excel: Wert aus mehreren Zeilen vergleichen (2)

Frage von Nicolaas zum Thema Microsoft Office ...

Netzwerkmanagement
gelöst Neue Cisco Switche im Netzwerk ermitteln um diese zu konfigurieren (9)

Frage von WinLiCLI zum Thema Netzwerkmanagement ...

Neue Wissensbeiträge
Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Router & Routing

PfSense auf Supermicro Intel Xeon D-15x8 SoC Bare Bone

Tipp von Dobby zum Thema Router & Routing ...

Windows Server

Exchange 2010 auf Windows Server 2016 und AD

(2)

Tipp von Herbrich19 zum Thema Windows Server ...

KVM

How to: Libvirt Port forwarding

(2)

Anleitung von fundave3 zum Thema KVM ...

Heiß diskutierte Inhalte
Netzwerkprotokolle
PC erhalten nicht immer eine gültige IP (29)

Frage von Lieberwolf zum Thema Netzwerkprotokolle ...

Windows Systemdateien
Windows 7 und 10 herunterfahren Knopf mit Script belegen (21)

Frage von c-o-o-p-e-r92 zum Thema Windows Systemdateien ...

Router & Routing
über Vmware auf eine FritzBox mit IPv6 per VPN (16)

Frage von Zockervogel zum Thema Router & Routing ...