私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇552:
Re:簡単なことだったらすいません。 [moon] 05/08 00:16

 └◇555:Re[2]:簡単なことだったらすいません。 [なず] 05/09 00:36
  └◇556:Re[3]:簡単なことだったらすいません。 [moon] 05/09 09:13
   └◇557:Re[4]:簡単なことだったらすいません。 [なず] 05/10 05:22
    └◇664:大変遅れました.... [なず] 07/13 23:51
     └◇665:Re:大変遅れました.... [moon] 07/14 09:10<-last


552● Re:簡単なことだったらすいません。[ moon ] 2003 05/08 00:16
> $a,$b,$c,$d,$e......と変数があったとして、この中で一番大きいものだけを選び、
というのはわかるのですが、
> もしそれが$bなら$bだけをチョイスする
の後半の「だけ」付近、特に「$bだけをチョイス」がいまいち何をやろうとしているのかがわかりません。
出来たら、具体的なデータを使用して「すべての変数を比べて行く方法」でのソースを載せてもらえるとわかると思うのですが。

以上を踏まえた上での意見ですが、$aなどを配列の要素としてmap→sortという流れが単純といえば単純ですが、変数の数が少ないのならばif〜elsif〜elseでやったほうがわかりやすいと思います。
スレッド一覧


555● Re[2]:簡単なことだったらすいません。[ なず ] 2003 05/09 00:36
> > $a,$b,$c,$d,$e......と変数があったとして、この中で一番大きいものだけを選び、
> というのはわかるのですが、
> > もしそれが$bなら$bだけをチョイスする
> の後半の「だけ」付近、特に「$bだけをチョイス」がいまいち何をやろうとしているのかがわかりません。
> 出来たら、具体的なデータを使用して「すべての変数を比べて行く方法」でのソースを載せてもらえるとわかると思うのですが。
説明不足な点申し訳ありません(^^;
やろうとしていることは、武器経験値が各種類にありまして、その中で一番大きいものを表示する。と言った具合です。
ソースの具体的なもの、というのは組めないでこまってますのでどう書いていいかわかりませんが、
$Axexp,$Bwexp,$Swexp,とすべての各武器経験値を記録しているので、その中で一番大きいものを探させる、といった具合なのです。
私の思いつきでは、
if ($Axexp > $Bwexp && $Axexp > $Swexp){$Axflag = 1}
elsif ($Bwexp > $Axexp && $Bwexp > $Swexp){$Bwflag = 1}
elsif ($Swexp > $Axexp && $Swexp > $Bwexp){$Swflag = 1}
.......(略)
if ($Axexp) {print qq |貴方は斧が得意です\n|;}
elsif ($Bwexp) {print qq |貴方はゆみが得意です\n|;}
elsif ($Swexp) {print qq |貴方は剣が得意です\n|;}
.......(略)

というかんじです。
(略)としたのは武器の種類すべてにあるので長くなるためです。(11種類です)
当然最初の条件式($Axexp > $Bwexp && $Axexp > $Swexp)の部分もすべてのパタンを書く、といったものでもっと他に処理の方法がないかなぁ?と思ったので質問させてもらったわけです。

> 以上を踏まえた上での意見ですが、$aなどを配列の要素としてmap→sortという流れが単純といえば単純ですが、変数の数が少ないのならばif〜elsif〜elseでやったほうがわかりやすいと思います。
map→sort という部分の理解度が乏しくどういうことなのかが、理解できていません(^^;
if文位しかまともに書けないので、配列?とかかなり苦手で....コツさえつかめばすんなりいくのでしょうけど。
なんとなくでもヒントいただければ有難いのですが.....。
(これでも説明不足だったら申し訳ありません)
スレッド一覧


556● Re[3]:簡単なことだったらすいません。[ moon ] 2003 05/09 09:13
> 当然最初の条件式($Axexp > $Bwexp && $Axexp > $Swexp)の部分もすべてのパタンを書く、といったものでもっと他に処理の方法がないかなぁ?と思ったので質問させてもらったわけです。

そういった感じの処理ならば、
  @x = ($a, $b, $c, $d, $e); # 新しい配列を作成する。
  @z = ('武器1', '武器2', '武器3', '武器4', '武器5'); # 説明
  $max = -1;
  $i = 0;
  foreach(0..$#x){
    if($x[$_] > $max){
      $max = $x[$_];
      $i = $_;
    }
  }
  print qq|貴方は$z[$i]が得意です\n|;
かな〜。

> map→sort という部分の理解度が乏しくどういうことなのかが、理解できていません(^^;
> if文位しかまともに書けないので、配列?とかかなり苦手で....コツさえつかめばすんなりいくのでしょうけど。
> なんとなくでもヒントいただければ有難いのですが.....。

上記をmap→sort形式で書くと、
  @x = 〜; # 同じ
  @z = 〜; # 同じ
  $i = -1;
  @x = sort {$b <=> $a} map {$i++; "$_<>$i";} @x;
  $i = (split(/<>/, $x[0]))[1];
  print qq|貴方は$z[$i]が得意です\n|;
となります。
簡単なデータを用意して、コマンドプロンプトで実行してみるとやっていることが掴みやすいと思います。

# 文法チェックをしていないので書き間違いがあるかもしれません。
スレッド一覧


557● Re[4]:簡単なことだったらすいません。[ なず ] 2003 05/10 05:22
> > 当然最初の条件式($Axexp > $Bwexp && $Axexp > $Swexp)の部分もすべてのパタンを書く、といったものでもっと他に処理の方法がないかなぁ?と思ったので質問させてもらったわけです。
>
> そういった感じの処理ならば、
>   @x = ($a, $b, $c, $d, $e); # 新しい配列を作成する。
>   @z = ('武器1', '武器2', '武器3', '武器4', '武器5'); # 説明
>   $max = -1;
>   $i = 0;
>   foreach(0..$#x){
>     if($x[$_] > $max){
>       $max = $x[$_];
>       $i = $_;
>     }
>   }
>   print qq|貴方は$z[$i]が得意です\n|;
> かな〜。
なるほどぉ〜。 途中の処理をどうしていいものか?ってことで配列にいれるのは避けて考えてたのですが、この例をみて理解できそうです。

> > map→sort という部分の理解度が乏しくどういうことなのかが、理解できていません(^^;
> > if文位しかまともに書けないので、配列?とかかなり苦手で....コツさえつかめばすんなりいくのでしょうけど。
> > なんとなくでもヒントいただければ有難いのですが.....。
>
> 上記をmap→sort形式で書くと、
>   @x = 〜; # 同じ
>   @z = 〜; # 同じ
>   $i = -1;
>   @x = sort {$b <=> $a} map {$i++; "$_<>$i";} @x;
>   $i = (split(/<>/, $x[0]))[1];
>   print qq|貴方は$z[$i]が得意です\n|;
> となります。
> 簡単なデータを用意して、コマンドプロンプトで実行してみるとやっていることが掴みやすいと思います。
上記のものと結果は同じだけど、書き方が違うってことでしょうか? おそらく流れくらいは理解できたとおもいますが(^^;
どちらのパタンも試してみて、動きを確認してみます。
(最近ぜんぜん時間が取れなくて、ご報告遅れたらすいません......)
ご返答ありがとうございます、助かりましたm(、、)m
スレッド一覧


664● 大変遅れました....[ なず ] 2003 07/13 23:51
あまりに古い事で申し訳ないのですが、教えて頂いた事が出来たのでご報告にまいりました。

当初はエラーが出てうまく動かずに細かく命令文等の勉強のしなおし等してたのですが、うまくいかずにそのうち改造にさける時間がなくなりつい最近まで放置状態でした(^^;
エラー原因はなんてことはなく、配列に使っていた文字「能」だというのがわかり、あとはあっさり動きました.....(;ー;)
でも1連のことで関連項目すべてを調べる結果となり、また少し知識がついたのと、やりたいこと1つ出来るようになって目標のものに近づきました。
ありがとうございましたぁm(、、)m

※古い記事の上げになってしまって申し訳ありません(^^;
(別記事にするのは避けたかったもので)
スレッド一覧


665● Re:大変遅れました....[ moon ] 2003 07/14 09:10
> あまりに古い事で申し訳ないのですが、教えて頂いた事が出来たのでご報告にまいりました。
>
> 当初はエラーが出てうまく動かずに細かく命令文等の勉強のしなおし等してたのですが、うまくいかずにそのうち改造にさける時間がなくなりつい最近まで放置状態でした(^^;
> エラー原因はなんてことはなく、配列に使っていた文字「能」だというのがわかり、あとはあっさり動きました.....(;ー;)
> でも1連のことで関連項目すべてを調べる結果となり、また少し知識がついたのと、やりたいこと1つ出来るようになって目標のものに近づきました。
> ありがとうございましたぁm(、、)m
>
> ※古い記事の上げになってしまって申し訳ありません(^^;
> (別記事にするのは避けたかったもので)

わざわざ報告をありがとうございます。

「能」ですか・・・。
見えないところの"\"って嫌ですよね。(笑)

# EUCにすればこんな些細なことで悩まなくとも良いのはわかっていますが全てを変換するのは面倒ですしね。
スレッド一覧

CGIROOM