誰か教えていただけませんか?(多倍長数の計算など)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ひろゆき

誰か教えていただけませんか?(多倍長数の計算など)

#1

投稿記事 by ひろゆき » 14年前

課題6のソースコード以外は先生に聞いたり、先輩に聞いたりしてここにはこうしたらいいと言ってもらってここにはこうゆうのん入れたらいいからと言われて少しかけましたが、全然先に進まないんです。
教えていただけませんか?
たとえば、課題1の(ア)や(イ)みたいに先生に聞いたことを入れないといけないんですけどわからないんです。
おねがいします。
課題1
多倍長数aを多倍長数bにコピーし、bの内容を表示するプログラムをかけ。
ソースコード
#include<stdio.h>
#define KETA 12
int main(void){
/*整数8421065536の多倍長数表現*/
int a[KETA] = {0, 0, 8, 4, 2, 1, 0, 6, 5, 5, 3, 6};
int b[KETA];
int i;

/*多倍長数aを多倍長数bにコピーする*/
(ア)
/*配列bの内容を表示する*/
printf("b = ");
(イ)
return 0;
}

実行結果
b = 008421065536

課題2
キーボードから多倍長数aの内容を入力し、その値を先頭の0を省略したプログラムをかけ。
ソースコード
#include<stdio.h>
#define KETA 12 /*多倍長数の桁数*/
int main(void){

int a[KETA];
int i;

/*多倍長数aをキーボードから入力*/
printf("Input a: ");
for(i = 0; i < KETA; i++){
scanf("%d", &a);
}

/*多倍長数aを表示*/
(ア)


return 0;
}

実行結果
Input a: 1 2 3 4 5 6 7 8 9 0 1 2
a = 123456789012
実行結果
Input a: 0 0 0 0 0 0 0 6 5 5 3 6
a = 000000065536
実行結果
Input a: 0 0 0 0 0 0 0 0 0 0 0 0
a = 0

課題3
多倍長数aと多倍長数bを加算し、その結果を多倍長数cに格納するプログラムを作れ。
加算結果の桁数が多倍長数を表す配列要素数よりも大きくなる(オーバーフローする)場合の処理は考えないでよい。
ソースコード
#include<stdio.h>
#define KETA 12 /*多倍長数の桁数*/
int main(void){
int a[KETA] = {0, 0, 8, 4, 2, 1, 0, 6, 5, 5, 3, 6};
int b[KETA] = {0, 0, 8, 6, 4, 2, 0, 9, 7, 5, 3, 1};
int c[KETA];

/*必要な変数があれば適宣宣言しなさい*/

/*多倍長数(c) <-- 多倍長数(a) + 多倍長数(b)*/
(ア)

/*cの内容を出力*/
課題2のプログラムを利用できる

return 0;
}

実行結果
c=17063163067

課題4
多倍長数aと多倍長数bを減算し、その結果を多倍長数aに格納するプログラムを作れ。
bがaよりも大きくなる、すなわち、減算結果が負になるような場合の処理は考えなくてよい。
計算結果を別の配列に格納するのではなく、減算に使用した配列aの内容を更新することに注意しましょう。
ソースコード
#include<stdio.h>
#define KETA 12 /*多倍長数の桁数*/
int main(void){
int a[KETA] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0};
int b[KETA] = {0, 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};

/*必要な変数があれば適宣宣言しなさい*/

/*多倍長数(c) <-- 多倍長数(a) - 多倍長数(b)*/
(ア)
/*aの内容を出力*/
課題2のプログラムを利用できる

return 0;
}

実行結果
a = 2469135690

課題5
多倍長数で表現した整数aとint型で表現した整数xを乗算し、その結果をaに格納するプログラムを作れ。
#include<stdio.h>
#define KETA 12 /*多倍長数の桁数*/
int main(void){
int a[KETA] = { 0, 0, 0, 0, 0, 0, 0, 6, 5, 5, 3, 6};
int x = 35;
/*必要な変数があれば適宣宣言しなさい*/

/*多倍長数(c) <-- 多倍長数(a) * int型(x)*/
(ア)

/*aの内容を出力*/
課題2のプログラムを利用できる

return 0;
}

実行結果
a = 2293760

課題6
多倍長数を用いて1から50までの各整数の階乗を計算し、正しい値を表示するプログラムを作れ。
注意
50の階乗を表現するためには、少なくとも65桁の整数を格納できる多倍長数を用いなければならない。

実行結果
1! = 1
2! = 2
3! = 6


50! = 30414093201713378043612608166064768844377641568960512000000000000

課題7
多倍長数で表現した整数aとint型で表現した整数xで除算し、その結果をaに格納するプログラムを作れ。
aがxで割り切れない場合に生じるあまりは使用せずに捨ててもよい。
除算の途中で現れる整数はint型で表現できる範囲であることを仮定してもよい。

ソースコード
#include<stdio.h>
#define KETA 12
int main(void){
int a[KETA] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1};
int x = 365;
/*必要な変数があれば適宣宣言しなさい*/

/*多倍長数(a) <-- 多倍長数(a) ÷ int型(x)*/
(ア)

/*多倍長数aを表示*/
課題2のプログラムを利用できる

return 0;
}

実行結果
a = 33823777. 画像

softya

Re:誰か教えていただけませんか?(多倍長数の計算など)

#2

投稿記事 by softya » 14年前

-mixC-側にも書きましたが、利用規約をお守り下さい。
マルチポストと名前の変更が重大な規約違反で、その他にも問題があります。

softya

Re:誰か教えていただけませんか?(多倍長数の計算など)

#3

投稿記事 by softya » 14年前

ともかく課題1から片付けましょう。
規約のテンプレートに則って再度質問してください。

ひろゆき

Re:誰か教えていただけませんか?(多倍長数の計算など)

#4

投稿記事 by ひろゆき » 14年前

課題1の(ア)はaをbに代入したらいいでけですよね?それともfor
分を用いてiからKETA-1までのやつ出したほうがいいんでしょうか?

/*多倍長数aを多倍長数bにコピーする*/
a[KETA]=b[KETA];
/*配列bの内容を表示する*/
printf("b = ");
(イ)
return 0;
}

実行結果
b = 008421065536

softya

Re:誰か教えていただけませんか?(多倍長数の計算など)

#5

投稿記事 by softya » 14年前

何度も書いてますが規約を読んで、テンプレートを使ってください。
  1. 自分は今何がしたくて
  2. どう取り組んで(作ったプログラムはどれで
  3. どのようなエラーやトラブルで困っていて
  4. 自分は何が解らないのか、知りたいのか
  5. 今のCの知識はどの程度なのか
(ア)と(イ)を埋めるのが課題1ではないのしょうか?
プログラムも省略しないでくださいね。

それと、配列についての理解がされていない様に思えますので、習ったはずのC言語のレベルと理解できる事を書いてください。a[KETA]=b[KETA]; はとんでもなくまずいです。
苦Cの第何章までわかりますか?
http://9cguide.appspot.com/

ひろゆき

Re:誰か教えていただけませんか?(多倍長数の計算など)

#6

投稿記事 by ひろゆき » 14年前

1. 自分は今何がしたくて
配列aの中にある内容を配列bに移しそれを表示したい。
2. どう取り組んで(作ったプログラムはどれで   
課題1
多倍長数aを多倍長数bにコピーし、bの内容を表示するプログラムをかけ。
ソースコード
#include<stdio.h>
#define KETA 12
int main(void){
/*整数8421065536の多倍長数表現*/
int a[KETA] = {0, 0, 8, 4, 2, 1, 0, 6, 5, 5, 3, 6};
int b[KETA];
int i;

/*多倍長数aを多倍長数bにコピーする*/
(ア)
/*配列bの内容を表示する*/
(イ)
return 0;
}
実行結果
b = 008421065536
と先生から言われて(イ)のところに配列bの内容を表示するとあったので
printf("b = ");
とだけ書きました。
4. 自分は何が解らないのか、知りたいのか
どのようにして多倍長数aを多倍長数bにコピーしたらいいのかです
KETA12とは箱が0から11まであるということだからそれをどうにかしてbに移したらいいはずなんですがそれがわからないんです。
5. 今のCの知識はどの程度なのか
C言語という授業で配列をしました。
挿入ソートや選択ソートまではやりました。

softya

Re:誰か教えていただけませんか?(多倍長数の計算など)

#7

投稿記事 by softya » 14年前

printf("b = "); はご自分で追加したのですね。

>C言語という授業で配列をしました。
>挿入ソートや選択ソートまではやりました。
であれば、a[KETA]が配列添え字外をアクセスするまずいプログラムであることは分かると思います。
配列は復数の要素があるのでforで処理しても良いですし、要素数分を一要素づつ代入文にしても良いです。でも、そもそも問題文で変数iが用意されているので使えってことだと思いますけどね。

ひろゆき

Re:誰か教えていただけませんか?(多倍長数の計算など)

#8

投稿記事 by ひろゆき » 14年前

>C言語という授業で配列をしました。
>挿入ソートや選択ソートまではやりました。
>であれば、a[KETA]が配列添え字外をアクセスするまずいプログラムであることは分かると思います。
>配列は復数の要素があるのでforで処理しても良いですし、要素数分を一要素づつ代入文にしても良いです。で>も、そもそも問題文で変数iが用意されているので使えってことだと思いますけどね
僕はtmpがあればtmp=a;a=b;b=tmpみたいにしたかったんですがtmpないし、ある変数だけでここはしないといけないみたいなんでfor文でしか無理だと思ったんですがfor文ではどうしたらいいかとおもいまして
配列ではたとえばa[x]={1,2,3,4,5,6,7,8,9,10}としたばあいは
printf("a: ");
for(i=0;i<x;i++){
printf("[%d]=%d ", i, a;
}
printf("\n")
上のやつで配列aの内容を出力できますよね
けど/*多倍長数aを多倍長数bにコピーする*/をどうしたらいいかわからないんです。
これを用いたら配列bの内容を表示できるはずなんですが。

パコネコ

Re:誰か教えていただけませんか?(多倍長数の計算など)

#9

投稿記事 by パコネコ » 14年前

for(i=0;i<x;i++){
printf("[%d]=%d ", i, a);
}

そこまでできていたらもうすぐですね。
同じ長さの配列ですから、対応するけた同士に代入してあげるべきですね。
printf()の部分を代入にするとコピーできますね
例:b[0]=a[0];

softya

Re:誰か教えていただけませんか?(多倍長数の計算など)

#10

投稿記事 by softya » 14年前

えーと、マルチポストですので規約違反です。
http://detail.chiebukuro.yahoo.co.jp/qa ... 1150545251
何度も書いているのに規約を読んでいると思えません。
私は回答を控えさせていただきます。

パコネコ

Re:誰か教えていただけませんか?(多倍長数の計算など)

#11

投稿記事 by パコネコ » 14年前

課題の4から質問してるところを見ると、
17時の時点で課題1~3はすでにできてたんですね。

面白そうな問題でしたけど…残念です。
(本人とも決まってませんが特に反論がなければ本人なんでしょうね…)

ひろゆき

Re:誰か教えていただけませんか?(多倍長数の計算など)

#12

投稿記事 by ひろゆき » 14年前

> Name: パコネコ ..熟練のプログラマー
> 課題の4から質問してるところを見ると、
> 17時の時点で課題1~3はすでにできてたんですね。
>
> 面白そうな問題でしたけど…残念です。
> (本人とも決まってませんが特に反論がなければ本人なんでしょうね…)
バイト行ってました。
すみません。
まだ課題1なんです。
配列ではたとえばa[x]={1,2,3,4,5,6,7,8,9,10}としたばあいは
printf("a: ");
for(i=0;i<x;i++){
printf("[%d]=%d ", i, a;
}
printf("\n")
上のやつで配列aの内容を出力できますよね
それを/*多倍長数aを多倍長数bにコピーする*/
なので配列aの中の内容をbに入れるやり方がわからないんです。
入れてからは上記の配列aの出力と同じようにしたら配列bの内容が表示ですると思うんですが。

たいちう

Re:誰か教えていただけませんか?(多倍長数の計算など)

#13

投稿記事 by たいちう » 14年前

> なので配列aの中の内容をbに入れるやり方がわからないんです。

配列aの先頭の要素を配列bの先頭に代入することはできますか?


たかぎ

Re:誰か教えていただけませんか?(多倍長数の計算など)

#15

投稿記事 by たかぎ » 14年前

最近外国人(または同じぐらい日本語が通じない方)の質問が多いですね。
質問テンプレートにある

・どの程度C言語を理解しているか

に加えて、

・どの程度日本語を理解しているか

という項目も増やした方がよさそうです。

softya

Re:誰か教えていただけませんか?(多倍長数の計算など)

#16

投稿記事 by softya » 14年前

>>たかぎさん
都合の悪いことは無視しているのか、それとも本当に目に入らないのか理解出来ないのか。
今まで回答してきた経験からすると、後者の可能性も捨てがたいです。

scottie

Re:誰か教えていただけませんか?(多倍長数の計算など)

#17

投稿記事 by scottie » 14年前

課題1の答えはこんな感じでよいと思います。
値をコピーするということで、配列bにaを代入しています。

(ア)の方はfor文の書き方と配列の添え字の使い方を理解すれば難なく解ける問題だと思います。
また、(イ)の方はprintf()関数の書き方に注意すれば解けます。

#include <stdio.h>

#define KETA 12

int main(void)
{
int a[KETA] = {0,0,8,4,2,1,0,6,5,5,3,6};
int b[KETA];
int i;

for(i=0; i<KETA; i++) {
b = a;
}
printf("b = ");
for(i=0; i<KETA; i++) {
printf("%d", b);
}

return 0;
}

ひろゆき

Re:誰か教えていただけませんか?(多倍長数の計算など)

#18

投稿記事 by ひろゆき » 14年前

scottie ..ぴよぴよ
ありがとうございます
課題1と課題6は終わりました。
もう少しチャレンジしてからわからなかったら書きます。

softya

Re:誰か教えていただけませんか?(多倍長数の計算など)

#19

投稿記事 by softya » 14年前

知恵袋の質問を回答ごと全部消したんですね。
http://my.chiebukuro.yahoo.co.jp/my/mys ... happy_0219
課題6はたぶん、知恵袋の回答者の物だと思いますので悲しい事です。


Dixq (管理人)

Re:誰か教えていただけませんか?(多倍長数の計算など)

#21

投稿記事 by Dixq (管理人) » 14年前

最近丸投げの質問や全く回答者の話を聞いてくれない人が多いですね・・。
他トピでも丸投げに対する回答はどうするべきかという話題が出ていましたので私なりの見解を述べます。

丸投げを禁止している理由の一つに、

「プログラムの楽しさを一人でも多くの人に伝えたい」

という気持ちでHPを作り始めたという事があります。
課題の丸投げをしている人はきっと

「プログラムなんて面白くないし自分じゃわかりっこない。自分の将来にプログラムなんて関係ない。学校で出されているから仕方なくやっているだけ。単位さえ取れたらいい」

そう思っている人が多いと思います。
「自分じゃ解けない」と思い込んでいる人に、細かく分解して順序立てて考えたら
案外容易になることを初め、「自分にも解けるんだ」という気持ちを伝えたいと思っています。
そこから次第にプログラムの楽しさを伝えられたらなお素晴らしいなと思っています。

「こんな丸投げをする人は丁寧に教えたって勉強しないよ」と思われるかもしれませんが、
私が大学1年の時はまさに上にあてはまる人物でした。
プログラムに全く魅力を感じないし、プログラムは自分には解らない物だと決めつけていました。
人の課題をほぼコピーしたり、単位さえ取れたらいいと思っていました。
当時ネットで質問したら、おそらく丸投げが悪い事すらわからず、問題になっているような質問をしていたかもしれません。
しかし、プログラムの楽しさを知ってから、180゜意識が変わりました。
きっと丸投げをしている人の中にプログラムの楽しさを理解して、熱中してくれる人がいると信じています。


また、丸投げをする人は答えのみを求めている人が多く、答えが得られたらトピックを放置してしまう人が多いことややり取りが非常に淡白になることが多いことがあります。
せっかく回答して下さった方に何のお礼もなく、用が済んだら居なくなるというのはさびしいですよね。
後、この場をなるべく単純な質問・回答、それだけの場にしたくないという気持ちもあります。


丸投げの質問に対して、どうお答えになるか、特に規約を設けておりませんので管理人の方針を書かせて頂きました。
ただし、丸投げに対して、回答者が答えのソースコードのみ書き、そのトピックがそれで終わるという掲示板にはしたくないなと思っています。


釣り師

Re:誰か教えていただけませんか?(多倍長数の計算など)

#23

投稿記事 by 釣り師 » 14年前

ひと通り見させてもらって思ったのですが

ひろゆきさん
回答してくださった方には一人ひとりに返答をしましょう。失礼です。
softyaさんがなんども忠告・注意をしてくださっているのにも関わらず、無視し続けるのは失礼です。
回答者さんたちは時間を割いてアドバイスをしてくださっているのですから、質問者としての礼儀をわきまえましょう。

パコネコ

Re:誰か教えていただけませんか?(多倍長数の計算など)

#24

投稿記事 by パコネコ » 14年前

そうですね・・・
規約違反を、少なくとも否定するか、
認めてちゃんとおしえてもらうぐらい、すべきでしょうね。

皆さんも勉強する気のある人を拒んだりはしないでしょうし…
(無視し続けるのは論外ですが。)

====
まぁ、私は偉そうなことを言える立場ではないのですが… 画像

ひろゆき

Re:誰か教えていただけませんか?(多倍長数の計算など)

#25

投稿記事 by ひろゆき » 14年前

いろいろご迷惑皆様におかけしました。
これからはご迷惑かけないように注意します。

たかぎ

Re:誰か教えていただけませんか?(多倍長数の計算など)

#26

投稿記事 by たかぎ » 14年前

> これからはご迷惑かけないように注意します。

このスレッドから改善すべきです。

閉鎖

“C言語何でも質問掲示板” へ戻る