カテゴリ:2.ソフトウェア > 2.7 プログラミング

配列を作ると、メモリにアドレスが確保されます。その様子をプログラムで実行します。
#include <stdio.h>
void main() {
    int A[100];  // 配列変数Aを定義。保存可能個数は100個でA[1]-A[100]を使用可能。
    int k;// 整数型の変数kを定義
    // kを1から100まで、1ずつ増やす(k++)
    for (k = 1; k <= 100; k++) {
        A[k] = k; 
        printf("A[%d]_add:%p\n",k,&A[k]); //A[k]のアドレスを表示
    }
}

結果は、以下のようになります。

c:\work>pg1.exe
A[1]_add:0028FDA0
A[2]_add:0028FDA4
A[3]_add:0028FDA8
A[4]_add:0028FDAC
A[5]_add:0028FDB0
A[6]_add:0028FDB4
A[7]_add:0028FDB8
・・・・
続きを読む

プログラミング

・プログラム言語は、「コンピュータに対する一連の動作を指示するための人工言語の総称(H25春IP問53不正解選択肢)」です。


■H28春、H25春
問20 メインプログラムを実行した後,メインプログラムの変数X,Yの値は幾つになるか。ここで,仮引数Xは値呼出し(call by value),仮引数yは参照呼出し(call byreference)であるとする。

H28h-問20
【正解】イ

少し補足します。
①仮引数Xは値呼出し(call by value
main関数での「値」を呼び出します。add関数実行では、main関数とは違うアドレスに記録します。
よってmain関数のXの値が変化しません

②仮引数yは参照呼出し(call byreference)
main関数でのyの値が入った「アドレス」を呼び出します。add関数実行により、main関数でのYの値を書き換えるので、Yの値が変化します。

#include <stdio.h>

//add関数
void add(int X, int *Y)
{
 //"Y"は参照呼び出し(ポインタ)で渡されるため
 // 値を参照する場合や、値を代入する場合は"*Y"を使用

 X = X+*Y;  //"X"に"Y"の値を加えて"X"に代入
 *Y = X+*Y;  //"X"に"Y"の値を加えて"Y"に代入
}

//main関数
void main(){
 int X, Y;  //"X","Y"をint型変数で定義
 X = 2;
 Y = 2;

 //add関数の実行
 add(X,&Y);
 //add関数実行後の"X","Y"の値を表示

 printf("add(X,Y)はX=%d,Y=%dです\n", X, Y);

}

"X"は値呼び出しで渡されるため、add関数実行により値が変化しない
 "Y"は参照呼び出しで渡されるため、add関数実行により値が変化する
具体的には、X=2+2=4、Y=4+2=6

aa

■メモ
メモリ上のアドレスと、その値
http://sc.seeeko.com/archives/5377814.html

■ポインタで変数を宣言する意味

ポインタ変数はデータを格納するアドレスそのものを変数として定義します。「char *a」と宣言すると変数aにはアドレスが格納されます。このアドレスを他の関数にもアドレス情報として渡せばデータそのものをコピーしたりする必要がありません。
 一方、「char a」と宣言すると変数aはデータの中身を示します。データの中身は他の関数に渡す場合、このままだと渡す先の変数に同じデータがコピーされるため、メモリを余分に使うことになります。
もちろん、マスターのデータを変えたくないのであれば、このままでもよいと思います。

■H25春
問8 流れ図に示す処理の動作の記述として,適切なものはどれか。ここで,二重線は並列処理の同期を表す。
H25h-問8
ア ABC又はACBを実行してデッドロックになる。
イ AB又はACを実行してデッドロックになる。
ウ Aの後にBC又はCB,BC又はCB,・・・と繰り返して実行する。
エ Aの後にBの無限ループ又はCの無限ループになる。

【正解】ウ

 

1.コンパイラ

プログラムは、CやJavaなどのプログラミング言語で書かれます。これは、人間にとっては分かりやすいのですが、コンピュータはこのままでは理解できません。コンピュータが理解できるのは、01の2進数で表された機械語だけです。

そこで、プログラム言語をコンピュータが実行できる機械語に変換する処理(コンパイル)をします。この処理のソフトウェアをコンパイラと言います。
過去問では、「コンパイラ」に関して、「コンピュータが直接実行可能な機械語に,プログラムを変換するソフトウェア(H25春IP問53不正解選択肢)」とあります。

■プログラム言語
#include <stdio.h>
void main() {
int A[100];
・・・・

   →    

■機械語
001010100111000
100011111010110
110101010111101
010111101

2.コンパイルの流れ

コンパイラにおける処理は、まず、ソースコードを解析します。このとき、字句解析,構文解析,意味解析の流れで解析をします。たとえば構文解析では、ソースコードの文法に誤りがないかをチェックします。
 次にプログラムの実行時間を短縮するための最適化を行います。たとえば、途中で値が変更されない変数を定数で置き換えることで、処理速度を速めます。
 最後に、最適化されたソースコードを機械語に変換してコンパイルが完了します。
上記の流れを、過去問(H25秋AP問20)を基に整理します。

(1)ソースコード解析

①字句解析
プログラムを表現する文字の列を,意味のある最小の構成要素の列に変換する。
②構文解析
言語の文法に基づいてプログラムを解析し,文法誤りがないかチェックする。
③意味解析
変数の宣言と使用とを対応付けたり,演算におけるデータ型の整合性をチェックする。

(2)最適化

レジスタの有効利用を目的としたレジスタ割付けや,不要な演算を省略するためのプログラム変換を行う。
応用情報技術者試験を勉強する成子 

たとえば、どんな処理がありますか?
過去問(H27秋AP問19)では、「コンパイラが行う最適化の方法」として,「定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える」とあります。
他には、たとえば、ループ処理の中に、毎回変数の値をセットしているとする。それは、ループの中で処理する必要がなければ、外に出しておく。そうすると、処理ステップ数が減る。

(3)機械語に変換

最適化されたソースコードを機械語に変換します。

3.コンパイラに関する過去問

(1)H27秋AP
問19 目的プログラムの実行時間を短くするためにコンパイラが行う最適化の方法として,適切なものはどれか。
ア 繰返し回数が多いループは,繰返し回数がより少ないループを複数回繰り返すように変形する。例えば,10,000回実行するループは,100回実行するループを100回繰り返すようにする。
イ 算術式の中で,加算でも乗算でも同じ結果が得られる演算は乗算で行うように変更する。例えば,“X+X”は“X*2”で置き換える。
ウ 定数が格納される変数を追跡し,途中で値が変更されないことが確認できれば,その変数を定数で置き換える。
エ プログラム中の2か所以上で同じ処理を行っている場合は,それらをサブルーチン化し,元のプログラムのそれらの部分をサブルーチン呼出しで置き換える。





 【正解】ウ

(2)H27春AP

問19 あるコンピュータ上で,異なる命令形式のコンピュータで実行できる目的プログラムを生成する言語処理プログラムはどれか。
ア エミュレータ     イ クロスコンパイラ
ウ 最適化コンパイラ  エ プログラムジェネレータ





 【正解】イ

(3)H25秋AP

問20 コンパイラにおける処理を字句解析,構文解析,意味解析,最適化の四つのフェーズに分けたとき,意味解析のフェーズで行う処理はどれか。
ア 言語の文法に基づいてプログラムを解析し,文法誤りがないかチェックする。
イ プログラムを表現する文字の列を,意味のある最小の構成要素の列に変換する。
ウ 変数の宣言と使用とを対応付けたり,演算におけるデータ型の整合性をチェックする。
エ レジスタの有効利用を目的としたレジスタ割付けや,不要な演算を省略するためのプログラム変換を行う。





ア:構文解析
イ:字句解析
エ:最適化

【正解】ウ

(4)H20春FE午前

問38 コンパイラによる最適化の主な目的はどれか。
ア ソースプログラムのレベルでのデバッグを容易にする。
イ プログラムの実行時間を短縮する。
ウ プログラムの保守性を改善する。
エ 目的プログラムを生成する時間を短縮する。





正解はイです。

XMLには関連する技術がいくつかあります。たとえば、Webサイトにおいて動画や音声の再生のタイミングを調整することができるSMIL(Synchronized Multimedia Integration Language)スマイルと読みます)です。

■H28秋AP午前問25
問25 動画や音声などのマルチメディアコンテンツのレイアウトや再生のタイミングをXMLフォーマットで記述するためのW3C勧告はどれか。

ア Ajax
イ CSS
ウ SMIL
エ SVG
正解は、ウです。

問24 Webページの設計の例のうち,アクセシビリティを高める観点から最も適切なものはどれか。

ア 音声を利用者に確実に聞かせるために,Webページの表示時に音声を自動的に再生する。
イ 体裁の良いレイアウトにするために,表組みを用いる。
ウ 入力が必須な項目は,色で強調するだけでなく,項目名の隣に“(必須)”などと明記する。
エ ハイパリンク先の内容が推測できるように,ハイパリンク画像のalt属性にリンク先のURLを付記する。
正解は、ウです。

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

〔プログラムの説明〕
 金額を表すときのように,整数を3けた区切り形式の文字列に変換する関数convertである。
(1)次のルールに基づいて変換を行う。
 ① 整数値が負の場合,先頭にマイナス符号を付ける。
 ② 数値の下位から3けたごとにコンマを挿入する。
  変換例を表に示す。
H20秋FE午後1問6表
(2) プログラム中で定義されている関数の仕様は,次のとおりである。
   void convert(long num,char str[ ]);
    引数:整数num.変換後の文字列strr】
    返却値:なし
    機能:整数numを3けた区切り形式の文字列に変換してstr[ ]に先頭から格納する。str[ ]には変換後の文字列を格納するのに十分な領域が確保されているものとする。また,整数numは9けた以下とする。

〔プログラム〕
 void convert(long, char[ ]);

 void convert(long num,char str[ ]){
       int minus = 0, i = 0, j = 0;
       char table[ ] =  "0123456789";
       char tmp;
     
       if(num < 0){
         minus = 1;
         num = -num;
       }

      do{
           str[j++] = table[num % 10]; /* 数値の下位から順に文字に変換 */
           num [  a  ];
           i++;
           if([  b  ] == 0 && num ! = 0){
              str[j++] = ’,’
           }
     }while(num != 0);

    if(minus != 0)[
       str[j++] = '-';
    }
    str[j--] = '\0’;

    for(i =0; [  c  ]){        /* 順序を逆にする */
         tmp = srt[i];
         str[i] = str[j];
         str[j] = tmp;
    }
  }


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

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

bに関する解答群
ア (i + 1) % 3
イ (i + 2) % 3
ウ (j + 1) % 3
エ (j + 2) % 3
オ i  %  3
力 j  %  3

cに関する解答群
ア i != j; i++
ウ i < j; i++
イ i != j; i++, j--
エ i < j; i++,j--
正解は、
a オ
b オ
c エ
です。

問3 コンピュータ間でのデータ受渡しに関する次の記述を読んで,設問1~3に答えよ。

 コンピュータ間でデータを受け渡す際の汎用的なデータ形式として,CSV(Comma Separated Value)とXML(Extensible Markup Language)がある。
 CSVは,データをコンマで区切って並べたデータ形式であり,多くの表計算ソフトやデータベースソフトで利用できるので,異なる種類のアプリケーションソフト間のデータ交換に使われることが多い。
 XMLは,SGML(Standard Generalized Markup Language)のサブセットとして1998年にW3CWorld Wide Web Consortium)が仕様を策定したメタ言語である。XMLで記述したデータオブジェクトをXML文書と呼ぶ。 XML文書には,XMLの文法に従って記述されだ“整形式の文書(well-formed document)”と,XMLの文法に従った上で更にDTD(Document Type Definition)が定義するデータ構造にも従って記述されている“妥当な文書(valid document)”がある。


設問1 次の(1)~(4)に示す要件が求められている場合,それぞれCSVXMLのどちらを採用するのが適切か。それぞれ適切なものを解答群の中から選び,記号で答えよ。

 (1)国内だけでなく,国外の業者とも取引する必要がある。
 (2)ネットワークの帯域幅が狭いので,データ量は少ない方がよい。
 (3)情報機器,半導体・電子部品,半導体製造,電気通信,物流業界におけるグローバルなサプライチェーンを構築するために必要な技術仕様を策定しているRosettaNet標準にのっとる必要がある。
 (4)商品の種類によっては,色やサイズなど商品に固有な情報が追加で必要となる可能性がある。追加される情報は,現時点では予測できない。

解答群
CSV
XML
ウ どちらとも言えない
正解は、
(1) ウ
(2) ア
(3) イ
(4) イ です。

18-SW問3-P10

正解は、
(1) イ
(2) ウ
(3) ア です。


18-SW問3-P11
正解は、
a 注文明細
b <注文
   発注者 = "ABC商事"
   発注年月日 = "2006-10-20"
   希望納期 = "2006-10-31" >
c <注文明細>
d </注文明細> です。

問7 WebSocketによって実現できるのはどれか。

ア JavaScriptで記述されたプログラムをバックグラウンドで動作させること
イ Webページで映像や音声を再生すること
ウ Webページにビットマップ形式のデータを描画すること
エ クライアントのWebブラウザとサーバ間で双方向の通信をすること
正解は、エです。

プログラミングの中の、Webプログラミングに関しては、いくつかのキーワードがあります。応用情報技術者試験シラバスでは、以下の記載があります。
④ Web プログラミング
Web サーバとWeb クライアントの仕組みを理解し,Web サーバ,Web クライアントにおけるプログラムの役割と作成方法,Web アプリケーションプログラムを開発する環境を理解する。

用語例 サーバサイドプログラミング,リッチクライアント,AjaxApacheJSPJava Server Pages),HTML5 技術(canvas,WebSocket,Geolocation API ほか)
たとえば、WebSocketに関しては、以下に解説を書いています。
http://nw.seeeko.com/archives/50956539.html

整数型や実数型、文字型など、いくつかあります。

過去問を見てみよう!
■H26春
問7 プログラム言語におけるデータ型に関する記述のうち,適切なものはどれか。
ア 実数型は,有限長の2進数で表現され,数学での実数集合と一致する。
イ 整数型は,2の補数表示を使用すると8ビットでは-128~127が扱える。
ウ 文字型は,英文字と数字の集合を定めたものである。
エ 論理型は,AND,OR,NOTの三つの値をもつ。
【正解】イ

Javaを使ったWebアプリケーションに関して、登場人物を紹介します。

Apache Webサーバのアプリケーション
 →おもにHTMLファイル、Javascriptが動く
Tomcat サーブレットを動かすエンジン
 JavaはOSに依存せずに動作するのが利点であるが、Javaを動かすエンジン(プラットフォーム)が必要。それがTomcat
jsp javaによるスクリプト形式のプログラム。WindowsでいうASP 
サーブレット サーバ上で動くJavaのプログラム ※JSPはどちらかというとWebへの表示を担当し、サーブレットはサーバ上で裏側での処理を担当する
アプレット クライアント上で動くJavaのプログラム
 →これだと、クライアントにJavaのエンジンをインストールする必要があり、今の時代にはそぐわない。Flashを動かすにはFashPlayerを入れる必要があるのと同じ。(何も入れずに動作させたいというニーズが多い。)
WebサーバとTomcatは別のサーバで動かすことが多いでしょう。(当然、一体型もできます)

※Strus:Java開発のプラットフォーム

■H16春SW午前
問45 Javaの特徴に関する説明として,適切なものはどれか。
オブジェクト指向言語であり,スーパクラスを複数指定できる多重継承が使える。
イ 整数や文字などの基本データ型をクラスとして扱うことができる。
ウ ポインタ型があるので,メモリ上のアドレスを直接参照できる。
エ メモリ管理は自動的に行われ,メモリのガーベジコレクションの機能が働く。

正解:エ

■16春SW午前
問47 J2EE (Java 2 Platform, Enterprise Edition)の構成要素の一つはどれか。
CGI
イ HTML
JavaScript
Servlet

正解:エ

■H17秋SW午前
問37 EJB  (Enterprise JavaBeans)の説明として,適切なものはどれか
Javaトランザクション管理を行うためのAPIである。
Javaを利用して,動的にHTML文書を作成し,クライアントに送信するための技術である。
ウ サーバで動作するアプリケーションをJavaで構築するためのコンポーネント規約である。
エ ブラウザからの要求を処理するためにサーバに常駐するJavaプログラムで,スレッドとして実行される。

イ:JSPの説明
ウ:正解選択肢
エ:Javaサーブレットの説明です。
正解:ウ

■H18春SW
問37 Javaサーブレットの説明はどれか。
ア HTML文書に記述されたスクリプトを実行するWebコンポーネントである。
JavaCGIを開発するための機能である。
ウ 一度ロードされるとサーバに常駐し,スレッドとして実行されるWebコンポーネントである。
エ 分散オブジェクト技術を用いたソフトウェア部品が開発できるプラットフォームである。

正解:ウ
ちなみにアはJavaScriptの説明です。

■H20春SW午前
問39 サーバでの実行を前提とした,オブジェクト指向開発によるコンポーネントソフトウェアの仕様はどれか。
EAI (Enterprise Application Integration)
EJB (Enterprise JavaBeans)
ERP (Enterprise Resource Planning)
UML (Unified Modeling Language)

正解:イ

■H27秋AP午前
問7 JavaBeansを利用してソフトウェア開発を行うメリットとして,適切なものはどれか。
ア HTML文書が動的に生成できる。
イ コンポーネントが容易に再利用できる。
ウ 分散トランザクション処理ができる。
エ メッセージングによって非同期に通信できる。


正解:イ

プログラム言語は、実は100以上あります。驚きですね。

プログラム言語の人気ランキング(検索エンジンの結果を基にしている)が以下に公表されています。
https://www.tiobe.com/tiobe-index/
2018年5月の時点で見ると
1位 Java 16.38%
2位 C 14.00%
3位 C++ 7.668%
4位以降は、
4位 Python、5位 C#、6位 VB、7位 PHP、 8位 JavaScript、9位 SQL、10位 Rubyとなっています。

PHP
ウィキペディア、ヤフー、ニコニコ動画PHPで作られているとのこと。「2ちゃんねるはなぜ潰れないのか?<扶桑社新書>」より

操作性が高くなった、高速化した(?)
例えばブラウザ内に絵が書ける、ドラックアンドドロップ
ができるなど。
詳しくはもう少し調べたい。

↑このページのトップヘ