カテゴリ: 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);

}

↑このページのトップヘ