Pālekt uz saturu


Foto
- - - - -

C++ algoritma adekvātums


  • Lūdzu pieslēdzies, lai atbildētu
6 atbildes uz šo tēmu

#1 Fliize

Fliize
  • Biedri
  • 122 raksti
  • Atrodos:Rīga
  • Intereses:Savādas :D

Pievienots 10 April 2012 - 16:53

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;



Nevēlies vairs redzēt šo reklāmu? Kļūsti par BOOT.Lv foruma biedru!

#2 gudolfs

gudolfs
  • Biedri
  • 741 raksti
  • Intereses::)

Pievienots 10 April 2012 - 18:26

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.

Šo rakstu rediģēja gudolfs: 10 April 2012 - 18:27


#3 Fliize

Fliize
  • Biedri
  • 122 raksti
  • Atrodos:Rīga
  • Intereses:Savādas :D

Pievienots 11 April 2012 - 10:52

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

#4 Inspektors Caps

Inspektors Caps
  • Biedri
  • 1,871 raksti

Pievienots 11 April 2012 - 12:22

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

#5 Fliize

Fliize
  • Biedri
  • 122 raksti
  • Atrodos:Rīga
  • Intereses:Savādas :D

Pievienots 11 April 2012 - 19:01

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

#6 melts

melts
  • Jaunbiedri
  • 11 raksti

Pievienots 23 April 2012 - 11:18

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.

Šo rakstu rediģēja melts: 23 April 2012 - 11:18


#7 Vilx-

Vilx-

    Māk izdalīt ar nulli vai cirvi. Tuvojas Tev.

  • Moderators
  • 9,368 raksti
  • Atrodos:Rīga
  • Intereses:Datori

Pievienots 23 April 2012 - 11:54

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;

Šo rakstu rediģēja Vilx-: 23 April 2012 - 11:58



 
 
 
 


0 Lietotāji(s) lasa šo tēmu

0 biedri(s), 0 viesi(s), 0 anonīmi(s) lietotāji(s)