Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Perl: Lukujonot

JRokka [29.05.2020 02:47:07]

#

"Päätellään" ja täydennetään lukujono, jos se on kelvollinen.

%luvut = (1,11.0,2,244.0,3,477.0,4,0.0,5,0.0,6,0,7,0,8,0,9,0,10,0);
$ljono = 0.0;
$kertoja = 0.0;
$lisays = 0.0;

#Oletetaan lukujonon tyyppi kolmesta ensimmäisestä luvusta.
if ($luvut{3}/$luvut{2} == $luvut{2}/$luvut{1}){
	$kertoja = $luvut{3}/$luvut{2};
	$ljono = 1;
}
elsif ($luvut{3}-$luvut{2} == $luvut{2}-$luvut{1}){
	$lisays = $luvut{3}-$luvut{2};

	$ljono = 2;
}
#Katsotaan, onko lukujono kelvollinen ja täydennetään sitä lopuksi.
for ($x = 2; $x <= 10; $x=$x+1){
 if ($luvut{$x} != 0){
	 if ($luvut{$x}/$luvut{$x-1} !=  $kertoja and $ljono == 1){
	  $ljono = 0
	 }
	 if ($luvut{$x}-$luvut{$x-1} !=  $lisays and $ljono == 2){
	  $ljono = 0
	 }
 }
 else {
  #Täydennetään lukujonoa.
  if ($ljono == 1){
   $luvut{$x} = $luvut{$x-1} * $kertoja;

  }
  elsif ($ljono == 2){
   $luvut{$x} = $luvut{$x-1} + $lisays;
   }
}
}
#Näytetään tulos.
for ($x = 1; $x <= 10; $x=$x+1){
 print "$luvut{$x}\n";

}

tositoo [29.05.2020 16:39:19]

#

Tällaista ei usein muuten näe! Tämä on hyvin kommentoitu ja tehty.

Metabolix [29.05.2020 16:55:51]

#

tositoo kirjoitti:

Tämä on hyvin kommentoitu ja tehty.

Mihin perustat tämän kommentin? Minusta koodissa on todella paljon vikoja:

Jostain ihmeellisestä syystä on käytetty taulukon sijaan hashia. Tämän alustus on myös erittäin hankala lukea, kun siinä ei ole yhtään välilyöntiä.

Jos ensimmäisenä tai toisena lukuna on 0, ohjelma kaatuu.

Sisennykset ovat rumasti pielessä.

Muuttujan nimenä $ljono on tarpeettomasti epäselvästi lyhennetty. Lisäksi tämän muuttujan sisältönä numeroarvo ilman selitystä on huono idea. Kuvittele vaikka sadan tiedoston kokoinen projekti, jossa pitäisi jossain kohti tietää, mitä tarkoittaa ”$ljono == 2”. Ei ole mitään mahdollisuutta arvata, että se tarkoittaa aritmeettista lukujonoa (ja että 1 olisi geometrinen). Tätä varten olisi järkevää käyttää esimerkiksi nimettyjä vakioita ja kirjoittaa esimerkiksi ”$lukujonon_tyyppi == ARITMEETTINEN_LUKUJONO”.

Kommenttien mukaan ohjelmassa katsotaan, onko lukujono kelvollinen, mutta ohjelma ei mitenkään ilmoita tämän tarkastuksen tulosta.

Olen eräiden aiempien kommentoijien kanssa samaa mieltä siitä, että on aivan turha syytää kaikkia omia harjoituskoodeja sivustolle, jos ei aio ottaa opiksi annetusta palautteesta. Koodeja on tullut jo monta kuukautta, niitä on toistuvasti kommentoitu, ja kuitenkin samanlaiset huonot tavat jatkuvat.

tositoo [30.05.2020 14:29:43]

#

hmm... En tullut ajatelleeksi noita.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta