Jump to content

C++ algoritma adekvātums


Fliize
 Share

Recommended Posts

Izveidoju mazu algoritmu, kurš 10x10 masīvā "staigā" pa indeksiem, sākumā tiek izvēlētas koordinātas (x,y) ar random skaitļiem, tālāk staigāt var par vienu lauciņu uz jebkutu pusi, tajā pašā, kurā bija palikt nedrīkst (tas ir vienkārši bezjēdzīgi). Funkcija paņem vērtības un izdod jaunās, kas pārvieto "cilvēciņu" viena laukuma robežās. Ko jūs teiktu par šādu algoritmu? Ja nepieciešams, varu padalīties arī ar programmas pilno kodu ;)

 

 

 

 xn=x+ran(3)-1;
           yn=y+ran(3)-1;


                   while(yn>9 || yn<0 || xn>9 || xn<0 || xn==x && yn==y)
                   {
                       if(xn>9 || xn<0)
                       {
                           xn=x+ran(3)-1;
                       }

                       if(yn>9 || yn<0)
                       {
                           yn=y+ran(3)-1;
                       }
                       if(xn==x && yn==y)
                       {
                           xn=x+ran(3)-1;
                           yn=y+ran(3)-1;
                       }

                   }

               x=xn;
               y=yn;
               return x,y;

Link to comment
Share on other sites

izskatās pēc sū** - kods.

 

Man liekas, ka prātīgāk sākumā jā atrast kkādus random x un y, bet tālāk vienkārši piešķirt 4x iespējamām vērtībām (nu vai mazāk kā 4, ja nav 4) indexu no 1 līdz 4 (vai mazāk) un rēķināt rand(4) .... nezinu, cik tas efektīvi, bet tad būtu saprotamāks...

 

tu vari uztaisītu kkādu klasi "solis" , kurai ir divi propertīji - x un y.

Labots - gudolfs
Link to comment
Share on other sites

Pēc "sūda"? Paskaidrosi? Klases veidošana tikai visu lieki sarežģītu, jo šī ir klases funkcija. Man pat sāk likties, ka pietiks man ar savu izveidoto brīnumu, jo strādāt strādā labi, varbūt while ciklā visur salikšu ||. Masīva vidū pastāv 8 vietas, kur pārvietoties, stūros tikai 3, būtu diezgan nepatīkami visu laiku paŗbaudīt, vai tā vieta eksistē..

Link to comment
Share on other sites

Inspektors Caps

Adekvāti būtu vispirms paskaidrot priekš kam Tu taisi šo nenormāli sarežģīto "algoritmu". ;)

(yn>9 || yn<0 || xn>9 || xn<0 || xn==x && yn==y)

Vai, neskatoties palīgmateriālos, vari pateikt kā šī rinda izpildās? Šādām niansēm nelikt iekavas ir diezgan slikts stils...

Link to comment
Share on other sites

Pardon, apskaidrošu. Jaunā izveidotā vērtībā nedrīkt būt lielāka par 9 un mazāka par 0, jo tad iziet ārā no masīva izmēriem. xn==x && yn==y nedrīkst izpildīties, jo tad pozīcija netike mainīta. Drīkst būt xn==x || yn==y. Kamēr kāds no tiem nosacījumiem izpildās, tiek veidotas jaunas vērības. Centos rakstīt vienkāršāku, bet nu galīgi nesanāca :/ Kļūdas algortima darbā atradi pagaidām neesmu ;)

Link to comment
Share on other sites

  • 2 weeks later...

 while(yn>9 || yn<0 || xn>9 || xn<0 || xn==x && yn==y)

 

Vai šis gadījumā nenozīmē, ka cikls griežās tikai tikmēr, kamēr solis šķērso masīva robēzu vai paliek uz vietas?

Ja paņem, piemēram, masīva centru un nākamais solis sanāk uzreiz blakus, tad cikls beidzas,jo visi nosacījumi ir false.

Labots - melts
Link to comment
Share on other sites

Nē, lasi uzmanīgi. Tā ir funkcija, kura atrgriež nākamo pozīciju, kas joprojām ir masīvā, un nesakrīt ar iepriekšējo pozīciju. Cikls izpildās tik ilgi, kamēr randomi ģenerētā jaunā pozīcija ir "slikta".

 

Principā man izskatās pēc OK koda. Var uzrakstīt arī citādāk, moš īsāk vai lasāmāk, bet šim arī nav ne vainas. Bet kam Tev kaut ko tādu? O_o

 

Ā, vienīgi "return" laikam var atgriezt tikai vienu vērtību, nevis divas. Tā kā šis vairāk izskatās pēc pseidokoda. :)

 

Var mazliet novienkāršot:

 

do
{
xn=x+ran(3)-1;
yn=y+ran(3)-1;
}
while(yn>9 || yn<0 || xn>9 || xn<0 || (xn==x && yn==y))
return xn,yn;

Labots - Vilx-
Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...