Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 1669 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
Microsoft Office
Excel: maximale Anzahl in Folge stehender Werte ermitteln (1)

Frage von Flexxa zum Thema Microsoft Office ...

Microsoft Office
gelöst VBA - aktuelle Kalenderwoche ermitteln (3)

Frage von Ghost108 zum Thema Microsoft Office ...

Visual Studio
gelöst SIDs eines Verzeichnisses ermitteln (1)

Frage von joehuaba zum Thema Visual Studio ...

Neue Wissensbeiträge
Sicherheit

Millionen Euro in den Sand gesetzt?

(1)

Information von transocean zum Thema Sicherheit ...

Sicherheit

How I hacked hundreds of companies through their helpdesk

Information von SeaStorm zum Thema Sicherheit ...

Erkennung und -Abwehr

Ccleaner-Angriff war nur auf große Unternehmen gemünzt

(10)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Heiß diskutierte Inhalte
Humor (lol)
gelöst Freidach Beitrag (40)

Frage von Penny.Cilin zum Thema Humor (lol) ...

Windows 7
gelöst SSD - Win7 Lags (20)

Frage von ph5555 zum Thema Windows 7 ...

Firewall
gelöst Firewall Firmeneimsatz (19)

Frage von wiesi200 zum Thema Firewall ...