`
Fliize

C++ algoritma adekvātums

7 posts in this topic

Fliize    1
Fliize

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;

Share this post


Link to post
Share on other sites
gudolfs    1
gudolfs

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

Share this post


Link to post
Share on other sites
Fliize    1
Fliize

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ē..

Share this post


Link to post
Share on other sites
Inspektors Caps    29
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...

Share this post


Link to post
Share on other sites
Fliize    1
Fliize

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 ;)

Share this post


Link to post
Share on other sites
melts    0
melts

 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

Share this post


Link to post
Share on other sites
Vilx-    41
Vilx-

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-

Share this post


Link to post
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!


  • Kas ir tiešsaistē   34 biedri, 2 Anonīmi, 71 viesi (Skatīt pilnu sarakstu)

    • PlayingTheSaint
    • ggg97
    • Zuxters
    • Yurijs
    • Ronalds
    • JEYRAZZ
    • kaads
    • Standfest
    • Tuubijs
    • laikamTak
    • Fitz
    • Gestapo
    • vvv
    • Jurkins
    • kurtka
    • Lin
    • saf
    • ivo
    • Imre
    • snukurins
    • Domugrauds
    • osscar
    • Firza
    • Kitai
    • rodrigez
    • kalkulators
    • Biete
    • Amazons
    • jema
    • DSTr
    • r.ed
    • Kostja_V
    • Kafija
    • LagerLV
  • Biedru statistika

    22 643
    Kopā biedri
    456
    Bieži tiešsaistē
    Bracins
    Newest Member
    Bracins
    Pievienojies