ぼるじょあがC/C++の宿題を片づけますYO! 47代目
1 :
ぼるじょあ ◆yBEncckFOU :
2005/07/05(火) 09:19:12 (・3・)アルェー C++房のぼるじょあですYO!
わからない宿題を片づけますYO!
――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:Windows/Linux/等々
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:どこまで習っているか、等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【前スレ】
C/C++の宿題を片付けます 46代目
http://pc8.2ch.net/test/read.cgi/tech/1119514274/ 【歴代スレは
>>2-13 】
2 :
デフォルトの名無しさん :2005/07/05(火) 09:20:27
3 :
デフォルトの名無しさん :2005/07/05(火) 09:20:47
4 :
デフォルトの名無しさん :2005/07/05(火) 09:21:17
5 :
デフォルトの名無しさん :2005/07/05(火) 09:22:29
6 :
デフォルトの名無しさん :2005/07/05(火) 10:34:49
[1] 授業単元:プログラミングb [2] 問題文(含コード&リンク): 縦と横の整数を入力して*を使って長方形を作成するプログラムです。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C ++ [4] 期限:日曜PM6:00まで [5] できれば簡単な感じでお願いします。
#include <iostream> int main() { using namespace std; int width, height; cout << "縦 = "; cin >> height; cout << "横 = "; cin >> width; for ( int y = 0; y < height; y ++ ) { for ( int x = 0; x < width; x ++ ) cout << "*"; cout << endl; } return 0; }
8 :
7 :2005/07/05(火) 10:43:19
しまった。*は全角にすべきだったか?
9 :
デフォルトの名無しさん :2005/07/05(火) 12:24:52
10 :
6 :2005/07/05(火) 13:21:45
>>7 すいませんありがとうございます。
stuido.hから始まるやつでお願いします
>>10 stdio.hね。
そういうのはC++ではなくCと書いてくれたほうがわかりやすかった。
#include <stdio.h>
int main()
{
int width, height, x, y;
printf( "縦 = " );
scanf( "%d", & height );
printf( "横 = " );
scanf( "%d", & width );
for ( y = 0; y < height; y ++ )
{
for ( x = 0; x < width; x ++ )
printf( "*" );
printf( "\n" );
}
return 0;
}
12 :
6 :2005/07/05(火) 13:41:05
>>11 ほんとにすいません。
ありがとうございます、
13 :
906 :2005/07/05(火) 13:56:30
以下のプログラムの解説をお願いします。 C言語で、do whileを使った10進数→2進数変換プログラムです。 どの部分がどのような機能を果たしているかが本を読んでも理解できなかったので… よろしくお願いします。 #include <stdio.h> char* to_2(unsigned x, char* s) { int index = 0, left = 0; char temp; do { s[index++] = x % 2 + '0'; x = x / 2; } while (x != 0); s[index--] = '\0'; while (left < index) { temp = s[left]; s[left] = s[index]; s[index] = temp; ++left; --index; } return s; } int main(void) { unsigned x; char s[256]; printf("Enter Number:"); scanf("%u", &x); printf("%u = %s", x, to_2(x, s)); }
14 :
デフォルトの名無しさん :2005/07/05(火) 14:05:16
[1] 授業単元:プログラミングb [2] 問題文(含コード&リンク): @4個の入力された整数に対し、最大値を表示するプログラム。 AN個の入力された整数に対し、最大値を表示するプログラム。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C [4] 期限:日曜PM6:00まで [5] できれば簡単な感じでお願いします。
>>13 仮に入力が10
最初のループ-こんな書き方だっけ
x x%2
10
5 | 0
2 | 1
_____|
1 0
xは0で終了だけど、そこは余計なのでぬるもじで上書き
おせっかいに
s[index--]='\0'は
s[index]='\0'
index--
という意味
結果s[] = "0101\0"
次のループ-配列を反転
結果s[] = "1010\0"
>>14 あなたは
>>6 の人?
int main()
{
int input, i , N, max;
printf( "N = 4\n" );
for ( i = 0; i < 4; i ++ )
{
printf( "%d個目の整数: ", i + 1 );
scanf( "%d", & input );
if ( i == 0 || max < input )
max = input;
}
printf( "最大値は、%d\n", max );
printf( "\nN = " );
scanf( "%d", & N );
面倒くさくなってきた。
あとは似たようなこと書くだけだし自分でやってミソ。
17 :
6 14 :2005/07/05(火) 15:10:22
>>16 2回もすいません。
ほんとに助かりました、ありがとうございました。
18 :
デフォルトの名無しさん :2005/07/05(火) 15:10:48
このスレッドが適切ではないかもしれませんが適切なスレッドが 分からなかったのでここで質問させて頂きます。 linux で名前付き pipe を使って通信をしております。 送信側は mkfifo で FIFO を作成し、binary data を write 文で送信し、 送信が終わったら作成した FIFOを消して終了しています。 受信側は read 文でデータを読んでいるのですが、伝送が終了した 事を知る方法が分からなく、永遠に終了しないため困っております。 受信側が伝送の終了を知るための良い方法をご存知の方がいらっしゃいましたら ぜひご教授下さい。どうぞよろしくお願い致します m(__)m
>>18 方法は色々あるが、
・パケット長を固定にする。
・パケット開始コード、終了コードを用意する。(一般的にSTX、ETX)
・送信総データ長を最初に送る。
・タイムアウトを利用する。
20 :
デフォルトの名無しさん :2005/07/05(火) 15:29:04
早速どうもありがとうございます m(__)m >・パケット長を固定にする。 私の例ではランダムな長さのデータを断続的に送る必要があり難しそうです。。 >・パケット開始コード、終了コードを用意する。(一般的にSTX、ETX) バイナリデータなので。。 >・送信総データ長を最初に送る。 データ長も不定なので困っております。 >・タイムアウトを利用する。 とりあえず、今回はこれを使ってみようと思います。 どうやらTCP/IP 通信のようにコネクションを切るという概念はないのですね。 (FIFO のファイルを送信側で消去したら通信終了が可能なのかと思っておりました。) 色々なアイデアをご教授いただき大変参考になりました。 どうもありがとうございました。
送信側がcloseして、受信側が全部読み取った状態で更にreadすれば、0が返るはずだけど。
22 :
デフォルトの名無しさん :2005/07/05(火) 15:39:00
>>21 うまくいきました。。。。
お恥ずかしい限りです。大変助かりました。
どうもありがとうございました m(__)m m(__)m m(__)m
次スレいってたんですね。 [1]授業単元:プログラミング中級 [2]問題文:1000以下の素数で、足しあわせると1000になるような二つの素数の組をすべて求めるプログラムを作れ [3]環境 [3.1]OS:UNIX [3.2]コンパイラ:gcc [3.3]言語:C [4]期限:7/8 [5]制限特に無し よろしくお願いします!
>>23 #include <stdio.h>
int main(void)
{
char sieve[1001] = {1,1,};
int l, r;
int i;
for (i = 0; i * i <= sizeof(sieve); i++) {
int j;
if (sieve[i])
continue;
for (j = i + i; j < sizeof(sieve); j += i) {
sieve[j] = 1;
}
}
for (l = 0, r = 1000; l <= r; l++, r--) {
if (sieve[l] == 0 && sieve[r] == 0) {
printf("%d, %d\n", l, r);
}
}
return 0;
}
ありがとうございます! これは仕様説明しろと言われたらどういう感じに言えばいいですかね?
仕様:足しあわせると1000になるような二つの素数の組をすべて求める i * i <= sizeof(sieve) は i * i < sizeof(sieve) でいい。
>> char sieve[1001] = {1,1,}; この書き方って残り 0 で埋められるって C言語 の仕様によって保証されているものなの?
>>27 JIS X3010 96ページの12行目
JIS の規格の観覧って検索が出来ないのがネックだよな…
ああすいません、仕様というか「ここでこれを宣言して、ここでこういう条件を指定して…」みたいなコメントが欲しいのでした。お願いできますか?m(_ _)m
>>31 索引のところにページ数書いてくれると大分助かるんだけどな
俺は索引読んで目次見て探してる…て普通か
>>32 誰だよお前、ていうかお願いできません
34 :
デフォルトの名無しさん :2005/07/05(火) 17:13:50
[1] 授業単元:情報処理演習
[2] 問題文:閉路電流法の行列解法で直流電気回路を計算するプログラムを作成すること
長くなるから詳しくはここ↓(大学がどこだかバレバレw
http://home.kanto-gakuin.ac.jp/~fei/Teaching/IP/ip10-ex.pdf [3] 環境
[3.1] OS:FedoraCore
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005年07月19日17時まで
[5] その他の制限:特にありません。もう手も足も出ませんorz
これで卒業できるかどうか決まるんでお願いいたしますm(__)m
ご丁寧に手順まで書いてあるのに無理なの?
36 :
デフォルトの名無しさん :2005/07/05(火) 18:52:56
留年決定。
私新参者でわからないけど、前スレの人達ってここ読んでいるのかなぁ……
[1]授業単元:プログラミング [2]問題文:二つの整数の最大公約数を再帰を使って求めよ [3]環境 [3.1]OS:LINUX [3.2]コンパイラ:gcc [3.3]言語:C [4]期限:7/10 よろしくお願いします
39 :
>>38 :2005/07/05(火) 20:13:38
#include <stdio.h> #include <stdlib.h> int gcd(int m, int n) { if ((m % n) == 0) { return n; } else { return gcd(n, (m % n)); } } int main(int argc, char **argv) { int num1 = 12; int num2 = 8; printf("gcd(%d,%d) = %d\n", num1, num2, gcd(num1, num2)); return 0; }
>>38 エラーチェックは無し
#include <stdio.h>
int main(void)
{
int x, y;
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
while (printf("2整数を入力してください\n"), scanf("%i%i", &x, &y) == 2) {
printf("最大公約数は %d\n", gcd(x, y));
}
return 0;
}
41 :
デフォルトの名無しさん :2005/07/05(火) 21:16:11
43 :
デフォルトの名無しさん :2005/07/05(火) 21:32:52
[1] 授業単元: 情報科学
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/667.txt マージソートをするプログラムなのですが、ソートする要素数nを256より大きい値で入力すると
Segmentation fault(core dumped)になってしまいます。5万個ぐらいはソートできるように
このソースコードの改良をお願いします。
[3] 環境
[3.1] OS:Windows/Linux/等々 Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 7月6日まで
[1] 授業単元:プログラミング [2] 問題文:配列dtを関数に引数としてわたす。 関数部では平均値と分散と標準偏差を計算し、 平均値はreturn分を用いて、分散、標準偏差はポインタを用いてmain()文に 値を渡し、main()文では結果を画面に表示するプログラムを作成せよ [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:無期限 [5] その他の制限:ポインタ関数を使う どなたかおねがいします。
>>43 Linux で試したら50000でも動作した。
46 :
デフォルトの名無しさん :2005/07/05(火) 21:49:32
>>45 本当ですか?僕はWindowsなんですが、何が悪いんでしょうか。
コンパイラの性能とか?
OSの性能
48 :
デフォルトの名無しさん :2005/07/05(火) 21:52:34
Windows XPの間違いでした。
int mid, i, j, k,temp[MAX_DATA]; 領域が足りなくなってるんだと思うよ。 自動変数は呼び出しごとに別の実体が作られるから。 配列を静的変数にする static int temp[MAX_DATA]; でどうだ?
50 :
デフォルトの名無しさん :2005/07/05(火) 21:58:00
>>49 できました!
どうもありがとうございます。
>>44 #include <stdio.h>
#include <math.h>
double calc(const double dt[], const size_t size,
double *decent, double *deflect)
{
double sum = 0, ave, dec = 0;
int i = 0;
for(i = 0; i< size; ++i) sum += dt[i];
ave = sum / (double)i;
for(i = 0; i< size; ++i) dec += (ave - dt[i]) * (ave - dt[i]);
if( decent != NULL ) *decent = dec;
if( deflect != NULL ) *deflect = sqrt(dec);
return ave;
}
int main()
{
double dt[] = {1.0, 3.2, 8.8, 10.9, 22.2, 5.4};
double ave, dec, def;
ave = calc(dt, sizeof(dt)/sizeof(dt[0]), &dec, &def);
printf("平均 : %.5f\n", ave);
printf("分散 : %.5f\n", dec);
printf("偏差 : %.5f\n", def);
return 0;
}
>>51 ありがとうございます。
if( decent != NULL ) *decent = dec;
if( deflect != NULL ) *deflect = sqrt(dec);
の部分なんですけど、他にやり方ないですか??
*decent = dec;
*deflect = sqrt(dec);
ってしたのですが、分散と偏差が表示されなくて・・・
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 1から1000の間に存在する9の倍数を表示 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5 [3.3] 言語:C++ [4] 期限:7月6日の朝頃 [5] 単純な文で作れるはずなんだけど自分の頭だとうまくまとまらないです。help。
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):イギリスの国旗を画面に表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限: [5] その他の制限: どなたかお願いしますm(__)m
>>53 #include <iostream>
int main()
{
int i;
for (i = 9; i <= 1000; i += 9)
{
std::cout << i << std::endl;
}
return 0;
}
61 :
ななすぃ :2005/07/06(水) 11:51:28
[1] 授業単元:プログラミングC言語 [2] 問題文(含コード&リンク):配列のデータ構造を実現するプログラムを 数パターン作成する ・データの挿入、削除、表示が可能であること。 ・配列に代入するデータは整数型とする。 ・プログラムの仕様(関数への入出力、表示方法など)は自由とする [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5 [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 期限:7月9日昼まで [5] その他の制限: まだC言語始めて一ヶ月なんですけど宿題が出てしまい 初心者な自分には力不足でわかりません。できるだけ早くお願いします。それ とよろしければ簡単な注釈も書いていただければうれしいです。
62 :
デフォルトの名無しさん :2005/07/06(水) 11:56:31
前スレの644なんですが、コンパイル通りませんでした。 どうか、他のやり方を教えてください。お願いします。
>>62 どれをどうコンパイルしたらどう通らなかったのか?
それとも、口の利き方から手取り足取り教えないといけないのか?
だがしかしもう質問の仕方を指摘する親切っぷり
ここで質問しなきゃ生きていけないなりの頭脳なのかと思わせるな。
66 :
デフォルトの名無しさん :2005/07/06(水) 12:32:22
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):自分の名前を指定した回数だけ表示するプログラム namae.cを作成せよ。 例えば次のような形。何回表示しますか?: 10 (1)名前 (2)名前 (途中省略) (10)名前 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:今日中 [5] ほぼ初心者
67 :
ぼるじょあ ◆yBEncckFOU :2005/07/06(水) 12:49:02
>>66 #include <stdio.h>
#define NAMAE "北大路魯山人"
/* ↑自分の名前 */
int main()
{
int i,n;
printf("何回表示しますか?: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("(%d)%s\n",i,NAMAE);
return 0;
}
>>54 どなたかおねがいします。
簡易グラフィック関数を用いてらしいのですが
[1] 授業単元:情報基礎 [2] 問題文(含コード&リンク):二つの行列の要素をキーボードから読み込み、それらの行列の和を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):VC++6.0 [3.3] 言語:C++ [4] 期限:7日木曜0時まで [5] その他の制限: *表示例* 行列Aを入力してください 0 1 2 10 11 12 20 21 22 行列Bを入力してください 100 200 300 200 300 400 300 400 500 0.00 1.00 2.00 100.00 200.00 300.00 100.00 201.00 302.00 10.00 11.00 12.00 200.00 300.00 400.00 210.00 311.00 412.00 20.00 21.00 22.00 300.00 400.00 500.00 320.00 421.00 522.00
70 :
前スレ988 :2005/07/06(水) 13:38:39
>>前スレ996 ありがとうございます。とても助かりました。
>>68 これじゃだめ?
#include <stdio.h>
int main(void){
char *england[]={"■□□■□□■",
"□■□■□■□",
"□□■■■□□",
"■■■■■■■",
"□□■■■□□",
"□■□■□■□",
"■□□■□□■",
NULL};
int i;
for(i=0;england[i]!=NULL;i++)printf("%s\n",england[i]);
}
72 :
前スレ441 :2005/07/06(水) 13:43:53
ホントにありがとうございます。マジ神降臨ですよ〜。とりあえずこれからいりいろ チェックしてみます。
>>68 >簡易グラフィック関数を用いてらしいのですが
それの仕様を提示せよ。
まさかprintfでAAを書けなんて課題はだs
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): typedefによる構造体型CPLXを使い複素数の絶対値を関数とする関数定義 double AbsComplex(CPLX x);と2つの複素数の積を関数値とする関数定義 CPLX ProdComplex(CPLX a,CPLX b); を使い計算するプログラムを作成せよ [3] [3.1] Linux [3.2] コンパイラ:gcc [3.3]C [4]明後日まで [5] その他の制限:構造体は始めたばかりです よろしくお願いします
76 :
名無しさん :2005/07/06(水) 14:25:07
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): 2のn乗-2がnで割り切れるかどうか? 割り切れた時その数はに素数であるか? という問題です。nは自然数です。お願いします。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):MSVC++6.0 [3.3] 言語:C++ [4] 期限:2005年07月07日23:59まで [5] その他の制限:初心者です。
>>75 typedef struct {
double real;
double image;
} CPLX;
double AbsComplex(CPLX x) {
return sqrt(x.real * x.real + x.image * x.image);
}
CPLX ProdComplex(CPLX a, CPLX b) {
CPLX x;
x.real = a.real * b.real - a.image * b.image;
x.image = a.image * b.real + a.real * b.image;
return x;
}
78 :
超初心者ゴン :2005/07/06(水) 14:43:36
初めてのカキコですがよろしくお願いします。 問題なんですけど、文字列を反転させることなんですけど 関数をを使わないで自作関数で処理しなきゃならないんですけど、 char szStr[]="ABCDEFG" //反転元文字列 int i=0;//インクリメント用 int len=0;//文字の長さ用 char tmp; //一時格納用(一文字分のみで反転) ・ void rstrrrev(char* szStr) ・ ・(各変数の宣言) ・ while(pszStr[len]!='\0') { len++; } len--; for(i=0;i<(len/2);i++) { tmp = *(pszStr+i); *(pszStr+i) = *(pszStr+(len-i)); *(pszStr+(len-i)) = tmp; } } これで反転するんですけど...例えば文字が"ABCDEFGH"まであったとするとDEが入れ替わらないんですけどどう直せばよろしいでしょうか?よろしくお願いします。
80 :
超初心者ゴン :2005/07/06(水) 14:45:44
見にくくてすみません・・
len が奇数のときと偶数のときとでの、カウント数を整理すべし。
82 :
超初心者ゴン :2005/07/06(水) 14:50:24
すみません反転の条件はこう書いてました。 for(i = 0; i < (len/2); i++)
>問題なんですけど、文字列を反転させることなんですけど >関数をを使わないで自作関数で処理しなきゃならないんですけど、 これだけ読んで、それ以上読む気をなくした。
84 :
超初心者ゴン :2005/07/06(水) 14:57:13
86 :
超初心者ゴン :2005/07/06(水) 15:00:38
わからないから聞いてるんですけど!
len--; って必要か?
>>73 #include<eglib.h>
void Graphmain(void)
{
int color;
color=EG_RGB(0,0,255);
EG_text("Hello#,10,15,color);
}
みたいな感じらしいのですが
89 :
デフォルトの名無しさん :2005/07/06(水) 15:06:57
前スレからの課題です、すいません、期限今日の5時までですが、期限切れてもいいのでどなたかお願いします>< [1]C言語演習 [2]Gccコンパイラ [3]期限 7月6日水 [4]環境RedHat Linux 問題 メニュー表示をし,ステップ「1」として,関数y = 2x2において,x = 0 – 10 ま でを0.01 刻みで1001 個のx,yデータセットを作成して,ファイル名function.datで各自のホ ームディレクトリ(または,カレントディレクトリ)にバイナリ形式で保存する.ステ ップ「2」として,作成したfunction.datからn個目のx,yデータセットを抽出して,ファイ ル名n_xy_ascii.dat(nは入力した数字)としてASCII形式で保存する.以上の様に動作す るプログラムを作成しなさい 前スレで突っ込まれたメニュー部の提示ですが。。。 「1」メニュー選択時に1、2以外の数字が入力されたときには再入力させるようにしなさい、またnの値は入力する仕様とすること。 「2」ファイル名等をあつかうときには数字と文字列を組み合わせて文字列を変換したい場合やその逆を行いたい場合はsscanf,sprintf等を使うと簡単です、もちろん他にもあります。 こんなかんじだとおもいます。。。 おねがいします><
91 :
超初心者ゴン :2005/07/06(水) 15:09:50
len--をなくすと文字列が表示されないんですけど・・
92 :
83 :2005/07/06(水) 15:11:08
>>84 わずかそれだけの文章中に「ですけど」が3回、おまけに「をを」という間違いも。
文章を書くのに頭を使わない(or見直しをしない)ような馬鹿の宿題なんてやる気にもならん。
必死な言い訳はスレタイ読んでからにしましょうね
94 :
73 :2005/07/06(水) 15:13:53
>>88 それでどうやって、国旗を描画するのかね?
線分描画関数がなければ描画できないということくらい理解できないのか?
95 :
超初心者ゴン :2005/07/06(水) 15:14:04
誰かお願いします!
len--;を消して *(pszStr+i) = *(pszStr+(len-1-i)); *(pszStr+(len-1-i)) = tmp; こうしろ
>>93 馬鹿?
>>91 lenを求めた段階で、その値がいくつになっているかを確認せよ。
98 :
85 :2005/07/06(水) 15:16:04
>>76 #include <stdio.h>
int isPrime(unsigned int n) {
unsigned int i;
for (i = 2; i < (unsigned int)sqrt(n); i ++) {
if ((n % i) == 0) {
return 0;
}
}
return 1;
}
int main(int argc, char **argv) {
int i;
unsigned int num;
for (i = 1; i < 32; i++) {
num = (1 << i) - 2;
if ((num % i) == 0 && isPrime(num) == 1) {
printf("%d\n", num);
}
}
return 0;
}
100 :
超初心者ゴン :2005/07/06(水) 15:24:07
>>88 これでOk?
#include<eglib.h>
void Graphmain(void){
int color;
char *england[]={
"■□□■□□■",
"□■□■□■□",
"□□■■■□□",
"■■■■■■■",
"□□■■■□□",
"□■□■□■□",
"■□□■□□■",
NULL};
int i;
color=EG_RGB(0,0,255);
for(i=0;england[i]!=NULL;i++)EG_text(england[i],10,15+i,color);
}
■■□□□□□■■□□□□□■■ □■■□□□□■■□□□□■■□ □□■■□□□■■□□□■■□□ □□□■■□□■■□□■■□□□ □□□□■■□■■□■■□□□□ ■■■■■■■■■■■■■■■■ ■■■■■■■■■■■■■■■■ □□□□■■□■■□■■□□□□ □□□■■□□■■□□■■□□□ □□■■□□□■■□□□■■□□ □■■□□□□■■□□□□■■□ ■■□□□□□■■□□□□□■■
前スレの978、981です。
レスを貰ったのですが、関数を使わないという条件を書き忘れていたため
もう一度お願いしたいです。
[1] 授業単元:プログラミング(C言語)
[2] 問題文(含コード&リンク):
下記のような整数型配列において、以下の処理を行うプログラムの作成。
処理を行った後、配列の内容を出力する
#define YOUSO 10
int a[YOUSO] = {2,4,6,8,10,12,14,16,18,20} ;
int b[YOUSO] = {3,6,9,12,15,18,21,24,27,30} ;
(1)配列aの要素をすべて配列bに転送する
(2)b=a+bを配列内の要素毎に行う
(3)配列aの配列内順序を逆にして、配列bに転送する
(4)配列aと配列bの各要素を交換する
以上の処理を1つのプログラムで行うものを作れ、とのことです
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/
[4] 期限:7月8日まで
[5] その他の制限:どこまで習っているか、等々
配列処理までです 関数、ポインタはまだ習っていません。
もうなにがなんだかわけわからなくなってだめぽ、状態です
ほとんど丸投げで申し訳ないですがどうぞ力を貸してください
ちなみにそのレスの内容は
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/674.c でした。
>>88 そのライブラリは標準ではないのでしっかりと仕様を出さないと対応のしようがない。
一応、ピクセルが打てる関数さえあればなんとか描けると思うよ。
>>104 それだとbを初期化する意味が無いのだがいいのか?
107 :
66 :2005/07/06(水) 16:44:13
失礼しました、前スレの647をコンパイルしたんですが、 エラーが出ました。ので、ほかのやり方を教えていただきたいのですが
>>104 そのソースの関数内の処理を全部main()にぶちまけりゃいいじゃん。
>>107 前スレ647って10進→2進のやつか?どんなエラーが出たのか書かないとどうしようもないぞ
>>104 作ろうと思ったが作ってても面白くないのでのでやめた。
>>108 が言ってるように関数を展開すれば求めるものができるはずだ。
>>106 えーっと、確か他に配列を作っておいてそこに転送させるとかなんとか言ってたので、
そうすることによってちゃんと成立させるのだと思うんですが・・・。
>>108 ちょっとやり方がわかんないんですが・・・どっか他のスレでやりかた聞いてきて
自分で直した方がいいんですかね・・
>>112 104の書き方だと折角初期化したbにaを転送して上書きしちゃってる
とりあえず問題をちゃんと整理してから出直してこい
114 :
66 :2005/07/06(水) 17:07:12
>>109 失礼しました、実は、コンパイルは通ったんですが、
問題文の意図とは、離れてるものでした、自分で入れた、数値を二進数に
変換するプログラムです。
失礼しました、文章角能力があまり発達してないもので(^^;
>>114 int main(void) {
int i = -1;
while (i < 0 || i > 255)
scanf("%d", &i);
d2b(i);
return 0;
}
d2bは前スレのから。メッセージとかは一切出してないので勝手に付け加えてくれ
動作確認してないのでひょっとしたらエラーでるかもしれん
>失礼しました、文章角能力があまり発達してないもので(^^; 文章を書く能力の問題じゃないね。
117 :
66 :2005/07/06(水) 17:31:53
.c:15: redefinition of `main' .c:6: `main' previously defined here と出ました、コンパイルエラーです。なぜか、他の人たちは、 この問題は、配列をつかってやってました。 ので、配列を使うんじゃないでしょうか? 無知なもので・・・
>>117 テストしてみたが問題なくコンパイルできたぞ
まさか前スレのソースからmain関数消してないってオチじゃないだろうな?
>>118 >>117 のエラー見ると main が 6行目と15行目の 2箇所あるぜゴルア と読めるがな。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):複素数zを読み込んで、絶対値と偏角を計算して印字するプログラムを作れ。但し ・複素数の実部と虚部を示す実数型変数をメンバとする構造体COMPLEX。 ・複素数の絶対値と偏角を示す実数型変数をメンバとする構造体POLAR をtypedef文を用いて定義し以下の手続きをそれぞれ関数として作成し,main関数内で@ABを呼び出すだけにせよ。 @構造体COMPLEXを読み込む A構造体COMPLEXからPOLARを計算する B構造体POLARを印字する 絶対値と偏角はz^2=a^2+b^2、θ=atan(b/a)でもとめられる。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):cc [3.3] 言語:C [4] 期限:7/7まで [5] その他の制限:条件はなるべく関数と構造体を用いて作る。 よろしくお願いします
>>122 #include <stdio.h>
#include <math.h>
typedef struct {double r, i;} COMPLEX;
typedef struct {double theta, len;} POLAR;
COMPLEX func1(void) {/*@*/
COMPLEX z;
scanf("%lf %lf z", &z.r, &z.i);
return z;
}
POLAR func2(COMPLEX z) {/*A*/
POLAR p;
p.theta = atan(z.i / z.r);
p.len = sqrt(z.r*z.r + z.i*z.i);
return p;
}
void func3(POLAR p){printf("len=%f, theta=%f\n", p.len, p.theta);}/*B*/
int main(void) {
func3(func2(func1()));
return 0;
}
124 :
デフォルトの名無しさん :2005/07/06(水) 19:03:49
あのー無理です。
-lm
>>123 atan()ではなくatan2()を使うべき。
士郎「絶対値と偏角はz^2=a^2+b^2、θ=atan(b/a)でもとめられる。」 雄山「では聞こう、絶対値が0のとき偏角はどう定義されるのだ? それに、atan(b/a)などというのはゼロ除算を考慮に入れていないではないか。 この、うつけめ!」 士郎「ぐぬぬ・・・」 栗田「さすがは海原雄山氏 仕様が曖昧だと出来てくるプログラムが不完全になることを言ってらっしゃるんだわ。」
>>126 hypot()も思い出してあげてください。
129 :
123 :2005/07/06(水) 19:30:39
>>126 の指摘はごもっともだったわ。
ゼロ除算はちゃんと落ちるように考慮済み。
C99の新人関数は使う気がしない。
hypot は 由緒正しい家柄です。 ぽっとでの新人と一緒にしないでください。
131 :
前スレ441 :2005/07/06(水) 19:54:42
コンパイルでld:Unresolved:mainと出たのですが
133 :
デフォルトの名無しさん :2005/07/06(水) 20:03:54
117ですが、むりぽです、自分なりに書いてみたんですが、 parse error before `void という、エラーが出ます。心優しい方、教えてください。
とりあえず前スレのやつのmainと入れ変えれ それで動くのは確認した。何か起きても多少の手直しで動くはずだ できないのならあんたには向いてないと思う
135 :
a :2005/07/06(水) 20:10:32
136 :
デフォルトの名無しさん :2005/07/06(水) 20:16:47
>>134 ありがとうございました、何んとかできました。
しかし、こちらのほうで、なんとかできないでしょうか?自分なりにやってみたんですが、
ご指導の方よろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
void d2b(int i);
int main()
{
int i,a[i];
printf("2進数に直したい10進数の正の整数を入れてください,負の数の場合は終了です\n");
scanf("%d",&i);
if(i<0){
exit(i);
}
else if(i>=0){
printf("10進数表示%dの2進数表示は,\n %d \nです。\n",i, a[i]);
}
void d2b(int i)
{
int a[i];
for(i=8;i>0;i--){
a[i]=i%2;
}
return 0;
}
>>131 ・main書くの忘れてた。
int main(void) {interact(); return 0;}
をinteractより下に書き加えてくれ。
・メモリリークを見つけた
2218行目の
dealloc(p->val);
を
free_value(p->val);
に直してくれ。
138 :
名無しさん :2005/07/06(水) 20:34:09
76ですが、遅くなりました。 99さんどうもです。 for (i = 2; i < (unsigned int)sqrt(n); i ++) { の行にエラーが出ちゃったんですけど、どうすればいいか教えてください。 sqrt 定義されていない識別子ですって出たんですけど… お願いします。
#include <math.h>
>>138 無駄はあるが
for (i = 2; i < n / 2; i ++) {
とするだけで十分
141 :
137 :2005/07/06(水) 20:55:20
実装について。 各セルは文字列へのポインタの変わりに式の抽象表現へのポインタを持っている。 入力時点で式を解析したいから、こういう実装になってる。 これは仕様に反するけど、多分許されるんじゃないだろうか。 iやaコマンドで新しく追加される行・列はすべて0で、値の変更はeコマンドで行う。 以下は拡張機能。 扱えるデータ型は、整数、浮動小数点数、文字、真偽値、リスト、関数。 文字はシングルクォートで囲む。真偽値はtrueかfalse 文字列は文字のリストで、ダブルクォートで囲む。関数は \引数名->本体 と書く。リストはlisp風で、各要素は別々の型を持てる。空リストは空文字列と同じだから、""と書く。 他のセルへの参照は「B2」あるいは「!B2」のように書く。 前者は入力時のB2の値が使われ、後者はB2への動的な参照になる。 この場合、B2セルの値が変更されたり、行の挿入などで位置がずれても、自動的に追跡する。 加減乗除(+-*/)の他に累乗(^)、リスト構築(:)、比較演算(==, !=, >, <. <=, >=)、論理演算(&&, ||)が使える。 if A then B else C は A ? B | Cと書く。 拡張コマンドとしてb(シンボルを定義)とu(シンボルの定義を抹消)がある。
142 :
名無しさん :2005/07/06(水) 20:55:59
結果がいきなり026と出てしまうのですが…。 自然数を自分で入力し、自分でエンターを押して 素数かどうかチェックする場合どうしたらいいのですか?
144 :
99 :2005/07/06(水) 21:22:41
>>142 それくらいは自分でできるだろー。というか、練習問題としてやってみな。
scanf使って数値を入力させて、その数値で計算させればいいだけ。
[1] 授業単元: C/C++ [2] 問題文(含コード&リンク): 引数として2進数をchar文字列で渡すと、 16進数に変換し、char文字列として返す関数を作る。 同様に引数を16進数、戻値を2進数で返す関数も作る。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC++6.0 [3.3] 言語:C/C++/ [4] 期限:7月9日 [5] その他の制限: 前スレでもお尋ねしたのですが、stringstreamを 使った答えをいただき、ありがたく思っております。 が、今度はchar配列の先頭のポインタをやり取りするように言われました。 なんだか余計にわからなくなってしまった・・・orz どうかお願いします
#include <stdio.h> int isPrime(unsigned int n){ unsigned int i; for(i = 2; i * i <= n; i++) if ( (n % i) == 0 ) return 0; return 1; } unsigned int powMod(unsigned int a, unsigned int n){ unsigned int mask, tmp; for(mask = 0x10000U, tmp = 1U; mask ; mask >>= 1) { tmp = (tmp * tmp) % n; if(mask & n) tmp = (tmp * a) % n; } return tmp; } int main(void){ unsigned int n; char buf[1024]; while(1) { printf("n = "); fgets(buf, 1024, stdin); if(sscanf(buf, "%u", &n) != 1) continue; if( n <= 0 ) break; /* 0以下が入力されたら終了 */ if( n > 0xffff ) { printf("大きすぎて処理できません\n"); continue; } if(powMod(2, n) - 2U == 0U) { if(isPrime(n) != 0) printf("割り切れる素数\n"); else printf("割り切れる合成数\n"); } else { if(isPrime(n) != 0) printf("割り切れない素数\n"); else printf("割り切れない合成数\n"); } } return 0; }
[1] 授業単元: プログラミング技術 [2] 問題文(含コード&リンク):n本の曲情報をソートし印字するプログラムを作れ。ただし、歌手名、曲のタイトル、ジャンルを メンバとする構造体CD_ALUBMを定義しそれぞれのメンバでソートが可能であるように作成せよ。 要素を歌手名、曲のタイトル、ジャンルを持つ構造体CD_ALUBMを宣言しその構造体変数を配列で宣言して扱う。 ソートはstrcmpなどをもちいて文字列の大小で並び替えを行う [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):cc [3.3] 言語:C言語 [4] 期限:7/7まで [5] その他の制限:構造体と配列です。 どうかお願いします
148 :
デフォルトの名無しさん :2005/07/06(水) 22:03:42
1] 授業単元:プログラミングC言語 [2] 問題文(含コード&リンク):配列のデータ構造を実現するプログラムを 数パターン作成する ・データの挿入、削除、表示が可能であること。 ・配列に代入するデータは整数型とする。 ・プログラムの仕様(関数への入出力、表示方法など)は自由とする [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5 [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 期限:7月9日昼まで [5] その他の制限: まだC言語始めて一ヶ月なんですけど宿題が出てしまい 初心者な自分には力不足でわかりません。できるだけ早くお願いします。それ とよろしければ簡単な注釈も書いていただければうれしいです。 どなたかやってもらえないでしょうか?
149 :
13 :2005/07/06(水) 22:13:03
こんばんわ、どなたか
>>13 のフローチャートについて教えていただけないでしょうか?
<私が作ったやつ>
開始→数値を入力→二で割る→商≠0→(false)→余り並べ替え→表示→終了
↑ ↓
(ture)←↓
講師に「このプログラムにしてはフローチャート足りないかな」といわれました。
御教授お願いします。
150 :
13 :2005/07/06(水) 22:18:31
すいません「ture」は「商≠0」から分岐しています。間違えました。
しかし、なんとこさウンコなプログラムだな。 大学ではこんなことやらされるのか・・・ # 教えてもらえないからって女の真似したって駄目だヨ
いや、まとめないで、変数の変化だとか、サブルーチン(関数)の呼び出しだとか、そーゆーのを書くのだ。
>>148 配列って普通、あらかじめ決めておいた数の記憶領域に対して、
整数の番号によって指定された番地のデータの読み書きができるだけの機能しかないよ。
挿入、削除はともかく、表示までできてしまうのを配列とは呼ばないのでは?
C++ の STL の vector は挿入も削除もできるけどさ。表示はできないよ。
普通表示するのに、配列自体の表示機能なんか必要無くて、
順番に番地を指定して値を取り出して、その値を表示するよ。
>>148 なんていうかまんま線形リストの特徴備えてるよなw
>>148 今月のCマガ100ページからの特集読め
図書館行きゃあるだろ
156 :
1/2 :2005/07/06(水) 23:04:41
>>147 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct { char *title, *artist, *genre;} CD_ALUBM;
CD_ALUBM alubm_table[] = {{"車輪", "BUMP OF CHICKEN", "J-POP"}, {"ズンドコ節", "氷川きよし", "演歌"},{"くるみ割り人形", "チャイコフスキー", "クラシック"},{"偶然天使", "極上生徒会執行部", "あにそん"}};
#define NUM_OF_ELEMENT(a) (sizeof(a)/sizeof(a[0]))
#define PCOMP_FUNC(M) comp_##M
#define COMP_FUNC_IMPLEMENT(MEM) int comp_##MEM(const void *a, const void *b) { return strcmp(((CD_ALUBM*)a)->MEM, ((CD_ALUBM*)b)->MEM);}
COMP_FUNC_IMPLEMENT(title)
COMP_FUNC_IMPLEMENT(artist)
COMP_FUNC_IMPLEMENT(genre)
void print_table(const CD_ALUBM *table, const size_t size, const char *title){
CD_ALUBM *p;
puts(title);
for(p = (CD_ALUBM*)table; p != table + size; ++p) printf("%s, %s, %s\n", p->title, p->artist, p->genre);
}
157 :
2/2 :2005/07/06(水) 23:04:55
main() { print_table(alubm_table, NUM_OF_ELEMENT(alubm_table),"***default order***"); qsort(alubm_table, NUM_OF_ELEMENT(alubm_table), sizeof(*alubm_table), PCOMP_FUNC(title)); print_table(alubm_table, NUM_OF_ELEMENT(alubm_table), "\n***title order***"); qsort(alubm_table, NUM_OF_ELEMENT(alubm_table), sizeof(*alubm_table), PCOMP_FUNC(artist)); print_table(alubm_table, NUM_OF_ELEMENT(alubm_table), "\n***artist order***"); qsort(alubm_table, NUM_OF_ELEMENT(alubm_table), sizeof(*alubm_table), PCOMP_FUNC(genre)); print_table(alubm_table, NUM_OF_ELEMENT(alubm_table), "\n***genre order***"); }
>>13 その講師が求めているのは、箱一つに C の文が一つ書かれている
フローチャートなんじゃないかな?
だから基本的にはプログラムの文を一つ一つ四角で囲っていけばいい。
while は菱形にして、{ } の関係を矢印で結べばいい。
あと、関数宣言は両側が丸いアイスの棒みたいな形にすればOK
>>149 「二で割る」の所に「割った余りをs[index]に記録」みたいなのが足んないんだと思う。
フローチャート通りだと計算の記録を残すところが無いし。
162 :
13 :2005/07/06(水) 23:24:01
>>158 さん
有難うございます。
講師には、「二で割る」〜「商≠0」の部分がいくつか欠けているといわれました。
とりあえず「変数int index =0,left = 0 を宣言 」など頭のほうにつけてみましたがよく
わかりません。余りを保存(記憶?)のチャートはどの部分に入りますか?
>>145 君が「C++ではなくCだ」と書いておかないからだ
>>145 質問
・引数として渡されたchar配列に変換結果を書き込んでそれを戻り値と
して返すの?
それとも新たに中で動的に確保したポインタを返すの?
165 :
137 :2005/07/06(水) 23:38:44
166 :
145 :2005/07/06(水) 23:52:04
>>163 おっしゃるとおりです。というか、追加で出されたものでして
>>164 引数はそのままの値を保持します
新たに確保して返せばそれで大丈夫のはずです
>>166 当然呼び出し側でfreeすることになるんだけれども、そういうプログラムで
いいのかな?
>145 void btox(char *x, char *b) { int len, xch, i, j; len = strlen(b);xch=0; for(i=0;i<len%4;i++){ xch <<= 1;xch |= b[i]-(b[i]>9?'a':'0'); } x[i/4]=xch+(xch>9?'a':'0'); while(i<len){ xch = 0; for(j=0;j<4;j++){ xch <<=1;xch |=b[i]-'0';i++;j++; } x[i/4]=xch+(xch>9?'a':'0'); } void xtob(char *b, char *x) { int len, xch, i, j; len = strlen(x);len *= 4;i=0; while(x[i] != '\0'){ xch = x[i]-(x[i]>9?'a':'0'); b[4*i]=!!(xch & 0x8)+'0'; b[4*i+1]=!!(xch & 0x4)+'0'; b[4*i+2]=!!(xch & 0x2)+'0'; b[4*i+3]=!!(xch & 0x1)+'0'; } b[4*i] = '\0'; }
169 :
158 :2005/07/06(水) 23:55:56
>>13 講師は C 言語のプログラムを適当に間引いたものが欲しいのではなく、
単に文を象形文字化したものが欲しいだけ。
だから i=i+1; とかは
「i に 1 を足す」でも「i を 1 増やす」でもなく、
「i に 1 を足したものを i に代入する」と完璧機械的直訳をすれば Ok
a[b]=c[d]; なら
「配列 c の d 番目の要素を配列 a の b 番目に代入する」とかね。
プログラムの意味なんか全然考えなくていいよ。
170 :
デフォルトの名無しさん :2005/07/06(水) 23:56:36
>>127 そのシリーズたまにやってくれ。
おもろいw
171 :
145 :2005/07/06(水) 23:57:30
連投すみません
>>145 の 余計にわからなく〜は
streamを使うやり方はよく解ったけど、
char配列でうまく処理できない、ということで
お答えをいただいて余計に混乱した、ということではないです
気分を害した方がいらっしゃったら、ごめんなさい
172 :
145 :2005/07/06(水) 23:58:58
>>167 はい、ダメなようなら
こちらで頑張って修正したいと思ってます
フローチャートを使うなら、ループ記号も使ってあげてください。
174 :
デフォルトの名無しさん :2005/07/07(木) 00:14:03
>>168 おお!なるほど・・・ありがとうございます!
あと、xtobの方で疑問に思ったのですが、
b[4*i]=!!(xch & 0x8)+'0'; あたりの
"!!" と "+'0'" の意味はなんなんでしょうか・・・?
もしよろしかったらお答えを聞きたく思います
175 :
145 :2005/07/07(木) 00:14:43
興奮していろいろ忘れた・・・145ですorz
176 :
167 :2005/07/07(木) 00:17:02
>>172 新しく確保するよりバッファを渡す方がCらしいわな。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* to_radix_n(unsigned int x, char* s, int n) {
int index = 0, left = 0, digit;
char temp;
do {
digit = x % n;
s[index++] = digit > 9 ? digit - 10 + 'A' : digit + '0';
} while (x /= n);
s[index--] = '\0';
while (left < index) {
temp = s[left];
s[left++] = s[index];
s[index--] = temp;
}
return s;
}
unsigned int from_radix_n(char* s, int n) {
unsigned int x = 0, i, len;
for (i = 0, len = strlen(s); i < len; i++) (x *= n) += isdigit(s[i]) ? s[i] - '0' : toupper(s[i]) - 'A' + 10;
return x;
}
int main(void) {
char s1[256], s2[256];
printf("Enter Number:"); scanf("%255s", s1);
printf("%s(16) = %s(2)\n", s1, to_radix_n(from_radix_n(s1, 16), s2, 2));
printf("Enter Number:"); scanf("%255s", s1);
printf("%s(16) = %s(2)", s1, to_radix_n(from_radix_n(s1, 2), s2, 16));
}
177 :
167 :2005/07/07(木) 00:20:25
>>174 !!→二重否定。つまり、0は0、1は1、2も1、以下同様に。
+'0'→一桁の数値を文字に。つまり、0は'0'、1は'1'、2は'2'、以下同様に。
tに何か値が入っているとき1を、 0が入っているときに0をセットしたいときに x = !!tとすると 否定の否定でxに値があれば1、なければ0が入る。 "+'0'"はx=!!tと 下二式から考えてみて '0' = '0' + 0; '1' = '0' + 1;
180 :
デフォルトの名無しさん :2005/07/07(木) 00:24:00
181 :
168 :2005/07/07(木) 00:25:30
xtobの len = strlen(x);len *= 4 入らなかった削除しといて。
182 :
168 :2005/07/07(木) 00:27:26
>179はむちゃくちゃ言っちゃってるな書き直し tに何か値が入っているとき xに1を、0が入っているときに0をセットしたいときに x = !!tとすると 否定の否定でtに値があれば1、なければ0がxに入る。 "+'0'"はx=!!tと 下二式から考えてみて '0' = '0' + 0; '1' = '0' + 1;
183 :
デフォルトの名無しさん :2005/07/07(木) 00:31:03
>>176 これまた別のやり方・・・すごく参考になります
mainまで気を配っていただいて、ありがたい限りです
>>181 了解しました
小さな質問にも答えていただいて感謝です
お二人のを参考に仕上げて行きたいと思います
本当にご親切にありがとうございました
184 :
168 :2005/07/07(木) 00:33:40
while(x[i] != '\0'){ xch = x[i]-(x[i]>9?'a':'0'); b[4*i]=!!(xch & 0x8)+'0'; b[4*i+1]=!!(xch & 0x4)+'0'; b[4*i+2]=!!(xch & 0x2)+'0'; b[4*i+3]=!!(xch & 0x1)+'0'; i++;//ここが抜けてたたびたびすまん }
185 :
145 :2005/07/07(木) 00:38:49
>>184 あ、わかりました〜
とりあえず自分はまず名前とsage練習ですねorz
なんにせよ助かりました、もう一度、ありがとうございました
不完全でわるいが、こんなんどーぉ? static void uint2b_sub(char **, int); char *uint2b(char *buf, int n) { char *s = buf; uint2b_sub(&s, n); *s = '\0'; return buf; } static void uint2b_sub(char **s, int n) { if (n > 2) uint2b_sub(s, n / 2); *(*s)++ = "01"[n%2]; /* ここがトリッキーだよなぁ・・・ */ }
if (n > 2) → if (n >= 2)だった。鬱だ寝よう。
188 :
148 :2005/07/07(木) 01:10:10
すみません、148です。よくわからないんですけど多分表示っていうのは参照 するってことなんだと思います。説明不足ですみませんでした。それと、もしよかったら 削除と挿入だけでもいいのでどなたかやってもらえないでしょうか?
>>188 > [3.3] 言語:C/C++/どちらでも可 のいずれか
どれだよw
190 :
デフォルトの名無しさん :2005/07/07(木) 01:42:10
[1] 授業単元: Cプログラミング [2] 問題文(含コード&リンク): キーボードからchar型変数 str1 , str2 にそれぞれ 文字列を入力する。str2 を str1 に連結し、str1 の内容を出力するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC++ 6.0 [3.3] 言語:C [4] 期限: 無期限 こんな感じに書きました↓
191 :
190 :2005/07/07(木) 01:42:24
#include <stdio.h> void main(){ char str1[128],str2[128],*p_str1,*p_str2; p_str1 = str1; p_str2 = str2; printf("1: "); scanf("%s",p_str1); printf("2: "); scanf("%s",p_str2); //文字列 str1 の終点のアドレスがポインタに代入された状態にする for( ; *p_str1 != '\0' ; p_str1++ ); //連結 for( ; *p_str2 != '\0' ; *p_str1++ = *p_str2++ ); //p_str1 を出力 たぶんここが悪い for( p_str1 = str1 ; *p_str1 != '\0' ; p_str1++ ) printf("%c",*p_str1); printf("\n"); } たぶん出力するところの条件がおかしいんだとは思うんですが。。。 色々考えてはみたものの結局答えは出ず。どなたかご教授願います
>>190 残念そこじゃない。そのコードでは末尾に'\0'が付加されない。
//連結
while (*p_str1++ = *p_str2++) {}
>>191 > //連結
> for( ; *p_str2 != '\0' ; *p_str1++ = *p_str2++ );
これだと、'\0'の手前でコピーが終了してstr1の末尾に'\0'がつかない
のに、
後で出力時にはstr1の末尾に'\0'がついていることを期待しているのが
問題。
連結は、
while (*p_str1++ = *p_str2++);
でよい。コンパイラが警告を出すならば、別に無視しても構わないが
気になるなら
while ((*p_str1++ = *p_str2++) != '\0');
とでも書けばよい。
かぶった
195 :
190 :2005/07/07(木) 02:17:12
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):要素数が10個の整数型配列を、任意のデータで初期化し、 その要素の最大値と最小値を求めるプログラムを作りなさい [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月8日迄 [5] その他の制限:配列、ソート、サーチ処理までしか習っていません。 よろしくお願いします
>>196 #include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b){return *(int*)a - *(int*)b;}
int main()
{
int a[] = { 1, 4, 2, 0, 5, -3, 3, 3, 4, 7 };
qsort(a, 10, sizeof(int), cmp);
printf("(max, min) = (%d, %d)\n", a[0], a[9]);
return 0;
}
逆だった × printf("(max, min) = (%d, %d)\n", a[0], a[9]); ○ printf("(mim, max) = (%d, %d)\n", a[0], a[9]);
#include <stdio.h> int find(int key, int tblSize, int *tbl) { int i; for(i=0; i<tblSize; ++i) if(tbl[i]==key) return i; /* あった */ return tblSize; /* なかった */ } int ins(int val, int prevNum, int maxSize, int *tbl) { int now; if(prevNum+1>=maxSize) return -1; /* もう挿入できません */ tbl[now=find(val,prevNum,tbl)]=val; return (now<prevNum)?prevNum:now+1; } int del(int key, int tblSize, int *tbl) { int pos=find(key,tblSize,tbl); if(pos>=tblSize) return tblSize; /* ないから消せない */ if(pos<tblSize-1) tbl[pos]=tbl[tblSize-1]; return --tblSize; } int main(void) { int i,cnt=0,tbl[10]={0},maxSize=sizeof(tbl)/sizeof(tbl[0]); /* 追加 */ for(i=2; i<=10; i+=2) cnt=ins(i,cnt,maxSize,tbl); /* 削除 */ cnt=del(4,cnt,tbl); /* 表示 */ for(i=1; i<=10; ++i) printf("%d:%s\n", i, (find(i,cnt,tbl)<cnt)?"あった":"なかった"); return 0; }
int i,min,max,a[] = { 1, 4, 2, 0, 5, -3, 3, 3, 4, 7 }; min=max=a[0]; for(i=1; i<sizeof(a)/sizeof(a[0]); ++i){ if(min>a[i]) min=a[i]; if(max<a[i]) max=a[i]; } printf("(max, min) = (%d, %d)\n", max, min);
201 :
デフォルトの名無しさん :2005/07/07(木) 09:21:55
[1] 授業単元:C言語 [2] 英数字と半角スペース、特殊文字(’や#など)からなる英文文字列を入力し、この文字列から英数字のみからなる単語に切リ出して出力するプログラムを作成しなさい。入力・出力例については、下記の入力・出力例を参照のこと。 ただし、プログラムの仕様は下記の通りです。 (1) 英数字は、英数字以外の文字が出てきたら、そこまでを切り出す。 (2) 数字から始まる系列や数字のみ、特殊記号のみの系列を単語とはみなさない。 (3) 各単語は出現順に二次元文字配列に格納され、最後にこの二次元文字配列に格納された単語を順番に出力して終了する、という形式のプログラムとする。 (4) 全角文字は考えなくてよい。 ------------------------------ [入力・出力例] [345:] This is the machine134. -> 444 (Read the “document”!!! ). 単語=This 単語=is 単語=the 単語=machine134 単語=Read 単語=the 単語=document [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):VC++ 6.0 [3.3] 言語:C++ [4] 期限:7月7日まで 宜しくお願いしますm(__)m
[1] プログラミング基礎 [2] strcpy関数とstrncpy関数の二つの機能を併せ持つ関数を自作せよ。 [3] [3.1] Linux [3.2] コンパイラ(バージョン): [3.3] C++ [4] 期限:7月8日まで [5] オーバーロード、テンプレートを出来れば使用して欲しいです よろしくお願いします。
>>202 特にstrncpy()の機能の部分について仕様を詳しく。
#あんな妙な挙動を再現しろというのなら私はパスする。
[1]授業単元:C++言語 [2]2次元配列で表現された迷路がある.現在の位置を○で示している. 立ち往生することなく,○がいつまでも迷路内を移動し続けるプログラム maze.cpp を作成しなさい.但し,クラスを利用すること. もちろん壁を通り抜けることはできない.また,画面左上がスタート地点 である.なお,キー入力によりプログラムの中断とポーズ,および表示待ち時間 の増減を行えるようにしなさい. [2.1]迷路の表現について 迷路は,int 型の2次元配列で表現することができる. 例えば,壁=1,道=0,現在位置=9という値であると定義すれば, 配列要素を調べることで何を表示すればよいかが分かる. [2.2]迷路内の移動について ○は現在座標(x, y)を持っている.この座標値(x, y)を ループの中で毎回更新することで,○が迷路内を移動して行くように 見せることができる.表示が速すぎると移動の様子が確認できないので, 適宜,空ループを利用することで待ち時間を作り,擬似的に表示速度の増減を行えば良い. [2.3]迷路の探索アルゴリズムについて 迷路は固定されているが,○は進行方向によって東西南北の どちらを向いているかが変化する. [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):VC++ 6.0 [3.3] 言語:C++ [4] 期限:7月8日まで よろしくお願いします。
205 :
デフォルトの名無しさん :2005/07/07(木) 11:09:27
宿題ラッシュ
>>204 仕様が穴だらけだ。
・描画に関して
どこにどう描画する? その手段は?
授業で既に何かを描画しているのならそれを利用すべきではないのか?
・迷路に関して
迷路の大きさは? 生成手段は?
授業で既に迷路を作成(r
・迷路探索に関して
分岐に到達した場合の移動方向は?
って、面白そうだけど結構分量ありそうだな。私ゃパスだ。
#include <numeric> template<typename Type> Type* Func(Type* lpDest,const Type* lpSource,size_t count = std::numeric_limits<size_t>::max()){ size_t i = 0; for(;i < count && lpSource[i] != '\0';i++) lpDest[i] = lpSource[i]; if( i < count) lpDest[i] = '\0'; return lpDest; }
208 :
デフォルトの名無しさん :2005/07/07(木) 11:45:14
#include <stdlib.h> void d2b(int i); int main() { int i; printf("2進数に直したい10進数の正の整数を入れてください,負の数の場合は終了です\n"); scanf("%d",&i); if(i<0 || i>255){ exit(i); } else if(i >= 0){ printf("10進数表示%dの2進数表示は,\n ",i); d2b(i); printf("です.\n"); } } void d2b(int i) { int a[8],x; for(x=0;x<8;x++){ a[x]=i%2; } for(x=7;x>=0;x--){ printf("%d\n",a[x]); } printf("\n"); } 計算結果が、変な値になってしまいます、教えてください。
209 :
デフォルトの名無しさん :2005/07/07(木) 11:51:26
208ですが、よーやく、わかりました、ありがとうございました。
>>208 > for(x=0;x<8;x++){
> a[x]=i%2;
> }
for(x=0;x<8;x++,i>>=1){
a[x]=i%2;
}
>>201 その1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <ctype.h>
void split(char *str, char **buffer) {
char *start, *ptr;
int length, num = 0, skip = 0;
start = str;
for (ptr = str; *ptr != '\0'; ptr++) {
if ((isdigit(*ptr) || !isalpha(*ptr)) && (ptr - start) == 0) {
skip = 1;
}
if (!isalpha(*ptr) && !isdigit(*ptr)) {
if ((length = ptr - start) != 0 && skip == 0) {
buffer[num] = (char *)malloc(sizeof(char) * length + 1);
strncpy(buffer[num], start, length);
buffer[++num] = (char *)NULL;
}
start = ptr + 1;
skip = 0;
}
}
}
>>201 その2
int main(int argc, char **argv) {
char buffer[4096], *tokens[1024], *token;
int i = 0;
printf("Input String (Max length is 4095) : ");
fgets(buffer, 4095, stdin);
split(buffer, tokens);
while ((token = tokens[i]) != (char *)NULL) {
printf("Token: %s\n", token);
++ i;
}
return 0;
}
>>208 ただ「変な値になる」ではなく、きちんと実例を挙げて説明したまえ。
>char buffer[4096], *tokens[1024], *token; >printf("Input String (Max length is 4095) : "); >fgets(buffer, 4095, stdin); この辺が馬鹿。
> buffer[num] = (char *)malloc(sizeof(char) * length + 1); この辺も馬鹿。
216 :
207 :2005/07/07(木) 12:08:26
#include <numeric>
template<typename Type>
Type* Func(Type* lpDest,const Type* lpSource,size_t count){
size_t i = 0;
for(;i < count && lpSource[i] != '\0';i++) lpDest[i] = lpSource[i];
if( i < count) lpDest[i] = '\0';
return lpDest;
}
template<typename Type>
Type* Func(Type* lpDest,const Type* lpSource){
size_t i = 0;
for(;lpSource[i] != '\0';i++) lpDest[i] = lpSource[i];
lpDest[i] = '\0';
return lpDest;
}
>>202 一つの関数で済まそうとするとダメダメだったことに気づいた
>>203 言葉足らずでした。すいません。
strcpy(s1,s2)の時にs1にs2をコピーする。
strncpy(s1,s2,n)の時はs1にs2の先頭n文字がコピーされる。
という事です。
>>207 ありがとうございます。
既習範囲をぶっ飛んでてちょっと厳しいですが
もう少し勉強して参考にさせていただきます。
219 :
41 :2005/07/07(木) 12:16:57
>>42 はい、割り勘です。
もし、割り切れなかった場合はM君が余りを支払います。
220 :
デフォルトの名無しさん :2005/07/07(木) 12:19:54
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): eのx乗は次の式で近似される。 eのx乗=1+x+xの2乗/2!+・・・+xのn乗/n!+・・・ xが入力されると、n乗の項の絶対値が10の-5乗より大きい間、 eのx乗の値を計算して、答えを出力するプログラムを以下の手順で作成せよ。 (1) 上記の近似式を漸化式で表しなさい。なお、漸化式とは第n項を第n-1項以下の 値を使って表現したものである。 (2) 漸化式を利用して、プログラムを書きなさい。 [実行例] eのx乗を計算します。xを入力せよ→1 eの1乗は2.71828です。 eのx乗を計算します。xを入力せよ→0.1 eの0.1乗は1.10517です。 eのx乗を計算します。xを入力せよ→-1 eの-1乗は0.367879です。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): Cygwin(よく分かりません…) [3.3] 言語:C++ [4] 期限:今日中なんです… [5] その他の制限:問題文の指示通り、漸化式を利用して作る 期限が悲惨ですが、どなたかお願いします…
(1) E(n)=E(n-1)+(x^n)/(n!), n>0 E(0)=1 (2) double E(double x, unsigned int n) { double result; static double term = 1.0; if (n == 0) return term = 1.0; result = E(x, n-1); term *= x / n; return result + term; }
222 :
221 :2005/07/07(木) 12:55:08
>>220 おっと、漸化式を
E(n) = E(n-1) + T(n-1)*x/n, n>0
E(0) = 1, T(0) = 1
に変更しておこうかな。
mainは自分で書いてくれ。
unsigned int N = 100; /* 適度にデカい数字 */
/* x にユーザから入力 */
printf("eの%f乗は%fです。\n", x, E(x, N));
って感じ。あ、C++か。
std::cout << でw
223 :
デフォルトの名無しさん :2005/07/07(木) 13:05:48
>>222 おお…なんとも素晴らしく早い対応ありがとうございます!
今から引用させてもらいますW
[1]プログラミング [2] 問題文 void List(struct LIST *pt){ while(pt != NULL){ printf(" %d",pt -> a); pt = pt -> nextptr;} putchar('\n');} これを繰り返し構造ではなく関数の再帰呼び出しを用いて表せ [3] 環境 [3.1]Linux [3.2]gcc [3.3]C [4]明日まで [5]できれば説明もつけていただけるとありがたいです よろしくお願いします
>>224 void List(struct LIST *pt){
if (pt == NULL) {
putchar('\n');
} else {
printf(" %d",pt -> a);
List(pt->nextptr);
}
}
解説:再帰(的)関数。リスト構造。などでぐぐれ。
#include<stdio.h> #define N 200 #define INF 100000 #define fixed 2 #define in 1 #define out 0 struct station{ int num; char name[20]; }; int start,mark[N],dist[N],length[N][N],n=0; struct station data[N]; void read_graph(void); void write_dist(void); void Dijkstra(void); main(){ read_graph(); printf("start point = "); scanf("%d",&start); printf("\n"); start=start-1; Dijkstra(); write_dist(); }
void read_graph(void){ int i,j,k; for(k=0;k<N;k++){ n+=1; scanf("%d",&data[k].num); scanf("%s\n",&data[k].name); if(data[k].num==-1)k=N; } for(i=0;i<N;++i) for(j=0;j<N;++j) length[i][j]=INF; printf("start node,end node,edge length\n"); for(k=0;k<N;k++){ scanf("%d %d",&i,&j); if(i==j)k=N; scanf("%d",&length[i-1][j-1]); length[j-1][i-1]=length[i-1][j-1]; /*(j-1,i-1)と(i-1,j-1)の距離を同じに書き換える*/ } }
void write_dist(void){ int i; for(i=0;i<n-1;++i){ printf("distance[%15s] = %d\n",data[i].name,dist[i]); } } void Dijkstra(void){ int m,i,j,k,v,temp; for(i=0;i<N;i++) dist[i]=INF; dist[start]=0; for(i=0;i<=n-3;i++){ for(k=0;k<n-1;k++){ for(m=0;m<n-1;m++){ if(length[k][m]<INF){ if(dist[k]+length[k][m]<dist[m]){ dist[m]=dist[k]+length[m][k]; } } } } } }
#include<stdio.h> #define N 200 #define INF 100000 #define fixed 2 #define in 1 #define out 0 struct station{ int num; char name[20]; }; int start,mark[N],dist[N],length[N][N]; struct station data[N]; void read_graph(void); void write_dist(void); void Dijkstra(void); main(){ read_graph(); printf("start point = "); scanf("%d",&start); printf("\n"); start=start-1; Dijkstra(); write_dist(); }
231 :
デフォルトの名無しさん :2005/07/07(木) 14:48:29
89ですがプログラマのみなさんでも無理でしょうか?.....
void read_graph(void){ int i,j,k; for(k=0;k<N;k++){ scanf("%d",&data[k].num); scanf("%s\n",&data[k].name); if(data[k].num==-1)k=N; } for(i=0;i<N;++i) for(j=0;j<N;++j) length[i][j]=INF; printf("start node,end node,edge length\n"); for(k=0;k<N;k++){ scanf("%d %d",&i,&j); if(i==j)k=N; scanf("%d",&length[i-1][j-1]); length[j-1][i-1]=length[i-1][j-1]; } }
void write_dist(void){ int i; for(i=0;i<N;++i){ if(mark[i]==fixed)printf("distance[%15s] = %d\n",data[i].name,dist[i]); } } void Dijkstra(void){ int i,j,k,v,temp; for(i=0;i<N;i++)mark[i]=out; dist[start]=0; mark[start]=in;
for(;;){ for(i=0;(i<N)&&(mark[i]!=in);++i); if(i==N)return; for(v=i++;i<N;++i)if((mark[i]==in)&&(dist[i]<dist[v]))v=i; mark[v]=fixed; for(i=0;i<N;++i) if(length[v][i]<INF){ temp=dist[v]+length[v][i]; if(mark[i]==in){ if(temp<dist[i])dist[i]=temp; } else if (mark[i]==out){ dist[i]=temp; mark[i]=in; } } } }
次は、Rubyで長方形のクラスを定義し、インスタンスを一つ作り出しているものです。C言語で同様のプログラムを作成しなさい。 class Rectangle def initialize(x1,y1,x2,y2) @x1 = x1 @y1 = y1 @x2 = x2 @y2 = y2 end attr_accessor :x1,:y1,:x2,:y2 end rect1 = Rectangle.new(10,10,20,20) p rect1 printf("長方形の対角の座標は(%d %d)と(%d %d)です。\n",rect1.x1,rect1.y1,rect1.x2,rect1.y2")
いやです。
そもそもCだと出来ねーし
>>89 #include <stdio.h>
int main( void )
{
FILE *pf; int i, m, n, x, y; char f[ 256 ];
for ( m = 0; m != 3; ) {
printf( "\n1. Output file. - function.dat\n2. Output file. - n_xy.dat\n3. Exit program.\n>" ); scanf( "%d", &m );
switch ( m ) {
case 1 :
pf = fopen( "function.dat", "wb" ); if ( pf == NULL ) break;
for ( x = 0; x <= 1001; x++ ) { y = x * x;
for ( i = 0; i < sizeof( int ) / sizeof( char ); i++ ) fputc( ( ( char * )&x )[ i ], pf ); for ( i = 0; i < sizeof( int ) / sizeof( char ); i++ ) fputc( ( ( char * )&y )[ i ], pf ); }
fclose( pf );
printf( "Success." );
break;
case 2 :
printf( "Number = " ); scanf( "%d", &n ); if ( n < 0 || 1000 < n ) break;
pf = fopen( "function.dat", "rb" ); if ( pf == NULL ) break;
fseek( pf, n * sizeof( int ) * 2, SEEK_SET );
for ( i = 0; i < sizeof( int ) / sizeof( char ); i++ ) ( ( char * )&x )[ i ] = fgetc( pf ); for ( i = 0; i < sizeof( int ) / sizeof( char ); i++ ) ( ( char * )&y )[ i ] = fgetc( pf );
fclose( pf );
sprintf( f, "%04d_xy.dat", n ); pf = fopen( f, "wt" );
if ( pf == NULL ) break;
fprintf( pf, "x = %d\n", x ); fprintf( pf, "y = %d\n", y );
fclose( pf );
printf( "Success." );
break;
}
}
return 0;
}
239 :
148 :2005/07/07(木) 16:45:30
148です、返事遅くなってすみません。199さんありがとうございます。 助かりました、まだコンパイルも実行もしていないので今からしてきます。 本当にありがとうございました。
同様ってんだから似てりゃいいんじゃないの?
>>235 #include <stdio.h>
#include <stdlib.h>
struct Rectangle { int x1, y1, x2, y2; };
struct Rectangle * new_rect(int x1, int y1, int x2, int y2);
void kill_rect(struct Rectangle * p);
int main()
{
struct Rectangle * rect1;
rect1 = new_rect(10, 10, 20, 20);
printf("長方形の対角の座標は(%d %d)と(%d %d)です。\n", rect1->x1, rect1->y1, rect1->x2, rect1->y2);
kill_rect(rect1);
return 0;
}
struct Rectangle * new_rect(int x1, int y1, int x2, int y2)
{
struct Rectangle * p = (struct Rectangle *) malloc(sizeof(struct Rectangle));
p->x1 = x1;
p->y1 = y1;
p->x2 = x2;
p->y2 = y2;
return p;
}
void kill_rect(struct Rectangle * p)
{
free(p);
}
241 :
148 :2005/07/07(木) 17:17:59
すみません、148です。説明不足でした。私が言いたかったのは例えば 実行時にコマンドとして 「address」と入力すると添え字を聞かれ数字を入れると添え字を指定できる。 「show」と入力すると指定した添え字に対応する要素を参照できる。 「delete」と入力すると添え字を聞かれ数字を入れて指定した要素を削除できる。 「insert」と入力すると添え字を聞かれ数字を入れて指定した所に要素を挿入できる。 ということで、そういったプログラムを作ることを教授が課題として出しました。
>>241 要素を削除ってのが消した上で詰める&挿入が一切上書きせずに間に追加するって
意味でいいなら完全に線形リストだが、それでいいならいくらでもサンプルコード
あるからググってみれ
243 :
148 :2005/07/07(木) 17:37:44
242さん、ありがとうございます。線形リストっていうんですか。 さっそくググってきます。
244 :
デフォルトの名無しさん :2005/07/07(木) 17:52:29
ファイル内に下記のようなデータがあって あいうえお,1,8 かきくけこ,2,16 さしすせそ,4,32 Cのプログラムで"かきくけこ,2,16"を削除して間を詰める方法を教えてください
>244 mmapして、memmoveして、ftruncateしたら?
>>244 あいうえおとさしすせそを別ファイルにコピーして、元のファイルを消し、
作ったファイルを名前を元のファイル名にする。
248 :
デフォルトの名無しさん :2005/07/07(木) 18:07:18
>>245 、246、247
ありがとうございます
可能なものから試してみます
system("sed -e '2d' < srcFile > destFile; mv destFile srcFile");
[1] 授業単元:プログラミング及び演習 [2] 問題文(含コード&リンク): 符号なし関数xのposビット目を、1にした値を返す関数set、0にした値を返す関数reset、 反転した値を返す関数inverse unsigned set( unsigned x, int pos) { /* ・・・ */ } unsigned reset( unsigned x, int pos) { /* ・・・ */ } unsigned inverse(unsigned x, int pos) { /* ・・・ */ } を作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月8日(金)まで おねがいします
posビット目は右(LSB)から数えるのか、それとも、左(MSB)から数えるのか? また、posは0から始まるのか、それとも、1から始まるのか?
set(...) { return (x | (1U << pos)); } reset(...) { return (x & (~(1U << pos))); } inverse(..) { return (x ^ (1U << pos)); }
じゃ、決めてください。
set(...) { return (x | (1U << (INTBITS - pos - 1))); } reset(...) { return (x & (~(1U << (INTBITS - pos - 1)))); } inverse(..) { return (x ^ (1U << (INTBITS - pos - 1))); }
256 :
デフォルトの名無しさん :2005/07/07(木) 20:23:26
>>254 右から数えてposは0からでお願いします
258 :
148 :2005/07/07(木) 23:16:49
すみません、148です。「線形リスト」と「サンプルコード」でググってみましたが サンプルコードが載っているサイトが見つかりません。なんてググればいいでしょうか? それと、線形リストじゃなくて配列ではできないでしょうか?
>>258 大量にあるが・・・ ってか何がしたいのよ?
そもそも配列は挿入したり削除したりって風には出来てないわけで
やるなら挿入or削除する度にそれ以降を全て一個ずつずらす必要が有るわけで
出来なくはないだろうけど無駄
260 :
148 :2005/07/07(木) 23:31:18
ええっ?なんてググったんですか?自分のググり方が悪いのかな・・・・・ 無駄なんはなんとなくわかりますけど、多分配列の勉強って意味で そういう課題を出されたんだと思います。
>>259 漏れも真っ先に線形リストを想像したが、受け答えを見ていると、これってマジで配列で
void insertInto(int *array, int length, int index, int value)
とかいう関数定義させて、その中で array[index+1] ← array[index] みたいに直で要素の値を
移動して array[index] = value とかするのが、このアホな問題を考えた先生の目論見
なんではないかね。
問題としては下の下なんだが、こんな認識で会っているのかな?
>>260
>>261 >こんな認識で会っているのかな?
誰と?
263 :
148と260 :2005/07/07(木) 23:56:30
たぶんそれですね。うちの先生たぶんあほなんで。こないだなんか自分が作るん いっぱい×2なプログラムを問題にしてきましたからね。
266 :
148と260 :2005/07/08(金) 00:17:06
264さん、こんなん出ました・・・・・ hairetu2.cpp: エラー E2034 hairetu2.cpp 41: 'void *' 型は 'array_t *' 型に変換できない(関数 array_alloc(unsigned int) ) エラー E2034 hairetu2.cpp 42: 'void *' 型は 'int *' 型に変換できない(関数 array_alloc(unsigned int) ) エラー E2034 hairetu2.cpp 55: 'void *' 型は 'int *' 型に変換できない(関数 array_realloc(array_t *,unsigned int) ) エラー E2268 hairetu2.cpp 81: 未定義の関数 'memmove' を呼び出した(関数 array_insert_to(array_t *,unsigned int,int) ) エラー E2268 hairetu2.cpp 101: 未定義の関数 'memmove' を呼び出した(関数 array_remove_at(array_t *,unsigned int) ) 警告 W8004 hairetu2.cpp 103: 'src' に代入した値は使われていない(関数 array_remove_at(array_t *,unsigned int) ) 警告 W8060 hairetu2.cpp 122: おそらく不正な代入(関数 main() ) 警告 W8060 hairetu2.cpp 140: おそらく不正な代入(関数 main() ) *** 5 errors in Compile *** どうしてでしょう? もしかして。.cで保存しなきゃだめですか?
>>266 C言語なんだから、拡張子は.cで。
あと、一番最初の行にこれ追加
#include <memory.h>
memmove()てstdc的には<string.h>だろ
C言語の未解決問題ってどれ? いや、今日は眠れそうにないので。
じゃ、フレーム問題
[1] 授業単元:プログラミング及び演習 [2] 問題文(含コード&リンク): 100マス計算もどきを表示せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月8日12時まで おねがいします。
>>273 コンソールに?それともプリンターにGDI使って?
DOS窓上でです。
>>274 コンソールにです。
どうかお願いします。
>>273 #include <stdio.h>
#include <stdlib.h>
int main() {
int col[10], row;
int i, j;
printf(" |");
for (i = 0; i < 10; i++) {
col[i] = (rand() % 10);
printf(" %2d", col[i]);
}
printf("\n");
for (i = 0; i < 10; i++) {
row = rand() % 10;
printf(" %2d|", row);
for (j = 0; j < 10; j++) {
printf(" %2d", col[j] + row);
}
printf("\n");
}
}
279 :
デフォルトの名無しさん :2005/07/08(金) 02:58:48
C言語でマインスイーパーフラッグ(爆弾を見つけていくGame)を作っています。 一人専用でコンピューターと戦うようにプログラムしたいです。 7月12日が締め切りなんです。 環境:UNIX、コンパイル なお、爆弾を見つけたらポイントが入るようにしたいです。 最初に1PLayerがマスと爆弾の数を決めれるようにしたいんです。 ほんとにお願いしたいです!
>>279 GUIで開発せなあかんの?
それだと面倒だなー。
マインスイーパーのコンピュータ対戦って、 コンピュータは何するんだ?
[1] 授業単元: プログラミングT [2] 問題文(含コード&リンク): 配列 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月8日5:00まで [5] その他の制限:すいません。明日までの宿題を今更聞かせていただきます。 2!〜100!までを順に表示するプログラムで ・再帰は使用不可 ・オーバーフローを考慮し、100!の約200桁を数桁ごとに分けて配列で考える、 もしくは一桁ごとに考え200個の配列を使う。 ・使えるもの:if for while switch 配列
283 :
デフォルトの名無しさん :2005/07/08(金) 03:50:30
1] 授業単元:計算機アーキテクチャー [2] 問題文(含コード&リンク): CPUの乗算シュミレートのプログラムです。 うまくいかないので、修正をお願いします。 [3] 環境 [3.1] OS:xp [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月11日21:00まで 1] 授業単元: プログラミングT [2] 問題文(含コード&リンク): 配列 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月8日5:00まで #include<stdio.h> main(void) { int PC = 0, AccA = 0, Reg1 = 0, Reg2 = 0, MWR = 0, MRR = 0; int MAR = 0,IR = 0, mPC = 0, Bus = 0,i = 0; int Mem[]={0x00B6,0x0014,/*LDAA命令*/ 0x00BB,0x0016,/*ADDA命令*/ 0x0027,0x0004,/*JEQZ命令*/ 0x00B6,0x0016,/*LDAA命令*/ 0x00BB,0x0014,/*ADDA命令*/ 0x00B7,0x0016,/*STAA命令*/0x00B6,0x0015,/*LDAA命令*/ 0x00B0,0x0017,/*SUBA命令*/ 0x00B7,0x0015,/*STAA命令*/ 0x00B8,0x0004,/*JUMP命令*/ 0x0005,0x0004,/*掛けられる数と掛ける数*/ 0x0000,0x0001,/*答え格納場所と回数を数えるために引く値*/ };
284 :
デフォルトの名無しさん :2005/07/08(金) 03:51:50
続きです int CPU[26][21] = {{0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0},/*フェッチサイクル*/ {0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0}, {1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0}, {0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,0,0}, {0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0}, {1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0},/*LDAA命令*/ {0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0}, {0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0},/*STAA命令*/ {0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0},/*ADD命令*/ {0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0}, {0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0}, {0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1}, {0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0},/*JEQZ命令*/ {0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0},/*SUBA命令*/ {0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0}, {0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0}, {0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0}, {0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0}, {0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0},};/*JUMP命令*/
285 :
デフォルトの名無しさん :2005/07/08(金) 03:53:42
続きその2 while(1) { if(CPU[mPC][12] == 1) /* R/W = 1の時 */ { if(CPU[mPC][13] == 1) /* MAE = 1の時 */ { MRR = Mem[MAR]; /* MRR ← Mem[MAR]*/ printf("MRR = %x Mem[MAR]→MRR\n",MRR); } } else { Mem[MAR] = MWR; /* Mem[MAR] ← MWR */ printf("Mem[MAR] = %d MWR→Mem[MAR]\n",Mem[MAR]); } /* Gate信号 */ if(CPU[mPC][2] == 1) /* GatePC = 1の時 */ { Bus = PC; /* Bus ← PC */ printf("Bus = %x PC→Bus\n",Bus); } if(CPU[mPC][4] == 1) /* GateAccA = 1の時 */ { Bus = AccA; /* Bus ← AccA */ printf("Bus = %d AccA→Bus\n",Bus); } if(CPU[mPC][7] == 1) /* GateReg2 = 1の時 */ { Bus = Reg2; /* Bus ← Reg2 */ printf("Bus = %d Reg2→Bus\n",Bus); } if(CPU[mPC][10] == 1) /* GateMRR= 1の時 */ { Bus = MRR; /* Bus ← MRR */ printf("Bus = %x MRR→Bus\n",Bus); }
286 :
デフォルトの名無しさん :2005/07/08(金) 03:57:26
続きその3 /* Inc,Load信号 */ if(CPU[mPC][0] == 1) /* IncPC = 1の時 */ { PC = PC +1; /* PCの値を1増やす */ printf("PC = %x PC+1→PC\n",PC);} if(CPU[mPC][1] == 1) /* LoadPC = 1の時 */ { PC = Bus; /* PC ← BUS */ printf("PC = %x Bus→PC\n",PC); } if(CPU[mPC][3] == 1) /* LoadAccA = 1の時 */ { AccA = Bus; /* AccA ← BUS */ printf("AccA = %d Bus→AccA\n",AccA); } if(CPU[mPC][5] == 1) /* LoadReg1 = 1の時 */ { Reg1 = Bus; /* Reg1 ← BUS */ printf("Reg1 = %x Bus→Reg1\n",Reg1); } if(CPU[mPC][6] == 1) /* LoadReg2 = 1の時 */ { if(CPU[mPC][19] == 1) { Reg2 = Reg1 + Bus; /* Reg2 ← BUS */ printf("Reg2 = %d Reg1+Bus→Reg2\n",Reg2); } else { Reg2 = Bus - Reg1; /* Reg1 ← BUS */printf("Reg2 = %d Bus-Reg1→Reg2\n",Reg2); }} if(CPU[mPC][8] == 1) /* LoadMWR = 1の時 */ { MWR = Bus; /* MWR ← BUS */printf("MWR = %d Bus→MWR\n",MWR); } if(CPU[mPC][11] == 1) /* LoadMAR = 1の時 */ { MAR = Bus; /* MAR ← BUS */printf("MAR = %x Bus→MAR\n",MAR); } if(CPU[mPC][14] == 1) /* LoadIR = 1の時 */ { IR = Bus; /* IR ← BUS */printf("IR = %x Bus→IR\n",IR); }
>>282 #include <stdio.h>
#define DIGITS_MAX 200
int main() {
unsigned char digits[DIGITS_MAX], endPos = 0;
int i, j, num, mul, pos, tmpAns, carry;
digits[0] = '1';
for (i = 2; i <= 100; i++) {
num = i; carry = 0; tmpAns = i / 10;
for (pos = 0, tmpAns = i; tmpAns != 0; tmpAns /= 10, pos++);
while (--pos >= 0) {
mul = i;
for (j = 0; j < pos; j++, mul /= 10);
for (j = pos; j <= endPos; j++) {
tmpAns = (digits[j] - '0') * mul + carry;
carry = tmpAns / 10;
digits[j] = '0' + (tmpAns % 10);
}
while (carry != 0) {
digits[++endPos] = '0' + (carry % 10);
carry /= 10;
}
}
printf("%d! = ", i);
for (j = endPos; j >= 0; j--) {
printf("%c", digits[j]);
}
printf("\n");
}
}
288 :
287 :2005/07/08(金) 04:55:31
> unsigned char digits[DIGITS_MAX], endPos = 0; > int i, j, num, mul, pos, tmpAns, carry; は unsigned char digits[DIGITS_MAX]; int i, j, num, mul, pos, tmpAns, carry, endPos = 0; と直してくれい。
289 :
266 :2005/07/08(金) 05:36:00
267さん、実行したらエラーはなくなり、 hairetu2.c: 警告 W8060 hairetu2.c 123: おそらく不正な代入(関数 main ) 警告 W8060 hairetu2.c 141: おそらく不正な代入(関数 main ) という警告だけ残りました。とりあえず警告なんで無視しても実行はできたんですけど 自分が何も入力しなくてもプログラムがひとりで勝手に作業して終了します。 こちらが入力してはじめて動くようにできないでしょうか?
>>279 マインスイーパーの簡略版ならゼロから学ぶC++のP158に載ってるよ
もちろんC++だけどな
291 :
290 :2005/07/08(金) 06:11:37
>>283 何がうまくいかないのか分からんし、
内容についてアドバイスを求めるには情報が少なすぎる。
>>283 ・長いファイルはアップローダーを使え。
・これで全部なら重要な命令が足りない。
294 :
デフォルトの七資産 :2005/07/08(金) 11:06:32
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 暦の年号を西暦に変換するプログラムを作成せよ。 ヒント(西暦=明治:m+1867、大正:t+1911、昭和:s+1925、平成:h+1988) また、列挙体(enum)を用いた方法でも作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5 [3.3] 言語:C [4] 期限:12:00まで [5] できるだけ簡単におねがいします。
295 :
168 :2005/07/08(金) 11:18:59
>294 暦とそれに続く年の入力形式はどんなの? "meiji10"or"明治10年"等などあるから指定してもらいたいんだけど
>>294 こういう未定義な問題はスルーされるぞ。せめて入出力例くらいは書こうな。
最近こういうヤシが多い・・・頭の質を問われてると思って、問題文を書いて欲しい。
つか今日の12時までかよ(まさか深夜0時ことじゃあるまいな)。
297 :
デフォルトの七資産 :2005/07/08(金) 11:37:09
やばい・・どなたかお願いします。。
298 :
デフォルトの名無しさん :2005/07/08(金) 11:38:40
お願いします。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): VBからコールバック関数を引数として呼び出され、 コールバック関数の引数として文字列をVBに返却する 単純なVC++DLLを作成せよ。 [3] 環境 [3.1] OS:Windows/Linux/等々 Windows(XP) [3.2] コンパイラ(バージョン): Microsoft VisualStudio 6.0 [3.3] 言語:C/C++/どちらでも可 のいずれか どちらでも可 [4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 2005/07/11 10:00 [5] その他の制限:どこまで習っているか、等々 文字列ではない普通の値(long)などを渡すDLLは作成済み 特に制限事項はなし
299 :
298 :2005/07/08(金) 11:44:30
VB側のプログラム例 ' DLLの定義 Public Declare Function setCallBack Lib "sample.dll" (ByVal proc As Long) As Long ' コールバック関数 Public Sub echoCallBack(ByVal str As String) frm_Main.txt_status.Text = frm_Main.txt_status.Text & str & vbCrLf End Sub ' コールバック関数登録 Private Sub cmd_SendData_Click() Dim ret As Long ' データ送信コマンド呼び出し ret = setCallBack(AddressOf echoCallBack) End Sub
>>298 それは流石にC/C++の宿題とはいえないだろう……
・VBからコールバック関数を引き数として受け取る
・DLLからそのコールバック関数を呼び出す
この2点を調べるの位やって欲しいし、それが判れば自分で書けるだろう?
302 :
デフォルトの七資産 :2005/07/08(金) 11:54:10
年号を入力してください。 例 昭和45年 → s 45 (入力:h 12) (表示→)西暦2000年です。
#include <stdio.h> int main(void) { int a,b,c; printf("元号を選、数字で入力しろ\n1:大正 2:明治 3:昭和 4:平成\n"); scanf("%d",&a); if(a <1|| a >5){ printf("変なキー押すな\n"); goto enari; } else { printf("年を入れ\n"); scanf("%d",&b); if(a == 1){ c = a + 1867; printf("大正%d年は%d年\n",b,c); } else if(a == 2){ c = a + 1911; printf("明治%d年は%d年\n",b,c); } else if(a == 3){ c = a +1925; printf("昭和%d年は%d年\n",b,c); } else if(a == 3){ c = a +1988; printf("平成%d年ha%d年\n",b,c); }}enari: return 0;}
>>303 ww
列挙体(enum)を用いた方法でも作成せよ。
せめてswitch case、できれば配列……
もう12時のデッドライン過ぎたw
#include <stdio.h> enum{meiji=1867,taisho=1911,showa=1925,heisei=1988}; int main(void) { int a,b,c; printf("元号を選、数字で入力しろ\n1:大正 2:明治 3:昭和 4:平成\n"); scanf("%d",&a); if(a <1|| a >5){ printf("変なキー押すな\n"); goto enari; } else { printf("年を入れ\n"); scanf("%d",&b); if(a == 1){ c = a + meiji; printf("明治%d年は%d年\n",b,c); } else if(a == 2){ c = a + taisho; printf("大正%d年は%d年\n",b,c); } else if(a == 3){ c = a +showa; printf("昭和%d年は%d年\n",b,c); } else if(a == 3){ c = a +heisei; printf("平成%d年ha%d年\n",b,c); }} enari: return 0;}
309 :
デフォルトの七資産 :2005/07/08(金) 12:02:43
>>308 うぉ!気づいてからのタイムラグ考えると仕事はええぇ
311 :
デフォルトの七資産 :2005/07/08(金) 12:04:18
これの3番です。 夏休みの宿題になったみたいでうれしいです^−^w
>>309 username と password を要求されるんだが
頭おかしいんじゃねえか?おまえ
なんとなく見に行く気になれないのでパス
>>314 問題文としては素晴らしいが、
問題自体が非常につまらない。
>>314 ひたすらForでループし続ければいいんじゃねーの?
どっちにしてもつまらない
318 :
デフォルトの名無しさん :2005/07/08(金) 13:43:15
[1] 授業単元: [2] 問題文(含コード&リンク): 整数の素因数分解をする関数 factor_integer を作れ。 void factor_integer(int n, int p[]) の関数仕様 正の整数 n の素因数を小さい順に配列 p の先頭から入れて、終端記号0をつけて返す。 たとえば、 int p[100]; factor_integer(360, p); を実行すると、配列 p の内容は先頭から 2 2 2 3 3 5 0 となる。 その関数を用いて, 10285002 の素因数分解を求めよ. [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月8日24:00まで
>>318 >int p[100];
>factor_integer(360, p);
>
>を実行すると、配列 p の内容は先頭から
>2 2 2 3 3 5 0
>となる。
2 3 5 0 ではなく 2 2 2 3 3 5 0 なのね。
>>319 しまった!毎回食わせるのかもうういいやヘタれた誰か頼んだ
321 :
デフォルトの名無しさん :2005/07/08(金) 13:51:47
[1] 授業単元:pra [2] 問題文(含コード&リンク): 配列において,同一の値を持ついくつかの連続する要素を,ブロックと呼び,その要素の個数をブロックの長さと呼ぶことにする.整数型配列 data の最初から n 個の要素に値が入っているとする.この 配列のもっとも長さの長いブロック(そのようなブロックが複数個ある場合は,添え字の小さい方)の先頭要素の添え字を返す関数 int longest_block(int data[], int n) を定義せよ.たとえば, data[] = {1, 3, 1, 4, 4, 4, 1, 3, 3, 2, 2, 2, 1} のときは, 4, 4, 4 と 2, 2, 2 とがもっとも長いブロックであるが,添え字が小さい方ということで, 4, 4, 4 が選ばれ,その先頭要素の添え字 3 が関数の返す値となる. この関数を用いて,次の main を実行した結果は何か. #include <stdio.h> #include <stdlib.h> #define N 1000 main() { int data[N]; int i, m; srand(1); for (i = 0; i < N; i++) { data[i] = rand() % 10; } m = longest_block(data, N); printf("%d\n", m); } [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月8日24:00まで すいませんがおねがします。
322 :
デフォルトの名無しさん :2005/07/08(金) 13:53:26
>318 さん そうです。2223350で間違いないです。
>>321 > この関数を用いて,次の main を実行した結果は何か.
知らんがな
>>298 #include <windows.h>
#ifdef __cplusplus
extern "C" {
#endif
#define DLLEXPORT __declspec( dllexport )
#define WIN32API __stdcall
typedef void ( CALLBACK *PECHOCALLBACK )( BSTR );
typedef PECHOCALLBACK FAR LPECHOCALLBACK;
BOOL APIENTRY DllMain( HANDLE hModule, DWORD dwEvent, LPVOID lpReserved )
{
return TRUE;
}
int WIN32API setCallBack( LPECHOCALLBACK lpAddress )
{
BSTR bsOutput;
bsOutput = SysAllocString( L"Test" );
( *lpAddress )( bsOutput );
SysFreeString( bsOutput );
return 0;
}
#ifdef __cplusplus
}
#endif
325 :
324 :2005/07/08(金) 14:02:02
あぁ、書き忘れたけど、*.defファイル は自分で作ってね。
>>318 void factor_integer(int n, int p[])
{
int fa = 2;
while (n != 1) {
if (n % fa == 0) {
*p = fa;
n /= fa;
p++;
} else {
fa++;
}
}
*p = 0;
}
>>321 コンパイルできるかどうかしかチェックしてないがこれでどうよ?
int longest_block(int *data, int n) {
int *nums, i, cnt = 1, idx = 0, tmp = data[0];
nums = calloc(n, sizeof(int));
for (i = 1; i > n; i++) {
if (data[i] != tmp) {
if (!nums[cnt])
nums[cnt] = idx;
idx = i;
tmp = data[i];
cnt = 1;
} else {
cnt++;
}
}
for (i = n - 1; i >= 1; i--)
if (nums[i]) { return nums[i]; }
free(nums);
}
デバッグはしてない へんなとこがあれば適当に修正よろしく void factor_integer(int num, int *p) { int i, j; i=2; j=0; while(num!=1){ while(num%i==0&&num!=1){ p[j]=i; num/=i; j++; } i+=2-(i==2); } p[j]=0; }
void factor_integer(int n, int p[]) { int idx = 0; int factor; int work = n; while( (work & 1) == 0 ){ work >>= 1; p[idx++] = 2; } for(factor = 3; factor < sqrt(n); factor += 2){ while( work % factor == 0 ){ work /= factor; p[idx++] = factor; } } p[idx] = 0; return; }
330 :
318 :2005/07/08(金) 14:13:45
即レス感謝です^^
>>321 callocなしでやってみた。
int longest_block(int data[], int n)
{
int block_type; /* left uninitialized */
int block_length = 0;
int longest_block_length = -1;
int ret = -1;
int i;
for(i = 0; i < n; i++)
{
if(data[i] == block_type)
block_length++;
else
{
if(block_length > longest_block_length)
{
ret = i - block_length;
longest_block_length = block_length;
}
block_type = data[i];
block_length = 1;
}
}
if(block_length > longest_block_length)
ret = n - block_length;
return ret;
}
332 :
327 :2005/07/08(金) 14:18:57
試してみたら何故か常に4が帰ってくる・・・ スマソ、俺のはスルーしてくださいorz
333 :
327 :2005/07/08(金) 14:35:24
最初のループの条件をi < n、[cnt]を[cnt - 1] 何やってんだ俺・・・('A`)
int longest_block(int data[], int n) { int first, maxfirst; count, maxcount, i; first = maxfirst = 0; count = maxcount = 1; for (i = 1; i < n; i++) { if (data[i-1] == data[i]) { count++; if (count > maxcount) { maxfirst = first; maxcount = count; } } else { first = i; count = 1; } } }
[1] 授業単元: [2] リストのノードの順序を,逆順にする関数を作りなさい.next の値を変更することにより逆順にする [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月8日24:00まで
337 :
335 :2005/07/08(金) 16:25:25
>>336 引数は逆順にしたいリストの先頭のポインタで、線型リストです。
てきとーに作ってみた void inverse( node *p ) { if( (p->next)==NULL ) return; inverse( p->next ); p->next->next = p; p->next = NULL; }
>>335 前スレに全く同じ問題あった。
回答も二つ(再帰版と分割統治版)UPされてたし。
341 :
デフォルトの名無しさん :2005/07/08(金) 17:09:09
すいません… 学校の課題ででたんですけど・・・(´・ω・`)/ ポインタで入力した文字列をその配列の中で逆転するのはどうやったら いいんですか?? 問題が、課題2において、文字列へのポインタstr1を 入力し、その文字列を逆順にしたものを改めて str1が指す文字列に格納する関数reverse_str_2を 作成したうえでプログラムJuly17.cに追加し、これを 完成させなさい。 なんです。 プログラムuly17.cが #include<stdio.h> /* プロトタイプ宣言は考えること・・・ヒント:呼び出し部分を見ればわかる */ main(){ char string[100]; /* 入力する文字列(99文字までOK(なぜ99文字なのか考えること) */ printf("文字列を入力してください:"); gets(string); /* 文字列を入力 */ reverse_str2(string); /* 文字列を逆に並べる */ printf("\n\n"); /* 少しあける */ printf("逆にしたら: %s\n", string); } /* この下に関数 reverse_str2 を書いてください */ なんです。 おねがいします(><)
1] 授業単元: 課題
[2] 問題文(含コード&リンク):
n個の整数からなる配列をできる限り低速にソートするアルゴリズムを設計して実装せよ。
フェアプレイの精神を忘れないように。
つまり、処理を進行させていずれは終了するアルゴリズムでなければならず、
時間稼ぎのループのようなインチキを働く実装であってはならない。
そのアルゴリズムも計算量をnの関数として表現せよ。
教科書は
ttp://cm.bell-labs.com/cm/cs/tpop/ の日本語訳です。
[3] 環境
[3.1] OS: 標準C
[3.2] コンパイラ(バージョン): Windows/Linuxのコンパイラでコンパイルできるように
[3.3] 言語:C
[4] 期限:2005年07月15日06:30まで
[5] その他の制限:
C99の新規機能は使わないこと。
ANSI C/C++/C99のコンパイラでコンパイルできること。
>>342 出来る限り低速ならバブルソートでも組めばいいんジャマイカ?
ってか訳の分からん課題だな・・・
バブルソートって O(n^2) じゃなかったっけ?
347 :
デフォルトの名無しさん :2005/07/08(金) 17:32:21
348 :
342 :2005/07/08(金) 17:36:12
O(n^2)よりでかくしろってことなんでしょうけれど。ぬぬー。 単純ソートより効率の悪いものを作りなさいってことなんでしょうけれど・・・orz こんな問題をわざわざ課題にせんでちょ・・・。
>>347 とりあえずサーバのコードをてきとうに眺めただけだが……
1. SOCK_NAMEだのunlink(SOCK_NAME);だのはいらない
もともとUnixドメインソケットのコードか何かからコピったのだろうが
2. fd_width = fd[anum] + 1; は危険。最後にaccept()したfdが最大とは限らない。
最大のfdをたとえばfd_maxといった変数にでももっておいて
fd_max = max(fd_max, fd[anum]);
fd_width = fd_max + 1;
といった感じに書き換えろ
3. if (rl < 1) close(fd[mn]);だとか、次のif文だとかがぐちゃぐちゃ。
この条件を通る場合は下の処理に流したくないはずなのだから、
if文の中でcontinueしろ。
4. read()で読み取ったバッファの中身はヌルターミネートされている
ワケでもなければ1行分のデータと限るわけでもない。
それをそのままstrcmp()に渡すのは論外
キリがねえな。
>>342 ・最小の要素を探す
・それをピボットにしてクイックソート
352 :
342 :2005/07/08(金) 18:05:54
ありがとうございます。 O(n^(n+1)) 。。。指数にnを持ってくるとわ・・・。
353 :
347 :2005/07/08(金) 18:36:27
授業で配られたプリントにも、selectなどの関数がのってるだけで全然プログラムの組み方がわかりません・・・。 おかしなところは多々あると思いますが、どうにか動かせるようにできませんでしょうか・・・? 元のプログラムは全部変えちゃってもいいので、お願いします。
>>342 適当に二つの要素を選んで入れ替えては全部がソートされたかどうかをチェックする
プログラムはかなり遅くなると思う。
うまくいく確率を n! の全部が等確率に出現すると思って雑に計算しても、
平均停止時間は少なくとも O(n!)=O((n/e)^n)。
実際は k 手で完成する集合とか考えると完成側に吸収端があるランダムウォークに
なるから、遷移行列の確率がうまく求まればもっと悪い見積りが出ると思う。
>>354 ソートにランダムを使用するのはフェアじゃないだろw
356 :
342 :2005/07/08(金) 19:21:24
>334 ありがとうございます。 確率を使う方法は、 「処理を進行させていればいずれは停止する」という条件を満たさないと思います。 確率の考え方は面白いですね。
1] 授業単元: C言語 [2] 問題文(含コード&リンク): 配列x[5]={1.4.5.2.3}を小さい順にソートするプログラムを作成せよ。 [3] 環境 [3.1] OS:XP [3.2] コンパイラ(バージョン):VC++6.0 [3.3] 言語:C [4] 期限:明日中 [5] その他の制限:ポインタを使ってお願いします。
>>357 #include <stdlib.h>
#include <stdio.h>
int greater_int(const void *x, const void *y){return *(int*)x < *(int*)y;}
int main()
{
int i, x[5]={1,4,5,2,3};
sqort(x,5,sizeof(int),greater_int);
for(i = 0; i< 5; ++i) printf("%d ", x[i]);
putchar('\n');
return 0;
}
sqort
360 :
358 :2005/07/08(金) 20:01:57
すまん、色々間違えてる。ひどい。
訂正しました。
>>357 #include <stdlib.h>
#include <stdio.h>
int less_int(const void *x, const void *y){return *(int*)x - *(int*)y;}
int main()
{
int i, x[5]={1,4,5,2,3};
qsort(x,5,sizeof(int),less_int);
for(i = 0; i< 5; ++i) printf("%d ", x[i]);
putchar('\n');
return 0;
}
361 :
358 :2005/07/08(金) 20:03:10
greater とか less とか命名すべきではなかったね。
>>353 まずはプロトコルをどうしたいのかはっきりさせろ。
問題文に無い機能を盛り込んでないか?
問題文からはユーザのリストを取得したり(クライアント側で)ユーザを
指定して送信したりする機能が必要とは思われない。
1) クライアントからの最初の送信行はユーザ名として扱う。これは
クライアント側には返送・転送されない。
2) クライアントからの二行目以降の送信行は、先頭にユーザ名を付加して
全てのクライアントに送信される。
3) 通信終了はクライアント側からの切断にて行う。クライアントは
EOF文字を端末から入力された場合に、通信を終了する。
この程度で十分だと思うが。
これでも行指向ではあるので、クライアント毎のバッファ管理は必須だ。
stdioとselect()との併用はよろしくないので、自前でやる必要がある。
>>357 何となくだが、求められているのはこんなレベルのような気がする。
#include <stdio.h>
int main(void) {
int i, j, temp, x[5] = {1, 4, 5, 2, 3};
for (i = 0; i < 4; i++)
for (j = 0; j < 4 - i; j++)
if (x[j + 1] < x[j]) {
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
}
for (i = 0; i < 5; i++) printf("\t%d", x[i]);
return 0;
}
365 :
357 :2005/07/08(金) 21:03:33
>>363 その通りです・・・ありがとうございます。
for文を用いてというのを言い忘れました。
360さんもありがとうございました。
>>365 ポインタ使うの忘れてた。
#include <stdio.h>
void sort(int* x, int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++)
for (j = 0; j < n - 1 - i; j++)
if (x[j + 1] < x[j]) {
temp = x[j];
x[j] = x[j + 1];
x[j + 1] = temp;
}
}
int main(void) {
int i, x[5] = {1, 4, 5, 2, 3};
for (i = 0; i < 5; i++) printf("\t%d", x[i]);
printf("\n");
sort(x, 5);
for (i = 0; i < 5; i++) printf("\t%d", x[i]);
return 0;
}
368 :
デフォルトの七資産 :2005/07/08(金) 21:41:47
303>ありがとうございます。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 暦の年号を西暦に変換するプログラムを列挙体(enum)を用いた方法で作成せよ。 ヒント(西暦=明治:m+1867、大正:t+1911、昭和:s+1925、平成:h+1988) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5 [3.3] 言語:C [4] 期限無 [5] できるだけ簡単におねがいします。 列挙体(enum)のもお願いできますか。 BY 昨日の電車男で2chの人大好きになりましたデフォルトの七資産でした。w
BY 昨日の電車男で2chの人大好きになりましたデフォルトの七資産でした。w
>>371 #include<stdio.h>
int main(void)
{
for (;0;) for (;0;);
return printf("-++++\n*-+++\n**-++\n***-+\n****-\n"), 0;
}
>>371 #include <stdio.h>
int main()
{
int n, x, y;
scanf("%u", &n);
for(y = 0; y < n; ++y)
{
for(x = 0; x < n; ++x)
{
if( x > y ) putchar('*');
else if( x < y ) putchar('+');
else putchar('-');
}
putchar('\n');
}
return 0;
}
374 :
373 :2005/07/08(金) 23:23:25
* と + が逆だった。入れ替えておいてくれ。
>2.要素数10のstdata構造体の配列を差s区政し、 >合計得点以外の適当なデータを入力できるようにせよ。 これの意味がわからん。
作成し→差s区政し
馬鹿には質問してませんから。
生徒数は10人という設定にして stdata構造体の配列を作成する。 そして生徒一人につき1つ何でもいいからデータを 入れられるようにすればいいようです。 いろいろミスが多くて申し訳ありませんでした
何でもって何?
>>375 #include <stdio.h>
/* 1 */
struct stdata { int no, char name[11]; int score[5];}
/* 2 */
struct stdata g_data1[10];
int set_data(int index, int no, char *name, int score[4])
{
if( index < 0 || index > 11) return 0;
else
{
struct stdata *p = g_data[index];
p->no = no;
strncopy(p->name, name, 10);
memmove(p->score+1, score, sizeof(int)*4);
return 1;
}
}
/* 3 */
void goukei(struct stdata *astdata)
{
if( astdata != NULL )
{
int i;
astdata->score[0] = 0; /* score[0] に合計点 */
for(i = 0; i < 4; ++i) astdata->score[0] += astdata->score[i];
}
}
#include <stdio.h> じゃなかった、 #include <string.h> ね。
strncpy()は'\0'終端されるとは限らないかなり変態的仕様の関数なので 使わないほうが良いぞ。
コンパイルできないので書き直し。 #include <string.h> /* 1 */ struct stdata { int no; char name[11]; int score[5];}; /* 2 */ struct stdata g_data[10]; int set_data(int index, int no, char *name, int score[4]) { if( index < 0 || index > 11) return 0; else { struct stdata *p = &g_data[index]; size_t len = strlen(name); p->no = no; memmve(p->name, name, 10); p->name[len > 11 ? 11 : len] = '\0'; memmove(p->score+1, score, sizeof(int)*4); return 1; } } /* 3 */ void goukei(struct stdata *astdata) { if( astdata != NULL ) { int i; astdata->score[0] = 0; /* score[0] に合計点 */ for(i = 0; i < 4; ++i) astdata->score[0] += astdata->score[i]; } }
>>384 memmve()とかいうなぞの関数を使っているので
たぶんそれもコンパイルできないぞ
/* 動的確保 */ struct stdata *create_stdata(size_t n){return malloc(n * sizeof(struct stdata)); }
それと、strncpy()は素人には危険な代物だが strncat()はそうでもないので、そっちを使うとよい。 先頭に\0セットしてからstrncat()すれば、望みの結果を得られる。
>>375 >>381 が苦労してるみたいなのでうp
#include <stdio.h>
struct stdata {int no; char name[10]; int point[5]; };
void goukei(struct stdata * astdata) {
int i;
for (i = 0; i < 4; ++i) astdata->point[4] += astdata->point[i];
}
int main(void) {
struct stdata data[10] = {0};
int i, j;
for (i = 0; i < 2; ++i) {
scanf("%d%9s", &data[i].no, data[i].name);
for (j = 0; j < 4; ++j) scanf("%d", &data[i].point[j]) ;
goukei(&data[i]);
}
return 0;
}
389 :
384 :2005/07/09(土) 00:05:48
× if( index < 0 || index > 11) return 0; ○ if( index < 0 || index > 9) return 0; × memmove(p->name, name, 10); ○ memmove(p->name, name, len > 10 ? 10 : len); 失礼しました。
>>372 >>373 ありがとうございます。助かりました。
一晩中考えてたんですが全く分からなくて・・・。
しかし早いですねぇ。
391 :
デフォルトの名無しさん :2005/07/09(土) 00:10:16
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
次のプログラムを実行してブラウザで表示させんですが、ブラウザを開くと
真っ白のページしかでてきません。コンパイラ時点でエラーは無いですι(´Д`υ;)
http://tokyo.cool.ne.jp/k-12/ [3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C言語
[4] 期限:今日まで(すみません(´Д`;))
[5] その他の制限:本当基礎しか教わってません。
簡単な説明お願いします(´・ω:;.:...
>>391 ブラウザは自分では実行せず、z.htmlという名前のファイルをカレントディレクトリ
に作ってその中に出力するだけのようだが
そのファイルの中身はどうなってるのかね?空か?
393 :
375 :2005/07/09(土) 00:14:42
>>375 さらにの方。mainだけ掲載。他は同じ
int main(void) {
struct stdata * data;
unsigned int n, i, j;
scanf("%u", &n);
data = malloc(sizeof(struct stdata) * n);
for (i = 0; i < n; ++i) {
scanf("%d%9s", &data[i].no, data[i].name);
for (j = 0; j < 4; ++j) scanf("%d", &data[i].point[j]) ;
goukei(&data[i]);
}
free(data);
return 0;
}
>>388 俺もミスってる
× for (i = 0; i < 2; ++i) {
○ for (i = 0; i < 10; ++i) {
ここだな × strcat(w, "<title>HP<title>\n"); ○ strcat(w, "<title>HP</title>\n");
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): #define N 10 int main(void) { int aa[N], bb; bb = sum(aa); printf("sum=%d\n",bb); return 0; } int sum(int num[N]) { int n, s=0; for(n=0;n<N;n++) s+=num[n]; return s; } ↑これを修正し、double型の配列変数に格納されている値の平均値を求める関数ave を作成せよ。またaveもdouble型とする。 [3] 環境 [3.1] OS:UNIx [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年7月11日まで [5] その他の制限:まだ入門編というところでしょうか
>int aa[N], bb; 氏ね
>>397 入門編どころの騒ぎじゃないな
int → double
後は書式指定子
>397 >[3.1] OS:UNIx おちゃめだな
#define N 10 int main(void) { double array[N], average; average = ave(array); printf("sum = %g\n", average); return 0; } double sum(double a[]) { int i; double s = 0; for(i = 0; i < N; i++) s += num[i]; return s; } double ave(double a[]) { return sum(a) / N; }
403 :
391 :2005/07/09(土) 00:30:36
404 :
333 :2005/07/09(土) 00:55:05
学校の宿題なのですが... 「足し合わせると1000になるような二つの素数の組を全て求めるプログラムをつくる」っていうものなのですが全然わかりません...教えてください。
[1] 授業単元:構造体 [2] 問題文(含コード&リンク): あるファイル(seiseki.txt)を読み込んで、各生徒ごと・各科目ごと それぞれの合計点・平均点・最高点を求めよ。 プログラムに、構造体を用いる事。 [3] 環境 [3.1] OS:Unix [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月11日まで [5] その他の制限: 「seiseki.txt」の中身は下記の通りです。 1番左のアルファベットは名前で、次の列から順番に 英語、数学、国語、理科、社会の点数を示しています。 A 70 56 66 45 88 B 66 85 68 55 73 C 55 65 53 67 55 D 85 72 76 58 65 E 92 70 45 73 55 F 56 57 52 62 82 G 72 62 33 85 95 H 46 95 48 72 34 I 83 42 88 92 56 J 68 65 91 82 66
>>404 一組しかないっぽ。
#include <stdio.h>
#include <math.h>
#define N 1000
int main()
{
static int buf[N];
int i,j;
for(i = 2; i < sqrt(N); ++i)
{
if( buf[i] ) continue;
for(j = i+i; j < N; j += i) buf[j] = 1;
}
for(i = 2, j = 0; i < N; ++i)
{
if( buf[i] ) continue;
buf[j++] = i;
}
buf[j] = 0;
i = 0;
while( i <= j )
{
if( (buf[i] + buf[j]) == N) printf("%u %u\n", buf[i], buf[j]);
++i; --j;
}
return 0;
}
407 :
333 :2005/07/09(土) 01:58:14
ありがとうございますm(__)m
ごめん間違ってる。
409 :
406 :2005/07/09(土) 02:07:56
最後のwhileブロックを、これに代えてくれ。 力技だ。 for( i = 0; buf[i]; ++i) for(j = i; buf[j]; ++j) if((buf[i]+buf[j])==N) printf("%u %u\n", buf[i], buf[j]); return 0;
410 :
406 :2005/07/09(土) 02:22:30
別バージョン。bsoearchを使ってみた。 #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 1000 int cmp_int(const void *a, const void *b){ return *(int*)a - *(int*)b;} int main() { static int buf[N]; int i,j,*p, key, save; for(i = 2; i < sqrt(N); ++i) { if( buf[i] ) continue; for(j = i+i; j < N; j += i) buf[j] = 1; } for(i = 2, j = 0; i < N; ++i) if( !buf[i] ) buf[j++] = i; buf[j] = 0; save = N; for(i = 0; buf[i] < save; ++i) { key = N - buf[i]; if(NULL != (p = bsearch(&key,buf, j, sizeof(int), cmp_int))) { printf("%d %d\n", buf[i], *p); save = *p; } } return 0; }
>>404 #include <stdio.h>
int is_prime(int n)
{
int i;
if (n < 2)
return 0;
for (i = 2; i < n; i++)
if ((n % i) == 0)
return 0;
return 1;
}
int main(void)
{
int i;
for (i = 2; i < 500; i++) {
if (is_prime(i) && is_prime(1000-i))
printf("%d %d\n", i, 1000-i);
}
return 0;
}
412 :
1/2 :2005/07/09(土) 02:48:57
>>405 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFMAX 512
#define DELIMITER " "
typedef struct _Person {
char *name;
int total;
}Person;
int line_sum( FILE *fp ) {
char buf[BUFSIZ];
int line = 0;
for ( ; fgets( buf, BUFMAX, fp ); line++ ) { }
if ( strchr( buf, '\n' ) != NULL ) line--; // 改行で終わっていたら
return line;
}
413 :
2/2 :2005/07/09(土) 02:50:47
int main( int argc, char *argv[] ) { FILE *fp; char buf[BUFSIZ]; char *p; int before_total = 0, i; int id,no,line; // 一番大きかった人の 番号が id に入る Person *p_person; fp = fopen( "seiseki.txt", "r" ); if ( fp == NULL ) { fprintf( stderr, "file not found" ); return 1; } line = line_sum( fp ); p_person = (Person*)calloc( line, sizeof( Person ) ); fseek( fp, 0L, SEEK_SET ); for ( no = 0; no < line; no++ ) { fgets( buf, BUFMAX, fp ); if ( strchr( buf, '\n' ) != NULL ) *strchr( buf, '\n' ) = '\0'; p_person[no].name = strtok( buf, DELIMITER ); printf( "%s さん :" ,p_person[no].name ); for ( i = 0; (p = strtok( NULL, DELIMITER )) != NULL; i++ ) { printf( " %s " ,p ); p_person[no].total += atoi( p ); }
printf( " 合計点:%d 平均点:%.2lf \n" ,p_person[no].total ,(double)p_person[no].total / i ); if ( p_person[no].total > before_total ) { before_total = p_person[no].total; // 前回の結果を残す id = no; } } printf( "\n最高得点は %s さんの %d 点でした" ,p_person[id].name ,p_person[id].total ); fclose( fp ); free( p_person ); return 0; }
415 :
412 :2005/07/09(土) 02:56:26
>>405 if ( strchr( buf, '\n' ) != NULL ) line--; // 改行で終わっていたら
ここいらないや。削除しといてください。
struct 使う必要性があまりなかったので、無理に使ってコードが長くなってしまった・・・
すみません。
なんか成績集計の問題が多いな…… なんでわざわざCでそんなことやらなあかんのじゃ 出題者の発想の貧困の表れか
授業→レポートという責め苦を与える中で、C言語を用いたのでしょう。 別に数学だろうが三角木馬だろうが何でも良いんじゃ?
418 :
デフォルトの名無しさん :2005/07/09(土) 03:21:36
じゃあ、もまい達が先生ならどんな問題だすんだ?
Cで成績集計させる
cursesでスネークゲームを作らせる。 ……それなりに面白いと思うんだが。
私も縛って鞭で責めつつCで成績集計させる
私なら、ヒストグラム作らせるな。 1行1データの入力にしておけばパイプラインを組み合わせて色々できるしね。
int is_prime(int n) { int i; if (n < 2) return 0; for (i = 2; i < n; i++) if ((n % i) == 0) return 0; return 1; } ↓ if (n < 2) return 0; if (n%2==0) return 1; for (i = 3; i < n/2; i+=2) if ((n % i) == 0) return 0; return 1;
>if (n%2==0) return 1; はぁ?
>412 >struct 使う必要性があまりなかったので >405 >1番左のアルファベットは名前で、次の列から順番に >英語、数学、国語、理科、社会の点数を示しています。 もれなら #define NUM_OF_SUB 5 struct _Person { char name[NAME_LEN]; int sc[NUM_OF_SUB+1]; /* +1は合計の分 */ } だな >typedef struct _Person { >char *name; >int total; >}Person;
426 :
354 :2005/07/09(土) 13:06:21
古い話ですが……
>>356 「確実に止まる」は満たしてないですが、「確率1で止まる」ことになるので、
それほど題意を曲げているわけではないですよ。
擬似乱数を使っている限り無限ループの可能性があるわけだが。
何回で必ず停止する。 何回以内に必ず停止する。 ならOKだと思うが、 何回操作しても停止しない可能性がある。 というのはダメだと思う。 さて、次のプログラムは必ず止るといえるか? while (rand() % 10 == 0) ;
という宿題?
430 :
デフォルトの名無しさん :2005/07/09(土) 15:29:20
俺様が生きている間に止まらないプログラムは止まらないプログラムだな。
じゃ、ここで「半永久ループ」「半無限ループ」という用語を提案してみようか。
430 は余命一週間もないらしい。
434 :
デフォルトの名無しさん :2005/07/09(土) 18:15:05
[1]C言語 コンパイgcc Linux [2]期限 7月12日火曜日(午後5時 [3]どうかよろしくおねがいしますorz 会員番号 氏名 性別 生年月日 1 Noriko ITAKURA F 1983 7 25 2 Akemi UTSUNOMIYA F 1990 10 14 3 Hideki KINUGASA M 1987 9 16 4 Tomoko KISAKI F 1975 10 14 5 Takuya UMEMOTO M 1975 10 16 6 Jun-ichi AKAMATSU M 1982 3 16 7 Nobuta NONI M 1988 12 29 8 Shizuka MINOMOTO F 1989 1 9 会員 第一ピリオド 第二ピリオド 第三ピリオド 番号 ゲーム数 ゲーム数 ゲーム数 #1 #2 #3 #4 #5 #1 #2 #3 #4 #5 #1 #2 #3 #4 #5 1 6 3 5 7 9 8 8 5 2 0 3 7 6 5 2 2 1 2 4 7 10 10 10 3 7 10 5 7 7 8 9 3 2 4 2 5 2 1 8 10 3 6 6 7 6 8 5 4 5 8 0 10 0 9 8 9 10 10 5 5 5 3 5 5 1 2 3 4 5 6 7 8 9 10 9 8 7 9 5 6 8 8 4 8 3 6 7 2 8 6 8 9 8 2 0 7 6 6 1 6 6 1 6 7 4 9 1 8 10 5 3 8 7 3 4 7 2 8 9 7 3 2 4 5 10 9 7 上記ファイルmember_data.dat を読み込み会員氏名、生年月日、性別をソート表示するとともに、それらを各自のホームディレクトリ(またはカレントディレクトリにASCII形式で保存するプログラムを作成し、実行しなさい なお、このプログラムでも構造体struct club_dt に対する構造体変数はグローバルとして宣言しないこと
435 :
デフォルトの名無しさん :2005/07/09(土) 18:15:57
<処理の流れ> @ファイル読み込みに関してはload()なる関数を定義し、その内部で実行させること (fread()関数を用いよ) Aメニューを表示し、氏名によるアルファベット順ソートか生年月日による年齢順ソートかを選ばせる、適切な入力がなされるまで繰り返しメニュー表示を繰り返させること <メニュー例> MENU 1.Sorting in alphabetical order/2.Sorting in order of age. Please input number: アルファベット順ソートに関してはsort_al()なる関数を定義し、その内部でソート実行。表示。保存させる。ただし、ソートは会員の姓に基づき実行し、表示は氏名性別生年月日の順とする。保存時のファイル名は"member_data_al.dat"とすることゲーム成績は保存しなくてよい <ソート結果、保存ファイル内容例> Jun-ichi AKAMATSU M 1982 3 16 Noriko ITAKURA F 1983 7 25 Hideki KINUGASA M 1987 9 16 Tomoko KISAKI F 1975 10 14 Shizuka MINOMOTO F 1989 1 9 Nobuta NONI M 1988 12 29 Takuya UMEMOTO M 1975 10 16 Akemi UTSUNOMIYA F 1990 10 14 年齢順ソートに関してはsort_age()なる関数を定義し、その内部でソート実行・表示・保存させる。ただし、ソートは結果が高齢順となるようにし、表示は氏名性別生年月日の順とする。保存時のファイル名は" member_data_age.dat"とすることゲーム成績は保存しなくてよい <ソート結果、保存ファイル内容例> Tomoko KISAKI F 1975 10 14 Takuya UMEMOTO M 1975 10 16 Jun-ichi AKAMATSU M 1982 3 16 Noriko ITAKURA F 1983 7 25 Hideki KINUGASA M 1987 9 16 Nobuta NONI M 1988 12 29 Shizuka MINOMOTO F 1989 1 9 Akemi UTSUNOMIYA F 1990 10 14 以上です、おねがいします(;´・ω・`A
なかなかアレな宿題ですね。
ゲーム成績は保存しなくていいってことは無視でいいの? それならちょっと飯食った後誰もやって無さそうなら練習がてら考えてみるよ
>>438 NODE *del_list(NODE deldata)
{
NODE **p;
for (p = &head; *p != NULL; p = &(*p)->next) {
if (strcmp(deldata.name, (*p)->name) == 0) {
NODE *res = *p;
*p = (*p)->next;
return res;
}
}
return NULL;
}
ごめん。修正だったね。 >if★(strcmp(deldata.name,head->name)){★//リストの先頭なら これだと「リストの先頭じゃないなら」になる。 >return ★head;★ return back; >while(★p != NULL && strcmp(deldata.name,p->name) >= 0★){ ... > 0 = があると、pが指すのが取り除くノードの次のノードになってしまう。 >★head->next= p;★ back->next = p->next;
[1]授業単元:c言語 [2]問題文: @「jrand(j)」という関数を使って{1,2,...,j}の中からn個の数をランダムに取り出し、 配列変数に記憶させ、記憶させた内容を表示させるmainプログラムを書きなさい。 Aint型配列とその大きさを入力変数として、最大値最小値を計算して返す関数プログラムを書きなさい BAを使って、@で作ったプログラムに、配列データの最大値、最小値を計算して表示するプログラムを付け加えなさい。 [3]環境 [3.1]OS:XP [3.2]コンパイラ:VC++ 6.0 [3.3]言語:C [4]期限:7/10 どうぞよろしくおねがいします。
>>441 仕様がよく分からん。nはどうやって与えるのか?
配列は大域変数でいいのかポインタで渡すのか?
443 :
441 :2005/07/09(土) 22:55:11
>>442 あ、すいません。j=10,n=2000 でお願いします。
>>443 {1...10}の中から2000個の数をねぇ・・・
445 :
438 :2005/07/09(土) 23:08:48
ありがとうございました、出来ました
446 :
1/2 :2005/07/09(土) 23:11:27
#include <stdio.h> #define N 2000 int jrand(int, int*); int maximum(int *, int); int minimum(int *, int); int main(void) { int i, src[N]; jrand(10, src); for (i = 0; i < N; i++) printf("%d\n", src[i]); putchar('\n'); printf("最大値:%d\n最小値:%d", maximum(src, N), minimum(src, N)); return 0; } //エラー時、負を返す int jrand(int j, int *buf) { int i; for (i = 0; i < N; i++) while ((buf[i] = (random() * N) % (j + 1)) <= 0); return 0; }
447 :
2/2 :2005/07/09(土) 23:11:56
//最大値を返す int maximum(int *src, int nums) { int max = src[0], i; for (i = 1; i < nums; i++) if (src[i] > max) max = src[i]; return max; } //最小値を返す int minimum(int *src, int nums) { int min = src[0], i; for (i = 1; i < nums; i++) if (src[i] < min) min = src[i]; return min; } 作ったがNとJ逆じゃないか?まぁその辺は自分で修正してくれ
>>441 最大値最小値を計算して返す関数?
けいさんってたしざん?ひきざん?二つをかえすって、いっぺんに二つ返すの?
それは引数のフラグでどちらを返すか判断するの?
もうやっちゃった人がいましたか o(>_< ) お礼忘れないようにネ!
450 :
441 :2005/07/09(土) 23:21:44
>>450 gccで普通にコンパイル通るんで見落としてたがエラー出たら
コメントをC89準拠にしてくれ
>>441 #include <stdio.h>
#include <stdlib.h>
int jrand(int j) { return rand() % j + 1; }
void max_and_min(const int * arr, int length, int * pmax, int * pmin)
{
int i;
*pmax = *pmin = arr[0];
for (i = 1; i < length; i++) {
if (*pmax < arr[i]) *pmax = arr[i];
if (*pmin > arr[i]) *pmin = arr[i];
}
}
int main(void)
{
int arr[2000];
int i, length = sizeof(arr)/sizeof(arr[0]);
int max, min;
for (i = 0; i < length; i++) {
arr[i] = jrand(10);
}
max_and_min(arr, length, &max, &min);
printf("最大値:%d, 最小値:%d\n", max, min);
return 0;
}
あ、配列の中身も表示しなきゃいけないのか。
454 :
デフォルトの名無しさん :2005/07/10(日) 00:55:05
>>454 素直にncol,nrowを使おう。12x12確保してるんだから、main内ではそれを生かすこと。
それと、エッジ作るところでは外枠が上下左右1列ずつなんだから、
確保された目盛りは12x12のままだが、10x10の処理になる。
edge_processing(11,11, &m1[1][1], &m2[1][1]);
↓
edge_processing(nrow,ncol, &m1[0][0], &m2[0][0]);
void edge_processing(int nrow, int ncol, int *m1_p, int *m2_p)
{
int i,j;
for(i=0; i<nrow; i++){
for(j=0; j<ncol; j++){
if (i > 0 && i < nrow - 1 && j > 0 && j < ncol - 1) /* 追加:応急処置 */
*m2_p=*(m1_p + (i-1) * ncol + j)+*(m1_p + (i+1) * ncol + j)+*(m1_p + i * ncol + (j-1))+*(m1_p + i * ncol + (j+1))-4**(m1_p + i * ncol + j);
m1_p++; /* 追加 */
m2_p++;
}
}
}
すまん。オオボケした m1_p++はいらん。
>>455-456 なるほど('∀`)!さっきまでfor文のiとjで回数を制限しようとしてました
if文を挿入すればよかったんですね
本当にありがとうございます
このご恩は一生忘れないでござる
>342 古い話題で申し訳ないが、整数が32bitだとすると n*2^32 ってのはどうかな?
459 :
初心者 :2005/07/10(日) 10:36:23
数値を10回連続して、結果を昇順で並べるプログラムってどんな感じにできますか?
>>459 日本語の勉強は他板でどうぞ。
C/C++の宿題なら
>>1 をよく読んでから改めてどうぞ。
461 :
初心者 :2005/07/10(日) 12:03:06
[1] 数値を10回連続して、結果を昇順で並べるプログラムってどんな感じにできますか? [2] win2000 VC++6.0 言語:C/C++/どちらでも可 [3] 期限:2005/7/10
ダメだこりゃ。
>>461 テンプレのコピペもできないのかよ・・・
しかも10回もソートすんの?しかも連続で?
for (i = 0; i < 10; i ++) qsort( ...
謎多き [1] 授業単元 だ・・・
【質問テンプレ】 [1] 授業単元: プログラミングA [2] 問題文(含コード&リンク): 数値を10回入力し、昇順でソートして表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC6 [3.3] 言語:C/C++/どちらでも可 [4] 期限:2005年7月10日18:00まで [5] その他の制限:qsortは禁止。 のように書け!!
専門知識もいいけど「日本語」を必須科目にすべきだよな、学校は。
[1] 授業単元: 日本語 [2] 問題文(含コード&リンク): 意味の通じる日本語を書きなさい。 [3] 環境 [3.1] OS:2ch [3.2] コンパイラ(バージョン): キーボード [3.3] 言語:日本語 [4] 期限:すぐとりかかること [5] その他の制限:期間はずうっと。
別に正しく日本語書けない奴がいてもいいじゃん。 俺もお前も読み書きできるんだからそれで十分じゃね?
夏休みってまだ先だよな?
>>464 #define MAX_VALUE 0x7fffffff
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
int nums[256], ans[256], tmp1, tmp2, cnt = 0;
for(int i = 0; i < argc - 1; i++){
nums[i] = atoi(argv[i + 1]);
printf("%d ", nums[i]);
}
puts("");
for(int i = 0; i < argc - 1; i++){
tmp1 = MAX_VALUE;
for(int j = 0; j < argc - 1; j++){
if(tmp1 > nums[j]){
tmp1 = nums[j];
tmp2 = j;
}
}
ans[cnt++] = tmp1;
nums[tmp2] = MAX_VALUE;
}
for(int i = 0; i < argc - 1; i++){
printf("%d ", ans[i]);
}
}
冗長
for(int j = 0; j < argc - 1; j++){ i番目までソートが終わっているのなら、jの初期値はi+1で良いのでは?
[1] 授業単元:C言語実習 [2] 問題文(含コード&リンク): 2つの自然数を入力して "*"演算子を使わずに2数の積を求めよ 負の数にも対応すること ただし、次のような符号反転のための"-"演算子も使用禁止 if (a < 0){ -a; } 引き算の"-"は使用可 [3] 環境 [3.1] OS:windows XP [3.2] コンパイラ(バージョン):Borland C++ Compiler 5.5 [3.3] 言語:C [4] 期限:2005年7月15日まで [5] その他の制限:できるだけ簡単にお願いします 単位取れるかの瀬戸際なのでお願いします。
自然数&負の数対応ってどんなんじゃい。
#include <stdio.h> int func(int a, int b) { int ret = 0; int c; if (b > 0) { for (c = 0; c < b; c++) ret += a; } else { for (c = 0; c > b; c--) ret -= a; } return ret; } int main() { int a, b, ret; scanf("%d %d", &a, &b); printf("a * b = %d \n", func(a, b)); }
>>474 すいません、負の数にも対応すると追加で点数貰えるので書いたんですが
自然数ってところを変更するの忘れてました
整数でお願いします
main のretはイラネ
>>473 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
int x, y, x2, y2, Sum = 0;
int isX_Minus = 0, isY_Minus = 0;
scanf("%d %d", &x, &y);
x2 = abs(x);
if (x < 0)
{
isX_Minus = 1;
}
y2 = abs(y);
if (y < 0)
{
isY_Minus = 1;
}
for (i = 0; i < y2; i++)
Sum += x2;
printf("%d * %d = %d\n", x, y, (isX_Minus ^ isY_Minus) ? (0 - Sum) : Sum);
return 0;
}
>>473 #include<stdio.h>
int mul(int a,int b){
int r=0;
while(a){
if(a&1)r += b;
b <<= 1;
a =(unsigned)a >> 1;
}
return r;
}
int main(){
int a,b;
scanf("%d%d",&a,&b);
printf("%d",mul(a,b));
}
しかし単位とれるかどうかの瀬戸際の課題が
>>473 かよ…
4月からはじめてるとして…10回程度講義してるとは思うんだが
どうゆう講義だったのか気になる
うーむ。FITの人に聞いてみよう。 1学期でボーヨーせんせの授業ってどこまで進むん?
>>475 ,478,479,
みなさん、ありがとうございます
まだ習っていない予約語などがありますが、なんとかできそうです
>>480 はい、10回程講義は受けています
毎回最初に1つぐらい関数の説明を受けてそれから1時間半はひたすら練習問題を解かされる感じです
まだ、if else文とelse if文とfor文とwhile文とフローチャートしか習ってません
フローチャートなんかやってるからダメなんだ。 まぁ、授業だけの問題じゃないと思うが。
>>483 アホか。
久しぶりに2chに来たが、
この板、厨房率高くなっていないか?
485 :
初心者 :2005/07/10(日) 20:58:21
みなさんいろいろ失礼しました。 [1] 授業単元: プログラミングA [2] 問題文(含コード&リンク): 数値を10回入力し、昇順でソートして表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC6 [3.3] 言語:C/C++/どちらでも可 [4] 期限:2005年7月10日18:00まで [5] その他の制限:qsortは禁止。 なるほどこういう風に書けばいいんですね!
つまんね ぺっ
>>485 #include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[256];
int a[10], i,j, tmp;
for(i = 0; i < 10; ++i)
{
a[i] = atoi(fgets(buf, sizeof(buf), stdin));
for(j = i; j > 0; --j)
{
if( a[j] < a[j-1] ){ tmp=a[j];a[j]=a[j-1];a[j-1]=tmp;}
else break;
}
}
for(i = 0; i < 10; ++i) printf("%d ", a[i]);
putchar('\n');
return 0;
}
quickソートを非再起で実装せよ という課題が出ました。 解いてください。
テ(ry
492 :
初心者 :2005/07/10(日) 21:14:04
>488さんすみません。。。申し訳ない!
493 :
初心者 :2005/07/10(日) 21:16:02
みなさんありがとうございます。ホントすみませんでした、、、ありがとうございます。
>>485 #include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
int a[10];
for(int i = 0; i < 10; ++i) std::cin >> a[i];
std::sort(a,a+10);
std::copy(a,a+10,std::ostream_iterator<int>(std::cout," "));
return 0;
}
495 :
初心者 :2005/07/10(日) 21:19:09
496 :
デフォルトの名無しさん :2005/07/10(日) 21:49:33
質問させていただきます。 cout << " xを入力してください:"; cin >> x; とまぁ普通のxの読み込みなんですが、もしxを入力する時に enterボタンだけ押したらx=2.3となるような文を作りたいんです。 この場合どうしたらいいんでしょうか? 教えてください。よろしくお願いします。
>>496 こんなんでいいだろ
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <string>
std::string str;
std::getline(std::cin, str);
double x = std::isdigit(str[0]) || str[0] == '.' ? std::atof(str.c_str()) : 2.3;
498 :
496 :2005/07/10(日) 22:20:21
>>497 ありがとうございます。
はっきり言って何かいてあるのか分かりませんが、
とりあえずコピペさせていただきます。
>>498 元のcin >> x;を497の下3行に置き換えればいい。
500 :
デフォルトの名無しさん :2005/07/10(日) 23:07:35
[1] 授業単元: C入門 [2] 問題文(含コード&リンク): (1)九九の表を作ってテキストファイルに保存せよ。 (2)(1)のテキストファイルを読み込んで最大最小を求めよ。 (3)少数点を含む任意の10個の数値をあらかじめテキストファイルに保存し、 それを読み込んでまず最大最小を求めよ。次に小さい順に並べよ。最後に それらの結果をテキストファイルに保存せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):ボーランド [3.3] 言語:C [4] 期限:2005年7月10日4:00まで (1)の表を作るところまでは出来たのですが以降よく分かりませんでした。 これからの学習の参考にしたいのでよろしくお願いします。
だったら、作った(1)もさらせや。
#define FILENAME "kuku.txt" int kuku(char *foname) { int i, j; FILE *fo; if((fo=fopen(FILENAME, "wb"))==NULL)return 0; for(i=1;i<=9;i++){ if(i==1){ fprintf(fo, "+++ 1 2 3 4 5 6 7 8 9\r\n"); } fprintf(fo, "%3d", i); for(j=1;j<=9;j++){ fprintf(fo, "%3d", i*j); } fprintf(fo, "\r\n"); } fclose(fo); return 1; } ここまで作っておいて模範解答教授にもらえよと思った。 >500は期限とか嘘の希ガス
・・・なんだこりゃ・・・。
fprintf???????????
505 :
500 :2005/07/11(月) 00:14:05
九九の表はprintfで int main(void) { printf(" 1 2 3 4 5 6 7 8 9\n"); printf("1 1 2 3 4 5 6 7 8 9\n"); printf("2 2 4 6 8 10 12 14 16 18\n"); printf("3 3 6 9 12 15 18 21 24 27\n"); printf("4 4 8 12 16 20 24 28 32 36\n"); printf("5 5 10 15 20 25 30 35 40 45\n"); printf("6 6 12 18 24 30 36 42 48 54\n"); printf("7 7 14 21 28 35 42 49 56 63\n"); printf("8 8 16 24 32 40 48 56 64 72\n"); printf("9 9 18 27 36 45 54 63 72 81\n"); return 0; } でDos窓に表示させすようにしました。参考書のファイルの入出力のところ読んですが ・・・・Dos窓に表示された結果をテキストファイルにするってのが分からなくて詰まって しまいました。
なるほど。「(1)の表を作るところまでできた」と言えなくもないな。
>>505 ま、こういうやつがいるからIDが必要って言う話になるんだろうな。
たぶん「九九の表を作ってテキストファイルに保存せよ」をプログラムでやれ ってことなんだろうな。 そうでもなければ全部手作業でできそうだし。 とりあえずfopen、fprintf使えばできるっしょ。 googleで調べてみることだな。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 簡易的なスケジュール表示を行うプログラムを、次の仕様に基づいて作成せよ。 ・ この説明資料の次の章(スケジュール管理ファイルの書式)で例1、例2に示すような、2種類のファイル(定期的スケジュールと期限付き予定リスト)をあらかじめ用意し、実行時にプログラムで読み込むこと。 ・ メニュー形式により、 1、今日のスケジュール表示(全ての期限付き予定リストの表示を含む) 2、全ての定期的な予定一覧の表示 3、全ての期限付き予定リストの表示、を繰り返し選択して実行できるようにすること。 但し、今日の年月日や曜日を取得する関数は、この説明資料の付録に示すプログラムを使用すればよい。 ・ 期限付き予定リストの表示では、プログラム実行時の日付情報を取得して、期限までの日数を付与して表示すること。 但し、期限日までの日数は当日を0として計算する。また、既に経過しているものは「期限超過」の旨だけを表示し、期限までの日数が30日を越えているものは月数(何ヵ月以上か)だけを表示すればよい。 [3] 環境 [3.1] OS:Linuxエミュ [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:2005年7月11日まで [5] その他の制限:ファイル入出力 付録については手元にあるので問題ないです スケジュールはテキストファイルとして 定期的スケジュール管理ファイルの書式は「曜日(日曜から土曜を0〜6に対応) 開始時限 終了時限 用件」 期限月予定リストは「年号 月 日 予定」 の形の行を複数の行にわたって書いておくだけのものです
510 :
初心者 :2005/07/11(月) 00:56:21
487さんに教えてもらってすみませんが、 どういうことをしてるか教えていただきませんでしょうか? 本当にすみません。 #include <stdio.h> #include <stdlib.h> int main() { char buf[256];/**/ int a[10]/**/, i,/**/j,/**/ tmp; /**/ for(i = 0; i < 10; ++i) /**/ { a[i] = atoi(fgets(buf, sizeof(buf), stdin)); for(j = i; j > 0; --j) /**/ { if( a[j] < a[j-1] )/**/ { tmp=a[j];a[j]=a[j-1];a[j-1]=tmp;/**/ } else break; } } for(i = 0; i < 10; ++i) printf("%d ", a[i]); putchar('\n'); /**/ return 0; }
>>510 結構アホ丸出しなコメント
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[256];/*入力全体を受け取る領域を確保*/
int a[10]/*数値の領域を確保*/, i/*ループカウンタ*/, j/*ループカウンタ*/, tmp/*テンポラリ変数*/;
for(i = 0; i < 10; ++i) /*10個の数値入力を受け取るループ*/
{
a[i] = atoi(fgets(buf, sizeof(buf), stdin));
for(j = i; j > 0; --j) /*新たな入力を適切な位置に格納*/
{
if( a[j] < a[j-1] )/*もしa[j]<a[j-1]ならば*/
{
tmp=a[j];a[j]=a[j-1];a[j-1]=tmp;/*a[j]とa[j-1]とを入れ替える*/
}
else break;
}
}
for(i = 0; i < 10; ++i)
printf("%d ", a[i]);
putchar('\n'); /*最後に改行*/
return 0;
}
>>509 >この説明資料の次の章(スケジュール管理ファイルの書式)で
>例1、例2に示すような、2種類のファイル(定期的スケジュールと期限付き予定リスト)
>をあらかじめ用意
の例の部分を詳しく。
というか、この部分が分からないとなんともしようがない。
513 :
初心者 :2005/07/11(月) 01:12:31
ありがとうございます!ホントすみません!!
514 :
509 :2005/07/11(月) 01:29:03
定期的スケジュール管理ファイルの書式 2 1 4 プログラミング 1カラム目:曜日の番号(日曜を0として日曜日からの日数。0〜6) 2カラム目:用件の開始時限 3カラム目:用件の終了時限 4カラム目:用件の名称 期限付き予定リスト管理ファイルの書式 2005 7 11 課題1締め切り 1カラム目:予定イベントの実施日または期限日の年 2カラム目:予定イベントの実施日または期限日の月 3カラム目:予定イベントの実施日または期限日の日 4カラム目:予定イベントの名称 です。m(_ _)m
>>515 /* @ */
void ReverseTree(struct BTREE *ptr)
{
struct BTREE *tmp;
if (ptr == NULL) return;
tmp = ptr->left; ptr->left = ptr->right; ptr->right = tmp;
ReverseTree(ptr->left);
ReverseTree(ptr->right);
}
/* A (ごく一般的なバージョン) */
int ExistTest(struct BTREE *ptr, int searchdata)
{
if (ptr == NULL) return 0;
if (searchdata == ptr->data) return 1;
if (searchdata < ptr->data) return ExistTest(ptr->left, searchdata);
return ExistTest(ptr->right, searchdata);
}
/* A (@が使用されるとツリーが逆順になるので、それも考慮したバージョン) */
int ExistTest(struct BTREE *ptr, int searchdata)
{
if (ptr == NULL) return 0;
if (searchdata == ptr->data) return 1;
if (ExistTest(ptr->left, searchdata)) return 1;
return ExistTest(ptr->right, searchdata);
}
519 :
515 :2005/07/11(月) 07:49:45
520 :
509 :2005/07/11(月) 09:17:21
>>517 CygwinとかいうWindowsでLinux環境を っていうやつです
521 :
デフォルトの名無しさん :2005/07/11(月) 09:18:21
522 :
デフォルトの名無しさん :2005/07/11(月) 10:52:03
【質問テンプレ】 [1] 授業単元: プログラミング演習1 [2] 問題文(含コード&リンク): 下記のように定義される式の解析を行うプログラムを作成せよ。 式は標準入力、あるいはファイルからリダイレクトによって読み込まれるものとする。 式の定義 式 := (演算子 式 式) | 整数 演算子 := +|−|*| / 整数 := [0-9]+ 例えば、(+(*4 5) (- 0 12) ヒント:演算子用と被演算子用に別々のスタックを用意して、式を読みながら、 演算子と式を評価した値を適宜スタックにpush,popすることで、式全体を評価する事ができます。 『(』の次は演算子がくること、『)』を読んだら部分式が評価できる事に注目してください。 [3] 環境 [3.1] OS:Windows/Linux/等々 :Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 期限:できるだけ早くお願いします。。。 [5] その他の制限:一番初めから、構造体まで習ってます。 期限が迫ってるのでよろしくお願いします。 コメントもつけてもらいたいです。
523 :
デフォルトの名無しさん :2005/07/11(月) 11:10:00
【質問テンプレ】 [1] 授業単元: プログラミングとその応用T [2] 問題文(含コード&リンク): 「エラトステネスのふるい」のアルゴリズムを用いて、n以下の素数を求めるプログラムを作成せよ。 1.S={2.3.…n}という整数の集合を考える。 2.Sが空集合で無い限り、以下の(1)〜(3)を繰り返す。 (1) mをSの要素の最小値とする。このときmは素数である。 (2)Am = {k|k =am,k∈S ,a∈Z}とする。 (3)SからAmの要素を全て取り除いて、残りの集合をあらためてSとする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C/C++/どちらでも可 のいずれか:c [4] 期限:早めに [5] その他の制限:初級の授業を一通り終わったあたりです。
期限が「なるべく早く」とか書いてあるとやる気がNULLになるのはオレだけ? そりゃ期限じゃなくて希望だろ。 何日の何時何分までちゃんと定義しろよって思う。
>>523 まったく同じのをこのスレか前スレで見た
526 :
デフォルトの名無しさん :2005/07/11(月) 11:58:48
527 :
526 :2005/07/11(月) 12:09:47
期限が7/15のギリギリになってますができたら7/14までに変更でお願いします・・・。
528 :
デフォルトの名無しさん :2005/07/11(月) 12:28:46
[1] 授業単元: [2] 問題文(含コード&リンク): 終端記号 END == -1 をもつ、整数型配列のデータを、逆順に並べ替える関数 void reverse(int data[])を作れ。 この関数は,data がたとえば、 1 2 3 4 5 6 7 8 9 -1 という配列なら 9 8 7 6 5 4 3 2 1 -1 と変換する。 [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月11日24:00まで
530 :
デフォルトの名無しさん :2005/07/11(月) 12:30:32
[1] 授業単元: [2] 問題文(含コード&リンク): S(n) = 1+2+3+...+n T(n) = S(1)+S(2)+S(3)+...+S(n) U(n) = T(1)+T(2)+T(3)+...+T(n) V(n) = U(1)+U(2)+U(3)+...+U(n) W(n) = V(1)+V(2)+V(3)+...+V(n) とする. W(n) の値を返す関数を作り,W(100) の値を求めよ. [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月11日24:00まで すいませんがお願いします。
531 :
347 :2005/07/11(月) 12:37:31
すみません。
>>347 を
>>367 で答えてもらったものですが、
>>367 さんのサーバのプログラムをコンパイルすると
while (p = strpbrk(pclient->buff, "\r\n")) { のところで
57: warning: suggest parentheses around assignment used as truth value
for (q = pclient->buff; *q++ = *++p; ) のところで
63: warning: suggest parentheses around assignment used as truth value
というエラーがでます。どなたか修正を教えていただけませんか?お願いいたします。
>>528 #define END (-1)
void reverse(int data[]) {
void aux(int * p) {
int a = *p;
if (*p != END) {
aux(p + 1);
*data++ = a;
}
}
aux(data);
}
>>530 #include <stdio.h>
int s(int n) {return n == 1 ? 1 : s(n - 1) + n;}
int t(int n) {return n == 1 ? 1 : t(n - 1) + s(n);}
int u(int n) {return n == 1 ? 1 : u(n - 1) + t(n);}
int v(int n) {return n == 1 ? 1 : v(n - 1) + u(n);}
int w(int n) {return n == 1 ? 1 : w(n - 1) + v(n);}
int main()
{
printf("%d, %d\n", 1, w(1));
printf("%d, %d\n", 2, w(2));
printf("%d, %d\n", 3, w(3));
printf("%d, %d\n", 10, w(10));
printf("%d, %d\n", 100, w(100));
return 0;
}
>>531 条件を書くところが代入だけれど、それでいいの?って警告だね。
それぞれ
while ((p = strpbrk(pclient->buff, "\r\n")) != NULL) {
for (q = pclient->buff; (*q++ = *++p) != NULL; )
で回避できるはず。
535 :
532 :2005/07/11(月) 14:19:56
>>528 ごめん、ちょっと変える。
#include <stdio.h>
#define END (-1)
void reverse(int data[]) {
void aux(int idx) {
if (data[idx] != END) {
int tmp = data[idx];
aux(idx + 1);
*data++ = tmp;
}
}
aux(0);
}
int main(void)
{
int data[] = {1,2,3,4,5,6,7,8,9,-1};
int i, len = sizeof(data)/sizeof(data[0]);
void print(void) {
for (i = 0; i < len; i++) printf(" %d", data[i]);
puts("");
}
print();
reverse(data);
print();
return 0;
}
536 :
347 :2005/07/11(月) 14:40:45
>>534 レスありがとうございます。
コンパイルしてみたら、
for (q = pclient->buff; (*q++ = *++p) != NULL; )
のところで
63: warning: comparison between pointer and integer
というエラーが出てしまいましたが、どうすればよいのでしょうか?
教えてください。お願いいたします。
× != NULL ○ != '\0' △ /* 何も書かない */
>>536 NULLじゃなくて、0か'\0'なんじゃないの?
539 :
デフォルトの名無しさん :2005/07/11(月) 15:24:45
>524 さすが理系スレ、頭が硬い★ わかんねえからって言い訳すんなよ(笑) まぁアホな俺はわからないんだが。
a
//uint W(uint n) { return n*(n+1)*(n+2)*(n+3)*(n+4)*(n+5)/720; } unsigned W(unsigned n) { unsigned e[] = { n, n+1, n+2, n+3, n+4, n+5 }; static const int d[] = { 2, 2, 2, 2, 3, 3, 5, -1 }; for (int i = 0, v = d[i]; 0 < v; v = d[++i]) { for (int j = 0;; ++j) { if ((e[j] % v) == 0) { e[j] /= v; break; } } } unsigned r = e[0]; for (unsigned i = 1; i < 6; ++i) r *= e[i]; return r; }
542 :
541 :2005/07/11(月) 15:44:03
543 :
347 :2005/07/11(月) 15:51:20
>>537 ,
>>538 レスありがとうございます。
>>367 さんのプログラムを実行してみましたが、サーバからのメッセージが
クライアントに届かないのですが、どうすればよいのでしょうか?教えてください。
お願いします。
>>522 0除算とかチェックしてないけど
#include <stdio.h>
#include <stdlib.h>
int expr() {
char s[10]; int res;
if (scanf(" ( %1[+-*/]", s) == 1) {
res = expr(fp);
# define CASE(op) s[0] == #op[0] ? res op expr(fp)
res = CASE(+) : CASE(-) : CASE(*) : CASE(/) : (exit(1),1);
if (scanf("%1[)]", s) != 1) exit(2);
} else if (scanf("%d", &res) == 1) {
} else exit(3);
return res;
}
int main(void)
{
printf("%d\n", expr());
return 0;
}
間違えた。 res = expr(fp); # define CASE(op) s[0] == #op[0] ? res op expr(fp) を res = expr(); # define CASE(op) s[0] == #op[0] ? res op expr() に変えてくれ
547 :
544 :2005/07/11(月) 16:19:13
まだあった。orz ○ scanf(" %1[)]", s) × scanf("%1[)]", s)
標準入力された文字列をデータベースから検索して そのデータを全て表示させるにはどうすれば良いでしょうか?
550 :
522 :2005/07/11(月) 16:24:53
>544 ありがとうございます! でもなんかエラーぽいんですけど。。。 7-1.c: In function `expr': 7-1.c:7: `fp' undeclared (first use in this function) 7-1.c:7: (Each undeclared identifier is reported only once 7-1.c:7: for each function it appears in.) って出てしまいます。
>>543 サーバーは
$ server 12345
みたいに起動する
クライアントは
$ client 127.0.0.1 12345
みたいに起動する
・サーバとクライアントのポートは何でも良いが、あわせること
・クライアントで指定するIPアドレスは、サーバが実行されているマシンのIPアドレスを指定すること。
同一マシンの場合はループバックアドレス(127.0.0.1)でよい
ちゃんとそうやってるか?
552 :
543 :2005/07/11(月) 16:50:53
>>551 その通りにやってます。文字入力しても無反応です。
クライアント→サーバにはちゃんとメッセージ届いてます。
553 :
デフォルトの名無しさん :2005/07/11(月) 17:05:22
【質問テンプレ】 [1] 授業単元:プログラミング入門 [2] 問題文(含コード&リンク):ジョセファスの問題を解いて、実行すると次のようになるプログラムを作成せよ。 %./josephus ジョセファスの問題を解きます 石の個数は? 7 何個ごと? 4 4→1→6→5→7→3→2 最後に残るのは2番の石です [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:今日の日付が変わるまで。。。 [5] その他の制限:ごく初歩的なところまでの知識でお願いします。 期限がマジヤヴァいのでよろしくお願いします!
>>553 ジョセファスの問題の解放を提示せよ。
#あれか、継子立てだな。
555 :
554 :2005/07/11(月) 17:19:18
おっと、「解法」だ。 方針としては、石の個数の配列を用意して0クリアして順番に番号でも振っていけば。
556 :
553 :2005/07/11(月) 17:23:16
>>554 1番からn番までの石を円に並べる。まず1番の石から数えてm番目の石を取り除く。
すると石の数が1つ減る。続いて隣の石から数えてm番目の石を取り除く。
このような操作を繰り返すと最後に残る石は何番の石か。
プログラムではn、mを入力し、取り除かれる石の番号をすべて出力したのち、
最後に残る石の番号を表示するものとする。なお、nの上限は適宜定めて良い。
557 :
523 :2005/07/11(月) 17:34:25
>>546 エラトステネスで、もし素数を求める範囲をnとして、
scanfでnを入力させたかったら、
24の前半をどうやったらいいんでしょうか。。。
1001のところにnとか入れれるんですか?
まぁ入れれたとしてもよくわからないんですが。
>>555 番号である必要はないね。只のフラグで充分。
>>553 細かい仕様の違いは自分で吸収するよろし。
#include <stdio.h>
#include <stdlib.h>
void josephus(int nOfStones, int interval)
{
char * stones = calloc(nOfStones + 1, 1);
if (stones == NULL) {return;}
for (int ic = 0; ic < nOfStones; ++ic) {stones[ic] = 'o';}
int index = -1;
for (int ic = 0; ic < nOfStones; ++ic) {
for (int sc = 0; sc < interval; ++sc) {
while (stones[index = ++index % nOfStones] != 'o') {}
}
stones[index] = '-';
printf("%s:%d\r", stones, index + 1);
}
free(stones);
}
int main(int argc, char **argv)
{
if (argc < 3) {
fprintf(stderr, "Usage:%s <個数> <何個おき>\n", argv[0]);
exit(EXIT_FAILURE);
}
josephus(atoi(argv[1]), atoi(argv[2]));
return 0;
}
559 :
558 :2005/07/11(月) 17:45:12
./josephus 7 4 で結果が表示される。 途中経過を見るには ./josephus 7 4|tr '\r' '\n'
>>552 >文字入力しても無反応です。
>クライアント→サーバにはちゃんとメッセージ届いてます。
1) 「文字入力」するのはもちろんクライアントで
2) クライアント→サーバにはちゃんと入力したテキストが届いており(サーバ側にメッセージが出力されており)
3) しかしクライアント側にはメッセージが戻って来ていない
ということかな?
よくわからんな....
Linuxは詳しくないのでなんとも言いがたいが、パケットをキャプチャしてみてはどうだろうか。
tcpdumpやsnifferのようなプログラムは使えないの?
>>552 そうそう、
>>367 のクライアントは完全に汎用で、echoクライアントやHTTPクライアント等にもなるから、
適当なサーバに繋いで確認してみてはどうか。
問題を切り分けるために。
基本的に、サーバ側のコードを見てもらえば分かるが、サーバ側にメッセージが表示されるときは
クライアントに同じ内容で送信している(同じ内容を端末とソケットにwrite()している)
んで、write()が成功していれば送信されているはず、なんだが……
562 :
543 :2005/07/11(月) 18:00:17
server 2000 client 127.0.0.1 2000 とやるとちゃんとつながったと表示されます。 サーバが1人、クライアントが2人いるとすると、 クライアントAが文字入力→サーバとクライアントBに表示される クライアントBが文字入力→サーバとクライアントAに表示される サーバが文字入力→すべて反応なし 条件に、サーバからのメッセージはすべてのクライアントに送るとあるので、 どうしていいかわからないのですが・・・。
>>562 は?もしかしてサーバで文字入力できないことを言っていたのか?
それは、「仕様」だ。
564 :
543 :2005/07/11(月) 18:12:31
すみません。仕様だったのですか・・・。
>>347 の動作の条件に
・サーバ、クライアントともにメッセージの入力・送信・受信表示ができるようにする。
・サーバから入力されたメッセージはすべてのクライアントに送信すること。
と書いたので、出来ると思ってました・・・。
565 :
デフォルトの名無しさん :2005/07/11(月) 18:15:54
>>564 あ、そういうことか。じゃあ、俺の仕様見落としだな。気が向いたら直すよ(w
ちなみに、クライアントA→サーバ→クライアントBにしか行かないってのは、ホント?
ちゃんとクライアントA、クライアントBの両方に流れると思うんだが(そういう風に作ってある)
567 :
543 :2005/07/11(月) 18:34:19
あ、すみません。 クライアントからの入力は、自分も含めてすべてのサーバ・クライアントにちゃんと届いてます。 恐縮なんですが、QUITと入力したら相手にQUITを送信してソケットを閉じる機能も つけてもらえるとうれしいのですが・・・。 できればでいいのでぜひともお願いします。何度もすみません。
>>568 あ、面倒くさいからQUITには対応してないよ。
対応したければサーバのソースの
on_cmd()を直してくれ。
if (!pclient->user) {
pclient->user = malloc(strlen(buff)+1);
strcpy(pclient->user, buff);
} else if (strcasecmp(buff, "QUIT") {
shutdown(pclient->fd, 1);
} else {
以下既存コード
こんな感じでよかろ。
570 :
516 :2005/07/11(月) 18:46:03
>>565 ありがとうございます!
コンパイルしてみたら以下のエラーが出ました。
kadai.c(26) : warning C4031: 関数の 2 回目の宣言で引数の数が増加しています。
kadai.c(53) : error C2198: 'maketree' : 実引数が少なすぎます。
kadai.c(82) : warning C4029: 関数宣言での引数リスト内の型が定義と一致しません。
kadai.c(98) : error C2084: 関数 'struct node *__cdecl maketree(const char *,const unsigned int ,const unsigned int )' はすでに実体を持っています。
kadai.c(204) : error C2065: 'bool' : 定義されていない識別子です。
kadai.c(204) : error C2146: 構文エラー : ';' が、識別子 'enzan' の前に必要です。
kadai.c(204) : error C2065: 'enzan' : 定義されていない識別子です。
kadai.c(204) : error C2065: 'false' : 定義されていない識別子です。
kadai.c(248) : error C2065: 'true' : 定義されていない識別子です。
cl.exe の実行エラー
kadai.obj - エラー 7、警告 2
丸投げで申し訳ないのですが、教えて頂きたく・・・orz
571 :
デフォルトの名無しさん :2005/07/11(月) 19:09:03
[1]プログラミング言語 [2]組み合わせの式 nCr において,n=50,r=0〜50までの値を求めよ。 [3] 環境 [3.1]Windows [3.2]cpp [3.3]C言語 [4]7月14日まで [5] できれば簡単な感じでお願いします。
>>571 unsigned long npow(int begin, n)
{
if (high == 0) return 1;
int i;
unsigned long res = 1;
for (i = 0; i < n; i++, begin--)
res *= begin;
return res;
}
int main(void)
{
int i;
unsigned long res;
for (i = 0; i <= 50; i++) {
res = npow(50, i) / npow(i, i);
printf("50C%d:%ul", i, res);
}
return 0;
}
組んでみたが今はコンパイラが使えんのであってるかは不明
[1]プログラムA [2] 2次元横ベクトルP1に2行2列の変換行列Bを右から乗じてベクトルP2=P1*B を求める1次変換のための関数定義 void linear(double p2[2],double p1[2],double h[2][2]); を作成した後動作確認プログラムを作成せよ [3] 環境 [3.1] Linux [3.2]gcc [3.3]C [4]7/12 12:00まで [5] 配列はできます お願いします
575 :
543 :2005/07/11(月) 19:58:44
みなさんありがとうございました。
576 :
565 :2005/07/11(月) 20:02:51
>>570 当方のVC++6.0とGNU g++ではコンパイルできたけど。
もしかしてC99とかC89系のコンパイラ?
577 :
526 :2005/07/11(月) 20:03:29
>>526 で問題文がぐちゃぐちゃしてますがプログラムとしては
出現確率と出力文字に対する符号語と符号化した系列と復号化した系列
を出力するということです。どうかよろしくお願いしますm(_ _)m
>>570 コンパイルできる環境にないから詳しくは分からんが
BOOL型は昔の規約だと定義されてない コンパイラ古いのかな
#include<stdbool.h>を追加してみて それで後半の方は消えると思う
消えないなら自分で定義するしかないなw
>>565 も簡単に見たけど間違ってなさそうだし コンパイラ古いのかもしれない
>>570 >>576 エラーメッセージのファイル名を見れば明らかだが
kadai.c
となっとるから、Cプログラムとしてコンパイルしようとしたようだな
これはC++のプログラムだ
580 :
516 :2005/07/11(月) 20:15:50
>>575 せっかく自分でもある程度書いたんだから
ちゃんと理解しろよ
582 :
デフォルトの名無しさん :2005/07/11(月) 21:08:13
C++言語で for(i=1; i<100; i++) の構文の中で、xとyを計算するんですが、 i=50のときだけxとyを画面に表示したいんですが、 if (i=50) cout << x << y ; とfor文の中に書いたら 「恐らく不正な代入」となってi=50以外のときのxとyも 出力してしまいます。これはなぜなんでしょうか? 教えてください。よろしくお願いします。
×i=50 ○i==50
584 :
デフォルトの名無しさん :2005/07/11(月) 21:23:26
初心者は定数は左にかくようにしましょう^^
585 :
582 :2005/07/11(月) 21:26:08
586 :
571 :2005/07/11(月) 21:27:02
571ですが今まで習ってきた中でunsigned long res等見たこと なかったのでわからないんですが。 私は通常学校では #include<stdo.h> #include<stdlib.h> #include<math.h> ではじまるんで、できればこちらの形でお願いできないでしょうか。 572さんありがとうございます。
>>586 それは cpp ではない気がする。stdo.h は普通ないし。
あと、 571 方式だと 50! とか計算することになるので unsigned long が
ないとまずお手上げなのでは?
>586 おま、ちょそれC言語
「みたこと無いから分からない」って、すごいな。 調べる気も起きないってか。
571はWindowsと書いてあるから、intが32bitあるんだと思ってあげよう。 というわけでunsigned intにすると、571が今度はunsignedがわかんないとなきつく予感。
>>586 50C25=126410606437752 なんだけど、これって 32 bit では表せないんだけど、
君の学校ではどうやって扱ってる?
592 :
565 :2005/07/11(月) 21:45:33
593 :
571 :2005/07/11(月) 21:50:04
>>571 ここは宿題をやるスレであって、
おまえに内容を理解させるスレではない。
595 :
デフォルトの名無しさん :2005/07/11(月) 22:11:43
[1] 授業単元: 0S
[2] 問題文(含コード&リンク):
step1: a = x + y;
step2: b = z + 1;
step3: c = a ? b;
step4: w = c + 1;
に関し、parallel.cを完成させて、step1とstep2を並列実行させる
プログラムを作成せよ。
但し、x,y,zはプロンプトにしたがって入力するとする。
正しく動作したか?結果を考察せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/703.txt [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限 7/12
丸投げですがお願いします。。。
596 :
591 :2005/07/11(月) 22:15:30
>>571 126410606437752 を数値変数に代入して表示するだけのプログラムを
作ってくれたら、問題を解いてあげよう。
597 :
595 :2005/07/11(月) 22:38:37
step3: c = a ? b; となってましたが、 step3: c = a - b; の間違いでした。すいません。
>>596 long long haihai = 126410606437752LL;
printf("%lld", haihai);
599 :
591 :2005/07/11(月) 22:55:18
>>598 一回余計に計算するけどこれでどうだ
#include <stdio.h>
#define N 50
int main(void){
long long c1[N+1]={1,0},c2[N+1]={1,0};
long long *p1,*p2,*p3;
int i,j;
p1=c1;
p2=c2;
for(i=0;i<=N;i++){
for(j=0;j<=N;j++){
printf("%lld ",p1[j]);
}
printf("\n");
for(j=1;j<=N;j++){
p2[j]=p1[j-1]+p1[j];
}
p3=p2;p2=p1;p1=p3;
}
}
601 :
デフォルトの名無しさん :2005/07/12(火) 00:28:25
602 :
デフォルトの名無しさん :2005/07/12(火) 00:48:53
526ではないがハフマン符号化やってくれ。 同じようなことをしてるんだけど分からん。きっつー
603 :
595 :2005/07/12(火) 00:49:18
>>601 おそらくstep1,2を並列実行させて、
そのあとにstep3→step4って感じだと思います。
605 :
デフォルトの名無しさん :2005/07/12(火) 01:39:46
606 :
デフォルトの名無しさん :2005/07/12(火) 01:52:48
607 :
デフォルトの名無しさん :2005/07/12(火) 07:36:51
よろしくお願いします
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
n-クイーン問題を、1行または1列にクイーンを配置する場合の解を探索する
(n-クイーンで禁止されている、利き筋を結果として出力する)
プログラムに変更せよ。
n-クイーンのアルゴリズムは作成してあります↓
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/706.txt [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:2005年7月12日
[5] その他の制限:
あくまで解を探索ものなので、
バックトラック法をそのまま使っていただければありがたいです
608 :
超初心者ゴン :2005/07/12(火) 11:26:50
[1] 授業単元: プログラミングA [2] 問題文(含コード&リンク): 数値を10回入力し、昇順でソートして表示するプログラムを作成 [3] 環境 [3.1] OS:Windows2000 [3.2] コンパイラ(バージョン): VC++6.0 [3.3] 言語:C [4] 期限:2005年7月12日15:00までですけど、できたら急ぎでお願いします [5] その他の制限:qsortは禁止 数値10コ格納したのをソートする。 よろしくお願いします。ならべく簡単にお願いします。
>>608 #include <stdio.h>
void swap(int * i, int * j) {
int t = *i;
*i = *j;
*j = t;
}
int main(void) {
int data[10], i, j;
for (i = 0; i < 10; ++i) if (scanf("%d", &data[i]) != 1) return 1;
for (i = 0; i < 9; ++i)
for (j = i+1; j < 10; ++j) if (data[i] > data[j]) swap(&data[i], &data[j]);
for (i = 0; i < 10; ++i) printf("%d\n", data[i]);
return 0;
}
610 :
デフォルトの名無しさん :2005/07/12(火) 12:08:45
>>535 どうでもいいけど、
#define END (-1)
しているなら
>int data[] = {1,2,3,4,5,6,7,8,9,-1};
は
int data[] = {1,2,3,4,5,6,7,8,9,END};
とすべきだろうな。
614 :
デフォルトの名無しさん :2005/07/12(火) 12:44:40
1] 授業単元: C言語入門 [2] 問題文: 文字列を扱うライブラリー関数 Strlen、strcpy、strncpy、strcat、strncat、strcmp、strncmp、 を用いてプログラムを作成する。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ:gcc [3.3] 言語:C [4] 期限:7月18日 [5] その他の制限: ライブラリ関数は7つありますが、好きな物を使って(あるいは組み合わせて) 自由にプログラムを作る課題です。できれば、平素なものでお願いします。
615 :
超初心者ゴン :2005/07/12(火) 13:09:33
>>609 さんすみませんがどういうことをしてるのでしょうか?
コメント文頂けないでしょうか!
#include <stdio.h>
void swap(int * i, int * j) {
int t = *i; /**/
*i = *j; /**/
*j = t; /**/
}
int main(void) {
int data[10], i, j;
for (i = 0; i < 10; ++i)/**/ if (scanf("%d", &data[i]) != 1) /**/return 1;
for (i = 0; i < 9; ++i) /**/
for (j = i+1; j < 10; ++j) /**/if (data[i] > data[j])/**/ swap(&data[i], &data[j]); /**/
for (i = 0; i < 10; ++i)/**/ printf("%d\n", data[i]);
return 0;
}
ホントお手数ですがよろしくお願いします。すみません。
ここは世の中のC言語の宿題を消化する墓場であって、 理解を深めてもらうとこでもなければ、手取り足取り教えるとこでもない。
ホントにお手数なので無理です それくらい調べなさい
調べることじゃないだろ。 scanfの戻り値なんかは別だが。
>>610 >612の趣旨と理解してやっつけた。ロジックの不具合はそのままなんで、勝手に直すなり好きにしてくれ。
/* 1/2 */
#include <stdio.h>
#define numberof(x) (sizeof (x) / sizeof *(x))
int main(void)
{
static struct {
int price;
const char * const name;
} goods[] = {
{0, "ティッシュ"},
{0, "サプリメント"},
{0, "化粧品の"},
};
int si;
static struct {
int no;
int value;
char const * const name;
} nocs[] = {
{0, 10000, "一万円"},
{0, 5000, "五千円"},
{0, 1000, "千円"},
{0, 500, "五百円"},
{0, 100, "百円"},
{0, 50, "五十\円"},
{0, 10, "十\円"},
{0, 5, "五円"},
{0, 1, "一円"},
};
621 :
620 :2005/07/12(火) 13:28:33
/* 2/2 */ int ot; int ko; int ic; ko = 0; for (ic = 0; ic < numberof(goods); ++ic) { printf("%sの値段を入力してください\n", goods[ic].name); goods[ic].price = 0; scanf("%d", & goods[ic].price); if (goods[ic].price > 999 || goods[ic].price <= 0) { printf("有効な数字を入力してください\n"); } ko += goods[ic].price; } printf("購入金額は%d\n", ko); printf("いくら支払いますか?\n"); scanf("%d",&si); printf("支払った金額は%d\n",si); ot = si-ko; if(si<ko){ printf("お金が足りません\n"); } printf("おつり\n"); for (ic = 0; ic < numberof(nocs); ++ic) { nocs[ic].no = ot / nocs[ic].value; ot -= nocs[ic].no * nocs[ic].value; printf("%s%d枚\n", nocs[ic].name, nocs[ic].no); } return 0; }
622 :
超初心者ゴン :2005/07/12(火) 13:37:00
自分で解決しました。
623 :
キーファ :2005/07/12(火) 15:00:44
みなさんお疲れ様です! 今回もなにとぞお願いします! [1] 授業単元:計算機数学序論 [2] 問題文(含コード&リンク):0時0分からa時b分(0<=a<=24,0<=b<=60) までの時間を計算する関数Timeを作り、それを使い、2つの時刻 a1時b1分とa2時b2分をキーボードから入力して(a2時b2分の方が a1時b1分より後とする)、「a1時b1分からa2時b2分までの時間は ○時間○分です。」と表示せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC++6.0 [3.3] 言語:C++ [4] 期限:水曜まで [5] その他の制限:特になし お願いいたします。
>>623 時分の条件は (0<=a<24,0<=b<60) だと思うが
>623 突撃Delphi特急便 function time(H1,M1 , H2,M2: integer) : integer; begin Result := (H2*60+M2) - (H1*60+M1); end; procedure TForm1.Button1Click(Sender: TObject); var c ,a1,a2,b1,b2:integer; begin a1 := 2; b1 := 30; a2 := 12; b2 := 21; c := time(a1,b1 , a2,b2); ShowMessage(Format('%d時%d分から%d時%d分までの時間は' +'%d時間%d分です。',[a1,b1 , a2,b2 , c div 60 , c mod 60])); end;
c1 = a1 * 60 + b1; c2 = a2 * 60 + b2; c3 = c2 - c1; a3 = c3 / 60; a3 = c3 % 60;
627 :
無知の名無しさん :2005/07/12(火) 15:17:09
お疲れさまです! 初めてですがお願いしますm(_ _)m [1]授業の課題;ミニゲームなど作れ。(ジャンケンゲームみたいなの [2]環境 [3]os:windows2000pro [3.1]コンパイラ:VC:visual studio.net [3.2]言語:C [4]期限:今週中まで [5]その他制限:特になし 出せばいいので簡単なのでお願いいたします。
ミニゲームのアイデアさえ出さないのか…
>>619 一つもわかんないんだから1からやりなおせが適切か
コメントを入れるところまでが宿題なんです。 ホントお手数ですがよろしくお願いします。すみません。
>>627 /* コメントゲーム */
/* プログラムの全部の行にコメントを入れたら完成 */
#include <stdio.h>
int main(void){
printf("Hello World.\n");
}
633 :
今日の授業内orz :2005/07/12(火) 16:54:11
[1] 数値解析 [2] [課題]ニュートン法のプログラムを作成し、f(x)=x -3x +x -3 =0の解を、初期値をx=5として、求めよ。 提出物 @フローチャート Aプログラム B計算結果(繰り返しの途中結果含む) [3] 環境 [3.1] Windows2000 [3.2] Microsoft Visual Studio 6.0 [3.3] C [4] 期限:2005年07月12日18:00まで または 無期限 のいずれか [5] その他の制限:特にないと思います>< 模範解答みたいなのが出回ってるんですがそれは次で貼り付けます このまま出すとコピーしたのがばれるということで困ってます 皆様よろしくおねがいします><
>>627 #include <stdio.h>
#include <string.h>
int main()
{
char buf[1024];
char * comp;
int ok = 1;
printf("じゃんけん:");
fgets(buf, sizeof(buf), stdin); * strrchr(buf, '\n') = '\0';
if (strcmp(buf, "ぐー") == 0) comp = "ちょき";
else if (strcmp(buf, "ちょき") == 0) comp = "ぱー";
else if (strcmp(buf, "ぱー") == 0) comp = "ぐー";
else { comp = "ちょき"; ok = 0; }
printf("コンピュータ:%s\n\n", comp);
if (ok) printf("無念・・・orz\n");
else printf("アフォか\n");
return 0;
}
・・・ヴァカっぽくてやってらんねーな
#include <stdio.h> int main() { printf("じゃんけんしよう!\n入力してね グー:0 チョキ:1 パー:2\n"); int i; scanf( "%d", &i); printf("あなたの負けです\n"); return 0; }
636 :
今日の授業内orz :2005/07/12(火) 16:57:43
#include <stdio.h> #include <math.h> int main(){ double x,px; //x[i]とx[i+1] int i; //繰り返した回数表示 /* 変数の初期化 */ x = 5.0; //初期値は5 px = 0.0; //次の値は不明なので0 i = 0; //初期化 /* 計算開始 */ while(1){ /* f(x) = x^3 - 3x^2 + x - 3 f'(x) = 3x^2 - 6x + 1 x[i+1] = x[i] - f(x)/f'(x) */ px = x - ((pow(x,3.0) - 3.0 * pow(x,2.0) + x - 3.0)/(3.0 * pow(x,2.0) - 6.0 * x + 1.0)); printf("%d回目 : x[%d] = %f\n",i+1,i+1,x); //|x[i+1] - x[i]| <= 10^-5 if(fabs(px - x) <= 0.00001){ printf("終了条件になりました\n"); break; } /* x[i+1]にx[i]を入れる */ x = px; i++; } return 0; }
>>633 636 ってよくできているのでこれで問題ないんじゃないの?
これをレポートにすれば、単なるコピーじゃなくて
2ちゃんねるから持ってきたって言えるからなにもかもはっぴー?
640 :
今日の授業内orz :2005/07/12(火) 17:14:37
今日提出のこの636のやつを出すとこの教室内の9割がこれと同じを提出するんですよ^^; 福祉科なのになぜかC言語やらないといけないし・・・・ そのくせ選択必修で数値解析とってみると C言語やるとは思ってもいなくて・・・・ これのすこし変えたので何かございませんかね 皆様のお力をおかしてくださいませ><
>>633 ,636
まずCのソースにC++のコメント入れるのやめさすとこから始めようか
>>640 printf("終了条件になりました\n");
を
puts("終了条件に成田まいsた");
にしてみるとか
>>640 全部をまとめて一行にしちゃうとか。
# で始まる行以外は全部一行にしても大丈夫だよ。
あと、// から行末までは取り除いてね。
>>640 画期的な案を思いついたんだよ
みんな
>>636 を提出するというのならば自分で書けるところまで書いてみたらどうだ?
きっとカンニング行為でまとめてあぼーんされるのに巻き込まれないだけマシ
正直が一番良いときもあるよ
646 :
デフォルトの名無しさん :2005/07/12(火) 17:23:37
一次元静電粒子コードの作成の仕方がわかりません。 誰か教えてください。
647 :
今日の授業内orz :2005/07/12(火) 17:26:18
福祉科で自分せいぜい2chにカキコとワードとエクセルくらいしか使えないもので・・・・ 苦し紛れに検索していたらここにたどり着きまして皆様のお力をお借りしたいと 工科系の大学で新設の福祉科にくるんじゃなかった・・ 授業のカリキュラムがまだまだ出来てない感じで C言語の授業があるとはつд;) でもこれも選択必修なので落とすと来年まだほかの選択必修を取らないといけなくなるので 今回この授業はこれだけでテストがないらしく レポートと出席だけで判断するそうでこまってるしだいです
つ電源コード
>>647 よしわかった、匿名でこのページのアドレスを先生にチクれ
651 :
今日の授業内orz :2005/07/12(火) 17:38:40
つд;)みんな同じ物をコピーして提出準備してる
18時まであと25分・・・・
>>650 2chを授業中に観覧してるなんて言えないです
これ以上iフィルターが強化されたら
校内LANとかの意味がなくなってきちゃいます><
じゃあ俺がチクってやろう 条件は十分なので検索できるだろう
先ずは学校名を晒せ。 >2chを授業中に観覧してるなんて言えないです つーか、何この日本語能力のなさ。
654 :
今日の授業内orz :2005/07/12(火) 17:45:36
ぁぅぁぅ(つ盆・)ぁぅぁぅ (´盆`)ちくらないで〜〜〜〜〜〜 野菜炒めまずいから捨てたりしないからゆるして〜〜〜つд;)
一応投下 #include <stdio.h> #include <math.h> /* fabs()で使用 */ int main(void){ /* 変数の初期化 */ double x,px= 5.0; int i=1; /* 計算開始 */ do{ x = px; /* f(x) = x^3 - 3x^2 + x - 3 f'(x) = 3x^2 - 6x + 1 x[i+1] = x[i] - f(x)/f'(x) */ px = x - (x*(x*(x - 3.0) + 1.0) - 3.0)/(x*(x*3.0 - 0.6 ) + 1.0); printf("%d回目 : x[%d] = %f\n",i,i,x); /* |x[i+1] - x[i]| <= 10^-5 */ i++; } while(fabs(px - x) >= 0.00001 && i<300);/* 300回くらいまわっても収束しないなら打ち切る */ if(i<300){ printf("終了条件になりました\n"); }else{ printf("皇太子さまは無限ループに興味を持たれたようです。 \n"); } return 0; }
656 :
655 :2005/07/12(火) 17:49:25
>>655 所々微妙に間違えてるから修正してorz
657 :
今日の授業内orz :2005/07/12(火) 17:55:23
あうあう
皇太子さまは無限ループにry
ってところで笑ってしまってみんなに見られたつд;)
注目を浴びてしまった・・・・
>>655 ありがとうございました
下から4行目と6行目のことでしょうか?
658 :
今日の授業内orz :2005/07/12(火) 17:57:31
あああ4行目と5行目で 6行目をしたら・・・しめの言葉が消える・・
659 :
今日の授業内orz :2005/07/12(火) 18:01:56
そして今激しく最初に書き込んだやつが違うことに気が付く・・・・ 3乗 2乗 [課題]ニュートン法のプログラムを作成し、f(x)=x -3x +x -3 =0の解を、初期値をx=5として、求めよ。 f(x)=x -3x +x -3 =0 は、3乗と2乗がついたんでした・・・遅いorz 提出時間がのこり9分・・・・終わったつд;)
660 :
今日の授業内orz :2005/07/12(火) 18:06:01
#include <stdio.h> #include <math.h> /* fabs()で使用 */ int main(void){ /* 変数の初期化 */ double x,px= 5.0; int i=1; /* 計算開始 */ do{ x = px; /* f(x) = x^3 - 3x^2 + x - 3 f'(x) = 3x^2 - 6x + 1 x[i+1] = x[i] - f(x)/f'(x) */ px = x - ((pow(x,3.0) - 3.0 * pow(x,2.0) + x - 3.0)/(3.0 * pow(x,2.0) - 6.0 * x + 1.0)); printf("%d回目 : x[%d] = %f\n",i,i,x); /* |x[i+1] - x[i]| <= 10^-5 */ i++; } return 0; } エラー1 警告 0 F:\1234.c(19) : error C2059: 構文エラー : 'return' エラーがでるつд;)
一応3乗2乗はそれなりにやってあるけど px = x - (x*(x*(x - 3.0) + 1.0) - 3.0)/(x*(x*3.0 - 0.6 ) + 1.0); ~~~~ ここを0.6 から6.0に直すんじゃないの
do{
とくれば
}while(hoge);
が必要かと
>>660
664 :
663 :2005/07/12(火) 20:55:21
あ、mallocの戻り値チェックと 解にたどり着けなかったときの対応してないや。
665 :
デフォルトの名無しさん :2005/07/12(火) 21:53:04
[1]授業単元:プログラミング中級 [2]問題文:1000以下の素数で、足しあわせると1000になるような二つの素数の組をすべて求めるプログラム [3]環境 [3.1]OS:UNIX [3.2]コンパイラ:gcc [3.3]言語:C [4]期限:7/12 [5]charをつかわないで。なるべく簡単に お願いします
#include <stdio.h> int main() { int i = 0; double x,y,diff,limit; limit = 1.0e-20; diff = 1.0; x = 5.0; while(diff > limit) { printf("%d回目 : x[%d] = %.30f\n", i,i,x); y = x - (x*x -3.0*x +1.0 -3.0/x) / (3.0*x -6.0 +1.0/x); diff = y < x ? x - y : y - x; x = y; ++i; } return 0; }
668 :
デフォルトの名無しさん :2005/07/12(火) 22:01:58
>>665 もう出てるけど、参考までに。
#include <stdio.h>
int main(void) {
int i, j, notprime, sieve[1001];
for (i = 2; i <= 1000; i++) sieve[i] = 1;
sieve[0] = sieve[1] = 0;
for (i = 2; i <= 50; i++) {
notprime = i;
while ((notprime += i) <= 1000) sieve[notprime] = 0;
}
for (i = 2; i <= 1000; i++)
if (sieve[i])
for (j = i; j <= 1000; j++)
if (sieve[j] && i + j == 1000)
printf("%4d + %4d == 1000\n", i, j);
return 0;
}
670 :
デフォルトの名無しさん :2005/07/12(火) 22:12:17
671 :
デフォルトの名無しさん :2005/07/12(火) 22:15:35
どなたか614のプログラムお願いできないでしょうか? 例えば、Strlenとstrcpyを使って、 文字列を表示してその文字列の文字数を表示するプログラムとか作れませんか?
>>671 #include <string.h>
#include <stdio.h>
main(){char *s="abcd";puts(s);printf("%d\n",strlen(s));}
>>671 あ、strcpyね、ごめんごめん。
#include <string.h>
#include <stdio.h>
main(){char s[5];strcpy(s,"abcd");puts(s);printf("%d\n",strlen(s));}
>>671 とりあえず Strlen なんてのはないし
Strlen と strcpy を使って文字列を表示する事なんてできない
まぁ案があるならそのまま作ればよろしい
おもしろくないから俺はパス
#include <stdio.h>
#include <string.h>
int main(int argc, char ** argv) {
printf("プログラム名は %s\n", argv[0]);
printf("%u文字です\n", (unsigned int)strlen(argv[0]));
return 0;
}
675 :
レイナ :2005/07/12(火) 23:33:41
C++Builderについてなんですがよろしいでしょうか?
678 :
ikaikaikajika :2005/07/13(水) 00:02:25
初めて質問します。Cで お茶運びロボットのプログラムをくみたいのですが、もしよければ おしえてください。 まず タッチセンサーの上にお茶がのると 前進し、光センサーで前に障害物があると一時停止し、お茶をとってくれるのを待ちます。 そして、お茶がとられたら、180度回転し、元の場所に戻ろうとするのでが、戻る途中で障害物があった場合(上にお茶がのってない状態で)、光センサーをつかって、なんとかして障害物 をかわしたいのです。 brickOS というOSです。 おねがいします。
679 :
595 :2005/07/13(水) 00:07:31
680 :
434−435 :2005/07/13(水) 00:33:02
なんどもすいません434です(;´・ω・`A 期限過ぎていますが、骨組みとか未完でも構いませんので、なんとか作っていただけないでしょうか・・・? お願いいたします・・・。
[1]プログラミング言語 「2」キーボードから英文を読み込み、英文に現れる異なる単語の数を求めるプログラムを書け。 「3・1」OS UNIX 「3・2」gcc 「3・3」c言語 「4」明後日 [5]strcmpを使うらしいがまったく分かりません。どうかお願いします。
682 :
デフォルトの名無しさん :2005/07/13(水) 00:57:59
>>681 This と this は区別するのかなぁ??
683 :
434−435 :2005/07/13(水) 00:58:30
434ですなんどもすみません(;´・ω・`A 期限切れていますが骨組み、未完でも構いませんのでどなたか作成お願いできないでしょうか
684 :
681 :2005/07/13(水) 00:58:39
685 :
デフォルトの名無しさん :2005/07/13(水) 01:25:05
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 次値を返す関数を作成せよ f(x)=(e^-x)cos(2πx) その関数を用いて0≦x≦3の間で0.1刻みで計算し、結果をリダイレクトでファイルに記録せよ [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:今週中 [5] その他の制限:特になし 難しすぎて意味が分かりません助けてください
ファイル名を入力し、"program"という文字列がそのファイルに入っているかどうかを
外部ハッシュ法をつかって検索するプログラムを作成しました、
しかしリナックスで実行すると「no:見つかりません」と出力されてしまいます
(ウィンドウズで実行するとエラーになってしまいます)
ちなみにファイルの中(*)には"program"は入っています
どうか修正をお願いします m(__)m
作ったコードはコレです↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/712.txt なにか説明不足な点がありましたら仰って下さい
[(*)ファイルの中身](↓ドラッグすると分かりますが、スペースが入って15文字になっています)
gktnbttotnjo
program
nxpoyguru
fbujqneup
opzsfeqvnszr
swopfqdtplch
・
・
・
(50〜1万個程度)
688 :
687 :2005/07/13(水) 04:55:54
あ、ちょっと失敗しましたが ファイルの中身はスペースがあって、全部文字数が15文字に揃ってます
689 :
デフォルトの名無しさん :2005/07/13(水) 06:24:41
>>686 #include <stdio.h>
#include <math.h>
#ifndef M_E
#define M_E 2.718281828459045
#endif
#ifndef M_PI
#define M_PI 3.141592653589795
#endif
double f( double x ){ return( pow( M_E, -x )*cos( 2*M_PI*x ) ); }
int main( void )
{
double x;
for( x=0; x<=3.0; x+=0.1 ){
printf("%lf\n", f(x));
}
return 0;
}
692 :
デフォルトの名無しさん :2005/07/13(水) 09:48:43
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):自分の名前を指定した回数だけ表示するプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:今日の11時まで [5] その他の制限:ほんとに簡単におねがいします
693 :
鹿児島大情報一年 :2005/07/13(水) 10:00:52
プログラミング初心者なのですが、教科書の問題でキーボードから整数値の駐車時間を分単位で読み込む。 ・駐車時間が1時間未満ならば無料 ・駐車時間1時間から3時間未満までは150円 ・3時間以上は、一律300円 ・0(ゼロ)を入力すると終了する。 というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
694 :
デフォルトの名無しさん :2005/07/13(水) 10:14:36
[1] 授業単元:プログラミング演習I [2] 問題文: 以下のようなアルゴリズムで配列のソートを考える。 例として以下のような配列を使う。 a[0]|a[1]|a[2]|a[3]|a[4]| 5| 9 | 6 | 3 | 4 | 整数 n を検査する配列の要素数とする。 1.n = 5 (配列の要素数) とする。 2.a[0] 〜 a[n-1] までの中で 最も大きいものを探す。この最大値を持つ添え字を m とする。 3.a[m] と a[n-1] の値を入れ替える。(もちろん m == n-1 なら入れ替える必要はない) 4.n-- を行った後 n <= 1 ならプログラム終了 5.2へもどる 以上のような動作を行う関数 void array_sort( int a[], int n ) を作成しなさい。 作成の準備としては ・配列 a[] と、調べたい要素数 len を与えた際に、配列中最大値を持つ添え字を返すような関数 int max_index( int a[], int len ) を記述する。 この関数は a[0] 〜 a[len-1] までの中から最大値を持つ添え字 (m) を返す。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7/12まで [5] その他の制限:構造体やポインタなどはまだ習っていません。 どなたかご教授お願いします。
695 :
東海大学前 :2005/07/13(水) 10:15:26
プログラミング初心者なのですが、キーボードから整数値の駐車時間を分単位で読み込む。 ・駐車時間が1時間未満ならば無料 ・駐車時間1時間から3時間未満までは150円 ・3時間以上は、一律300円 ・0(ゼロ)を入力すると終了する。 というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
696 :
694 :2005/07/13(水) 10:16:02
すいません、期限は7/19までの間違いです。
>>693 for(::){
scanf
if(h==0)break;
if(h<60)a=0;
else if(h<180)a=150;
else a=300;
}
698 :
東海大学前 :2005/07/13(水) 10:21:11
プログラミング初心者なのですが、キーボードから整数値の駐車時間を分単位で読み込む。 ・駐車時間が1時間未満ならば無料 ・駐車時間1時間から3時間未満までは150円 ・3時間以上は、一律300円 ・0(ゼロ)を入力すると終了する。 というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
…
700 :
東海大学前 :2005/07/13(水) 10:42:01
すいません。間違えて同じ文章を二回載せてしまいました。何か宣言が正しく終了されていないってでるのですが、どうしたらよろしいですか?
702 :
東海大学前 :2005/07/13(水) 10:52:47
何度もすいません。プログラム実行例を載せるのを忘れてました。 PARKING Input minutes = 430 Parking time => 7:10 =>\300 Input minutes = 127 Parking time => 1:7 =>\150 Input minutes =67 Parking time => 1:7 =>\150 Input minutes =32 Parking time =>0:32 =>\ 0 Input minutes =0
703 :
東海大学前 :2005/07/13(水) 10:54:21
最初のforのあたりだと思います。
…
705 :
デフォルトの名無しさん :2005/07/13(水) 11:23:46
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):数字を入力し、入力した数字の中で一番大きい素数と 二番目に大きい素数を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月14日まで [5] その他の制限:入力する数字は999が最大です。3以下の数字(1と2)はすべて3にしてください。数字は自然数を入力します。 どなたかよろしくお願いします。
706 :
東海大学前 :2005/07/13(水) 11:25:12
どうかお願いします。
707 :
デフォルトの名無しさん :2005/07/13(水) 11:37:43
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 自分の名前を指定した回数だけ表示するプログラム namae.cを作成せよ。 例えば次のような形。何回表示しますか?: 10 (1)大西 (2)大西 (途中省略) (10)大西 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限: [5] その他の制限:ほんとに簡単におねがいします
708 :
デフォルトの名無しさん :2005/07/13(水) 11:41:59
#include <stdio.h> int main(void){ int num,i; printf("何回表示しますか?: "); scanf("%d",&num); printf("\n"); for(i=0;i<num;i++) printf("大西\n"); return 0; }
710 :
705 :2005/07/13(水) 11:55:38
例えば422を入力した場合の出力結果は、 1番大きい素数:421です。 2番目に大きい素数:419です。 と、出力するようにお願いします。
711 :
デフォルトの名無しさん :2005/07/13(水) 11:57:46
713 :
デフォルトの名無しさん :2005/07/13(水) 12:28:38
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):右のように九九の表に | 1 2 3 4・・・・8 9 縦横のタイトルを加えよ ----------------------------- 1 | 1 2 3 4 8 9 2 | 2 4 6 8・・・ . . . 9 | 9 18 27 36・・・ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限: [5] その他の制限:
714 :
デフォルトの名無しさん :2005/07/13(水) 12:38:32
>>713 あれずれてる
| 1 2 3 4・・・・8 9
-----------------------------
1 | 1 2 3 4 ・・・ 8 9
2 | 2 4 6 8・・・・
みたいなかんじでおねがいします
>>713 本当にこんなのでいいのかな?
九九が入力されなかった時はとりあえず終了するけど。
#include <stdio.h>
int main(void){
int i=1,j=1,x;
printf(" | 1 2 3 4 5 6 7 8 9\n"
"-----------------------------\n");
while((scanf("%d",&x)==1)&&(x==i*j)&&(i<10)){
if(j==1)printf("%d|",i);
printf(" %2d",x);
j++;
if(j>=10)j=1;i++;printf("\n");
}
}
716 :
715 :2005/07/13(水) 13:10:55
あ、最後 if(j>=10)j=1;i++;printf("\n"); を if(j>=10){j=1;i++;printf("\n"); } にしておいて
717 :
デフォルトの名無しさん :2005/07/13(水) 13:14:59
718 :
715 :2005/07/13(水) 13:23:03
>>717 九九の表にタイトルをつけるプログラムだから、九九の表は用意して入れて下さい。
こういう事じゃないの?
>>713 #include <stdio.h>
int main(){
const int MAX_NUM = 9;
const int SEPARATE_NUM = 40;
const char SEPARATE_CHAR = '-';
int i, j;
printf("\t|");
for(i = 1; i <= MAX_NUM; i++){
printf("%3d", i);
}
printf("\n");
for(i = 0; i < SEPARATE_NUM; i++){
printf("%c", SEPARATE_CHAR);
}
printf("\n");
for(i = 1; i <= MAX_NUM; i++){
printf("%d\t|", i);
for(j = 1; j <= MAX_NUM; j++){
printf("%3d", i * j);
}
printf("\n");
}
return 0;
}
720 :
デフォルトの名無しさん :2005/07/13(水) 13:45:22
>>719 はいそうです!わかりにくくてすいません!!!
どうもありがとうございます!!!!!!!!!!
721 :
694 :2005/07/13(水) 14:38:08
すいません。修正箇所がもう1つ。 作成の準備としては ・配列 a[] と、調べたい要素数 len を与えた際に、配列中最大値を持つ添え字を返すような関数 int max_index( int a[], int len ) を記述する。 この関数は a[0] 〜 a[len-1] までの中から最大値を持つ添え字 (m) を返す。 を作成した上で配列のソートを行う関数void array_sort( int a[], int n ) を作成する。 以上です。(最後の一行が抜けてました) よろしくお願いします。
>>687 LINUXなの?WINDOWSなの? コンパイラは?
723 :
687 :2005/07/13(水) 15:58:43
一応リナックスでお願いします コンパイラはgccです
>>721 #include <stdio.h>
void disp( char *mes, int a[], int len ) {
int i;
puts( mes );
for ( i=0; i<len; i++) printf("a[%d]=%d\n", i, a[i] );
}
int max_index( int a[], int len ) {
int i, m=0 ;
for ( i=1; i<len; i++ ) if ( a[m] < a[i] ) m= i ;
return m ;
}
int array_sort( int a[], int n ) {
int i, m, work ;
for ( i=n-1; i>1; i-- ) {
m= max_index( a, i ) ;
if ( i != m ) { work= a[m] ; a[m]= a[i] ; a[i]= work ; }
}
}
int main() {
int a[]= { 5, 9, 6, 3, 4 } ;
int n= sizeof( a ) / sizeof( a[0] ) ;
disp( "before", a, n );
array_sort( a, n ) ;
disp( "after", a, n ) ;
}
void disp()の引数は意味合い的にlenじゃ無いな・・・orz void disp( char *mes, int a[], int n ) { int i; puts( mes ); for ( i=0; i<n; i++) printf("a[%d]=%d\n", i, a[i] ); } 気が向いたら差し替えてくれぃ。 どーでもいい修正スマソ
>>681 #include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char str[256];
char *words[5000];
int count = 0;
while (scanf("%*[^a-zA-Z]"), scanf("%255[a-zA-Z]", str) == 1) {
int i;
for (i = 0; (str[i] = toupper(str[i])) != '\0'; i++);
for (i = 0; i < count && strcmp(str, words[i]); i++);
if (i == count) words[count++] = strdup(str);
}
printf("異なる単語の数:%d\n", count);
while (count--) free(words[count]);
return 0;
}
727 :
デフォルトの名無しさん :2005/07/13(水) 17:09:18
[1] 授業単元: [2] 一行に1つ整数が書かれているファイルがある。 これを読みこんで、昇順にソートして表示するプログラムを作りなさい。 ・データファイルの名前はコマンドライン引数で与える ・使い方を誤った時、ファイルが開けない時にはエラー を出力する。 ・データが1000行以上あればエラー(警告)を出力する [3.1] Linux [3.2] イーマックス [3.3] 言語:C [4] 7月16日 さっぱりです・・・助けてください。
728 :
694 :2005/07/13(水) 17:25:14
>>724 ありがとうございます。
せっかく作ってくださったのに申し訳ないですが、
char*と、sizeof()と、"before"、"after"などはまだ習ってないんです。
どうすればいいですか?
>[3.2] イーマックス また来たよこのバカ
>>727 #include <stdio.h>
int main(int argc, char **argv)
{
char buf[1000];
if (argc < 2) {fprintf(stderr, "Error!\n"); return 1;}
sprintf(buf, "sort -n %.900s", argv[1]);
system(buf);
return 0;
}
>>729 lispでかかれたコンパイラを使えってことじゃね?
>>731 「[3.2]コンパイラ」って開発環境も含んでんじゃね?
VisualStudio.netとか書いても誰も文句言わねーじゃん。
もしそうならEmacsにはコンパイルボタンが付いてるから無問題。
makefileがあればmakeしてくれる。無かったら動かないけど。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):アドレス帳を作る。3つの文字列変数、氏名、振り仮名、電話番号をメンバとする構造体を用いて氏名と電話番号でそれぞれソートしたファイルを作成しファイルに出力せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): cc [3.3] 言語:C [4] 期限:7月15日まで [5] その他の制限:構造体とファイル出力を用いよ。状況に応じてポインタなども使用せよ。 お願いします
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): データファイルkadai.datには,4バイトの整数データが1個書き込まれているが, 上位2バイトと下位2バイトが入れ替わっている。 この整数データをきちんと読み込むプログラムを作成し,その値を答えなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:今日中 [5] その他の制限: #include <stdio.h> void main(void) { int a,*b; FILE *fp; b=&a; b=b+2; fp=fopen("kadai.dat","rb"); fread(b,2,1,fp); fread(&a,2,1,fp); fclose(fp); printf("%d%d\n",a,*b); } kadai.datはバイナリファイルになってるのでこのようにしてみたんですが どうもうまく動かないんでどう修正していけばいいのか教えていただけませんでしょうか
>>734 こゆことなんでなくて?
#include <stdio.h>
int main(void)
{
unsigned long data;
FILE *fp;
fp = fopen("kadai.dat","rb");
fread(&data, 1, sizeof(data), fp);
fclose(fp);
data = (data >> 16) | (data << 16);
printf("%08lx\n", data);
return 0;
}
>>732 そりゃVS.NETはコンパイラ含めてのVS.NETだからだろ
739 :
734 :2005/07/13(水) 18:49:27
740 :
K :2005/07/13(水) 18:53:54
[1]プログラミング1 [2]@N組の(x , y)がある。4次と3次の最小二乗多項式で近似せよ. A3次の多項式に対して,x 軸との交点とy 軸との交点を求めよ。(2分法またはニュートン法) [3]環境 [3.1]OS:unix [3.2]gcc [3.3]言語:C [4]7月26日11時 [5]できるだけ簡単にお願いします。コメント文も少しお願いします。 宜しくお願いします。
744 :
734 :2005/07/13(水) 19:22:37
>>735 いろいろ調べながら見ていてどのような処理になっているか把握出来ました
ありがとうございました
745 :
デフォルトの名無しさん :2005/07/13(水) 19:36:37
質問です。 マインスイーパーフラッグで2人対戦で爆弾を見つけていくGameをつくりました。 そこで、考える時間設定をしたいんですけど、どういう関数を使えばいいんでしょうか? 10秒たつとPlay順がうつるようにしたいです。
>>734 ==744
b=b+2;
の部分ね、これだとsizeo(int)*2バイト進んじゃう(32ビットintだったら8バイト進む)。
2バイト進めたいなら
b = (int *)( (char *)b + 2 ); かな。
だけど、printfで*bを見た瞬間に警察に捕まります。
ちなみにそこまでやったんならとりあえず自分が思うように組んでみるニダ
749 :
745 :2005/07/13(水) 21:14:18
宿題です。 マインスイーパーフラッグで2人対戦で爆弾を見つけていくGameをつくってください。 10秒たつとPlay順がうつるようにしたいです。
凄いな、なんだか感動すら覚えた
>>728 (=
>>694 )
バグってた。ごめんな。
習ってないところも直したけど、行数の関係で詰めちゃったから適宜改行しる
#include <stdio.h>
int max_index( int a[], int len ) {
int i, m=0 ;
for ( i=1; i<len; i++ )
if ( a[m] < a[i] ) m= i ;
return m ;
}
int array_sort( int a[], int n ) {
int i, m, work ;
for ( i=n; i>0; i-- ) {
m= max_index( a, i ) ;
if ( i-1 != m ) { work= a[m] ; a[m]= a[i-1] ; a[i-1]= work ; }
}
}
int main() {
int i, a[]= { 5, 9, 6, 3, 4 }, n=5 ; /* nはa[]の個数 */
puts( "BEFORE" ) ; for ( i=0; i<n; i++ ) printf( "a[%d]=%d\n", i, a[i] ) ;
array_sort( a, n ) ;
puts( "AFTER" ) ; for ( i=0; i<n; i++ ) printf( "a[%d]=%d\n", i, a[i] ) ;
}
753 :
694 :2005/07/13(水) 21:37:18
>>751 いえいえ、わざわざ修正していただいて、ありがとうございました。
自分ではいくら考えてもわからなかったもので、ホントに助かりました〜。
今まだ答えられてない宿題どれ?暇つぶしにやるから
>>740 ニュートン法
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ITER_MAX 10000
#define EPS (1.0e-5)
#define INITIAL_VALUE 3.0
#define X_3 1.0
#define X_2 2.5
#define X_1 (-3.0)
#define X_0 5.0
double f(double x){ return( X_3*x*x*x + X_2*x*x + X_1*x + X_0 ); }
double df(double x){ return( 3*X_3*x*x + 2*X_2*x + X_1 ); }
int main( void )
{
unsigned int cnt = 1;
double old_val = INITIAL_VALUE;
double new_val;
for(;;cnt++){
new_val = old_val - f(old_val) / df(old_val);
if( fabs(new_val - old_val) < EPS ) break;
old_val = new_val;
if( cnt >= ITER_MAX ){
printf("didn't converge in %d times iteration.\n", ITER_MAX);
return -1;
}
}
printf("answer = %lf\n", new_val);
return 0;
}
756 :
デフォルトの名無しさん :2005/07/13(水) 21:51:33
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): データファイルensyuu18.datは,4バイトの整数データが10個書き込まれている40バイトの データファイルである。このファイルから10個のデータを読み込み,その平均値を答えなさい。 (ただしバイナリーモードでファイルをオープンすること) [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C [4] 期限:木曜PM24:00まで [5] バイナリーモードがよくわかりません・・お願いいたします!!
#include <stdio.h> int main(void) { int num[10], sum, i; FILE* fp = fopen("ensyuu18.dat", "rb"); if( fp == NULL) { return 1; } // 読み込みエラー fread((void*)num, sizeof(int), 10, fp); sum = 0; for(i=0;i<10;i++) sum += num[i]; printf("AVG:%f\n", (double)sum / 10.0); return 0; }
758 :
デフォルトの名無しさん :2005/07/13(水) 22:04:53
>>757 SUGEEEEEEEEEEE!!!
ありがとうございました!
あ、ファイル閉じてねーや。sum=0;の前にfclose(fp);をよろしく。
そこでファイル閉じてなくて困ることはまあ無いだろうけどな
>>523 #include <stdio.h>
#include <string.h>
int main(void)
{
int n = 0;
while (scanf("%d", &n) != 1 && scanf("%*[^\n]") != EOF)
;
{
char sieve[n + 1];
int p, c;
memset(sieve, 1, sizeof(sieve));
sieve[1] = sieve[0] = 0;
for (p = 0; p * p < sizeof(sieve); p++)
if (sieve[p])
for (c = p + p; c < sizeof(sieve); c += p)
sieve[c] = 0;
for (p = 0; p < sizeof(sieve); p++)
if (sieve[p])
printf("%d\n", p);
}
return 0;
}
>>756 お前が同じ大学の同じ授業取ってるという確信が俺にはある
修正入ってるけど問題文見ればほぼそのままだし
バイナリだとモードのとこにbつくだけ のはず
期限木曜24時じゃなくて今日の23:59なら間違いなく同じ
と734の俺が言ってみる
そして二人はいつしか恋に落ちたのです
単位も落ちたのでした。
俺も俺も
766 :
デフォルトの名無しさん :2005/07/13(水) 22:42:44
767 :
デフォルトの名無しさん :2005/07/13(水) 23:06:50
[1] c言語 [2] ハノイの塔の棒が四つバージョン。 [3] 環境 [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 7/15まで。 [5] 特になし。
ウソくさい宿題だな
>ハノイの塔の棒が四つバージョン。 ここがいかんなw
771 :
434−435 :2005/07/13(水) 23:20:53
プログラマのみなさんでも434−435は難しすぎるのでしょうか・・・? 木曜日が最終提出期限だったのですが。。。 骨組みとかまでの適当でも構わないのでおねがいします(´Д⊂
棒だけ4つあっても3だけ使うでいいじゃん
>>771 入力ファイルのフォーマットがみょうちくりんで
めんどくさい。
あまり細かく指定されると仕事みたいでつまらん
>>771 下手な釣り方じゃ難しいだろうな。
プログラマのみなさんはめんどくさいの大嫌いなのです、きっと。
その問題の用件満たすもの作るのはプログラミングというよりは事務作業だ。
会員 第一ピリオド 第二ピリオド 第三ピリオド
番号 ゲーム数 ゲーム数 ゲーム数
#1 #2 #3 #4 #5 #1 #2 #3 #4 #5 #1 #2 #3 #4 #5
1 6 3 5 7 9 8 8 5 2 0 3 7 6 5 2
2 1 2 4 7 10 10 10 3 7 10 5 7 7 8 9
3 2 4 2 5 2 1 8 10 3 6 6 7 6 8 5
4 5 8 0 10 0 9 8 9 10 10 5 5 5 3 5
5 1 2 3 4 5 6 7 8 9 10 9 8 7 9 5
6 8 8 4 8 3 6 7 2 8 6 8 9 8 2 0
7 6 6 1 6 6 1 6 7 4 9 1 8 10 5 3
8 7 3 4 7 2 8 9 7 3 2 4 5 10 9 7
>>434-435 member_data.dat には上のデータもあるらしいけど
これなに??問題見た感じでは必要ないと思うんだけど。
>>767 最短手数を求めるだけだが。
#include <stdio.h>
int hanoi3(int n) { return (1 << n) - 1;}
int hanoi4(int n) {
if (n == 1) return 1;
else {
int min = 2 + hanoi3(n - 1);
int k = 2;
for (; k < n; k++) {
int v = hanoi4(k) * 2 + hanoi3(n - k);
if (min > v) min = v;
}
return min;
}
}
int main(void)
{
printf("%d\n", hanoi4(16));
return 0;
}
プログラマの人は基本的に面倒くさがりなんでつね メモ 〆(..*) メモ
>>778 じゃねーんだよ。金ももらえんのに、タダで答えてやってるんだから、
手を抜いて当然。
>>778 どんな分野でもある程度技術を用いる仕事をするようになればわかるよ
「答えてやってる」とか考えてる奴は逝ってほしい。
燃料乙
ちっとも燃えませんでした
2ちゃんは荒んでるからマナー必要ないとか考えてる奴は回線切ってほしい。
>>787 こういう言葉の通じない猿が一番性質悪い
791 :
デフォルトの名無しさん :2005/07/14(木) 01:25:17
龍馬(将棋)を8クイーン同様に互いの効きを外すようにして配置することを考える。 ただし、将棋盤なので8×8では 無く9×9とし、9枚配置するものとする。 ・配置は全部で何通りあるかを求めるプログラムを作成せよ という問題があるんですが、解けますか???
ごめんマジで俺の知識が無いだけなのだが >8クイーン同様に互いの効きを外すようにして がわからん
793 :
デフォルトの名無しさん :2005/07/14(木) 01:29:12
互いの動く範囲に重ならないようにです お願いしますm(__)m
795 :
デフォルトの名無しさん :2005/07/14(木) 01:34:20
1] Cによるプログラミング [2] 龍馬(将棋)を8クイーン同様に互いの効きを外すようにして配置することを考える。 ただし、将棋盤なので8×8では 無く9×9とし、9枚配置するものとする。 ・配置は全部で何通りあるかを求めるプログラムを作成せよ [3] [3.1] OS:Windows/ [3.2] visualstadio.net [3.3] 言語:どちらでも可 [4] 期限:今 [5] その他の制限:8クイーン
>[4] 期限:今 期限過ぎちゃいましたね
もはや8クイーンではないとおもうんだが >[5] その他の制限:8クイーン
798 :
デフォルトの名無しさん :2005/07/14(木) 01:37:57
1] Cによるプログラミング [2] 龍馬(将棋)を8クイーン同様に互いの効きを外すようにして配置することを考える。 ただし、将棋盤なので8×8では 無く9×9とし、9枚配置するものとする。 ・配置は全部で何通りあるかを求めるプログラムを作成せよ [3] [3.1] OS:Windows/ [3.2] visualstadio.net [3.3] 言語:どちらでも可 [4] 期限:できるだけはやく [5] その他の制限:バックトラック法をつかって
龍馬(りゅうめ) 斜め方向なら何目でも、縦横方向なら一目だけ進むことができる。 まずはここからだな
全て揃ってる場合の組み合わせ? 次の一手の指し方の数求める? 上でいいのか?
配置の仕方が何通りあるのか
9枚配置って書いてあったな、すまん もちろん二歩とかも計算しないとな
>>802 うーんと、龍馬の効き筋に居なければ、駒が複数同じ列に居てもいいとおもうけど、どうかな
804 :
デフォルトの名無しさん :2005/07/14(木) 02:04:40
ここまで考えてもらっといてこんなこと言い出しずらいのですが8クイーンと言うのは 8行8列の板にクイーンを8個置くというプログラミングで僕がお願いしたのはそれの 龍馬バージョンすなわち8行8列の板に竜馬効きのない所に8個置くといういう問題な ので二歩とか関係ないです
将棋の根本的なルール関係ないのか('A`)
>>804 そのレスでやっとわかった!
■□□□□□□□■
□■□□□□□■□
□□■□□□■□□
□□□■■■□□□
□□□■■■□□□
□□□■■■□□□
□□■□□□■□□
□■□□□□□■□
■□□□□□□□■
こういうのを並べろって話だな
808 :
デフォルトの名無しさん :2005/07/14(木) 02:18:47
そうです がんばってください!!お願いします!!!!
>>798 #include <stdio.h>
int main() {
printf("%s", "0 とおりのおき方が見つかりました\n");
return 0;
}
俺もやっと問題の意味がわかった・・・
回転、鏡像回をどーやって回避するんじゃろうか。 8クイーンではどーやってんだろ(?) ・・・まーぼちぼち、組んでみますか。
あるのは9つの龍馬と9*9の将棋板か 8クイーンのコードあれば参考になるんだろうが
#include <stdio.h>
#include <stdlib.h>
#define QS(8)
#define QMASK((1<<(QS))-1)
#define QMSB(QMASK&~(QMASK
>>1 ))
void
eq(unsigned s, unsigned u, unsigned m[], unsigned l, unsigned r)
{
if (!u) {
putchar('\n');
for (unsigned i = 0; i < QS; i++) {
for (unsigned j = QMSB; j & QMASK; j >>= 1)
putchar(m[i]&j ? '!' : '.');
putchar('\n');
}
} else {
unsigned uu = u & ~(l|r);
while (uu) {
unsigned b = uu&~(uu-1);
uu ^= b;
m[s] = b;
eq(s+1, u^b, m, (l|b)<<1, (r|b)
>>1 );
}
}
}
自身ねーなぁ・・・回転/鏡像解を排除してないもので、352個発見。
馬に縦横の効きがあると勘違いした orz
それじゃクイーンのままだw
67809372個・・・ホントかよ・・・(回転/鏡像解を排除していない)
クイーンや龍王と違って龍馬は縦横消せないから計算面倒なのか
>>819 うわぁ、翁のページだ。
ところで亀で恐縮だが、
>732
>Emacsにはコンパイルボタンが付いてるから
???
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク): 構造体を用いて、縦横(各被験者ごと/科目ごと)を集計し、総点、平均点、最高点を求めよ (deta.txtを読み込む) deta.txt 氏名 英語 数学 国語 理科 社会 A 70 56 66 45 88 B 66 85 68 55 73 C 55 65 53 67 55 D 85 72 76 58 62 E 92 70 45 73 55 [3] 環境 [3.1] OS:Unix [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:本日五時まで お願いします
data.txtじゃないのか…?
「データ」じゃなくて「出た」なんです。
いや、多分というか絶対そうだと思いますが、なぜかそう指定されました
思わずfopen("neta.txt", "r")したくなるな。
>>798 回転/鏡像解ぬき8480779個(20分かかる・・・)
個数のチェック誰かたのむ。
しかし・・・なんだな。プログラムがショボすぎて見せられん。
診断室に出せそうなレベルだ(鬱)
>>823 ウンコが出たんだな、きっとそうだ、うん。
>>821 seiseki.txt の間違いじゃないのか?
前プログラム作ってやっただろ、むかつく奴だなテメー
仕様と違ってたならそう書けばいいだろうに、C言語なら俺に聞け のスレでも
同じように聞いて回ってるし・・・ 礼儀知らずにも程がないかい?
ま、他の方たちと比べるとしょぼいのは認めるけどさ、あんまりだ
同じ講師の宿題で違う奴ってケースはここ最近多いからなぁ。 そういう時は以前の回答をリンクしたりコピペすればええ。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):住所録 メニュー:追加、修正 項目:名前、住所、電話番号(市外局番、局番、番号)年齢 *名前=20文字(半角)住所=サイズが可変(ただし最大255文字) *電話番号(市外局番=4桁、局番=2桁、番号=4桁) *年齢=0〜120 データレコード最大数=10000件 *注意事項=データレコードが10000件に満たない場合にメモリ上に10000件分のエリアは用意しないこと データファイルについて データファイルはバイナリファイルとし、ファイル名は”ADRSDB.DAT”とする 修正が選択されたならば、選択されたレコードを表示する [3] 環境 [3.1] Windows2000 [3.2] コンパイラ(バージョン): .cpp [3.3] 言語:どちらでも可 [4] 期限:2005年7月14日17:00まで [5] その他の制限:どこまで習っているか、=CとC++をかじった程度ならべく簡単にお願いします。 よろしくお願いします。
>>820 あ、マンドクサイからボタンて言っちゃった。
メニューバーの Tools→Compile...
でMakefileを探して実行してくれる。
コマンドはわからないから、メニューバーなんかねぇよ。とか言われたら困る
ちなみにXEmacsだとボタンが付いてる。
>>834 大丈夫、compileコマンドなら使っているから。
そうか、メニューバー(つーかGUI)使ってないけど便利なのかもね。
M-x compile って書け。
837 :
デフォルトの名無しさん :2005/07/14(木) 14:26:00
838 :
434 :2005/07/14(木) 14:40:52
>>776 問題文そのまま移しましたので、いらない部分もあるかと思います><
4時半ごろまでに作成おねがいできるでしょうか?
839 :
821 :2005/07/14(木) 16:08:49
>>829 間に合いました。ありがとうございます
>>830 いえ、そのC言語なら俺に聞けスレで聞き回ってるのは自分ではありません
>>833 > [3.2] コンパイラ(バージョン): .cpp
> [3.3] 言語:どちらでも可
>[4] 期限:2005年7月14日17:00まで
>[5] その他の制限:どこまで習っているか、=CとC++をかじった程度ならべく簡単にお願いします。
@コンパイラの欄にみんなgccとかbccとか書いてるからって適当に書くのはやめましょう
A言語はいっぱいあります。2行下を読まなくても分かるように書きましょう
B投稿する前に文を読み返しましょう、もしくは方言を使わないようにしましょう
>>840 さん
こういうことでしょうか→VC++6.0
なぜコンパイラがcppと考えたのか、そこんところを聞きたい。
844 :
デフォルトの名無しさん :2005/07/14(木) 19:05:57
[1] 授業単元:C言語プログラミング [2] 問題: スタック構造を使って逆ボーランドを製作せよ。プログラムには プッシュ、ポップ、演算をそれぞれ関数化し、作成すること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C [4] 期限: 今週の日曜日の夕方くらいでお願いします。 [5] 制限:説明がついていますと,とてもうれしいです。 よろしくお願いします。
>>843 たぶんいままでファイル名.cppってやってきたので・・・これじゃないかなって思いまして。
>>844 #include <stdio.h>
#define STACK_SIZE 256
typedef struct{ char buf[STACK_SIZE]; int current; }stack_t;
void push(stack_t *stk, char data){ if( stk->current < STACK_SIZE ) stk->buf[stk->current++] = data;}
char pop(stack_t *stk){if( stk->current != 0) return stk->buf[--stk->current]; else return 0;}
int main()
{
static stack_t s;
char *p, *str = "ポーランド";
char tmp[3] = {0};
for( p = str; *p; p+=2 ){ push(&s, *(p+1)); push(&s, *p);}
while(0 != (tmp[0] = pop(&s))){tmp[1] = pop(&s);printf("%s", tmp);}
putchar('\n');
return 0;
}
>>845 それが「コンパイラ」だと思ったわけですか?
そんなレベルでよくプログラミングをやるなあ。
849 :
844 :2005/07/14(木) 20:10:49
846さん、ありがとうございますー。 大変申し訳ないのですが、このプログラムをここでこうして ああしてなど、説明しなければならないのですが、 よろしければ、その説明もしていただけないでしょうか? お願いします。
うーむ(^^;;
846でいいのか…
854 :
トタケケ :2005/07/14(木) 22:56:54
みなさん!! お願いします! [1] 授業単元:計算機数学序論 [2] 問題文(含コード&リンク):0時0分からa時b分(0<=a<24,0<=b<60) までの時間を計算する関数Timeを作り、それを使い、2つの時刻 a1時b1分とa2時b2分をキーボードから入力して(a2時b2分の方が a1時b1分より後とする)、「a1時b1分からa2時b2分までの時間は ○時間○分です。」と表示せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ(バージョン): Microsoft VisualStudio 6.0 [3.3] 言語:C++ [4] 期限:今日中 [5] その他の制限:関数、配列まで習ってます。 今日中にできますかねぇ?お願いします!!
>>854 その問題なら最近見たぞ。このスレをよく見て味噌。
int timedisp(int a1, int b1, int a2, int b2) { int t1, t2; t1 = 60*a1+b1; t2 = 60*a2+b2; if(t1<t2){ puts("error time1のほうが後です。"); return 0; } printf("%d時%d分から%d時%d分までの時間は%d時間%d分です。\n" , a1, b1, a2, b2, (t1-t2)/60, (t1-t2)%60); return 1; }
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 出席番号101、102、103、104、105の5人の学生のテストの点数を入力し成績処理するプログラムを作れ。 結果の出力はこのようする。 出席番号 点数 成績 101 90 S 102 80 A 103 45 D 104 60 C 105 76 B 平均点:70 点数の判定基準 90点以上 = S 80点以上90点未満 = A 70点以上80点未満 = B 60点以上70点未満 = C 60点未満 = D [3] 環境 [3.1] OS:Windows Me [3.2] コンパイラ(バージョン):C machine Version 2.02 [3.3] 言語:C? [4] 期限:今日 [5] その他の制限:変数、データ構造 配列、制御構造 繰り返し,if 環境とかよくわからないので変なことかいてあるかも… もう切羽詰って泣きながらやっているのですが… だれか助けてください
858 :
デフォルトの名無しさん :2005/07/15(金) 00:35:33
859 :
857 :2005/07/15(金) 01:10:24
>>858 ありがとうございます!!!
本当に感謝します!!
でも…
もう一問あったんでどなたかお願いできませんでしょうか…(´・ω・`)
[2] 問題文(含コード&リンク):
問1
商品の金額を入力すると、消費税額を計算して表示するプログラム
[消費税と商品の税抜き金額の表示]
[消費税率は変動する可能性があるのでプリプロセッサ(#define)を使う]
問2
商品の金額を入力する前に、税込価格か税抜価格かを入力し、税抜価格だったら消費税を計算して、消費税と税込価格を表示させる
問3
10回繰り返して金額を入力して計算できるようにする
[繰返しの途中でも終了できるようにする]
[while文を使って終了するまで何度でも繰り返せるようにする]
860 :
857 :2005/07/15(金) 01:12:22
問4
繰返して入力した金額を合計して、総額(税込)を最後に表示させる
問5
複数の客の購入金額を繰返して入力して、各客の総額を最後に表示できるようにする
[全ての客の総額(総売上額)も表示させる]
問6
プログラムのソースに、/* */で囲み注釈を適宜記述
問題文のみ書かせていただきます。
他は
>>857 の通りです。
[ ]内は発展問題ですので、どうしてもというわけではありません。
次から次へ図々しいのは承知してますが、よろしくお願いいたします。
問1 int x, tax; scanf("%d", &x); tax = x * 0.05 / 1.05; printf("%d\n", tax); /* 内税商品金額から消費税額を求める */ 問2 int f, x, tax; scanf("%d %d", &f, &x); if (f) {tax = x * 0.05; printf("%d %d\n", tax, x + tax); } /* 0 金額 の時は問題文に動作がかいてないので何もしない、1 金額 のときは消費税額と合計額を出力 */ 問3,4 int i, x, sum = 0; for (i = 0; i < 10; i++) {scanf("%d", &x); sum += x; } printf("%d\n", sum); /*10回金額を受け取り、その後、合計金額を出力する。 */ 問5 int x; while (scanf("%d", &x)) { printf("%d", x); } /* ユーザーに各客の購入総額を入力させ、それを出力する */ 問6 やってある。 補足てきとーに#include .. やら main()やら おぎなってくだちい。
862 :
デフォルトの名無しさん :2005/07/15(金) 02:24:19
1]C++言語T [2]ファイルスコープとひとつの関数全体に関係するブロックスコープを持つ変数の宣言する位置および、その変数の使い方、有効な範囲のついて使い方の相違を説明せよ。 [3] 環境 [3.1]Windows [3.3] 言語C++ [4] 期限:緊急 [5] その他の制限:関数まで はじめまして。本日テストを控えていまして、自分達の力ではどうしようもないでした。どなたか親切な方ご教授お願いします。
ファイルスコープを持つ変数。 宣言位置、関数の外。 変数の使い方、引数でパラメータを渡すと宣言等が面倒になるため、パラメータを渡す用途で用いる。 有効な範囲、ファイル全体。 関数全体に関係するブロックスコープを持つ変数。 宣言位置、関数の外。 変数の使い方、実はファイルスコープの変数でも問題ないが、関数の先頭に書いておくことで、その関数がどの変数を使うかが分かりやすくなる。 有効な範囲、関数全体。
>関数全体に関係するブロックスコープを持つ変数。 >宣言位置、関数の外。 へ〜
865 :
858 :2005/07/15(金) 02:44:07
866 :
デフォルトの名無しさん :2005/07/15(金) 02:45:08
>>863 さん
ありがとうございました!!お陰で助かりました。本日のテストがんばらせていただきます
>>864 すまんすまん。関数の中ね。
>>866 がんばれー。
俺んときはstaticを説明せよってのが出た。値を変えない変数と答えておいた。
868 :
864 :2005/07/15(金) 03:02:20
>staticを説明せよってのが出た。値を変えない変数 へ〜 ぢゃぁconstは?
代入しちゃいけない変数
>>869 の理論に基づくと
×const double pi = 3.1415926535;
さて、どうするか…
代入と初期化は違いますが何か?
ネタ、楽しませてもらってます。
期末試験の人、どんな問題だったかレポートよろしく。
staticは記憶域期間がどうかの問題だろ。とマジレス
876 :
デフォルトの名無しさん :2005/07/15(金) 09:58:03
[1] 授業単元: ネットワークプログラム
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/725.zip [3] 環境
[3.1] OS:RedhatLinux9
[3.2] コンパイラ(バージョン): 付属コンパイラ
[3.3] 言語:C
[4] 期限:本日
[5] その他:まずmylibフォルダをコンパイルして、それからdaemonフォルダをコンパイルして出力された「bb9d」を実行するとクライアントが起動するまで待っていて、
他の端末で「bb9reader」を起動するとプログラムが実行できるのですがなぜか 「bb9d」を立ち上げた段階でプログラムが起動してしまうのですがどうすればいいのでしょうか?
>>878 既にヒントの段階でランダムウォークしているんだから、後は正気に戻るロジックを書けばいいじゃん。
つーか、ヒントが汚いから追加する気になれん。
880 :
デフォルトの名無しさん :2005/07/15(金) 13:00:50
>>880 void put_time(void) {
time_t current;
struct tm *local;
time(¤t);
local = localtime(¤t);
printf("%02d:%02d:%02d", local->tm_hour, local->tm_min, local->tm_sec);
}
>>880 void put_time(void)
{
time_t now = time(NULL);
char buf[20];
strftime(buf, sizeof(buf), "%H:%M:%S", localtime(& now));
}
ありがとうございます。 しかし ¤ の文字は一体……………… キーボードで押すところありますでしょうか。
>>882 kadai.c: In function `put_time':
kadai.c:3: `time_t' undeclared (first use in this function)
kadai.c:3: (Each undeclared identifier is reported only once
kadai.c:3: for each function it appears in.)
kadai.c:3: parse error before `now'
kadai.c:5: `now' undeclared (first use in this function)
orz
885 :
844 :2005/07/15(金) 14:29:49
あつかましいですが、 この問題の説明だれかお願いしますー。
>>885 参考プログラムに
>>881 >>882 のプログラムを追加するんだ。
ちなみに、882のやつは時刻を表示しないので、仕様を満たしてないようだ。
888 :
882 :2005/07/15(金) 14:56:43
>>884 #include <time.h>
を適当に入れてくれ。
>>887 あ、忘れてた。
strftime(...);の次の行でprintf(buf);だね。
>>886 エラーが出まくりで何がなんだか…
>>888 先頭に #include <time.h> 入れてみました。
bash-2.05$ gcc -lm kadai.c
/usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/crt1.o(.text+0x5c): In functi
on `.nope':
: undefined reference to `main'
collect2: ld returned 1 exit status
gccのバージョンが古いんです。だから駄目なんでしょうか。
890 :
イン :2005/07/15(金) 15:12:38
891 :
882 :2005/07/15(金) 15:13:29
>>889 箸の上げ下ろしまで全て教えないと飯も喰えないのか?
main()関数くらい自分で適当にでっち上げてくれ。
int main() {put_time(); return 0;}
>>890 そのテキストの上の方にあるmain()「原始的な電卓」でも使っとけ。
つーか、本当にatof()の書き方は判ったのか?
それはさておき、随分とアナクロなCを教えているなぁ。
社会で全く役に立たないCか……
折角だから通報しておくか。
>>891 ハァ…。赤ん坊は箸は使えないんですが。
とりあえずやってみます。ありがとうございました。
>>893 赤ん坊はそんな舐めた口はきかねぇなぁ。
見ず知らずの赤ん坊の世話をしろと…?
896 :
820 :2005/07/15(金) 15:29:45
ああすいません、僕が悪かったです。 #include <time.h> #include <stdio.h> int main() return 0; 使ってみたらコンパイル出来ました。ですが、時間が表示されません。 strftime(...); の行のあとにprintf(buf); を入れても駄目です。
幼女のめんどうなら喜んでみようじゃないか
>>844 japan と言えば漆、china と言えば磁器と言うように、国の名前が一般名詞として
別の意味になることがある。
そこで、ポーランドがなにを意味するのかを考えて、さらに逆ポーランドが
思いつけばオッケーなのでは?
899 :
880 :2005/07/15(金) 15:51:05
キタ━━━━(゚∀゚)━━━━!!!!! やりますた。 おふた方ありがとう。
900 :
890 :2005/07/15(金) 15:52:43
main,getlineできました。 どっちも教科書に載っていました・・・ どうもありがとうございました。
902 :
デフォルトの名無しさん :2005/07/15(金) 15:59:45
質問ですが #include <stdio.h> #include <math.h> #define N 10000 /* ステップ数 */ #define T 1000 /* t=0 から t=T まで計算する */ double f1(double t, double x,double y); double f2(double t, double x,double y); int main(){ double t[N+1], x[N+1],y[N+1], dt, k11,k12,k21,k22,k31,k32,k41,k42; int i; dt=(double)T/(double)N; /* ステップ幅 */ printf("dt=%f\n",dt); t[0]=0.0; x[0]=100;y[0]=100; /* 初期値の設定 */ for(i=0;i<N;i++){ k11=dt*f1(t[i],x[i],y[i]); k12=dt*f2(t[i],x[i],y[i]); k21=dt*f1(t[i]+dt/2,x[i]+k11/2,y[i]+k12/2); k22=dt*f2(t[i]+dt/2,x[i]+k11/2,y[i]+k12/2); k31=dt*f1(t[i]+dt/2,x[i]+k21/2,y[i]+k22/2); /* 未完成 */ k32=dt*f2(t[i]+dt/2,x[i]+k21/2,y[i]+k22/2); k41=dt*f1(t[i]+dt/2,x[i]+k31/2,y[i]+k32/2); /* 未完成 */ k42=dt*f2(t[i]+dt/2,x[i]+k31/2,y[i]+k32/2); x[i+1]=x[i]+(k11+2*k21+2*k31+k41)*1/6; y[i+1]=y[i]+(k12+2*k22+2*k32+k42)*1/6;
903 :
902続き :2005/07/15(金) 16:01:09
t[i+1]=t[i]+dt; } return(0); } double f1(double t, double x,double y); { return (0.01*x-0.0001*x*y); } double f2(double t, double x,double y); { return (-0.05*x+0.0001*x*y); } というプログラムで「error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関 数ヘッダーがありません。」というエラーが出たんですが対処法が分かりません。どうか教えてください。
>>898 >844は逆ポーランドなんて言ってない
double f1(double t, double x,double y); { return (0.01*x-0.0001*x*y); } double f2(double t, double x,double y); { return (-0.05*x+0.0001*x*y); } の部分の double f1(double t, double x,double y); ← ; は必要ない。
906 :
898 :2005/07/15(金) 16:40:42
>>904 しまった。逆ボーランドか……
すっげー、引っかけ問題だな。まあ引っかかってしまって言い訳がましいが。
>>844 すまん。これ、私の手に負えるような問題じゃないや。超難問。
907 :
844 :2005/07/15(金) 16:51:50
846さんが逆ボーランドのプログラムが書いてくれたんですけど プログラムの説明をしなければならないので、プログラムで ここがこうで、あそこがこうなってーみたいな説明が欲しいんです(><)
846ではどうやっても逆ボーランドの制作などできんが・・・。
>>907 それは自分で考えろ。
というか、授業で原理の解説くらいあったんだろ?
その解説とソースを見ていけば普通分かる。
>>844 それ逆ボーランドだと思ってるの本気で?
911 :
デフォルトの名無しさん :2005/07/15(金) 17:10:29
五人4教科で各教科得点の高い順に並び替えるプログラムを作る っていう 宿題なんですけど できませんか?
912 :
デフォルトの名無しさん :2005/07/15(金) 17:10:50
整数は約数(1は含むが、その整数自身は含まない)の和がその整数に等しい とき、完全数と呼ばれる。引数numberが完全数である かどうかを判定する関数int IsPerfect(int number)と 約数判定関数int IsDivisor(int dividend, int divisor)を作成しなさい。 次にこれらの関数を使って、2 から 10000 までの間にあるすべての完全数を プリントアウトするプログラムを作成しなさい。
913 :
デフォルトの名無しさん :2005/07/15(金) 17:11:05
ボーランド?ポーランド??
>>911 それは無理なんじゃないかな?
要するに4次元のベクトルに全順序を定義できるかだけど、
各要素の大小関係では例えば、 (1,0,0,0) と (0,1,0,0) なんかは
比較不能になるんじゃないかな?
915 :
デフォルトの名無しさん :2005/07/15(金) 17:26:35
846は何のプログラムなの?
>>912 #include <stdio.h>
#include <stdlib.h>
int IsDivisor(int dividend, int divisor) {
return dividend % divisor ? 0 : 1;
}
int IsPerfect(int number) {
int i, sum = 1;
for (i = 2; i <= number / 2; i++) {
if (IsDivisor(number, i)) { sum += i; }
}
return number == sum;
}
int main(int argc, char **argv) {
int i;
for (i = 2; i <= 10000; i++) {
if (IsPerfect(i)) {
printf("%d\n", i);
}
}
return 0;
}
918 :
デフォルトの名無しさん :2005/07/15(金) 17:35:28
919 :
デフォルトの名無しさん :2005/07/15(金) 17:43:47
920 :
デフォルトの名無しさん :2005/07/15(金) 17:46:34
>>912 #include <iostream>
int IsDivisor(int dividend, int divisor) { return !(dividend % divisor);}
int IsPerfect(int number) {
int i, sum = 1;
for (i = 2;; i++) {
if (i * i >= number)
return number == (i * i == number ? sum + i : sum);
if (IsDivisor(number, i)) sum += i + number / i;
}
}
int main(int argc, char **argv) {
for (int i = 1; i <= 10000; i = i << 1 | i << 2) {
if (IsPerfect(i)) std::cout << i << endl;
}
}
922 :
916 :2005/07/15(金) 17:49:09
>>920 コンパイラなに使ってるんだ?
あと、インデントのために全角スペース入ってるからちゃんと消せよ。
924 :
デフォルトの名無しさん :2005/07/15(金) 17:51:52
>>922 全角スペースよか&nbsp;を適度に入れてやるほうが親切ですよ。
926 :
918 :2005/07/15(金) 17:54:21
928 :
916 :2005/07/15(金) 17:58:58
>>925 コピペ用フィルタを で出力するようにしたであります。
ということは、& → & とかもしておいたほうがいいのかな?
930 :
844 :2005/07/15(金) 18:17:17
すいません、私の問題は逆ポーランドでした。 これなら846さんの回答はあっているんでしょうか?
ネタだから。
そろそろ教えてあげたほうがいいのかな?
ていうかあの問題文だと答え様が無いような。
#include <stdio.h> int main(void) { int c; while ((c = getchar()) != EOF) { switch (c) { case '&': printf("&"); break; case '<': printf("<"); break; case '\t': printf(" "); break; default: putchar(c); } } return 0; }
>>844 釣りだろう。演算子の種類くらいは指定するはず。
まあ、釣りじゃなかったらゴソだろうな。
>>844 逆ポーランドって、逆光沢仕上げ、つまりつや消し仕上げのこと?
940 :
939 :2005/07/15(金) 20:11:47
タブ使うと環境によってずれるの忘れてた(つA`)
#include <stdio.h> #include <stdlib.h> void detab(FILE *in, FILE *out, int n); int main(int argc, char *argv[]) { int n = 8; if (argc > 1) n = atoi(argv[1]); detab(stdin, stdout, n); return 0; } void detab(FILE *in, FILE *out, int n) { int c; int i = 0; while ((c = fgetc(in)) != EOF) { switch (c) { case '\t': for ( ; i < n; i++) fputc(' ', out); i = 0; break; case '\n': fputc(c, out); i = 0; break; default: fputc(c, out); i = (i + 1) % n; } } }
>>844 もしかして844、プログラム設計とアルゴリズムって教科名かい?
[1] 授業単元:情報工学演習C [2] 問題文(含コード&リンク): 住所録を作り表示するプログラムを作成しなさい。 人数は任意とする。構造体を用い、キーボードから入力すること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5 [3.3] 言語:C [4] 期限:7/19午前中 [5] 構造体の所なんですがよくわかりません。よろしくお願いします。
>>944 ちとまだ早いけど立てるの?立てないの?
>>944 ありがとうございました。
どうやら問題を難しく解釈しすぎてたみたいです。
オレは何度かスレ立てこころみてるんだが、スルーされる