2つの文字列を入力として受け取って、片方がもう片方の並べ替えになっていれば「OK」、なっていなければ「NG」と表示するプログラムを作成せよ。文字列の扱いに関する注意はC入門第3回の記載に準ずるものとするが、本課題ではstring.hで定義されている関数を利用してよい。
締切: 11/01 23:59
A, T, C, Gの4つの文字からなる文字列が入力として与えられたとする。この時、連続する文字を、文字とその繰り返し回数によって表現することによってデータを圧縮するプログラムを作成せよ。(この圧縮方法は連長圧縮と呼ばれる。) たとえば、 "AAAATTCCCCTGG"であれば、"A4T2C4T1G2"と表現する。ただし、圧縮された文字列が、元の文字列よりも長さが短くならない場合には、圧縮文字列ではなく元の文字列を返すようにせよ。文字列の扱いに関する注意はC入門第3回の記載に準ずるものとするが、本課題ではstring.hで定義されている関数を利用してよい。
注: 入力文字列の長さは高々100文字とする。(2022/11/2 追記)
注: "AAAAAAAAAA"であれば、"A10"と表現すること。(2022/11/2 追記)
締切: 11/01 23:59
8つの小数値を入力として受け取り、前から順に、線分Aの始点のx座標、線分Aの始点のy座標、線分Aの終点のx座標、線分Aの終点のy座標、線分Bの始点のx座標、線分Bの始点のy座標、線分Bの終点のx座標、線分Bの終点のy座標を意味するものとする。この時、線分Aと線分Bが1点で交差すれば「OK」、交差しなければ「NG」と表示するプログラムを作成せよ。ただし、線分の端点で交差するケースは考慮しなくてよい。
締切: 11/01 23:59
下記のような形式で保存されている、各行に数値が3つずつ書かれているファイル"input_data.txt" が存在する。1つの行は1つのデータに対応しており、行内の1つ目の数字はx座標、2つ目の数字はy座標、3つ目の数字はクラスラベルを表し、x座標・y座標は小数値、クラスラベルは0, 1, 2のいずれかの値を取るものとする。
-5.90307 -1.296251 0
13.908229 -4.392037 1
-16.965119 -12.759401 2
-7.249688 -5.500222 0
10.592007 19.868212 1
-6.820521 7.507087 2
11.607225 2.622948 1
3.883929 -2.797421 0
-16.248241 -4.188835 2
-1.746382 8.558089 0
さて、キーボード入力から新たなデータのx座標・y座標を読み込み、そのクラスラベルを予測するプログラムを作成したい。特徴量(本課題の場合は2つの座標)からクラスラベルを予測する手法は機械学習におけるクラス分類問題と呼ばれ、様々な手法が提案されている。ここでは最近傍法に基づいて、そのクラスラベルを予測するものとする。
最近傍法では、まずクラスラベルを予測したいデータと、input_data.txtにふくまれているデータとの間のユークリッド距離を、全てのデータに対して計算する。(つまり、input_data.txtにN個のデータが含まれている場合には、N個の距離を計算する。) その中で、最もユークリッド距離が小さいデータを探し、そのデータに割り振られているクラスラベルを、新たなデータのクラスラベルの予測値として出力する。
最近傍法に基づいたクラスラベル予測プログラムを作成せよ。ただし、キーボード入力による2つの数字は空白を区切りとして与えられるものとし、結果はクラスラベルのみが表示されるものとする。最近傍となる点が複数存在する場合には、その点のうちどれかのラベルを出力すればよい。また、input_data.txtに含まれるデータの個数は高々100個であるとする。
締切: 11/01 23:59
次のコードを実行すると何が表示されるか、プログラムを実行せずに考察した後、実行結果を確認せよ。また、なぜそのような出力になったのか、理由を説明せよ。レポートはテキストファイルとして作成すること。
#include <stdio.h>
int main(int args, char *argv[]){
char *x[4] = {"enter", "new", "point", "first"};
char **xp[4];
char ***xpp;
int i;
for (i = 0; i < 4; i++)
xp[i] = x + (3 - i);
xpp = xp;
printf("%s", **++xpp);
printf("%s", *--*++xpp+3);
printf("%s", *xpp[-2]+3);
printf("%s\n", *--xpp[-1]+1);
return 0;
}
締切: 1/31 23:59