テーブル編講座紹介

**************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
**************************************************

access_intro_01.jpg
1.アクセス講座の趣旨
それでは、アクセス講座の全体の概要について説明させていただきます。
 アクセス講座全体の趣旨は、「アクセスで業務システムの開発ができるスキルを身に付ける」ということです。たまに質問を受けるのですが、「アクセスの本をたくさん読んでも、なかなか実際の業務システム開発には繋がらない」というような意見を受けることがあります。それに関してはいろいろ原因が考えられるのですが、一番大きな原因は、そもそも業務システムを作るための開発の手法というのを学ばなくてはいけないと、いうことです。つまり単にアクセスだけの使用方法を身に付けるだけでは、結局業務システムを開発するとはいったいどういったことなのかということが全く分からず、したがって単にツールを使っているだけになってしまうために、対応が出来なくなるわけです。

 逆にいいますと、アクセスに限らず業務システム開発を携わられた方であれば、単なる一つのツールという位置づけでアクセスを使いこなせるので、ツールの知識を身につけるのは簡単だと思います。つまり、業務システムを開発するにあたって、この部分はこんな風に処理をすればよいという設計が頭に浮かぶわけです。それは、難しく言えば、システム設計に該当することです。システム設計は、開発ツール(プログラム言語)が異なっても共通の内容が多くあります。そのような内容を思い浮かべて、ではアクセスではどのような関数があるかとだとか、画面の動きはどうなっているかなどを調査して、開発を進めていくことが可能となるわけです。このようにあるべき姿を思い浮かべて、それに適した機能を検討していけば、かなりの応用が利くことになりますし、そもそもアクセスの機能をすべて知らなくても、その都度、調査をしていけばよいのです。

最終的には、アクセス開発を通じて、一般論としてのシステム開発手法なり、そもそも業務システムとはどのようなものかということを学んでいただきたいと考えております。

 その中でも、アクセスによる開発で重要なのは、業務システムの処理を記述するプログラムです。ちなみに、アクセスでプログラムを記述するものを、VBA(ブイ・ビー・エー)といいます。結局、業務システムを作ろうとした場合、VBAが分からないとなかなか難しいところがあります。というのは、細かい制御を行うにはどうしてもプログラムに頼らなくてはなりません。また、プログラムにはいろいろな言語があり、それぞれに違いがありますが、それらには共通した概念も多く存在します。

 そのように大切なVBAですが、世間一般のアクセスの本では、むしろVBAのプログラミング的な部分は補助的に扱っていたり、場合によっては、まったく扱われないのが多いのではないかなと思います。

次に重要な内容は、SQL(エス・キュー・エル)になります。アクセスの中では、クエリとして扱われている部分です。SQLは、データをどのように扱うかという内容を記述する言語です。このSQLはアクセスに限らず、ほかのデータベース、例えばMicrosoft SQL Server であるとか、Oracleであるとか、Webの部分で言いますと、My SQLであるとか、そういったものでも、共通した言語になっております。但し、データベースソフトによって若干の方言といいますか、違いがあるのですが、ほぼ共通しています。

 業務システムを学ぶと言った意味で、まずブログラミングとSQLを勉強するということがひとつの中心的な課題になるかと思います。
 ちなみに、VBAに関しまして基本プログラミングというのは、共通された考え方というのがあります。つまりアクセスのVBAなどを身に付けて頂けると、他のプログラミング言語、例えばJAVAであるとか、PHPであるとか、C言語であるとかというのも割と身につけやすくなります。
 本講座は当然アクセスでシステムを作るということですのでアクセスの内容に沿ったものになるのですが、アクセスのプログラミング(VBA)、SQL(クエリ)というのは、いわゆる他の開発言語で業務システムを作る場合にも多いに役に立つかと思います。

**************************************************
本動画講座の内容は以下のページで確認できます。
以下の紹介ページでは無料の動画が確認できます。

http://ai-light.com/itkeiei/access-douga-kouza/access
**************************************************

2.入門講座の趣旨
繰り返しにはなりますが、業務システムの構築方法を学ぶ上で最初に重要となるのはプログラミングとSQLということになります。しかし、いきなりプログラムとかSQLの講座をはじめても、ちんぷんかんぷんになってしまうでしょう。そこで、本入門講座では、その前に、アクセスの使い方を勉強していただけばと思い内容をまとめました。

本入門講座はアクセスをまったく知らないという方にもわかってもらえるように内容をまとめました。先ほどは、業務システムの開発を本格的に行うことを前提として、それに必要な知識についてまとめました。可能でしたら、そこまで学んでいただけたら、と思います。しかし、そこまで学ばなくても、アクセスの使い方を覚えるだけで、簡単な住所録とか、年賀状の宛名印刷などが容易にできます。

アクセスの使い方としては、大きく分けて4つのカテゴリに分かれます。それは、テーブル、フォーム、クエリ、レポートの4つになります。

まずは、簡単に1つずつ説明したいと思います。

1つ目のテーブルは、データを蓄えておく部分になります。たとえば、住所録でいうなら、名前と、電話番号などの値を蓄積しているわけです。

2つ目はフォームですが、これは入力画面であるとか照会画面を作るといったものです。画面を作ることで例えば、年齢欄には、数値しか入ってはダメだめだとか、郵便番号が入ったら自動的に住所が入るなどデータを登録する際の便利機能を付け加えることができます。

3つ目はクエリになりますが、これは、データを加工して表示するといった内容です。たとえば、年齢が30才以上の人をピックアップするだとか、住所が大阪府内の人だけをピックアップするなどが考えられます。

4つ目は、レポートになりますが、これは印刷物を作成するためのツールです。
 
最後は、開発のケーススタディというものをひとつ考えまして、それに沿って順次開発を進めていくというこういう内容で講座を作っていきたいと思っておりますので、楽しみにしておいてください。
**************************************************
本動画講座の内容は以下のページで確認できます。
以下の紹介ページでは無料の動画が確認できます。

http://ai-light.com/itkeiei/access-douga-kouza/access
**************************************************
access_intro_02.jpg
3.ACCESS講座テーブル編の趣旨
そうしましたら、アクセス講座の一回目ということで、テーブルについて90分位にまとめました。テーブルを一言で説明しますと、「データを蓄積して場所」ということになります。イメージ的には、エクセルにデータを蓄積しているようなものです。しかしエクセルと違うところは、並び替えたり検索したりというのが、非常に行いやすくなっております。

講座の内容については、以下のとおりです。
まずはじめに、アクセス起動と終了の仕方から説明しています。初回ということで、初歩の初歩から説明しております。
つぎに、テーブル名の定義と項目の定義について説明しています。テーブルを作るときには、テーブル名とテーブルの中に属している項目とを定義します。項目とは、データを管理する内容を整理したもので、例えば、顧客名簿が顧客名、住所、電話番号から作られている場合に、顧客名、住所、電話番号をそれぞれ項目して定義します。データを蓄積するだけを考えますと、たとえば、ワードにデータを入力するように、顧客名、住所、電話番号をわけずに入力することも可能でしょう。しかし、そのように様々な内容を意味する情報が混ざり合っていると、データを検索するときに行いにくくなります。そのため、同じ意味(情報)を1つのかたまりにして、顧客名、住所、電話番号とそれぞれにわけると、きれいに整理されるわけです。また、テーブルとは、項目の集合体につけた名称で、この場合には、顧客名、住所、電話番号を1つのまとまりとして、例えば、顧客テーブルと名前をつけるのです。
三つ目は、テーブルのデータ登録、実際の入力の仕方について説明させていただきます。
四つ目は、項目定義の詳細説明を行っております。ここでは、例えばある箇所には日付しか入りませんとか、数値しか入りませんなどと言った設定をしていくのです。
最後にインポートとエクスポートで、インポートといいますのは、例えば、エクセルなどからデータをアクセスに取り込んだりします。エクスポートというのは、インポートとは逆で、アクセスのデータをエクセルに出力ということになります。

アクセスというのはマイクロソフト社の製品になり、エクセルも同様にマイクロソフト社の製品です。エクセルはわりと一般的に使われますので、アクセスのデータをエクセルに出力して何か加工するといったやり方をマスターすると大変、便利に使用できるのではないかと思います。そのようなことができれば、例えば、アクセスで蓄積したデータを、例えばエクセル側でグラフを作るなどができます。また、エクセルで入力したデータをアクセスで取り込んで各種のデータ加工をするなども有効な使用方法の1つになるでしょう。

それでは、アクセス講座をスタートしましょう。
**************************************************
本動画講座の内容は以下のページで確認できます。
以下の紹介ページでは無料の動画が確認できます。

http://ai-light.com/itkeiei/access-douga-kouza/access
**************************************************
**************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
**************************************************

11/29のツイートまとめ

IT01765612

仕事を頑張るのもいいけど。ほどほどにね。 https://t.co/jEvaGH5U4s
11-29 12:00

中古マンションを探していて、いいところがあったので、さらに、調べてみた。築8年経過しているのに、新築時より10%程度高く販売していた。大阪の中古マンションバブルがすご~~~~い。
11-29 00:49

11/28のツイートまとめ

IT01765612

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/XDBbLTyfYS 集客の手法
11-28 14:59

動画にメッセージを追加する https://t.co/XDBbLTgEAi
11-28 10:13

集客の方法



(1)集客の手法
・DM
 ‐ある程度の単価があるもの
・チラシ
 ‐地域が限定できるもの
・TELアポ
 ‐へこたれない
・インターネット広告
 ‐Google adwords, Yahoo プロモーション など
・その他
 ‐ブログ、メルマガ

【アイライトIT経営研究会の紹介】
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

11/27のツイートまとめ

IT01765612

休日出勤する時に、土曜日に出勤するのと、日曜日に出勤するのと、気分が全然違う。結局、休日がなくなることには変わりはないのに。気持の持ち方一つで全然違うってことかな。
11-27 15:15

11/26のツイートまとめ

IT01765612

りっぱな人は人を使う時に適材適所に配置し、中途半端な人は人に万能を求める。とは、孔子さんの言葉。2500年前の言葉が今でも通じるとはすごいね。
11-26 00:00

11/23のツイートまとめ

IT01765612

twitterは140文字までなんだって。これならボクにもツイートできそう。毎日続けることが重要だね。
11-23 22:43

基本情報技術者試験の言語選択



(1)言語は何を選択するか
・C、COBOL、JAVA、アセンブラ、表計算から選択

(2)C言語の特徴
・もっとも基本的な言語。
・応用範囲が広い。
・情報系の学校では、大半で勉強。
・試験はアルゴリズム関係の問題が多い。
・個人的にはお勧め。

(3)COBOL言語の特徴
・事務処理関係のレガシー言語。
・メインフレームなどCOBOL言語をこれから必要とされる方にはよい。
本が少ない。
・これから基本情報技術者の勉強のために言語を勉強しようかなと思っている方にはお勧めではない。

(4)JAVA言語の特徴
・世間的にはもっともお勧めされると思われる。
・もっとも実務に直結する。
・就職にはもっとも有利か。
・学習時間がもっともかかる。
・基本情報技術者試験の問題は、オブジェクト指向のルール的な問題が多く、ロジックの問題が少なく残念。

(5)アセンブラ言語の特徴
・かつては専門学校でもっとも選択されていた言語。
・覚えることが少なくとっつきやすい。
・ハードウェアの理解にもつながり、基礎力を養成するという意味でもよい。
・組込み分野に興味がある方にはよいかも。
・知っていても損はない。

(6)表計算の特徴
・そもそもプログラムの知識はほとんど問われない。
・前提知識があまり要らず、とっつきやすい。
・プログラムを勉強しなくてもよい方は選択してもよい。
・システムエンジニアを目指される方にはお勧めしない。

【アイライトIT経営研究会の紹介】
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

11/22のツイートまとめ

IT01765612

どうやら明日の祝日は出勤になりそう。ボクはどちらかというと仕事が遅いタイプ。でも、一生懸命がんばっているよ。それで十分かなぁ~。きっとそれで十分だよ。明日もがんばろっと。
11-22 20:26

11/21のツイートまとめ

IT01765612

ボクは中学生の頃、Tシャツのことをピーシャツだと思ってました。先輩に洗濯竿にTシャツをほすとTの形になるから、Tシャツだと教えられました。なるほどね。そんな勘違いはよくあるよね。
11-21 20:52

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/K95EYJnROt 基本情報技術者試験の言語選択
11-21 17:56

動画にメッセージを追加する https://t.co/K95EYJFsG1
11-21 15:50

平成17年春期基本情報技術者試験午後問9、アセンブラ言語

本ページは平成17年春期基本情報技術者試験午後問9、アセンブラ言語の解説です。
問題文、解答、解説の順で掲載しております。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************

次のアセンブラプログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

ある商店の在庫状況を記録した在庫表から,商品番号をキーとして,商品の在庫量を2分探索法で検索する副プログラムBSEARCHである。

(1) 在庫表は,先頭に扱い商品数N,その後ろに商品番号とその商品の在庫量の対を商品番号順(昇順)に格納したものである。扱い商品数,商品番号,在庫量は,それぞれ0以上の整数値で1語に格納されている。

在庫表の様式
N商品番号[1]在庫量[1]商品番号[2]在庫量[2]商品番号[N]在庫量[N]


(2) 主プログラムは,商品番号(検索キー)をGR1に,在庫表の先頭アドレスをGR2に設定し,BSEARCHを呼ぶ。

(3) BSEARCHは,検索キーに対応する在庫量をGR0に設定し,主プログラムに戻る。該当する商品番号が在庫表に存在しない場合は,-1をGR0に設定し,主プログラムに戻る。

(4) 副プログラムから戻るとき,汎用レジスタGR1~GR7の内容は元に戻す。

〔プログラム〕

(行番号)
1 BSEARCH START
2 RPUSH
3 LAD GR3,1 ; 左端標識 LT の初期設定
4 LD GR4,0,GR2 ; 右端標識 RT の初期設定
5 LAD GR2,-1,GR2 ; 表の基底アドレス
6 LAD GR0,-1 ; 戻り値の初期設定
7 SLOOP CPL GR3,GR4 ; LT > RT ?
8 JPL EXIT
9 LD GR5,GR3 ; LT,RTの中央の位置 MID の計算
10 ADDL GR5,GR4 ; ”
11 { a }       ; ”
12 LD GR6,GR5 ; 商品番号 [MID] のアドレス計算
13 SLL GR6,1 ; ”
14 ADDL GR6,GR2 ; ”
15 CPL GR1,0,GR6 ; KEY = 商品番号[MID] ?
16 JZE FIND
17 { b }
18 LAD GR3,1,GR5 ; MID+1 → LT
19 JUMP SLOOP
20 RTSET LAD GR4,-1,GR5 ; MID-1 → RT
21 JUMP SLOOP
22 FIND LD GR0,1,GR6 
23 EXIT RPOP
24 RET
25 END

設問1 プログラム中の{ }に入れる正しい答えを,解答群の中から選べ。

a に関する解答群
ア LAD GR5,1,GR5    イ LAD GR5,2,GR5    ウ SLL GR5,1 
エ SLL GR5,2      オ SRL GR5,1

b に関する解答群
ア JMI RTSET     イ JMI SLOOP       ウ JPL RTSET
エ JPL SLOOP     オ LAD GR2,1,GR2     カ LD GR5,GR6

設問2 GR1とGR2を次のように設定して副プログラムBSEARCHを呼び出したとき,行番号20の命令は何回実行されるか,正しい答えを,解答群の中から選べ。
assembla_01_01.jpg

解答群

ア 0    イ 1    ウ 2    エ 3    オ 4
カ 7    キ 8

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************
2分探査法
http://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E6%8E%A2%E7%B4%A2

********************************************************************************
解答
設問1 答 aオ 答 bア  設問2 答ウ
********************************************************************************

解説
2行目のRPUSHで、GRの内容をGR1,GR2,・・・・GR7の順でスタックに格納する。
3行目で1をGR3にセットする。コメントの通りに初期値設定を行っている。
4行目でGR2の内容をGR4にセットする。
例えば、図1のように商品が5つあり、商品数Nが100番地に値が格納されているとする。

図1 在庫表例
5商品番号[1]在庫量[1]商品番号[2]在庫量[2]商品番号[3]在庫量[3]商品番号[4]在庫量[4]商品番号[5]在庫量[5]

100 101 102 103 104 105 106 107 108 109 110

この場合に問題文よりGR2には、在庫表の先頭アドレスが入っているのでGR2には100がセットされている。

5行目で、GR2+(-1)番地のアドレスの値をGR2にセットする。図1の例ではGR2の値は99となる。

6行目で、GR0に-1をセットする。コメントにある通り、戻り値の初期設定を行っている。

7-8行目でGR3>GR4の時、EXITラベルに飛ぶ。初回の時は、GR3=1,でGR4=5となっているので、この条件には該当しない。

9・10・11行目ではコメントの通りLT,RTの中央の位置を計算している。これは参考文献で説明されているように2分探索法は、昇順および降順に並んでいる数列に対して、その中央の値との大小関係を比較することを順に確認しながら値を検索する手法だからである。

よって、2分探索法ではその中央値を計算することが必要になってくる。

10行目でGR5が1で、GR4は図1の例では5が格納されているから、結果、GR5の値は6となる。

{ a }
で、アの選択肢では、GR5に1を足すことになる。よって、図1の例では、結果が7となり、中央値は求まっていない。イの選択肢も同様である。

ウの選択肢はGR5を左に1シフトする。図1の例を8ビットで表現すると、6は
00000110
と表現される。これを1ビット左にシフトすると
00000011
となり、結果は3となる。よって、中央値が求まる。

同様にエ・オの選択肢を考えると、不適切なことがわかる。

2進数表現と10進数表現を比べると以下のようになる。
2726252423222120
00000110

よって、22を左に1シフトすると21となり、値を半分にしたことになる。

13行目で論理右シフトすることによって、GR6の結果は6となり、右シフトしたことで数値を2倍にしたことがわかる。これは、アドレスを求める際に、項目は「商品番号」「在庫量」と2つの項目を使っているので、2倍をすることが必要である。

14行目で論理加算を行っているが、GR2には5行目より99が入っており、GR6は6が入っているから、結果99+6でGR6の値は105となる。図1より105番地には商品番号[3]が入っており、これで中央の値が取得できる。

15・16行目で、GR1の値とGR6の値が等しいかを確認している。等しい場合には、検索している商品番号がヒットしたことを示しているから、22行目に処理が移る。

22行目で、GR6+1のアドレスに入っている値をGR0にセットしてプログラムを終了している。GR6+1のアドレスに入っている値とは、図1では在庫量[3]の値を取得したことになる。

{ b }
15・16行目で、値が等しくない場合には、GR1の値>GR6の値であれば、値は中央値より後半に存在することになるから、左端標識LTに中央値をセットすればよい。また、GR1の値<GR6の値であれば、値は中央値より前半に存在することになるから、右端標識RTに中央値をセットすればよい。

よって、解答はアとなる。

設問2
1回目のループの際、15行目でGR1には2がGR6には中央値に該当する商品番号である7がセットされている。GR1GR4の推移は次のようになる。
10行目で、GR5(1)+ GR4(8)→GR5(9)
11行目で、GR5(9)→GR5(4)
20行目で、GR5(4)-1→GR4(3)

2回目のループでは、GR1には2がGR6には3がセットされる。よって、GR1GR4の推移は次のようになる。
10行目で、GR5(1)+ GR4(3)= GR5(4)
11行目で、GR5(4)→GR5(2)
20行目で、GR5(2)-1→GR4(1)

3回目のループでは、GR1には2がGR6には1がセットされる。よって、GR1>GR6であるから20行目は実行されず18行目が実行される。GR3に2がセットされる。7行目に戻った処理で、GR3が2で、GR4が1であるから処理を抜けることになる。
GR4の推移は次のようになる。
10行目で、GR5(1)+ GR4(1)= GR5(2)
11行目で、GR5(2)→GR5(1)
20行目で、GR5(1)-1→GR3(2)

よって、解答はウとなる。


参考:平成17年春期基本情報技術者試験午後問9

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)
***********************************************************************************************************

成功する商品・サービス選び



(1)成功する商品・サービス選び
・どのような商品・サービスを選ぶかはかなり重要

(2)商品・サービス選びのポイント
・自分(自社)の得意分野か

・ニーズがあるか
-差別化を意識しすぎない

・競合はどのくらいいるか
-競合があまりいないか。強くない相手がよい

【アイライトIT経営研究会の紹介】
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

11/17のツイートまとめ

IT01765612

アイライトIT経営研究会 #nicoch https://t.co/Rx4aLmaVZ4
11-17 20:40

解決策を見つける方法



(1)解決策を見つける方法
・いきなり解決策を探ってはダメ

(2)解決策を見つける手順
・現象をとらえる
-どこがおかしいのか
 ↓
・原因をとらえる
-なぜおかしいのか

・その原因から解決策を探る

【アイライトIT経営研究会の紹介】
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

11/16のツイートまとめ

IT01765612

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/95BXtoBtlk 成功する商品サービス選び
11-16 12:14

動画にメッセージを追加する https://t.co/95BXtoBtlk
11-16 10:00

平成17年春期基本情報技術者試験午後問7、COBOL言語

本ページは平成17年春期基本情報技術者試験午後問7、COBOL言語の解説です。
問題文、解答、解説の順で掲載しております。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

次のCOBOL プログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

あるイベントの来場者アンケートを集計し,年代別職業別参加人数表を出力するプログラムである。

(1) アンケートファイルのレコード様式は,次のとおりである。

年齢 1けた
職業 1けた
興味 1けた
その他の答え 97けた

① 年齢は,年代別にコード化されており,次のいずれかが記録されている。

1:10 ~ 19 歳, 2:20 ~ 29 歳, 3:30 ~ 39 歳,
4:その他(9 歳以下又は 40 歳以上)

② 職業は,学生,自営業,会社員などに分類してコード化されており,次のいずれかが記録されている。

1:学生, 2:自営業, 3:会社員, 4:その他

③ 興味は,来場の主目的が,体験,セミナ,展示などのどれであるかをコード化したものであり,次のいずれかが記録されている。

1:体験, 2:セミナ, 3:展示, 4:その他

(2) 来場者アンケートを集計して,次の年代別職業別参加人数表を出力する。
cobol_01_01.jpg

① 各参加人数は,来場者アンケートを集計した結果で,総参加人数は最大6けたである。
② 年代別,職業別に参加人数を印字し,さらに年代別の合計を印字する。
③ 参加人数及び合計人数以外の文字は,あらかじめ印字されている。

(3) アンケートファイルのレコードの各項目にエラーはない。

〔プログラム〕
DATA DIVISION.
FILE SECTION.
FD ENQUETE-F.
01 ENQUETE-R.
03 E-NENREI PIC 9(1).
03 E-SHOKUGYO PIC 9(1).
03 E-KYOMI PIC 9(1).
03 PIC X(97).
FD PRINT-F.
01 PRINT-R PIC X(100).
WORKING-STORAGE SECTION.
01 HYO.
03 A OCCURS 4 INDEXED BY X.
05 B OCCURS 4 INDEXED BY Y PIC 9(6).
01 END-SW PIC X(3) VALUE SPACE.
01 KUHAKU PIC X(100) VALUE SPACE.
01 MEISAI.
03 PIC X(10) VALUE SPACE.
03 OCCURS 5 INDEXED BY Z.
05 PIC X(4) VALUE SPACE.
05 NINZUU PIC ZZZ,ZZ9.
01 GOKEI PIC 9(6) VALUE ZERO.
PROCEDURE DIVISION.
HAJIME.
OPEN INPUT ENQUETE-F OUTPUT PRINT-F.
INITIALIZE HYO.
PERFORM UNTIL END-SW = "END"
READ ENQUETE-F
AT END MOVE "END" TO END-SW
NOT AT END
cobol_01_02.jpg
END-READ
END-PERFORM.
WRITE PRINT-R FROM KUHAKU AFTER PAGE.
WRITE PRINT-R FROM KUHAKU AFTER { a }.
PERFORM VARYING X FROM 1 BY 1 UNTIL X > 4
PERFORM VARYING Y FROM 1 BY 1 UNTIL Y > 4
{ b }
MOVE B(X Y) TO NINZUU(Z)
{ c }
END-PERFORM
MOVE GOKEI TO NINZUU(5)
WRITE PRINT-R FROM MEISAI AFTER 2
MOVE ZERO TO GOKEI
END-PERFORM.
CL OS E ENQUETE-F PRINT-F.
STOP RUN.

設問1 プログラム中の{ }に入れる正しい答えを,解答群の中から選べ。

a に関する解答群

ア 1    イ 2    ウ 3    エ 4

b,c に関する解答群

ア COMPUTE GOKEI = GOKEI + B(X Y)
イ COMPUTE GOKEI = NINZUU(Z) + B(X Y)
ウ COMPUTE NINZUU(Z) = GOKEI + B(X Y)
エ MOVE B(X Y) TO GOKEI
オ MOVE X TO Z
カ MOVE Y TO Z
キ MOVE Z TO Y
ク SET X TO Z
ケ SET Y TO Z
コ SET Z TO Y

設問2 出力用紙に次の用紙を使い,職業別目的別参加人数表を出力するとき,プログラム中のαをどの文と置換すればよいか,正しい答えを,解答群の中から選べ。

cobol_01_03.jpg

解答群

ア COMPUTE B(E-KYOMI E-NENREI) = B(E-KYOMI E-NENREI) + 1
イ COMPUTE B(E-KYOMI E-SHOKUGYO) = B(E-KYOMI E-SHOKUGYO) + 1
ウ COMPUTE B(E-NENREI E-KYOMI) = B(E-NENREI E-KYOMI) + 1
エ COMPUTE B(E-NENREI E-SHOKUGYO) = B(E-NENREI E-SHOKUGYO) + 1
オ COMPUTE B(E-SHOKUGYO E-KYOMI) = B(E-SHOKUGYO E-KYOMI) + 1
カ COMPUTE B(E-SHOKUGYO E-NENREI) = B(E-SHOKUGYO E-NENREI) + 1

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/

***********************************************************************************************************

********************************************************************************
解答
設問1
答 aウ 答 bコ 答 cア

設問2
答オ
********************************************************************************

解説

01 ENQUETE-R.
03 E-NENREI PIC 9(1).
03 E-SHOKUGYO PIC 9(1).
03 E-KYOMI PIC 9(1).
03 PIC X(97).
は桁数からアンケートファイルに該当していると思われる。

OPEN INPUT ENQUETE-F OUTPUT PRINT-F.
では、ENQUETE-Fファイルを入力用(読込用)としてファイルをオープンし、PRINT-Fファイルを出力用(書込用)としてファイルをオープンしている。

INITIALIZE HYO.
変数HYOを初期化する。INITIALIZEは、数値項目を「0」にして、英数字項目をブランクにする。

PERFORM UNTIL END-SW = "END"
END-SW が "END"になるまでループする。

READ ENQUETE-F
ファイルENQUETE-Fを読込む。

AT END MOVE "END" TO END-SW
ファイルのレコードをすべて読み終わった時にEND-SWに"END"をセットする。

NOT AT END
ファイルのレコードが読込めた場合

  COMPUTE B(E-NENREI E-SHOKUGYO)
= B(E-NENREI E-SHOKUGYO) + 1
読込んだE-NENREI(アンケートファイルの年齢項目)、E-SHOKUGYO(アンケートファイルの職業項目)でBに+1をする。つまりここで年齢毎、職業毎の件数をカウントしている。

WRITE PRINT-R FROM KUHAKU AFTER PAGE.
AFTER PAGEではプリンターに出力する際に改ページをする。

データ項目KUHAKUは
01 KUHAKU PIC X(100) VALUE SPACE.
で、空白がセットされているので、WRITE文で空白をPRINT-Rに書き込んでいる。

{ a }
{ a }の前で、
WRITE PRINT-R FROM KUHAKU
よりPRINT-Rに空白をセットしている。

また、{ a }の解答群はすべて数値であり、
AFTER 行送りしたい行数
であるから、何行を空白で送りたいかということである。

問題文より
③ 参加人数及び合計人数以外の文字は,あらかじめ印字されている。
とのことであるから、5行目まで行を送ればよい。

{ a }の前段で1行が行送りされているから、2行目から5行目まで行送りを行えばよい。よって、3行を行送りすればよい。以上より解答はウとなる。

PERFORM VARYING X FROM 1 BY 1 UNTIL X > 4
でXを1から4までカウントアップしながらループする。

PERFORM VARYING Y FROM 1 BY 1 UNTIL Y > 4
上記と同様にして、Yを1から4までカウントアップしながらループする。

{ b }
下の行で
WRITE PRINT-R FROM MEISAI AFTER 2
としており、WRITEで年代別職業別参加人数表に行を追加している。

MEISAIの項目内にNINZUU項目があることから、この項目で列方向の体験、セミナ、展示、その他、合計を保持していることがわかる。

MOVE B(X Y) TO NINZUU(Z)
で添え字のZの値が与えられていないことから、Zに値を与えてやればよい。

Zは
OCCURS 5 INDEXED BY Z
とあり、NINZUUの指標名である。指標に値を設定するにはSET文を用いる。
よって、解答はコとなる。

{ c }
下の行で
MOVE GOKEI TO NINZUU(5)
とあり、GOKEI項目で列合計を求めていることがわかる。

よって、解答はアとなる。

設問2
年代別職業別参加人数表より、行方向は年代で列方向は職業を出力する時にαより
B(E-NENREI E-SHOKUGYO)で行方向のデータを前段に、列方向のデータを後段にセットすればよい。

よって、職業別目的別参加人数表で、行方向に職業を列方向に趣味を出力するには、前段に職業を後段に趣味のデータをセットすればよい。よって、解答はオとなる。

参考:平成17年春期基本情報技術者試験午後問7

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/

***********************************************************************************************************

創業に必要なスキル



(1)創業に必要なスキル1
その分野の専門知識
・好きなことではなく、得意なことをする

(2)創業に必要なスキル2
経営ノウハウ
・特に営業スキル(集客)

(3)創業に必要なスキル3
実行力
・P(計画)→D(実施)→C(評価)→A(改善)ではなくD(実施)→C(評価)→A(改善)→P(計画)で考える

【アイライトIT経営研究会の紹介】
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

仕事につながるスキルアップ



(1)こんな仕事をしていませんか?
++事務の仕事(1年)
++営業の仕事(1年)
++不動産販売の仕事(1年)





(2)ポイント
++専門性を磨くこと
++最低10年はがんばろう

(3)例
不動産の営業
保険の営業
太陽光発電の営業




(4)具体的には
++仕事で実践する
++正社員にこだわらない
++仕事内容そのもので選ぶ
++本・資格で勉強する

【アイライトIT経営研究会の紹介】
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

11/14のツイートまとめ

IT01765612

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/uH6ab62R38 解決策を見つける方法
11-14 18:00

動画にメッセージを追加する https://t.co/uH6ab5LfEy
11-14 14:22

平成19年春期基本情報技術者試験午後問8、JAVA言語

本ページは、平成19年春期基本情報技術者試験午後問8、JAVA言語の解説です。
問題文、解答、解説の順で掲載しております。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

次の Java プログラムの説明及びプログラムを読んで,設問に答えよ。
( Java プログラムで使用する API の説明は,下記を参照してください。)

〔プログラムの説明〕

英語の月名( January,…,December )を2種類の順序に並べ替えるプログラムである。 月名は,文書の索引などを作成する場合は辞書順に並べ替える必要があるが, 日付の一部として並べ替えるときは月の順番に並んだ方が都合がよい。 並べ替えは,次のクラスメソッドを呼び出して行う。

java.util.Arrays.sort(Object[], java.util.Comparator)
このメソッドは,引数で与えられたComparatorのインスタンスのメソッド compare を 呼び出して配列中の要素を比較し,並べ替える。 ここでは,インタフェース Comparator を実装する次の二つのクラスを定義する。

(1) クラス NameComparator は,引数で与えられた文字列を小文字の文字列に変換し, クラス String のメソッド compareTo を呼び出して比較した結果を返すメソッドを実装している。

(2) クラスValueComparatorは,引数で与えられた文字列(月名)を 月の値(例えば,Aprilは4)に変換し,月の値で比較した結果を返すメソッドを実装している。 引数の文字列は,大文字と小文字を区別しない。 月名は,Jan,Febなど,3文字の省略形を指定してもよい。

ただし,二つのクラスともメソッド compare に与えられる月名は正しいものとする。

クラス MonthNameSorter は,上記の二つの Comparator を実装したクラスを用いて,月名を並べ替える。 メソッド main を実行した結果を,次に示す。

[December, July, DEC, June, April, May]    
[April, DEC, December, July, June, May]
[April, May, June, July, December, DEC]

〔プログラム1〕

import java.util.Comparator;
import java.util.Locale;

public class NameComparator implements Comparator<String> {
public int compare(String s1, String s2) {
String ls1 = s1.toLowerCase(Locale.ENGLISH);
String ls2 = s2.toLowerCase(Locale.ENGLISH);
return ls1.compareTo(ls2);
}
}

〔プログラム2〕

import java.util.Comparator;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

public class ValueComparator implements { a } {
private static final String[] monthNames = {
"january", "february", "march", "april",
"may", "june", "july", "august",
"september", "october", "november", "december"
};
private static final Map<String, Integer> map
= new HashMap<String, Integer>();
static {
// 月名とその値(例: may → 5)が対応するようにmapを初期化する。
for (int i = 0; { b } ; i++) {
// 月名と月の値を対応付ける。
map.put(monthNames[i], i + 1);
// 月名の最初の3文字と月の値を対応付ける。
map.put(monthNames[i].substring(0, 3), i + 1);
}
}

public int compare(String s1, String s2) {
String ls1 = s1.toLowerCase(Locale.ENGLISH);
String ls2 = s2.toLowerCase(Locale.ENGLISH);
return { c };
}
}

〔プログラム3〕

import java.util.Arrays;

public class MonthNameSorter {
public static void main(String[] args) {
final String[] names1 = {
"December", "July", "DEC", "June", "April", "May"
};
System.out.println(Arrays.toString(names1));

String[] names2 = names1.clone();
Arrays.sort(names2, new NameComparator());
System.out.println(Arrays.toString(names2));

String[] names3 = names1.clone();
Arrays.sort(names3, { d } );
System.out.println(Arrays.toString(names3));
}
}

設問 プログラム中の {}に入れる正しい答えを, 解答群の中から選べ。

a に関する解答群
ア Comparator<int>     イ Comparator<Integer>
ウ Comparator<Object>    エ Comparator<String>

b に関する解答群
ア i < monthNames.length    イ i <= monthNames.length
ウ i > monthNames.length    エ i >= monthNames.length

c に関する解答群
ア map.get(ls1) + map.get(ls2)    イ map.get(ls1) - map.get(ls2)
ウ map.get(ls1) / map.get(ls2)    エ map.get(ls2) - map.get(ls1)

d に関する解答群
ア new Comparator()      イ new Comparator<String>()
ウ new ValueComparator()    エ new ValueComparator<String>()


■Javaプログラムで使用するAPIの説明

java.util

public interface Map<K,V>
型Kのキーに型Vの値を対応付けて保持するインタフェースを提供する。各キーは、一つの値としか対応付けられない。

メソッド
public V get(Object key)
指定されたキーに対応付けられた値を返す。
引数:key ― キー
戻り値:指定されたキーに対応付けられた型Vの値
    このキーと値の対応付けがなければnull

public V put(K key,V value)
指定されたキーに指定された値を対応付けて登録する。このキーが既にほかの値と対応付けられていれば、その値は指定された値に置き換えられる。
引数:key ― キー
   value ― 値
戻り値:指定されたキーに対応付けられていた型Vの古い値
    このキーと値の対応付けがなければnull


java.util

public class HashMap<K,V>
インタフェースMapのハッシュを用いた実装である。キー及び値は、nullでもよい。

コンストラクタ
public HashMap()
空のHashMapを作る。

メソッド
public V get(Object key)
インタフェースMapのメソッドgetと同じ

public V put(K key,V value)
インタフェースMapのメソッドputと同じ


java.lang

public final class String
クラスStringは文字列を表す。

メソッド
public int compareTo(String anotherString)
二つの文字列を辞書順に比較した結果を整数値で返す。
二つの文字列の比較方法は[参考]に示す。
引数:anotherString ― 比較の対象となる文字列
戻り値:この文字列が引数文字列に等しいときは0
    この文字列が引数文字列より辞書順で小さいときは負の値
    この文字列が引数文字列より辞書順で大きいときは正の値

[参考]
二つの文字列の最初の文字から順に比較していき、最初に異なる文字が現れた文字位置がkであるとき、次式の値をメソッドの戻り値とする。

this.charAt(k) - anotherString.charAt(k)

二つの文字列において異なる文字が現れず、かつ二つの文字列の長さが異なるとき、次式の値をメソッドの戻り値とする。

this.length() -anotherString.length()

二つの文字列において異なる文字が現れず、かつ二つの文字列の長さが一致したときは0を返す。


java.util

public final class Locale
クラスLocaleは言語、国などを識別する。

フィールド
public static final Locale ENGLISH
英語を表す定数。


java.util
public class Arrays
クラスArraysは、配列を操作するクラスメソッドからなる。

メソッド
public static<T> void sort(T[] a,Comparator<? super T> c)
指定されたComparatorが規定する順序に従って、指定されたオブジェクトの配列要素を並び替える。Comparatorが規定する順序が同じ要素同士の順番は、並べ替えによって変更されない。
引数:a ― 並べ替えを行う配列
   c ― 配列要素の順序付けをするComparatorのオブジェクト


public static String toString(Object[] a)
指定されたオブジェクトの配列の文字列表現を返す。
引数:a ― 配列
戻り値:aを表現する文字列


java.util
public interface Comparator<T>
あるオブジェクトの集合に対して完全な順序を規定する関数を提供するインタフェースである。

メソッド
public int compara(T o1,T o2)
引数で与えられた型Tの二つのオブジェクトを比較し、大小関係を整数値で返す。
引数:o1 ― 1番目のオブジェクト
   o2 ― 2番目のオブジェクト
戻り値:o1がo2より小さいときは負の値
    o1とo2が等しいときは0
    o1がo2より大きいときは正の値

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

********************************************************************************
解答
答 aエ 答 bア 答 cイ 答 dウ

********************************************************************************

解説

「(1) クラス NameComparator は,引数で与えられた文字列を小文字の文字列に変換し, クラス String のメソッド compareTo を呼び出して比較した結果を返すメソッドを実装している。」という説明と、プログラム1を見比べる。

「引数で与えられた文字列を小文字の文字列に変換」という部分は
s1.toLowerCase(Locale.ENGLISH)に該当することがわかる。
Locale、ENGLISHに関してはAPIの説明にもあるので、そちらをご参考ください。

return ls1.compareTo(ls2);
は、APIの説明より、ls1の辞書順がls2より小さいときは負の値を、
ls1の辞書順がls2より大きいときは正の値を返すことがわかる。

「(2) クラスValueComparatorは,引数で与えられた文字列(月名)を 月の値(例えば,Aprilは4)に変換し,月の値で比較した結果を返すメソッドを実装している。」という説明より、プログラム2はインタフェース Comparator を実装するクラスである。

また、APIの説明よりComparator<T>のTは、compare(T o1, T o2)メソッドの引数の型を指定している。よって、プログラム2のcompareメソッドの引数はString型であることから、a の解答はエとなる。

Tは、Generics(ジェネリックス)という。この部分はクラス名を指定するが、要素として格納できる値をここで指定したクラスのオブジェクトである。

map.put(monthNames[i], i + 1)の部分で、プログラム内の上段の説明の通り、月名と月の値を対応付ける処理である。よってbの部分のfor文は月数分の12回ループすればよい。よって、bの解答は、アとなる。

map.putのputメソッドはAPIの説明にあるので、その部分をご参考ください。配列変数名.lengthで配列の長さを取得できる。

{ c }
問題文より、クラスValueComparatorのcompareメソッドは月の値で比較し結果を返す必要がある。それには、map.getを使って月の値を取得して比較する必要がある。
map.getに関してはAPIの説明より引数で渡されたキーに対応づけられた値を返す。

さらに、NameComparator のcompareToメソッドから、引数s1,s2でs1<s2のときに負の値を、s1>s2の時には正の値を返す必要がある。よって、cの解答はイとなる。

String[] names2 = names1.clone()でname1オブジェクトをname2にコピーする。

Arrays.sort(names2, new NameComparator())ではAPIの説明よりnames2のデータをNameComparator()が規定する順序で並べ替えを行う。

ちなみにdは同様にして、解答はウとなる。


参考文献
ジェネリックスはなぜ必要か
http://java.keicode.com/lang/generics-why-generics.php
cloneメソッド
http://java.keicode.com/lang/clone.php


参考:平成19年 春期 基本情報技術者試験午後 問08

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

11/12のツイートまとめ

IT01765612

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/TmkaUzSHdl
11-12 15:48

11/09のツイートまとめ

IT01765612

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/KGkqdQfLYP 創業に必要なスキル
11-09 13:17

動画にメッセージを追加する https://t.co/KGkqdQfLYP
11-09 12:50

11/07のツイートまとめ

IT01765612

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/mDy16bcFFq
11-07 18:58

動画にメッセージを追加する https://t.co/mDy16bcFFq
11-07 17:49

平成21年 秋期 基本情報技術者試験 午後 問9、C言語

本ページは、平成21年 秋期 基本情報技術者試験 午後 問9、C言語の解説です。
問題文、解答、解説の順で掲載しております。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

C言語では整数型の変数に格納できる値には上限がある。これを超える正の整数 (以下,正の多倍長整数という)の入出力と加算を行うプログラムである。

(1) 正の多倍長整数は,次に示す MP型の構造体を用いて表現する。
typedef struct{
int length;
long data[ARRAY_MAX];
}MP;

正の多倍長整数を,下位から9けたずつに切り分けて,
構造体MPのメンバである配列dataの要素番号の小さい方から順番に値を格納する。 例えば46284059827463859201283844157134007652918723147641 という整数の場合, 図のとおりになる。

02_総合問題1
構造体のメンバー length には,実際に値を格納した要素数を入れる。図の場合は6である。

(2) 関数の仕様は,次のとおりである。
void set(MP *num, const char str[]);

 引数: num MP 型の構造体で表現された多倍長整数
    str 文字列で表現された多倍長整数であって,1~9の数字で始まる。

 機能:文字列で与えられた多倍長整数strを変換して,MP型の構造体numに、格納する。numのメンバdataは,変換後の数値を格納するのに十分な要素数が 確保されているものとする。

返却値:なし

void print(const MP *num);

引数: num MP 型の構造体で表現された多倍長整数
機能:多倍長整数を出力する。

返却値:なし

void add(const MP *a, const MP *b, MP *c);

引数:a, b, c MP型の構造体で表現された多倍長整数であり,c は,a 及び b ではないものとする。
機能:二つの多倍長整数a,bの和を多倍長整数cに格納する。cのメンバdataは,加算処理を行うのに十分な要素数が確保されているものとする。

返却値:なし

(3) 次のライブラリ関数を用いる。

size_t strlen(const char *s);

機能:s が指す文字列の長さを計算する。
返却値:終端を示すナル文字に先行する文字の個数を返す。

〔プログラム〕
#include
#include

#define ARRAY_MAX 100
#define NUM_DIGIT 9
#define NUM_DIGIT_TH_POWER_OF_TEN 1000000000

typedef struct{
int length;
long data[ARRAY_MAX];
}MP;

void set(MP*, const char[]);
void print(const MP*);
void add(const MP*, const MP*, MP*);

/* 文字列から多倍長整数を扱う構造体に変換 */
void set(MP *num, const char str[]){
int str_idx = strlen(str) - 1;
int num_idx = 0;
int i;
long mul;

while( { a } ){
num->data[num_idx] = 0;
mul = 1;
for(i = O; { b } ; i++){
num->data[num_idx] += mul * (str[str_idx--]‐'0');
mul { c } ;
}
num_idx++;
}
num->length = num_idx;
}

/* 多倍長整数の出力 */
void print(const MP *num){
int i;

printf("%ld", num->data[num->length - 1]);
for( { d } ){
/* ゼロ詰めして必ず9けたを表示する。 */
printf("%09ld", num->data[i]);
}
printf("\n");
}

/* 二つの多倍長整数の加算 */
void add(const MP *a, const MP *b, MP *c){
int i;
int i_max;

if(a->length > b->length){
i_max = a->length;
}else{
i_max = b->length;
}
c->data[0] = 0;

for(i = 0; i < i_max; i++){
if(i < a->length) c->data[i] += a->data[i];
if(i < b->length) c->data[i] += b->data[i];

if(c->data[i] >= NUM_DIGIT_TH_POWER_OF_TEN){ ←―α
c->data[i + 1] = 1; ←―β
c->data[i] -= NUM_DIGIT_TH_POWER_OF_TEN;
}else{
c->data[i + 1] = 0;
}
}
if(c->data[i] == 0){
c->length = i;
}else{
c->length = i + 1;
}
}

設問1 プログラム中の { } に入れる正しい答えを,解答群の中から選べ。

a に関する解答群
ア str_idx != 0       イ str_idx < 0       ウ str_idx <= 0
エ str_idx > 0       オ str_idx >= 0       

b に関する解答群
ア i < NUM_DIGIT
イ i < NUM_DIGIT && str_idx <= 0
ウ i < NUM_DIGIT && str_idx >= 0
エ i < NUM_DIGIT || str_idx <= 0
オ i < NUM_DIGIT || str_idx >= 0

c に関する解答群
ア %= 10       イ *= 10       ウ += 10       
エ -= 10       オ /= 10

d に関する解答群
ア i = 0; i <= num->length - 1; i++
イ i = 0; i <= num->length - 2; i++
ウ i = num->length - 1; i >= 0; i--
エ i = num->length - 2; i >= 0; i--

設問2 プログラムの動作について, 次の記述中の { } に入れる正しい答えを解答群の中から選べ。
 関数 add を用いて以下の (1) に示す二つの多倍長整数を加算する場合, プログラム中のα部分は { e } 回実行され, β部分は { f } 回実行される。 また,以下の (2) に示す二つの多倍長整数を加算する場合, β部分は { g } 回実行される。

e ~g に関する解答群
ア 0       イ 1       ウ 2       エ 3
オ 4       カ 5       キ 6       ク 7

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

********************************************************************************
設問1
答 aオ 答 bウ 答 cイ 答 dエ

設問2
答 eオ 答 fイ 答 gエ

参考:平成21年 秋期 基本情報技術者試験 午後 問09
******************************************************************
解説

#include
は、入出力に関する関数が定義されている。本問題ではprintfなどの関数が該当する。

#include
は、文字列操作に関する関数が定義されている。本問題ではstrlenなどの関数が該当する。

#define ARRAY_MAX 100
定数を定義している。
ここでは、"100"をARRAY_MAXと定義している。

struct{
int length;
long data[ARRAY_MAX];
};
構造体の定義をしている。この構造体は、lengthとdata[]という変数を持っている。

typedef
   ・・・・
    MP;
既存の型に新しい名前を付けることができる。ここでは、構造体名をMPと定義している。

strlen(str)
strの文字列の長さを取得している。本問の図では、"50"となる。str_idxは、文字列数に"1"を引いた数をセットしている。上から順にプログラムを追ってみていく場合に、ここではstr_idxが何を表しているかわからない。もう少し、プログラムを読み進める必要がある。

while( { a } )
ここだけでは、{ a }に入るものは何かわからない。引き続き、プログラムを読み進めるしかない。

num->data[num_idx] = 0;
numはポインタの構造体である。ポインタの構造体の場合、構造体の要素を示す場合には"->"を使う。

for(i = O; { b } ; i++)
ここだけでは、{ b }に入るものは何かわからない。さらに、プログラムを読み進める。

num->data[num_idx]
num->data[]には問題文の説明より図の例では、次のようなデータをセットする必要がある。
num->data[0]="723147641"
num->data[1]="7652918"
num->data[2]="844157134"
num->data[3]="859201283"
num->data[4]="59827463"
num->data[5]="46284"

num->data[num_idx]で、最初はnum_idxに"0"がセットされている。
num->data[num_idx] += mul * (str[str_idx--]‐'0')なので、、num->data[0]に何らかと値をセットしようとしていることがわかる。

str_idxは図の例では"49"となる。
str[str_idx--]は、まずstr[str_idx]をしてから"-1"する。
str[49]には、図の例では文字列のもっとも右側の数値である"1"がセットされる。
strはchr型(文字型)となっている。‐'0'するのは文字コードの引き算をすることで、
文字コードから数値に変換している。

以上より、
num->data[num_idx] += mul * (str[str_idx--]‐'0');
で、num->data[0]から順に、文字列の一番右側からセットしていこうとしていることが
わかる。

mul { c } ;
では、解答は*=10となり、イとなる。
mul *=10 は
mul =mul*10のことで、
mul=1のとき、mul=10となり、
さらにmul=10のとき、mul=100となり
さらにmul=100のとき、mul=1000となる。
つまり、この式で、mulがカウントアップしていく形となっている。

よって、
num->data[num_idx] += mul * (str[str_idx--]‐'0')の部分は次のような処理となる。
1回目のループで
num->data[0]="1"
がセットされる。
2回目のループで
num->data[0]=10*4
となり、num->data[0]=41となる。
3回目のループで
num->data[0]=100*6
となり、num->data[0]=641となる。

{ b }
は、ループの終了条件である。
i
str_idxは、文字列の配列数を表しており、配列数は"0"以上の数値であることから解答はウかオとなる。data[5]のとき、dataの最大値9になる前にセットする文字列がなくなることから、str_idx>=0は必須の条件となる。よって解答はウとなる。

{ a }
解答群をみるとstr_idxの条件のみとなっている。str_idxは文字列の配列数を表しているから、str_idx>=0となる。

以上よりプログラムは上から順に解読していかなければならないが、本問題のようにある程度プログラムを我慢して読み進めないとプログラムは解読できない。また、問題も上から順に解けるわけではないことに注意する。

{ d }
問題文より図の場合にはnum->lengthは"6"が入っている。
num->dataはnum->data[0]からnum->data[5]となるので、
printf("%ld", num->data[num->length - 1])で"1"を引いている。

num->dataは配列の要素数が大きいものから表示している。
また、num->data[num->length - 1]はすでに表示済となるので、if文の初期条件は、
i = num->length - 2となる。

さらにデータは配列の要素数の大きいものから小さいものにかけて表示するので、繰り返し条件はi--となる。

よって、解答はエとなる。

{ e }
(1)の場合、i_maxが"4"になる。よってαは4となり、解答はオとなる。

{ f }{ g }
βはdata[]が9桁を超えた場合に実行される。
よって、(1)の上部の数列と下部の数列が9桁を超えるのは、1回なので、解答はイとなる。
同様に(2)の上部の数列と下部の数列が9桁を超えるのは、3回なので、解答はエとなる。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************




11/04のツイートまとめ

IT01765612

平成21年 春期 基本情報技術者試験 午後 問09 https://t.co/26RCDgVUlQ
11-04 18:24

平成21年 春期 基本情報技術者試験 午後 問9、C言語

本ページは、平成21年 春期 基本情報技術者試験 午後 問9、C言語の解説です。
問題文、解答、解説の順で掲載しております。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

次のCプログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

 与えられたパスを絶対パスに変換する関数 convert である。

 階層構造をもつファイルシステムにおいて,ファイルやディレクトリを 特定する文字列をパスという。ルートディレクトリを基準としたパスを絶対パスと呼び, “/”から始まり,各階層を“/”で区切っていく。与えられたパスがディレクトリのとき, 最後の“/”はあってもなくてもよい。例えば,図のディレクトリ e の絶対パスは “/a/d/e”又は“/a/d/e/”で示す。

 一方,カレントディレクトリを基準としたパスを相対パスと呼び,相対パスを 指定するときに階層を一つ上にたどる場合は“..”を用いる。 例えば,図においてディレクトリ c をカレントディレクトリにした場合, ファイル file1.txt の相対パスは“../file1.txt”,ディレクトリ e の相対パスは “../../d/e”又は“../../d/e/”となる。また,カレントディレクトリ自身は “.”又は“./”で示す。

01_総合問題1
関数の仕様は,次のとおりである。
void convert(const char *path,const char *base, char *result);

引数:path 変換前のパス
   base カレントディレクトリの絶対パス
   result 変換後の絶対パス

機能:path が相対パス表記であれば,base を基準にした絶対パス表記に変換し, result に格納する。path が絶対パス表記であれば,result には base に関係なく path をそのまま格納する。

返却値:なし。

 ただし,result が参照する領域は,変換後の文字列を格納するのに十分であるとする。 また,冗長なパス又はパスとして認識できない文字列が引数として与えられることはないものとする。

(2) ファイルシステム上に,指定されたディレクトリやファイルが実際に存在するかどうかのチェックは行わない。

(3) 変換例を表1に示す。

(4) 次のライブラリ関数を用いる。

unsigned int strlen(const char *s);
  機能:文字列 s の長さを計算する。
  返却値:終端を示すナル文字に先行する文字の個数を返す。
int strcmp(const char *s1, const char *s2);
  機能:文字列 s1 と文字列 s2 を比較する。
  返却値: s1 と s2 が同一文字列の場合は0,それ以外の場合は0以外を返す。

int strncmp(const char *s1, const char *s2, int n);
  機能:文字列 s1 と文字列 s2 を先頭から n 文字,又はナル文字までを比較する。
  返却値:比較した n 文字が同一の場合は0を, それ以外の場合(比較が途中で終了した場合も含む)は0以外を返す。

char *strcpy(char *s1, const char *s2);
  機能:文字列 s1 に文字列 s2 をナル文字まで複写する。
  返却値:s1

char *strncpy(char *s1, const char *s2, int n);
  機能:文字列 s1 に文字列 s2 を n 文字複写する。s2 の長さが n 以上の場合は n 文字目までを複写し,n 未満の場合は残りをナル文字で埋める。
  返却値:s1


〔プログラム〕
#include
void convert(const char*, const char*, char*);

void convert(const char *path, const char *base, char *result){

const char *pp, *bp;
char *rp;
int length;

/* pathが絶対パス表記の場合 */
if(*path == '/'){
{ a };
return;
}
/* pathがカレントディレクトリの場合 */
if(!strcmp(path, ".") || !strcmp(path, "./")){
{ b };
return;
}

length = strlen(base);
bp = base + length; /* bpは文字列baseの終端を指す。*/
if(*(bp - 1) == '/')
--bp;

/* pathの先頭部にある".."又は"../"を解析することで,
baseのパス表記のうち,どこまでresultと共通になるかを調べる。*/
for(pp = path; *pp != '\0' && *pp == '.';){
if(!strncmp(pp, "../", 3)){
pp += 3;
while(bp > base && *--bp != '/');
}else if(!strncmp(pp, "./", 2)){
pp += 2;
}else if(!strncmp(pp, "..\0", 3)){
pp += 2;
while(bp > base && *--bp != '/');
}else{
break;
}
}
/* baseのパス表記と共通な部分をresultに複写する。*/
length = { c };
strncpy(result, base, length);

rp = { d };
*rp++ = '/';

/* pathの文字列のうち,先頭部分の"./"や".."を除いた残りの
部分(ppが指す文字列)を,resultの文字列に追加する。 */
strcpy(rp, pp);
return;
}

設問1 プログラム中の{ }に入れる正しい答えを, 解答群の中から選べ。

a,b に関する解答群
ア strcpy(base, path)     イ strcpy(base, result)
ウ strcpy(path, base)      エ strcpy(path, result)
オ strcpy(result, base)     力 strcpy(result, path)


c に関する解答群
ア bp ‐base     イ bp - path
ウ pp - base     エ pp - path

d に関する解答群
ア base + length       イ bp + length
ウ path + length       エ pp + length
オ result + length

設問2 表2の引数列で関数 convert を呼んだときのプログラムの動作について,表2中の{ }に入れる正しい答えを,解答群の中から選べ。ただし, プログラム中の{ a }~{ d }には 正しい答えが入っているものとする。

e に関する解答群
ア ../d/       イ ../../../../d/
ウ /         エ /../d/
オ /d/        力 d/

f,g に関する解答群
ア /a/b/c/d      イ /a/b/c/d/
ウ /a/b/cd       エ /a/b/cd/
オ d          力 d/

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************
********************************************************************************
解答
問1
答 aカ 答 bオ 答 cア 答 dオ

問2
答 eオ 答 fイ 答 gア

********************************************************************************
解説
#include
#includeは別のファイルで宣言されている関数をファイルに埋め込むことができる。
string.hではstrcpyなど文字列操作に関する関数が定義されている。

void convert(const char*, const char*, char*);
関数の定義は宣言している。

const char *pp, *bp;
const修飾子は指定した変数が定数であるを示す。定数であるということは、変数のように中身が変更できなくなる。これによって人為的なミスを防ぐことが出来る。

if(*path == '/')
*pathの一文字目に'/'が入っているか確認している。問題文にある通り絶対パスの場合は “/”から始まるから、c言語のコメントの通り、pathが絶対パス表記であるかを確認している。

{ a }
関数の仕様により、絶対パス表記であれば,result には base に関係なく path をそのまま格納する。よって、{ a }は「カ」となる。

strcmp(path, ".")
ライブラリ関数の通り、pathという文字列全体と"."を比べて、pathが"."と同一であれば、”0”となる。If文は0以外であれが真として扱われ、0であれば偽と扱われる。よってそのままでは同一の時に偽と判断されてしまう。そこで、!strcmp(path, ".")の!で否定を行う。否定は、偽の場合「真」となり、真の場合「偽」となる。

if(!strcmp(path, ".") || !strcmp(path, "./"))
ではコメントにある通り、pathがカレントディレクトリである場合の処理を行う。関数の仕様により、baseには カレントディレクトリの絶対パスが入っているよって、結果、*result
に*baseをセットしてやればよいことがわかる。よって、{ b }は、「オ」となる。

bp = base + length
lengthには”base”の文字列数が入っている。
base は、文字列ポインタで最初のアドレスが入っている。文字列のアドレスは下図のように連番になっている。例えば、下図のような文字列の時、lengthは文字列が”abc””であることから”3”となる。baseに先頭のアドレス”100”が入っているとすると、base + lengthは103となり、終端文字である\0が入る。*(bp - 1)することにより、文字列の最終文字が入る。
アドレス 値
100 a
101 b
102  c
103 \0

for(pp = path; *pp != '\0' && *pp == '.';)以下
ロジックを解析する場合には具体的な値を想定していけば、わかりやすい。
例えば、path=../../b/c/ 、base=/a/d/e/とする。

for(pp = path;・・・・・
でppに“../../b/c/“に文字の先頭アドレスをセットする。
if(!strncmp(pp, "../", 3))でppの最初の3つの文字が"../"かどうかを判別している。
この例であると、最初の3つの文字が"../"であるから、ifの中に入ってくる。

pp += 3
で3つアドレスを移動する。よって、ppに“../「.」./b/c/“の「」の部分のアドレスが設定される。

while(bp > base && *--bp != '/');
でbpは文字列“base=/a/d/e「/」”の「」のアドレスが設定されている。--bpでbpは一つ前の文字のアドレスである文字列 “base=/a/d/「e」/”の「」の文字アドレスが設定される。
--bp != '/'までループするということなので、文字列“base=/a/d「/」e/”の「」の文字アドレスが入る。

ここで何をしているかという相対パスをたどりながら、絶対パスを求めていることがわかる。ここまでの処理で、相対パスの“../b/c/は、絶対パスの/a/d/であることがわかる。

For文でループするので、この例の最終結果は、
ppに文字列“../../「b」/c/“の「」の部分のアドレスが設定され、
bpに文字列“base=/a「/」d/e/」” の「」の部分のアドレスが設定される。

{ c }
では、resultに”/a/”の部分をセットしたい。baseは文字列”「/」a/”の「」の文字アドレスが入っており、bpには文字列” /a「/」”の文字アドレスが入っている。よって、lengthは、
bp- baseで求めらるので、解答はアとなる。

厳密には、下表のようになっているとすると、bp- baseは2となる。

アドレス  値
100 /
101 a
102 /

strncpy(result, base, length)
で2文字をコピーすることから、resultには” /a/”ではなく、” /a”の文字が入っている。よって、*rp++ = '/'でresultに” /a/”が入ることになる。

これは、設問2にも関わることであるが、baseの最終文字が”/”で終わってなくても、rusultを求める過程で、”/”という文字が必ずセットされる。

{ d }
strcpy(rp, pp)で、resultにセットされている”/a/”にppの”b/c/”をセットしたいので、rpには、resultをセットしてその文字列アドレスを最終文字にしておく必要がある。
よって、result+lengthを行う必要があるので、解答はオとなる。

***********************************************************************************************************
無料から学べる講座
http://ai-light.com/itkeiei/

ニコニコチャンネル
http://ch.nicovideo.jp/ai-light

YouTubeチャンネル
https://www.youtube.com/user/ailightcom

Access・Excel倶楽部
http://ai-light.com/accessclub/

株式会社アイライト公式HP
http://www.ai-light.com/
(Access・Excelでシステム開発会社を探されている法人様はこちら)

***********************************************************************************************************

設問2

{ e }
pathを順に遡っていくと以下のようになる。
path=../../../../d/  base=/a/b/c/
path=../../../d/  base=/a/b/
path=../../d/  base=/a/
path=../d/  base=/

path=../d/  base=/のとき、
for(pp = path; *pp != '\0' && *pp == '.';)のループ条件「*pp != '\0' && *pp == '.'」は満たしているので、ループの中に入ってくる。
if(!strncmp(pp, "../", 3))もif文を満たしているので、ifの中に入ってくる。よって、pp += 3となり、path=d/となる。
while(bp > base && *--bp != '/');でbase=””となる。

設問1より、resultの結果は*rp++ = '/'で”/”が足され”/d/”となる。よって、解答はオとなる。

{ f }{ g }
設問1で解説した通り、baseの文字が”/a/b/c”であっても必ず、”/”は文字が足されるので、解答のウとかエになることはない。また、pathの文字はstrcpy(rp, pp)で、そのまま足されているので、fの解答は/a/b/c/d/となり解答はイであり、gの解答は/a/b/c/d       となり解答はアとなる。

参考:平成21年 春期 基本情報技術者試験 午後 問09

10/31のツイートまとめ

IT01765612

.@it01765612 さんの @YouTube 動画を高く評価しました: https://t.co/mO3t0ZBZAo
10-31 15:02

動画にメッセージを追加する https://t.co/mO3t0ZBZAo
10-31 14:41

adwords

外部リンク

カテゴリーメニュー 改
カテゴリ
検索フォーム
広告
最新記事
月別アーカイブ
Lc.ツリーカテゴリー
全記事表示リンク

全ての記事を表示する

リンク
各種タグ
キーワードをクリックすると該当のページに移動

中小企業診断士 情報システム  基本情報技術者のC言語 「レスリスバーガーの人間関係論(社会体系論) 「バーナードの協働体系論 「経営の階層 経営組織の体系 「官僚的組織」 「ITパスポートの徹底研究、通信講座」 「基本情報処理技術者試験の徹底研究、通信講座」 「当社のシステム開発サービスのご説明」 「マトリックス組織」 組織の活性化 「テイラーの科学的管理法 マズローの欲求5段階説 経営基本管理(コンティンジェンシー理論) 経営基本管理(SL理論) 経営基本管理(技術システムの高度化と組織) 経営基本管理(分化と統合の理論) 経営基本管理(意思決定論) 経営基本管理状況(適応的リーダーシップ理論) 経営基本管理(システム4理論) 行動科学理論(マネジリアル・グリッド) 動機づけ・衛生理論 行動学理論(ホーソン実験) 行動科学理論(フォードシステム) 経営基本管理(期待理論) XY理論 

当社のシステム開発の詳細
当社はaccess-excelでの小規模システム開発を中心に年間に50社以上の開発実績がございます。詳細は06-6599-8890ないしinfo@ai-light.comまで今すぐお問合せください
プロフィール

itkeieinews

Author:itkeieinews
ITと経営ニュースへようこそ!
アイライトIT経営研究会
株式会社アイライト
電話でのお問合せは06-6599-8890
Email:info@ai-light.com

メールフォーム
こちらからも簡単にメールを送付できます。当社のサービスに関してご質問がございましたら、よろしければ、ご利用ください。直接お電話の場合は06-6599-8890までご連絡ください。

名前:
メール:
件名:
本文:

お気に入り
本サイトをそのまま消してしまうと、もう探せなくなってしまうかもしれません。 当社はいずれお役に立てることがあるかと思いますので、よろしければお気に入りにご登録ください。
リンクツリーV1.1a
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
QRコード
QR
最新コメント
最新トラックバック
フリーエリア