情報科学演習 宿題 2011.11.28

Back


電卓やパソコンが普及する前には「手回し計算機」という機械式の手動計算機械が研 究者や技術者の間で用いられていた.これは今でも計算機のプログラムの内部処 理として使用されている加算による積算処理および減算による除算処理の原理を 使用しているものであった.そこで,その原始的なアルゴリズムを使用して,積 算の記号 * ならびに除算の記号 / を使用しないで以下の計 算を行なうプログラムを作成せよ.

2桁の整数を3つ乱数で発生させ,それぞれ m, n, p とする.また,3 桁の整数を1つ乱数で発生させ,それを q とするとき,m * n q / p (整数型)を求める.前述のようにプログラム中にかけ 算 * と割算 / を使用しないこと.

My student number: s114099

m=86, n=23, m*n=1978
p=17, q=208, q/p=12

--------------------------------------

かけ算が足し算の繰り返しであることは理解しやすいと思います.割算は何回引 けるか,という引き算で実現できます.

解答用紙


解答例

/* ************************************************** */
/*                                                    */
/*      情報科学演習 C6 C7                            */
/*      レポート課題                                  */
/*      2011.11.28                                    */
/*                                                    */
/* ************************************************** */
/*                                                    */
/*      学生番号:                                    */
/*                                                    */
/*      氏名:                                        */
/*                                                    */
/* ************************************************** */
/*                                                    */
/*      この行以降に解答のプログラムを書くこと        */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
	srand((unsigned) time(NULL));

	int m, n, p, q, i, pro=0, div=0;
    
	m = rand() % 90 + 10;
	n = rand() % 90 + 10;
	p = rand() % 90 + 10;
	q = rand() % 900 + 100;
	
	printf("My student number: s114099\n\n");
	printf("m=%d, n=%d, m*n=", m, n);
    
	for(i=1; i<=n; i++)
		pro += m;
    
	printf("%d\n", pro);
	printf("p=%d, q=%d, q/p=", p, q);
    
	for(; q>=p; ){
		q -= p;
		div++;
	}
  	
	printf("%d\n\n", div);
	printf("--------------------------------------\n\n");
  	
	return(0);
}


Back