07/11/27 18:04:22
[1] 授業単元: プログラム演習
[2] 問題文:入力された正の2整数の最大公約数と最小公倍数を算出する。
・キーボードからの入力が空の場合は処理を終了する。
・キーボードからの最大入力桁数は4バイトとする。
・キーボードからの入力が4バイトを超える場合は処理を終了する。
・キーボードからの入力が正の整数に変換できない場合は処理を終了する
エラーメッセージ
未入力 :入力されていません、桁あふれ:4文字以下で入力してください、数値以外:半角数字以外入力できません、ゼロ入力:0は入力できません
文字列を正数に変換する関数はatoiを使用。
引数 char data[] 文字列
戻り値 : 正数 エラー値 -1 未入力 -2 桁あふれ -3 数値以外-4 ゼロ入力
最大公約数を算出の関数名はgcdでユークリッドの互除法を使用。
引数 int data1 データ1 int data2 データ2
戻り値 : 最大公約数
最小公倍数を算出する関数名はlcm。最小公倍数を算出する際、最大公約数の関数を使用する。
引数 int data1 データ1 int data2 データ2
戻り値 : 最小公倍数
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 11・28まで
[5] その他の制限: なし
316:デフォルトの名無しさん
07/11/27 18:06:06
>>310
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int i=0,l,c[256]={0};
char buf[256];
double h=0,p;
scanf("%s",buf);
l=strlen(buf);
for(i=0;i<l;i++)
c[buf[i]]++;
for(i=0;i<256;i++)
if(c[i]>0) {
p=(double)c[i]/l;
printf("\"%c\" %lf\n",i,p);
h-=p*log(p);
}
printf("H = %lf\n",h);
return 0;
}
317:デフォルトの名無し
07/11/27 18:14:32
[1] 授業単元: プログラミング
[2] 問題文:
入力された整数0~9のn個の文字列に対応したヒストグラムを出力するプログラムを作成せよ。
例:(n個の整数文字列=0050011050)
数値0が6個、1が2個、5が2個の場合、以下のように出力する。
<出力例>
a[0] = 6 ******
a[1] = 2 **
a[2] = 0
a[3] = 0
a[4] = 0
a[5] = 5 **
a[6] = 0
a[7] = 0
a[8] = 0
a[9] = 0
ただしキーボードからの入力は最大128バイトとし、それを超える場合129バイト以降のデータはカウントしない。
入力データは半角数字のみとし、全角数字の入力は考えない。
文字列カウント関数 count
引数 char inputdata[] 入力データ
int outputdata[] 出力データ
算出結果をヒストグラムで描写する関数名 hist
引数 int outputdata[]
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C言語
[4] 期限: 11月28日まで
[5] その他の制限: なし