小学校4年生(10歳)の息子がパソコンでゲームのプログラムを作ってみたいと言っています。まだ早いと思うのですがもし作るとしたら何を勉強すればよいのでしょうか?ソフト等必要な物は何でしょうか?本とかあれば紹介してください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (9件)

参考にしてください



http://squeakland.jp/

スクイークは、ビューポインツリサーチが中心となって開発しているオープンソースのソフトウェアです。特に初等、中等教育に適したイートイ(eToys)と呼ばれるプログラミング環境を備えており、複雑で分かりにくい手順によらず、誰でも自由にコンピュータを操作できます。
イートイでは、文字によるコンピュータ言語ではなく、自分で描いた絵をマウスで操作することでプログラムします。たとえば、車とハンドルの絵を描き、それらの関係を命令タイルを並べて表すことで、ハンドルを回して車を運転できるようになります。この仕組みは単に面白いだけでなく、同じ方法で数学や物理のシミュレーションを行えうことができます。これは子どもたちの科学リテラシの習得に役立ちます。
スクイークは、アメリカをはじめ、ドイツ、スペイン、ネパール、韓国など全世界で使われており、日本では、京都、東京、鳥取、長野、三重などの小中高校の授業で採用されています。また、スクイークを用いた子ども向け科学コンテストも行われています。
    • good
    • 0

ゲームを開発するにはまず開発言語の選定です。

次のものがあります。次のものは全部無料です。
1:【HSP】 ネット上にたくさんの講座があり高度な2Dゲームだけでなく実用ソフトも簡単に作成できる。但し、3Dゲームの開発がかなり難しい。利点としてDirectxSDK不要などがあり。即開発に取り掛かれる。
分からない事は質問できます。URLはキーワード検索で。

2:【LGP】 やってる人は少ないが、HSP同様高度なゲームが簡単に作成できる。2Dだけでなく3Dにも対応している。但し、3DはHSPよりは扱い易いと思われるが、機能低し。ゲーム専門の開発言語。DirectxSDK不要で即開発に取り掛かれます。分からないことは掲示板で質問できます。URLはキーワード検索で。

3:【simpleXやUDX】サイトは閉鎖寸前ですが、サポートサイトを引き継いだサイトがあります。C/C++で開発します。C言語は無料のボーランドCでできます。URLは下の参考URLです。SimplexやUDXとは2つともC言語用のゲーム制作用ライブラリです。簡単さ、習得の容易さなど現在日本で最強の開発環境です。難しいはずの3Dゲームも簡単にその人のレベルに合わせて作成できます。サンプルプログラムが欲しければ「過去ログBBS」をダウンロードすれば分かりやすいし、流用もできます。必要なものは引継ぎ先のサイトでダウンロードできます。もともとゲームは普通C/C++で開発されますので、これで開発(Cで開発となれば)すれば自慢できます。もちろん、ライブラリを使用しているのでほんとはズルしてるわけですけどね。このゲーム制作用ライブラリを使う場合はWindowsプログラミングの知識やDirectxの知識は全く必要ありません。但し、C言語の基本的な知識のみ必要です。あとはゲームを作る技術ですが、これは独学でできます。というかゲーム作る入門書、最近でてきましたが、読んでも全く分かるわけありません!僕はバリバリゲーム(最近ではUDXで3Dゲーム)作ってますが、いまだにプログラム本は理解できません。プログラム歴12年なのですが。僕は5年間で趣味で本格的ゲームを51本作成した実績があります。雑誌にも載りました。これは僕が凄いのではなく、HSPやSimplex、UDXがすごいのです。本は開発言語の文法書のみ買うにとどめたほうがいいです。よく、「簡単!ゲーム作成入門」とかありますが、内容はわからないですよ。2Dだけでなく本格的な3Dゲームを開発できる僕でも分からないのですから。特にDirectXやWindowsプログラミングは必ず挫折します。そもそもゲーム専門学校でもついていけない人がいっぱいいるそうですね。本来のゲーム開発はそれ程難しいのです。この現実を打破する為にゲームライブラリやHSP,LGPが存在します。HSP関連書籍なら内容は理解できるかもしれないし、HSPやるなら買ってもいいかもですね。でもほんとはUDXやsimplexがいいです。Cで開発するからです。Cの勉強になり将来コンピューター関連の職につく際、アピールポイントになります。但し、HSPやLGPでは逆にマイナスアピールになります。HSPやLGPはあくまでもパソコンできない人の為のものだからとの認識が世間にありますから。但し、SimplexとUDXはDirectxSDK8が必要です。これが問題だったりします。2005年8月現在、マイクロソフトからダウンロードできるSDKは9だけです。UDXならSDK9でもできるかもしれませんのでお試しください。Simplexでは無理です。
ゲームの勉強はまず画像表示→その画像を動かすなど基本的なことから始めてください。熱意があれば独学で十分できるようになります。VBやJAVAなどは難しいのであえて手をださないほうがいいです。上記の開発言語で十分できます。しかも無料ですよ。では!
    • good
    • 0

いま中2ですが小学生のころ僕もゲームが作りたくてプログラムの勉強をはじめました。

ソフトはVisualBasic6.0です。学割ききます。僕は当時お年玉で買えたので1万円前後だったと思います。
良い入門書は技術評論社の「かんたんプログラミングVisualBasic6基礎編」です。大きな書店なら大体置いています。実用プログラムを作りながら学べるので小学生でも楽しくできるはず。
ゲームプログラムの本はインプレスの「VisualBasicビジュアルプログラミング実践テクニック」。この本はゲーム作り全般やよいツールの紹介までしています。とても良い本なのですが残念ながら絶版になっている可能性があります。もし書店に無かったら郵送で貸しましょうか?
ある程度慣れたら、C++やDirectXを試してください。わかるととても楽しいです。
あと専門書は小学生の立場から見るとなかなか高額です。

参考URL:http://www2.gihyo.co.jp/books/bookinfo.asp?ID=503
    • good
    • 0

以前(昨日)書き込んだdenden_keiです。


昨日は調子に乗ってえらそうなことを書いてしまいましたが、私もBasicはちょっと「かじった」程度の初心者です。必要に応じて、簡単なツールを作る程度です。
カテゴリーも移動したことですし、私よりも桁違いにプログラミングができる方々が回答していただけることでしょう。
がんばってください。
    • good
    • 0

通り掛かりの者です(^^)


私(20代)もプログラミングに初めて触れたのは小学生のころです。
当時はPC8801MkIIでプログラム領域が64kBもあることに感動しました,,,
と昔話をはじめるときりがないので、次に行きます。

小学4年生でも早くはありません。言語の学習は早いほど楽です。

>作るとしたら何を勉強すればよいのでしょうか?
私のお勧めはやはりBASIC言語です。わかりやすいです。
不幸にも情報系などプロの世界ではあまり地位が高くないみたいですが、
普通の人が、ちょっとしたことをするにはBASICがいいです。
いい解説本も多いです。(他の言語では、なかなかいいものに巡り合えません)

>ソフト等必要な物は何でしょうか?
無料のものは、「n88Basic for Windows」があります。vector等で
探すと見つかると思います。ただ、グラフィック系もn88Basicプラスアルファ程度ですので、当時を知らないお子さんには不満かも。
できれば、Visual Basicを買うのが王道ですね。
アカデミックパックで買いたいですが、小学生でもOKでしたっけ?

>本とかあれば紹介してください。

Visual Basicをやる場合、大きく分けて2種類が考えられます。基礎を理解するための解説本、そしてゲームなどの「つくりたいプログラム」のソースがのっている本です。両方それぞれ重要です。
なお、n88BasicForWindowsの場合、準拠した解説本はあまりないと思います。当時の解説本が手に入るとよいのですが,,,。そういえばセンター試験にでるBasicプログラムはn88Basic的なものですので、そちら方面をネット等でさがせば見つかるかも(未確認)。

解説本は、コマンド1つ('beep'だけ、とか)からはじまり、コマンドをひとつずつ
説明しながらプログラムを拡張していく、という演習形式のものがお勧めです。書店で比較して、理解しやすいと思ったものにしましょう。

後者のプログラム集は、「ゲームのプログラムを作ってみたい」という目的を満たすものです。いきなり独自のゲームは難しいので、まずは書かれているゲームプログラムのソースをひたすら打ち込んでみましょう。ちゃんと動くとけっこううれしいものですよ。
こちらの本も、できるだけ解説が丁寧なものを選びましょう。

解説本の演習は、重要ですがお子さんにはあまり楽しくないでしょう。プログラム集は、はじめ内容はさっぱり分からないかもしれませんが、とりあえず「自分で打ち込んだプログラムが動作する喜び」を体験してもらいましょう。少しずつソースの意味が分かってくれば最高です。2つの本を並行して勉強(そんなに堅く考えなくてよいですが)していくのがよいでしょう。

英語などを習うのと同じで、「文法の学習だけではつまらない。実際に使えるから楽しい。でもそれには文法を知っていないとうまくいかない。」ということだと思います。気軽な気持ちでやりましょう。

なお、お子さんはまだ小学生なので、英語をやっていないのでコマンドのつづりが
分からずちょっと苦労する(例えば、「ファイルズ」と聞いて「files」というつづりが思い付かない)とおもいます(実体験)が、大丈夫。すぐ覚えられます。

最後に、BASICを使う人が1人でも増えるのは非常に嬉しいです。プログラムが動いた時の喜びをぜひ体験してください。(できればその喜びを機に理系(情報系に限らず)に進んでくれるとうれしいですね。個人的には。)がんばってください。
    • good
    • 0

Macintosh用しかないみたいですが、Hypercardを使うと比較的簡単です。

「絵の中のあちこち隠されているボタンを押すと、いろんな画面に変わる」というようなゲームなら、すぐにできますし、なかなか楽しい。
私の知人の娘さんは、小2の時に、弟に「あいうえお」を教えるためのソフトを作ってました。文字をClickすると、その文字で始まるものの絵が描いてある画面に飛ぶという仕掛けです。
(Hypercardはカラーが扱えないのが欠点です。)

さて、このようなゲームで良ければ、HTML(ホームページを作る言語)でもある程度はできますよね。これならWindowsでも大丈夫。
まずはこの辺から、というのはどうでしょうか?その次はJAVAかな?
    • good
    • 0

tullioさんの意見とほぼ同等ですが、もしゲームで遊びたくてBASICでゲームを作りたいのであれば、昔は「BASIC MAGAZINE」なる雑誌がありましたね。


その雑誌は読者が自分でソフトを作り、そのプログラムを投稿して批評してもらうのですが、私はそれをそのまま打ち込んで、よく遊んでいたものです。(^^;
今はどうなってるのか分からないのですが…。
まずは「習うより慣れろ」方式もありかもしれません。そして「なんでこれはこういう動きをするのだろう?」「こういう動きをさせるためにはどうすればよいのか?」等、自分でアレンジをするようになり、最終的に自分で好きなように作れるようになる…まあ、希望的観測かもしれません。

それはそうと、マシンはすでにお持ちなのでしょうか?
そうであれば、そのOSなどを補足として付け加えていただけると回答がしやすくなるかと思います。
    • good
    • 0
この回答へのお礼

返事ありがとうございます。
マシンはAptivaでOSはWindows98SEです。
確かに昔はBASICの雑誌とかがありプログラミングのサンプルを見たような気がしますが、いまどきのプログラミングの雑誌は専門的でゲームみたいな物をちょっと作ってみるというようなのが無いように思いますが入門書的なものをご存知でしたら教えてください。

お礼日時:-0001/11/30 00:00

 もう10歳になったのなら、早すぎると言うことは全然ありません。


 こういうことは大人になってからでは遅すぎるので、興味があるならば、経済的余裕が許す限りやらせるべきです。(これは何を勉強するにしても一緒ですよね)
 とりあえずおすすめはVisual BASICです。もともとBASICは初心者向けに開発された言語なので、俺が中学2年のときにやってましたけど、そう難しいこともなく頭に入りました(さすがにあの当時は、今とは状況が違いましたが)。

 ヤフーなどのオークションサイトで、ソフトウェアを安く売ってあるかもしれません。もし買うときはそういうところや、中古などをさがした方が財布的に助かるでしょう(笑)
 そういう場所で検索するときは「Visual BASIC」あるいは「ビジュアル ベーシック」で検索します。
    • good
    • 0

私もプログラミングをはじめたのは10歳の頃でした.


現在は大学も会社もコンピュータ関係です.

色んな意見があるかと思いますが,私はBASICから入るのが良いと思っています.BASICのしかもインタプリタがフリーでありますので,それを準備すれば良いかと.
変数の概念など,将来的に数学の勉強にとても役立ちます.
logoという手もありますが,ゲーム作りは難しいのではないでしょうか.
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qコード変換(漢字)のサンプルプログラム

始めまして!
困っています、御力添えをお願いします。
UNIX(SouOS5.8)でのコード変換(SJIS→EUC、EUC→SJIS)のコーディング(サンプルソース:C言語)をどなたか教えて頂けないでしょうか?
お願いします。

Aベストアンサー

下記URL参照。

参考URL:http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.html

Q自作HP内の検索プログラムはどのように作ればいいのでしょうか

自作のshopを作ったのですが

shop内の検索プログラムを作るにはどのように作ればいいのでしょうか?

Aベストアンサー

フリーソフトのNamazuとかが有名ですね。
http://www.namazu.org/index.html.ja
あるいは、googleにキャッシュされているならgoogleを利用する手も有ります。

Qブログ等で公開されているサンプルコードの著作権について

個人の方などが、ブログ等で公開されているサンプルコードについてですが、

あるプログラムの解説サイトで見つけた、サンプルコードと、
同じコードで解説しているサイトを2つ発見したので、こういうのって、法律的に、どういう扱いなのだろうかという疑問です。

Aベストアンサー

プログラミング言語や規約つまりプロトコルは対象外だけど、ソースは保護対象なんだってば。
当たり前だよ。プログラミング言語使って生み出された創作物なんだもん。
この辺、IT系資格の参考書でもたまに間違いを見かけるからわかりにくいんだろうね。

私は法学部卒の現役エンジニアです。
ソースコードが著作物なのは断言します。

QRubyでプログラムを作りたいけどどうすればよいのかわからない!

私はRubyを使ってwebページで使うプログラムを作りたいと思っています。
ですが、どう勉強すればよいのか分かりません。
教えてください。

ちなみに、私はホームページ作成の知識は少しあります。
CGIの設置も簡単なものなら出来ます。

Aベストアンサー

>オススメの本がありましたら教えてください。

たのしいRuby
http://www.amazon.co.jp/gp/product/4797336617/

Q数学演算のサンプルコード集のあるサイトを探しています(VB6)

VB6で数学演算のソースコードのサンプル集を探しています。

例えば今回は3次元のベクトルをX,Y,Z軸周りに任意の角度だけ回転する行列をプログラムしたいので、アフィン変換のサンプルなんかないかと探しています。いいサイトがあれば教えていただけませんでしょうか。

よろしくお願いします。

Aベストアンサー

まったくの素人なので、
参考になるかはわかりませんが、
検索したらこんなのがありました。

参考URL:http://files.codes-sources.com/fichier.aspx?id=37873&f=mdlMath.bas

QPerlで早いプログラムを作りたい

perlの初心者です。
一つの配列の構成要素が100~1000のものが1000個ほどあります。
ある配列の一つの要素が他の配列に何個づつあるかを調べています。
作ったプログラムは次の三つですがとても遅く、もっと早い方法があれば
教えてください。
1.foreach $a(@hairetsu1){
    $n=0;
    foreach $b(@hairetsu2){
      $n++ if $a =~ $b;
    }
  }
2. foreach $a(@hairetsu1){
    $n=grep(/$a/,@hairetsu2);
 }
3. for($i=0;$i<length(@hairetsu1);$i++){
   $n=0;
   for($j=0;$j<length(@hairetsu2);$j++)
     $n++ if $hairetsu1($i) =~ $hairetsu2($j);
   }
 }
上が一番早く下に行くほど遅いですがあまり違いはありません。
よろしくお願いします。

perlの初心者です。
一つの配列の構成要素が100~1000のものが1000個ほどあります。
ある配列の一つの要素が他の配列に何個づつあるかを調べています。
作ったプログラムは次の三つですがとても遅く、もっと早い方法があれば
教えてください。
1.foreach $a(@hairetsu1){
    $n=0;
    foreach $b(@hairetsu2){
      $n++ if $a =~ $b;
    }
  }
2. foreach $a(@hairetsu1){
    $n=grep(/$a/,@hairetsu2);
 }
3. for($i=0;$i<length(@hairetsu1);$i++){
...続きを読む

Aベストアンサー

#1 の nipotan です。

> 「=~」「==」「eq」いずれも同じと思っていました。

これらの違いを正確に理解しないと、根本的に手を加えるたびに脳内に未曾有の混乱を招くだけです。
=~ は左辺スカラーを対象にパターンマッチングや置換に使う (正規表現)
== は左右の値が数値的に等しいかを比較する比較演算子 * (01 == 1) は True *
eq は左右の値が文字列的に等しいかを比較する比較演算子 * ("01" eq "1") は False *
基本なので「はじめての~」系の本をお読みになって理解を深めたほうがいいと思います。

> やっていることは@hairetsu1(asd,dfg,zxc・・・・これが100~1000続く)の配列
> が1000配列程度あって、たとえば@hairetsu1の要素dfgが@hairetsu2にあるかあれ
> ばいくつあるかということを調べたいのです。中身は数字ではありません。

あ、そういう事だったんですね。根本的に勘違いしていました。
ただ「あれば」というのを先に調べる為に、結局は配列要素全体から対象の存在をさらって調べることになるので、「あるというのがわかってるんだから端っからカウントを始めたほうが早い」と考えられます。

> ># 重複チェック用テンポラリハッシュを生成
>
> というのが使えそうですがよく理解できません。
> なぜハッシュを使うのかよくわかりませんが
>
> next if exists $tmp{$a};
>
> の$tmp{$a}は$aがあったら数えないで次にいくということですか
>
> $tmp{$a} = 1;
>
> これはなにをしているのですか。本からの理解ではkey $a の値は1
> となってしまいますが・・・・

これは、「チェックしたか否か」を見るためのフラグ (Flag) です。あるかないかのブール値 (Boolean) なので、値はなんでもいいです。一応ワタシの作ったのはフラグなので実際にカウントした数値 ($n) は入りません。別に入れてもいいんですが、質問文にある 1. 2. 3. は、それぞれ $n の値を全て上位のループのたびに Flush ($n = 0 したり $n に新規代入したり) しているので、「恐らくループ内で画面なりファイルなりに出力している部分があって、それを省略している」んだろうと思ってましたから、単純にワタシはフラグをつけていっただけです。別に 1 じゃなくても $n でも undef でもいいんです。exists を使ってるので「かつて、そのハッシュの key は定義されたことがあるか」というのをチェックしているだけです。ハッシュを使わないと (例えば配列を使ったりすると) 今まで定義したリストを総ざらいしてチェックさせないといけないので、ループの後半に行けば行くほど異様に時間がかかります。

例えば極端な例を挙げると、以下の配列で、

my @a = ('教えて!', '教えて!', '教えて!', '教えて!', '教えて!', 'goo');
my @b = ('教えて!', 'goo', 'OK', 'web', 'hello', 'world', 'good', 'morning');

@a と @b の要素をチェックするのに、上記のように @a に重複項目が沢山あった場合があったとして、

foreach my $a(@a){
:
:
foreach my $b(@b){ ... }
:
:
}

というループ構造を作ったとします。foreach my $a(@a){ ... } (以下、"外のループ" とする) のループブロック ( { と } とで囲まれた範囲をブロックといいます) が一度実行されるたびに、foreach my $b(@b){ ... } (以下、"内のループ" とする) のループ (ブロック内を 8 回ループする) が行われるのはわかりますよね。
外のループのブロック一度目に '教えて!' が比較対照となり、内のループのブロックが 8 回ループされます。外のループが二度目のループに入った時、比較対照が再度 '教えて!' なので、もう @b に何個あるのかの答え (1 個) はわかってるのにも関わらず、内のループが 8 回ループします。外のループのループが 6 回行われるので、内のループのブロック内部は、48 回実行されます。
あえて「既にチェックしたかどうか」を調べて、チェック済みなら内のループのブロックを通過させず、外のループを次に進めること…

# 重複チェック用テンポラリハッシュを生成
my %tmp = ();

# 外のループ (6 回実行される)
foreach my $a(@a){
# チェック済みかどうかの判別
next if exists $tmp{$a};

# どうせこれからチェックするのは確実なので、
# チェック済みをあらわすフラグ値を設定
# (別にチェック後でもいいが。。。)
$tmp{$a} = 1;

# 内のループ (8 回実行される)
foreach my $b(@b){ ... }
}

によって、内のループのブロック内部をトータルで 16 回しか実行されずに済みます。
なので重複がある場合は、こういう手段を使えば、内のループの処理回数や処理速度を節約できます。

ワタシが質問の意味を根本的に誤って解釈していたので、「重複がいくつかある可能性が高い」という場合に、こういう方策が使えますが、逆に「重複が殆どない可能性が高い」場合には、こういう方法もネックになる可能性もありますから、それは実データがどうなっているのかを理解されている場合に使われるといいと思います。

で、長々と説明してしまったので結論にいきますがこういったケース (文字列の数を配列内部からチェックする場合) には、配列を一旦ソートして、どっちの文字が文字 (コード) 的に上位 (例えば昇順ソートなら A は B より下) なのかを見たほうが早いです。なぜかというと、ソートした配列同士を比較する際、外のループが "XYZ" なのに、内のループでの比較対照が "ABC" であれば、違うのは当然の事、「かけ離れてすぎて比較する事自体が無駄」です。配列がソートされているので、内のループの先頭要素が "ABC" だったとして、次の要素が "DDD" だったとしたら、"XYZ" と比較させるには "DDD" から調べていったほうが上記無駄を省いているぶん、「まだ処理は早い」でしょう。
仮に内のループの配列要素の末尾から 3 番目ぐらいの要素が "XXX" だった場合 (比較対照が近似値だった場合)、ソートされている事を考えると、次の要素が "XYZ" かもしれないという期待が持てます。なら、末尾 3 番目から末尾 "XYZ" を超えない範囲を調べる (超えたら調べ終わる) という方法を取り、内のループを「最小のループ回数」で調べるという方法を使えば、格段に処理が早くなります。
これを一般的に「近似アルゴリズム」と呼びます。

---
# 両配列をソートする
@hairetsu1 = sort @hairetsu1;
@hairetsu2 = sort @hairetsu2;

# 外のループの前回合計値を求めた比較対照文字列を格納する変数を宣言
my $last;

# 合計値を格納する変数
my $n = 0;

# 前回合計値を格納する変数
my $lastn = 0;

# 外と内のループを複合する (外のループ用添字 $i, 内のループ用添字 $j)
# ブロック終了後の実行式はあえて書かない
for(my $i = 0, my $j = 0; $i < @hairetsu1; ){

# 今回の比較値が前回の比較値と同じだったら、調べる必要がないので
# 画面に出力後、次の比較値を取り出す
if($hairetsu1[$i] eq $last){
output($last, $lastn);
$i++;
next;
}

# 比較対照同士を、文字列的にどちらが上位かを調べる
# 同じなら 0、左辺が大きければ +1、右辺が大きければ -1 になる
my $diff = $hairetsu1[$i] cmp $hairetsu2[$j];

unless($diff){
# 同じだった場合の処理

# 合計値に加算
$n++;

# 添字加算し、内のループを次の比較値に移す
$j++;

# この時、内のループの要素数を超えた場合はこれ以上比較する対象がないので
# 画面に出力後、全ての比較処理を終了
# (外のループがまだ残ってる可能性があるので、画面出力用変数代入をして続ける)
if($j >= @hairetsu2){

# 今回の結果をひとまず出力
output($hairetsu1[$i], $n);

# 次のチェック値は今後チェックしないので、出力用に代入

# 現在の結果
$lastn = $n;

# 現在のチェック文字列
$last = $hairetsu1[$i];
}
}elsif($diff == 1){
# 左辺が大きかった場合の処理 (内のループが次に進みます)

# 右辺 (内のループ) は次の要素を比較するように内のループを次に進める
$j++;
}else{
# 右辺が大きかった場合の処理 (外のループが次に進みます)

# 右辺が大きくなったという事は、内のループを進める必要がないので、
# これ以上の合計加算処理がない。なので画面に出力
output($hairetsu1[$i], $n);

# 次のチェック値が今回と同じだった場合用に、"前回合計値" として、
# 現在の結果を $lastn に代入
$lastn = $n;

# 次のチェック値の合計をリセット
$n = 0;

# 次のチェック値と同じかを調べる為に、"前回対象文字列" を代入
$last = $hairetsu1[$i];

# 外のループを次に進める
$i++;
}
}

# (文字列, 合計数) を受けて画面上に出力するサブルーチン
sub output{
my($val, $sum) = @_;

# 別にファイルに出力しようが画面上に出そうがは自由なので、とりあえず
# 画面に出してみてます。
print $val.' は '.$sum.' 個ありました'."\n";
}
---

…ちょっとサンプリングしてみましたが、"仕様先行型" じゃなくて、"発展型" でコーディングしてその後コメントをつけたので、完全動作かどうかのテストはしてません。でもじっくりコードを追ってもらえればわかると思いますが、比較回数は「必要最小限」に抑えられているので、無駄なループ、無駄な比較が行われないようになってます。コメントを参考にしてこのコードを追ってみて、「近似アルゴリズム」の原理を研究して、お手元の環境に一番適した方法にカスタマイズし、動作確認してみてください。原理研究には十分役立つサンプルに仕上げられたかなと思います。

ちなみに、配列の順序通りに合計個数を表示したかったら、sort の際に配列のソートした後の順をインデックスとして別配列に順番で並べ、出力はバッファリング (他の配列に蓄えるとか) してインデックスに合わせて並べ替えて出力するようにすればいいと思います。上記 output サブルーチンをカスタマイズするとか、sort をカスタマイズ (自分で、数あるソートアルゴリズムのどれかを用いて、sort 結果と順番のインデックスを出す関数を作ったほうがいいと思います) すれば、そういう事も容易に行えます。

また、比較させるための配列が数多いとの事ですが (1000 配列もあるなら、何時間もかかってませんか?) その配列全体を、ループさせるためのループ構造を上記のチェック機構の上位につくらなければいけません。
それを実現するために、@hairetsu1 とか @hairetsu2 とかの変数を新たに作るのではなく、リファレンス (ハードリファレンス) や無名配列を用いる方法を知っておいたほうがいいかもしれません。

---
@hairetsu = (
['I', 'am', 'a', 'Japanese', 'Programmer'],
['You', 'are', 'an', 'American', 'Programmer'],
['He', 'is', 'a', 'Korean', 'Programmer']
);

print $hairetsu[2][3]; # 結果は Korean
---
@tmpA = ('I', 'am', 'a', 'Japanese', 'Programmer');
@tmpB = ('You', 'are', 'an', 'American', 'Programmer');
@tmpC = ('He', 'is', 'a', 'Korean', 'Programmer');
@hairetsu = (\@tmpA, \@tmpB, \@tmpC);

print $hairetsu[1][2]; # 結果は an
---

このような方法を用いれば

@allArray = (\@hairetsu1, \@hairetsu2, \@hairetsu3, .... \@hairetsu1000);
for(my $subscript = 0; $subscript < @allArray; $subscript++){ ... }

で、for ブロック内で一回目は、$allArray[$subscript] が @hairetsu1 の実体を指し、$allArray[$subscript + 1] が @hairetsu2 の実体を指します。
この方法は中級者レベルだと思うので、「はじめての~」系には載ってないかも知れませんが、知っておいて損は絶対にないです。


以上、超長くなりましたが、回答とアドバイス、ご理解いただけましたでしょうか。
# 自己最長回答間違いなし。

#1 の nipotan です。

> 「=~」「==」「eq」いずれも同じと思っていました。

これらの違いを正確に理解しないと、根本的に手を加えるたびに脳内に未曾有の混乱を招くだけです。
=~ は左辺スカラーを対象にパターンマッチングや置換に使う (正規表現)
== は左右の値が数値的に等しいかを比較する比較演算子 * (01 == 1) は True *
eq は左右の値が文字列的に等しいかを比較する比較演算子 * ("01" eq "1") は False *
基本なので「はじめての~」系の本をお読みになって理解を深めたほうがいいと思います...続きを読む

QHead First PHPサンプルコード文字化け

よろしくです。
下記のphpの本を参考にプログラムを勉強しているのですが、
サンプルコード(完成品)の日本語部分(DBがソースの日本語部分全て)がすべて文字化けしてしまいます。
この本は文字化け対策を強みにした本なのですが、実際のサンプルコードがこんな状態なので非常に困っています。
例えば、表示サイトページ内に3時間というデータが表示される予定だとすると、3??(ハテナマーク)のように表示されます。
ちなみに文字化け後、ブラウザ、DB、phpの文字コード設定はutf8統一であることは確認しました。apacheの文字コードはわかりません。
テスト環境は、自宅のローカルサーバーと、某レンタルサーバーの2つでどちらでも文字化けです。

この本を試した方、もしくはちゃっちゃっと下記サイトからサンプルをとって試していただける方、どうかレスをお願いします。
著書内ではこれでどうだというくらい日本語対策をうたっているのに、全サンプルがNGとは、あまりに不思議な現象で、とても困っています。
どうかよろしくお願いします。

『Head First PHP & MySQL――頭とからだで覚えるWebアプリケーション開発の基本』
Lynn Beighley, Michael Morrison 著、佐藤 嘉一 訳
2010年03月 発行
672ページ
ISBN978-4-87311-444-6

http://www.oreilly.co.jp/books/9784873114446/
関連ファイル ー サンプルコード
に本の中で使われている全てのサンプルが入っています。

よろしくです。
下記のphpの本を参考にプログラムを勉強しているのですが、
サンプルコード(完成品)の日本語部分(DBがソースの日本語部分全て)がすべて文字化けしてしまいます。
この本は文字化け対策を強みにした本なのですが、実際のサンプルコードがこんな状態なので非常に困っています。
例えば、表示サイトページ内に3時間というデータが表示される予定だとすると、3??(ハテナマーク)のように表示されます。
ちなみに文字化け後、ブラウザ、DB、phpの文字コード設定はutf8統一であることは確認しま...続きを読む

Aベストアンサー

表示させるだけじゃねーじゃん。

確かにデフォルトだと文字化けした。
でも文字化け回避できた。

--------------------------------
// Connect to the database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_set_charset($dbc, "utf8");// ←追加

QPrelは何を作る・何をする言語?

知人に「Prelは簡単だから勉強してみたら?」
と言われたのですが
Prelで何ができるのかわかりません。

今はhtmlで簡単なHPを作る知識がありますが
Perlを習得することで
今より高度なHPを作ることができるのでしょうか?

Aベストアンサー

Perlはなんでもできる半面、ある程度習得しないとなにもできない言語です。
質問者さんのレベルにもよりますが、すくなくとも「簡単」とは
言い難いので、習得するつもりなら難しい前提で気合いをいれて
取り組んだ方がいいでしょう。

別回答にもありますが、Perl覚えるくらいならPHPの方が難解さは低いと思います
あとは刑務所でも教えてると言われているRubyとか・・・

Qホームページや書籍などのサンプルコードは動かないものばかりでしょうか?

ホームページや書籍などのサンプルコードを試して動かしてみても、動かないサンプルコードばかりだと思いますが、同じことを考えている人はいらっしゃいますか?

何か…ホームページや書籍などのサンプルコードが動かないということは、そのサンプルコード自体の問題というよりは作者の問題と思いますが…。なぜなら、1件のホームページや1冊の書籍で、このサンプルコードが動かなければ別のサンプルコードが動かない可能性が高いです。逆にこのサンプルコードがちゃんと動くということは、他のサンプルコードも動く可能性が高い。経験談で感じた限りです。

要するには作者の解説力次第になりますと思いますが、どうでしょうか?どんな簡単な言語でも解説力がなければ取っ付きにくく、どんな難しい言語でも解説力があれば取っ付きやすいものでしょうか?

何か解決法とかありますでしょうか?ご回答をお願いします。

Aベストアンサー

ちょっと抽象的かも、です。

>ホームページや書籍などのサンプルコードが動かないということは、そのサンプルコード自体の問題というよりは作者の問題と思いますが…。

それは「あり得ます」。
ただし、その前に自分の環境をチェックした方がいいでしょう。
ヴァージョン違い、なんてのは他のお方が仰ってる通りなんですが、他にも原因は色々と考えられると思います。
基本的に、一概にプログラミング言語と言っても、

1.提供元が一つしか無いもの
2.公式規格が制定されているもの

の2種類があります。
例えばC#なんかはMicrosoftしか提供元が無い言語がありますし、最近流行りのスクリプト言語系(Python、Ruby等)も提供元が一つしかありません。こう言う場合はヴァージョン違いだと動かない可能性がありますね。他のお方が仰っているように、使用してる言語のヴァージョンをチェックした方がいいでしょう。
じゃあ、2番なら安心か、と言うとそう言う事もないのです。
例えばC言語なんかは公式規格があったりしますが、かと言って、通常は「公式規格に則って」作っただけの言語なんてのも無くって、大体その提供側独特の「拡張ライブラリ」が入ってたりするんです。
つまり、A社が提供した「拡張ライブラリ」を利用したプログラムを「B社製の」一応公式規格に則った言語で書いても動かない場合があるんです。「拡張ライブラリ」自体は独特なんで、B社が同じモノを付けている、とは限りません。そう言う場合があるんですね。
まあ、そう言う事が(しばしば)生じるんで、何らかのサイト/参考書を利用してプログラムの勉強をする場合は、なるたけその筆者と「同じ環境を」備えるようにした方がいいです。作成者自身も「全部の環境を」試せるワケではない、と言う事を最初に納得しておくべきだと思います。

>要するには作者の解説力次第になりますと思いますが、どうでしょうか?
>どんな簡単な言語でも解説力がなければ取っ付きにくく、どんな難しい言語でも解説力があれば取っ付きやすいものでしょうか?

一理あるとは思います。
が、同時に「言語の性質」ってのはありますね。解説力があってもそれを埋める事は難しいでしょう。

これ言って良いのか悪いのか分かりませんが、原則、書籍を購入して勉強する場合は「定番で」「評価の高い」書籍を選んだ方が、万能では無いですけど「失敗する確率は低い」とは思います。やっぱ校正とかそのテのノウハウを蓄積してる「実績ある」出版社の本を選んだ方がいいですね。
敢えて言いますが、最近「ネットで発表」→「書籍化」と言うのが流行りになっていますが、ホームページを作れても書籍が作れるのか、と言うとこれはまた別の話なんですね。
新興のネット関係での出版社なんかがプログラミング言語の本をサイトの作者の持ち込みで「安く」出版してるケースが見られますが、単なるブログ系の本だったらいざ知らず、このテの技術系の本の場合、「校正を全く行わない」「誤字脱字が多い」「索引でデタラメで役に立たない」状態で出版していて、「安い」だけで買うと、結局役に立たないんで痛い目見ます(敢えて会社名は伏せておきますがそう言う実例があるのです)。
ですから、サイトで勉強するなら構いませんが、書籍を買って勉強する場合は、少々値段が高くでも「定番商品」の方が結果安上がりです。書評に関しては大体のトコamazonで見れますし(もっともamazonは否定的な意見は載せたがらない方針ですが)、何種類か評判が良い書籍をメモっておいて本屋で現物を見た後購入した方が良いでしょう。または、評判書籍を取りあえず図書館で借りて読んでみる、とか。
出版社もすべて同じなワケではなく、「一回刷っちゃったらあとは絶版でイイや」程度で考えて粗製本作ってるケースも確かに存在するんで、そこまで行くと、確かに仰る通りかもな、とは思います。

ちょっと抽象的かも、です。

>ホームページや書籍などのサンプルコードが動かないということは、そのサンプルコード自体の問題というよりは作者の問題と思いますが…。

それは「あり得ます」。
ただし、その前に自分の環境をチェックした方がいいでしょう。
ヴァージョン違い、なんてのは他のお方が仰ってる通りなんですが、他にも原因は色々と考えられると思います。
基本的に、一概にプログラミング言語と言っても、

1.提供元が一つしか無いもの
2.公式規格が制定されているもの

の2種類があり...続きを読む

Q色々なAPIを使って独自のサービスを作りたい・・・何から勉強すれば?

色々なAPIを使って自分のサイトで新しいサービスを作りたいと思っています。
現在学生でプログラムの技術もC言語をほんの少しいじったぐらいです。
何から勉強していけばよろしいでしょうか?
また初心者にお勧めの本があればご紹介してください。
よろしくお願いします。

Aベストアンサー

APIを使って独自のサービスを提供しているソフトとしてUWSCが既にあります。
http://www.uwsc.info/
UWSCは近年高機能となってシェアウェア版もあり、作者は自動化ソフトの作成依頼が増えて現在では仕事として働いているようです。
リンクには多くのサンプルがありますから、APIレファレンスと比較しながらこれを勉強すれば充分です。


人気Q&Aランキング