All posts by Hong Chen

C programming 2 (3) Arrays 2

ハッカソン

ハッカソン(英語: hackathon 、別名:hack day ,hackfest ,codefest )とはソフトウェア開発分野のプログラマやグラフィックデザイナー、ユーザインタフェース設計者、プロジェクトマネージャらが集中的に作業をするソフトウェア関連プロジェクトのイベントである。

ハッカソン – Wikipedia

https://ja.wikipedia.org/wiki/ハッカソン

国内最大級のITコンテスト「JPHACK 2016」のお知らせ
——————————————————————————

こんにちは!JPHACKS運営事務局です。

突然ですが、モノづくりを仕事にしたいと考えているデザイン系、情報系学生のみなさん、
こんなお悩みはありませんか?

・「学生のうちに、アプリやプロダクトなど何か一つ形にしておきたい」
・「ただ、自分は○○はできるけど、△△ができないから、Webサービスやアプリをつくれない」
・「同世代のデザイン系学生、情報系学生と競い合い、交流したい」
・「自分のスキルがどの程度のものか確かめたい。有名企業の社会人からレビューを受けてみたい」

そんなお悩みを解決すべく今回ご紹介させていただくのが、「JPHACKS 2016」です。

http://jphacks-civic.strikingly.com/

JPHACKS2016 エントリーの歩み:

  1. JPHACKS2016 エントリー
  2. JPHACKS2016 本エントリー
    1. URL: http://ubi.daiichi-koudai.com/ – ユビキタス・クラブ
    2. github: https://github.com/
  3. JPHACKS2016追加エントリー

前回の演習

  • 演習5-4(p115) List5-6を書き換えて、配列aの要素の並びを逆順にしたものをbにコピーするプログラムを作成さよ。
#include <stdio.h>
#define NUMBER 5

int main(void)
{
    int i;
    int va[NUMBER] = {15, 20, 30};
    int vb[NUMBER];
    
    for(i = 0; i < 5; i++) {
        vb[i] = va[NUMBER - i - 1];
    }
    
    puts(" va vb");
    puts("-------");
    
    for(i = 0; i < 5; i++) {
        printf("%3d%3d\n", va[i], vb[i]);
    
    }
    
    return(0);
}

 

二次元配列の宣言

配列には同じデータ型の値を要素として管理できますが、配列そのものを要素として持つ配列を作成することが出来ます。何次元でも出来ますがよく利用される2次元を例に考えてみます。

2次元配列の書式は次の通りです。

データ型 配列名[要素数1][要素数2];

配列と単に書いた場合は1次元の配列です。1次元の配列の場合は「配列名[添字]」でそれぞれの要素を表しますが、2次元の場合は「配列名[添字][添字]」で各要素を表します。

具体的には次のように記述します。

int seiseki[2][3];

seiseki[0][0] = 72;
seiseki[0][1] = 67;
seiseki[0][2] = 84;

seiseki[1][0] = 67;
seiseki[1][1] = 92;
seiseki[1][2] = 71;

2次元配列を使う意味を考えてみます。例えば6日間の運動した時間を管理するのではあれば1行に列挙して管理するのが便利ですし、3教科の成績を2人分管理するのであれば表形式で管理した方が便利です。成績と名前などのように2つの異なるインデックスを使って要素を特定した方が便利な場合には2次元配列が有効です。

なお今回は2次元の例でしたが3次元でも4次元でも可能です。その場合は次のような書式となります。

データ型 配列名[要素数1][要素数2][要素数3];
データ型 配列名[要素数1][要素数2][要素数3][要素数4];

3次元までは利用することもありますが、4次元以上の多次元配列ともなるとあまり利用する機会はありません。

二次元配列の初期化

二次元配列の場合でも宣言と同時に初期値を設定することが出来ます。次の書式を使います。

データ型 配列名[要素数1][要素数2] = {{値00, 値01, ...}, {値10, 値11, ...}, ...};

少し分かりにくいですが上記は次のように記述したものと同じです。

データ型 配列名[要素数1][要素数2];

配列名[0][0] = 値00;
配列名[0][1] = 値01;
...


配列名[1][0] = 値10;
配列名[1][1] = 11;
...

...

要素数2の配列があたかも1つの要素のように、要素数1の分だけあるような形で指定します。具体的には次のように記述します。

int seiseki[2][3] = {{72, 67, 84}, {67, 92, 71}};

この場合は次のように記述した場合と同じです。

int seiseki[2][3];

seiseki[0][0] = 72;
seiseki[0][1] = 67;
seiseki[0][2] = 84;

seiseki[1][0] = 67;
seiseki[1][1] = 92;
seiseki[1][2] = 71;

要素数を指定せずに初期化する

配列は宣言と同時に初期化する場合は要素数を省略できました。2次元配列の場合でも最初の配列の要素数は省略が可能となっています。

データ型 配列名[][要素数2] = {{値00, 値01, ...}, {値10, 値11, ...}, ...};

具体的には次のように記述します。

int seiseki[][3] = {{72, 67, 84}, {67, 92, 71}};

二次元配列のデータの利用

では簡単なサンプルプログラムを作成して試してみます。

test5-1.c

#include <stdio.h>

int main(void){
  int seiseki[][3] = {
    {72, 67, 84}, 
    {67, 92, 71}
  };
  int i;

  for (i = 0 ; i < 2 ; i++){
    printf("%d人目の成績です¥n", i + 1);
    printf("算数の点数は%dです¥n", seiseki[i][0]);
    printf("国語の点数は%dです¥n", seiseki[i][1]);
    printf("社会の点数は%dです¥n", seiseki[i][2]);
  }

  return 0;
}

上記を「test5-1.c」の名前で保存し、実行します。

演習

test5-1.cを修正して、科目ごとの合計点を求めてください。

出力例:

算数の合計点:289
国語の合計点:293
社会の合計点:292

C exercises2 (2) bitwise

第9章 ビットを意識する

整数型の指定

整数値を扱うための型には,( signed, unsigned ) char 型と int 型とがあることは説明したが, それら以外にもある.ここで,まとめて簡単に解説する.

バイト数 ビット数 最小値 最大値
unsigned char 1 8 0 255
signed char 1 8 -128 127
unsigned short int 2 16 0 65535
signed short int 2 16 -32768 32767
unsigned int 4 32 0 4294967295
signed int 4 32 -2147483648 2147483647
unsigned long int 4 32 0 4294967295
signed long int 4 32 -2147483648 2147483647
unsigned long long int 8 64 0 18446744073709551615
signed long long int 8 64 -9223372036854775808 9223372036854775807

基本的な整数型には char, short int , int, long int, long long int の4種類があり,そのサイズは char ≦ short int ≦ int ≦ long int ≦ long long int となる.

char 型は 1 バイトであると決まっているが,あとの種類はサイズが厳密に決められたものではなく, 将来は変わる可能性がある. 実際に,数年前のパソコンは 16ビットマシンが多かったので, int 型は 16ビット=2バイトであった.

今使っているコンピュータの環境では,たまたま int 型と long int 型とは,まったく同じものとなっている.

浮動小数点型の指定

 

バイト数 ビット数 最小値 最大値
float 4 32 1.175494 10-38 3.402823 10+38
double 8 64 2.225074 10-308 1.797693 10+308

 

float型

float型は4バイト=32ビットのサイズを持ち,そのビットを次のように,符号,指数,仮数を表すために用いる.

float型の内部表現指数部-127 が指数の値となる.仮数部は仮数の小数点以下を表している.すなわち,仮数は仮数部の先頭に 1. を付加したものになる.

 

float の表す値 = (-1)符号部 × 2指数部-127 × 1.仮数部

float 型の精度(有効桁数)は2進数にして 24 (=23+1) 桁であり,10進数では約 7 桁となる.

double 型

float 型に比べて,約倍の精度をもった浮動小数点型の型が double である. double 型は 8バイト=64ビットのサイズであり,その内部表現は次のようになる.

double型の内部表現指数部-1023 が指数の値となる.仮数部は仮数の小数点以下を表している.すなわち,仮数は仮数部の先頭に 1. を付加したものになる.

 

double の表す値 = (-1)符号部 × 2指数部-1023 × 1.仮数部

double 型の精度(有効桁数)は2進数にして 53 (=52+1) 桁であり,10進数では約 15 桁となる.

Sizeof演算子

簡単に言うと,sizeofに渡された型や変数のメモリサイズを調べるものです.

sizeof演算子は2種類の使い方があります.

  • sizeof(型)
  • sizeof 変数や定数,あるいは式など

ビット演算子

ビット単位でデータ操作をするものです。対象は整数に限られます

【ビット演算子】
演算子 説明
 & ビットごとの AND
 | ビットごとの OR
 ^ ビットごとの XOR
 ~ ビットごとの反転(1 の補数)
 << 左シフト
 >> 右シフト

(1) & (and)

両方のビットが 1 のときのみ結果が 1 になるビット演算です。

0 & 0 → 0
0 & 1 → 0
1 & 0 → 0
1 & 1 → 1

必要なビット以外をOFF(0)にする処理(マスクといいます)に使用されます。

例えば、10101010 という1バイトのビット列の下位4ビットを OFF する場合、そのままにしたいビットを 1 、OFFしたいビットを 0 にした、11110000 で and することにより実現できます。

(使用例)

unsigned char a = 0xaa;	/*     10101010 */
printf("%#xn",a & 0xf0);	/* and 11110000 */

実行結果
0xa0

(2) | (or)

いずれかのビットが 1 なら結果が 1 になるビット演算です。

0 | 0 → 0
0 | 1 → 1
1 | 0 → 1
1 | 1 → 1

必要なビットをON(1)にする場合に or は使われます。

例えば、10101010 という1バイトのビット列の上位4ビットを ON する場合、ONにしたいビットを 1 、そのままにしたいビットを 0 にした、11110000 で or することにより実現できます。

(使用例)

unsigned char a = 0xaa;	/*    10101010 */
printf("%#xn",a | 0xf0);	/* or 11110000 */

実行結果
0xfa

(3) ^ (xor)

両方のビットが異なるときに結果を 1 にするビット演算です。

0 ^ 0 → 0
0 ^ 1 → 1
1 ^ 0 → 1
1 ^ 1 → 0

特定なビットを反転する場合に xor は使われます。

例えば、10101010 という1バイトのビット列の下位4ビットを反転する場合、反転したいビットを 1 、そのままにしたいビットを 0 にした、00001111 で xor することにより実現できます。

(使用例)

unsigned char a = 0xaa;	/*     10101010 */
printf("%#xn",a ^ 0x0f);	/* xor 00001111 */

実行結果
0xa5

(4) ~ (補数)

ビットの反転を行うビット演算です。

0 → 1
1 → 0

全ビットの無条件反転を行います。

(使用例)

unsigned char a = 0xaa;	/*     10101010 */
printf("%#xn",~a);

実行結果
0xff55		
(注)printf関数が unsigned char型を int型に符号拡張するために、0xff55 と表示されます。
   int型が4バイトの処理系では 0xffffff55 になります。

(5) << (左シフト)

x << n と書き、x を n ビット左へシフトします。

右側の空いたビットには 0 が入り、左側のビットは捨てられます。

左シフトは x が正の場合、x << 1 で「x * 2」を計算することと同じになります。

(例)

正の整数のとき

int x = 100;

x = x << 2;

(6) >> (右シフト)

x >> n と書き、x を n ビット右へシフトします。

左側の空いたビットには、x が符号無しなら 0 が入ります。x が符号付きなら、算術シフトを行う処理系では符号桁が入り、論理シフトを行う処理系では 0 が埋められます。 右側のビットは算術シフト、論理シフトにかかわらず捨てられます。

右シフトは x が正の場合 x >> 1 で「x / 2」を計算することと同じになります。

(例)

正の整数のとき

int x = 100;

x = x >> 2;

負の整数のとき(算術シフトを行う処理系の場合)

int x = -100;

x = x >> 2;

【参考】

  • 算術シフト:数値の演算を行うときに使用するシフト演算で、シフトの際に最上位の符号ビットを保存するシフトです。
  • 論理シフト:ビットの位置を変えるときに使用するシフト演算で、シフトの際に最上位の符号ビットを考慮することなくシフトを行います。

演習

1)任意二つのunsigned int型数値の論理AND, OR, XORを求めなさい(P324)

2)任意unsigned int型数値のビットパターンを表示(P328)

C programming 2 (2) Arrays

配列

同じ型の変数が並んだものを「配列」と言います。C以外でも多くの高級言語に採用されている。

通常の変数は

int num;

のように型と名前を示して宣言しますが、配列ではさらに要素数を加えて以下のように宣言します。

int num[10];

名前(上の例では”num”)が変数名で、それに続く[ ]内に示した”10″が、配列の要素数です。上記のように宣言すると

int 型の変数が10個確保され
その全体を“num”という名前で扱える

ようになります。

配列の各要素は添字(またはインデックス)と呼ばれる番号で一意に指定できます。Cでは先頭が0で、1ずつ増加します。

01

配列の走査

配列の各要素に規則性を持った値を代入するには、forループを使うのが便利です。例えば、10個の要素を持つint 型の配列に、100・200・300……と100ずつ増加する値を代入する処理は、リスト1のように記述できます。

カウンタ変数iは0から1ずつ増加するので、その値を配列の添字に使い、同時に(i + 1)の100倍を添字で示す要素の値として代入します。

継続条件は「i < 10」となっているので、iが9になるまでループが繰り返され、10になったら処理をせずにループを抜けるので、配列のすべての要素に値が代入されます。

リスト1:配列に100ずつ増加する値を代入していく

int num[10];    /* 整数を格納する配列 */
int i;    /* カウンタ変数 */

for(i =0; i <10; i++){
num
[i]=(i +1)*100;
}

配列の初期化

配列は同じ型の変数が並んだものですから、個々の要素の扱いは通常の変数と変わりません。配列の個々の要素に値を代入するには、以下のように代入演算子=を使います。

num[0]=100;
num
[1]=200;
num
[2]=300;
:

もちろん、通常はこんな悠長な記述はしません。配列の宣言時にすべての要素の値を示し、初期化することができます。

int num[]={100,200,300,400,500,600};

{ }内に値を「,」で区切って列挙するだけです。このようにすれば、[ ]内に最大要素数を示す必要はありません。{ }内に列挙した値の数だけの要素が自動的に確保されます。

配列のコピー

他の変数と同じように配列をコピーしたプログラム

/* 配列のコピー */
b = a; // エラーが表示され、コンパイルできません

for文を使って配列の要素をコピーしましょう。

#include <stdio.h>
 
int main(void) {
 
  int i;
 
  int a[3] = {0, 1, 2};
 
  int b[3];
 
  /* 配列のコピー */
  for(i=0;i<3;++i){
    b[i] = a[i];
  }
 
  printf("%d %d %d\n", b[0], b[1], b[2]);
 
  return 0;
}

 

マクロ定数の活用

次のプログラムは,配列を宣言すると同時に初期化しておいて,その配列要素の数値の中で最大のものを表示する。

#include <stdio.h>
#define N 10    /* 配列の要素数 */

int main()
{
    int a[N] = {4, 2, 11, 4, 15, 7, 9, 12, 3, 6};
    int i, max;

    max = a[0];
    for (i = 1; i < N; i++) {
        if (max < a[i]) {
            max = a[i];
        }
    }
    printf("max value = %d\n", max);
    return 0;
}
max value = 15

プログラム中のfor文では,配列の要素を始めから見ていき, それまでに見つけた最大値 max と,今注目している要素 a[i]とを比較し, a[i] の方が大きければ,max の値をそれで置き直す。 また,max には始めに a[0] の値が入っており, a[0]max と比較する必要がないので, for文は i=1 から始まっている。

演習問題

  • 演習5-3(p115) List5-5を書き換えて、先頭から順に5,4,3,2,1で初期化するプログラムを作成せよ。
  • 演習5-4(p115) List5-6を書き換えて、配列aの要素の並びを逆順にしたものをbにコピーするプログラムを作成さよ。
  • 演習5-5(p121) List5-8の配列の要素数をオブジェクト形式マクロで定義するように変更したプログラムを作成せよ。

C exercises2 (1) guidance

C言語プログラミング演習Iの試験解説

C言語検定試験について

試験名

C言語プログラミング能力認定試験
(C-Language Programming Skills Qualification Test)

試験目的

C言語を駆使して応用プログラム(言語処理系、ユーティリティなど)を作成する能力を認定します。

認定基準

一級 C言語を駆使し、応用プログラム(言語処理系、ユーティリティなど)が作成できる能力を有する。また使用しているOSについて理解をしている。
二級 小規模のプログラム(500行程度)が適切に(理路整然、簡潔、正しく、速く)書ける。また各種基本アルゴリズムを理解している。
三級 C言語の概念を理解し、簡単なプログラムが書ける。

 

参考(2級出題範囲)

出題内容
定数 浮動小数点定数 指数形式を許す
浮動小数点接尾語はf、l、F、Lのいずれか
整数定数 整数接尾語として長語接尾語(l、L)を含む
文字定数 拡張表記は8進拡張表記、16進拡張表記を含む
文字列リテラル 拡張表記は8進拡張表記、16進拡張表記を含む
列挙定数
演算子 ビット演算子、条件演算子、代入演算子、キャスト演算子、ポインタ/アドレス演算子、構造体演算子、sizeof演算子
宣言指定子 void、short、long、float、double、構造体共用体指定子(struct、union)、列挙型指定子(enum)、型修飾子(const)、typedef
変数 上記型指定子の単純変数、配列
外部定義
プリプロセッサ機能 ファイルの包含
ライブラリ関数
数学関数<math.h>
double cos(double x); double sin(double x);
double tan(double x); double exp(double x);
double log(double x); double log10(double x);
double pow(double x, double y);
double sqrt(double x); double ceil(double x);
double fabs(double x); double floor(double x);
入出力関数<stdio.h>
NULL、EOF、FILE、stderr、stdin、stdout、
FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);
int fscanf(FILE *stream, const char *format, …);
int fprintf(FILE *stream, const char *format, …);
int sscanf(const char *s, const char *stream, …);
int sprintf(char *s, const char *stream, …);
int fgetc(FILE *stream, …); int fputc(int c, FILE *stream);
char *fgets(char *s,int c, FILE *stream);
int fputs(const char *s, FILE *stream);
int getc(FILE *stream, …); int putc(int c, FILE *stream);
char *gets(char *s);int puts(const char *s);
int ungetc(int c, FILE *stream);
一般ユーティリティ関数<stdlib.h>
NULL  double atof(const char *nptr);
int atoi(const char *nptr);
long int atol(const char *nptr);
int rand(void);  void srand(unsigned int seed);
int abs(int i);  long int labs(long int j);
文字列操作関数<string.h>
NULL  size_t
char *strcpy(char *sl,const char *s2);
char *strncpy(char *sl,const char *s2, size_t n);
char *strcat(char *sl,const char *s2);
char *strncat(char *sl,const char *s2, size_t n);
int strcmp(const char *sl,const char *s2);
int strncmp(const char *sl,const char *s2, size_t n);
char *strchr(const char *s, int c);
char *strrchr(const char *s, int c);
char *strstr(const char *sl, const char *s2);
size_t strlen(const char *s);
その他
  • main関数の引数、整数型以外の関数
  • 自己参照構造体
  • 変数の記憶クラスと通用範囲(auto、static、register、extern)

※3級出題範囲含む

注)各級とも日本工業規格 (JIS) X3010 で出題・解答する。

勉強用パソコン購入について

MacBookAir 11Inch おすすめ!

関連情報:

ユビキタスクラブについて

Android, iPhoneアプリの開発、IoTアプリの開発が行う

関連情報:

LMS(学習管理システム:Learning Management System

演習サイト利用方法わからない生徒は多数なので、もう一度確認!

  • サイト:https://lms.daiichi-koudai.com/  (ブラウザはChrome利用)
  • ログインID:(学籍番号)
  • 初期PW: (大学メールアドレス、但しTEは大文字)

 

C programming exercises 2

【授業の概要】

コンピュータプログラム開発言語の中で広く利用されているC言語をCプログラミング開発環境ソフト:
CPad for Borland C++ Compilerを使った一人一台のPCを使い実習により学びます. 毎回問題に取り組み理解を深めます。復習問題としてプログラミング課題を出題する。

【授業要旨】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 C言語プログラミング演習Ⅰの試験解説   C言語検定試験について 授業内容を復習する 60
2 ビットを意識する sizeof演算子 ビット演算子    10進数と2進数(ビット)の相互変換 テキスト(P315-330)を読む
授業内容を復習する
30 60
3 構造体 構造体の基本  構造体の配列 テキスト(P332-341)を読む
授業内容を復習する
30 60
4 構造体 構造体のネスト 代入、比較、アドレス テキスト(P342-348)を読む
授業内容を復習する
30 60
5 構造体 構造体へのポインタ テキスト(P349-353)を読む
授業内容を復習する
30 60
6 構造体 構造体と関数  アロー演算子 テキスト(P354-362)を読む
授業内容を復習する
30 60
7 6回~9回までのまとめ 数値計算への応用  連立方程式の解法プログラムをグループで作成 授業内容を復習する 30 60
8 6回~9回までのまとめ(続) 数値計算への応用  連立方程式の解法プログラムをグループで作成 授業内容を復習する 30 60
9 ファイル入出力 ファイル入出力の基本  文字列の入出力 テキスト(P364-370)を読む
授業内容を復習する
30 60
10 ファイル入出力 文字列の入出力  書式付入出力 テキスト(P371-377)を読む
授業内容を復習する
30 60
11 ファイル入出力 テキストとバイナリのファイル テキスト(P378-386)を読む
授業内容を復習する
30 60
12 総合演習 C言語2級検定問題による演習1 授業内容を復習する 30 60
12 総合演習 C言語2級検定問題による演習1 授業内容を復習する 30 60
14 総合演習 C言語2級検定問題による演習1 授業内容を復習する 30 60
15 後期のまとめ まとめと総括。小テストの実施 授業内容を復習する 30 60

【テキスト】

速習C言語入門―脳に定着する新メソッドで必ず身につく [第2版]

ノートPCはMacが良いと思う理由

新学期に、ノートPCを考えることがありませんか?

WindowsのノートPCか、MacのノートPCか、悩むかもしれません。

ここはノートPCはMacが良いと思う理由を列挙する。

OSXとWindows両方利用できる

Macbookに、Boot Campというソフトウェアある。

Boot Campブートキャンプ)は、アップルにより開発・配布されているソフトウェアIntel Macにおいて、Microsoft Windowsの利用を可能とする。

UNIX(Linux)の勉強

OS X(オーエス テン)は、アップルが開発・販売する、Macbook コンピュータ用の現行オペレーティングシステムである。BSD UNIX ベースで新たに Mac OS X(マック オーエス テン)が作られた。

MacbookにUNIX, Apache, PHP内蔵のため、活用範囲大

Linux(リナックス)は、UnixライクなOSカーネルであるLinuxカーネル、およびそれをカーネルとして周辺を整備したシステム。

iPhoneのアプリの開発

iPhoneのアプリの開発は、Apple社のMac PCが必須です。

Macbookのトラックパッドの性能が素晴らしすぎる

Macbookでも Pro でも Air でもトラックパッドの性能というか動きが素晴らしすぎるんです。トラックパッドとはWindowsでいうタッチパッドのことなんですが、一度使うと抜け出せない程使いやすいんです!

先日ヨドバシカメラへ行った際に、hp・Dell・NEC・VAIO・Surface・Lenovo機を触ってきたのですが、それらブランドノートPCの多くはタッチパッドに若干のひっかかりがあり、ぎこちなさは否めなかったです。LenovoのThinkPadとSurfaceはなかなかよかったので、もしもWindowsノートPCを使うなら、Surfaceは膝の上でタイピングできないですしThinkPadかな?と感じました。

これを読んでいるWindowsだけのユーザーさんは是非店頭でMacbookを触ってもらえばと思います。きっと惚れてまうよ(笑)

同価格帯のWindowsノートPCよりも画面が綺麗

同価格帯のWindowsノートPCと比べて、Retina画面ではないMacbook Airですら画面の綺麗さが違います。雲泥の差です。持ち運び用の小さい画面ですから、綺麗=見やすいにこしたことはありません。作業しやすいですよ。

スリープ復帰速度とバッテリー管理はMacが上

スリープ復帰の速さとスリープ中のバッテリー消費管理はMacbookの方が断然上だと感じます。Macbookは画面を持ち上げたその時から普通に作業開始できます。また、Macbookはスリープしながら何日も放置できます。安いWindowsノートPCなんかですと、スリープしているのにもかかわらず恐ろしくバッテリーが減っていることもしばしば・・・。

キーボードが打ち易すぎる

MacはWindowsに無いキーがあったり、若干配置が違いますが、それは慣れてしまえばどうでも良いこと。それらを差し引いても、あのキーボードの打ち易さはハンパないです。機体を膝に乗っけてタイピングしても超快適な打ち心地です。タイプしていると気持ちが良いんです。外出して作業するときにはWindows ノートよりもタイピングがはかどることは間違いないです。一応WindowsノートだとLenovoのThinkPad x250はなかなか打ちやすく、さすがビジネスモデルだと思いました。

画面の縦幅が長い

Windows ノートの画面はほぼ「16:9」で、ワイド画面の幅です。それに比べ、Macbookの画面は「16:10」で縦幅が若干長いのです。例をだすと、Macbook Airの画面解像度は「1440×900」ですが、Windowsノートだと「1440x810」となります(実際にこのサイズのWindowsノートはありませんがあくまでも比率の問題)。この差は結構重要で、見やすさと作業効率に若干の影響を与えます。

やっぱりカッコイイ

外でMacbookを広げている人を見ると、やっぱりカッコイイと思う自分がいます(笑)冒頭で書きましたが、1人で引きこもって作業している時には特にそういうものは気にせず使いやすさ重視なのですが、外ではやはりMacbookがカッコイイのですよ!!これはWindowsノートPCには覆せない現実です。

Macbookは細部まで本当に丁寧に作られていますし、デザインに無駄がなというのはこういうことだな・・・と自分のMacbook Airや店頭のその他Mac機体たちをみていてつくづくそう思います。

C programming 2 (1) Guidance

C言語プログラミングⅠの前期試験解説

試験後、解説が行われたので、質問があれば、答えする。

(質問応答は、日本語の他に、英語、中国語も可能!)

C言語検定試験について

http://www.sikaku.gr.jp/js/cp/

C言語を駆使した応用プログラムの作成能力を認定

C言語は、記述の自由度が高く、使用可能なプラットホームが多いなど、使用できる場面が多いことから、現在最も広く普及しているプログラミング言語です。このC言語のプログラミング能力の測定を目的に、1992年より開始されたのがサーティファイ 情報処理能力認定委員会が主催する「C言語プログラミング能力認定試験」です。
保有スキルのレベルに合わせた3段階の認定基準を設けることにより、これから新たにプログラミングの学習を始める方から、現在プログラマやシステム・エンジニアとして既に活躍されている高度IT技術者の方まで、幅広い皆様から受験いただいています。

初学者から、ビジネスシーンで活躍できるプログラマまで、幅広いスキルを測定

「C言語プログラミング能力認定試験」は、これからプログラミングを学び始める方を対象とした「3級」から、プログラマやシステム・エンジニアとして活躍されている方の保有スキルを客観的にアピールできる「1級」まで、幅広いスキルを測定しています。
特に「1級」では、実際にPCを使用して、プログラムの仕様変更やこれに伴うプログラミング作成(コーディング・コンパイル・デバッグ)を行う、極めて実践的な資格・検定試験として、IT業界でも高く評価されています。

基本情報技術者試験の午後の試験対策としても有効

「C言語プログラミング能力認定試験」の「2級」及び「3級」は、経済産業省認定「基本情報技術者試験」の「午後問題」の出題形式も意識して作成しています。そのため、「基本情報技術者試験」の学習と連動した活用も多く見られます。保有スキルのレベルに応じた級位取得を目標としていただくことで、C言語のプログラミング能力を高めるだけではなく、「基本情報技術者試験」の合格にもつなげていくことができます。

参考(3級出題範囲)

出題内容
定数 整数定数 10進定数、8進定数、16進定数
整数接尾語は符号無し接尾語(u、U)のみ
文字定数 ワイド文字定数(L’c文字の列’)を除く
拡張表記は単純拡張表記のみ
文字列リテラル ワイド文字列リテラル(L”s文字の列”)を除く
拡張表記は単純拡張表記のみ
演算子 算術演算子、インクリメント演算子、デクリメント演算子、(算術の)代入演算子、関係演算子、等値演算子、論理関係演算子、括弧演算子、コンマ演算子
型指定子 char、int、unsigned、signed
変数
  • 上記型指定子の単純変数、配列
  • 初期化の構文
基本制御文 break、continue、do、for、if、return、switch、while
プリプロセッサ機能 #define、#include
ライブラリ関数
入出力関数<stdio.h>
EOF  NULL
int printf(const char *format, …);
int scanf(const char *format, …);
int getchar(void);  int putchar(int c);
文字操作関数<ctype.h>
int isalnum(int c);  int isalpha(int c);
int iscntrl(int c);  int isdigit(int c);
int isgraph(int c);  int islower(int c);
int isprint(int c);  int ispunct(int c);
int isspace(int c);  int isupper(int c);
int isxdigit(int c);  int tolower(int c);
int toupper(int c);
その他 Cの歴史と特徴

勉強用パソコン購入について

MacBookAir 11Inch おすすめ!

関連情報:

ユビキタスクラブについて

Android, iPhoneアプリの開発、IoTアプリの開発が行う

関連情報:

LMS(学習管理システム:Learning Management System

演習サイト利用方法わからない生徒は多数なので、もう一度確認!

  • サイト:https://lms.daiichi-koudai.com/  (ブラウザはChrome利用)
  • ログインID:(学籍番号)
  • 初期PW: (大学メールアドレス、但しTEは大文字)

C programming 2

【授業の概要】

コンピュータプログラム開発言語の中で広く利用されているC言語をCプログラミング開発環境ソフト:
CPad for Borland C++ Compilerを使った一人一台のPCを使い実習により学びます. 毎回問題に取り組み理解を深めます。復習問題としてプログラミング課題を出題する。

【授業要旨】

回数 題目 授業内容 学習課題 予習時間(分) 復習時間(分)
1 ガイダンス 学習目的 C言語プログラミングⅠの前期試験解説  C言語検定試験について

授業内容を復習する

30 60
2 配 列 配 列

テキスト(P88-101)を読む
授業内容を復習する

30 60
3 配 列 多次元配列

テキスト(P102-110)を読む
授業内容を復習する

30 60
4 関 数 関数とは

テキスト(P114-121)を読む
授業内容を復習する

30 60
5 関 数 関数の設計

テキスト(P122-138)を読む
授業内容を復習する

30 60
6 関 数 有効範囲と記憶域期間

テキスト(P140-146)を読む
授業内容を復習する

30 60
7 1回~6回までのまとめ 演算に関する演習問題をグループで解く 授業内容を復習する 30 60
8 基本型 基本型と数 テキスト(P148-151)を読む
授業内容を復習する
30 60
9 基本型 整数型と文字型 テキスト(P152-171)を読む
授業内容を復習する
30 60
10 基本型 浮動小数点型  テキスト(P172-175)を読む
授業内容を復習する
30 60
11 基本型 演算と演算子 テキスト(P176-182)を読む
授業内容を復習する
30 60
12 プログラム問題 関数形式マクロ テキスト(PP184-189)を読む
授業内容を復習する
30 60
13 プログラム問題 列挙体 テキスト(P190-193)を読む
授業内容を復習する
30 60
14 プログラム問題 再帰 テキスト(P194-197)を読む
授業内容を復習する
30 60
15 後期のまとめ まとめと総括。小テストの実施 授業内容を復習する 30 60

【テキスト】

新・明解C言語 入門編 (明解シリーズ)

参考:

C# exercises (f) Summary

C# 演習前期のまとめ

C#プログラムは「入れ子構造」をしている

csharp_struct

ボタンクリックでメッセージボックス に表示完成したコード

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // ボタンクリックでメッセージボックスに表示
        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello world");
        }
    }
}
*注意:( ” “) ; は全角(漢字)にしてはいけません。全角(漢字)の文章を入れた場合、かならず半角に戻して入力しましょう。

 

●using

usingキーワードは,プログラムの処理の流れには直接関係ありません。その代わり,プログラム全体にわたってどのライブラリを利用するかを明確にする役割があります。

前回触れたように,C#では基盤にある「 .NET Framework」のライブラリを利用してアプリケーションを作ります。.NET Frameworkでは,ライブラリの各機能を処理内容ごとにツリー状のグループに分類して管理します。ちょうど,パソコンでファイルを管理するときに目的別のフォルダを用意して分類・整理しておくのと似た状態を想像すればいいでしょう。フォルダに相当するグループを .NET Frameworkのライブラリでは「名前空間」と呼びます。

●名前空間(namespace)

usingの次に出てくるnamespaceは,それに続くブロックが所属する名前空間を指定するキーワードです。usingのところで,標準ライブラリがSystem以下の名前空間に属していることを説明しましたが,自分で作るプログラムも必ずどこかの名前空間に所属させます。

●class

classは,C#プログラムを構成する最小単位である「クラス」を定義するキーワードです。必ずnamespaceのブロック内に書かれます。C#プログラムの大部分はこのようなクラス定義の集まりです。

●メソッド(method)

メソッドはクラス内で実行される具体的な処理を一つにまとめて名前を付けたものです。メソッドはクラス定義ブロックの中にいくつでも作れます。メソッドの中でほかのメソッドを呼び出したり,ほかのクラスを利用するといったことも可能です。ただ,Mainという名前のメソッドには特別な役割があります。プログラムを起動したときには自動的にMainメソッドが実行されるのです。

●//(コメント)

この構文だけはほかとは異質で,実はC#プログラムに不可欠な要素ではありません。//と書かれた個所から改行までの部分はプログラムの処理の流れからは一切無視されます。つまり,この//以降を削除してしまってもプログラムは全く同じように動作します。

この一見ムダな行は,プログラム内に動作などをメモしておくプログラマ向けの注釈文です。プログラム内での処理という点では全くムダですが,実際のプログラミングでは読みやすい注釈を記述することがプログラミングの重要なテクニックです。例えば,思った通りにプログラムが動かずにミスを探す場合などは,わかりやすいコメントがついているかどうかでミス発見までの作業の効率が大きく変わってきます。あるいは他人の作ったプログラムや過去に自分が作ったプログラムを見る場合,処理だけが書かれているのと,適切なコメントがあるのとでは理解のしやすさが大きく違います。

期末レポート:

A4 2枚以上、eメールで提出する。

  • 提出先:h.chen@ueno.daiichi-koudai.ac.jp
  • タイトル:C#期末レポート (学籍番号)
  • 提出する期限:2016/7/29
  1. C#プログラミング関連名詞の意味を説明する
    1. イベントドリブン
    2. ツールボックス
    3. コントロール
    4. イベント
    5. メソッド
    6. プロパティ
  2. Webプログラミング関連名詞の意味を説明する
    1. API
    2. REST
    3. JSON
    4. Open Data
  3. 学内Proxyを通して、Webデータ取得する方法を説明する
    1. 画面デザイン
    2. プログラム
  4. オープンデータを利用したWebアプリの作成
    1.  オープンデータの好みのどれかを選択
      1.   – 郵便番号検索
      2.   – 天気予報検索
      3.   – その他  「LinkData.org」から探す
    2. オープンデータをブラウザで確認
      1. ブラウザ画面
    3. C#を使って、オープンデータWebアプリの作成
      1. 画面デザイン
      2. プログラム

参考:

 

 

C# exercises (e) Open Data

オープンデータを利用したWebアプリ作成

オープンデータとは

オープンデータOpen Data)とは、特定のデータが、一切の著作権、特許などの制御メカニズムの制限なしで、全ての人が望むように利用・再掲載できるような形で入手できるべきであるというアイデアである。

オープンデータの利用

LinkData.org」には、誰でも無償で利用でき、商用利用も可能なオープンデータが豊富にまとまっています。
都道府県別で探したり、人気ランキングやキーワードを指定しての検索もできるので、自分が興味のあるデータを探すのも簡単でしょう。

LinkDataのサイト内には、全国の「お城データ」や「道の駅データ」、「避難所データ」、「補助金まとめデータ」、「さくら名所データ」…など、意外とユニークで面白いデータがまとまっているので、うまく利用すれば楽しいWebアプリが作れそうです。

「ダウンロード」の項目下に、「その他の形式のAPIリストを表示」というリンクがあるのでクリックします。

すると、外部APIとしてデータが取得できるURLが一覧表示されます。

そこで「JSON」形式のURLをコピーして、実際にブラウザのアドレスバーに入力してみましょう!

あとは、このデータをC#を使って、自分のWebアプリに組み込めば良い。

グループ課題

オープンデータを利用したWebアプリの作成

  1. オープンデータの選択
    1. 郵便番号検索
    2. 天気予報検索
    3. その他
  2. オープンデータをブラウザで確認
  3. C#を使って、オープンデータWebアプリの作成