jaresxeni 0 Napisano 3 Lutego 2014 Udostępnij Napisano 3 Lutego 2014 Witam, pisze program który ma podobne działanie jak komiwojażer ale nie tak skomplikowane. Cały kod napisałem problem jest taki ze nie wyświetla nazw miast w odpowiedniej kolejności, siedzę nad tym już kilka godzin zmieniam na różne sposoby warunki ale bez skutku. Będe bardzo wdzięczny za szybką pomoc. #include<iostream> #include<math.h> using namespace std; int main() { double wspol_x[6]={0,52.259,50.060,50.049,52.399,54.360}; double wspol_y[6]={0,21.020,19.956,21.999,16.900,18.639}; string nazwa[6]={"","Warszawa","Krakow","Rzeszow","Poznan","Gdansk"}; cout<<"Z kad zaczac ? (1-Warszawa;2-Krakow;3-Rzeszow;4-Poznan;5-Gdansk) \n"; int a,b,c,e,g,i,j; string f; double d,h; cin>>a; cout<<"Zaczynasz z miasta : "<<nazwa[a]<<endl; double odl[6]; double odl_ost[6]; string segr[6]; string pom[6]; int licz[6]={9,9,9,9,9,9}; g=1; i=1; j=1; segr[1]=nazwa[a]; for(b=1;b<=5;b++) { //licz[b]=a; for(c=1;c<=5;c++) { if(b==1) { d=sqrt(pow(wspol_x[a]-wspol_x[c],2)+pow(wspol_y[a]-wspol_y[c],2)); odl[c]=d; pom[c]=nazwa[c]; } else { if((wspol_x[c]!=0)&&(wspol_y[c]!=0)) { d=sqrt(pow(wspol_x[a]-wspol_x[c],2)+pow(wspol_y[a]-wspol_y[c],2)); odl[c]=d; pom[c]=nazwa[c]; } } } //-----w celu sprawdzenia poprawnosci--- cout<<endl; for(int s=1;s<=5;s++) cout<<odl[s]<<" "; //------------ for(e=1;e<=30;e++) { if(odl[g]>odl[g+1]) { h=odl[g]; odl[g]=odl[g+1]; odl[g+1]=h; f=pom[g]; pom[g]=pom[g+1]; pom[g+1]=f; //pom[g]=nazwa[g+1]; } /*if(odl[g]<odl[g+1]) { //pom[g]=nazwa[g]; }*/ if(g+1==5) g=1; g++; } //---w celu sprawdzenia poprawnosci----- cout<<endl; for(int s=1;s<=5;s++) cout<<odl[s]<<" "; //------------ //-------- cout<<endl; for(int s=1;s<=5;s++) cout<<pom[s]<<" "; //------------ /* if(b==1) { if(odl[1]==0) { segr[b+1]=pom[2]; odl_ost[b+1]=odl[2]; while(i<=5) { if(pom[2]==nazwa[i]) a=i; i++; } } } if(b>1) { if(odl[1]==0) { segr[b+1]=pom[2]; odl_ost[b+1]=odl[2]; while(i<=5) { if(pom[2]==nazwa[i]) a=i; i++; } } }*/ wspol_x[a]=0; wspol_y[a]=0; nazwa[a]=" "; while(i<=5) { if(odl[i]!=0) { if(b==1) { segr[b+1]=pom[i]; } else segr[b+1]=pom[b]; //segr[b+1]=pom[i]; odl_ost[b+1]=odl[i]; a=i; break; } i++; } i=1; for(j=1;j<=6;j++) { odl[j]=0; pom[j]=" "; } } cout<<endl<<"Wyruszasz z "<<segr[1]<<" do "<<segr[2]<<endl; cout<<" Z "<<segr[2]<<" do "<<segr[3]<<endl; cout<<" Z "<<segr[3]<<" do "<<segr[4]<<endl; cout<<" Z "<<segr[4]<<" do "<<segr[5]<<endl; cout<<" Z "<<segr[5]<<" wracasz do "<<segr[1]<<endl; return 0; } Cytuj Link to post Share on other sites
Luki91 157 Napisano 4 Lutego 2014 Udostępnij Napisano 4 Lutego 2014 Wybacz, ale czytelność kodu jest praktycznie zerowa. Cały alfabet zmiennych, pętla za pętlą a to wszystko w jeszcze innej pętli. Nie wiem czy ktoś z forum znajdzie wystarczająco dużo czasu i cierpliwości żeby to ogarnąć Refaktoryzuj kod, przede wszystkim dzieląc go na funkcje, ograniczając liczbę zmiennych i nadając im odpowiednie nazwy. Problemy z debugowaniem biorą się właśnie z tego, że kod jest nieczytelny, również wtedy popełnia się o wiele więcej błędów. Bardzo możliwe że podczas refaktoryzacji sam znajdziesz rozwiązanie Cytuj Link to post Share on other sites
Mistic92 68 Napisano 5 Lutego 2014 Udostępnij Napisano 5 Lutego 2014 Polecam http://pmd.sourceforge.net/ Cytuj Link to post Share on other sites
Recommended Posts
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.