カテゴリ: 13.実際にやってみる

windows8.1の環境でJavaのプログラミング

■Eclipseを丸ごとインストール
https://blog.codecamp.jp/eclipse

以下、順番に入れていったが、日本語化もうまくいかなかったし、ちょっと面倒。

■1.JDKのダウンロードとインストール
①以下からJava Platform (JDK) をダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html

②ダウンロードしたjdk-10_windows-x64_bin.exeをインストール。特に設定を変える必要はなく、そのまま次へ
③PATHの設定
このままだとJavaの実行ファイルのPATHが通っていないので、PATHの設定をする
「システムのプロパティ」「詳細設定」「環境変数」「システム環境変数」「Path」の先頭に
C:\Program Files\Java\jdk-10\bin
を追記
→うまく動作しなければ、再起動が無難(私は再起動して初めて動いた

■2.Eclipseのダウンロードとインストール
①Eclipse IDE for Java EE Developersをダウンロード
http://www.eclipse.org/downloads/eclipse-packages/
※Java EE

②実行

※日本語化もできるが、うまく行かず。

■3.eclipse.exeを起動

■画面に表示するプログラム (pg.c) 
#include<stdio.h>
int main(){ 
 printf("こんちくは\n");
}

実行結果は以下です。コンパイルして、pgという実行ファイルを作ります。
c:\work>gcc -o pg pg.c
c:\work>pg
こんちくは

順に解説します。
#include<stdio.h> // 標準入出力の関数が定義されたファイルを読み込む
int main(){ //引数が無い(=値を渡さない)関数main関数。
 printf("こんちくは\n"); //「こんちくは」と表示。文字列は""で囲う
}

2行目のintは、戻り値の変数の値の型です。この場合はint(整数)です。

じゃあ、戻り値が無いのにこんなふうにかくの?

→以下で試してみましょう。
main(void){  ⇒エラー
int main(void){  ⇒正常動作
void main(void){  ⇒正常動作
int main(){  ⇒正常動作
void main(){   ⇒正常動作

次に、戻り値の returnを試してみましょう。
returnは、main関数を修了するという意味です。このとき、int mainとして戻り値の型を整数に宣言しています。return 0は、戻り値として0をセットしています。この戻り値ですが、他の関数からこの関数を呼んだ場合、呼び元の関数に戻り値を渡します。 
#include<stdio.h>
int main(){ 
 printf("こんちくは\n");
 returun 0;
}

①returnなし ⇒正常動作
②return;  ⇒voidで宣言すれば、正常動作。intで宣言した場合は、エラー
③return 0; ⇒正常動作。ただし、voidではなく、int mainで開始した場合にのみ。intでは戻値の型を指定しているので、当然といえばそうである。 
④returun19; ⇒正常動作。ただし、voidではなく、int mainで開始

配列を作ると、メモリにアドレスが確保されます。その様子をプログラムで実行します。
#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春
問7 配列Aに対して次の手続を実行して,2≦k≦100である素数kだけを全て出力したい。a,b,cに入るループの初期値,終値,増分として,適切な組合せはどれか。

for k = 2 to 100 step 1:
  A[k] = 1;
for m = 2 to 10 step 1:
    for k =[   a   ] to [   b   ] step [   c   ]:
   A[k] = 0;
for k = 2 to 100 step 1:
  if A[k]≠0:
   print k;

H25h-問7
【正解】イ
実際のプログラムの例は以下
#include<stdio.h>   // stdio.h(標準入出力を行うための関数が定義されたファイル)を読み込む
// main関数。引数は取らない。処理後に値を返さない
void main() {
    int A[101];    // 配列変数Aを定義。保存可能個数は101個でA[0]-A[100]を使用可能。
    int k, m;  // 整数型の変数kとmを定義
    // kを2から100まで、1ずつ増やす(k++)
    for (k = 2; k <= 100; k++) {
        A[k] = 1;  // A[2]-A[100]をすべて1にしている
    }
    // 2の倍数-10の倍数をリストから消していく
    for (m = 2; m <= 10; m++) { // mを2から10まで1ずつ増やす
        for (k = 2*m; k <= 100; k += m) {
            // kを2mから100までmずつ増やす
            // つまりkは2m, 3m, 4m,・・・と変化
            A[k] = 0;  // kはmの倍数=素数ではないから0にする
        }
    }
    for (k = 2; k <= 100; k++) { // kを2から100まで1ずつ増やす
        if (A[k] != 0) {  // A[k]が0でない、つまりkが素数なら
            printf("%d,", k);  // kを表示
        }
    }
}
【処理の解説】
・エラトステネスのふるい法を使って素数を求めています。
・変数Aは、0か1の値になるが、A[k]=0なら非素数、A[k]=1なら素数(処理の途中では「素数の可能性」)
・まず2から100をすべて素数かもしれないリストに入れる
   (k=2-100についてA[k] = 1)
素数とは「約数として自分と1だけもつ」ことから、「何かの倍数であれば素数ではない」という考えで、倍数をすべて消していく。具体的にはA[k] = 0

与えられたa,bは正の整数です。a,bの最大公約数を求めます。
フローチャートは、情報処理技術者試験(H29春AP問6)にあります。

終了時にxに格納されているものが、最大公約数です。
※mod(x,y)はxをyで割った余りです。
H29h-問6
たとえば、以下の数字で考えます。
x=20、y=25

■ループ1:t=20、x=25、y=20
■ループ2:t=5、x=20、y=5
■ループ3:t=0、x=5、y=0 ←ループ終了

終了時にはxに、a(20)とb(25)の最大公約数である5が入ります。

プログラム
実際にCでプログラムを書いてみると、以下のようになります。
#include <stdio.h>

//mod関数("x"を"y"で割った余りを計算する)
int mod(int x, int y)
{
 //"%"は余りを計算する演算子
 return x%y;  //"x"を"y"で割った余りを返す
}

//main関数
void main(){
 int x, y;
 int t;   // 余りを入れる

 //標準入力からxとyの値を取得
 printf("整数aを入力してください:");
 scanf("%d", &x);
 printf("整数bを入力してください:");
 scanf("%d", &y);

 //while文で"y"が0以外の場合はループ1を実施
 while(y!=0){
  t = mod(x, y);  //定義したmod関数の戻り値を"t"に代入
  x = y;  //"y"の値を"x"に代入
  y = t;  //"t"の値を"y"に代入
 }

 printf("x=%dです\n", x);
}

プログラム(xとyの入力チェックを含めた少し詳細なもの)
#include <stdio.h>

int mod(int x, int y)
{
 return x%y;
}

void main(){
 int x, y;
 int t;

 printf("input x:");
 if(scanf("%d", &x)!=1){  //数値の取得に失敗した場合
  printf("入力エラー\n");
  return;  //プログラムの途中終了
 }

 if(x<=0){  //xが正の整数で無い場合
  printf("数値が不正です\n");   //プログラムの途中終了
  return;
 }

 printf("input y:");

 if(scanf("%d", &y)!=1){
  printf("入力エラー\n");
  return;
 }

 if(y<=0){
  printf("数値が不正です\n");
  return;
 }

 while(y!=0){
  t = mod(x, y);
  x = y;
  y = t;
 }

 printf("x=%dです\n", x);

}

fact(n)は,非負の整数nに対してnの階乗を返す。
たとえば、fact(4)=4×3×2×1=24 です。これを求めるプログラムを書いてみます。

1.再帰的に書く場合
#include <stdio.h>

//fact関数
int fact(int n)
{
 if(n==0){  //"n"が0の場合
  return 1;  //1を返す
 }
 else{//"n"が0以外の場合
  //"n-1"を引数としてfact関数の再帰呼び出し
  return n*fact(n-1);  //"n"と戻り値の積を返す
 }
}

//main関数
void main(){
 int n;  //"n"をint型変数で定義
 //標準入力からnの値を取得
 printf("nの値を入力してください:");
 scanf("%d", &n);   //scanfを利用して整数入力させ、nに入れる

 //fact関数を階乗の結果を呼び出して表示する
 printf("fact(n)=%dです\n", fact(n));
}
ああ

2.再帰的に書かない場合
#include <stdio.h>

void main(){
 int n; //ある整数n
 int fact = 1; //nの階乗。最初は1とする
 int i; //ループに使う値
 
 // 標準入力からnの値を取得
 printf("nの値を入力してください:");
 scanf("%d", &n);   //scanfを利用して整数入力させ、nに入れる
  
 //階乗の計算。iを1から順にnになるまで掛け算する
 for(i=1; i<=n; ++i) {
     fact = fact * i;
  }; 

 //結果を表示する
 printf("%dの階乗は、%dです\n",n,fact);
}
 

if文とelseを使って、条件分岐をする。

◆シンプルにプログラムを書いてみた。
正の整数を入力してもらう。xが0以下の場合はエラーとして強制終了する。
#include <stdio.h>

void main(){
 int x;

 printf("正の整数xの値を入力してください:");
 scanf("%d", &x);   //scanfを利用して整数入力させ、xに入れる

 if(x<=0){  // "x"が0以下の場合
  printf("正の整数ではありません\n");
  return;  //プログラムの途中終了
 }
 else{
  printf("入力された値は%dです。\n", x); 
 } 
}

※今回の場合、else {}でくくらなくてもいい。

まず、言葉の定義から
・引数:関数に渡す値
・戻り値:関数の処理をした結果、呼び出し元に返す値
・関数(function):サブプログラムとでもいうのでしょうか。値を渡され、その演算をして結果を返す。
たとえば、2つの値、xとyがあって(←xとyが引数)、
それを、hikakuという関数で、大きい値を求めます(←この値が戻り値)

関数の書き方は、以下です。

戻り値の型 関数名(引数)

(例1)一般的な場合(戻り値がある)
  int fact(int n)
  引数:nというint型の値
  戻り値:関数factによる演算結果で、int型
  関数:factという処理。内容は、そのあとの{}で囲まれた中に記載される。
returnで戻り値を返す
 
(例2)戻り値が無い場合
  voidを使う
voidは戻り値が無いという意味です。(returnを使わない、またはreturn 10などと戻り値を入れず、returnのみと記載)。例えば、printfにて表示する。
 
(例3)main関数
void main(){
 メイン関数。

■プロトタイプ宣言
いろいろな処理をする関数を書き、最後にmain関数を書きます。先にmain関数を書いて、後ろにその他の関数を書く場合、関数の型だけを先に宣言しておく必要があります。それをプロトタイプ宣言といいます。

scanf(スキャンエフ)を使って、キーボード入力。この場合は、整数値をxに入れる
 scanf("%d",&x);

◆1.シンプルにプログラムを書いてみた。
整数入力としてxに値を入れて、それを表示する
#include <stdio.h>

void main(){
 int x;
 printf("xの値を入力してください:");
 scanf("%d", &x);   //scanfを利用して整数入力させ、xに入れる
        //%dは整数の場合で、%fは浮動小数点、%cは文字などと決められている
 printf("入力された値は%dです。\n", x);   // "\n" は改行コード。%dにxの値が入る。
}

※戻り値がなく、単に表示するだけなのでvoidを使っている。
※実行してきちんと動くと、うれしい。

◆2.数字が入力されているかをチェック
文字ではなく数字が入力されているかのチェックし、数字ではない場合には「入力エラーです」と表示する場合は次のようになります。
#include <stdio.h>

void main(){
 int x;
 printf("xの値を入力してください:");

// 文字ではなく数字が入力されたかのチェック。scanfは取得に成功したデータの数を返す。よって、値が1でなければエラー
if(scanf("%d", &x)!=1){ //数値の取得に失敗した場合
  printf("入力エラーです\n");
  return;  //プログラムの途中終了  
 }
 
 printf("入力された値は%dです。\n", x);  
}


プログラムを書いてみた。
printfを使って、「こんちくは」と表示する

#include<stdio.h>

void main(){

 printf("こんちくは");

}

戻り値がなく、単に表示するだけなのvoidを使っている。
※実行してきちんと動くと、うれしい。

■WindowsでのCの環境
WindowsでCのコンパイル環境(gcc)が欲しいので、以下に従う
http://yohshiy.blog.fc2.com/blog-entry-292.html

MinGW のダウンロード
https://sourceforge.net/projects/mingw/?source=typ_redirect

欲しいのはCのコンパイル環境だけなので
mingw32-base
mingw32-gcc-g++
を選択してInstllationタブからApply Chagesから「apply」
※格安SIMからのテザリングのせいか、結構時間がかかる

PATHの設定をします。システム環境変数のPATHのところを編集して、最後に「;C:\MinGW\bin」を追記

これで完成。再起動は必要なかった。

■コンパイル
コマンドプロンプト(cmd)を起動して、以下のコマンドでコンパイル。
gcc -o test test.c

※テキストでtest.cというファイルを作り、上記コマンドを実行するとtest.exeという実行ファイルが完成する。上記にて、以下のように実行しても結果は同じ
gcc -o test test.c
※拡張子は「.c」である必要あり。「.d」にしてみると、エラーになる。
※文字化けするときは、メモ帳ではなくなんらかのエディタで文字コードを「Shift-JIS」で保存すると治る可能性がある。

こっちの方がわかりやすいかな。
gcc pg1.c -o pg1
※-oで出力するファイルを指定する。指定しないとa.outという名で出力される

■Linuxでc
こちらは環境があるからそのまま実行できる。
私はAWSの上で実行したが、gccは入れる必要がある。
yum -y install gcc

①プログラムのソースファイル(pg1.c)を作成
#include<stdio.h>
int main(){
 printf("こんちくは\n");
}

②コンパイル
# gcc pg1.c

すると、a.outというファイルが作成される
# ls
a.out    pg1.c

③ファイルの実行     
# ./a.out
こんちくは

■ドットインストール C言語入門
http://dotinstall.com/lessons/basic_c
とてもわかりやすいVTR。

■メモリのアドレスを表記   
#include<stdio.h>
int main(){
 int a=10; //整数aを定義してaに10を代入
 printf("a=%d\n",a); //aの値を表示
 printf("aのアドレス=%p\n",&a); //aのメモリ上のアドレスを表示
}

実行結果は以下です。
c:\work>pg4
a=10
aのアドレス=0028FF2C

http://sc.seeeko.com/archives/5377814.html

H18春FE午前
問12 空の状態のキューとスタックの二つのデータ構造がある。次の手続を順に実行した場合,変数xに代入されるデータはどれか。ここで,
データyをスタックに挿入することをpush(y),
スタックからデータを取り出すことをpop(),
データyをキューに挿入することをenq(y),
キューからデータを取り出すことをdeq() ,
とそれぞれ表す。

push(a)
push(b)
enq(pop())
enq(c)
push(d)
push(deq())
x←pop()

ア a  イ b  ウ c  エ d
正解は、イのbです。

実行結果を先に書きます。実際のプログラムは後半に記載します。
c:\pg>stack.exe
初期状態
スタックの状態:
キューの状態:

push(a) データ a をスタック(の最後)に挿入
スタックの状態:[a]
キューの状態:

push(b) データ b をスタック(の最後)に挿入
スタックの状態:[a][b]
キューの状態:

enq(pop()) スタック(の最後)からデータを取り出して、それをキュー(の最後)に挿

スタックの状態:[a]
キューの状態:[b]

enq(c) データ c をキュー(の最後)に挿入
スタックの状態:[a]
キューの状態:[b][c]

push(d) データ d をスタック(の最後)に挿入
スタックの状態:[a][d]
キューの状態:[b][c]

push(deq()) キュー(の先頭)からデータを取り出して、スタック(の最後)に挿入
スタックの状態:[a][d][b]
キューの状態:[c]

x = pop() スタック(の最後)からデータを取り出したデータを x とする
x の値: b
スタックの状態:[a][d]
キューの状態:[c]
続きを読む

OSのコマンドを実行するプログラム。以下では、system関数を使って、pwdとdirを実行させています。
Linuxで動作させています。

https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b06_04_main.html を参照

■プログラム pg.c
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[])
{
 system(pwd;dir);
}
※argc = argument count (コマンドラインからの引数の数)。argv = argument vector 

■コンパイル
#gcc -o pg pg.c
 ※pg.exeとしても結果は同じで、exeファイルが作成される。

■実行および実行結果
#./pg.exe
/home   ←pwdの実行結果
pg.c pg.exe  ←dirの実行結果

■Windowsの場合は” ”で囲いましょう
#include <stdio.h>
#include <stdlib.h>

int main()
{
 system("dir");
}

■Windows環境にて、IPアドレスを入力してもらい、そのIPアドレスにpingを打つプログラム
#include <stdio.h>
#include <stdlib.h>
int main(){
 char sbuff[512];
 char command[1024];
 printf("アドレスを入力してください");
 gets(sbuff);
 // コマンドを合成する
 sprintf(command,"ping %s",sbuff);
 // コマンドを実行する
 system(command);
 return 0;
}

(1)インストールなど
①Kali linux ダウンロード
https://www.kali.org/downloads/

②VMへインストール
・VM workstation plyaerをダウンロード
・あとでOSをインストールする
インストールする際、Linuxでバージョンは「Debian」系である。version は不明
・HD 30G、メモリ1Gで設定
・VMwareツールをインストール
★CTL+ALTで仮想と実環境の切り替え
デフォルトのパスワードはtoor

・KaliにVMwaretoolを入れたい場合、openvmtoolsを入れるという方法もある。
apt-get update
apt-get install open-vm-tools-desktop

③起動後
イメージを更新するには
apt-get update
apt-get dist-upgrade

(2)初期設定
①キーボード
キーボードが違う気がする。viエディタなどでも、配列が違うと不便。
Setting> Region & Language から設定する。 Settingが表示されていない場合もあり、これは右上だったりする。
http://gate.hatenablog.jp/entry/2018/02/06/kali-keyboard
キーボードは日本語109 (OADG 109A) にしよう

②SSH接続
デフォルトだと、SSHサービスが起動していない場合がある。
systemctl start ssh
こうすれば、外部からSSH接続できるはずだ。(実際にできた)

(3)AWSのKali Linuxの場合
AWSでKaliLinuxを使う。
amazonマーケットプレースで選ぶことができる。無料枠の対象もあり、価格はかなり安い。

★注意点 ログインユーザはec2-user ではなくkali

VNCを接続するために、TCP5901を空ける
VNCのソフトはすでに入っているので、起動する。
https://dev.classmethod.jp/articles/kali-linux-vnc/
vncpasswd
パスワードは8文字がリミットのようだ。
また、このとき、view-only はNoにした。
vncserver :1
クライアントPCからはViewerをインストールして接続する。(英語版しかないのかな)
https://www.realvnc.com/en/connect/download/viewer/windows/
インスタンスのIP:5901でアクセスできる。
画面が小さいし、反応が遅い、キーボードが英語なので、少しやっかい。
→UltraVNCの方がいいかも
https://forest.watch.impress.co.jp/library/software/ultravnc/download_11198.html
※インストールするときは、Viewerだけでいいのではないかと思っている。

3項演算子とは、以下のように書くことで、スッキリとしたプログラムになります。

条件式 ? 式1 : 式2

条件式の結果がYesならが式1を返し、Noなら式2を返します。

たとえば、以下です。これは、aの方が大きければa、bの方が大きければbになります。
a >= b ? a : b

では、以下のプログラムを書いてみましょう。
---------------------プログラム2---------------------------
aとbの大きい数字を表示するプログラムを作りましょう
----------------------------------------------------------------
➀aとbを入力させます。
②aとbで、大きな値を出力します。
応用情報技術者試験を勉強する成子 

書いてみましたが、自信はありません。




#include<stdio.h>
int main(){
 int a;
 int b;
 printf("aを入力してください:");
 scanf("%d",&a);
 printf("bを入力してください:");
 scanf("%d",&b);
 a >= b ? a:b;
}
さて、結果はどうでしょうか。
c:\work>gcc -o pg3 pg3.c

c:\work>pg3.exe
aを入力してください:5
bを入力してください:4

c:\work>
結果が表示されません。結果を表示するようになっていなからです。以下のようにしましょう。また、intでaとbをまとめています。 int main(int a,int b){ としてもいいです。
#include<stdio.h>
int main(){
 int a,b;
 printf("aを入力してください:");
 scanf("%d",&a);
 printf("bを入力してください:");
 scanf("%d",&b);
 a >= b ? printf("%d\n",a):printf("%d\n",b);
}
今度はうまくいきました。
c:\work>pg3.exe
aを入力してください:5
bを入力してください:4
5

または、関数に引き渡すことも可能です。書いてみませんか?
顔カット3 

書きました。動きましたよ。
main関数からHikakuというaとbを比較する関数を呼びます。
結果をresultに入れて、それを表示します。
#include<stdio.h>
int Hikaku(int a,int b){
 return (a>=b)? a:b;
}
 
int main(int a,int b){
 printf("aを入力してください:");
 scanf("%d",&a);
 printf("bを入力してください:");
 scanf("%d",&b);
 int result;
 result=Hikaku(a,b);
 printf("%d\n",result);
}
ただ、Hikaku関数のa,bとmain関数のa,bは別物です。その関数の中でのみ変数が有効だからです。
よって、分かりやすいように、違う文字にした方がいいでしょう。
少し整形をした完成版がこちら。
#include<stdio.h>
int Hikaku(int x,int y){
 return (x>=y)? x:y;
}
 
int main(){
 int a=0;
 int b=0;
 int result;
 printf("aを入力してください:");
 scanf("%d",&a);
 printf("bを入力してください:");
 scanf("%d",&b);
 result=Hikaku(a,b);
 printf("大きい数字は%d\n",result);
}

以下のように、実行するプログラムに引数をつけて渡す場合があります。
# program.exe 123

ping 10.1.1.1なども、pingコマンドに10.1.1.1を引数としてつけますね。
このとき、int main(int argc,const char *argv)を使います。 →int main(int argc, char *argv[]){ がいいかも 
では、以下のプログラム(arg.c)をコンパイルして実行しましょう。
#include <stdio.h>
int main(int argc, char *argv[]){
 int i;
 for(i=0;i<argc;i++){
  printf("argv[%d]=%s\n",i,argv[i]);
 }
 return 0;
}
※argc = argument count (コマンドラインからの引数の数)。argv = argument vector 
実行結果は、以下のようになります。

c:\pg>arg.exe I am a boy.
argv[0]=arg.exe
argv[1]=I
argv[2]=am
argv[3]=a
argv[4]=boy.

JavaScriptに関して過去問(H24春IP問67不正解選択肢)では、「ブラウザで動作する処理内容を記述するスクリプト言語である」と述べられています。
JavaScriptはJavaとついていますが、Javaとは別物です。
応用情報技術者試験を勉強する成子 


共通点があるとか、派生したとかでも?
はい。全くの別物です。JavaとJavaScriptはメロンとメロンパンくらい違うとよくいわれます。メロンを注文してメロンパンが出てきたら、「それは違う」といいたくなりますよね。

また、ECMASctiptは、ブラウザなどの環境によって仕様が異なるJavaScriptの標準仕様を定めたもので、標準化団体Ecma Internationalが標準化を進めています。
参考ですが、情報セキュリティスペシャリスト試験では、試験問題に出題するプログラム言語は、C++、Java、ECMAScriptの3言語のいずれかです。
https://www.jitec.ipa.go.jp/1_00topic/topic_20111026_sc_yougo.html

簡単な例を挙げます。
<html lang = "ja">
  <body>
    <script>
     alert('ご注意ください');
    </script>
  </body>
</html>
これにより、以下のアラートを表示します。
alert
ブラウザ上に「こんにちは」と表示する場合は以下です。
<html>
 <body>
  <script>
   document.write("こんにちは");
  </script>
 </body>
</html>


■H22春AP午前
問7 HTMLだけでは実現できず, JavaScriptを使うことによってブラウザ側で実現可能になることはどれか。
ア アプレットの使用
イ 画像の表示         
ウ サーバヘのデータの送信
エ 入力データの検査

正解:エ


■書き方の基本
IPAの資料に例があります。
https://www.ipa.go.jp/files/000024729.pdf

<html>
<head>
//文字化けしたのでmetaの記述は省略
<title>サンプルページ</title>
</head>
<body>
 <p id="p1">このページはサンプルです。</p>
<script type="text/javascript">
  setTimeout(function(){
  var p1_textnode = document.getElementById('p1').firstChild;
  p1_textnode.data = 'このページはサンプルでした。';
  },5000 );
</script>
</body>
</html>

JavaScriptですが、昔と違って今は<body>の下の方に書きます。上記でも</body>の直前に書いています。
サンプルを例に解説
・<script>~</script>で囲う
・末尾は;をつける
その他
・//はコメント

■その他補足
①変数の定義
var a = 1
※varはVariant型のことで、整数INT型や文字String型などを意識しなくていいのです。

②関数の定義
function()

③getElementById
上記のIPAの資料において以下の部分
document.getElementById('p1')
このドキュメントのid=p1のデータを取得する

■JavaScriptとHTML
JavaScriptですが、いろいろなことができることは間違いありません。ただ、実際に使うのはWEB(HTML)での操作が多いので、そのあたりの基本的なところをメモ

1.まずは書いてみよう
(1)HTMLのページにJavaScriptで文字を書く。タグも書ける

<html>
<head>
<title>JavaScriptサンプル</title>
</head>
<body>
<script>
document.write("JavaScriptでHTMLの本文を書く。<br>もちろん、タグも使えます");
</script>
<br>通常のHTMLの記述はこれ
</body>
</html>

(2)ポップアップ表示
<html>
<head>
<title>JavaScriptサンプル</title>
</head>
<body>
OKを押すと、この文字が表示されるはずです。
<script>
alert("Hello");
</script>
</body>
</html>

(3)DOMの理解があったうえで、ページに表示
DOM(Document Object Model)についての理解があった方がいいだろう。階層構造を持つことがポイントの1つである。
https://eng-entrance.com/what-is-dom

①Bodyを書き換え
document.bodyに対してプロパティがinnerTextで文字を指定します。すると、bodyそのものが書き換えられるので、それ以外の文字も上書きされます。
<html>
<head>
<title>JavaScriptサンプル</title>
</head>
<body>
この文字も以下のScriptで書き換えられます。
<script>document.body.innerText = "Hello"; </script>
</body>
</html>

②DOMにおいて、bodyの配下にあるdivやpタグなどを指定して書きかえ
<div id="abc">ここに文字があります</div>
ここは書き換わりません。
<script>
document.getElementById("abc").innerHTML = "書き換えます";
</script>

②-2 瞬間的に書き換わるので、setTimeout関数を使って、3秒(3000ミリ秒)後に書き換えます。
<div id="abc">ここに文字があります</div>
ここは書き換わりません。
<script>
function kakikae(){
document.getElementById("abc").innerHTML = "書き換えます";
}
setTimeout("kakikae()", 3000);
</script>

(7)いろいろな情報を取得してをAlertで表示
①Cookieの取得
<script>alert(document.cookie)</script>
※まず、Cookieを付与されていることが前提
②URL
alert(window.location.href);
③URLのハッシュ文字(#)以降の文字を取得する
alert(window.location.hash);
→URLの後ろに、#と文字を付けてみよう。たとえば、http://sc.seeeko.com#123456

#に関して補足します。まず、URLに記載されるハッシュ文字(#)は、フラグメント識別子と言われます。以下、私のサイトのSSLのページを見て下さい。
http://sc.seeeko.com/archives/3824933.html#3
URLのうしろに#3とあります。このページには以下のように目次の設定が埋め込んで、#を変えると、その部分に飛ぶようになっています。存在しない値をいれると、先頭が表示されます。
<h2 id="1">
<h2 id="2">
<h2 id="3">
 #以降はWebサーバには送られず、この仕組みを利用したDOMベースのXSSがあります。

(5)違うページへ遷移
以下のいずれかの方法で遷移
<script>window.location='http://nw.seeeko.com';</script>
<script>window.location.href='http://nw.seeeko.com';</script>

2.変数を使ってみよう
変数の宣言はvar
(1)単純な変数の足し算
<html>
<head>
<title>JavaScriptサンプル</title>
</head>
<body>
<script>
var x = 1;
var y = 2;
sum=x+y;
document.write("x+yの合計は" + sum);
</script>
</body>
</html>

(2)ボタンを作って、押したら表示する
以下で動くが、<script>がないので、JavaScriptっぽくない。
<html>
<head>
<title>JavaScriptサンプル</title>
</head>
<body>
ボタンをクリック<br>
<input type="button" value="click" onclick='alert("Hello")'>
</body>
</html>

■■■javascriptを外部ファイルに書く
### 1.ベースとなるJavascript
Javascriptを書いてみる。

a.html

<html>
<script>
var msg = "Hello";
alert(msg);
</script>
こんにちは
</html>

※<script>のところは、以下でも同じ
<script type="text/javascript" language="JavaScript" src="123.js"></script>

### 2.jsファイルをインクルード

a.html

<html>
<script type="text/javascript" language="JavaScript" src="123.js"></script>
こんにちは
</html>

123.js

var msg = "Hello";
alert(msg);

### 3.相対パスでjsファイルをインクルード

a.html

<html>
<script type="text/javascript" language="JavaScript" src="./js/123.js"></script>
こんにちは
</html>

### 4.相対パスでjsファ
jsの中身が他人から見えないようにする。
パスを../../123.jsとすると、うまくいかなかった。
→Javascriptはサーバではなくブラウザが読みに行くので、外部からアクセスできないと動作しない。


■右クリックの禁止
<body onContextmenu="window.alert('右クリックはできません');return false"> こんにちは </body>
といっても、Ctrl+Uでソースファイルを見たり、F12の開発者ツールでソースを見たり、JavaScriptを禁止すれば見ることができる。

変数の有効範囲について、実際にプログラムを実行しながら確認しましょう。
変数iを以下のようにfuncという関数とmainという2つの関数で定義しています。
どちらは互いに独立しています。

#include <stdio.h>
void func(int i){
 printf("funcでのi=%d\n",i);
}
int main(){
 int i=0;
 func(5);
 printf("mainでのi=%d\n",i);
 return 0;
}

func関数では、main関数の引数5を受け取っています。
main関数では、定義した int i=0が有効です。
なので、同じiでも、全く別物となります。実行結果は以下です。

c:\pg>pg
funcでのi=5
mainでのi=0

このように{}内で宣言した変数はローカル変数です。
一方、外に出すと、このプログラムで利用できるグローバルになります。

応用情報技術者試験を勉強する成子

どっちがお勧めですか?
ローカル変数です。
関数の先頭または、その変数を使用する直前が分かりやすくていいと思います。

virtualboxにて・・・

・仮想ではないローカルの環境に戻る
 右側のctrl
 ※画面右下にも「Right Control」と表示されている。右のコントロールという意味。

・ネットワークの設定
「デバイス」「ネットワーク」「ネットワーク設定」から、アダプタの割り当てを「ブリッジアダプター」にしておくといいだろう。物理PCと同じセグメントのIPアドレスが割り当てられ、同一LANとして通信ができる。
「NAT」にすると、違うIPアドレスが割り当てられる。

■VirtualBoxでエラーが出た
VirtualBoxをインストールするときに、ちょっとよく覚えていないが64bit版をインストールでエラーが出た。
そこで、BIOSの設定を変えた。(このあたりはうろ覚え)
Security>Virtualization>Inter VirtualizationをEnableにした。
本件と一緒かはわからないが、以下のサイトに画面入りで丁寧に解説されている。
https://qiita.com/yamasaki1ma/items/141f12d52ef38f3f3f85

↑このページのトップヘ