Minima-Suche



  • Guten Abend miteinander!

    Ich probiere, aus gegebenen Daten (Städte mit deren Distanz zum festen Standort) die Stadt heraus zu suchen, welche die kleinste Distanz zum Standort hat. Wie aber mache ich das am geschicktesten?

    Ich habe es mal so probiert:

    for(int index = 0; index < 8; index++)
    	{
    		if(location[index].get_distance() < location[index+1].get_distance())
    		{
    			std::string city = location[index].get_name();
    		}
    	}
    

    ..aber das geht logisch nicht auf.
    Um nicht noch länger im Schilf zu suchen, erhoffe ich mir, hier auf einen guten Tipp zu stossen 🙂



  • int minindex=0;        
    	for(int index = 1; index < 8; index++)
    	{
    		if(location[index].get_distance() < location[minindex].get_distance())
    		{
    			minindex=index;
    		}
    	}
    	//jetzt ist in minindex gemerkt, welche minimal war
    


  • Vielen Dank!

    Ich hab grad gesehen, dass ich evtl. noch mehr Fehler im Code habe.
    Hier der gesamte Code:

    #include <iostream>
    #include <fstream>
    #include "location.hpp"
    #include "city_distances.hpp"
    #include <string>
    
    void city_distances::load(const std::string& filename_)
    {
    	std::ifstream file(filename_.c_str());
    
        if(!file.is_open())
        {
    		std::cerr << "Failed to open file " << filename_ << std::endl;
    		return;
    	}
    
    	_distances.clear();
    
        while(file.good())
        {
    		unsigned int distance;
    		std::string name;
    
    		file >> distance;
    		file >> name;
    
            if(file.good())
            {
    			// (a) Store the loaded data into the vector _distances.
    			std::string output = " (" + name + ", ";
    			output += distance + " )";
    			_distances.push_back(output);
    		}
    	}
    
    	file.close();
    }
    
    std::string city_distances::get_closest_city() const
    {
        if(_distances.size() <= 0)
        {
    		return std::string();
    	}
    
    	// (b) Find the name of the city having the minimum distance and return it.
    	int minindex=0;         
        for(int index = 1; index < 8; index++) 
        { 
            if(location[index].get_distance() < location[minindex].get_distance()) 
            { 
                minindex=index; 
            } 
        } 
        //jetzt ist in minindex gemerkt, welche minimal war 
    	return location[minindex];
    }
    
    size_t city_distances::count() const
    {
    	return _distances.size();
    }
    

    Bei (a) und bei (b) sind mögliche Fehlerquellen.
    Die anderen (nicht geposteten) Files heissen: city_distances.hpp, location.hpp, city_distances.cpp (die obige), location.cpp, main.cpp.



  • Was heißt denn evtl. Fehler?

    Also was mir auffällt ist, dass _bla schlechte Variablennamen sind, da der Compiler die nutzen könnte. (a) sieht richtig aus, ich weiß nur nicht, ob >> ein \r\n einfach überspringt, also mit neuen Zeilen umgehen kann.

    Bei (b) wundert mich etwas dein Startindex 1. Wieso nicht 0 wie sonst? Der Rest vom Algo ist von volkard, der ist also richtig (oder, um es zu de-absolutieren: mit 99,99%iger Wahrscheinlichkeit richtig).

    Konkretisiere daher am Besten Mal dein Problem. 🙂



  • Eisflamme schrieb:

    Bei (b) wundert mich etwas dein Startindex 1. Wieso nicht 0 wie sonst?

    Weil ich bei 8 Staädten nur 7 Vergleiche brauche. Ich muß nicht im ersten Durchlauf die Start 0 mit der Stadt 0 vergleichen, denn das Ergebnis wäre immer gleich.



  • das ist aber doch nicht gesagt dass der abstand zur ersten stadt gesucht wird oder?!?

    er meinte nur zu einem festen standort, also müsste die 0 mit rein in die schleife



  • Skym0sh0 schrieb:

    das ist aber doch nicht gesagt dass der abstand zur ersten stadt gesucht wird oder?!?

    Ich muß nicht im ersten Durchlauf die den Abstand der Stadt 0 zur festen Stadt mit dem Abstand der Stadt 0 zur festen Stadt vergleichen, denn das Ergebnis wäre immer gleich.

    Skym0sh0 schrieb:

    er meinte nur zu einem festen standort, also müsste die 0 mit rein in die schleife

    Das sehe ich noch nicht ein.



  • Ach sorry, hab nicht nachgedacht. Dachte, das stammt noch aus dem Originalcode.



  • Ich erhielt gerade über das Forum eine Mail von DanC++ .. da ich mich hier nicht wirklich beteiligt habe, wundert mich das. Phishing? Neuer User, kaum Beiträge, komische Anfrage, code der [] überlädt aber dann nen in nen gescopten string was speichert und sich dann wunder das nix rumkommt - absolut triviales Problem das kein Forumnachfrage braucht usw. Nachtigall. ick hör dir trappsen...

    Hallo padreigh!

    Die folgende E-Mail wurde von DanC++ über Ihren Account auf C/C++ Forum gesendet. Wenn diese E-Mail unerwünschten Inhalt (Spam) enthält, dann kontaktieren Sie bitte den Administrator unter:

    post0001@c-plusplus.net

    Schicken Sie dazu bitte die ganze Nachricht, Header inklusive, mit. Bitte beachten Sie, dass Antworten auf diese E-Mail an DanC++ gehen.

    Die Nachricht finden Sie hier:

      
    Hallo!  
      
    Sorry, dass ich dich hier per E-Mail belästige...  
    Aber da ich ein C++-Code mit mehreren Klassen bzw. Header- und Sourcecode habe, wollte ich fragen, ob ich dir den evtl. per .zip-file schicken kann?  
    Ich habe ein kleines Problem in der main.cpp - der andere Code stimmt soweit und muss nicht verändert werden. Ausser eben: In main.cpp stimmt was noch nicht, und da ich noch nicht rausgefunden habe, woran es genau liegt, wollte ich dich fragen, ob du dir das evtl. mal anschauen könntest?  
      
    (Damit ich dir das .zip-file schicken kann, bräuchte ich noch deine E-Mail-Adresse..)  
      
    Liebe Grüsse und vielen Dank,  
    Dani
    

    @Dani - wenn du Fragen hast, frag im Forum, wenn du Probleme hast, poste ein Minimalbeispiel 🙂 - Falls Dani ein Bot ist und das allen aktiveren C++ Postern schickt - warn ich so mal alle 😉


Anmelden zum Antworten