C/C++の宿題を片付けます 75代目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/19(木) 20:39:01【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html
【前スレ】
C/C++の宿題を片付けます 74代目
http://pc8.2ch.net/test/read.cgi/tech/1158844912/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
0412デフォルトの名無しさん
2006/10/28(土) 11:21:400413デフォルトの名無しさん
2006/10/28(土) 11:25:52いろんなプログラムを見たり書いたりしてれば思いつく必要さえなくなるよ
> ただ宿題を頼む側としては、このまま出して大丈夫なのかなぁ?
そこまで真面目な人なら、
ロジックを追って自分なりに書き直してみるのもいいかもね
0414デフォルトの名無しさん
2006/10/28(土) 11:35:11こうゆうこと?
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *args[]){
FILE *fp;
int i, c;
if(argc <= 1)return EXIT_FAILURE ;
for(i=1; i<argc; i++){
if((fp = fopen(args[i], "r")) == NULL){
puts("ERROR");
return EXIT_FAILURE;
}
while((c=fgetc(fp)) !=EOF){
putchar(c);
}
fclose(fp);
puts("");
}
return EXIT_SUCCESS;
}
0415デフォルトの名無しさん
2006/10/28(土) 11:42:19#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
char cmd[FILENAME_MAX+10];
int i;
for(i=1;i<argc;i++)
{
sprintf(cmd, "type %s", argv[i]);
system(cmd);
}
return 0;
}
0416デフォルトの名無しさん
2006/10/28(土) 12:01:48[2] 問題文(含コード&リンク):0から99の乱数を使って6×6ビンゴの表を作成しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:BorlandC++
[3.3] 言語:C++
[4] 期限: 10月30日まで
[5] その他の制限:
よろしくお願いします。
0417cがわからない学生
2006/10/28(土) 12:03:11[2] 問題文(含コード&リンク):キーボードから1以上26 以下の整数n を入力し,n 番目のアルファベット(大文字)を画面表示
するプログラムを作成しなさい.例えば,「1」が入力された場合には「A」を,「10」が入力された
場合には「J」を画面に表示する.なお,0 以下,あるいは27 以上の数字が入力された場合に
は再入力できるようにすること.また,if やswitch を用いて26 種類の分岐を作ってはならない.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名:gcc
[3.3] 言語:C
[4] 期限:2006年10月31日まで
[5] その他の制限:なし?
0418cがわからない学生
2006/10/28(土) 12:04:420419デフォルトの名無しさん
2006/10/28(土) 12:10:17#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define BINGO_RAND 100
void swap(int *a, int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
int main(void){
int rand_data[BINGO_RAND];
int i, j;
srand(time(NULL));
for(i=0;i<BINGO_RAND;i++)
rand_data[i]=i;
for(i=0;i<BINGO_RAND;i++)
swap(&rand_data[i], &rand_data[rand()%BINGO_RAND]);
for(i=0;i<6;i++){
for(j=0;j<6;j++)
printf(" %2d", rand_data[i*6+j]);
printf("\n");
}
return 0;
}
0420デフォルトの名無しさん
2006/10/28(土) 12:13:54#include<stdio.h>
int main(void)
{
int n;
while(1)
{
printf("Input value (1-26):");
scanf("%d", &n);
if(n>=1 && n<=26)
break;
}
printf("%c\n", 'A'+(n-1));
return 0;
}
0422c不明な人
2006/10/28(土) 12:19:50[2] 問題文(含コード&リンク):キーボードから,「A」,「B」,「C」,「D」,「K」の5 種類のアルファベットを入力し,それぞれの入
力個数を数えて画面出力するプログラムを作成しなさい.なお,「Z」が入力されるまでキーボ
ード入力を繰り返すこととし,これら6 文字以外の入力はカウントしないようにしておくこと.
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 明後日まで
[5] その他の制限: なし
よろしくお願いします。
0423デフォルトの名無しさん
2006/10/28(土) 12:20:430-99 の範囲のままでおk
0424デフォルトの名無しさん
2006/10/28(土) 12:29:06#include<stdio.h>
#include<ctype.h>
int main(void)
{
char check_char[]="ABCDK";
int count[sizeof(check_char)-1]={};
int i;
int moji;
while(1)
{
moji=getchar();
moji=toupper(moji);
if(moji=='Z' || moji==EOF)
break;
for(i=0;check_char[i]!='\0';i++)
if(moji==check_char[i])
count[i]++;
}
for(i=0;check_char[i]!='\0';i++)
{
printf("%c : %d\n", check_char[i], count[i]);
}
return 0;
}
0425c不明な人
2006/10/28(土) 12:50:190426cがわからない学生
2006/10/28(土) 12:51:170427デフォルトの名無しさん
2006/10/28(土) 13:04:17[2] 問題文(含コード&リンク):
入力された値(1,2,3,9)と名前により線形リストを作成するものである。
値=1の時、名前を含むノードを線形リストの先頭に追加し、ポインタ sentoがそれを指し示す。
値=2の時、逆に線形リストの最後に追加し、ポインタ saigoがそれを指し示す。
値=3の時、現在の線形リストの状態を先頭から順に表示する。
値=9の時、リスト構築を終了する。
なお各ノードの格納場所として配列workが用意され、最初のノードは名前のみの入力により無条件に作成される。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2839.txt
ほとんど出来たんですが、case2 の場合がうまく動いてくれないので
その部分をどう直していいのかが分かりません…
コンパイラは通ってるんですけど、実行結果がうまい事いかないorz
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2006/10/29 PM02:00
[5] その他の制限: 構造体、ポインタを使用。
0428デフォルトの名無しさん
2006/10/28(土) 13:44:18work[n].next = &work[n];
は
saigo->next = &work[n];
の誤りだな。
0429デフォルトの名無しさん
2006/10/28(土) 13:51:07早速ありがとうございます
ちゃんとcase2が正常に動きました
構造体とポインタの部分が難しいです…
0430デフォルトの名無しさん
2006/10/28(土) 14:35:24[2]問題文:実行したファイル名を除いたコマンドライン引数に、複数個指定したすべてのファイルの内容を標準出力に表示するプログラムです。
#include <stdio.h>
int main(int argc, char *argv[]){
int c;
FILE *src;
FILE *dst;
if(argc != 3){
fprintf(stderr, "使い方: %s ファイル名 1 ファイル名 2\n", argv[0]);
fprintf(stderr, "ファイル名 1 をファイル名 2 に copy します。\n");
return 1;
}
src = fopen(argv[1], "r");
if(src == NULL){
perror(argv[1]);
return 1;
}
dst = fopen(argv[2], "w");
if(dst == NULL){
perror(argv[2]);
return 1;
}
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
fclose(dst);
return 0;
}
を参考につくるのですが。
[3]環境
[3.1]OS:Windows XP
[3.2]コンパイラ名とバージョン:gcc
0431デフォルトの名無しさん
2006/10/28(土) 14:52:49dst = stdin
for(i=1;i<argc;i++) {
src = fopen(argv[i], "r");
if(src == NULL)
continue;
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
}
0432デフォルトの名無しさん
2006/10/28(土) 14:53:48stdin -> stdout
0433デフォルトの名無しさん
2006/10/28(土) 15:04:32それをどこに入れたらよいのでしょうか?
0434デフォルトの名無しさん
2006/10/28(土) 15:15:35♂ -> ♀
キャッ
0435デフォルトの名無しさん
2006/10/28(土) 15:21:40dst = stdin
↓
dst = stdout
0436デフォルトの名無しさん
2006/10/28(土) 15:55:04dst = fopen(argv[2], "w");
if(dst == NULL){
perror(argv[2]);
return 1;
を、
dst = stdout
for(i=1;i<argc;i++) {
src = fopen(argv[i], "r");
if(src == NULL)
continue;
while((c = fgetc(src)) != EOF)
fputc(c, dst);
fclose(src);
}
に変えるだけですか?
0437デフォルトの名無しさん
2006/10/28(土) 16:02:23「セミコロンがないというエラーが出るんですがどうしたらいいですか?」
だな
0438416
2006/10/28(土) 16:27:51ありがとうございました。
0439デフォルトの名無しさん
2006/10/28(土) 17:16:160440デフォルトの名無しさん
2006/10/28(土) 17:45:36ない
0441デフォルトの名無しさん
2006/10/28(土) 18:42:590442デフォルトの名無しさん
2006/10/28(土) 19:36:240444デフォルトの名無しさん
2006/10/28(土) 19:47:12[2] 問題文(含コード&リンク):
多倍長整数を使うことによって、フィボナッチ数列の100番目までを
正しく計算するプログラムを作成しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] borland
[3.3] C言語
[4] 期限: 本日中
[5] その他の制限: 特に無し。
途中までは問題なかったのですが、
突然原因不明のエラーが出てくるようになってしまいました。
http://www-2ch.net:8080/up/download/1162032169809635.yw2OjQ
コンパイラは何の文句も言ってくれません。
助けてください。お願いします。
0445デフォルトの名無しさん
2006/10/28(土) 19:48:51[2] 問題文(含コード&リンク):入力された数値の総和を求めるプログラムを作成せよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC++ 6.0
[3.3] 言語: C++
[4] 期限: 2006年10月30日
[5] その他の制限:まだ習い始めて間もないです。
変数:総和、入力した数値
1. 総和を0とする。
2. 最初の数値を入力する。
3. 入力した値が-1でない限り以下の処理を繰り返す。
3.1. 入力した数値を総和に加算する。
3.2. 次の数値を入力する。
4. 総和を画面に表示する。
入力終了は値-1の入力によって検出する。
と言う方法でやるようにと言われてます。
お願いします。
0446デフォルトの名無しさん
2006/10/28(土) 19:58:14まずは main 関数内の head_a, head_b, head_t の領域を確保しましょう。
0447デフォルトの名無しさん
2006/10/28(土) 20:06:54at main ():
struct digitへのポインタだけ作って、実体が宣言されてないんだが。
head_a->next = head_a->prev = head_a;
でコケるぞ。
で、ロジックも何がしたいのか良く分からん。
head_aが二つ前の要素、head_bが一つ前の要素、head_tが現在の要素のように
見えるんだが、add()では全然そのような計算をしていない。
0448デフォルトの名無しさん
2006/10/28(土) 20:14:52どう途中まで問題ないんだよw
main始まってすぐ落ちてるじゃねーか
0449デフォルトの名無しさん
2006/10/28(土) 20:21:55int main (void) {
int sum; // 総和
int input; // 入力した数値
sum = 0;
printf ("入力された数の総和を表示します。\n");
printf ("入力を終了するときは、-1を入力してください。\n");
while (1) { // ずっと繰り返す
scanf ("%d", &input); // inputに値を入力
if (input == -1) break; // inputが-1のときループを抜ける
sum += input; // 総和にinputを足す
}
printf ("総和は %d です。\n", sum);
return 0;
}
0450デフォルトの名無しさん
2006/10/28(土) 20:22:370451444
2006/10/28(土) 20:30:58ありがとうございます!
最初で落ちなくなりました。
きっちり確保してあげなきゃいけないんですね…。
>>447
head_aが現在の要素、head_bが一つ前の要素、
head_tは退避用の一時リストのつもりです。
わかりにくいソースでごめんなさい。
解答ありがとうございました、助かりました。多謝です。
0452デフォルトの名無しさん
2006/10/28(土) 20:35:47449のはC言語じゃないんですか?
C++じゃないと怒られます。
0453デフォルトの名無しさん
2006/10/28(土) 20:54:34思いっきり勘違いしてました。ごめんなさい。C++だとこうなります。
---
#include <iostream>
using namespace std;
int main (void) {
int sum; // 総和
int input; // 入力した数値
sum = 0;
cout << "入力された数の総和を表示します。" << endl;
cout << "入力を終了するときは、-1を入力してください。" << endl;
cin >> input; //最初の数値を入力する
while (input != -1) { // inputが-1でない間繰り返す
sum += input; // 総和にinputを足す
cin >> input; // 次の数字を入力する
}
cout << "総和は " << sum << " です。" << endl;
return 0;
}
0454デフォルトの名無しさん
2006/10/28(土) 21:15:35多倍長整数の演算部分とフィボナッチ部分を分けた方が見やすいと思う
0455デフォルトの名無しさん
2006/10/28(土) 21:33:17どこのどなたかもわかりませんがホントにありがとうございます。
これからは、なるべく自力で出来るようにがんばります。
0456デフォルトの名無しさん ◆HOZlQYR1MY
2006/10/28(土) 21:58:33[2] 問題文(含コード&リンク):初期値 N を0とし、N←2*N+3で更新されるNを10回順に出力するプログラムをwhile文を利用して作成せよ。(漸化式N(i+1)=2*N(i)+3、初期値N(0)=0で表される数列のN(0)〜N(9)の値を順に出力するプログラムです。)作成したプログラムを提出せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2006/11/8
まだ1年なのでよく分からないのでよろしくお願いします。
0457デフォルトの名無しさん
2006/10/28(土) 22:05:26こんな授業とるなよw
0458デフォルトの名無しさん
2006/10/28(土) 22:06:35int i = 0;
while(i < 10) {
/* printf で好きなように出力 */
n = 2*n+3;
}
2年になったらもっとわからなくなるんでない?
0459デフォルトの名無しさん
2006/10/28(土) 22:28:25繰り返し計算をしててその結果を随時for文の中に
coutを入れて発散してないか(計算がおかしくないか)
見ているのですが、今一回一回改行する設定にしてて
DOS画面にバーッと下のほうに出てくるような感じになっているのですが、
これをDOS画面の一番最初の数字のところだけどんどん更新させる事はできないのでしょうか?
ご存知の方がおられましたら教えてください。よろしくお願いします。
0460デフォルトの名無しさん
2006/10/28(土) 22:30:46\r
0461デフォルトの名無しさん
2006/10/28(土) 22:38:23すみません・・・やっても使い方がわからず
ググっても"/r C++言語"などと調べても
中の人からいい検索結果が返ってきません。
申し訳ないんですがやりかたを書いていただけないでしょうか?
0462デフォルトの名無しさん
2006/10/28(土) 22:40:54と思ったらできました!!"¥"という字が文字化け?してたのか
/の左右逆さまの文字になっていて分かりませんでした。
改行と同じように使えばいいのですね!わかりました。ありがとうございました!
0463デフォルトの名無しさん
2006/10/28(土) 23:04:16ここに書いてあるアドバイスを参考に作ってみたのですがよくわかりません。
>>444の方のプログラムを具体的にどう直せばいいでしょうか・・・
プログラム初心者なのにこんな授業取ってしまって非常に困ってます
出来れば回答宜しくお願いします・・・
0464デフォルトの名無しさん
2006/10/28(土) 23:05:58そして半角スラッシュ( / )は別物。
0465デフォルトの名無しさん
2006/10/28(土) 23:15:01さすがに同じ授業とってる奴のとほとんど同じなのはまずいだろ
0466デフォルトの名無しさん
2006/10/28(土) 23:16:55一応変えられる所は出来る限り変えますので・・・
0467デフォルトの名無しさん
2006/10/28(土) 23:28:000468初心者
2006/10/28(土) 23:38:32他の.exeファイル実行できるようにどうすればいいですか??
0469デフォルトの名無しさん
2006/10/28(土) 23:41:16スレ違い
あと日本語でおk
0470デフォルトの名無しさん
2006/10/28(土) 23:52:09マルチは氏ね
0471カッパ
2006/10/29(日) 09:45:510472デフォルトの名無しさん
2006/10/29(日) 09:46:36[2] 問題文(含コード&リンク):
2と17と5の倍数を入力した時のみ
終了するプログラムを作りなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] borland
[3.3] C言語
[4] 期限: 10月30日の12時まで
[5] その他の制限: 特に無し。
よろしくお願いします。
0473デフォルトの名無しさん
2006/10/29(日) 09:55:16#include <stdio.h>
int main (void) {
int input;
/* ずっと繰り返す */
while (1) {
printf ("数値を入力してください。\n");
scanf ("%d", &input);
/* nの倍数 <=> nで割った余りが0 */
if (input % 2 == 0) break;
if (input % 5 == 0) break;
if (input % 17 == 0) break;
}
return 0;
}
0474デフォルトの名無しさん
2006/10/29(日) 10:46:42そんないいげんなソースよく公開できるな
匿名ならではw
0475デフォルトの名無しさん
2006/10/29(日) 11:04:53そんないいかげんな日本語(ry
0476デフォルトの名無しさん
2006/10/29(日) 11:09:57具体的箇所を示さずオナニーできるのが匿名ならでわなのだw
0477デフォルトの名無しさん
2006/10/29(日) 11:22:10全くエラー処理してねーじゃん
0478デフォルトの名無しさん
2006/10/29(日) 11:23:440479デフォルトの名無しさん
2006/10/29(日) 11:25:21具体的箇所(ry
0480デフォルトの名無しさん
2006/10/29(日) 11:30:29チャーなりキャラクターなり好きに呼べ
0481デフォルトの名無しさん
2006/10/29(日) 11:31:32[2]問題文:以下のプログラムを参考に、UNIXのgrepコマンド同様に1つ目の引数に示された文字列を持つ行を、2つ目の引数で示されたファイル内から抜き出して表示するプログラムを作ってください。
strlenght関数とstrinclude関数に関しては宣言だけで結構です。
int strinclude(char str1[], char str2[]){
int i, j;
int len1, len2;
len1 = strlength(str1);
len2 = strlength(str2);
if(len1 < len2)
return 0;
for(i = 0; i <= (len1 - len2); i++){
for(j = 0; j < len2; j++){
if(str1[i+j] != str2[j]){
break;
}
}
if(j == len2){
return 1;
}
}
return 0;
}
[3] 環境
[3.1] OS: WindowsXP
[3.2] gcc
[3.3] C言語
[4] 期限:本日中
よろしくお願いします。
0482デフォルトの名無しさん
2006/10/29(日) 11:38:420483デフォルトの名無しさん
2006/10/29(日) 11:58:25よし、じゃああえて標準関数で
>>481
/* 宣言だけで結構らしいので宣言だけする */
int strlenght(char[]);
int strinclude(char[],char[]);
#include<stdio.h>
#include<string.h>
int main(int argc,char**argv){
char*pattern;
char buf[1024];
int lineno;
if(argc <= 1)return 0;
pattern = argv[1];
if(argc > 2)freopen(argv[2],"r",stdin);
for(lineno=1;fgets(buf,sizeof buf,stdin);++lineno)
strstr(buf,pattern) && printf("%3d: %s",lineno,buf);
}
0484デフォルトの名無しさん
2006/10/29(日) 12:58:420485デフォルトの名無しさん
2006/10/29(日) 13:01:25>>473で問題ないよ
0486デフォルトの名無しさん
2006/10/29(日) 15:02:300487デフォルトの名無しさん
2006/10/29(日) 15:10:200488デフォルトの名無しさん
2006/10/29(日) 15:35:040489デフォルトの名無しさん
2006/10/29(日) 18:12:49main()
{
int *x;
*x=1;
printf("x=%o *x=%d\n",x,*x);
}
これを実行しろって問題なんだけど、コンパイルできませんでした。
なぜコンパイルできないのですか?
テンプレ無視ってスマソ
0490デフォルトの名無しさん
2006/10/29(日) 18:15:41return 0?
0491デフォルトの名無しさん
2006/10/29(日) 18:17:39こんなカンジかな。
#include <stdio.h>
int main(void)
{
int *x;
x=malloc(sizeof(int));
*x=1;
printf("x=%o *x=%d\n",x,*x);
free(x);
return 0;
}
0492デフォルトの名無しさん
2006/10/29(日) 18:21:46xがどこにも指定されてない。
#include<stdio.h>
int main()
{
int a=1;
int *x;
*x=a;
x=&a;
printf("x=%o *x=%d\n",x,*x);
return 0;
}
0493デフォルトの名無しさん
2006/10/29(日) 18:47:45俺の環境(gcc-4.1.1)ではコンパイルできた。
0494saga
2006/10/29(日) 19:21:26x=&a;
順番逆じゃない佐賀?
0495489
2006/10/29(日) 19:37:31どうなったんですか?
0496デフォルトの名無しさん
2006/10/29(日) 19:39:58セグメンテーション違反です (core dumped)
0497489
2006/10/29(日) 19:40:49それってどういう意味なんですか?
0498デフォルトの名無しさん
2006/10/29(日) 19:42:19プログラムが不正なメモリ操作をしたので強制終了、くらいの意味。
0499デフォルトの名無しさん
2006/10/29(日) 19:48:24*x=a;自体いらないんだぜ
0500デフォルトの名無しさん
2006/10/29(日) 19:55:34コンパイルエラーは?
まともなC89コンパイラなら通すはずだと思うんだが。
0501492
2006/10/29(日) 19:56:47#include<stdio.h>
int main()
{
int a=1;
int *x;
x=&a;
printf("x=%o *x=%d",x,*x);
return 0;
}
0502デフォルトの名無しさん
2006/10/29(日) 21:06:350503デフォルトの名無しさん
2006/10/29(日) 21:08:440504デフォルトの名無しさん
2006/10/29(日) 21:41:41普通は書き換える必要はありません。
0505デフォルトの名無しさん
2006/10/29(日) 21:41:50[2] 発生させた乱数の値に関して度数分布を求める関数を作る
関数 frequency( データ配列、データ配列の要素数、値の範囲、結果の配列、結果の配列の要素数)
とする。例えば、値の範囲が0〜100で、結果配列の要素数が20であれば、5刻みの区間で
その区間にある値をカウントする。つまり(0〜5、6〜10、11〜15.。。。。 96〜100)
のそれぞれの区間にあるデータの個数を結果として返す。
関数frequency内は、できるだけポインタを使ってきじゅつすること。以下雛形↓
#include <stdio.h>
int main( void )
{ int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%5d",f[n]); }
int frequency( int x[], int numx, int r, int f[], int numy)
{
}
int generate_dist( int x[], int num, int r)
{ int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3; } }
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C
[4] 期限: 10月31日
[5] その他の制限:特になし
0506デフォルトの名無しさん
2006/10/29(日) 22:26:17#include <stdio.h>
#include <stdlib.h>
void frequency( int x[], int numx, int r, int f[], int numy);
void generate_dist( int x[], int num, int r);
int main( void )
{
int n;
int x[1024], f[20];
generate_dist( x , 1024, 100);
for(n=0; n<1024; n++) printf("%5d\n",x[n]);
frequency( x , 1024 , 100, f , 20);
puts("");
for(n=0; n<20; n++) printf("%d: %5d\n",n, f[n]);
return 0;
}
0507デフォルトの名無しさん
2006/10/29(日) 22:26:54void frequency( int x[], int numx, int r, int f[], int numy)
{
int i;
double tick = (double)r/numy;
for (i = 0; i < numy; i++) f[i] = 0;
for (i = 0; i < numx; i++) {
int n;
n = x[i]/tick;
f[n]++;
}
}
void generate_dist( int x[], int num, int r)
{
int *p;
for (p=x; p != &x[num] ; p++ ) {
*p = rand() % (r+1);
*p += rand() % (r+1);
*p += rand() % (r+1);
*p /= 3;
}
}
0508デフォルトの名無しさん
2006/10/30(月) 01:07:34[2]
# 2つの自然数 a, b に対し, a と b の最大公約数を求める関数 int gcd(int a, int b) を作成せよ.
# 2つの自然数 a, b に対し, その公約数をすべて表示する関数 void print_cd(int , int) を作成せよ.
※ 「a と b の公約数」は「a と b の最大公約数の約数」なので, gcd(a,b) を呼び出して 2 数の最大公約数 g を求めてその全約数を表示すればよい. i = 2, 3, …, g について i が g を割り切るかどうかテストし, 割り切ればそれを表示するようにする.
# main から gcd と print_cd を呼び出し, キーボードから入力した自然数 a, b に対して, 最大公約数とすべての公約数とを表示するようにせよ (表示形式は任意).
[3]
[3.1] winXP sp2
[3.2] cygwin
[3.3] C
[4] 23時59分
[5] 途中までやったんで続きお願いします。最大公約数は出せました
0509508
2006/10/30(月) 01:08:49void gcdprint(int,int);
int gcd(int,int);
int main (void)
{
int a,b;
printf("a bを入力して下さい>>");
scanf("%d %d",&a,&b);
gcdprint(a,b);
return 0;
}
void gcdprint(int a,int b)/*最大公約数を印字する関数*/
{
printf("%d\tgcd\t%d\t=\t%d\n",a,b,gcd(a,b));
}
int gcd(int a,int b)/*最大公約数を計算する関数*/
{
int z;
while((z=a%b)!=0)/*aをbで割った余りをzに代入し*/
{/*zが0以外のあいだにループする*/
a=b;/*aにbを代入し*/
b=z;/*bに余りzを代入する*/
}
return b;/*bに余りzを代入する*/
}
これに埋めて下さい。よろしくお願いします
0510デフォルトの名無しさん
2006/10/30(月) 01:58:440511デフォルトの名無しさん
2006/10/30(月) 02:55:02{
int g, i;
g = gcd(a, b)
printf("%d\tgcd\t%d\t=\t%d\n",a,b,g);
for (i = 1; i < g; i++)
{
if (g & i == 0)
{
printf("%d\n", i);
}
}
}
■ このスレッドは過去ログ倉庫に格納されています