Report 1a

b1910586 1a:○ Tue May 12 17:38:23 2020


提出日時:2020/05/12

[課題]
演習1.a 直角三角形の直角をはさむ2辺の長さを入力し、斜辺の長さを出力する

[ソース]
#include <stdio.h>
#include <math.h>

double hypotenuse(double a, double b) {
  return sqrt(a*a + b*b);
}
int main(void) {
  double a, b;
  printf("a> "); scanf("%lf", &a);
  printf("b> "); scanf("%lf", &b);
  double c = hypotenuse(a,b);
  printf("hypotenuse = %g\n", c);
  return 0;
}

[実行例]
a> 4
b> 3
hypotenuse = 5

[説明]
ピタゴラスの定理から c^2 = a^2 + b^2 だから、sqrtを使って斜辺を計算できる。

[レビュー課題]
自分はprintfの中に直接関数をかくが、変数cで一回結果を代入してい
るこの例のほうが分かりやすくてよかった。(クラスメートから)

[アンケート]
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
好きです。パワフルな言語だからです。
Q2. epsライブラリについてどのように思いましたか。
基本的な描画のための関数を含んでいるから、便利だと思います。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
特にないです。授業の高度な内容に取り組みたいです。

f1810567 1a:△ Tue May 19 15:56:33 2020 (Late)


提出日付:5/19

・演習2b
[課題の再掲]
多項式関数のグラフを描画する

[プログラムのソースと説明]
#include <stdio.h>
#include "eps.h"
int main(void) {
  eps_open("out.ps", 480, 480);
  eps_cmd("240 240 translate");
  eps_drawline(-200, 0, 200, 0);
  eps_drawline(0, 200, 0, -200);
  for(int i=0; i<=50; ++i){
    eps_num(0.0); eps_cmd("setgray");
    eps_cmd("1 setlinewidth");
    eps_drawline(i, 0.1*i*i-70, i+1, 0.1*(i+1)*(i+1)-70);
    eps_drawline(-i-1, 0.1*(i+1)*(i+1)-70, -i, 0.1*i*i-70);
  }
  eps_close();
  return 0;
}

2次関数y=(1/10)x^2-70を選んだ。
drawlineを使って、x軸としてx=-200からx=200まで直線を引く。
同様にy軸としてy=-200からy=200まで直線を引く。
x座標としてiを0から50まで1ずつ増やして繰り返しを行う。
numとsetgrayで色を黒に設定。sls
setlinewidthで線幅を1に設定。
グラフの描画は、x座標が整数の時の点を直線で繋げるようにして近似して行う。
直線で結ぶ2点の座標の指定は、(x,f(x))~(x+1,f(x+1))とする。

[レビュー]
見やすくグラフを配置していていいと思った。

[アンケート]
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
簡単な問題でも全部自力でやるのは思った以上に時間がかかった。
Q2. eps ライブラリについてどのように思いましたか。
Cでもこのように画像の描画を行えるのは面白いと思った。
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
予習しないと内容を追うのに精一杯で課題がこなせないことが分かった。

f1910560 1a:○ Tue May 12 21:43:58 2020


2020/05/12

プログラム
#include<stdio.h>

double power(double n){
  double x = 1;
  int i;
  if(n >= 0){
    for(i = 0; i < n; ++i){
      x = x * 2;
    }
    return (int)x;
  }else{
    for(i = n; i < 0; ++i){
      x = x / 2;
    }
    return x;
  }
}

int main(void){
  double n;
  printf("n>"); scanf("%lf", &n);
  printf("2 ^ %g = %g\n", n, power(n));
}

説明
powerで2のn乗を計算し、mainで2^n=xのような形で出力する。
1を代入したxを用意し、forを使い、nが0以上のときはxに2をかけてい
き、そうでないときは2でわっていく形にした。

レビュー課題(家族)
プログラムがわからない目でこの説明を読んでも、まずpowerって何?
ああこの1行目のことか。次のmainは・・・という感じだが、実際に動くの
を見ると「おお!」となり、文字で説明するのは難しいと思った。

アンケート
Q1.
C言語のプログラミングはきらいではない。プログラミングはまだ始め
たばかりと言えるので嫌いになるほどやっていない。

Q2.
面白い
Q3.
ここの変換ができないことを忘れていた。片仮名が全く変換できない。

f1910563 1a:○ Tue May 12 22:12:50 2020


プログラミング通論レポートA課題 #1
提出日付:5月12日


[プログラム]
<演習1.a>
#include <stdio.h>
#include <math.h>

double triangle(double x, double y){
  return sqrt(x*x + y*y);
}

int main(void){
  double x,y;
  printf("x> "); scanf("%lf", &x);                                                                    
  printf("y> "); scanf("%lf", &y);                                                                    
  printf(”length = %g\n",triangle(x,y));                                                             
  return 0;
}

[説明]
三平方の定理より、平方根の値を出す数学関数sqrtを使って、入力した
二つの値から斜辺を求める関数triangleを作った。main関数で、printf
とscanfで、題の二つの値を入力し、その値を「斜辺を求める関数」に
代入したものを直接、斜辺の値を出力するprintfでの変数として入れ出
力した。

[レビュー課題]
聞いた人:友人
コメント:printfのなかで直接triangle(x,y)を使用していることですっ
きりとしていてよいと思った。

[アンケート]
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
どちらかと言えば、好きです。理由は、コンピュータが中でどう動いて
いるのかを理解しすくなったからです。

Q2. epsライブラリについてどのように思いましたか。
文字や図形など様々な複雑なものを描きやすいのではないかと思いまし
た。グラフィックスの状態を保存/復元する機能gsave,grestoreがどの
ように利用されるのか気になりました。

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうそ
今回の課題は今までの復習の内容だったので、基礎プロでやった内容を
振り返ることができてよかったです。チャット形式の授業は他の学生の
質問も吸収できる上に、自分からも質問がしやすく、理解が深まりやす
かったです。

f1910567 1a:○ Tue May 12 19:26:57 2020


プログラミング通論 レポート 1a
提出日付: 2020/05/12

[概要]

演習2.a(2)について報告する。

[プログラム]

#include <stdio.h>
#include <stdlib.h>
#include "eps.h"
 
int main(void) {
  int i, j;
  int size = 25;
  int width = 600;
  int height = 850;
  int color_num =10;
  eps_open("out.ps", width, height);    
  for(i = 0; i < (width - 2*size) / size; ++i) {
    for(j = 0; j < (height - 2*size) / size; ++j){
      if((i+j) % 2 == 0){
        int color = abs((i-j) % (2*color_num));
        if(color > color_num){
          color = color_num - (color % color_num);
        }
        eps_num(color/(double)color_num); 
        eps_cmd("1.0 1.0 sethsbcolor");
        eps_fillrect(size + i*size, size + j*size, size, size);
      }
    }
  }
  eps_close();
  return 0;
}

[プログラムの説明]

#プログラムの概要
斜めに色を変えながら、市松模様を描いたpsファイルを出力する。

#変数の説明
int size: 正四角形の辺の長さを決める
int width: 画像の幅を定める
int height: 画像の高さを定める
int color_num: 色の種類を定める

#プログラムの説明
2重forループ(変数: i, j)内で、条件((i+j) % 2 == 0)を満たす時、
(i, j)に応じた位置に正四角形を描き込む。
またこの時、i - j に応じて色を変更している。

[レビュー課題]

描画する色が変化するようになるように工夫されていて良いと思います。
また、横幅と高さを変数として定義されていて、確認しやすくて良いで
す。


[アンケート]

#Q1: C言語のプログラミングは好き/嫌いどちら? 理由は?
A: あまり好きではない。ポインタを使っているとなにを書いてあるか
が分かりにくい、Pythonから始めたためCは宣言, セミコロン, ポイン
タなどギャップが辛い。

#Q2: epsライブラリについてどのように思いましたか。
A: とくに思うところはなかった。エンドユーザーとして使えばいいと思った。

#Q3: リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
A: C言語の基本的な使い方について復習できた。
また、作成したプログラムは以下のように改善した方良いかもしれない
・プログラムではpaddingのようなこともしたが、それを変数で指定出来るようにする
・color_numが色の種類の数と一致していないのは分かりにくいかもしれないので一致させる

f1910575 1a:△ Tue May 12 15:47:00 2020


プログラミング通論 2020 第1回 レポート1a


選択した課題: 演習1c
(課題の要約)2以上の自然数nを受け取り、その素因数分解を表示する。

方針: 与えられた数をできるだけ小さい素数で割っていくことを考える。
   偶数の素数は2のみであるから、まずは2で割れるだけ割っていく。
   2で割れなくなった後、3から昇順で割れるだけ割っていけば最終
的にはすべて素因数が取り出される。


コード: 

#include <stdio.h>

void prime_factorization(int n) {
  printf("%d = ", n);
  if (n % 2 == 0) {
    printf("2");
    n = n / 2;
  } else {
    for (int i = 3; i <= n; i++) {
      if (n % i == 0) {
        printf("%d", i);
        n = n / i;
        break;
      }
    }
  }
  while (n % 2 == 0) {
    printf("*2");
    n = n / 2;
  }
  for (int i = 3; i <= n; i++) {
    while (n % i == 0) {
      printf("*%d", i);
      n = n / i;
    }
  }
  printf("\n");
}


int main(void) {
  int n;
  printf("素因数分解したい2以上の自然数を入力してください : ");
  scanf("%d", &n);
  prime_factorization(n);
  return 0;
}

実行例: 以下に実行例をいくつか示した。

[f1910575@sol l1]$ ./a.out
素因数分解したい2以上の自然数を入力してください : 2
2 = 2
[f1910575@sol l1]$ ./a.out
素因数分解したい2以上の自然数を入力してください : 40
40 = 2*2*2*5
[f1910575@sol l1]$ ./a.out
素因数分解したい2以上の自然数を入力してください : 100
100 = 2*2*5*5
[f1910575@sol l1]$ ./a.out
素因数分解したい2以上の自然数を入力してください : 45
45 = 3*3*5

解説: 「(引数) = (数)*(数)*(数)*...」の形式で表すため、はじめに「(引数) =」を表示させた。
   次のif文で引数が偶数の場合は2を、そうでない場合は2以外ので
きるだけ小さい素数で割り、その割る数を表示した。
   次のwhile文で2で割れる限り割り続け、その都度2を演算子*を付しつつ素因数として表示している。
   次のfor文では3以上の数で順次割れるだけ割っていき、同様にそ
の都度割る数を素因数として表示している。
   最後にそれ以上割れなくなったら改行して素因数分解を終了する。
   main部分は引数nを読み込み、関数prime_factorization(n)を呼び出している。

考察: 素因数分解が終わった後、最後に*が残らないように(10=2*5*な
ど)冒頭で一段階分素因数を*無しで表示させた。
   しかし、最後にその*を消す形式にすることでより簡潔なプログラムにできたと感じた。
   また、このプログラムで素数判定は行っていないが、小さい数で
順に割っていくことで結果としては素因数分解を実現できることが分かっ
た。

アンケート: Q1. プログラムを作るという課題はどれくらい大変でしたか?
       →課題によっては難易度の差を感じたが、お手上げとまではいかない程度だった。
      Q2. epsライブラリを使ってみてどのように感じましたか。
       →ライブラリの実装部分が少し煩雑に感じた。
      Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
       →PostScriptの内容をあまり覚えていなかったため、いい復習になった。

f1910576 1a:○ Tue May 12 21:56:46 2020


学籍番号:1910576
氏名:藤松 栞 (ペア:「個人作業」)
提出日時:5/12

<課題について>
演習1b「 整数nを入力し、2^nを出力する。n ≥ 0のときは整数、そうで
ないときは 実数形式で出力すること。 」を課題の1aとして提出する。
プログラムは以下のように書いた。

#include <stdio.h>
void ruijyou(int a){
    int s=1;
    double t=1.0;
    if(a==0){
        printf("%d\n",1);
    }else if(a>0){
        int i=1;
    for(i=1;i<=a;++i){
        s=s*2;}
    printf("%d\n",s);

        
}else if(a<0){
    a=a*(-1);
int j=1;
for(j=1;j<=a;++j){
    t=t*2;
    }
    t=1.0/t;
    printf("%lf\n",t);
    
}
}
int main(void){
    int n;
    printf("n>");scanf("%d",&n);
    ruijyou(n);

    return 0;
}

<プログラムの説明と実行例>
最初にnが0の時と0より大きい場合と0より小さい場合に分けた。0の時
は1を表示、0より大きい場合は繰り返しを用いて用意した記号(sとおい
た)にn回分2をかけていき、sを表示するようにした。また、0より小さ
い場合は最初に-1をかけて自然数にした後、0より大きい場合と同様の
作業を行った後、逆数を取り逆数にしたものを表示するようにした。


実行例は
n>4
16

n>-3
0.125000

n>0
1
となり実行は出来たと言える。


<レビュー課題>
同大学の他類の友人にレビューを頼んだ
「コードを書くときはそれぞれのコードがどこまでなのかわかりやすく
なるようにプルダウンさせるといいと思います。コードの内容はしっか
りかけていると思います。」と言われた。

<アンケート>
Q1.C言語のプログラミングは好き/嫌いどちら? 理由は?
嫌い。Rubyに比べるとエラー吐く量が多く、関数もとても多く使い分けが複雑だから。 

Q2.epsライブラリについてどのように思いましたか。
 
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
プロ通の時関数が分からなく、今までなんとなくでやりすごしていたの
ですが(春休み自分でやってた時もずっとmain内で描いていた)今回でちゃ
んと役割が分かったので良かったです。

f1910579 1a:○ Tue May 12 16:36:09 2020


レポート課題1a
5月12日提出

演習1b
[コード]
#include <stdio.h>
#include <math.h>
double zizyou(int n){
  int x =pow(2,n);
  double y = pow(2,n);
  if(n>0){return x;}
  return y;
}

int main(void) {
  double n;
  printf("n> "); scanf("%lf", &n);
  double x = zizyou(n);
  printf("zizyou = %g\n", x);
  return 0;
}

[簡単な説明]
nが0以上か以下かで分岐させ、intとdoubleで違いを表した。

[他人からのコメント]
nによって変数を整数型と実数型に分けているところがよかったです。

[アンケート]
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
 --今のところ覚えなければいけないことが多く嫌いだが、慣れていけ
ればエラーの検出など便利になっていくので好きになっていくと思う。

Q2. epsライブラリについてどのように思いましたか。
 --まだ取りかかってないので分からない。これから内容に取りかかっ
て、しっかり理解していきたい。

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
 --他のクラスメートはチャットの方式がやりやすいと言っていたが、
私はチャットでは記録に残ってしまい、かつみんなに見られるので質問
をしにくいと思った。だからメールなど授業中プライベートに質問でき
る場所が欲しいと思った。よろしければ対処していただけますか。

f1910583 1a:○ Tue May 12 15:05:29 2020


レポート1a

-選択した課題-
1a.直角三角形の直角をはさむ2辺の長さを入力し、斜辺の長さを出力する。

-ソースコード-
#include <stdio.h>
#include <math.h>

double hypotenuse(double a, double b){
    double c = sqrt((a * a) + (b * b));
    return  c;
}

int main(void){
    double a, b, c;
    printf("a > "); scanf("%lf", &a);
    printf("b > "); scanf("%lf", &b);
    c = hypotenuse(a, b);
    printf("length of the hypotenuse = %g\n", c);
    return 0;
}

-実行例-
・実行例1
a > 3
b > 4
length of the hypotenuse = 5
・実行例2
a > 3.5
b > 4.5
length of the hypotenuse = 5.70088

-簡単な説明-
三平方の定理を用いて、直角三角形の斜辺の長さcを出力するプログラムである。
直角三角形の直角をはさむ2辺の長さa, bをhypotenuseに渡して、aの2
乗とbの2乗の和にルートをとった値cを返す。

-レビュー課題-
友人からのレビューは下記の通りである。
「(a * a) + (b * b)はpow(a, 2.0)とかするより見やすいと思った。」

-アンケート-
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
データ型を強く意識しないといけないので、あまり好きではない。
Q2. eps ライブラリについてどのように思いましたか。
ライブラリがあるとnewpath 100 100 moveto 100 200 lineto 200 200
lineto...の羅列よりコードが見やすくなると感じた。
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
C言語の良い復習になった。

h1810533 1a:○ Tue May 12 19:10:06 2020


個人作業
5月12日
作成したプログラム
#include<stdio.h>
#include<math.h>
double trilong(double n, double m){
    double x = sqrt(n * n + m * m);
        return x;
	}
	int main(void){
	    double m,n;
	        printf("m> "); scanf("%lf",&m);
		    printf("n> "); scanf("%lf",&n);
		        double x = trilong(n,m);
			    printf("%f\n", x);
			        return 0;
				}

説明
直角三角形の直角を挟む二辺m,nから斜辺の長さxを求めるプログラム。

コメント
余計な変数や定義がなく読みやすい。また、少数も処理できる範囲に含まれているのもいい。
入力に数字以外の文字を入れた時エラーメッセージが出るようにするとなおよいかもしれない。
(友人)
アンケート
Q1.C言語のプログラミングは好き/嫌いどちら? 理由は?
嫌い。理由は少し間違えただけでまともに動かなくなるから。
Q2.epsライブラリについてどのように思いましたか。
家庭での実装は難しいと思った。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
再履修の科目だが、リモートワークになって新鮮に感じた。

h1810542 1a:○ Tue May 12 20:52:15 2020


レポートA

選択した課題1:
演習1a: 直角三角形の直角を挟む2辺の長さを
入力し、斜辺の長さを出力する。

方針1:斜辺の計算過程で2辺を2乗で計算した。

#include<stdio.h>

int main(void){
    int w,h;
    double s;
    scanf("%d%d",&w,&h);
    s = w^2 + h^2;
    double sqrt (double s);
    printf("斜線は%f\n",s);
    return 0;
}

解説1:
底辺と高さ入力して、斜辺の二乗を求めてその計算値の平方根を実数で求める。

考察1:
斜辺を求める計算過程をプログラムすれば問題なく動作することができる。

Q1. c言語のプログラミングは好き/嫌いどちら?理由は? 
好きになるように頑張ります。

Q2. eps ライブラリについてどのように思いましたか。
自分の手で書くには困難な図や絵を正確に描けるってすごいと思った。
 
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ
僕はプログラミングのことが好きなのかもしれない。

h1910525 1a:○ Tue May 12 22:01:43 2020


学籍番号 1910525
ペア 1910616

演習1.c

#include <stdio.h>
int prime(int n){
    int i, num;
    num = n;
    i = 2;
    while(num > 1){
        if(num % i == 0){
            num = num / i;
            printf("%d ", i);
        }else{
            i += 1;
        }
    }
}

int main(void) {
    int n;
    printf("n> "); scanf("%d", &n);
    prime(n);
    return 0;
}


簡単な説明:iを2からの自然数として入力値を割っていく。剰余が0の
とき割り算を実行し、そうでないときはiを1大きくしていく。割られる
数numが1になれば終了。

レビュー
「コードの量を極力減らしてるのがよかった」(ぐちを)

アンケート
Q1.C言語のプログラミングは好き/嫌いどちら?理由は?
rubyと比べるとエラーが見やすい事が多いので好き。

Q2.epsライブラリについてどのように思いましたか。
独自の規格は使いこなせれば楽な分、エラーがよくわからなくなったり
するところが不便だなと感じた。

Q3.リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
ペアで課題に取り組むのは効率的でかつ発見も多くとてもよかった。今
後も続けていきたい。

h1910527 1a:○ Tue May 12 17:57:57 2020



演習1b
#include <stdio.h>

float ruijo(int n){
    float number = 1.0;
    if (n>=0){
        for (int i=0;i<n;i++){
            number *= 2.0;
        }
    }else{
        for (int i=0;i>n;i--){
            number /= 2.0;
        }
    }
    return number;
}

int main(){
    int n;
    printf("n>");scanf("%d",&n);
    float answer = ruijo(n);
    if (n>=0){
        printf("Answer:%d\n",(int)answer);
    }else{
        printf("Answer:%lf\n",answer);
    }
    return 0;
}

解説
main関数で指数nを受け取り、ruijo関数でnの値によりべき乗を計算し
てfloat型で返させた後、
n>=0の場合は整数型にキャスト、そうでない場合は実数型で結果を出力している。

レビュー
実数型の保持にdoubleではなくfloatを使う理由が分からなかった。自
己代入演算子で表記が簡潔になっている点はよい。

アンケート
Q1.好き、コンパイラが不備を教えてくれるので動的型付け言語と比べてコードを直しやすい
Q2.動作を手続きとして完結させ、細かい点はcmdで直接PSの動作を叩けるのが良いと思った。
Q3.春休みの間に色々忘れているので早めに記憶を戻さないとと思った。

h1910528 1a:○ Tue May 12 14:31:10 2020


提出日:5/12
■作成したプログラム
[演習1a]
#include <stdio.h>
#include <math.h>
double trilen(double w, double h) {
 double n = (w * w) + (h * h);
 double s = sqrt(n);
 return s;
}
int main(void) {
 double w, h;
 printf("w> "); scanf("%lf", &w);
 printf("h> "); scanf("%lf", &h);
 double x = trilen(w, h);
 printf("the length = %g\n", x);
 return 0;
}
■簡単な説明
ピタゴラスの定理をつかって直角三角形の斜辺以外の二辺の長さから斜
辺の長さをだすプログラム。平方の計算をするためにsqrtを使うので、
math.hをインクルードした。あとは基本的に授業で使用したtriarea.c
と同様のプログラムになっている。
■他人からの感想
(友達)trilenで一度nという変数を作ってからsqrtにnを入力することで
見た目にスッキリとしていてわかりやすいものになっていると思う。

■アンケート
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
好き。自分が出来ない事が出来るようになっていくのが目に見えてわか
るし頭をつかうのが楽しい。しかし、物覚えがわるいので同じことを何
度も調べるのが苦痛。
Q2. epsライブラリについてどのように思いましたか。
初読じゃわからない点も多かったので復習を通して学びを深めたい。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
チャット授業ということで慣れない点も多く不安も多いが丁寧に進めていこうと思う。

h1910529 1a:○ Tue May 12 16:07:34 2020


プログラミング通論 #01
学籍番号:1910529           花籠樹
  提出日:5月12日

 プログラム
  #include <stdio.h>
#include <math.h>
double syahen(double w, double h) {
  double s = sqrt(w*w+h*h);
  return s;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = syahen(w, h);
  printf("syahen = %lf\n", x);
  return 0;
}

 説明
  ピタゴラスの定理に基づき斜辺を求める。平方根を用いるため
math.hを用いる。main関数ではlfを用いて実数対応させた。

 レビュー
 main関数では意味のあるアルファベットを使うべきではないかとの意見がでた

 アンケート
 A1,好き、基本的言語だから
 A2,特にこれといった感想はないです
 A3,よろしくおねがいします

h1910531 1a:○ Tue May 12 15:28:40 2020


課題
1.学籍番号 1910531
2.@@@ 氏名 濵﨑 武史
3. 個人作業、
4. 提出日時 5月12日火曜日

5.プログラム
#include<stdio.h>
#include <math.h>
#include <stdbool.h>
double triangle(double w,double h){
  double s=sqrt(w*w+h*h);
  return s;
}
int main(void) {
  double w,h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x= triangle(w,h);
  printf(" triangle =%g\n",x);
  return 0;
}


6.説明
教科書にあったtriareaを参考にした。
二つの文字を用いて一つの計算をする点が同じである。
sqrtを用いるために#include <math.h> が必要となる。
7.レビュー課題
友人
斜辺の長さをルートの中に一つにまとめていてきれいだと思います。
8.アンケート
Q1. プログラムを作るという課題はどれくらい大変でしたか?
講義について行くのでやっとでした。
zoomの相手がepsをする中で、私一人課題1をしていました。
Q2. eps ライブラリを使ってみてどのように感じましたか。
まだ満足に使えていないため、次の講義までに使いたいです。
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
昨年度の復習を継続的に行う必要があります。

h1910532 1a:○ Tue May 12 23:16:38 2020


プログラミング通論 #1
学籍番号 1910532
個人作業
2020/5/12

1a
直角三角形の直角をはさむ2辺の長さを入力し、斜辺の長さを出力するプログラム

#include <stdio.h>
#include <math.h>
double hypotenuse(double w, double h) {
  double s = w*w + h*h;
  double x = sqrt(s);
  return x;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = hypotenuse(w, h);
  printf("length of hypotenuse = %g\n", x);
  return 0;
}

実行例
w> 3
h> 4
length of hypotenuse = 5

説明
ピタゴラスの定理を利用して、斜辺の長さを求めた。

レビュー(TAさん)
変数w,hはそれぞれwidth(横幅),height(高さ)の頭文字をとっていて、
このプログラムは2辺の長さを扱い、横幅、高さを扱うわけではないの
で、辺a,辺bなどとした方が題意に沿っているかと思います。

アンケート
A1 嫌い。
  Rubyより難しいから。

A2 演習で手一杯なので、あってもなくても変わらないと思った。

A3 遠隔での授業は、友達やTAさんに質問しづらかった。慣れていこうと思った。

h1910534 1a:○ Tue May 12 17:27:47 2020


提出: 2020年5月12日
ペア: 個人作業

課題の再掲
演習1b
整数nを入力し、2^nを出力する。n ≥ 0のときは整数、そうでないときは実数形式で出力する。

プログラム
#include <stdio.h>

int main() {
  int n;
  double res = 1.0;
  printf("n> "); scanf("%d", &n);
  if (n >= 0) {
    for (int i = 0; i < n; i++) {
      res *= 2;
    }
    printf("%d\n", (int)res);
  }else{
    for (int i = 0; n < i; i--) {
      res /= 2;
    }
    printf("%g\n", res);
  }
  return 0;
}


プログラムの説明
4行目で整数nを受け取るための変数nを宣言した。
5行目で計算した結果用の変数resを宣言、nが正の時結果は整数、nが負
の時結果は実数なのでここでresの型はdouble、初期値はn=0の時の結果
である1.0にした。
6行目でscanfによりnの値を入力で得る。
7行目のif else文でnの正負の判定をした、分岐先でそれぞれfor文によ
りnの値の回数だけ計算を繰り返し結果を仕様に合わせて出力した。

もらったコメント
友人から
「最終的な出力で1番大きい型を最初に使っているのが良い」 

アンケート
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
Rubyと比べて型に厳格なので好きです
Q2. epsライブラリについてどのように思いましたか。
実際に使う機会は多くなさそうだが座標や大きさを指定して描くのはプ
ログラミングらしくて面白いと思う
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
c言語の記述について忘れている部分が自分で思っていたよりもあるこ
とがわかった。今回の演習で取り戻して、来週以降の授業で新しく学ぶ
ことに集中できるようにしたい。

h1910541 1a:○ Wed May 13 18:19:07 2020


第一回プログラミング通論 課題A
学籍番号:1910541,氏名:@@@光 真司
5月12日

0.1 課題の再掲 整数nを入力し、2の累乗を出力する。nが0以上のとき
は整数、そうでないと きは実数形式で出力すること。

2 プログラムコード
// ruijo --- 2 of ruijo
#include <stdio.h>
#include <math.h>
double ruijo(double n){
double a = pow(2, n);
return a;
}
int main(void)
{ double n; printf("n> "); scanf("%lf", &n);
return 0;
}

3 プログラムの説明 今回は、累乗と冪乗の両方をかねたいので、
double を使うことが良い。また、mathを使うことによってpowで簡単に
累乗根を出せるので、簡単なプログラムになる。

4 レビュー nをもとから実数として受け取り、nが負の整数の場合も一
括で処理できているため、非常にシンプルで分かりやすいコードだと思
う。 (クラスメイト)

5 アンケートの答え
5.1
A1,好きでもなく嫌いでもなく。理由として難しいからこそ学びたいと
思うけど、 難しさに心おれるときもある
5.2
A2,この段階では行っていないので、挑戦だけはしてみたいです。
5.3
A3,特になし

h1910542 1a:○ Tue May 12 17:01:48 2020



1.プログラム
演習1のa
演習1のaは直角三角形の直角を挟む2辺の長さを入力したときの斜辺の
長さを出力するというプログラム。作成したプログラムは以下のように
なった。

#include <stdio.h>
#include <math.h>
double syahen(double x, double y){
    double z = sqrt(x*x + y*y);
    return z;
}
int main(void){
    double x; double y;
    printf("x> "); scanf("%lf", &x);
    printf("y> "); scanf("%lf", &y);
    double s = syahen(x, y);
    printf("%g\n", s);
    return 0;
}

 syahenでは直角三角形の直角を挟む2辺x、yがあるときの斜辺を返
 すプログラム。また、mainでx、yを入力させその値から斜辺を出力
 する。
 
2.提出プログラムに対するコメント(友人)
 数学関数のsqrtを用いて無駄なく斜辺を求めることができている。

3.アンケート
 Q1.Rubyの後にやっているのでエラーが多いところは嫌いというか
難しいと感じています。しかし,
想像通りできたときは達成感があるので知識が深まってくればより好き
になると思います。

 Q2.どの部分を変えればその形になるのか少しずつ分かってきたの
で面白いと思った。

 Q3.epsライブラリについてあまり理解出来てなかった部分を復習で
きたので良かった。

h1910546 1a:○ Tue May 12 17:10:33 2020




作ったプログラム
#include <stdio.h>
#include <math.h>
double triarea(double w,double h){
  double s = sqrt(w*w + h*h);
  return s;
}
int main(void){
  double w,h;
  printf("w>");scanf("%lf",&w);
  printf("h>");scanf("%lf",&h);
  double x = triarea(w,h);
  printf("syahen of triangle = %g\n",x);
  return 0;
}

プログラムの説明
これは、直角三角形の直角をはさむ2辺の長さを入力し、斜辺の長さを
出力するプログラムである。平方根を使うので、#include <math.h>を
追加しsqrt(w*w + h*h)で斜辺の長さを表した。

レビュー課題(友人からのコメント)
returnの値を、sqrt(w*w + h*h)のように前もって計算することで簡潔
にしているところや、printfの説明が丁寧であるところがよいと思った。

アンケート
Q1.C言語のプログラミングは好き/嫌いどちら? 理由は? 
あまり好きではない。理由はC言語のポインタとアドレスの使い方が難しいから。

Q2.epsライブラリについてどのように思いましたか。
グラフを作成するときに便利だと思った。
 
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
C言語はまだまだ不慣れなので、しっかり勉強したい。

h1910556 1a:○ Tue May 12 15:45:54 2020


レポート1a
2020/5/12 提出

1 プログラム
1.1 ソースコード

 // フィボナッチ数列
 #include <stdio.h>

 int main(void)
 {
     int n, x = 1, y = 1, z = x + y;
     printf("n>");
     scanf("%d", &n);
     for (int i = 0; i < n; ++i) {
         printf("%d ", x);
         x = y;
         y = z;
         z = x + y;
     }
     printf("\b\n");
 }


1.2 入出力例

 in  n>5
 out 1 1 2 3 5

 in  n>15        
 out 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610


1.3 説明

 フィボナッチ数列{a_n}では
  a_1 = 1
  a_2 = 1
  a_n = a_(n-1) + a_(n-2) (n>=3)
 の漸化式が成り立つ。
 プログラミングで3段目の式を成り立たせるためにはa_(n-1)やa_(n-2)
  の数を記憶しておく必要があり、これを実現するためにx, y, zの3変
  数を1行目で用意した。
 2,3行目は入力。
 4~9行目はforによるn回ループを使って漸化式の3段目の式を成り立た
  せながら、結果を空白で区切りながら出力している。
 10行目ではループによる出力によって生じた最終項後のスペースを、
  バックスペースを表す\bで削除してから\nで改行している。
  
2 レビュー課題

 x, y, zの3つの変数を用意し、xを出力した後にx,yは必要な値に上書
 きしつつ次の数列値をzに代入して進めていくforループは良いと思い
 ました。
  簡潔に収まったとても良いプログラムだと思いました。 (友人)

3 アンケート
Q1.C 言語のプログラミングは好き/嫌いどちら? 理由は?

 嫌い
 C++ならvectorやstringなどの便利なライブラリが使えるから。

Q2.epsライブラリについてどのように思いましたか。
 どうも思わない。

Q3.リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
 今回は復習だから簡単だった。

h1910589 1a:○ Tue May 12 18:25:01 2020


学籍番号:1910589
ペア:個人作業
提出日時:5/12

[プログラムのソース]
#include <stdio.h>
#include <math.h>



double banana(double a, double b){
  double x=(a*a+b*b);
  double c=sqrt(x);
  return c;
}



int main(void){
  double a,b;
  printf("a>"); scanf("%lf",&a);
  printf("b>"); scanf("%lf",&b);
  double y= banana(a,b);
  printf("Length of hypotenuse of right triangle = %g\n",y);
  return 0;
}


[プログラムの説明]
直角三角形の直角をはさむ2つの辺の長さa,bを入力すると、三平方の定
理を用いた計算が行行われる。aとbをそれぞれ二乗した数の和をxと置
きxの平方根を求めることで直角三角形の斜辺の長さcが出力されるプロ
グラムである。

[レビュー課題]
友人からの感想:aとbの記号を繰り返し使っているが、優先度を理解し
て書けているのがいいと思いました

[アンケート]
Q1.C言語のプログラミングは好き/嫌いどちら? 理由は?
嫌い。難しいから

Q2.epsライブラリについてどのように思いましたか。
便利

Q3.リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
難しい

h1910596 1a:○ Tue May 12 20:01:03 2020



1.プログラム
// triangle hypotenuse                                                          
#include <math.h>
#include <stdio.h>
double hypotenuse(double w, double h) {
  double s = sqrt(w*w + h*h);
  return s;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = hypotenuse(w, h);
  printf("triangle hypotenuse = %g\n", x);
     return 0;
     }

今回は、演習1aを行った。直角三角形の斜辺を求めるので三平方の定理
を用い、main関数の部分で入力関数により直角を挟む二辺の長さを入力
し、斜辺の長さを返すプログラムを作成した。

2.レビュー
main関数の出力関数の部分を日本語にしたりすればもっとわかりやすくなると思う。
  
3.アンケート
Q1. C言語のプログラムは好きか嫌いか、理由は?
嫌い。理由は、まだ理解ができておらずうまく使えないから。
Q2. epsライブラリについてどのように思いましたか。
慣れればできるかもしれない。
Q3. リフレクション・感想・要望。
ひさしぶりにC言語を使ってみて少しは思い出せたと思うのでよかった。

i1910089 1a:○ Tue May 12 18:50:34 2020



コード 1d

#include <stdio.h>
#include <stdbool.h>
bool isPrime(int n){
    if(n==1)return false;
    for(int i=2;i*i<=n;i++)if(n%i==0)return false;
    return true;
}
int main(void){
    int n;
    printf("n> ");
    scanf("%d",&n);
    
    for(int i=1;i<n;i++)if(isPrime(i))printf("%d ",i);

    return 0;
}

説明
引数が素数か判定するisPrimeを1からnまで繰り返す

レビュー
ifの括弧省略して記述量減らしてるのよき、mainでの出力でfor抜けた
後改行出力してほしかった

アンケート
Q1.嫌い、メソッドが多い言語の方が書いてて楽。
Q2.PPMと同じで、さらにベクター形式なので直観的だ。
Q3.if文の省略は場所によっては見やすくなりそう。

k1710179 1a:○ Tue May 12 20:30:42 2020


1710179 河村 優周

プログラミング通論#1

1.課題
演習1ーd
// prime.c --- see if an integer is a prime.
#include <stdio.h>
#include <math.h>      // sqrtを使う場合必要
#include <stdbool.h>   // true, false, boolを使う場合必要
bool isprime(int n) {
  int limit = (int)sqrt(n);
  for(int i = 2; i <= limit; ++i) {
    if(n % i == 0) { return false; }
  }
  return true;
}
int main(void) {
  int n, i;
  printf("n =  "); scanf("%d", &n);
  if(n >= 2)
    printf("%d ", i);
  for(i = 1; 2*i+1 <= n; i++)
    if(isprime(2*i+1)){ 
      printf("%d ", 2*i+1);
  }
  printf("\n");
  return 0;
}

2.簡単な説明
整数nを入力し、n以下の素数を出力するプログラム。
isprimeに引数iを代入すると素数の場合はtrue、異なる場合はfalseを返す。
iを1から順に増加させ、奇数番目のところのみisprimeを用いて素数判定を行う。
2*i+1がnを超えたら終了。

3.出力結果
PS C:\pro2> gcc pro2-1-1d.c
PS C:\pro2> ./a.exe
n =  6
2 3 5
PS C:\pro2> ./a.exe
n =  10
2 3 5 7
PS C:\pro2> ./a.exe        
n = 60
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59

4.考察
奇数番目のみを取り出し素数判定をすることで時短になるよう工夫した。
sqrtを使い指数乗も取り除いた場合はどうなるか、と考えたがisprimeに
かかる時間よりも多かった場合処理時間が長くなってしまうと考え追加しなかった。

4.アンケート
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
好きですが苦手です。
Q2. eps ライブラリを使ってみてどのように感じましたか。
楽しかったです。
Q3. リフレクション ( 今回の課題で分かったこと ) ・感想・要望をどうぞ。
課題がんばります。

m1810587 1a:○ Tue May 12 16:23:45 2020


1810587
個人作業
2020年5月12日提出

演習問題1a。三角形の直角を挟む二辺を入力すると、
斜辺の長さを求められるプログラム。

#include<stdio.h>
#include<math.h>

double triangle(double w,double h){
        double w2 = w * w;
        double h2 = h * h;
        double syahen = sqrt(w2 + h2);
        return syahen;
}

int main(void){
        double w,h;
        printf("w> ");scanf("%lf",&w);
        printf("h> ");scanf("%lf",&h);
        double syahen = triangle(w,h);
        printf("斜辺の長さは%lf\n",syahen);
        return 0;
}

友人からのコメント
入力された変数を二乗するのをまとめてやらずに一々分けているのが読
みやすくて良いと思う

アンケート
q1. あまり好きではないです。型宣言とかが曖昧でも良い他の言語を使
うことがあるので、c言語を使うと混乱します。
q2. 描きたいものを数学的に表現するのは難しいです。
q3. 頑張ってやっていきます。

m1810639 1a:○ Tue May 12 16:51:02 2020


学籍番号: 1810639
個人作業
提出日時: 5/12
ソース
#include<stdio.h>
double cal(int n) {
  if(n > -1) {
    int x = 1;
    for(int i = 0;i < n; i++) {
      x = x * 2;
    }
    return x;
  } else {
    double y = 1;
    for(int i = 0;i < -n; i++) {
      y = y / 2;
    }
    return y;
  }
}
int main(void) {
  int n;
  printf("n> "); scanf("%d", &n);
  printf("%g\n", cal(n));
  return 0;
}

説明
関数calを作り、nが0以上か0より下かで計算方法をわけた。0以上の
ときはwhile文でn回2をかけて、0より下の場合は2で割り続けた。ま
た、0以上の場合ではintを使い、0より下の場合はdoubleを使った。

レビュー課題
数学的な知識をコードにできていてよい。

アンケート
Q1
C言語のプログラミングは好きである。理由は、複雑な機能をもったコー
ドを作るときにいろいろな機能を持った関数をつくり、コードを完成さ
せることができるところが自分の性格に合っているから。
Q2
図形が描かれる座標を指定して、さらに色もかえることができるので時
間をかけると自由に絵をかくことができるのは関心した。
Q3
今回はC言語のいい復習になった。いろいろと思い出しながらかけた。

m1910598 1a:○ Tue May 12 22:18:20 2020


1. プログラムのソースと簡単な説明
#include <stdio.h>
#include <math.h>
double syahen (double w, double h){
    double s =(w*w+h*h);
    return sqrt(s);
}
int main(void){
    double w,h;
    printf("w> "); scanf("%lf", &w);
    printf("h> "); scanf("%lf", &h);
    double x=syahen(w,h);
    printf("l = %g\n",x);
}
(実行例)
w>3
h>4
l = 5
(説明)
2つの変数を入力し、それぞれを二乗して足し合わせたものの平方根を出力する。

2. レビュー課題(友人から) 
無駄がなくて模範解答に思える。関数分けてるのがわかり易くて良いと思った。

3. アンケート
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
まだ自分には理解できてない部分が多くあるので、好きとも嫌いともいうことができない。
Q2. epsライブラリについてどのように思いましたか。
あまり触れることができていないが、使いやすそうだとは思った。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
次回も頑張りたい。

m1910601 1a:○ Tue May 12 18:52:46 2020


学籍番号 1910601
氏名 前田裕作
「個人作業」
提出日 5/12


[作成したプログラム(演習1ーC 素因数分解)]
 実際に作成したプログラムは以下の通りである。

// soinnsuubunnkai
#include <stdio.h>
double soinsu(int n) {
  int w = n;
  if(w == 1){printf("%d ", 1);return 0;
  }
  int i;
  for(i = 2; i <= n; ) {
    if((w % i) == 0) {w = w / i; printf("%d ", i);}
    else{i = i + 1;}
  }
  return 0;
}

int main(void) {
  double num;
  printf("number> "); scanf("%lf", &num);
  soinsu(num);
  printf("\n");
  return 0;
}

入力した数(nとした)を素因数分解するために、ある数で割ったとき
の余りに注目した。関数soinsu内のループにおいてiを2からnまでとし、
iで割った余りが0のときにはiの値を大きくせずそのiを出力して、割
られる数をiで割ったものにし、ループに戻してもう一度iで割れるかを
調べた。iで割りきれないときはそれ以上因数iは無いため、iの値を1大
きくしてループに戻した。ループ終了時に出力されたものが順にならび、
素因数分解とした。なお、入力した数が1の時は1が出力されるように
はじめで分けた。

[レビュー課題](学内の友人にしてもらった)
「関数soinsuの最後をreturn 0で終わらせているのが丁寧だなぁ」と言
われた。voidでもよかったと気づかされました。

[アンケート]
(Q1)C言語のプログラミングは好きです。
(Q2)1年次にやっていた画像生成と比較すると、すっきりとしており、
扱いやすいと感じました。
(Q3)チャットで進む授業ははじめての体験でしたが、その新鮮さがおも
しろく感じました。また、質問したことが文章として残るため、復習な
どにおいても効果的だと思います。

m1910603 1a:○ Tue May 12 22:22:43 2020



課題1a
直角三角形の直角を挟む2辺の長さa,bを入力すると斜辺の長さを返す

#include <stdbool.h>
#include <math.h>
#include <stdio.h>

double hypotenuse(double a, double b){
  double x = sqrt(a*a + b*b);
  return x;
}

int main(void) {
  double a, b;
  printf("a> "); scanf("%lf", &a);
  printf("b> "); scanf("%lf", &b);
  double x = hypotenuse(a, b);
  printf("%lf\n", x);
  return 0;
}

レビュー
hypotenuse関数の中身がスッキリ簡潔にまとまっていて、mein関数も必
要な事だけを記述しており、全体的に短く簡潔でとてもいいコードだと
思いました(友人より)

アンケート
Q1.どちらでもない
Q2.規則的な描画ができ便利
Q3.特になし

m1910606 1a:○ Tue May 12 22:17:29 2020


A課題

日付:5月12日(火)
名前:牧野 広隼
学籍番号:1910606
課題:演習1a 直角三角形の斜辺の長さを求めるプログラム。
プログラム:
#include <stdio.h>
#include <math.h>
double trihyp(double w, double h) {
  double x =sqrt(w*w + h*h);
  return x;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = trihyp(w, h);
  printf("hypotenuse of triangle = %g\n", x);
  return 0;
}

レビュー(宮島さん):
コード上に無駄な処理がなく、良いと思います。ただ1点、変数w,hはそ
れぞれwidth(横幅),height(高さ)の頭文字をとっています。今回のプロ
グラムでは2辺の長さを扱い、厳密には横幅、高さではないので、辺a,
辺bなどとした方が見直ししやすいかと思います。

考察:上記のプログラムでコンパイルしたが、当初上手くいかなかった。
コンパイル時に-lmをつけ忘れていたためだ。それ以外では迷うところ
は特になかった。レビューについて、問題の解釈ミスがあったため、プ
ログラムはあっていても少しわかりずらくなってしまった。あとで見返
したときにわかりやすくするために使う文字を考えるべきだ。

m1910615 1a:○ Tue May 12 19:21:12 2020


第01回aレポート

学籍番号:1910615
提出日時 2020/05/12
ペア:個人作業


演習1 c
整数 n (n > 1) を入力し、n の素因数分解を表示する。たとえば 60
を入力したら「2 2 3
5」を出力する (出力の順番や形式は任意)。


プログラム
#include <stdio.h>
#include <math.h>

int primef(int n){
    int i;
    for(i = 2; n > 1 ; ++i){
        if(n % i == 0){
            printf("%d ",i);
            n /= i;
            i--;
        }
    }
    printf("\n");
}
void main(void){
    int n;
    printf("n > ");scanf("%d", &n);
    printf("The result of prime factorization of n is here.\n");
    primef(n);
}


説明
 2から順番に割り続けながら表示する、割られる数が1になったら終了する。
 一回割れた数についてはカウントを1戻し、もう一回その数で割る。


レビュー課題
 演算子を効率よく使っていていいと思いました。(同クラスの友人)

アンケート
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
 C言語のプログラミングは快適だと感じます。比較対象がRubyしかない
 ので何とも言えませんが、Rubyよりかは直感的に仕組みを考えられる
 気がします。
 
Q2. eps ライブラリについてどのように思いましたか。
 eps_cmdをなぜ作ったのか気になりました。drawrectのようにそれぞれ
 コマンドにしてもよかったのではと思います。
 
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
 なるべく短くプログラムを書くというのを目指してきましたが、レビュー
 課題を通して、解かりやすくまとまっているプログラムの重要性も感
 じました。 

m1910616 1a:○ Tue May 12 22:18:29 2020


プログラミング通論’20 #1 – C言語の基本機能
課題1aのレポート


課題1aで作成したプログラムを下に記す。

#include <stdio.h>
int prime(int n){
    int i, num;
    num = n;
    i = 2;
    while(num > 1){
        if(num % i == 0){
            num = num / i;
            printf("%d ", i);
        }else{
            i += 1;
        }
    }
}

int main(void) {
    int n;
    printf("n> "); scanf("%d", &n);
    prime(n);
    printf("  Accomplished  ");
    return 0;
}

以上。

 上のプログラムに対する説明としては、まずmainメソッド内で整数n
の入力とprimeメソッドの実行を行う。 primeメソッドでは、受け取っ
た値をあまりの出ないように2から順に整数を選んで割っていき、その
選ばれた整数を出力する。 これによって素因数を出力して列挙する、
というものである。

 このレビューとしてY氏は「最初の方に変数がまとめられているため
見やすいと思った。」とコメントした。

 最後にアンケートの回答をする。
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
A. プログラミング自体は好きであるが、「C言語の」と限定されると相
対的にはどちらともいえない。というのも、Rubyや私の経験したその他
の言語で私が行ってきた事柄と、C言語で私が行ってきた事柄に難易度
や利便性の顕著な違いを見出せていないためである。

Q2. epsライブラリについてどのように思いましたか。
A. eps_cmdコマンドに少しの気持ち悪さを感じた以外は便利と感じた。

Q3. リフレクション
A. 復習であるからか新奇なことは何も覚えなかったが、他の言語の構
文とこちらのそれをやや違えていたことに気付いた。

m1910619 1a:○ Tue May 12 18:09:20 2020


プログラミング通論 #01

[課題の再掲]
演習1のa. 直角三角形の直角をはさむ2辺の長さを入力し、斜辺の長さを出力する。

[実施したこととその結果]
作成したプログラム
// 1.a making Hypotenuse                                                                                          
#include <stdio.h>
#include <math.h>

double hypo(double a, double b) {
  double l = sqrt(a*a+b*b) ;
  return l;
}
int main(void) {
  double a, b;
  printf("a> "); scanf("%lf", &a);
  printf("b> "); scanf("%lf", &b);
  double l = hypo(a, b);
  printf(" Hypotenuse = %g\n", l);
  return 0;
}

その結果
[m1910619@sol ~/pro1]$ gcc 1a.c -lm
[m1910619@sol ~/pro1]$ ./a.out
a> 2
b> 4
 Hypotenuse = 4.47214

[m1910619@sol ~/pro1]$ ./a.out
a> 3
b> 4
 Hypotenuse = 5

説明
sqrtという関数とピタゴラスの定理を用いて斜辺の長さを求めるプログ
ラムを作成した.

[レビュー課題]
友人によると,三平方の定理を用いている事がダイレクトに分かるのが
良いと言われました.

[アンケート]
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
好みです.ruby と違い間違っている箇所があった瞬間にエラーが出る
ため,すぐに修正する事ができるからです.

Q2. epsライブラリについてどのように思いましたか。
複雑そうに見えました.

Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
これからも継続してプログラミングを勉強していきたいです.

m1910620 1a:○ Tue May 12 20:03:14 2020


提出日2020/05/12

[プログラミング]
// triangle hypotenuse                                                          
#include <math.h>
#include <stdio.h>
double hypotenuse(double w, double h) {
  double s = sqrt(w*w + h*h);
  return s;
}

int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = hypotenuse(w, h);
  printf("triangle hypotenuse = %g\n", x);
  return 0;
}

まず直角三角形の斜辺を戻り値として呼び出す関数を作成した。main関
数でscanfを使い直角三角形の2辺を入力し、結果を出力させるプログ
ラミングを作った。

[レビュー課題]
関数を簡潔に示されており、分かりやすいプログラムだと感じた。

[アンケート]
Q1.嫌い。よく理解できてなく、難しいと感じているから。
Q2.c言語の応用編で理解できるか不安だが、基礎を完成させチャレンジしたいと感じた。
Q3.1年生の復習ができ、理解が深まったと感じた。

m1910626 1a:○ Tue May 12 21:28:58 2020


学籍番号:1910626
5/12(火)
<演習1b>
[コード]
#include <stdio.h>

int main(void) {
    int n;
    printf("n> "); scanf("%d", &n);
        int x = 1;
        double y = 1;
        if (n>=0){
            for(int i = 0; i < n; i++){
                x = x*2;
            }
            printf("%d" , x);
        }else{
            n = -n;
            for(int i = 0; i < n; i++){
                y = y*2;
            }
            y = 1.0/y;
            printf("%f" , y);
        }
return 0;
}

[簡単な説明]
整数xと小数yの変数を用意し、それぞれnの値が正のとき、負のときで
場合わけして使用した。負のときは正のときと違って、いったん正に符
号を変更してからfor中の内容を実行し、最後に逆数にすることで求め
る値が出るようにした。

[クラスメートから頂いたコメント]
yをdoubleにしてるからy*2よりも、最初からy=1.0としておいてy/2を繰
り返した方がすっきりするのでは。

[アンケート]
A1.難しいので嫌い。
A2.大変そうなので、幾何学的な模様でも描かない限りは使いたくないと思った。
A3.元々大して真面目に勉強していなかったが、とても多くのことを忘
れているので、きちんと復習して遅れを取り戻したいと思った。

m1910627 1a:○ Tue May 12 23:53:14 2020


学籍番号 1910627
個人作業
提出日時 23時50分頃

プログラム
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
double sha(double a, double b){
  double h = a*a +b*b;

  return sqrt(h);

}

int main(void){
  double a,b;
  printf("a> ");scanf("%lf",&a);
  printf("b> ");scanf("%lf",&b);
  double c = sha(a,b);
  printf("the length of shahen is %g\n ",c);
  return 0;
}

説明; ピタゴラスの定理を利用している。関数[sha]において、新た
に用意した変数cに既知の値aとbの二乗和代入し、その平方根をsqrtで
求めている。一行あたりの文字数を減らしたいので新たな文字cを用意
している。mainではaとb、及び斜辺の長さを打ち出すプログラムを組ん
でいる。

レビュー(友人より);hでまとめているおかげで見やすい。

アンケート
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?

A.嫌いではない。ただ好きというほどはまってはいない。アルゴリズムが浮かばなかっ
たり、浮かんでもプログラムできないときモヤモヤするからだと思っている。おそらく
これから上達していくうちに好きになっていくような気がする。

Q2. eps ライブラリについてどのように思いましたか。

文字の羅列であるプログラムと視覚的な図形が結び付いてるなあと思った

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。

チャット式のほうが対面よりその手軽さから質問しやすいように思う。
一方が話し続けるのは効率が悪そうだが、講義というより演習に重視し
ている科目には合っているように思えた。

m1910629 1a:○ Tue May 12 15:31:49 2020


学籍番号:1910629
個人作業,提出日:5/12

ソースコード:
//演習1c:素因数分解
#include<stdio.h>
#include<math.h>

void primefact(int n){
    int i;
    double x;
    if(n==1){return;}//1になったら終わり
    for(i=2;i<=n;i++){
        x = (double)n/(double)i;
        if(floor(x) == x){
            printf("%d ",i);
            primefact(n/i);//素因数を見つけたら次の素因数
            break;
        }
    }
}

int main(void){
    int n;
    printf("n>");scanf("%d",&n);
    primefact(n);
    return 0;
}

説明:
main関数は入力と関数呼び出しのみ.primefactは小さい方から因数を
判定して素因数を抜き出し,それをnが1になるまで再帰させている.

レビュー:(同クラスの友人から)
素因数であるかどうかの判定を除算の結果の数がそれのfloorに通した
数と等しくなるかで行っており、かつ再帰を用いているすっきりとした
プログラムになっている。

アンケートの答え:
Q1: 比較的古い言語ということもあり構文の数が少ないが,基本的な構
文で構成されていて分かりやすいので好き.
Q2: このコード量で絵のファイルが作れるのがすごいと思った.
Q3: 理由は分からないが,対面授業の時よりも作業効率が下がっているように感じた.

m1910631 1a:○ Tue May 12 18:45:16 2020


プログラミング通論レポート#1

<課題>
演習1a 直角三角形の直角を挟む2編の長さより斜辺の長さを求めるプログラム

<コード>
#include <stdio.h>
#include <math.h>
#include <stdbool.h>

int main(){
    float side1, side2;
    printf("1つめの辺の長さ>>"); scanf("%f", &side1);
    printf("2つめの辺の長さ>>"); scanf("%f", &side2);
    printf("斜辺の長さ>>%f\n", sqrt(side1*side1 + side2*side2));
    return 0;
}

<説明>
三平方の定理を使って実数型で求めた。

<レビュー>
斜辺の長さを出力するときは%fじゃなくて%gのほうが良いと思いました

<アンケート>
A1.嫌いではないがPythonなどに比べて面倒で少し苦手
A2.フォントを指定するときにフォントの種類とサイズを一つのデータ
にするのが面白いと思った。
A3.実数型でも指定子を%gにすれば無駄に小数点以下が長くならないこ
とを知った。

m1910632 1a:○ Tue May 12 22:29:47 2020


レポート1a


選択した課題: 1-b: 2の冪乗を求めるプログラムを作成する

方針:
n>=0のときの2の冪乗はシフト演算でできることを利用すた。
n>=0であるかどうかを場合分けし、それにより計算を変えた。
n<0のときはシフト演算と実数の割り算を組み合わせることを考えた。

コード: プログラム一式(動くものを貼ること)

#include <stdio.h>
#include <math.h>
#include <stdbool.h>

void power_of_two(int n) {
    if(n >= 0) {
        printf("%d\n", 1 << n);
    } else {
        printf("%.14f\n", 1.0 / (1 << (-n)));
    }
}

int main(void) {
    int n;
    scanf("%d",&n);
    power_of_two(n);
    return 0;
}

実行例:
[入力例1] 5
[出力例1] 32

[入力例2] 30
[出力例2] 1073741824

[入力例3] 0
[出力例3] 1

[入力例4] -5
[出力例4] 0.03125000000000

[入力例5] -30
[出力例5] 0.00000000046566

解説: 
まず n >= 0 のときは単純に 1 << n というシフト演算で2^nを計算した。
シフト演算では二進数表示で1の後ろにn個詰める。
例えばn=5のときは100000(2)となり、2^5の位だけが1となるので1<<5の計算結果は2^5になる。
従って 1 << n で 2^n (n >= 0) を計算することができた。
次に n < 0 の時を考える。
このとき -n > 0 であり、シフト演算を使うことができる。
1 << (-n) で2^nの逆数を求めることができる。従って 1.0 / (1 << (-n)) とすれば2^nを求めることができる。

レビュー課題:
pow関数を使うのではなく1<<nと書く難しいことが出来ていて良いと思
う。また、その分短いプログラムになっていることも良いと感じた。

アンケート:
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
どちらかと言えば好きではありません。やはり標準ライブラリが豊富で
あったり、範囲外アクセスをしっかり教えてくれたり、
いろいろと親切な言語の方が使い勝手が良いので書いててストレスになりづらいと思います。
ただ、これからいろいろなデータ構造やアルゴリズムを学ぶ上では、む
しろ便利機能が全然ない言語の方が作りがいがあると思います。
ですから、プログラミングの学習としては良い言語なのではないか?と最近は思っています。

Q2. epsライブラリについてどのように思いましたか。
書き慣れたC言語でPostScriptを扱えるのは便利だと思いました。
また、C言語での何らかの計算結果を用いた面白い画像を作れそうだとも思いました。

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
しばらくC言語は触っていませんでしたが、感覚が戻ってきました。

m1910636 1a:○ Tue May 12 16:52:20 2020




プログラム
演習1bをした
``b.整数nを入力し,2nを出力する.n≥0のときは整数,そうでないときは実数形式で出力すること.``

//なかなかオーバーフローしないように頑張ってみた
#include<stdio.h>
//#include<math.h>
#define MAX_ARRAY 512
//8*この値桁
int main(){
    int n=0;
    int answer[MAX_ARRAY]={};//初期化しないとたまに変な値が入ってるからなあ
    double answer2=1;
    answer[0]=1;
    fprintf(stdout,"n>");
    fscanf(stdin,"%d",&n);
    if(n<0){//入力がマイナス
        n=-n;
        for(int i=0;i<n;i++){
            answer2/=2.0;
        }
        fprintf(stdout,"%g\n",answer2);
        return 0;
    }else{//入力がプラス
        for(int i=0;i<n;i++){//n回掛け算
            for(int d=MAX_ARRAY-1;d>=0;d--){//すべての桁に対して
                answer[d]*=2;
                if(answer[d]>=100000000){//9桁目突入繰り上がり
                    if(d==MAX_ARRAY-1){//オーバーフロー
                        fprintf(stderr,"Overflow!!");
                        return -1;//エラーを返す
                    }
                    answer[d+1]++;//繰り上がり
                    answer[d]-=100000000;
                }
            }
        }
    }
    int outputD=MAX_ARRAY-1;
    while(answer[outputD]==0){//上のいらない桁(00000000)を除く
        outputD--;
    }
    printf("%d",answer[outputD]);//一番上の桁,0埋めなし
    for(int i=outputD-1;i>=0;i--){//出力
        printf("%08d",answer[i]);//0埋めして出力
    }

    return 0;
}

説明
演習1bをおこなった,2^n乗を出力するプログラムを作った.そのまま
ではつまらないので,10000乗でもオーバーフローしないように,int型
の配列を作り,その一つ一つに8桁分記憶させ,計4096桁まで出せるよ
うにした.この桁数は#define MAX_ARRAYを変えることで更に伸ばせる.
実行例
$ ./practice1b.out 
n>10000 

1995063116 8807583848 8374216268 3585083823 4968318861
9245485200 8949852943 8830221946 6319199616 8403619459
7899331129 4232091242 7155649134 9413781117 5937859320
9632395785 5730046793 7945267652 4655126605 9895520550
0869181933 1154250860 8460618104 6855090748 6608962488
8090489894 8380092539 4163325785 0621568309 4739025569
1238806522 5096643874 4410467598 7162698545 3222868538
1616943157 7562964076 2836880760 7322285350 9164147618
3956381458 9694638994 1084096053 6267821064 6214273333
9403652556 5649530603 1426802349 6940033593 4316651459
2977732796 6577560617 2582031407 9941981796 0737824568
3762280037 3028854872 5190083446 4581454650 5579296014
1483392161 5734588139 2570953797 6911927780 0826957735
6744441230 6201875783 6325502728 3237892707 1037380286
6393031428 1332414016 2419567169 0574061419 6543423246
3880124885 6147305207 4319922596 1179625013 0992860241
7083408076 0593232016 1268492288 4962558413 1284406153
6738951487 1142563151 1108974551 4203313820 2029316409
5759646475 6010405845 8415660720 4496286701 6515061920
6310041864 2227590867 0900574606 4178569519 1145605506
8251250406 0075198422 6189805923 7118054444 7880729063
9524254833 9221982707 4044731623 7676084661 3033778706
0398034131 9713349365 4622700563 1699374555 0824178097
2810983291 3144035718 7752476850 9857276937 9264332215
9939987688 6660808368 8378380276 4328277517 2273657572
7447841122 9438973381 0861607423 2532919748 1312019760
4178281965 6974758981 6453125843 4135959862 7841301281
8540628347 6649088690 5210475808 8261582396 1985770122
4070443305 8307586903 9319604603 4049731565 8320867210
5913300903 7528234155 3974539439 7715257455 2905102123
1094732161 0753474825 7407752739 8634829849 8340756937
9556466386 2187456949 9279016572 1037013644 3313581721
4311791398 2229838458 4733444027 0964182851 0050729277
4836455057 8634501100 8529878123 8947392869 9540834346
1588070439 5911898581 5145779177 1436196987 2813145948
3783202081 4749821718 5801138907 1228250905 8268174362
2057747592 1417653715 6877256149 0458290499 2461028630
0815355833 0813010198 7675856234 3435389554 0917562340
0844887526 1626435686 4883351946 3720377293 2400944562
4692325435 0400678027 2738377553 7640672689 8636241037
4914109667 1855705075 9098100246 7898801782 7192595338
1282421954 0283027594 0844895501 4676668389 6979968862
4163631337 6393903373 4558014076 3674187771 1055384225
7394991101 8646821969 6581651485 1304942223 6994771476
3069155468 2176828762 0036277725 7723781365 3316111968
1128079266 9481887201 2986436607 6855163986 0534602297
8715575179 4738524636 9446923087 8942659482 1700805112
0322365496 2881690357 3912136833 8393591756 4187338505
1097027161 3915439590 9915981546 5441733631 1656936031
1222499379 6999922678 1732358023 1118626445 7529913575
8175008199 8392362846 1524988108 8960232244 3621737716
1808635701 5468484058 6223297928 5387562348 6556440536
9626220189 6357102881 2361567512 5433383032 7002909766
8650568557 1575055167 2751889919 4129711337 6901499161
8131517154 4007728650 5731895574 5092033018 5304847113
8183154073 2405331903 8462084036 4217637039 1155063978
9000742853 6721962809 0347797453 3320468368 7958685802
3795221862 9120080742 8195513179 4815762444 8298518461
5097048880 2727472157 4688131594 7504097321 1508049819
0455803416 8269497871 4131606321 0686391511 6817743047
9259670937 6

$ ./pra ctice1b.out 
n>27
13 4217728

$  ./practic e1b.out 
n >-10
0.000976562

$  ./practice 1b.out 
n> -100
7.888 61e-31

$  ./practice 1b.out 
n> 100000
Ove rflow!!
マイナスが入力された場合 については特に工夫が できなかった,ま
た,流石に100000乗はオーバーフローしてしまった.

レビュー課題
サークルの仲間から
(むずいので内容はよくわかりませんが,)特に複雑なとこがコメント
いっぱいついてて後から見てわかりやすくなっているのがよかったです
オーバーフローをさせないために桁で管理するという手法が良いと感じた。
コードが長くて複雑だが、全桁正確な値が出せることは素晴らしいです。
アンケート
Q1. C言語のプログラミングは好き/嫌いどちら?理由は?
好き,他の言語に比べて実行速度が早く,classが使えないなど制約が
あるがそれを工夫で乗り越えることが楽しい.
Q2. epsライブラリについてどのように思いましたか.
面白そうなのでいろいろ使ってみたい,classとしてC++などに移植してみたい
Q3.リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ.
新しくわかったことはepsライブラリについてぐらいだが,基礎プログ
ラミングの復習としてはいろいろなことを思い出すことができた.まだ
比較的簡単な内容だったがこれから難しくなるはずなので演習をしっか
りこなして身につけたい.

m1910638 1a:○ Tue May 12 16:47:02 2020


@@1910638  宮原 駿 個人作業 5/12

1.演習1.a コード

// 斜辺の計算
#include <stdio.h>
#include <math.h>

int main(void){
  int x,y;
  float hy;
  printf("2辺の長さを入力してください. 例. x,y> 2 3\nx,y> ");
  scanf("%d%d", &x,&y);
  hy = sqrt(pow(x,2) + pow(y,2)); //斜辺の計算
  printf("斜辺の長さは %3f\n", hy);
  return 0;
}


2.説明
2辺の長さをそれぞれx,yとし,scanfでインポート,hyに斜辺の公式を代
入してprintfで表示した.

3.感想(友人より)

pow関数を用いているため、とても簡潔なプログラムで良いと思う

4.アンケート
A1.判断できるほどの技術に達していないと思うが,今の所嫌いではない.
A2.数学的な規則のある図形を正確に描く分にはいいと思った.
A3.基礎的な部分の復習になってよかった.

m1910640 1a:○ Tue May 12 17:31:12 2020


プログラミング通論 課題1aレポート
個人作業
提出日付:5月12日

[課題の再掲]
演習1c 整数n(n > 1)を入力して、nの素因数分解を表示する。

[実施したこととその結果]
書いたプログラムは下である。

#include <stdio.h>
#include <math.h>

int main(void){
    int counter, n; int jedgement = 0; 
    printf("Let's do prime factorization. Plese enter number.");scanf("%d", &n);
    printf("%d = ", n);
    while(1){
        for(counter = 2; counter <= n; counter++){
            if(n%counter == 0){
                if(jedgement == 0){
                    printf("%d ", counter);
                    jedgement=1;
                }else{
                    printf("* %d ", counter);
                }
                n = n/counter;
                break;
            }
        }
        if(n == 1){
            break;
        }
    }
    printf("\n");
    return 0;
}

実際に実行してみた結果は次のとおりである。
$ ./a.out
Let's do prime factorization. Plese enter number.120
120 = 2 * 2 * 2 * 3 * 5
$ ./a.out
Let's do prime factorization. Plese enter number.128
128 = 2 * 2 * 2 * 2 * 2 * 2 * 2
$ ./a.out
Let's do prime factorization. Plese enter number.2
2 = 2
$ ./a.out
Let's do prime factorization. Plese enter number.3
3 = 3
[m1910640@red45 #1]$ ./a.out
Let's do prime factorization. Plese enter number.1
1 =


このプログラムでは出力として素因数が次々と出力される形ではなく、
素因数分解元の値を'='の記号を用いて掛け算として表そうとした。ま
た、掛け算の初めは数字だけを出力するためにjedgement(スペル違う)
を用いて出力の仕方の切り替えを行った。このプログラムは2以上の整
数を代入することを前提としているため1を入れたときには'='以降の
値が表示されない。また、0以下を入れるとwhileループから抜けられ
ないためプログラムが終了しない。

[レビュー課題]
書いたプログラムについての友人からの感想は以下です。
〇コードに関して
main内1行目:
 nとjedgementの間に;いらない、つづりjudgement
 >"int counter, n, judgement = 0;"

 変数judgementは使用用途的にboolにした方がいいと思う。
 >main内7行目で"if(judgement) {"といった使い方ができる。

main内4行目:
 while(1)でもいいがwhile(true)のほうが見やすい(個人的な感想)

main内5行目:
 forの初期値宣言はfor(int counter;;)のようにした方が型がわかりや
 すい。プログラムの初めまで戻らなけらばいけない。
  >"for(int counter; counter <= n; counter++) {"

main内13行目:
 "n /= counter;"という書き方もあります。

〇アルゴリズムに関して
整数nは(int)sqrt(n)より大きな数で割れないのでmain内5行目のループの上限は小さくした方がよい。

main内4行目を"while(n > 1)"にするとmain内17~19行目"if(n == 1) { break; }"はいらなくなる。

"{"はスペースで離したほうが見やすい(個人的な感想)
>"int main(void){"→"int main(void) {"


[考察]
このプログラムでは1以下の値を代入したとき、適当でない出力がされ
る場合がある。よって、1以下の値が代入された場合にはもう一度入力
をし直させることが必要だと感じた。例として、下のようなコードを
while(1){}の前に挿入すると良いと考えた。
while(1){
  if(n >= 2) {
    break;
  } else {
    printf("n is inappropriate. Plese enter n again.\n");
    printf("n>"); scanf("%d", &n);
  }
}
また、友人からもアドバイスをいただいた通り、while(1){}の部分を
while(n>1){}とすることによって、while文最後のif(n == 1){ break;
}を省略できるので無暗にbreak文をつかってwhile文を抜けるのでなく、
条件によってループを抜けられるようにすべきだと思った。一方、
while文中のforループにおけるbreakは複数の同じ素因数が含まれる場
合に対応できるようになっているのでこのbreakは良い使い方だと考え
た。

[アンケート]
Q1. C言語のプログラミングは好き/嫌いどちら?理由は?
プログラミング自体は好きです。rubyとC言語しか扱ってないので一概
にC言語が好きか嫌いの判断ができません…

Q2. epsライブラリについてどのように思いましたか。
epsを使って放物線を描こうとしたときに整数で構成される座標以外に
点を打てないので、キャンバスの大きさを変えて書こうとしましたが、
上手く書けなかったので使うのが難しいと感じました。

Q3. 感想
友人からとても長い感想をいただきました。私からはそこまでの指摘は
できなかったので友人に負けないように頑張っていきたいと思いました。

m1910646 1a:○ Tue May 12 19:07:22 2020



プログラムのソース

#include <stdio.h>
#include <math.h>

double syahen(double x, double y){
    double z = sqrt(x*x + y*y);
    return z;
}
int main(void){
    double x, y;
    printf("x>"); scanf("%lf", &x);
    printf("y>"); scanf("%lf", &y);
    double z = syahen(x, y);
    printf("%f", z);
    return 0;
}

簡単な説明

平方根の計算を行う関数sqrtを用いることで直角三角形の二編を挟む2
辺の長さから斜辺の長さを出力する。

レビュー課題

辺x,yの入力の際に「x>」「y>」を出力しているので、辺zの長さを出力
する際も、「z>」等の出力があると確認しやすくなると思います。また、
zの出力の後、改行(\n)があるとより見やすくなると思います。

アンケートの回答
Q1.好き。まだ入門レベルなので発展的なプログラムを一人で作成する
のは困難だが、問題を解決できたときに自分の成長を感じるから。

Q2.一年時におこなった描画よりも自由度が高いと感じた。

Q3.課題ではプログラムのソースだけで、実行例は書かなくていいので
しょうか。

n1910483 1a:○ Tue May 12 15:34:04 2020


学籍番号:1910483
(個人作業)
提出日時:2020/5/12

<製作プログラム>
1ーc
#include <stdio.h>
#include <math.h>
#include <stdbool.h>

bool prime(int n){
  int s = 1;
    for(int t = n; t > 1; --t){
       int limit = (int)sqrt(t);
      for(int i = 2; i <= limit; ++i){
	if(t % i == 0){
	  s = 0;
	}
      }
      if(s != 0){
	printf("%d ", t);
	s = 1;
      }
      s = 1;
    }
}

int main(void) {
  int n;
  printf("n>");scanf("%d",&n);
  prime(n);
  return 0;
}

このプログラムは、入力したn以下の素数を表示するプログラムである。
nより小さい数としてtを用意し、そのtに関して素数か否かの判定を行
い、素数であれば出力するといった形式をとっている。


<レビュー>
レビュワー:歴戦の棋士
「2重ループや条件分岐を上手く使って素因数が表示できていた。 」

<アンケート>
Q1.好きである。言語に関わらず、プログラミングの仕組みそのものに
興味を抱いているから。

Q2.仕組みとしては拡張性がありそうで面白いと思った。授業内でさっ
と触れただけなので、今後の演習を通してその扱いについて学んでいき
たい。

Q3.久しぶりの授業形式でのプログラミング実習だったため、実習を通
してこれまでのことを思い出しながら新しい事項を学んでいきたい。

n1910485 1a:○ Tue May 12 16:03:04 2020


第一回プログラミング通論 A課題
①プログラム
1b
//2nobekizyou
#include <stdio.h>

double beki(int n){
  int m = 1;
  double x = 1.000;
  int i;
  if(n>=0){
    for(i=0;i<n;++i){
      m = 2*m;
    }
    return (double)m;

  }else{
    for(i=0;i>n;--i){
      x = x/2.000;
    }
    return x;
  }

}

int main(void){
  int n;
  printf("n> ");scanf("%d",&n);
  printf("2^n = %lf\n",beki(n));
  return 0;
}
②実行例
[n1910485@sol ~/prg]$ ./a.out
n> 12
2^n = 4096.000000
[n1910485@sol ~/prg]$ ./a.out
n> 18
2^n = 262144.000000
[n1910485@sol ~/prg]$ ./a.out
n> -10
2^n = 0.000977
[n1910485@sol ~/prg]$ ./a.out
n> -3
2^n = 0.125000
[n1910485@sol ~/prg]$ ./a.out-4

③プログラムの説明
入力されたnを整数として受け取り、2のn乗を実数として返す。nが非負
整数の場合は、2をn回、1(今回はm)にかける。nが負の整数の場合、
n回実数2.000で割り続ける。

④レビュー
友達から
あえてかどうかわからないが、ループを使って累乗と冪乗を表していて
自分にその発想はなかった。

⑤アンケート
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
好き。多くを暗記しなくても、少ないことから発展して様々なことに応
用することができるから。

Q2. eps ライブラリについてどのように思いましたか。
少し難しかった。

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
内容が盛りだくさんだったので、前後のコマを活用して授業に取り組んでいきたい。

n1910493 1a:○ Tue May 12 16:13:45 2020


プログラミング通論レポート 1a

学籍番号:1910493
ペアの学籍番号:個人作業
提出日時:2020/5/12

・プログラム
演習1-a:直角三角形の直角を挟む2辺の長さを入力し、斜辺の長さを出力する。

#include <stdio.h>
#include <math.h>
double hypotenuse(double a, double b) {
  return sqrt(a*a + b*b);
}
int main(void) {
  double a, b;
  printf("The length of the side is > "); scanf("%lf", &a);
  printf("Another side is > "); scanf("%lf", &b);
  double c = hypotenuse(a, b);
  printf("The length of the hypotenuse is %g\n", c);
  return 0;
}

・実行例
% ./a.out
The length of the side is > 12
Another side is > 5
The length of the hypotenuse is 13

斜辺の長さを求めるhypotenuse関数では、double入力されたa, bを基に、
それぞれ2乗して足して平方根を取ることで斜辺の長さを返す。main関
数でその結果をprintfで表示するようにしている。

・レビュー課題
(寮の同じユニットの友達より)
2乗を**とするとエラーを吐かれるので、同じものを2度かけることで表
現していることが工夫されている。

・アンケート
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
どちらかといえば好きです。エラーがあると結構わかりやすく指摘してくれるからです。

Q2. eps ライブラリについてどのように思いましたか。 
ベクターで描くことで、拡大や縮小をしても画質が変わらないので便利だと思います。

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
C言語の復習をすることで、一部忘れていたことを発見できました。ま
たチャット形式なので、プログラムを記述している最中に手を止めて〜
と言われることがなくキリが良いところまで書ききれるのが快適でした。
ありがとうございました。

n1910496 1a:○ Tue May 12 14:52:53 2020


学籍番号:1910496
個人作業
提出日時;2020/5/12 14:50

・プログラム
// 1-2
#include <stdio.h>
#include <math.h>
double ruijo(double n) {
    if(n >= 0){
        int s = (int)pow(2, n);
        return s;
    } else {
        double t = pow(2, n);
        return t;
    }
}
int main(void) {
    double n;
    printf("n> "); scanf("%lf", &n);
    double x = ruijo(n);
    printf("2^n = %g\n", x);
    return 0;
}

・説明
 整数nを入力し、2nを出力する。n ≥ 0のときは整数、そうでないとき
 は実数形式で出力するプログラム。
  整数で出力するときは引数ではなく、powを整数型にキャストすることで行った。

・友人からのレビュー
"実際に正しく動けば問題はないが,main関数内(14,15行目)で取得する
数は整数なのでint型を使うと読む時に分かりやすくなると思う"

・アンケート
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
あまり好きじゃないです。文法チェックしてくれるのは嬉しいのですが、
気持ち扱いにくいです。

Q2. epsライブラリについてどのように思いましたか。
特には何も思いませんでした。

Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
レビューに大納得しました。

n1910498 1a:○ Tue May 12 22:17:34 2020


レポート1a


【選択した課題】 
演習1 - c. 
整数n(n > 1)を入力し、n の素因数分解を表示するプログラムを作れ。

【コード】
#include<stdio.h>
int main(void){
    int n, i, cnt=0, data[100];
    printf("n> "); scanf("%d", &n);
    for(i = 2; i <= n; i++ ) {
        if( n % i == 0 ) {
          data[cnt] = i;
          n = n / i;
          i = 1;
          cnt++;
        }
     }
    for(i = 0; i < cnt; i++ ) {
        printf("%d", data[i]);
        if( cnt != i+1 ){
            printf("  ");
        }
    }
    printf("\n");
    return 0;
}

【実行例】
$ ./a.out
n> 60
2  2  3  5
$ ./a.out
n> 10
2  5
$ ./a.out
n> 100
2  2  5  5

【説明】
素数判定のプログラムを応用し、値を2~nまでの数で割っていき余り
が0になったものは素因数であるので用意しておいた配列にいれていく
ようにした。また、割る数(作成したプログラムではi)を単純に1ずつ
増やすのではなくループの最後でi=1に戻すことで同じ素因数が複数
でてくるものにも対応するようにした。
(9行目のi = 1;を消すと結果は、n> 60 → 2  3  5となってしまう。)

【レビュー課題】
プログラムがどのように処理されているか分かりやすく、とても良い。
一方for文の中でwhile文を用いることでi=1と初期化する必要がなかっ
たり、整数Nの素因数の最大値は√N以下というのを用いるとより大きな
数を素因数分解する際に処理速度の大幅な改善が見られるだろう
(他クラスの友人N.Sさんより)

【アンケート】
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
 どちらでもない。好きとか嫌いとか考えられるほどの域に達してないから。
Q2. epsライブラリについてどのように思いましたか。
 まだあまり使いこなせてはいませんが、使いやすいなと思いました。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
 次回も頑張りたいです。

n1910506 1a:○ Tue May 12 14:12:44 2020


プログラミング課題
学籍番号1910506
課題提出日 5月12日

プログラミングどれかひとつとその説明

#include <stdio.h>

int judge(int x) {
	int i,n =1;
	if(x == 1) {
		n = 0;
				}else{
	for(i = 2; i <= x;++i) {
		if(x%i == 0 && x != i) {n = 0;}						}
					}
	return n;
}
int main(void) {
	int n,i;
	printf("n>");scanf("%d",&n);
	for(i = 1;i < n;++i) {
		if( judge(i) == 1){printf("%d ",i);
	}
	}
	printf("\n");
}

整数nを入力し、その値以下の素数を出力する。

レビュー
 父:judge はboolでいいのではないで良い。
アンケート

 Q1.C言語のプログラミングは好き/嫌いどちら?理由は?
	好き。なぜなら利用者が多く、環境が整っているから。
 Q2.epsライブラリについてどのように思いましたか。
	便利なものをよく考えつくなあと思った。
 Q3.リフレクション(今回の課題で分かったこと)・感想・要望
	特になし。

n1910507 1a:○ Tue May 12 14:42:08 2020


5月12日 14:40

プログラム
#include <stdio.h>
#include <math.h>
double hypotenuse(int a, int b){
    int c=a*a+b*b;
    double hypo=sqrt(c);
    return hypo;
}
int main(void){
    int a, b;
    printf("a> "); scanf("%d", &a);
    printf("b> "); scanf("%d", &b);
    double hypo=hypotenuse(a, b);
    printf("Hypotenuse is %f.\n", hypo);
    return 0;
}

説明
直角三角形の斜辺を求めるプログラム。

レビュー
関数hypotenuseが短くまとまっていて良かった。

アンケート
Q1 好き
Q2 epsライブラリで様々な図形を書くことができるので楽しいと思った。
Q3 馴れない遠隔授業で不安も大きかったが、zoomで友だちと会話しな
がら授業を進めたりして楽しかった。

n1910509 1a:○ Tue May 12 17:29:52 2020


n1910509 根古谷勇作 ペア学籍番号 h1910546
書いたプログラム	
//1a
#include<stdio.h>
#include<math.h>

double a(double x,double y){
  double z;
  z=x*x+y*y;
  return sqrt(z);
}

int main(){
  double x,y;
  printf("x>");scanf("%lf",&x);
  printf("y>");scanf("%lf",&y);
  printf("answer>%lf",a(x,y));
}
//1b
#include<stdio.h>

double aaa(int n){
double a,b=1.0;
if(n>=0){for(a=0;a<n;++a){b=b*2;}}
else{for(a=0;a>n;--a){b=b/2.0;}};
return b;
}
int main(){
int n;
printf("n?>");scanf("%d",&n);
if(n>=0){printf("%d\n",aaa(n));}
else{printf("%lf\n",aaa(n));}
}

友人のコメント(どちらも同じ人)
1aコメント:sqrtの部分のzの計算部分をひとつにまとめると行数が少な
くてすむ。あとは完璧。
1bコメント:forの実行部分は行を変えたら見やすくなるとか、条件部分
の説明が適切でよいと思った。


説明、考察
1a:値はすべて実数型とし、計算した値の平方根をとって値を返した。
Include<math.h>を入れたため、コンパイル時に-lmを加えた。プログ
ラムについては、友人に言われた通りわざわざ変数の計算を外に出さな
い方がより簡潔になると思った。

1b:forのじょうけんしきa、正の場合大きくし、負の場合は小さくしてn
回繰り返されるよう調整した。値はすべて実数型でまず処理し、mainの
printfで正負判別をし、正なら実数型、負なら整数型で分けて出力した。

アンケート
Q1. プログラムを作るという課題はどれくらい大変でしたか?
手間取って時間がかかるものなので、あまり好きではないです。
Q2. eps ライブラリを使ってみてどのように感じましたか。
使いやすいのではと思う。
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
今は苦手意識があるけれども、頑張って克服してスムーズにプログラミ
ングができるようになりたいです。

n1910513 1a:○ Tue May 12 15:11:06 2020


提出日:2020/05/12

演習1a.直角三角形の直角をはさむ2辺を入力して斜辺の長さを出力する。

ソース:
#include <stdio.h>
#include <math.h>

int main(void) {
  double a,b;
  printf("a> "); scanf("%lf", &a);
  printf("b> "); scanf("%lf", &b);
  printf("%f\n", sqrt(a*a+b*b));
  return 0;
}


レビュー:
「辺a,bへの入力ではそれぞれ「a>」「b>」が出力されているので、斜辺
についても「c>」等などで出力すると、より確認しやすくなると思いま
す。」(TA宮島さんから)

アンケート:
Q1.C言語は型の指定が必要なので嫌いである。
Q2.難しいと思った。
Q3.「基礎プログラミングおよび演習」の授業から時間が経っていたので
忘れていることがあった。

n1910519 1a:○ Tue May 12 17:30:49 2020



演習1a
#include<stdio.h>
#include<math.h>

double shahen(double a ,double b){
double c = sqrt(a*a + b*b);
return c;
}

int main(void){
    double a,b,c;
    printf("a> "); scanf("%lf",&a);
    printf("b> "); scanf("%lf",&b);
    c= shahen(a,b);
    printf("斜辺の長さは%lfです。\n",c);
    return 0;
}

説明
2つの実数を受け取って斜辺の長さを求めるプログラムを書いた。

友人のコメント
ルートの計算を直接計算していることでコードが短くなっていて良い。

Q1,C言語のプログラムはあまり好きではありません。理由は、変数を使
う前に型の定義をするのが面倒に感じるからです。

Q2,ファイルを分けるとtestepsを変えるだけで簡単に図をかけるとわかりました。

Q3,書式設定で %gは便利だと感じました。

r1910720 1a:△ Tue May 12 15:17:41 2020


#include <stdio.h>
#include <math.h>

int main(void){
    double n,x;
    printf("n> ");scanf("%lf", &n);
    x=pow(2,n);
    printf("pow = %g\n", x);
    return 0;
}

コメント:簡潔にまとまっていて、pow = とすることで何を出力してい
るかわかりやすい


s1910346 1a:○ Tue May 12 23:29:00 2020



------演習1b-----------------

#include <stdio.h>
#include <math.h>

double square(int n){
    if(n == 0) return 1.0;
    if(n < 0) return square(n + 1) / 2;
    return 2 * square(n - 1);
}

int main(){
    int n;
    scanf("%d", &n);
    printf("%g\n", square(n));
    return 0;
}
--------------------------------------

再帰を使って分かりやすく書いた。
main関数内printfの%gは,squareが整数の
時は整数表示を,小数の時は小数表示を
行ってもらう狙い.

--------レビュー課題------------------
整数形式だから,僕だったらprintf("%d",&x")
を使い,その後(int)でタイプキャストを行う.
再帰を使ったのは完結でいいと思います。

--------アンケート---------------------
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
時間があるときは好き.キューやスタックなどを自分でくみ上げるの
もまた一興かなと思っている.ただ時間がないときは
最低限の装備は標準でついていて欲しいと思ったりする
Q2. eps ライブラリについてどのように思いましたか。
シンプルに画像が扱えてよいとおもった.
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
今まで受けたオンライン授業の中で,テキストのチャットベースによる
本講義が一番わかりやすくトラブルも少なくスムーズに授業が行えたと
思う。授業内で基礎プロよりも快適に受けれてます.という表現を使って
しまったが自分よりあとの方が言っていたようにプログラムを書いている
時は集中でき授業の流れからも取り残されないという二つの側面で
本講義は最適な方法でオンライン化できたと思う.また授業中に
他の人の質問を確認できるのでハマりやすいポイントや自分の気づかなかった
視点からの質問,それに対する先生の回答を見ることができ,まさにオフライン
を越えたオンライン授業なのではないかと思った. 
久野先生お疲れ様です.

t1810743 1a:○ Tue May 12 23:30:44 2020


プログラミング通論 レポート1a

演習1 c.整数 n (n > 1) を入力し、n の素因数分解を表示する。 


・プログラムコード
#include <stdio.h>

void soinsuPrint(int n){
    printf("n = ");
    int s = 2;
    while(n>=s){
        if(n%s == 0){
            printf("%d ", s);
            n /= s;
        }else{
            s++;
        }
    }
    printf("\n");
    return;
}

int main(void){
    int n;
    printf("n> "); 
    scanf("%d", &n);

    if(n <= 1){
        printf("n > 1\n");
    }else{
        soinsuPrint(n);
    }
    return 0;
}


・プログラムの説明
引数nに対して素因数分解を行い、全てをプリントする関数を作った。
はじめにs=2から素因数であるか判定していく。
nがsで割り切れるなら割ってsをプリントする。
割り切れないのなら、sを1増やす。
これをn<sになるまで続ける。

・レビュー課題
友人:色がカラフルで可愛いですね(VScode)
友人:関数内のnは引数なので/=は使えないと思います。
友人:例外はすぐreturnする。あと失敗時は-1をreturnすべきだ。

・アンケートの回答
Q1:計算が早くて好きだけど、環境構築ができなかったから嫌い。
Q2:Processingみたいだと思ったけど、コンパイルするから描画が高速そう。
Q3:レポートは書けたが提出できるか不安だ。

w1810714 1a:○ Tue May 12 22:22:09 2020


提出日時5/12, 個人作業
1a.
ソースコード
#include <stdio.h>
#include <math.h>
double pit(double w, double h) {
  double s = sqrt(w*w + h*h);
  return s;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = pit(w, h);
  printf("length of hypotenuse = %g\n", x);
  return 0;
}

結果
[w1810714@sol ~/p20]$ ./a.out
w> 1
h> 1
length of hypotenuse = 1.41421
[w1810714@sol ~/p20]$ ./a.out
w> 1
h> 2
length of hypotenuse = 2.23607

説明
直角を挟む二辺の長さをそれぞれ二乗し足し合わせたものの平方根をとっ
ている。平方根の計算のために数学ライブラリmath.hを取り込みsqrtを
使用している。

レビュー
無駄なく簡潔に書けていて良いと思います。pitはピタゴラスですかね。

アンケート
1.命令できたもののみが返ってくるので好き
2.色々遊んでみると楽しいですね
3.今年はちゃんとレポートを出しつづけようと思います

w1910722 1a:○ Tue May 12 17:53:29 2020


学籍番号1910722
個人作業 
提出日付 2020年5月12日

作成したプログラムのソースコード
// power
#include <stdio.h>
#include <math.h>
double power(double n) {
  double x =  pow(2,n);
  return x;
}
int main(void) {
  double n;
  printf("n> "); scanf("%lf", &n);
  double y = power(n);
  printf("power = %g\n", y);
  return 0;
}

説明
数学関数powを用いて、nの値を入力すると2のn乗を出力するプログラム。

レビュー課題
powを用いることでプログラム自体が簡潔になり見やすくていいと思う。(友人より)
アンケート
Q1.C言語のプログラミングをするのは久しぶりだったため、定義の仕方
や入出力の処理に関する書き方を思い出すのに精いっぱいだった。
Q2.図形を描く際には有効的なんだという事を実感した。
Q3.今後の課題はより実践的になっていくと思うので、今のうちに復習しておきたい。

w1910726 1a:○ Tue May 12 15:08:09 2020

個人作業
提出日時 2020/5/12 15:08

演習1a

ソースコード
#include<stdbool.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main()
{
    double Lin1, Lin2, SlopLi;
    char buf[36];

    printf("直角三角形の直角をはさむ2辺の長さをカンマで区切って入力してください. 例:2.0,7.0\n");
    fgets(buf, sizeof(buf), stdin);
    int ScanDid = sscanf(buf, "%lf,%lf", &Lin1, &Lin2);

    if(ScanDid == 2)
    {
        SlopLi = sqrt(Lin1 * Lin1 + Lin2 * Lin2);
        printf("斜辺の長さは%.2lf", SlopLi);
        return 0;
    }

    printf("入力が間違っています.");
    return 0;
}

説明
fgetsとsscanfで文字を読み取りsscanfの戻り値によって処理を分岐さ
せ求められた動作をさせることができました。
fgetsとsscanfを組み合わせることで数字以外が入力された場合でも対
応できるようにしました。

レビュー
クラスメイトからです。
入力した数値が適切かどうかまで判断しているようで感心した。

アンケート
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
c言語のプログラミングはどちらかといえば嫌いです。
理由は、c#などのプログラミング言語と比べてソースコードが長くなっ
てしまい面倒だと感じてしますからです。また、エラーが多く出るのも
理由です。

Q2. eps ライブラリについてどのように思いましたか。
見た感じだととっつきづらそうですが、しっかり読むと意味も理解でき
てよく出来ていると思いました。

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
久しぶりにc言語をやり、忘れていることも多かったのでまた勉強し直
そうと思いました。

w1910727 1a:○ Tue May 12 17:59:22 2020


提出日 5/12

行った課題
演習1-b:整数nを入力し、2^nを出力する。nが正のときは整数、そうで
ないときは実数形式で出力すること。

作成したプログラム
#include <stdio.h>
double second(int n) {
  int t = 1;
  for(int i = 1; i <= n; ++i){
    t = t*2;
  }
  return t;
}
int main(void) {
  int n;
  printf("n> "); scanf("%d", &n);
  if(n>=0){
    printf("%g\n", second(n));
  }else{printf("%g\n", 1/second(-n));
  }
}

プログラムの説明
for文を用いることでループさせ、2の累乗を計算するプログラムである。
nが正のときなは整数が、nが負の時には実数が返されるようにmainで分
岐をした。

友人によるレビュー
second(n)とsecond(-n)を用いてコードを短くできるのが良いと思った。

アンケート
Q1.C言語のプログラミングは好き/嫌いどちら? 理由は?
嫌いではないので、好きです。 
Q2.epsライブラリについてどのように思いましたか。 
描画ができるのは面白いと思った。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
久しぶりなので、徐々に思い出すと同時に慣れていきたい。

y1910661 1a:○ Tue May 12 18:34:14 2020


2020/5/12
演習2b
sin関数を複数の直線で近似して表示するプログラム.

#include<stdio.h>
#include<math.h>
#include "eps.h"

int main(void){
  eps_open("b2.ps",240,240);
  eps_cmd("240 240 translate");
  double pi = 3.141592;
  double d = 5*pi*2; //x軸方向の変位
  int b = 1000;//直線の数
  int A = 10; //振幅
  eps_cmd("0.5 setlinewidth");
  eps_drawline(-50,0,50,0);//x軸の描画
  eps_drawline(0,-50,0,50);//y軸の描画
  eps_cmd("gsave");
  eps_cmd("1 setlinewidth");
  //サイン関数の描画
  int i;
  for(i = -b / 2;i<b/2;i++){
    eps_drawline(i*d/b,sin(i*d/b)*A,(i+1)*d/b,sin((i+1)*d/b)*A);
  }
  eps_close();
  return 0;
}

TAの宮島さんによるレビュー
math.hには円周率がM_PIとして定義されているので、変数piを用意しなくても、d =
5*M_PI*2で計算でき、行数を減らすことができますよ。また、描画が右
上によっているので、中心に描画できると見やすくなると思います。

Q1.
すき.rubyなどと比べて覚えることが少ないから.
Q2.
eps_cmdでも%dのように書式指定で変数が使えたら便利なのにと思った.
Q3.
チャットで授業をすると,プログラムつくりに集中しすぎて先生の話を
聞き逃すことがないのは便利だと思った.

y1910662 1a:○ Tue May 12 15:34:07 2020


プログラミング通論 #01 課題1aレポート

個人作業
提出日時 2020/05/12

作成したプログラム:演習1a

#include <stdio.h>
#include <math.h> 

double hypotenuse(double a, double b) {
    double n = a*a + b* b;
    double c = sqrt(n);
    return c;
}
int main(void) {
    double a,b;
    printf("a> "); scanf("%lf", &a);
    printf("b> "); scanf("%lf", &b);
    double x = hypotenuse(a,b);
    printf("The length of the hypotenuse of the triangle = %lf\n", x);
    return 0;
}

プログラムの説明
入力する辺の長さをa,bとして、入力や出力の処理はmainで行い、斜辺
の長さの計算はhypotenuseで行う。
辺の長さは実数であるため、変数の型にはdoubleを用いた。
sqrtを用いるためmath.hをインクルードした。

レビュー課題(同じクラスの方にレビューして頂きました)
double n = の部分とdouble c = の部分を2文に分けることで、視覚的
にどんな計算をしているのが分かりやすくて良いな、と思いました

アンケート
Q1 どちらかといえば嫌い。毛嫌いするほどではないが型などが厳格なのでやりにくいなあと思うことはある。
Q2 epsライブラリの存在を今回の資料を読んで初めて知った。書いた
コードを視覚的に理解できる点は楽しそうだと思った。
Q3 春休み中にC言語をそんなにたくさん書いていなかったので久しぶ
りに書きながら思いだすところも多かった。
  遠隔講義は少し不安だったがチャットでリアルタイムで対応してく
ださっていたところがよかった。

y1910668 1a:○ Tue May 12 20:46:58 2020


学籍番号:1910668
ペア:個人作業
提出日時:2020/5/12

<プログラム>
(1-b)

#include <stdio.h>
#include <math.h>

double enn_b(int n){
  double x;
  x=pow(2,n);
  return x;
}

int main(){
  double x;
  int n,x1;
  printf("n>"); scanf("%d", &n);
  x=enn_b(n);
  if(n>=0){
    x1=(int)x;
    printf("2^n=%d\n",x1);
  }else{
    printf("2^n=%lf\n",x);
  }
  return 0;
}

<説明>
enn_bというメソッドで2のn乗を返すようにし、nが0以上のときは整数
に直してから表示し、それ以外ではそのまま表示するようにした。

<レビュー>(TAさん)
pow関数をうまく使えていて良いと思います。n>=0の際にint型変数x1を
用意してますが、printf("2^n=%d\n",(int)x);とすると、変数x1を用意
する必要がなくなり、行数を減らすことができるため、見やすくなるか
もしれません。

<アンケート>
Q1.プログラミングは入学前からやりたく、1年でも楽しかったので好きです。
Q2.少し難しいと感じたが、絵を文として描くには使いやすいのかなと思いました。
Q3.c言語をやったのは久しぶりだ忘れているところもあるのでもう少し
頑張りたいと思いました。

y1910670 1a:○ Tue May 12 20:15:51 2020


学籍番号:1910670
ペア:個人作業
提出日時:5月12日

・作成したプログラム:課題1a

#include <stdio.h>
double triarea(double w, double h) {
    double s = w*w + h*h;
  return s;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = triarea(w, h);
  printf("area of triangle = %g\n", x);
  return 0;
}

・説明:三平方の定理の計算をコードに表したもの。二乗に関しては、
math.hのpowを用いても良かったが、上記の方が効率が良いと考え、単
純計算で表した。

・レビュー(友人から):行数が少なくても計算部分を入出力と分割し
てメソッドにしているところがいいと思った。

・アンケート
 Q1:好き。問題指摘を明確にしてくれるから。
 Q2:面白そう
 Q3:なし

y1910671 1a:○ Tue May 12 15:22:40 2020


課題1a

提出日時: 2020/05/12

演習1-b
[ソースコード]
#include <stdio.h>

double fact(int n){
    int i = 0;
    double val = 1;
    if(n > 0){
        while(i < n){
            val *= 2;
            i++;
        }
    }else if(n == 0) val = 1;
    else{
        n = -n;
        while(i < n){
            val /= 2;
            i++;
        }
    }
    return val;
}

int main(void){
    int n;
    printf("n > "); scanf("%d",&n);
    printf("2^n = %g\n",fact(n));
    return 0;
}

[説明]
nを入力して、2のn乗を出力するプログラムを書いた。

[ペアからのコメント]
n = 0の場合とn >0 の場合は分けずに書いた方が短くすむのではないか。

[アンケート]
Q1.C言語のプログラミングは好きか?
まだ深く触れていないので好きでも嫌いでもない。
Q2.epsライブラリについて
基礎プロで描いたときよりも楽に記述出来るように感じた。
Q3.感想
休み中は多言語の勉強をしていてC言語の書き方が少し抜けていた。
言語仕様をつかみながら今後の学習をしていきたい。

y1910673 1a:○ Tue May 12 16:30:58 2020


プログラム通論第1回A課題
学籍番号:1910673
氏名:山﨑 千寛 

[取り組んだ課題]
演習 1.d 整数 n を入力し、n 以下の素数を出力する (出力の順番や形式は任意)。

[作成したプログラム]
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdbool.h>

bool isprime(int n) {
  int limit = (int)sqrt(n); int i;
  for(i = 2; i <= limit; ++i) {
    if(n % i == 0) { return false; } 
  } 
  return true; 
} 

int solve2(int n) {
  int s; int i;
  for(i = n; i > 0; --i) {
    if(i == 1) {exit(0);}
    else if(isprime(i) == true) {printf("%d\n", i);}
    else {  }
  }
}

int main(void) {
  int n;
  printf("n> "); scanf("%d", &n);
  printf("%d\n",solve2(n));
  return 0;
}

[プログラムの簡単な説明]
入力された変数nが素数かどうか判定する関数isprime(n)を使って、素
数ならば出力するというように
素数を並べる。solve2内のfor文はi == 1 に終着するので、その際に
exit(0)で終了するようにした。

[レビュー課題]
間柄:友人
感想:素数かどうかの判断を平方根までにすることで高速化しているの
が非常にいいと思いました。

[アンケート]
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は? 
Rubyとしか比較できませんが、Rubyよりは断然C言語の方が好きです。
Q2. eps ライブラリについてどのように思いましたか。 
便利だと思いました。
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
特にありません。

y1910677 1a:○ Tue May 12 21:57:02 2020


プログラミング通論:#01a
提出日付 2020/5/12

【実施した内容(演習1a)】
プログラム:
//演習1a
#include <stdio.h>
#include <math.h>
double  hypotenuse(double a, double b){
  double c = 0;
  if(a>0 && b>0){
    c = sqrt(a*a + b*b);
  }
  return c;
}

int main(void){
  double a,b,c;
  printf("a>");scanf("%lf",&a);
  printf("b>");scanf("%lf",&b);
  c = hypotenuse(a,b);
  printf("The length of the hypotenuse is %lf.\n",c);
  return 0;
}

説明:hypotenuseという関数では渡された二つの数のそれぞれの二乗を
足したもののルートをとった値を返す.(この値が直角三角形の斜辺の
長さとなる.)そしてmain関数の中でa,bの二つの実数を入力させ
hypotenuseにその二数を渡す.返ってきた値をcに代入しcの値を出力後,
0を返す.

【レビュー課題】
入力値が題の定義に反した実数(負の数)で入力されてしまった時でも対
処できるように0が出力される仕組みになっているのが良い。(友人:福
岡さん)

【アンケート】
Q1.C言語のプログラミングは好き/嫌いどちら?理由は?
C言語のプログラミングはどちらかというと好きです.なぜなら型が書
いてあって分かりやすいからです.
Q2.epsライブラリについてどのように思いましたか。
知らない言葉がいくつか出てきてそこが難しいと思いました.
Q3.リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
今回の課題ではC言語の書き方について復習ができました.

y1910679 1a:○ Tue May 12 17:08:40 2020


提出日時 5/12 16:52
プログラミング
演習1 a
 整数nを入力し、2n を出力する。n >= 0のときは整数、そうでない
 ときは 実数形式で出力すること。
 #include <stdio.h>
double power(double n){
 int i;
 double x=1;
 if (n >=1){
 for (i = 1; i <= n; i++){
  x = x*2;
     }
  }
  if (n < 0){
  n=-n;
  for (i = 1; i<=n ; i++){
  x= x*2;
  }
  x=1/x;
  }
  return x;
 }
 int main(void){
  double n;
  printf("n>");scanf("%lf",&n); 
  double p = power(n);
  printf("power = %g\n", p);
  return 0;
  }
説明
 nが正負で場合分けをして、それぞれfor文をもちいてかける作業を
ループさせた。負の場合であれば正の数にして計算を行った。
レビュー(友人から)
 main部分が複雑でなく、実行のみで簡潔でわかりやすいと思った。
アンケート
Q1.C言語のプログラミングは好き/嫌いどちら? 理由は?
好き/自分が思っているコードを書くために試行錯誤することが面白いと思った。
Q2.epsライブラリについてどのように思いましたか。 
面白いと思った。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
久しぶりのプログラミングで忘れている部分もあったが少しずつ思い出してきた。

y1910681 1a:○ Tue May 12 15:33:33 2020



ソース(演習1d)
#include <stdio.h>
#include <stdbool.h>
bool prime(int a){
        int i;
        for (i = 2; i < a; i++)
        {
            if(a % i == 0){return false;}
        }
            return true;
}

int main(){
    int a, i;
    printf("a < ");
    scanf("%d", &a);
    if (a <= 1){ return 0;}
    printf("2\t");
    for (i = 3; i <= a; i++)
    {
        if(prime(i)){printf("%d\t", i);}
    }
    printf("\n");
    return 0;
}

説明
primeは引数が素数かを判定する関数. また,main関数内ではscanfで整
数を受け取り1以下の整数なら素数はなし. そうでないなら繰り返し
primeを呼び出す.main関数内のforの部分で初期条件の整数3から開始し
ているのはprime関数内で使用するときのためである.prime関数内のfor
の条件をi <= aに書き換えれば書かなくてもよい. また,スペースでは
なくタブを用いた理由はテストで小さい数を入力して時タブのほうが見
栄えが良かったからである.

第三者からのコメント
簡潔にまとめられていて良いと思います.

アンケート
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
A1. 嫌い, 考えてもルビーと違ってよくわからに動作することが多いから.
Q2. eps ライブラリについてどのように思いましたか。
A2. 関数を使う側は知識,理解が少なくても使うことができるので便利なものだなと思った.
Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
A3. コードをかいてるといつの間にか授業が進んでいて違和感を覚えた.

y1910684 1a:○ Tue May 12 15:13:05 2020


レポート1a
提出日時 2020/05/12


<演習1a>
直角三角形の直角をはさむ2辺の長さを入力し、斜辺の長さを出力する。

<ソースコード>
#include <stdio.h>
#include <math.h> 
double tra(double w, double h) {
  double s = hypot(w,h);
  return s;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = tra(w, h);
  printf("斜辺の長さ = %g\n", x);
  return 0;
}

<説明>
直角三角形はピタゴラスの定理より斜辺の長さは他の2辺をそれぞれ2乗
して和をとった値の平方根で求められる。
2つの値をそれぞれ2乗して和をとり、平方根を出す動作をhypot関数で
行い、double型として出力した。

<レビュー>(同級生より)
斜辺の計算は2つの辺の各平方の和の平方根と書くが、hypot関数を使っ
て、プログラムが簡潔になった。

<アンケート>
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
まだRubyとC言語しかプログラムを作成したことがないのであまり言語
による好き嫌いが判別できないが、エラーの原因がRubyより分かりやす
いので好きです。
Q2. epsライブラリについてどのように思いましたか。
様々な形の図形を表現できるのですごい機能だと思った。
Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
チャットを利用しながらだと、他人の質問が見れるためどこでつまずき
やすいかや共通の疑問点が発見できてとても良いと思った。

y1910685 1a:○ Tue May 12 20:19:28 2020


学籍番号:1910685
ペア:個人作業
日付:5/12

[実行した課題]
演習1.d(与えられたn以下の素数を出力する)

[プログラムのソース]

#include <stdio.h>
#include <stdbool.h>
#include <math.h>

#define MAX 100000

int list[MAX];
//sは今何番目の探索をしているかを示す
int s = 2;
//nは何個目まで表示するかを受け取る
int n = 0;

//これまでの素数を使って素数か否かの判定を行う
bool check(int m){
  int m2 = (int)sqrt(m);
  for(int k = 1; k < s;k++){
    if(m2 < list[k])break;
    if(!(m % list[k])){
      return false;
    }
  }
  return true;
}

int main(void){
  printf("n以下の素数を羅列します\nn: ");
  scanf("%d",&n);
  list[0] = 2;
  list[1] = 3;

  //kが素数か否かの判定数
  for(int k = 5; k <= n;k += 2){
    if(check(k)){
      list[s] = k;
      s++;
      if(s >= MAX){
        printf("許容数を超えました\nここまでの結果を表示します\n");
        break;
      }
    }
  }

  for(int k = 0;k < s;k++){
    printf("%8d: %d\n",k+1,list[k]);
  }

  printf("***end***\n");
  return 0;
}

[実行例]
n以下の素数を羅列します
n: 100
       1: 2
       2: 3
       3: 5
       4: 7
       5: 11
       6: 13
       7: 17
       8: 19
       9: 23
      10: 29
      11: 31
      12: 37
      13: 41
      14: 43
      15: 47
      16: 53
      17: 59
      18: 61
      19: 67
      20: 71
      21: 73
      22: 79
      23: 83
      24: 89
      25: 97
***end***

[ソースの簡単な説明]
list配列にあらかじめ素数である2と3を入れておき、check関数で整数k
がlistの数で割り切れるかによってkが素数かを判別し、素数なら配列
listに追加するということを、整数kを2ずつ増やしながら繰り返すこと
で素数を羅列するプログラムです。
[レビュー課題]
間柄:友人
レビュー:リストに追加していくことで素数をカウントしていくやり方
は勉強になりました。

[考察等]
素数のリストの全ての数でなく、対象の平方根以下の素数に限定して割
ることでかなり高速化することができました。10万をnに入力した際に
かなり早くなった実感がありました。

他人に自分のコードを説明するということがあまりなかったので、普段
はコメントアウトをほとんどしていなかったのですが、今回その重要性
を実感しました。自身で読み直す際にもスムーズに読めるようになると
思うので、これからは要所に残したいと思いました。

[アンケート]
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
好きです。細かいところ(型など)まで好きに書けるからです。

Q2. epsライブラリについてどのように思いましたか。
感覚的に書けて非常に便利だと思いました。

Q3. リフレクション (今回の課題で分かったこと)・感想・要望をどうぞ。
チャットだと気軽に好きなタイミングで質問できていいと思いました。

y1910686 1a:○ Tue May 12 23:48:55 2020


[ペア] 個人作業
[提出日時] 2020/05/12

[ソースコード]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include "eps.h"
#define HALF_PI 1.57079
#define VERTICES_SIZE 1024
#define QUEUE_SIZE 128

typedef struct tree_node
{
    double pos[2], angle, length;
} tree_node;

tree_node queue[QUEUE_SIZE];
int queuecnt = 0;
double vertices[VERTICES_SIZE];

void affine2d(double x, double y, double theta, double* res)
{
    double costh = cos(theta), sinth = sin(theta);
    res[0] = costh; res[1] = sinth; res[2] = 0;
    res[3] = -sinth; res[4] = costh; res[5] = 0;
    res[6] = x; res[7] = y; res[8] = 1;
}

void arrcpy(double* d, double* s, int n)
{
    for (size_t i = 0; i < n; i++)
    { 
        d[i] = s[i];
    }
}

void transform(double* vtx, double* mrx, double* res)
{
    for (size_t j = 0; j < 3; j++)
    {
        double sum = 0;
        for (size_t k = 0; k < 3; k++)
        { 
            sum += vtx[k] * mrx[3 * k + j];
        }
        res[j] = sum;
    }
}

void make_twosquares(double length, double angle, double* list)
{
    double sinth = sin(angle) * length, costh = cos(angle) * length;
    double mrx[9], res[3];
    double *listptr = list;

    double sin_square[4][3] = 
    {
        {     0,     0, 1 }, 
        {     0, sinth, 1 }, 
        { sinth, sinth, 1 }, 
        { sinth,     0, 1 }
    };
    affine2d(length, 0, angle, mrx);
    for (size_t i = 0; i < 4; i++)
    {
        transform(sin_square[i], mrx, res);
        arrcpy(listptr, res, 3);
        listptr += 3;
    }

    double cos_square[4][3] = 
    {
        {     0,     0, 1 }, 
        {     0, costh, 1 }, 
        { costh, costh, 1 }, 
        { costh,     0, 1 }
    };
    affine2d(0, 0, angle, mrx);
    for (size_t i = 0; i < 4; i++)
    {
        transform(cos_square[i], mrx, res);
        arrcpy(listptr, res, 3);
        listptr += 3;
    }
    
}

void addqueue(double x, double y, double ang, double len)
{
    if(queuecnt == QUEUE_SIZE) return;
    queue[queuecnt].pos[0] = x;
    queue[queuecnt].pos[1] = y;
    queue[queuecnt].angle = ang;
    queue[queuecnt].length = len;
    queuecnt++;
}

void make_tree(double root_x, double root_y, double length)
{
    double twosquares[24], mrx[9], res[24];
    double *vtxptr = vertices;
    tree_node *queueptr = queue;

    addqueue(root_x, root_y, 0, length);

    for (size_t i = 0; i < QUEUE_SIZE; i++)
    {
        double x = queueptr[i].pos[0], y = queueptr[i].pos[1];
        double ang = queueptr[i].angle, len = queueptr[i].length;

        make_twosquares(len, 0.5, twosquares);
        affine2d(x, y, ang, mrx);

        for (size_t i = 0; i < 24; i += 3)
        {
            transform(twosquares + i, mrx, res + i);
            arrcpy(vtxptr, res + i, 2);
            vtxptr += 2;
        }

        addqueue(res[6], res[7], ang - (HALF_PI - 0.5), len * sin(0.5));
        addqueue(res[15], res[16], ang + 0.5, len * cos(0.5));
    }
    
}

int main()
{
    for (size_t i = 0; i < VERTICES_SIZE; i++)
    {
        vertices[i] = 0;
    }

    eps_open("pythagotree.ps", 1920, 1080);
    eps_cmd("1.0 0.0 0.0 setrgbcolor");
    make_tree(350, 90, 70);

    eps_cmd("newpath");
    eps_num(350), eps_num(20);
    eps_cmd("moveto");
    eps_num(350), eps_num(90);
    eps_cmd("lineto");
    eps_num(420), eps_num(90);
    eps_cmd("lineto");
    eps_num(420), eps_num(20);
    eps_cmd("lineto");
    eps_cmd("closepath stroke");

    for (size_t i = 0; i < VERTICES_SIZE; i += 8)
    {
        eps_cmd("newpath");
        eps_num(vertices[i]), eps_num(vertices[i + 1]);
        eps_cmd("moveto");
        eps_num(vertices[i + 2]), eps_num(vertices[i + 3]);
        eps_cmd("lineto");
        eps_num(vertices[i + 4]), eps_num(vertices[i + 5]);
        eps_cmd("lineto");
        eps_num(vertices[i + 6]), eps_num(vertices[i + 7]);
        eps_cmd("lineto");
        eps_cmd("closepath stroke");
    }
    eps_close();

    return 0;
}

[友人からのコメント]
各動き毎に関数化されており、さらに数学をたくさん盛り込んでいるの
に綺麗にまとまっていて素晴らしいと思いました。

[説明]
フラクタル図形の一つ、ピタゴラスの木を描画する

[アンケート]
 Q1. 好き。変に高機能すぎたりしないので、シンプルで分かり易い。
 Q2. 特に小難しいことはなかった。
 Q3. 動くようになるまでにかなり苦労した。

y1910688 1a:○ Tue May 12 15:50:54 2020


プログラミング通論(久野先生)
第一回A課題

提出日時 2020/5/12

・作成したプログラム
演習1b
#include <stdio.h>

double nth_power(double n){
  double i,s=1.0;
  if(n>=0){
    for(i=0;i<n;i++){
      s*=2;
    }
  }else{
    n*=-1;
    for(i=0;i<n;i++){
      s/=2;
    }
  }
  return s;
}

int main(){
  double n;
  printf("n >"); scanf("%lf",&n);
  double ans=nth_power(n);
  printf("%lf\n",ans);
  return 0;
}

・簡単な説明
2のn乗を表示するプログラム。
関数nth_power(n乗)の中でn>=0とn<0の場合で場合分けした。
for文の中で1にn>=0のときはn回2を掛ける、
n<0のときはn回2を割ることで2のn乗を求めた。

・レビュー
レビュアー 友人N氏
自然数乗のみならず、分岐によって負の数にも対応しているのが良いと思った。 

・アンケート
Q1のA 好き
大学以前に構ったことがあるのがCとRubyだけだから。

Q2のA
以前の情報系の授業で扱って、画像処理ができる点で印象に残っている。

Q3のA
遠隔授業でも問題なくプログラミングに取り組めた。

y1910692 1a:○ Tue May 12 17:15:29 2020


#1 A課題レポート
学籍番号:1910692
ペアの学籍番号: 個人作業 
提出日時:5/12
[行った課題]
演習1-d:整数nを入力し、n以下の素数を出力する(出力の順番や形式は任意)。 
[実際に書いたコード]
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
bool sosucheck(int n){
    int i;
    for(i=2;i<=(int)sqrt(n);++i){
        if(n%i==0){return false;}
    }
    return true;
}

int main(){
    int n,i;
    printf("n>");scanf("%d",&n);
    for(i=2;i<=n;++i){
        sosucheck(i);
        if(sosucheck(i)){
            printf("%d ",i);
        }

    }
    return 0;
}

あらかじめ素数かどうかを判定する関数bool sosucheckを用意する。こ
の関数では、整数を引数として渡し、その数字を2からその整数の正の
平方根で割り切れるかを確認する関数である(エラトステネスの篩より
ある整数の正の平方根以下の自然数で約数を持なたなければ、その整数
は素数である。)。割り切れなかった場合、素数なので、trueが返っっ
てくる。この関数に2~入力したnまでの整数をforを使って引数として
渡し、sosucheckがtrueなら引数として渡した整数を表示させる。そう
することで、n以下の素数をすべて表示できる。

[他人からのコードへのコメント]
main関数のif文でsosucheck関数の判定するなら同じこと二回やってる
だけだしその前のsosucheck関数の呼び出しはいらなくない?と思った。
(茨城大工学部の友人より)

[アンケート]
Q1:c言語プログラミングは、どちらかというと好きではない。型の宣言
等でしくじると無茶苦茶になるから。(ただこれは、勉強不足の点も有
り。)
Q2:postscript言語が使えるようになれば基礎プロの時に行った絵の描
写よりは好きになれそうだなと感じた。
Q3:今回は、講義の初めからいいスタートを切れたのでこの調子で前学
期を乗り越えたいと思う。

y1910693 1a:○ Tue May 12 15:13:52 2020


レポート課題1a



[プログラム]

#include <stdio.h>
#include <math.h>

int main(void){
  float a,b,c;
  printf("a=");
  scanf("%f",&a);
  printf("b=");
  scanf("%f",&b);

  c=sqrt(a*a+b*b);

  printf("c = %f\n",c);

  return 0;
}

[説明]
a,bの値を入力することで、直角を挟む二辺の長さがインプットされ、
計算されることによって直角三角形の斜辺の長さが出力される。


[レビュー(友人より)]
とても簡潔で分かりやすく書かれていました。

[アンケート]
Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
好き
今は序盤で躓いてしまっているけれど、できるようになったときが楽しみだから

Q2. epsライブラリについてどのように思いましたか。
演習1で手一杯でそこまで手が付けられていません。
すみません

Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ
一年生でやったところをいちから復習してこの授業にしがみついていきたいです

y1910695 1a:○ Tue May 12 16:20:08 2020


提出日時:2020/05/12

演習1-a
[コード]
#include<stdio.h>
#include<math.h>

double tri(double a, double b)
{
    double c1 = a*a + b*b;
    double c2 = sqrt(c1);
    return c2;
}

int main(void)
{
    double a, b, c;
    printf("a> ");
    scanf("%lf",&a);
    printf("b> ");
    scanf("%lf",&b);
    c = tri(a, b);
    printf("%.2f\n",c);
    return 0;
}

[説明]
関数triは、与えられた二つの値の二乗の和をc1に、c1の平方根をc2に
入れ、c2を返す。main関数でそれを少数第二桁まで表示した。

[ペアからのコメント]
丁寧に書かれていて良い。return sqrt(a*a + b*b)のようにすれば、
より短いコードになる。

[アンケート]
Q1.好きでも嫌いでもない。
Q2.いろいろ工夫ができて面白いと思った。
Q3.忘れている点があったため復習したいと思った。

y1910697 1a:○ Tue May 12 18:05:08 2020


学籍番号 1910697
個人作業
提出日 5月12日

演習1c 整数nを入力し素因数分解する
プログラム
#include <stdio.h>
#include <math.h>
void isprime(int n,int i){
if(n<=i){printf("%d ",n);
}else if(n%i==0){printf("%d ",i);isprime(n/i,i);
}else{isprime(n,i+1);
}

}

int main (void){
int n,i=2;
printf("n<");scanf("%d",&n);
isprime(n,i);
return 0;
} 

結果
[y1910697@sol ~/protuu]$ ./a.out
n<121
11 11[y1910697@sol ~/protuu]$ ./a.out
n<144
2 2 2 2 3 3[y1910697@sol ~/protuu]$ ./a.out
n<41
41[y1910697@sol ~/protuu]$ ./a.out
n<1
1[y1910697@sol ~/protuu]$ ./a.out
n<0
0[y1910697@sol ~/protuu]$ ./a.out
n<-1
-1

説明
isprimeで自身を繰り返し呼び出して素因数を小さい順に表示します。
nが0以下の場合にerrorを返したりするようにすればよかったと後で気
づきました。

レビュー課題
素因数を出力した後、改行を出力すれば、より結果を見やすくなると思います。
TAの宮島さんより

アンケート
Q1、C言語のプログラミングは好きか嫌いか
A1、どちらかといえば好きです。

Q2、espライブラリについて
A2、フォントを指定できたりしてかなり使いやすくされていると思いました。
基礎プログラミングのときに自分で作ったイラスト作成のためのツール
みたいなものだと理解しました。

Q3、リフレクション
A3、C言語を触ったのは久しぶりだったので値の型などの管理ができな
くて時間がかかりました。
昨年度やったことを思い出しながらやっていきたいと思います。

y1910698 1a:○ Tue May 12 13:55:48 2020


プログラミング通論レポート#01a
提出日付:2020/5/12

[取り組んだ課題と作成したプログラム]
課題1a
・実際に作成したプログラム
#include <stdio.h>
#include <math.h>
//直角三角形の斜辺を求める

double syahen(double a, double b)
{
    double s;
    s = sqrt(a*a + b*b);
    return s;
}

double main(void)
{
    double x,y,z;
    printf("斜辺以外の一辺の長さを入力してください:"); scanf("%lf",&x);
    printf("もう一辺の長さは:");scanf("%lf",&y);
    z = syahen( x, y );
    printf("この直角三角形の斜辺は%fです。",z);

    return(0);

}

[プログラムの説明]
syahenという関数で直角三角形の斜辺以外の二辺の二乗の和の平方根を
とる。main関数は二辺の長さを受け取り、syahen関数を利用して実際に
斜辺の長さをzに代入して斜辺の長さを表示するように動作している。

[レビュー課題]
レビュー回答者: 兄
三平方の定理から斜辺を求めていることがダイレクトにわかる点がよいと思う。

[アンケート]
Q1. 好き。 まだまだ未熟だが、自分のアイディアから思い通りのプロ
グラムを苦戦しながら作るのは大変だが、達成感があるため。

Q2. C言語を用いてファイルを動かしたことがなかったため新鮮だった

Q3. オンラインでの実施で不安な点もあるが、こんな状況だからこそス
キルを磨くいい機会だと思うので頑張りたい。

y1910699 1a:○ Tue May 12 14:53:05 2020


プログラミング通論 第一回レポート課題(a)
2020/5/12

【作成したプログラム】
#include <stdio.h>

double hypotenuse(double a, double b) {
  double c = sqrt(pow(a, 2.0) + pow(b, 2.0));
  return c;
}

int main(void) {
  double a, b;
  printf("a> "); scanf("%lf", &a);
  printf("b> "); scanf("%lf", &b);
  double x = hypotenuse(a, b);
  printf("The length of the hypotenuse of the triangle = %g\n", x);
  return 0;
}

【簡単な説明】
hypotenuseの部分では、2つの実数a,bの2乗の和を計算し、その結果を返している。
mainの部分では入力と出力を行っている。

【レビュー課題(友人から)】
pow関数を用いており斜辺の長さの計算が簡潔にまとまっている点がよいと思いました。
ただmath.hをインクルードしていないと動かないのではないかと思いました。

(math.hをインクルードしていなくても。正常にに動かすことが出来ました。)

【アンケート】
Q1:C言語のプログラミングは好き/嫌いどちら? 理由は?
→好きです。プログラミングは苦手ですが、試行錯誤を重ねて正しく動
くプログラムが完成した時がとても嬉しいです。

Q2:epsライブラリについてどのように思いましたか。
→すみません、取り急ぎ「課題1」で今日が締め切りのこのレポートを
書いていて、まだそちらに進めていません。(週末までに勉強します)

Q3:リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
→チャット形式の授業は初めてで不安でしたが、今回で慣れることが出
来ました。

y1910705 1a:△ Tue May 12 21:47:44 2020


#1A課題レポート

課題内容
演習1b

作成したプログラム
#include <stdio.h>

double bb(int n){
  double m=1.0;
  int i=0;
  if(n>=0){
    while(i<n){
      m = m*2.0;
      ++i;
    }
  }else{
    while(i>n){
      m = m / 2.0;
      --i;
    }
  }
  printf("%lf\n", m);
}

double main(void){
  int n;
  printf("n>"); scanf("%d", &n);
  bb(n);
  return 0;
}

レビュー(友人)
whileを用い、より簡潔にまとめられている所や、書式が見やすく改行
されている所が良いと思った。

y1910707 1a:○ Tue May 12 19:33:11 2020



演習1.c
#include <stdio.h>
int main(void) {
  int n;
  printf("n> "); scanf("%d", &n);
  for (int i = 2; i <= n; ++i){
    if (n%i == 0){
      printf("%d ", i);
      if (i == n){
        break;
      }
      n /= i;
      i = 2;
    }
  }
  return 0;
}

指定された自然数nからi=2~から割り切れるか否かで素因数を決めるという処理である.

コメント(友人より)
 割り切れたときに2に戻す必要ある?2で割り切れたときは2に戻らない
 とだけど17で割り切れたときにも2に戻ってたら無駄に計算回数が増え
 ると思う.
 
アンケート
Q1. 苦手というわけではないのだが, 情報系にあまり興味が持てないの
で好きではない.
Q2. 描画処理そのものはよくあるが, 単純に扱いやすいと感じた.
Q3. 今回のような授業形式は初めてだったが, 現状不満はない.

y1910708 1a:△ Tue May 12 14:27:50 2020


1910708 吉田光河 個人作業 14:10

1a
#include <stdio.h>
#include <math.h> // sqrtを使う場合必要
#include <stdbool.h> // true, false, boolを使う場合必要

int main(void) {
float a,b,c;
printf("a> "); scanf("%f", &a);
printf("b> "); scanf("%f", &b);
c = sqrt(a*a + b*b);
printf("hypotenuse is %.5f.\n", c); 

return 0;
}

三角形の斜辺の長さを求めるコード

Q1. C言語のプログラミングは好き/嫌いどちら? 理由は?
嫌い
苦手

Q2. epsライブラリについてどのように思いましたか。
分かりづらい

Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
次回も頑張りたい1910708 吉田光河 個人作業 14:10

y1910709 1a:○ Tue May 12 18:37:10 2020


学籍番号:1910709
提出日時:5/12

演習1aのソースと説明:

#include <stdio.h>
#include <math.h>
double slope(double w, double h) {
  double s = (w * w) + (h * h);
  double t = sqrt(s);
  return t;
}
int main(void) {
  double w, h;
  printf("w> "); scanf("%lf", &w);
  printf("h> "); scanf("%lf", &h);
  double x = slope(w, h);
  printf("%g\n",x);
  return 0;
}

引数hに三角形の高さ,引数wに底辺を代入してそれぞれを二乗したものを
sqrt()で平方根を導出しreturn で結果を返した。

レビュー:
複雑なことをせず,最小限にまとめられたソースだと思う(友人から)

アンケート:
Q1 あまり好きじゃない,理由は変数定義を型ごとに変えなきゃならないから
Q2 難しそうだと思った
Q3 ひさしぶりにC言語を書いたのでかなり忘れていた。

y1910714 1a:○ Tue May 12 22:27:16 2020


個人作業
提出日時:5月12日22:30頃

演習1b

ソースコード

#include <stdio.h>

double po2(int n) {
  double x = 1;
  if(n >= 0) { for(int i = 0; i < n; i++) { x *= 2; }
  }
  else {
    n = -n; for(int i = 0; i < n; i++) { x /= 2.0; }
  }
  return x;
}
int main(void) {
  int n; double x;
  printf("n> "); scanf("%d",&n);
  x = po2(n);
  if(n >= 0) { int y; y = (int)x; printf("2^%d = %d\n", n, y);}
  else { printf("2^%d = %g\n", n, x);}
  return 0;
}

説明
整数nを入力し、2^nを出力するようなプログラムを作った。
nの正負により出力される値の形式を変える条件を考慮して、まず、2^n
を実数で返す関数po2(n)を作った。
そして、mainではnが非負ならpo2(n)をint型にキャストするようにした。

コメント(原文ママ)
main内の変数yはprintf内でxを直接キャストにすればもっと短くできるかも。
math.hのpowっていう乗数を計算する関数を使わないで自分で書いているのはいいと思うよ。

アンケート(以下、Q1に対する回答をA1などと記す)
A1.好きです。rubyなんかと比べると、適当なライブラリを導入する必
要があるなど融通の利かない感のする反面、コンパイル時のエラー表示
などで誤りを詳しく指摘してくれるのは、まだプログラミングに慣れな
い身としてはとても勉強になるから。

A2.そこまで手が届きませんでした。資料を斜め読みした限り、やはりC
言語でも作図できるんだな、くらいにしか思えませんでした。

A3.コメントをされた方の指摘にあるように、私のソースコードには無
駄が散見されます。まずは学習単元の概念を習得することですが、演習
問題では成る丈簡潔に書くよう意識したいです。

y1910715 1a:○ Tue May 12 16:10:18 2020


学籍番号:1910715
「個人作業」

取り組んだ課題:課題1-a

作成したプログラム:
//powtwo --- a power of two.
#include <stdio.h>
int powtwo(int n){
    long x = 1;
    for(int i= 1; i<= n; ++i){
        x = x*2;
    }
    return x;
}

int main(void){
    int n;
    printf("n> ");scanf("%d", &n);
    if(n<0){
        printf("2**(%d) = %f", n, 1.0/powtwo(-n));
    }else{
        printf("2**%d = %d", n, powtwo(n));
    }
}

簡単な説明:
powtwo関数ではfor文を使ってxに2をn回かけている。
またn=0だとfor文の中身が一回も動作しないため2の0乗である1をxの初期値としている。
main関数ではpowtwo関数を使いnが0より小さいかそれ以外かで場合分けをしている。
0より小さい場合はpowtwo関数はint型のため-nを渡し、帰ってきた値で1を割り答えを表示している。
それ以外の場合つまり0以上の場合はpowtwo関数で帰ってきた値をそのまま表示している。

レビュー:
友達「メインでifを使った分岐を使っているため、上の方のプログラムが余計に長いものにならないところが優れていると思った。」

アンケート:
Q1. C 言語のプログラミングは好き/嫌いどちら? 理由は?
配列の制御などで少しつまずいた記憶があるが、型の宣言などの部分で
Rubyより自分で直接指示している感じがあって好き。

Q2. eps ライブラリについてどのように思いましたか。
最初psファイルを開くツールがなくまたconvertもできなかったため戸惑った。
基本的にwindowsしか触ったことがないからかもしれないが、全然なじ
みがないものだと思った

Q3. リフレクション(今回の課題で分かったこと)・感想・要望をどうぞ。
確かにチャットと自分のプログラミングとを区切りの良い所で交互に見
れて思っていたよりやりやすかった。
見逃したり忘れたりしてもすぐ見返せるので対面の時よりやりやすかっ
た。

y1910716 1a:○ Tue May 12 20:30:45 2020


1910716
個人作業
提出日時 5/12 20:28

[プログラム]
演習1 a

1.ソース

#include<stdio.h>
#include<math.h>

double a1(double h,double w){
	double l;
	l=sqrt(h*h+w*w);
	return l;
	
}

int main(void){
	double h,w,l;
	
	printf("h> ");scanf("%lf",&h);
	printf("w> ");scanf("%lf",&w);
	l=a1(h,w);
	printf("answer %.4f\n",l);
	return 0;
}

2.説明
直角三角形の底辺と高さを入力して、入力した数値を用いて関数a1で斜
辺を計算し、小数点第4位まで表示させました。

3.レビュー
斜辺の値を計算するのは小数点を含めて関数a1の中で処理させた方が計
算式をまとめられると思います。(父親)

[アンケート]
Q1
好きです。関数名も短くて覚えやすく、型宣言がしっかりしているので
ソースを見て理解しやすいからです。

Q2
一年生の時にやった図形作成より理解が難しいと思いました。原点を変
えることができるのは画期的ですが理解するまでに多くの時間を使いま
した。

Q3
しばらくc言語を触っていなかったのでプログラム制作に時間がかかっ
てしまいました。これから授業が始まるので、勘を取り戻していきたい
です。