ぼるじょあがC/C++の宿題を片づけますYO! 47代目

このエントリーをはてなブックマークに追加
1ぼるじょあ ◆yBEncckFOU
(・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] できれば簡単な感じでお願いします。
7デフォルトの名無しさん:2005/07/05(火) 10:41:10
#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;
}
87:2005/07/05(火) 10:43:19
しまった。*は全角にすべきだったか?
9デフォルトの名無しさん:2005/07/05(火) 12:24:52
10:2005/07/05(火) 13:21:45
>>7

すいませんありがとうございます。
stuido.hから始まるやつでお願いします
11デフォルトの名無しさん:2005/07/05(火) 13:38:12
>>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:2005/07/05(火) 13:41:05
>>11
ほんとにすいません。
ありがとうございます、
13906: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] できれば簡単な感じでお願いします。
15デフォルトの名無しさん:2005/07/05(火) 14:26:25
>>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"
16デフォルトの名無しさん:2005/07/05(火) 14:32:58
>>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 );

面倒くさくなってきた。
あとは似たようなこと書くだけだし自分でやってミソ。
176 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
19デフォルトの名無しさん:2005/07/05(火) 15:18:25
>>18
方法は色々あるが、
・パケット長を固定にする。
・パケット開始コード、終了コードを用意する。(一般的にSTX、ETX)
・送信総データ長を最初に送る。
・タイムアウトを利用する。
20デフォルトの名無しさん:2005/07/05(火) 15:29:04
早速どうもありがとうございます m(__)m
>・パケット長を固定にする。
私の例ではランダムな長さのデータを断続的に送る必要があり難しそうです。。
>・パケット開始コード、終了コードを用意する。(一般的にSTX、ETX)
バイナリデータなので。。
>・送信総データ長を最初に送る。
データ長も不定なので困っております。
>・タイムアウトを利用する。
とりあえず、今回はこれを使ってみようと思います。

どうやらTCP/IP 通信のようにコネクションを切るという概念はないのですね。
(FIFO のファイルを送信側で消去したら通信終了が可能なのかと思っておりました。)
色々なアイデアをご教授いただき大変参考になりました。
どうもありがとうございました。
21デフォルトの名無しさん:2005/07/05(火) 15:33:32
送信側がcloseして、受信側が全部読み取った状態で更にreadすれば、0が返るはずだけど。
22デフォルトの名無しさん:2005/07/05(火) 15:39:00
>>21
うまくいきました。。。。
お恥ずかしい限りです。大変助かりました。
どうもありがとうございました m(__)m m(__)m m(__)m
23前スレ925:2005/07/05(火) 15:49:16
次スレいってたんですね。
[1]授業単元:プログラミング中級
[2]問題文:1000以下の素数で、足しあわせると1000になるような二つの素数の組をすべて求めるプログラムを作れ
[3]環境
[3.1]OS:UNIX
[3.2]コンパイラ:gcc
[3.3]言語:C
[4]期限:7/8
[5]制限特に無し
よろしくお願いします!
24デフォルトの名無しさん:2005/07/05(火) 16:02:02
>>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;
}
25前スレ925:2005/07/05(火) 16:15:16
ありがとうございます!
これは仕様説明しろと言われたらどういう感じに言えばいいですかね?
26デフォルトの名無しさん:2005/07/05(火) 16:23:58
仕様:足しあわせると1000になるような二つの素数の組をすべて求める

i * i <= sizeof(sieve) は i * i < sizeof(sieve) でいい。
27デフォルトの名無しさん:2005/07/05(火) 16:25:49
>>  char  sieve[1001] = {1,1,};
この書き方って残り 0 で埋められるって C言語 の仕様によって保証されているものなの?
28デフォルトの名無しさん:2005/07/05(火) 16:31:52
>>27
保証されてる
29デフォルトの名無しさん:2005/07/05(火) 16:39:41
>>27
JIS X3010 96ページの12行目
30デフォルトの名無しさん:2005/07/05(火) 16:40:51
>>28-29
thx
31デフォルトの名無しさん:2005/07/05(火) 16:51:28
JIS の規格の観覧って検索が出来ないのがネックだよな…
32前スレ952:2005/07/05(火) 16:52:40
ああすいません、仕様というか「ここでこれを宣言して、ここでこういう条件を指定して…」みたいなコメントが欲しいのでした。お願いできますか?m(_ _)m
33デフォルトの名無しさん:2005/07/05(火) 17:09:38
>>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
35デフォルトの名無しさん:2005/07/05(火) 17:48:25
ご丁寧に手順まで書いてあるのに無理なの?
36デフォルトの名無しさん:2005/07/05(火) 18:52:56
留年決定。
37デフォルトの名無しさん:2005/07/05(火) 19:25:14
私新参者でわからないけど、前スレの人達ってここ読んでいるのかなぁ……
38デフォルトの名無しさん:2005/07/05(火) 19:50:38
[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;
}
40デフォルトの名無しさん:2005/07/05(火) 20:15:16
>>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
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=653
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):VC++ 6.0
 [3.3] 言語:C++
[4] 期限:7月6日まで
[5] その他の制限:配列、ポインタ、構造体を使用してください。
どなたかお願いしますm(__)m
42デフォルトの名無しさん:2005/07/05(火) 21:25:21
>>41
これは、割り勘なの?
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日まで
44デフォルトの名無しさん:2005/07/05(火) 21:37:53
[1] 授業単元:プログラミング
[2] 問題文:配列dtを関数に引数としてわたす。
関数部では平均値と分散と標準偏差を計算し、
平均値はreturn分を用いて、分散、標準偏差はポインタを用いてmain()文に
値を渡し、main()文では結果を画面に表示するプログラムを作成せよ
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:ポインタ関数を使う
どなたかおねがいします。
45デフォルトの名無しさん:2005/07/05(火) 21:44:32
>>43
Linux で試したら50000でも動作した。
46デフォルトの名無しさん:2005/07/05(火) 21:49:32
>>45
本当ですか?僕はWindowsなんですが、何が悪いんでしょうか。
コンパイラの性能とか?
47デフォルトの名無しさん:2005/07/05(火) 21:50:53
OSの性能
48デフォルトの名無しさん:2005/07/05(火) 21:52:34
Windows XPの間違いでした。
49デフォルトの名無しさん:2005/07/05(火) 21:54:07
int mid, i, j, k,temp[MAX_DATA];

領域が足りなくなってるんだと思うよ。
自動変数は呼び出しごとに別の実体が作られるから。

配列を静的変数にする
static int temp[MAX_DATA];
でどうだ?
50デフォルトの名無しさん:2005/07/05(火) 21:58:00
>>49
できました!
どうもありがとうございます。
51デフォルトの名無しさん:2005/07/05(火) 23:00:18
>>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;
}
52デフォルトの名無しさん:2005/07/05(火) 23:27:58
>>51
ありがとうございます。
if( decent != NULL ) *decent = dec;
if( deflect != NULL ) *deflect = sqrt(dec);
の部分なんですけど、他にやり方ないですか??
*decent = dec;
*deflect = sqrt(dec);
ってしたのですが、分散と偏差が表示されなくて・・・
53デフォルトの名無しさん:2005/07/05(火) 23:50:35
[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。
54デフォルトの名無しさん:2005/07/05(火) 23:51:08
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):イギリスの国旗を画面に表示するプログラムを作成せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:
[5] その他の制限:
どなたかお願いしますm(__)m
55デフォルトの名無しさん:2005/07/05(火) 23:53:17
>>52
>>51 で表示まで全部するはずだが。
表示されなかったのか?
56デフォルトの名無しさん:2005/07/05(火) 23:59:02
>>53
#include <iostream>
int main()
{
    int i;
    for (i = 9; i <= 1000; i += 9)
    {
        std::cout << i << std::endl;
    }
    return 0;
}
57デフォルトの名無しさん:2005/07/06(水) 00:10:10
>>56
即答ありがとうございます。
58デフォルトの名無しさん:2005/07/06(水) 08:36:12
>>54
#include <stdlib.h>
int main(void)
{
system("start http://www.uknow.or.jp/be/uk_japan/img/index_img.jpg");
return 0;
}
59デフォルトの名無しさん:2005/07/06(水) 10:28:46
>>58
不覚にもワロタwww
60デフォルトの名無しさん:2005/07/06(水) 11:36:58
>>58
日本の国旗が被りすぎw
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なんですが、コンパイル通りませんでした。
どうか、他のやり方を教えてください。お願いします。
63デフォルトの名無しさん:2005/07/06(水) 12:03:56
>>62
どれをどうコンパイルしたらどう通らなかったのか?
それとも、口の利き方から手取り足取り教えないといけないのか?
64デフォルトの名無しさん:2005/07/06(水) 12:04:59
だがしかしもう質問の仕方を指摘する親切っぷり
65デフォルトの名無しさん:2005/07/06(水) 12:16:59
ここで質問しなきゃ生きていけないなりの頭脳なのかと思わせるな。
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;
}
68デフォルトの名無しさん:2005/07/06(水) 13:01:19
>>54
どなたかおねがいします。
簡易グラフィック関数を用いてらしいのですが
69デフォルトの名無しさん:2005/07/06(水) 13:23:53
[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

ありがとうございます。とても助かりました。
71デフォルトの名無しさん:2005/07/06(水) 13:42:05
>>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
ホントにありがとうございます。マジ神降臨ですよ〜。とりあえずこれからいりいろ
チェックしてみます。
73デフォルトの名無しさん:2005/07/06(水) 13:49:34
>>68
>簡易グラフィック関数を用いてらしいのですが
それの仕様を提示せよ。
74デフォルトの名無しさん:2005/07/06(水) 13:51:59
まさかprintfでAAを書けなんて課題はだs
75デフォルトの名無しさん:2005/07/06(水) 14:19:48
[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] その他の制限:初心者です。
77デフォルトの名無しさん:2005/07/06(水) 14:30:55
>>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が入れ替わらないんですけどどう直せばよろしいでしょうか?よろしくお願いします。
79デフォルトの名無しさん:2005/07/06(水) 14:45:15
>>77
ありがとうございました
80超初心者ゴン:2005/07/06(水) 14:45:44
見にくくてすみません・・
81デフォルトの名無しさん:2005/07/06(水) 14:49:49
len が奇数のときと偶数のときとでの、カウント数を整理すべし。
82超初心者ゴン:2005/07/06(水) 14:50:24
すみません反転の条件はこう書いてました。
for(i = 0; i < (len/2); i++)
83デフォルトの名無しさん:2005/07/06(水) 14:53:25
>問題なんですけど、文字列を反転させることなんですけど
>関数をを使わないで自作関数で処理しなきゃならないんですけど、
これだけ読んで、それ以上読む気をなくした。
84超初心者ゴン:2005/07/06(水) 14:57:13
>>83さん  なんでですか?
85デフォルトの名無しさん:2005/07/06(水) 14:59:10
>>84
バカ?
86超初心者ゴン:2005/07/06(水) 15:00:38
わからないから聞いてるんですけど!
87デフォルトの名無しさん:2005/07/06(水) 15:02:35
len--;
って必要か?
88デフォルトの名無しさん:2005/07/06(水) 15:06:18
>>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等を使うと簡単です、もちろん他にもあります。
こんなかんじだとおもいます。。。
おねがいします><
90デフォルトの名無しさん:2005/07/06(水) 15:07:03
>>83=>>85は早速遁走したようですw
91超初心者ゴン:2005/07/06(水) 15:09:50
len--をなくすと文字列が表示されないんですけど・・
9283:2005/07/06(水) 15:11:08
>>84
わずかそれだけの文章中に「ですけど」が3回、おまけに「をを」という間違いも。
文章を書くのに頭を使わない(or見直しをしない)ような馬鹿の宿題なんてやる気にもならん。
93デフォルトの名無しさん:2005/07/06(水) 15:12:24
必死な言い訳はスレタイ読んでからにしましょうね
9473:2005/07/06(水) 15:13:53
>>88
それでどうやって、国旗を描画するのかね?
線分描画関数がなければ描画できないということくらい理解できないのか?
95超初心者ゴン:2005/07/06(水) 15:14:04
誰かお願いします!
96デフォルトの名無しさん:2005/07/06(水) 15:15:43
len--;を消して
*(pszStr+i) = *(pszStr+(len-1-i));
*(pszStr+(len-1-i)) = tmp;
こうしろ
9783=92≠85:2005/07/06(水) 15:15:54
>>93
馬鹿?

>>91
lenを求めた段階で、その値がいくつになっているかを確認せよ。
9885:2005/07/06(水) 15:16:04
>>95
バカ?
99デフォルトの名無しさん:2005/07/06(水) 15:21:18
>>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
>>96さん
>>97さん
ありがとうございます
101デフォルトの名無しさん:2005/07/06(水) 15:45:39
>>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);
}
102デフォルトの名無しさん:2005/07/06(水) 15:50:09
>>101
GJ!
103デフォルトの名無しさん:2005/07/06(水) 15:51:39
■■□□□□□■■□□□□□■■
□■■□□□□■■□□□□■■□
□□■■□□□■■□□□■■□□
□□□■■□□■■□□■■□□□
□□□□■■□■■□■■□□□□
■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■
□□□□■■□■■□■■□□□□
□□□■■□□■■□□■■□□□
□□■■□□□■■□□□■■□□
□■■□□□□■■□□□□■■□
■■□□□□□■■□□□□□■■
104デフォルトの名無しさん:2005/07/06(水) 16:32:12
前スレの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
でした。
105デフォルトの名無しさん:2005/07/06(水) 16:36:04
>>88
そのライブラリは標準ではないのでしっかりと仕様を出さないと対応のしようがない。
一応、ピクセルが打てる関数さえあればなんとか描けると思うよ。
106デフォルトの名無しさん:2005/07/06(水) 16:41:02
>>104
それだとbを初期化する意味が無いのだがいいのか?
10766:2005/07/06(水) 16:44:13
失礼しました、前スレの647をコンパイルしたんですが、
エラーが出ました。ので、ほかのやり方を教えていただきたいのですが
108デフォルトの名無しさん:2005/07/06(水) 16:46:27
>>104
そのソースの関数内の処理を全部main()にぶちまけりゃいいじゃん。
109デフォルトの名無しさん:2005/07/06(水) 16:49:52
>>107
前スレ647って10進→2進のやつか?どんなエラーが出たのか書かないとどうしようもないぞ
110デフォルトの名無しさん:2005/07/06(水) 16:50:32
>>107
>失礼しました、前スレの647をコンパイルしたんですが、
>66
どう関係が?

それはさておき、
http://pc8.2ch.net/test/read.cgi/tech/1119514274/647
をコンパイルしてエラーが出たならそのエラーを書きたまえ。
111デフォルトの名無しさん:2005/07/06(水) 16:50:34
>>104
作ろうと思ったが作ってても面白くないのでのでやめた。
>>108が言ってるように関数を展開すれば求めるものができるはずだ。
112デフォルトの名無しさん:2005/07/06(水) 16:53:35
>>106
えーっと、確か他に配列を作っておいてそこに転送させるとかなんとか言ってたので、
そうすることによってちゃんと成立させるのだと思うんですが・・・。
>>108
ちょっとやり方がわかんないんですが・・・どっか他のスレでやりかた聞いてきて
自分で直した方がいいんですかね・・
113デフォルトの名無しさん:2005/07/06(水) 16:55:15
>>112
104の書き方だと折角初期化したbにaを転送して上書きしちゃってる
とりあえず問題をちゃんと整理してから出直してこい
11466:2005/07/06(水) 17:07:12
>>109
失礼しました、実は、コンパイルは通ったんですが、
問題文の意図とは、離れてるものでした、自分で入れた、数値を二進数に
変換するプログラムです。
失礼しました、文章角能力があまり発達してないもので(^^;
115デフォルトの名無しさん:2005/07/06(水) 17:14:44
>>114
int main(void) {
int i = -1;

while (i < 0 || i > 255)
scanf("%d", &i);
d2b(i);
return 0;
}
d2bは前スレのから。メッセージとかは一切出してないので勝手に付け加えてくれ
動作確認してないのでひょっとしたらエラーでるかもしれん
116デフォルトの名無しさん:2005/07/06(水) 17:17:51
>失礼しました、文章角能力があまり発達してないもので(^^;
文章を書く能力の問題じゃないね。
11766:2005/07/06(水) 17:31:53
.c:15: redefinition of `main'
.c:6: `main' previously defined here
と出ました、コンパイルエラーです。なぜか、他の人たちは、
この問題は、配列をつかってやってました。
ので、配列を使うんじゃないでしょうか?
無知なもので・・・
118デフォルトの名無しさん:2005/07/06(水) 17:38:51
>>117
テストしてみたが問題なくコンパイルできたぞ
まさか前スレのソースからmain関数消してないってオチじゃないだろうな?
119デフォルトの名無しさん:2005/07/06(水) 17:46:08
>>118
>>117 のエラー見ると main が 6行目と15行目の 2箇所あるぜゴルア と読めるがな。
120デフォルトの名無しさん:2005/07/06(水) 18:02:48
>>117
混乱するから66を名乗るなよ。
121デフォルトの名無しさん:2005/07/06(水) 18:07:49
>>107
645は?
122デフォルトの名無しさん:2005/07/06(水) 18:39:21
[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] その他の制限:条件はなるべく関数と構造体を用いて作る。

よろしくお願いします
123デフォルトの名無しさん:2005/07/06(水) 18:59:41
>>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
あのー無理です。
125デフォルトの名無しさん:2005/07/06(水) 19:06:18
-lm
126デフォルトの名無しさん:2005/07/06(水) 19:14:00
>>123
atan()ではなくatan2()を使うべき。
127デフォルトの名無しさん:2005/07/06(水) 19:15:13
士郎「絶対値と偏角はz^2=a^2+b^2、θ=atan(b/a)でもとめられる。」
雄山「では聞こう、絶対値が0のとき偏角はどう定義されるのだ?
        それに、atan(b/a)などというのはゼロ除算を考慮に入れていないではないか。
        この、うつけめ!」
士郎「ぐぬぬ・・・」
栗田「さすがは海原雄山氏
        仕様が曖昧だと出来てくるプログラムが不完全になることを言ってらっしゃるんだわ。」
128デフォルトの名無しさん:2005/07/06(水) 19:16:43
>>126
hypot()も思い出してあげてください。
129123:2005/07/06(水) 19:30:39
>>126の指摘はごもっともだったわ。

ゼロ除算はちゃんと落ちるように考慮済み。

C99の新人関数は使う気がしない。
130デフォルトの名無しさん:2005/07/06(水) 19:38:42
hypot は 由緒正しい家柄です。 ぽっとでの新人と一緒にしないでください。
131前スレ441:2005/07/06(水) 19:54:42
コンパイルでld:Unresolved:mainと出たのですが
132デフォルトの名無しさん:2005/07/06(水) 20:03:11
>>130まじですか?
ttp://seclan.dll.jp/c99d/c99d09.htm
下の表ではC99の新人になってんだけど、ここの間違い?
M_PI並に普及してる非公式物じゃなくて?
133デフォルトの名無しさん:2005/07/06(水) 20:03:54
117ですが、むりぽです、自分なりに書いてみたんですが、 parse error before `void
という、エラーが出ます。心優しい方、教えてください。
134デフォルトの名無しさん:2005/07/06(水) 20:07:26
とりあえず前スレのやつのmainと入れ変えれ
それで動くのは確認した。何か起きても多少の手直しで動くはずだ

できないのならあんたには向いてないと思う
135a: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;
}
137デフォルトの名無しさん:2005/07/06(水) 20:33:39
>>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 定義されていない識別子ですって出たんですけど…
お願いします。
139デフォルトの名無しさん:2005/07/06(水) 20:38:29
#include <math.h>
140デフォルトの名無しさん:2005/07/06(水) 20:48:45
>>138
無駄はあるが
for (i = 2; i < n / 2; i ++) {
とするだけで十分
141137: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と出てしまうのですが…。
自然数を自分で入力し、自分でエンターを押して
素数かどうかチェックする場合どうしたらいいのですか?
143デフォルトの名無しさん:2005/07/06(水) 21:18:38
>>142 誰?
14499:2005/07/06(水) 21:22:41
>>142
それくらいは自分でできるだろー。というか、練習問題としてやってみな。
scanf使って数値を入力させて、その数値で計算させればいいだけ。
145前スレ966:2005/07/06(水) 21:35:11
[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
どうかお願いします
146デフォルトの名無しさん:2005/07/06(水) 21:49:03
#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;
}
147デフォルトの名無しさん:2005/07/06(水) 21:58:19
[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言語始めて一ヶ月なんですけど宿題が出てしまい
初心者な自分には力不足でわかりません。できるだけ早くお願いします。それ
とよろしければ簡単な注釈も書いていただければうれしいです。

どなたかやってもらえないでしょうか?
14913:2005/07/06(水) 22:13:03
こんばんわ、どなたか>>13のフローチャートについて教えていただけないでしょうか?
<私が作ったやつ>

開始→数値を入力→二で割る→商≠0→(false)→余り並べ替え→表示→終了
           ↑   ↓
          (ture)←↓

講師に「このプログラムにしてはフローチャート足りないかな」といわれました。
御教授お願いします。
15013:2005/07/06(水) 22:18:31
すいません「ture」は「商≠0」から分岐しています。間違えました。
151デフォルトの名無しさん:2005/07/06(水) 22:24:51
しかし、なんとこさウンコなプログラムだな。
大学ではこんなことやらされるのか・・・
# 教えてもらえないからって女の真似したって駄目だヨ
152デフォルトの名無しさん:2005/07/06(水) 22:26:00
いや、まとめないで、変数の変化だとか、サブルーチン(関数)の呼び出しだとか、そーゆーのを書くのだ。
153デフォルトの名無しさん:2005/07/06(水) 22:55:04
>>148
配列って普通、あらかじめ決めておいた数の記憶領域に対して、
整数の番号によって指定された番地のデータの読み書きができるだけの機能しかないよ。
挿入、削除はともかく、表示までできてしまうのを配列とは呼ばないのでは?
C++ の STL の vector は挿入も削除もできるけどさ。表示はできないよ。
普通表示するのに、配列自体の表示機能なんか必要無くて、
順番に番地を指定して値を取り出して、その値を表示するよ。
154デフォルトの名無しさん:2005/07/06(水) 22:56:00
>>148
なんていうかまんま線形リストの特徴備えてるよなw
155デフォルトの名無しさん:2005/07/06(水) 22:59:32
>>148
今月のCマガ100ページからの特集読め
図書館行きゃあるだろ
1561/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);
}
1572/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***");
}
158デフォルトの名無しさん:2005/07/06(水) 23:06:31
>>13
その講師が求めているのは、箱一つに C の文が一つ書かれている
フローチャートなんじゃないかな?
だから基本的にはプログラムの文を一つ一つ四角で囲っていけばいい。
while は菱形にして、{ } の関係を矢印で結べばいい。
あと、関数宣言は両側が丸いアイスの棒みたいな形にすればOK
159デフォルトの名無しさん:2005/07/06(水) 23:17:19
>>156-157
お上手。勉強になります。
160デフォルトの名無しさん:2005/07/06(水) 23:20:10
>>149
「二で割る」の所に「割った余りをs[index]に記録」みたいなのが足んないんだと思う。
フローチャート通りだと計算の記録を残すところが無いし。
161デフォルトの名無しさん:2005/07/06(水) 23:23:23
>>156
なんでEDなんだよw
16213:2005/07/06(水) 23:24:01
>>158さん
有難うございます。
講師には、「二で割る」〜「商≠0」の部分がいくつか欠けているといわれました。
とりあえず「変数int index =0,left = 0 を宣言 」など頭のほうにつけてみましたがよく
わかりません。余りを保存(記憶?)のチャートはどの部分に入りますか?
163デフォルトの名無しさん:2005/07/06(水) 23:24:54
>>145
君が「C++ではなくCだ」と書いておかないからだ
164デフォルトの名無しさん:2005/07/06(水) 23:28:53
>>145
質問
・引数として渡されたchar配列に変換結果を書き込んでそれを戻り値と
 して返すの?
 それとも新たに中で動的に確保したポインタを返すの?
165137:2005/07/06(水) 23:38:44
>>131
バグ修正版。
致命的なものは少ないので面倒ならスルー可。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/678.zip
166145:2005/07/06(水) 23:52:04
>>163
おっしゃるとおりです。というか、追加で出されたものでして

>>164
引数はそのままの値を保持します
新たに確保して返せばそれで大丈夫のはずです
167デフォルトの名無しさん:2005/07/06(水) 23:54:09
>>166
当然呼び出し側でfreeすることになるんだけれども、そういうプログラムで
いいのかな?
168デフォルトの名無しさん:2005/07/06(水) 23:54:40
>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';
}
169158: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
171145:2005/07/06(水) 23:57:30
連投すみません

>>145の 余計にわからなく〜は
streamを使うやり方はよく解ったけど、
char配列でうまく処理できない、ということで
お答えをいただいて余計に混乱した、ということではないです
気分を害した方がいらっしゃったら、ごめんなさい
172145:2005/07/06(水) 23:58:58
>>167

はい、ダメなようなら
こちらで頑張って修正したいと思ってます
173デフォルトの名無しさん:2005/07/07(木) 00:01:50
フローチャートを使うなら、ループ記号も使ってあげてください。
174デフォルトの名無しさん:2005/07/07(木) 00:14:03
>>168
おお!なるほど・・・ありがとうございます!

あと、xtobの方で疑問に思ったのですが、
b[4*i]=!!(xch & 0x8)+'0'; あたりの
"!!" と "+'0'" の意味はなんなんでしょうか・・・?
もしよろしかったらお答えを聞きたく思います


175145:2005/07/07(木) 00:14:43
興奮していろいろ忘れた・・・145ですorz
176167: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));
}
177167:2005/07/07(木) 00:20:25
>>168は頭いいんだろうなぁ…
178デフォルトの名無しさん:2005/07/07(木) 00:22:02
>>174
!!→二重否定。つまり、0は0、1は1、2も1、以下同様に。
+'0'→一桁の数値を文字に。つまり、0は'0'、1は'1'、2は'2'、以下同様に。
179デフォルトの名無しさん:2005/07/07(木) 00:23:09
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
181168:2005/07/07(木) 00:25:30
xtobの
len = strlen(x);len *= 4
入らなかった削除しといて。
182168: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
了解しました

小さな質問にも答えていただいて感謝です
お二人のを参考に仕上げて行きたいと思います

本当にご親切にありがとうございました
184168: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++;//ここが抜けてたたびたびすまん
}
185145:2005/07/07(木) 00:38:49
>>184
あ、わかりました〜

とりあえず自分はまず名前とsage練習ですねorz
なんにせよ助かりました、もう一度、ありがとうございました
186デフォルトの名無しさん:2005/07/07(木) 00:42:23
不完全でわるいが、こんなんどーぉ?
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]; /* ここがトリッキーだよなぁ・・・ */
}
187デフォルトの名無しさん:2005/07/07(木) 00:43:23
if (n > 2) → if (n >= 2)だった。鬱だ寝よう。
188148:2005/07/07(木) 01:10:10
すみません、148です。よくわからないんですけど多分表示っていうのは参照
するってことなんだと思います。説明不足ですみませんでした。それと、もしよかったら
削除と挿入だけでもいいのでどなたかやってもらえないでしょうか?
189デフォルトの名無しさん:2005/07/07(木) 01:16:59
>>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] 期限: 無期限

こんな感じに書きました↓
191190: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");
}

たぶん出力するところの条件がおかしいんだとは思うんですが。。。
色々考えてはみたものの結局答えは出ず。どなたかご教授願います
192デフォルトの名無しさん:2005/07/07(木) 01:53:18
>>190
残念そこじゃない。そのコードでは末尾に'\0'が付加されない。
//連結
while (*p_str1++ = *p_str2++) {}
193デフォルトの名無しさん:2005/07/07(木) 01:53:35
>>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');
とでも書けばよい。
194デフォルトの名無しさん:2005/07/07(木) 01:53:54
かぶった
195190:2005/07/07(木) 02:17:12
ウホッ
>>192,193
サンクス!
196デフォルトの名無しさん:2005/07/07(木) 03:20:43
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):要素数が10個の整数型配列を、任意のデータで初期化し、
その要素の最大値と最小値を求めるプログラムを作りなさい
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月8日迄
[5] その他の制限:配列、ソート、サーチ処理までしか習っていません。
よろしくお願いします
197デフォルトの名無しさん:2005/07/07(木) 03:35:51
>>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;
}
198デフォルトの名無しさん:2005/07/07(木) 03:36:58
逆だった

× printf("(max, min) = (%d, %d)\n", a[0], a[9]);

○ printf("(mim, max) = (%d, %d)\n", a[0], a[9]);
199>148:2005/07/07(木) 03:48:47
#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;
}
200デフォルトの名無しさん:2005/07/07(木) 03:59:40
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

202デフォルトの名無しさん:2005/07/07(木) 10:12:51
[1] プログラミング基礎
[2]
strcpy関数とstrncpy関数の二つの機能を併せ持つ関数を自作せよ。
[3]
 [3.1] Linux
 [3.2] コンパイラ(バージョン):
 [3.3] C++
[4] 期限:7月8日まで
[5] オーバーロード、テンプレートを出来れば使用して欲しいです

よろしくお願いします。
203デフォルトの名無しさん:2005/07/07(木) 10:45:01
>>202
特にstrncpy()の機能の部分について仕様を詳しく。
#あんな妙な挙動を再現しろというのなら私はパスする。
204デフォルトの名無しさん:2005/07/07(木) 10:53:24
[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
宿題ラッシュ
206デフォルトの名無しさん:2005/07/07(木) 11:30:45
>>204
仕様が穴だらけだ。
・描画に関して
どこにどう描画する? その手段は?
授業で既に何かを描画しているのならそれを利用すべきではないのか?
・迷路に関して
迷路の大きさは? 生成手段は?
授業で既に迷路を作成(r
・迷路探索に関して
分岐に到達した場合の移動方向は?

って、面白そうだけど結構分量ありそうだな。私ゃパスだ。
207>>202:2005/07/07(木) 11:34:14
#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ですが、よーやく、わかりました、ありがとうございました。
210デフォルトの名無しさん:2005/07/07(木) 11:52:18
>>208
> for(x=0;x<8;x++){
> a[x]=i%2;
> }

for(x=0;x<8;x++,i>>=1){
a[x]=i%2;
}
211デフォルトの名無しさん:2005/07/07(木) 11:53:11
>>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;
    }
  }
}
212デフォルトの名無しさん:2005/07/07(木) 11:53:23
>>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;
}
213デフォルトの名無しさん:2005/07/07(木) 11:55:15
>>208
ただ「変な値になる」ではなく、きちんと実例を挙げて説明したまえ。
214デフォルトの名無しさん:2005/07/07(木) 11:57:47
>char buffer[4096], *tokens[1024], *token;
>printf("Input String (Max length is 4095) : ");
>fgets(buffer, 4095, stdin);
この辺が馬鹿。
215デフォルトの名無しさん:2005/07/07(木) 11:58:36
>        buffer[num] = (char *)malloc(sizeof(char) * length + 1);
この辺も馬鹿。
216207: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
一つの関数で済まそうとするとダメダメだったことに気づいた
217デフォルトの名無しさん:2005/07/07(木) 12:12:31
>>203
言葉足らずでした。すいません。
strcpy(s1,s2)の時にs1にs2をコピーする。
strncpy(s1,s2,n)の時はs1にs2の先頭n文字がコピーされる。

という事です。
218デフォルトの名無しさん:2005/07/07(木) 12:16:30
>>207
ありがとうございます。
既習範囲をぶっ飛んでてちょっと厳しいですが
もう少し勉強して参考にさせていただきます。
21941: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] その他の制限:問題文の指示通り、漸化式を利用して作る

期限が悲惨ですが、どなたかお願いします…
221デフォルトの名無しさん:2005/07/07(木) 12:43:57
(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;
}
222221: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
224デフォルトの名無しさん:2005/07/07(木) 14:06:58
[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]できれば説明もつけていただけるとありがたいです
よろしくお願いします
225デフォルトの名無しさん:2005/07/07(木) 14:17:01
>>224
void List(struct LIST *pt){
if (pt == NULL) {
putchar('\n');
} else {
printf(" %d",pt -> a);
List(pt->nextptr);
}
}
解説:再帰(的)関数。リスト構造。などでぐぐれ。
226デフォルトの名無しさん:2005/07/07(木) 14:42:04
#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();
}
227デフォルトの名無しさん:2005/07/07(木) 14:42:28
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)の距離を同じに書き換える*/
}
}
228デフォルトの名無しさん:2005/07/07(木) 14:42:56
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];
}
}
}
}
}
}
229デフォルトの名無しさん:2005/07/07(木) 14:47:29
#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();
}
230デフォルトの名無しさん:2005/07/07(木) 14:48:20
>>225様迅速な対応ありがとうございました
231デフォルトの名無しさん:2005/07/07(木) 14:48:29
89ですがプログラマのみなさんでも無理でしょうか?.....
232デフォルトの名無しさん:2005/07/07(木) 14:49:16
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];
}
}
233デフォルトの名無しさん:2005/07/07(木) 14:50:27
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;
234デフォルトの名無しさん:2005/07/07(木) 14:50:57
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;
}
}
}
}
235デフォルトの名無しさん:2005/07/07(木) 15:23:10
次は、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")
236デフォルトの名無しさん:2005/07/07(木) 16:11:57
いやです。
237デフォルトの名無しさん:2005/07/07(木) 16:16:26
そもそもCだと出来ねーし
238デフォルトの名無しさん:2005/07/07(木) 16:19:26
>>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;
}
239148:2005/07/07(木) 16:45:30
148です、返事遅くなってすみません。199さんありがとうございます。
助かりました、まだコンパイルも実行もしていないので今からしてきます。
本当にありがとうございました。
240デフォルトの名無しさん:2005/07/07(木) 16:49:39
同様ってんだから似てりゃいいんじゃないの?

>>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);
}
241148:2005/07/07(木) 17:17:59
すみません、148です。説明不足でした。私が言いたかったのは例えば
実行時にコマンドとして
「address」と入力すると添え字を聞かれ数字を入れると添え字を指定できる。
「show」と入力すると指定した添え字に対応する要素を参照できる。
「delete」と入力すると添え字を聞かれ数字を入れて指定した要素を削除できる。
「insert」と入力すると添え字を聞かれ数字を入れて指定した所に要素を挿入できる。
ということで、そういったプログラムを作ることを教授が課題として出しました。
242デフォルトの名無しさん:2005/07/07(木) 17:28:17
>>241
要素を削除ってのが消した上で詰める&挿入が一切上書きせずに間に追加するって
意味でいいなら完全に線形リストだが、それでいいならいくらでもサンプルコード
あるからググってみれ
243148:2005/07/07(木) 17:37:44
242さん、ありがとうございます。線形リストっていうんですか。
さっそくググってきます。
244デフォルトの名無しさん:2005/07/07(木) 17:52:29
ファイル内に下記のようなデータがあって

あいうえお,1,8
かきくけこ,2,16
さしすせそ,4,32

Cのプログラムで"かきくけこ,2,16"を削除して間を詰める方法を教えてください
245デフォルトの名無しさん:2005/07/07(木) 17:55:54
>>244
途中だけ削る事はできない
246デフォルトの名無しさん:2005/07/07(木) 18:00:18
>244
mmapして、memmoveして、ftruncateしたら?
247デフォルトの名無しさん:2005/07/07(木) 18:03:29
>>244
あいうえおとさしすせそを別ファイルにコピーして、元のファイルを消し、
作ったファイルを名前を元のファイル名にする。
248デフォルトの名無しさん:2005/07/07(木) 18:07:18
>>245、246、247
ありがとうございます

可能なものから試してみます
249デフォルトの名無しさん:2005/07/07(木) 18:17:08
system("sed -e '2d' < srcFile > destFile; mv destFile srcFile");
250デフォルトの名無しさん:2005/07/07(木) 20:08:29
[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日(金)まで

おねがいします
251デフォルトの名無しさん:2005/07/07(木) 20:10:40
posビット目は右(LSB)から数えるのか、それとも、左(MSB)から数えるのか?
また、posは0から始まるのか、それとも、1から始まるのか?
252デフォルトの名無しさん:2005/07/07(木) 20:14:09
set(...) { return (x | (1U << pos)); }
reset(...) { return (x & (~(1U << pos))); }
inverse(..) { return (x ^ (1U << pos)); }
253デフォルトの名無しさん:2005/07/07(木) 20:17:23
>>251
そういったことは指定されてません。
254デフォルトの名無しさん:2005/07/07(木) 20:19:30
じゃ、決めてください。
255デフォルトの名無しさん:2005/07/07(木) 20:21:13
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からでお願いします
257デフォルトの名無しさん:2005/07/07(木) 21:52:17
258148:2005/07/07(木) 23:16:49
すみません、148です。「線形リスト」と「サンプルコード」でググってみましたが
サンプルコードが載っているサイトが見つかりません。なんてググればいいでしょうか?
それと、線形リストじゃなくて配列ではできないでしょうか?

259デフォルトの名無しさん:2005/07/07(木) 23:19:18
>>258
大量にあるが・・・ ってか何がしたいのよ?
そもそも配列は挿入したり削除したりって風には出来てないわけで
やるなら挿入or削除する度にそれ以降を全て一個ずつずらす必要が有るわけで

出来なくはないだろうけど無駄
260148:2005/07/07(木) 23:31:18
ええっ?なんてググったんですか?自分のググり方が悪いのかな・・・・・
無駄なんはなんとなくわかりますけど、多分配列の勉強って意味で
そういう課題を出されたんだと思います。
261デフォルトの名無しさん:2005/07/07(木) 23:50:40
>>259
漏れも真っ先に線形リストを想像したが、受け答えを見ていると、これってマジで配列で

void insertInto(int *array, int length, int index, int value)

とかいう関数定義させて、その中で array[index+1] ← array[index] みたいに直で要素の値を
移動して array[index] = value とかするのが、このアホな問題を考えた先生の目論見
なんではないかね。

問題としては下の下なんだが、こんな認識で会っているのかな?>>260
262デフォルトの名無しさん:2005/07/07(木) 23:53:16
>>261
>こんな認識で会っているのかな?
誰と?
263148と260:2005/07/07(木) 23:56:30
たぶんそれですね。うちの先生たぶんあほなんで。こないだなんか自分が作るん
いっぱい×2なプログラムを問題にしてきましたからね。
264デフォルトの名無しさん:2005/07/07(木) 23:59:20
265デフォルトの名無しさん:2005/07/08(金) 00:00:44
>>262
おまえ友達いなさそうだな
266148と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で保存しなきゃだめですか?
267デフォルトの名無しさん:2005/07/08(金) 00:19:16
>>266
C言語なんだから、拡張子は.cで。
あと、一番最初の行にこれ追加

#include <memory.h>
268デフォルトの名無しさん:2005/07/08(金) 00:55:42
memmove()てstdc的には<string.h>だろ
269デフォルトの名無しさん:2005/07/08(金) 01:22:30
C言語の未解決問題ってどれ?
いや、今日は眠れそうにないので。
270デフォルトの名無しさん:2005/07/08(金) 01:27:55
>>269
フェルマーの最終定理。
271デフォルトの名無しさん:2005/07/08(金) 01:28:26
>>270
Cの問題じゃないし、解決してるし。
272デフォルトの名無しさん:2005/07/08(金) 01:30:27
じゃ、フレーム問題
273デフォルトの名無しさん:2005/07/08(金) 01:30:56
[1] 授業単元:プログラミング及び演習
[2] 問題文(含コード&リンク): 100マス計算もどきを表示せよ。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:7月8日12時まで
おねがいします。
274デフォルトの名無しさん:2005/07/08(金) 01:33:44
>>273
コンソールに?それともプリンターにGDI使って?
275デフォルトの名無しさん:2005/07/08(金) 01:37:05
DOS窓上でです。
276デフォルトの名無しさん:2005/07/08(金) 02:13:04
>>274
コンソールにです。
どうかお願いします。
277デフォルトの名無しさん:2005/07/08(金) 02:27:08
>>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");
  }
}
278デフォルトの名無しさん:2005/07/08(金) 02:41:07
>>277
ありがとうございます。
279デフォルトの名無しさん:2005/07/08(金) 02:58:48
C言語でマインスイーパーフラッグ(爆弾を見つけていくGame)を作っています。
一人専用でコンピューターと戦うようにプログラムしたいです。
7月12日が締め切りなんです。
環境:UNIX、コンパイル
なお、爆弾を見つけたらポイントが入るようにしたいです。
最初に1PLayerがマスと爆弾の数を決めれるようにしたいんです。
ほんとにお願いしたいです!

280デフォルトの名無しさん:2005/07/08(金) 03:00:52
>>279
GUIで開発せなあかんの?
それだと面倒だなー。
281デフォルトの名無しさん:2005/07/08(金) 03:01:11
マインスイーパーのコンピュータ対戦って、
コンピュータは何するんだ?
282デフォルトの名無しさん:2005/07/08(金) 03:20:51
[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);
}
287デフォルトの名無しさん:2005/07/08(金) 04:53:16
>>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");
  }
}
288287: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;

と直してくれい。

289266:2005/07/08(金) 05:36:00
267さん、実行したらエラーはなくなり、
hairetu2.c:
警告 W8060 hairetu2.c 123: おそらく不正な代入(関数 main )
警告 W8060 hairetu2.c 141: おそらく不正な代入(関数 main )
という警告だけ残りました。とりあえず警告なんで無視しても実行はできたんですけど
自分が何も入力しなくてもプログラムがひとりで勝手に作業して終了します。
こちらが入力してはじめて動くようにできないでしょうか?
290デフォルトの名無しさん:2005/07/08(金) 06:04:27
>>279
マインスイーパーの簡略版ならゼロから学ぶC++のP158に載ってるよ
もちろんC++だけどな
291290:2005/07/08(金) 06:11:37
>>279
作るときの参考ぐらいにはなるだろうから一応置いておく
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/681.cpp
292デフォルトの名無しさん:2005/07/08(金) 09:49:03
>>283
何がうまくいかないのか分からんし、
内容についてアドバイスを求めるには情報が少なすぎる。
293デフォルトの名無しさん:2005/07/08(金) 10:43:01
>>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] できるだけ簡単におねがいします。
295168:2005/07/08(金) 11:18:59
>294
暦とそれに続く年の入力形式はどんなの?
"meiji10"or"明治10年"等などあるから指定してもらいたいんだけど
296デフォルトの名無しさん:2005/07/08(金) 11:25:49
>>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は作成済み
特に制限事項はなし
299298: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
300デフォルトの名無しさん:2005/07/08(金) 11:46:44
>>297
いや、だから質問に答えようよ
301デフォルトの名無しさん:2005/07/08(金) 11:50:20
>>298
それは流石にC/C++の宿題とはいえないだろう……
・VBからコールバック関数を引き数として受け取る
・DLLからそのコールバック関数を呼び出す
この2点を調べるの位やって欲しいし、それが判れば自分で書けるだろう?
302デフォルトの七資産:2005/07/08(金) 11:54:10
年号を入力してください。
例 昭和45年 → s 45
(入力:h 12)
(表示→)西暦2000年です。
303デフォルトの名無しさん:2005/07/08(金) 11:57:08
#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;}
304デフォルトの名無しさん:2005/07/08(金) 11:57:52
ちょうかんたんいしてみました>>302って遅い!
305デフォルトの名無しさん:2005/07/08(金) 11:58:25
>>303ww
列挙体(enum)を用いた方法でも作成せよ。
306デフォルトの名無しさん:2005/07/08(金) 12:00:49
せめてswitch case、できれば配列……
307デフォルトの名無しさん:2005/07/08(金) 12:01:06
もう12時のデッドライン過ぎたw
308デフォルトの名無しさん:2005/07/08(金) 12:02:14
#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
310デフォルトの名無しさん:2005/07/08(金) 12:03:39
>>308
うぉ!気づいてからのタイムラグ考えると仕事はええぇ
311デフォルトの七資産:2005/07/08(金) 12:04:18
これの3番です。
夏休みの宿題になったみたいでうれしいです^−^w
312デフォルトの名無しさん:2005/07/08(金) 12:05:56
>>309
username と password を要求されるんだが
313デフォルトの名無しさん:2005/07/08(金) 12:06:34
頭おかしいんじゃねえか?おまえ
314デフォルトの名無しさん:2005/07/08(金) 12:46:37
問題文が長いので以下にアップロードしました
http://www.geocities.jp/ryo_haruka2002/kadai10.txt
何方かご教授願います…さっぱり分かりません。
315デフォルトの名無しさん:2005/07/08(金) 12:47:28
なんとなく見に行く気になれないのでパス
316デフォルトの名無しさん:2005/07/08(金) 12:57:29
>>314
問題文としては素晴らしいが、
問題自体が非常につまらない。
317デフォルトの名無しさん:2005/07/08(金) 13:01:55
>>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まで
319デフォルトの名無しさん:2005/07/08(金) 13:50:36
>>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 なのね。
320デフォルトの名無しさん:2005/07/08(金) 13:51:46
>>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で間違いないです。
323デフォルトの名無しさん:2005/07/08(金) 13:55:26
>>321
> この関数を用いて,次の main を実行した結果は何か.

知らんがな
324デフォルトの名無しさん:2005/07/08(金) 14:00:28
>>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
325324:2005/07/08(金) 14:02:02
あぁ、書き忘れたけど、*.defファイル は自分で作ってね。
326デフォルトの名無しさん:2005/07/08(金) 14:02:05
>>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;
}
327デフォルトの名無しさん:2005/07/08(金) 14:07:32
>>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);
}
328デフォルトの名無しさん:2005/07/08(金) 14:08:49
デバッグはしてない
へんなとこがあれば適当に修正よろしく

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;
}
329デフォルトの名無しさん:2005/07/08(金) 14:12:53
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;
}
330318:2005/07/08(金) 14:13:45
即レス感謝です^^
331デフォルトの名無しさん:2005/07/08(金) 14:15:29
>>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;
}
332327:2005/07/08(金) 14:18:57
試してみたら何故か常に4が帰ってくる・・・
スマソ、俺のはスルーしてくださいorz
333327:2005/07/08(金) 14:35:24
最初のループの条件をi < n、[cnt]を[cnt - 1]
何やってんだ俺・・・('A`)
334デフォルトの名無しさん:2005/07/08(金) 14:46:02
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;
    }
  }
}
335デフォルトの名無しさん:2005/07/08(金) 16:02:00
[1] 授業単元:
[2]
リストのノードの順序を,逆順にする関数を作りなさい.next の値を変更することにより逆順にする
[3] 環境
 [3.1] OS:VineLinux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:2005年7月8日24:00まで
336デフォルトの名無しさん:2005/07/08(金) 16:04:26
>>335
引数やリストの形式は?
337335:2005/07/08(金) 16:25:25
>>336
引数は逆順にしたいリストの先頭のポインタで、線型リストです。
338デフォルトの名無しさん:2005/07/08(金) 16:26:00
てきとーに作ってみた

void inverse( node *p )
{
 if( (p->next)==NULL ) return;
 inverse( p->next );
 p->next->next = p;
 p->next = NULL;
}
339デフォルトの名無しさん:2005/07/08(金) 16:30:43
>>335
前スレに全く同じ問題あった。
回答も二つ(再帰版と分割統治版)UPされてたし。
340デフォルトの名無しさん:2005/07/08(金) 17:00:56
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 を書いてください */
なんです。 おねがいします(><)
342デフォルトの名無しさん:2005/07/08(金) 17:10:51
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のコンパイラでコンパイルできること。
343デフォルトの名無しさん:2005/07/08(金) 17:11:09
344デフォルトの名無しさん:2005/07/08(金) 17:16:44
>>342
出来る限り低速ならバブルソートでも組めばいいんジャマイカ?
ってか訳の分からん課題だな・・・
345デフォルトの名無しさん:2005/07/08(金) 17:20:47
バブルソートって O(n^2) じゃなかったっけ?
346デフォルトの名無しさん:2005/07/08(金) 17:24:42
>>345
yes
347デフォルトの名無しさん:2005/07/08(金) 17:32:21
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
マルチユーザ対応チャットアプリケーションを作成せよ(TCP/IP)
動作の条件
・サーバでは複数のクライアントからの接続を許可すること。
・サーバ、クライアントともにメッセージの入力・送信・受信表示ができるようにする。
・プログラム起動時にユーザ名を入力させ、メッセージ送信の際に自動的に
「ユーザ名 メッセージ」とすること。
・サーバから入力されたメッセージはすべてのクライアントに送信すること。
・クライアントからのメッセージを受信したサーバは画面に表示するとともに
ほかのクライアントに送信すること。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:2005年7月12日21:00まで
[5] その他の制限:なし
一応プログラムはあるのですが・・・。全然条件とあってないし、動作もおかしいので
これを修正していただけませんでしょうか?お願いいたします。
サーバ: ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/682.txt
クライアント:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/683.txt
説明不足だったら言ってください。
348342:2005/07/08(金) 17:36:12
O(n^2)よりでかくしろってことなんでしょうけれど。ぬぬー。
単純ソートより効率の悪いものを作りなさいってことなんでしょうけれど・・・orz
こんな問題をわざわざ課題にせんでちょ・・・。
349デフォルトの名無しさん:2005/07/08(金) 17:45:20
>>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()に渡すのは論外

キリがねえな。
 
350デフォルトの名無しさん:2005/07/08(金) 17:47:10
>>342
・最小の要素を探す
・それをピボットにしてクイックソート
351デフォルトの名無しさん:2005/07/08(金) 17:49:58
>>342
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/684.c

多分O(n^(n+2))だけど、確証が持てない。
少なくともO(n^(n+1))ではある。
352342:2005/07/08(金) 18:05:54
ありがとうございます。
O(n^(n+1)) 。。。指数にnを持ってくるとわ・・・。
353347:2005/07/08(金) 18:36:27
授業で配られたプリントにも、selectなどの関数がのってるだけで全然プログラムの組み方がわかりません・・・。
おかしなところは多々あると思いますが、どうにか動かせるようにできませんでしょうか・・・?
元のプログラムは全部変えちゃってもいいので、お願いします。
354デフォルトの名無しさん:2005/07/08(金) 19:12:16
>>342
適当に二つの要素を選んで入れ替えては全部がソートされたかどうかをチェックする
プログラムはかなり遅くなると思う。
うまくいく確率を n! の全部が等確率に出現すると思って雑に計算しても、
平均停止時間は少なくとも O(n!)=O((n/e)^n)。
実際は k 手で完成する集合とか考えると完成側に吸収端があるランダムウォークに
なるから、遷移行列の確率がうまく求まればもっと悪い見積りが出ると思う。
355デフォルトの名無しさん:2005/07/08(金) 19:16:26
>>354
ソートにランダムを使用するのはフェアじゃないだろw
356342:2005/07/08(金) 19:21:24
>334 ありがとうございます。
確率を使う方法は、
「処理を進行させていればいずれは停止する」という条件を満たさないと思います。

確率の考え方は面白いですね。
357デフォルトの名無しさん:2005/07/08(金) 19:41:25
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] その他の制限:ポインタを使ってお願いします。
358デフォルトの名無しさん:2005/07/08(金) 19:59:48
>>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;
}
359デフォルトの名無しさん:2005/07/08(金) 20:01:51
sqort
360358: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;
}
361358:2005/07/08(金) 20:03:10
greater とか less とか命名すべきではなかったね。
362デフォルトの名無しさん:2005/07/08(金) 20:20:46
>>353
まずはプロトコルをどうしたいのかはっきりさせろ。
問題文に無い機能を盛り込んでないか?
問題文からはユーザのリストを取得したり(クライアント側で)ユーザを
指定して送信したりする機能が必要とは思われない。

1) クライアントからの最初の送信行はユーザ名として扱う。これは
 クライアント側には返送・転送されない。
2) クライアントからの二行目以降の送信行は、先頭にユーザ名を付加して
 全てのクライアントに送信される。
3) 通信終了はクライアント側からの切断にて行う。クライアントは
 EOF文字を端末から入力された場合に、通信を終了する。

この程度で十分だと思うが。

これでも行指向ではあるので、クライアント毎のバッファ管理は必須だ。
stdioとselect()との併用はよろしくないので、自前でやる必要がある。
363デフォルトの名無しさん:2005/07/08(金) 21:01:20
>>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;
}
364デフォルトの名無しさん:2005/07/08(金) 21:01:29
>>360
ありがとうございました。
365357:2005/07/08(金) 21:03:33
>>363
その通りです・・・ありがとうございます。
for文を用いてというのを言い忘れました。
360さんもありがとうございました。
366デフォルトの名無しさん:2005/07/08(金) 21:24:46
>>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;
}
367デフォルトの名無しさん:2005/07/08(金) 21:41:25
>>347

サーバ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/685.txt
クライアント
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/686.txt

仕様は>>362の通りに簡略化してある。
なお俺はLinux環境は持ってないのでそのつもりで。
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
369デフォルトの名無しさん:2005/07/08(金) 21:44:11
>>368
直ぐ後にイニューム版も貼られてただろ
370デフォルトの名無しさん:2005/07/08(金) 21:52:32
BY 昨日の電車男で2chの人大好きになりましたデフォルトの七資産でした。w
371デフォルトの名無しさん:2005/07/08(金) 23:11:00
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=687
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):VC++6.0
 [3.3] 言語:C言語
[4] 期限:来週の月曜まで
[5] その他の制限:for文を使用、多重ループ
どなたかよろしくお願いします・・・。
372デフォルトの名無しさん:2005/07/08(金) 23:14:35
>>371
#include<stdio.h>
int main(void)
{
for (;0;) for (;0;);
return printf("-++++\n*-+++\n**-++\n***-+\n****-\n"), 0;
}
373デフォルトの名無しさん:2005/07/08(金) 23:17:52
>>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;
}
374373:2005/07/08(金) 23:23:25
* と + が逆だった。入れ替えておいてくれ。
375デフォルトの名無しさん:2005/07/08(金) 23:32:38
376デフォルトの名無しさん:2005/07/08(金) 23:37:29
>2.要素数10のstdata構造体の配列を差s区政し、
>合計得点以外の適当なデータを入力できるようにせよ。

これの意味がわからん。
377デフォルトの名無しさん:2005/07/08(金) 23:42:03
作成し→差s区政し
378デフォルトの名無しさん:2005/07/08(金) 23:42:57
馬鹿には質問してませんから。
379デフォルトの名無しさん:2005/07/08(金) 23:48:21
生徒数は10人という設定にして
stdata構造体の配列を作成する。
そして生徒一人につき1つ何でもいいからデータを
入れられるようにすればいいようです。
いろいろミスが多くて申し訳ありませんでした
380デフォルトの名無しさん:2005/07/08(金) 23:52:10
何でもって何?
381デフォルトの名無しさん:2005/07/08(金) 23:53:54
>>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];
  }
}
382デフォルトの名無しさん:2005/07/08(金) 23:54:27
#include <stdio.h> じゃなかった、
#include <string.h> ね。
383デフォルトの名無しさん:2005/07/08(金) 23:55:26
strncpy()は'\0'終端されるとは限らないかなり変態的仕様の関数なので
使わないほうが良いぞ。
384デフォルトの名無しさん:2005/07/09(土) 00:01:27
コンパイルできないので書き直し。
#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];
  }
}
385デフォルトの名無しさん:2005/07/09(土) 00:02:20
>>384
memmve()とかいうなぞの関数を使っているので
たぶんそれもコンパイルできないぞ
386デフォルトの名無しさん:2005/07/09(土) 00:03:51
/* 動的確保 */
struct stdata *create_stdata(size_t n){return malloc(n * sizeof(struct stdata)); }
387デフォルトの名無しさん:2005/07/09(土) 00:03:56
それと、strncpy()は素人には危険な代物だが
strncat()はそうでもないので、そっちを使うとよい。
先頭に\0セットしてからstrncat()すれば、望みの結果を得られる。
388デフォルトの名無しさん:2005/07/09(土) 00:05:40
>>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;
}
389384: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);


失礼しました。
390デフォルトの名無しさん:2005/07/09(土) 00:06:47
>>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] その他の制限:本当基礎しか教わってません。
  簡単な説明お願いします(´・ω:;.:...
392デフォルトの名無しさん:2005/07/09(土) 00:14:05
>>391
ブラウザは自分では実行せず、z.htmlという名前のファイルをカレントディレクトリ
に作ってその中に出力するだけのようだが
そのファイルの中身はどうなってるのかね?空か?
393375:2005/07/09(土) 00:14:42
>>381>>388
ありがとうございました
助かりました
394デフォルトの名無しさん:2005/07/09(土) 00:15:09
>>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) {
395デフォルトの名無しさん:2005/07/09(土) 00:17:22
>>391
title要素が閉じていない。
396デフォルトの名無しさん:2005/07/09(土) 00:19:33
ここだな

× strcat(w, "<title>HP<title>\n");
○ strcat(w, "<title>HP</title>\n");
397デフォルトの名無しさん:2005/07/09(土) 00:20:05
[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] その他の制限:まだ入門編というところでしょうか
398デフォルトの名無しさん:2005/07/09(土) 00:21:40
>int aa[N], bb;

氏ね
399デフォルトの名無しさん:2005/07/09(土) 00:22:16
>>398
それの何が問題なのか?
400デフォルトの名無しさん:2005/07/09(土) 00:23:57
>>397
入門編どころの騒ぎじゃないな
int → double

後は書式指定子
401デフォルトの名無しさん:2005/07/09(土) 00:25:02
>397

>[3.1] OS:UNIx
おちゃめだな
402デフォルトの名無しさん:2005/07/09(土) 00:25:06
#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;
}
403391:2005/07/09(土) 00:30:36
>>392>>395>>396
どうもありがとうございました!!

>>395>>396様のご指導通りtitle要素を終わらせたら表示できました
本当に早い対処ありがとうございました
404333:2005/07/09(土) 00:55:05
学校の宿題なのですが...
「足し合わせると1000になるような二つの素数の組を全て求めるプログラムをつくる」っていうものなのですが全然わかりません...教えてください。
405デフォルトの名無しさん:2005/07/09(土) 00:59:57
[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
406デフォルトの名無しさん:2005/07/09(土) 01:51:48
>>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;
}
407333:2005/07/09(土) 01:58:14
ありがとうございますm(__)m
408デフォルトの名無しさん:2005/07/09(土) 02:00:39
ごめん間違ってる。
409406: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;
410406: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;
}
411デフォルトの名無しさん:2005/07/09(土) 02:27:06
>>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;
}
4121/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;
}
4132/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 );
}
4142/2 ... last:2005/07/09(土) 02:51:31
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;
}
415412:2005/07/09(土) 02:56:26
>>405
if ( strchr( buf, '\n' ) != NULL ) line--; // 改行で終わっていたら
ここいらないや。削除しといてください。
struct 使う必要性があまりなかったので、無理に使ってコードが長くなってしまった・・・
すみません。
416デフォルトの名無しさん:2005/07/09(土) 02:59:39
なんか成績集計の問題が多いな……
なんでわざわざCでそんなことやらなあかんのじゃ
出題者の発想の貧困の表れか
417デフォルトの名無しさん:2005/07/09(土) 03:14:08
授業→レポートという責め苦を与える中で、C言語を用いたのでしょう。
別に数学だろうが三角木馬だろうが何でも良いんじゃ?
418デフォルトの名無しさん:2005/07/09(土) 03:21:36
じゃあ、もまい達が先生ならどんな問題だすんだ?
419デフォルトの名無しさん:2005/07/09(土) 03:25:34
Cで成績集計させる
420デフォルトの名無しさん:2005/07/09(土) 05:18:44
cursesでスネークゲームを作らせる。
……それなりに面白いと思うんだが。
421デフォルトの名無しさん:2005/07/09(土) 06:17:01
私も縛って鞭で責めつつCで成績集計させる
422デフォルトの名無しさん:2005/07/09(土) 09:01:54
私なら、ヒストグラム作らせるな。
1行1データの入力にしておけばパイプラインを組み合わせて色々できるしね。
423デフォルトの名無しさん:2005/07/09(土) 09:27:02
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;
424デフォルトの名無しさん:2005/07/09(土) 09:28:06
>if (n%2==0) return 1;

はぁ?
425デフォルトの名無しさん:2005/07/09(土) 09:58:09
>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;
426354:2005/07/09(土) 13:06:21
古い話ですが……
>>356
「確実に止まる」は満たしてないですが、「確率1で止まる」ことになるので、
それほど題意を曲げているわけではないですよ。
427デフォルトの名無しさん:2005/07/09(土) 13:17:39
擬似乱数を使っている限り無限ループの可能性があるわけだが。
428デフォルトの名無しさん:2005/07/09(土) 14:46:19
何回で必ず停止する。
何回以内に必ず停止する。
ならOKだと思うが、
何回操作しても停止しない可能性がある。
というのはダメだと思う。

さて、次のプログラムは必ず止るといえるか?
while (rand() % 10 == 0)
;
429デフォルトの名無しさん:2005/07/09(土) 15:27:57
という宿題?
430デフォルトの名無しさん:2005/07/09(土) 15:29:20
俺様が生きている間に止まらないプログラムは止まらないプログラムだな。
431デフォルトの名無しさん:2005/07/09(土) 16:40:51
じゃ、ここで「半永久ループ」「半無限ループ」という用語を提案してみようか。
432デフォルトの名無しさん:2005/07/09(土) 16:52:12
>>430
一週間くらいは許容範囲だと思うが
433デフォルトの名無しさん:2005/07/09(土) 17:09:57
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
436デフォルトの名無しさん:2005/07/09(土) 18:18:22
なかなかアレな宿題ですね。
437デフォルトの名無しさん:2005/07/09(土) 18:30:31
ゲーム成績は保存しなくていいってことは無視でいいの?
それならちょっと飯食った後誰もやって無さそうなら練習がてら考えてみるよ
438デフォルトの名無しさん:2005/07/09(土) 20:57:24
[1]授業単元:c言語
[2]問題文:リストから削除する、関数del_listを作成する。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/690.txt
★で囲った部分怪しいと思います。。
どうか修正お願いします_| ̄|○
[3]環境
[3.1]OS:XP
[3.2]コンパイラ:VC++ 6.0
[3.3]言語:C ++
[4]期限:7/10
439デフォルトの名無しさん:2005/07/09(土) 21:17:52
>>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;
}
440デフォルトの名無しさん:2005/07/09(土) 21:37:51
ごめん。修正だったね。

>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;
441デフォルトの名無しさん:2005/07/09(土) 22:41:06
[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

どうぞよろしくおねがいします。
442デフォルトの名無しさん:2005/07/09(土) 22:48:35
>>441
仕様がよく分からん。nはどうやって与えるのか?
配列は大域変数でいいのかポインタで渡すのか?
443441:2005/07/09(土) 22:55:11
>>442
あ、すいません。j=10,n=2000 でお願いします。
444デフォルトの名無しさん:2005/07/09(土) 23:06:41
>>443
{1...10}の中から2000個の数をねぇ・・・
445438:2005/07/09(土) 23:08:48
ありがとうございました、出来ました
4461/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;
}
4472/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逆じゃないか?まぁその辺は自分で修正してくれ
448デフォルトの名無しさん:2005/07/09(土) 23:12:34
>>441
最大値最小値を計算して返す関数?
けいさんってたしざん?ひきざん?二つをかえすって、いっぺんに二つ返すの?
それは引数のフラグでどちらを返すか判断するの?
449デフォルトの名無しさん:2005/07/09(土) 23:20:01
もうやっちゃった人がいましたか o(>_< )
お礼忘れないようにネ!
450441:2005/07/09(土) 23:21:44
>>446-447
どうもありがとうございます!助かりました。
451デフォルトの名無しさん:2005/07/09(土) 23:32:22
>>450
gccで普通にコンパイル通るんで見落としてたがエラー出たら
コメントをC89準拠にしてくれ
452デフォルトの名無しさん:2005/07/09(土) 23:39:42
>>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;
}
453デフォルトの名無しさん:2005/07/09(土) 23:40:50
あ、配列の中身も表示しなきゃいけないのか。
454デフォルトの名無しさん:2005/07/10(日) 00:55:05
[1] 授業単元:C言語プログラミング
[2] 問題:
じぶんで書いたコード:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/691.txt
課題内容はこちら:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/692.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1
 [3.3] 言語:C
[4] 期限:日曜PM5:00まで
[5] 制限:配列の内容はポインタで示さなければならないらしいですが
自分で書いたコードがどうしても変なのに表示されます
.     ('A`#) イライラ
  _| ̄ ̄||)_
/旦|――||// /|
| ̄ ̄ ̄ ̄ ̄| ̄| . |
|_____|三|/

3つめのedge_processingの関数がたぶんおかしいのだと思いますが
具体的にどこが間違ってるのかわかりません
分かる方いらしたら教えてください
455デフォルトの名無しさん:2005/07/10(日) 01:21:42
>>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++;
}
}
}
456デフォルトの名無しさん:2005/07/10(日) 01:23:03
すまん。オオボケした m1_p++はいらん。
457デフォルトの名無しさん:2005/07/10(日) 02:02:32
>>455-456
なるほど('∀`)!さっきまでfor文のiとjで回数を制限しようとしてました
if文を挿入すればよかったんですね
本当にありがとうございます
このご恩は一生忘れないでござる
458デフォルトの名無しさん:2005/07/10(日) 02:28:21
>342
古い話題で申し訳ないが、整数が32bitだとすると
n*2^32
ってのはどうかな?
459初心者:2005/07/10(日) 10:36:23
数値を10回連続して、結果を昇順で並べるプログラムってどんな感じにできますか?
460デフォルトの名無しさん:2005/07/10(日) 10:49:44
>>459
日本語の勉強は他板でどうぞ。
C/C++の宿題なら>>1をよく読んでから改めてどうぞ。
461初心者:2005/07/10(日) 12:03:06

[1] 数値を10回連続して、結果を昇順で並べるプログラムってどんな感じにできますか?
[2] win2000 VC++6.0
言語:C/C++/どちらでも可
[3] 期限:2005/7/10
462デフォルトの名無しさん:2005/07/10(日) 12:11:36
ダメだこりゃ。
463デフォルトの名無しさん:2005/07/10(日) 12:12:38
>>461
テンプレのコピペもできないのかよ・・・
しかも10回もソートすんの?しかも連続で?

for (i = 0; i < 10; i ++) qsort( ...

謎多き [1] 授業単元 だ・・・
464!459:2005/07/10(日) 13:02:17
【質問テンプレ】
[1] 授業単元: プログラミングA
[2] 問題文(含コード&リンク):
数値を10回入力し、昇順でソートして表示するプログラムを作成せよ
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): VC6
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年7月10日18:00まで
[5] その他の制限:qsortは禁止。

のように書け!!
465デフォルトの名無しさん:2005/07/10(日) 13:13:41
466デフォルトの名無しさん:2005/07/10(日) 15:54:34
専門知識もいいけど「日本語」を必須科目にすべきだよな、学校は。
467デフォルトの名無しさん:2005/07/10(日) 15:57:17
[1] 授業単元: 日本語
[2] 問題文(含コード&リンク):
意味の通じる日本語を書きなさい。
[3] 環境
 [3.1] OS:2ch
 [3.2] コンパイラ(バージョン): キーボード
 [3.3] 言語:日本語
[4] 期限:すぐとりかかること
[5] その他の制限:期間はずうっと。
468デフォルトの名無しさん:2005/07/10(日) 16:07:24
別に正しく日本語書けない奴がいてもいいじゃん。
俺もお前も読み書きできるんだからそれで十分じゃね?
469デフォルトの名無しさん:2005/07/10(日) 16:08:12
夏休みってまだ先だよな?
470デフォルトの名無しさん:2005/07/10(日) 16:22:35
>>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]);
}

}
471デフォルトの名無しさん:2005/07/10(日) 16:32:52
冗長
472デフォルトの名無しさん:2005/07/10(日) 16:44:44
for(int j = 0; j < argc - 1; j++){

i番目までソートが終わっているのなら、jの初期値はi+1で良いのでは?
473デフォルトの名無しさん:2005/07/10(日) 18:20:14
[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] その他の制限:できるだけ簡単にお願いします

単位取れるかの瀬戸際なのでお願いします。
474デフォルトの名無しさん:2005/07/10(日) 18:29:02
自然数&負の数対応ってどんなんじゃい。
475デフォルトの名無しさん:2005/07/10(日) 18:33:05
#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));
}
476デフォルトの名無しさん:2005/07/10(日) 18:34:08
>>474
すいません、負の数にも対応すると追加で点数貰えるので書いたんですが
自然数ってところを変更するの忘れてました
整数でお願いします
477デフォルトの名無しさん:2005/07/10(日) 18:38:07
main のretはイラネ
478デフォルトの名無しさん:2005/07/10(日) 18:40:38
>>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;
}
479デフォルトの名無しさん:2005/07/10(日) 18:43:04
>>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));
}
480デフォルトの名無しさん:2005/07/10(日) 18:43:20
しかし単位とれるかどうかの瀬戸際の課題が>>473かよ…
4月からはじめてるとして…10回程度講義してるとは思うんだが
どうゆう講義だったのか気になる
481デフォルトの名無しさん:2005/07/10(日) 19:00:18
うーむ。FITの人に聞いてみよう。
1学期でボーヨーせんせの授業ってどこまで進むん?
482デフォルトの名無しさん:2005/07/10(日) 19:06:56
>>475,478,479,
みなさん、ありがとうございます
まだ習っていない予約語などがありますが、なんとかできそうです
>>480
はい、10回程講義は受けています
毎回最初に1つぐらい関数の説明を受けてそれから1時間半はひたすら練習問題を解かされる感じです
まだ、if else文とelse if文とfor文とwhile文とフローチャートしか習ってません
483デフォルトの名無しさん:2005/07/10(日) 19:27:12
フローチャートなんかやってるからダメなんだ。
まぁ、授業だけの問題じゃないと思うが。
484デフォルトの名無しさん:2005/07/10(日) 20:20:39
>>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は禁止。
なるほどこういう風に書けばいいんですね!
486デフォルトの名無しさん:2005/07/10(日) 21:04:13
つまんね ぺっ
487デフォルトの名無しさん:2005/07/10(日) 21:05:16
>>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;
}
488デフォルトの名無しさん:2005/07/10(日) 21:06:33
>>485
超既出 ソート問題以後禁止
489デフォルトの名無しさん:2005/07/10(日) 21:10:59
quickソートを非再起で実装せよ
という課題が出ました。
解いてください。
490デフォルトの名無しさん:2005/07/10(日) 21:13:21
釣られてあげよう。
非再帰ソートとかマージソート(リスト用)とか。
http://www.context.co.jp/~cond/books/algo/
このへん。
491デフォルトの名無しさん:2005/07/10(日) 21:13:23
テ(ry
492初心者:2005/07/10(日) 21:14:04
>488さんすみません。。。申し訳ない!
493初心者:2005/07/10(日) 21:16:02
みなさんありがとうございます。ホントすみませんでした、、、ありがとうございます。
494デフォルトの名無しさん: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
>>494、487さんありがとうございます!
496デフォルトの名無しさん:2005/07/10(日) 21:49:33
質問させていただきます。
cout << " xを入力してください:";
cin >> x;
とまぁ普通のxの読み込みなんですが、もしxを入力する時に
enterボタンだけ押したらx=2.3となるような文を作りたいんです。
この場合どうしたらいいんでしょうか?
教えてください。よろしくお願いします。
497デフォルトの名無しさん:2005/07/10(日) 21:58:10
>>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;
498496:2005/07/10(日) 22:20:21
>>497
ありがとうございます。
はっきり言って何かいてあるのか分かりませんが、
とりあえずコピペさせていただきます。
499デフォルトの名無しさん:2005/07/10(日) 22:43:58
>>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)の表を作るところまでは出来たのですが以降よく分かりませんでした。
これからの学習の参考にしたいのでよろしくお願いします。
501デフォルトの名無しさん:2005/07/10(日) 23:14:06
だったら、作った(1)もさらせや。
502デフォルトの名無しさん:2005/07/10(日) 23:26:56
#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は期限とか嘘の希ガス
503デフォルトの名無しさん:2005/07/10(日) 23:30:30
・・・なんだこりゃ・・・。
504デフォルトの名無しさん:2005/07/10(日) 23:57:53
fprintf???????????
505500: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窓に表示された結果をテキストファイルにするってのが分からなくて詰まって
しまいました。
506デフォルトの名無しさん:2005/07/11(月) 00:17:19
なるほど。「(1)の表を作るところまでできた」と言えなくもないな。
507デフォルトの名無しさん:2005/07/11(月) 00:17:58
>>505
ま、こういうやつがいるからIDが必要って言う話になるんだろうな。
508デフォルトの名無しさん:2005/07/11(月) 00:20:34
たぶん「九九の表を作ってテキストファイルに保存せよ」をプログラムでやれ
ってことなんだろうな。
そうでもなければ全部手作業でできそうだし。
とりあえずfopen、fprintf使えばできるっしょ。
googleで調べてみることだな。
509デフォルトの名無しさん:2005/07/11(月) 00:46:52
[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;
}
511デフォルトの名無しさん:2005/07/11(月) 01:04:44
>>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;
}
512デフォルトの名無しさん:2005/07/11(月) 01:10:14
>>509
>この説明資料の次の章(スケジュール管理ファイルの書式)で
>例1、例2に示すような、2種類のファイル(定期的スケジュールと期限付き予定リスト)
>をあらかじめ用意

の例の部分を詳しく。
というか、この部分が分からないとなんともしようがない。
513初心者:2005/07/11(月) 01:12:31
ありがとうございます!ホントすみません!!
514509: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デフォルトの名無しさん:2005/07/11(月) 02:34:30
[1] プログラム
[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/693.txt
[3] 環境
 [3.1] mac
 [3.2] gcc
 [3.3] C
[4] 期限:火曜日まで
[5] 特になし
よろしくお願いします
516デフォルトの名無しさん:2005/07/11(月) 04:02:01
[1] 授業単元:データ構造
[2] 問題文(含コード&リンク):
長いのでろだにあげました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/694.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):VC++
 [3.3] 言語:C/C++どちらでも。
[4] 期限:05年7月13日まで
[5] その他の制限:問題文中に記載

どうか宜しくお願いします。
517デフォルトの名無しさん:2005/07/11(月) 06:48:59
>>509
Linuxエミュ?
518デフォルトの名無しさん:2005/07/11(月) 07:28:28
>>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);
}
519515:2005/07/11(月) 07:49:45
>>518さんありがとうございました
520509:2005/07/11(月) 09:17:21
>>517
CygwinとかいうWindowsでLinux環境を っていうやつです
521デフォルトの名無しさん:2005/07/11(月) 09:18:21
[1] 授業単元:プログラミング言語C
[2] 問題文(含コード&リンク):
1+2=3
(1/2)+(3/4)=(5/4)
Press any key to continue
と開発環境の疑似コンソール画面にだすようにしました。
|==1==|の部分を記述しなさい。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):Visual C++
 [3.3] 言語:C
[4] 期限:なるべく早いうちにお願いします。
問題文は以下にあります

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/695.txt
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] その他の制限:初級の授業を一通り終わったあたりです。
524デフォルトの名無しさん:2005/07/11(月) 11:15:06
期限が「なるべく早く」とか書いてあるとやる気がNULLになるのはオレだけ?
そりゃ期限じゃなくて希望だろ。
何日の何時何分までちゃんと定義しろよって思う。
525デフォルトの名無しさん:2005/07/11(月) 11:35:10
>>523
まったく同じのをこのスレか前スレで見た
526デフォルトの名無しさん:2005/07/11(月) 11:58:48
【質問テンプレ】
[1] 授業単元:情報理論
[2] 問題文(含コード&リンク):問題文は下のでお願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/696.txt
4つのプログラムを作る、ということです。
なお(2)はハフマン符号で符号化するプログラムにしたいです。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:2005年7月15日23:59まで
[5] その他の制限:基本は分かっていますがまだまだ初心者です。
527526: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まで
529デフォルトの名無しさん:2005/07/11(月) 12:30:05
>>524
お前だけ
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まで
すいませんがお願いします。
531347: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
というエラーがでます。どなたか修正を教えていただけませんか?お願いいたします。
532デフォルトの名無しさん:2005/07/11(月) 13:01:38
>>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);
}
533デフォルトの名無しさん:2005/07/11(月) 13:05:02
>>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;
}
534デフォルトの名無しさん:2005/07/11(月) 14:06:06
>>531
条件を書くところが代入だけれど、それでいいの?って警告だね。
それぞれ
while ((p = strpbrk(pclient->buff, "\r\n")) != NULL) {
for (q = pclient->buff; (*q++ = *++p) != NULL; )
で回避できるはず。

535532: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;
}
536347:2005/07/11(月) 14:40:45
>>534
レスありがとうございます。
コンパイルしてみたら、
for (q = pclient->buff; (*q++ = *++p) != NULL; )
のところで
63: warning: comparison between pointer and integer
というエラーが出てしまいましたが、どうすればよいのでしょうか?
教えてください。お願いいたします。
537デフォルトの名無しさん:2005/07/11(月) 14:44:46
× != NULL
○ != '\0'
△ /* 何も書かない */
538デフォルトの名無しさん:2005/07/11(月) 14:47:08
>>536
NULLじゃなくて、0か'\0'なんじゃないの?
539デフォルトの名無しさん:2005/07/11(月) 15:24:45
>524
さすが理系スレ、頭が硬い★
わかんねえからって言い訳すんなよ(笑)
まぁアホな俺はわからないんだが。
540デフォルトの名無しさん:2005/07/11(月) 15:42:29
 a
541デフォルトの名無しさん:2005/07/11(月) 15:43:34
//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;
}
542541:2005/07/11(月) 15:44:03
543347:2005/07/11(月) 15:51:20
>>537,>>538 レスありがとうございます。
>>367さんのプログラムを実行してみましたが、サーバからのメッセージが
クライアントに届かないのですが、どうすればよいのでしょうか?教えてください。
お願いします。
544デフォルトの名無しさん:2005/07/11(月) 15:57:10
>>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;
}
545デフォルトの名無しさん:2005/07/11(月) 16:04:29
間違えた。
    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()
に変えてくれ
546デフォルトの名無しさん:2005/07/11(月) 16:12:47
>>523
>>24の前半。他にもあったかも。
547544:2005/07/11(月) 16:19:13
まだあった。orz
○ scanf(" %1[)]", s)
× scanf("%1[)]", s)
548デフォルトの名無しさん:2005/07/11(月) 16:19:32
標準入力された文字列をデータベースから検索して
そのデータを全て表示させるにはどうすれば良いでしょうか?
549デフォルトの名無しさん:2005/07/11(月) 16:22:00
>>548
>>1
550522: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.)

って出てしまいます。
551デフォルトの名無しさん:2005/07/11(月) 16:41:02
>>543
サーバーは
$ server 12345
みたいに起動する

クライアントは
$ client 127.0.0.1 12345
みたいに起動する

・サーバとクライアントのポートは何でも良いが、あわせること
・クライアントで指定するIPアドレスは、サーバが実行されているマシンのIPアドレスを指定すること。
 同一マシンの場合はループバックアドレス(127.0.0.1)でよい

ちゃんとそうやってるか?
552543: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] その他の制限:ごく初歩的なところまでの知識でお願いします。

期限がマジヤヴァいのでよろしくお願いします!
554デフォルトの名無しさん:2005/07/11(月) 17:14:02
>>553
ジョセファスの問題の解放を提示せよ。
#あれか、継子立てだな。
555554:2005/07/11(月) 17:19:18
おっと、「解法」だ。

方針としては、石の個数の配列を用意して0クリアして順番に番号でも振っていけば。
556553:2005/07/11(月) 17:23:16
>>554
1番からn番までの石を円に並べる。まず1番の石から数えてm番目の石を取り除く。
すると石の数が1つ減る。続いて隣の石から数えてm番目の石を取り除く。
このような操作を繰り返すと最後に残る石は何番の石か。
プログラムではn、mを入力し、取り除かれる石の番号をすべて出力したのち、
最後に残る石の番号を表示するものとする。なお、nの上限は適宜定めて良い。
557523:2005/07/11(月) 17:34:25
>>546

エラトステネスで、もし素数を求める範囲をnとして、
scanfでnを入力させたかったら、
24の前半をどうやったらいいんでしょうか。。。

1001のところにnとか入れれるんですか?
まぁ入れれたとしてもよくわからないんですが。
558デフォルトの名無しさん:2005/07/11(月) 17:43:41
>>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;
}
559558:2005/07/11(月) 17:45:12
./josephus 7 4
で結果が表示される。
途中経過を見るには
./josephus 7 4|tr '\r' '\n'
560デフォルトの名無しさん:2005/07/11(月) 17:52:10
>>552

>文字入力しても無反応です。
>クライアント→サーバにはちゃんとメッセージ届いてます。

1) 「文字入力」するのはもちろんクライアントで
2) クライアント→サーバにはちゃんと入力したテキストが届いており(サーバ側にメッセージが出力されており)
3) しかしクライアント側にはメッセージが戻って来ていない

ということかな?

よくわからんな....

Linuxは詳しくないのでなんとも言いがたいが、パケットをキャプチャしてみてはどうだろうか。
tcpdumpやsnifferのようなプログラムは使えないの?
561デフォルトの名無しさん:2005/07/11(月) 17:58:15
>>552
そうそう、
>>367のクライアントは完全に汎用で、echoクライアントやHTTPクライアント等にもなるから、
適当なサーバに繋いで確認してみてはどうか。
問題を切り分けるために。

基本的に、サーバ側のコードを見てもらえば分かるが、サーバ側にメッセージが表示されるときは
クライアントに同じ内容で送信している(同じ内容を端末とソケットにwrite()している)
んで、write()が成功していれば送信されているはず、なんだが……
562543:2005/07/11(月) 18:00:17
server 2000
client 127.0.0.1 2000
とやるとちゃんとつながったと表示されます。
サーバが1人、クライアントが2人いるとすると、
クライアントAが文字入力→サーバとクライアントBに表示される
クライアントBが文字入力→サーバとクライアントAに表示される
サーバが文字入力→すべて反応なし
条件に、サーバからのメッセージはすべてのクライアントに送るとあるので、
どうしていいかわからないのですが・・・。
563デフォルトの名無しさん:2005/07/11(月) 18:06:33
>>562
は?もしかしてサーバで文字入力できないことを言っていたのか?
それは、「仕様」だ。
564543:2005/07/11(月) 18:12:31
すみません。仕様だったのですか・・・。
>>347の動作の条件に
・サーバ、クライアントともにメッセージの入力・送信・受信表示ができるようにする。
・サーバから入力されたメッセージはすべてのクライアントに送信すること。
と書いたので、出来ると思ってました・・・。
565デフォルトの名無しさん:2005/07/11(月) 18:15:54
566デフォルトの名無しさん:2005/07/11(月) 18:19:32
>>564
あ、そういうことか。じゃあ、俺の仕様見落としだな。気が向いたら直すよ(w

ちなみに、クライアントA→サーバ→クライアントBにしか行かないってのは、ホント?
ちゃんとクライアントA、クライアントBの両方に流れると思うんだが(そういう風に作ってある)

567543:2005/07/11(月) 18:34:19
あ、すみません。
クライアントからの入力は、自分も含めてすべてのサーバ・クライアントにちゃんと届いてます。
恐縮なんですが、QUITと入力したら相手にQUITを送信してソケットを閉じる機能も
つけてもらえるとうれしいのですが・・・。
できればでいいのでぜひともお願いします。何度もすみません。
568デフォルトの名無しさん:2005/07/11(月) 18:35:46
>>564

ほれ。サーバの修正版。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/700.txt

今コンパイルできる環境が手近にないから、コンパイル確認もしてないんでそのつもりで。
それと、上の方で出ていたワーニングが出るかもしれないが、
あれはただのコンパイラのお節介であって、コードは正しいので無視して構わない。
569デフォルトの名無しさん:2005/07/11(月) 18:41:10
>>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 {
    以下既存コード

こんな感じでよかろ。
570516: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] できれば簡単な感じでお願いします。
572デフォルトの名無しさん:2005/07/11(月) 19:24:01
>>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;
}

組んでみたが今はコンパイラが使えんのであってるかは不明
573デフォルトの名無しさん:2005/07/11(月) 19:57:27
時々視野というか視界が狭い奴がいるな
>>550
574デフォルトの名無しさん:2005/07/11(月) 19:57:54
[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] 配列はできます
お願いします

575543:2005/07/11(月) 19:58:44
みなさんありがとうございました。
576565:2005/07/11(月) 20:02:51
>>570
当方のVC++6.0とGNU g++ではコンパイルできたけど。
もしかしてC99とかC89系のコンパイラ?
577526:2005/07/11(月) 20:03:29
>>526で問題文がぐちゃぐちゃしてますがプログラムとしては
出現確率と出力文字に対する符号語と符号化した系列と復号化した系列
を出力するということです。どうかよろしくお願いしますm(_ _)m
578デフォルトの名無しさん:2005/07/11(月) 20:07:56
>>570
コンパイルできる環境にないから詳しくは分からんが
BOOL型は昔の規約だと定義されてない コンパイラ古いのかな
#include<stdbool.h>を追加してみて それで後半の方は消えると思う
消えないなら自分で定義するしかないなw
>>565も簡単に見たけど間違ってなさそうだし コンパイラ古いのかもしれない
579デフォルトの名無しさん:2005/07/11(月) 20:10:53
>>570
>>576
エラーメッセージのファイル名を見れば明らかだが
kadai.c
となっとるから、Cプログラムとしてコンパイルしようとしたようだな

これはC++のプログラムだ
580516:2005/07/11(月) 20:15:50
>>576 >>578 >>579
うーわー、はずかし・・・。
ちゃんとコンパイルできました。
改めてありがとうございました!m(_ _)m
581デフォルトの名無しさん:2005/07/11(月) 20:18:16
>>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も
出力してしまいます。これはなぜなんでしょうか?
教えてください。よろしくお願いします。
583デフォルトの名無しさん:2005/07/11(月) 21:13:13
×i=50
○i==50
584デフォルトの名無しさん:2005/07/11(月) 21:23:26
初心者は定数は左にかくようにしましょう^^
585582:2005/07/11(月) 21:26:08
>>583
解けました!ありがとうございました!
586571:2005/07/11(月) 21:27:02
571ですが今まで習ってきた中でunsigned long res等見たこと
なかったのでわからないんですが。
私は通常学校では
#include<stdo.h>
#include<stdlib.h>
#include<math.h>
ではじまるんで、できればこちらの形でお願いできないでしょうか。
572さんありがとうございます。
587デフォルトの名無しさん:2005/07/11(月) 21:33:22
>>586
それは cpp ではない気がする。stdo.h は普通ないし。
あと、 571 方式だと 50! とか計算することになるので unsigned long が
ないとまずお手上げなのでは?
588デフォルトの名無しさん:2005/07/11(月) 21:38:47
>586
おま、ちょそれC言語
589デフォルトの名無しさん:2005/07/11(月) 21:40:15
「みたこと無いから分からない」って、すごいな。
調べる気も起きないってか。
590デフォルトの名無しさん:2005/07/11(月) 21:41:42
571はWindowsと書いてあるから、intが32bitあるんだと思ってあげよう。

というわけでunsigned intにすると、571が今度はunsignedがわかんないとなきつく予感。
591デフォルトの名無しさん:2005/07/11(月) 21:42:47
>>586
50C25=126410606437752 なんだけど、これって 32 bit では表せないんだけど、
君の学校ではどうやって扱ってる?
592565:2005/07/11(月) 21:45:33
>>516
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/701.txt
バグと冗長とその他修正。
っても戻ってくるかな?
593571:2005/07/11(月) 21:50:04
587 さんありがとうございます。
すいません無知で。
一応前回の課題でやったやつをあげておきます。
コンパイラはどれなのか正直わかりません。
すいませんunsignedは意味がわかりました。
恥ずかしい質問すいませんでした。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/702.txt
594デフォルトの名無しさん:2005/07/11(月) 21:55:41
>>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
丸投げですがお願いします。。。
596591:2005/07/11(月) 22:15:30
>>571
126410606437752 を数値変数に代入して表示するだけのプログラムを
作ってくれたら、問題を解いてあげよう。
597595:2005/07/11(月) 22:38:37
step3: c = a ? b;
となってましたが、
step3: c = a - b;
の間違いでした。すいません。
598デフォルトの名無しさん:2005/07/11(月) 22:42:07
>>596
long long haihai = 126410606437752LL;
printf("%lld", haihai);
599591: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;
}
}
600デフォルトの名無しさん:2005/07/11(月) 23:01:02
>>599
すまん。>>598>>571だ。
601デフォルトの名無しさん:2005/07/12(火) 00:28:25
>>595
で、step3,4はどうすんだ?
602デフォルトの名無しさん:2005/07/12(火) 00:48:53
526ではないがハフマン符号化やってくれ。
同じようなことをしてるんだけど分からん。きっつー
603595:2005/07/12(火) 00:49:18
>>601
おそらくstep1,2を並列実行させて、
そのあとにstep3→step4って感じだと思います。
604デフォルトの名無しさん:2005/07/12(火) 01:22:32
605デフォルトの名無しさん:2005/07/12(火) 01:39:46
>>604
これだと
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/704.txt
のようなファイルで復号化失敗してしまうんですよね・・・。
理由がさっぱり分かりません。
ちなみに入力と出力はtxtにしたいんですがどうすればいいんでしょうか・・・。
606デフォルトの名無しさん:2005/07/12(火) 01:52:48
>>595
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/705.c
問題がよくわからんかったが書いてみた。
へぼいセンコーだってのはよくわかった。
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コ格納したのをソートする。
  よろしくお願いします。ならべく簡単にお願いします。
609デフォルトの名無しさん:2005/07/12(火) 11:40:57
>>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
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=676 [3.1] OS:WindowsXP
 [3.2] コンパイラ(バージョン):VC++ 6.0
 [3.3] 言語:C++
[4] 期限:7月13日まで
[5] その他の制限:配列、ポインタ、構造体を使用すること。
どなたかよろしくお願いします。
611デフォルトの名無しさん:2005/07/12(火) 12:29:16
>>610 問題文がないがどうしろって?
612デフォルトの名無しさん:2005/07/12(火) 12:34:54
>>610を配列、ポインタ、構造体を使用して書き直せってことじゃね?
まかせた>>611
613デフォルトの名無しさん:2005/07/12(火) 12:41:03
>>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;
}
ホントお手数ですがよろしくお願いします。すみません。
616デフォルトの名無しさん:2005/07/12(火) 13:19:53
ここは世の中のC言語の宿題を消化する墓場であって、
理解を深めてもらうとこでもなければ、手取り足取り教えるとこでもない。
617デフォルトの名無しさん:2005/07/12(火) 13:22:53
ホントにお手数なので無理です
それくらい調べなさい
618デフォルトの名無しさん:2005/07/12(火) 13:23:49
>>615
一箇所もわかんねーのかよw
終わってるな
とりあえず>>616に同意しておくか
619デフォルトの名無しさん:2005/07/12(火) 13:24:26
調べることじゃないだろ。
scanfの戻り値なんかは別だが。
620デフォルトの名無しさん:2005/07/12(火) 13:27:41
>>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, "一円"},
};
621620: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] その他の制限:特になし

お願いいたします。
624デフォルトの名無しさん:2005/07/12(火) 15:11:24
>>623
時分の条件は (0<=a<24,0<=b<60) だと思うが
625デフォルトの名無しさん:2005/07/12(火) 15:13:51
>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;
626デフォルトの名無しさん:2005/07/12(火) 15:14:48
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]その他制限:特になし

出せばいいので簡単なのでお願いいたします。
628デフォルトの名無しさん:2005/07/12(火) 15:54:27
>>627
疲れちゃいねぇよ。余計なお世話だ。
629デフォルトの名無しさん:2005/07/12(火) 16:02:32
ミニゲームのアイデアさえ出さないのか…
630デフォルトの名無しさん:2005/07/12(火) 16:09:02
>>619
一つもわかんないんだから1からやりなおせが適切か
631デフォルトの名無しさん:2005/07/12(火) 16:51:28
コメントを入れるところまでが宿題なんです。
ホントお手数ですがよろしくお願いします。すみません。
632デフォルトの名無しさん:2005/07/12(火) 16:54:10
>>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] その他の制限:特にないと思います><

模範解答みたいなのが出回ってるんですがそれは次で貼り付けます
このまま出すとコピーしたのがばれるということで困ってます
皆様よろしくおねがいします><
634デフォルトの名無しさん:2005/07/12(火) 16:55:27
>>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;
}

・・・ヴァカっぽくてやってらんねーな
635デフォルトの名無しさん:2005/07/12(火) 16:56:39
#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;
}
637デフォルトの名無しさん:2005/07/12(火) 17:03:02
>>631
/**/ を書いた時点でコメントだから >>615 で正しい

>>632>>635
壺だったw
638デフォルトの名無しさん:2005/07/12(火) 17:07:29
>>633
636 ってよくできているのでこれで問題ないんじゃないの?
これをレポートにすれば、単なるコピーじゃなくて
2ちゃんねるから持ってきたって言えるからなにもかもはっぴー?
639デフォルトの名無しさん:2005/07/12(火) 17:13:34
640今日の授業内orz:2005/07/12(火) 17:14:37
今日提出のこの636のやつを出すとこの教室内の9割がこれと同じを提出するんですよ^^;
福祉科なのになぜかC言語やらないといけないし・・・・
そのくせ選択必修で数値解析とってみると
C言語やるとは思ってもいなくて・・・・

これのすこし変えたので何かございませんかね
皆様のお力をおかしてくださいませ><
641デフォルトの名無しさん:2005/07/12(火) 17:16:55
>>633,636
まずCのソースにC++のコメント入れるのやめさすとこから始めようか
642デフォルトの名無しさん:2005/07/12(火) 17:17:22
>>640
printf("終了条件になりました\n");

puts("終了条件に成田まいsた");
にしてみるとか
643デフォルトの名無しさん:2005/07/12(火) 17:17:43
>>640
全部をまとめて一行にしちゃうとか。
# で始まる行以外は全部一行にしても大丈夫だよ。
あと、// から行末までは取り除いてね。
644デフォルトの名無しさん:2005/07/12(火) 17:19:57
>>640
画期的な案を思いついたんだよ
みんな>>636を提出するというのならば自分で書けるところまで書いてみたらどうだ?
きっとカンニング行為でまとめてあぼーんされるのに巻き込まれないだけマシ
正直が一番良いときもあるよ
645デフォルトの名無しさん:2005/07/12(火) 17:20:41
>>639
酷いゲームだ…
646デフォルトの名無しさん:2005/07/12(火) 17:23:37
一次元静電粒子コードの作成の仕方がわかりません。
誰か教えてください。
647今日の授業内orz:2005/07/12(火) 17:26:18
福祉科で自分せいぜい2chにカキコとワードとエクセルくらいしか使えないもので・・・・
苦し紛れに検索していたらここにたどり着きまして皆様のお力をお借りしたいと

工科系の大学で新設の福祉科にくるんじゃなかった・・
授業のカリキュラムがまだまだ出来てない感じで
C言語の授業があるとはつд;)

でもこれも選択必修なので落とすと来年まだほかの選択必修を取らないといけなくなるので

今回この授業はこれだけでテストがないらしく
レポートと出席だけで判断するそうでこまってるしだいです
648デフォルトの名無しさん:2005/07/12(火) 17:27:12
つ電源コード
649デフォルトの名無しさん:2005/07/12(火) 17:28:39
>>647
チラシの裏(ry
650デフォルトの名無しさん:2005/07/12(火) 17:30:30
>>647
よしわかった、匿名でこのページのアドレスを先生にチクれ
651今日の授業内orz:2005/07/12(火) 17:38:40
つд;)みんな同じ物をコピーして提出準備してる
18時まであと25分・・・・

>>650
2chを授業中に観覧してるなんて言えないです
これ以上iフィルターが強化されたら
校内LANとかの意味がなくなってきちゃいます><
652デフォルトの名無しさん:2005/07/12(火) 17:40:28
じゃあ俺がチクってやろう
条件は十分なので検索できるだろう
653デフォルトの名無しさん:2005/07/12(火) 17:44:05
先ずは学校名を晒せ。

>2chを授業中に観覧してるなんて言えないです
つーか、何この日本語能力のなさ。
654今日の授業内orz:2005/07/12(火) 17:45:36
ぁぅぁぅ(つ盆・)ぁぅぁぅ

(´盆`)ちくらないで〜〜〜〜〜〜

野菜炒めまずいから捨てたりしないからゆるして〜〜〜つд;)
655デフォルトの名無しさん:2005/07/12(火) 17:45:42
一応投下
#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; 
}
656655: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'

エラーがでるつд;)
661デフォルトの名無しさん:2005/07/12(火) 18:06:13
一応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に直すんじゃないの
662デフォルトの名無しさん:2005/07/12(火) 18:15:40
do{
とくれば
}while(hoge);

が必要かと>>660
663デフォルトの名無しさん:2005/07/12(火) 20:31:14
>>633
>ニュートン法のプログラムを作成し、
>f(x)=x -3x +x -3 =0の解を、初期値をx=5として、求めよ。

なんかものすごく難しいことを求められているような気がする。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/708.c
664663: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をつかわないで。なるべく簡単に
お願いします
666デフォルトの名無しさん:2005/07/12(火) 21:53:22
#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;
}
667デフォルトの名無しさん:2005/07/12(火) 21:56:59
668デフォルトの名無しさん:2005/07/12(火) 22:01:58
[1] 授業単元: C言語演習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/709.txt
[3] 環境
 [3.1] OS:Windows/Linux/等々 WindowsXP
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C/C++/どちらでも可 のいずれか C
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 7月14日まで
よろしくお願いします。
669デフォルトの名無しさん:2005/07/12(火) 22:09:07
>>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を使って、
文字列を表示してその文字列の文字数を表示するプログラムとか作れませんか?
672デフォルトの名無しさん:2005/07/12(火) 22:20:39
>>671
#include <string.h>
#include <stdio.h>
main(){char *s="abcd";puts(s);printf("%d\n",strlen(s));}
673デフォルトの名無しさん:2005/07/12(火) 22:21:56
>>671
あ、strcpyね、ごめんごめん。
#include <string.h>
#include <stdio.h>
main(){char s[5];strcpy(s,"abcd");puts(s);printf("%d\n",strlen(s));}
674デフォルトの名無しさん:2005/07/12(火) 22:45:24
>>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についてなんですがよろしいでしょうか?
676デフォルトの名無しさん:2005/07/12(火) 23:36:16
断る

C++Builder相談室 Part14
http://pc8.2ch.net/test/read.cgi/tech/1116460578/

くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/

Borland C++ BuilderX
http://pc8.2ch.net/test/read.cgi/tech/1065260556/
677デフォルトの名無しさん:2005/07/12(火) 23:50:43
>>676
GJ
678ikaikaikajika:2005/07/13(水) 00:02:25
初めて質問します。Cで お茶運びロボットのプログラムをくみたいのですが、もしよければ
おしえてください。 まず タッチセンサーの上にお茶がのると 前進し、光センサーで前に障害物があると一時停止し、お茶をとってくれるのを待ちます。
そして、お茶がとられたら、180度回転し、元の場所に戻ろうとするのでが、戻る途中で障害物があった場合(上にお茶がのってない状態で)、光センサーをつかって、なんとかして障害物
をかわしたいのです。 brickOS というOSです。 おねがいします。
679595:2005/07/13(水) 00:07:31
>>606さん助かりましたありがとうございます
680434−435:2005/07/13(水) 00:33:02
なんどもすいません434です(;´・ω・`A
期限過ぎていますが、骨組みとか未完でも構いませんので、なんとか作っていただけないでしょうか・・・?
お願いいたします・・・。
681デフォルトの名無しさん:2005/07/13(水) 00:42:34
[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 は区別するのかなぁ??
683434−435:2005/07/13(水) 00:58:30
434ですなんどもすみません(;´・ω・`A
期限切れていますが骨組み、未完でも構いませんのでどなたか作成お願いできないでしょうか
684681:2005/07/13(水) 00:58:39
>>682
いえ、しなくて良いようです。
685デフォルトの名無しさん:2005/07/13(水) 01:25:05
どなたか>>668をお願いします。
686デフォルトの名無しさん:2005/07/13(水) 03:01:40
[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] その他の制限:特になし
難しすぎて意味が分かりません助けてください
687デフォルトの名無しさん:2005/07/13(水) 04:53:33
ファイル名を入力し、"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万個程度)
688687:2005/07/13(水) 04:55:54
あ、ちょっと失敗しましたが
ファイルの中身はスペースがあって、全部文字数が15文字に揃ってます
689デフォルトの名無しさん:2005/07/13(水) 06:24:41
>>607をお願いします
690デフォルトの名無しさん:2005/07/13(水) 06:58:09
>>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;
}
691デフォルトの名無しさん:2005/07/13(水) 08:28:52
>>668
ttp://venus.aez.jp/uploda/data/dat2/upload317201.c
関数名とか適当に変えてちょ
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(ゼロ)を入力すると終了する。
というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
696694:2005/07/13(水) 10:16:02
すいません、期限は7/19までの間違いです。
697デフォルトの名無しさん:2005/07/13(水) 10:18:16
>>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(ゼロ)を入力すると終了する。
というのがどうしても分からないのですが、よかったら教えて頂けないでしょうか?
699デフォルトの名無しさん:2005/07/13(水) 10:22:59
700東海大学前:2005/07/13(水) 10:42:01
すいません。間違えて同じ文章を二回載せてしまいました。何か宣言が正しく終了されていないってでるのですが、どうしたらよろしいですか?
701デフォルトの名無しさん:2005/07/13(水) 10:52:38
>>700
何の宣言?
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のあたりだと思います。
704デフォルトの名無しさん:2005/07/13(水) 11:18:30
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
>>691
どうもありがとうございます。
709>>707:2005/07/13(水) 11:53:55
#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;
}
710705:2005/07/13(水) 11:55:38
例えば422を入力した場合の出力結果は、
1番大きい素数:421です。
2番目に大きい素数:419です。
と、出力するようにお願いします。
711デフォルトの名無しさん:2005/07/13(水) 11:57:46
>>709
どうもありがとうございます!!!!
712デフォルトの名無しさん:2005/07/13(水) 12:04:25
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・・・・
みたいなかんじでおねがいします
715デフォルトの名無しさん:2005/07/13(水) 13:09:02
>>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");
}
}
716715: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
>>715
すいません九九の表がでません
718715:2005/07/13(水) 13:23:03
>>717
九九の表にタイトルをつけるプログラムだから、九九の表は用意して入れて下さい。
719デフォルトの名無しさん:2005/07/13(水) 13:38:32
こういう事じゃないの? >>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
はいそうです!わかりにくくてすいません!!!
どうもありがとうございます!!!!!!!!!!
721694: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 ) を作成する。


以上です。(最後の一行が抜けてました)

よろしくお願いします。
722デフォルトの名無しさん:2005/07/13(水) 15:39:31
>>687
LINUXなの?WINDOWSなの? コンパイラは?
723687:2005/07/13(水) 15:58:43
一応リナックスでお願いします
コンパイラはgccです
724デフォルトの名無しさん:2005/07/13(水) 16:24:26
>>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 ) ;
}
725デフォルトの名無しさん:2005/07/13(水) 16:46:02
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] );
}

気が向いたら差し替えてくれぃ。
どーでもいい修正スマソ
726デフォルトの名無しさん:2005/07/13(水) 17:03:54
>>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日

さっぱりです・・・助けてください。
728694:2005/07/13(水) 17:25:14
>>724
ありがとうございます。
せっかく作ってくださったのに申し訳ないですが、
char*と、sizeof()と、"before"、"after"などはまだ習ってないんです。
どうすればいいですか?
729デフォルトの名無しさん:2005/07/13(水) 17:33:26
>[3.2] イーマックス
また来たよこのバカ
730デフォルトの名無しさん:2005/07/13(水) 17:38:31
>>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;
}
731デフォルトの名無しさん:2005/07/13(水) 18:12:44
>>729
lispでかかれたコンパイラを使えってことじゃね?
732デフォルトの名無しさん:2005/07/13(水) 18:25:47
>>731
「[3.2]コンパイラ」って開発環境も含んでんじゃね?
VisualStudio.netとか書いても誰も文句言わねーじゃん。
もしそうならEmacsにはコンパイルボタンが付いてるから無問題。
makefileがあればmakeしてくれる。無かったら動かないけど。
733デフォルトの名無しさん:2005/07/13(水) 18:28:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):アドレス帳を作る。3つの文字列変数、氏名、振り仮名、電話番号をメンバとする構造体を用いて氏名と電話番号でそれぞれソートしたファイルを作成しファイルに出力せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン): cc
 [3.3] 言語:C
[4] 期限:7月15日まで
[5] その他の制限:構造体とファイル出力を用いよ。状況に応じてポインタなども使用せよ。

お願いします
734デフォルトの名無しさん:2005/07/13(水) 18:29:23
[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はバイナリファイルになってるのでこのようにしてみたんですが
どうもうまく動かないんでどう修正していけばいいのか教えていただけませんでしょうか
735デフォルトの名無しさん:2005/07/13(水) 18:36:46
>>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;
}
736デフォルトの名無しさん:2005/07/13(水) 18:38:47
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/715.zip
そのままだとkadai.datをあげれないので圧縮
737デフォルトの名無しさん:2005/07/13(水) 18:42:21
>>732
そりゃVS.NETはコンパイラ含めてのVS.NETだからだろ
738デフォルトの名無しさん:2005/07/13(水) 18:43:44
>>737
そだね。ちょっと強引だったかも。
739734:2005/07/13(水) 18:49:27
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/716.zip
ファイル上げなおし

>>735
それだとちゃんと処理されるみたいです
自分のだとどこがまずかったのか原因とかいろいろ考えてみます
740K: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]できるだけ簡単にお願いします。コメント文も少しお願いします。
宜しくお願いします。
741デフォルトの名無しさん:2005/07/13(水) 18:55:24
>>740
最小二乗法って統計学で出てくるやつ?
742デフォルトの名無しさん:2005/07/13(水) 19:00:49
#if 0
  >>741
#endif
743デフォルトの名無しさん:2005/07/13(水) 19:21:05
744734:2005/07/13(水) 19:22:37
>>735
いろいろ調べながら見ていてどのような処理になっているか把握出来ました
ありがとうございました
745デフォルトの名無しさん:2005/07/13(水) 19:36:37
質問です。
マインスイーパーフラッグで2人対戦で爆弾を見つけていくGameをつくりました。
そこで、考える時間設定をしたいんですけど、どういう関数を使えばいいんでしょうか?
10秒たつとPlay順がうつるようにしたいです。
746デフォルトの名無しさん:2005/07/13(水) 19:45:54
>>734==744
b=b+2;
の部分ね、これだとsizeo(int)*2バイト進んじゃう(32ビットintだったら8バイト進む)。
2バイト進めたいなら
b = (int *)( (char *)b + 2 ); かな。
だけど、printfで*bを見た瞬間に警察に捕まります。
747デフォルトの名無しさん:2005/07/13(水) 19:50:48
>>745
ここは質問スレではなく宿題スレですが
748デフォルトの名無しさん:2005/07/13(水) 19:52:07
ちなみにそこまでやったんならとりあえず自分が思うように組んでみるニダ
749745:2005/07/13(水) 21:14:18
宿題です。
マインスイーパーフラッグで2人対戦で爆弾を見つけていくGameをつくってください。
10秒たつとPlay順がうつるようにしたいです。
750デフォルトの名無しさん:2005/07/13(水) 21:17:01
凄いな、なんだか感動すら覚えた
751デフォルトの名無しさん:2005/07/13(水) 21:22:34
>>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] ) ;
}
752デフォルトの名無しさん:2005/07/13(水) 21:34:09
>>745
環境依存スレへgo
753694:2005/07/13(水) 21:37:18
>>751
いえいえ、わざわざ修正していただいて、ありがとうございました。
自分ではいくら考えてもわからなかったもので、ホントに助かりました〜。
754デフォルトの名無しさん:2005/07/13(水) 21:42:33
今まだ答えられてない宿題どれ?暇つぶしにやるから
755デフォルトの名無しさん:2005/07/13(水) 21:50:24
>>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] バイナリーモードがよくわかりません・・お願いいたします!!
757デフォルトの名無しさん:2005/07/13(水) 22:00:22
#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!!!
ありがとうございました!
759デフォルトの名無しさん:2005/07/13(水) 22:07:00
あ、ファイル閉じてねーや。sum=0;の前にfclose(fp);をよろしく。
760デフォルトの名無しさん:2005/07/13(水) 22:14:30
そこでファイル閉じてなくて困ることはまあ無いだろうけどな
761デフォルトの名無しさん:2005/07/13(水) 22:31:21
>>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;
}
762デフォルトの名無しさん:2005/07/13(水) 22:35:00
>>756
お前が同じ大学の同じ授業取ってるという確信が俺にはある
修正入ってるけど問題文見ればほぼそのままだし

バイナリだとモードのとこにbつくだけ のはず

期限木曜24時じゃなくて今日の23:59なら間違いなく同じ

と734の俺が言ってみる
763デフォルトの名無しさん:2005/07/13(水) 22:38:25
そして二人はいつしか恋に落ちたのです
764デフォルトの名無しさん:2005/07/13(水) 22:39:13
単位も落ちたのでした。
765デフォルトの名無しさん:2005/07/13(水) 22:40:56
俺も俺も
766デフォルトの名無しさん:2005/07/13(水) 22:42:44
>>762
うはwwwwwゴメスwwwwww
767デフォルトの名無しさん:2005/07/13(水) 23:06:50
[1] c言語
[2] ハノイの塔の棒が四つバージョン。
[3] 環境
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 7/15まで。
[5] 特になし。

768デフォルトの名無しさん:2005/07/13(水) 23:10:21
ウソくさい宿題だな
769デフォルトの名無しさん:2005/07/13(水) 23:15:12
>ハノイの塔の棒が四つバージョン。

ここがいかんなw
770デフォルトの名無しさん:2005/07/13(水) 23:20:38
771434−435:2005/07/13(水) 23:20:53
プログラマのみなさんでも434−435は難しすぎるのでしょうか・・・?
木曜日が最終提出期限だったのですが。。。
骨組みとかまでの適当でも構わないのでおねがいします(´Д⊂
772デフォルトの名無しさん:2005/07/13(水) 23:21:00
棒だけ4つあっても3だけ使うでいいじゃん
773デフォルトの名無しさん:2005/07/13(水) 23:22:04
>>771
入力ファイルのフォーマットがみょうちくりんで
めんどくさい。
774デフォルトの名無しさん:2005/07/13(水) 23:24:58
あまり細かく指定されると仕事みたいでつまらん
775デフォルトの名無しさん:2005/07/13(水) 23:25:15
>>771
下手な釣り方じゃ難しいだろうな。
プログラマのみなさんはめんどくさいの大嫌いなのです、きっと。
その問題の用件満たすもの作るのはプログラミングというよりは事務作業だ。
776デフォルトの名無しさん:2005/07/13(水) 23:32:14
会員  第一ピリオド  第二ピリオド   第三ピリオド
番号  ゲーム数     ゲーム数     ゲーム数
   #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 には上のデータもあるらしいけど
これなに??問題見た感じでは必要ないと思うんだけど。
777デフォルトの名無しさん:2005/07/13(水) 23:33:33
>>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デフォルトの名無しさん:2005/07/13(水) 23:41:05
プログラマの人は基本的に面倒くさがりなんでつね メモ 〆(..*) メモ
779デフォルトの名無しさん:2005/07/13(水) 23:50:57
>>778
じゃねーんだよ。金ももらえんのに、タダで答えてやってるんだから、
手を抜いて当然。
780デフォルトの名無しさん:2005/07/13(水) 23:51:59
>>778
どんな分野でもある程度技術を用いる仕事をするようになればわかるよ
781デフォルトの名無しさん:2005/07/13(水) 23:53:39
>>778
生産的な怠惰と言って欲しいな
782デフォルトの名無しさん:2005/07/14(木) 00:15:39
「答えてやってる」とか考えてる奴は逝ってほしい。
783デフォルトの名無しさん:2005/07/14(木) 00:16:18
>>782
質問する側のお前が言うな。
784デフォルトの名無しさん:2005/07/14(木) 00:17:25
燃料乙
785デフォルトの名無しさん:2005/07/14(木) 00:19:20
ちっとも燃えませんでした
786デフォルトの名無しさん:2005/07/14(木) 00:22:28
2ちゃんは荒んでるからマナー必要ないとか考えてる奴は回線切ってほしい。
787デフォルトの名無しさん:2005/07/14(木) 00:24:00
788デフォルトの名無しさん:2005/07/14(木) 00:35:03
>>787
こういう言葉の通じない猿が一番性質悪い
789デフォルトの名無しさん:2005/07/14(木) 00:41:12
>>788
猿はお前。
790デフォルトの名無しさん:2005/07/14(木) 00:43:34
>>771
まだ大丈夫なのかね?
791デフォルトの名無しさん:2005/07/14(木) 01:25:17
龍馬(将棋)を8クイーン同様に互いの効きを外すようにして配置することを考える。
ただし、将棋盤なので8×8では
無く9×9とし、9枚配置するものとする。
・配置は全部で何通りあるかを求めるプログラムを作成せよ

という問題があるんですが、解けますか???

792デフォルトの名無しさん:2005/07/14(木) 01:26:31
ごめんマジで俺の知識が無いだけなのだが
>8クイーン同様に互いの効きを外すようにして
がわからん
793デフォルトの名無しさん:2005/07/14(木) 01:29:12
互いの動く範囲に重ならないようにです

お願いしますm(__)m
794デフォルトの名無しさん:2005/07/14(木) 01:29:42
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クイーン



796デフォルトの名無しさん:2005/07/14(木) 01:36:46
>[4] 期限:今
期限過ぎちゃいましたね
797デフォルトの名無しさん:2005/07/14(木) 01:37:16
もはや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] その他の制限:バックトラック法をつかって

799デフォルトの名無しさん:2005/07/14(木) 01:40:49
龍馬(りゅうめ)
斜め方向なら何目でも、縦横方向なら一目だけ進むことができる。

まずはここからだな
800デフォルトの名無しさん:2005/07/14(木) 01:43:39
全て揃ってる場合の組み合わせ?
次の一手の指し方の数求める?
上でいいのか?
801デフォルトの名無しさん:2005/07/14(木) 01:45:04
配置の仕方が何通りあるのか
802デフォルトの名無しさん:2005/07/14(木) 01:46:54
9枚配置って書いてあったな、すまん

もちろん二歩とかも計算しないとな
803デフォルトの名無しさん:2005/07/14(木) 01:51:24
>>802
うーんと、龍馬の効き筋に居なければ、駒が複数同じ列に居てもいいとおもうけど、どうかな
804デフォルトの名無しさん:2005/07/14(木) 02:04:40
ここまで考えてもらっといてこんなこと言い出しずらいのですが8クイーンと言うのは
8行8列の板にクイーンを8個置くというプログラミングで僕がお願いしたのはそれの
龍馬バージョンすなわち8行8列の板に竜馬効きのない所に8個置くといういう問題な
ので二歩とか関係ないです
805デフォルトの名無しさん:2005/07/14(木) 02:14:23
将棋の根本的なルール関係ないのか('A`)
806デフォルトの名無しさん:2005/07/14(木) 02:16:32
>>805
あるのは9つの龍馬だけだよ
807デフォルトの名無しさん:2005/07/14(木) 02:16:57
>>804
そのレスでやっとわかった!
■□□□□□□□■
□■□□□□□■□
□□■□□□■□□
□□□■■■□□□
□□□■■■□□□
□□□■■■□□□
□□■□□□■□□
□■□□□□□■□
■□□□□□□□■
こういうのを並べろって話だな
808デフォルトの名無しさん:2005/07/14(木) 02:18:47
そうです

がんばってください!!お願いします!!!!
809デフォルトの名無しさん:2005/07/14(木) 02:21:10
>>798
#include <stdio.h>

int main() {
printf("%s", "0 とおりのおき方が見つかりました\n");
return 0;
}
810デフォルトの名無しさん:2005/07/14(木) 02:21:55
俺もやっと問題の意味がわかった・・・
811デフォルトの名無しさん:2005/07/14(木) 02:24:03
回転、鏡像回をどーやって回避するんじゃろうか。
8クイーンではどーやってんだろ(?)
・・・まーぼちぼち、組んでみますか。
812デフォルトの名無しさん:2005/07/14(木) 02:26:55
あるのは9つの龍馬と9*9の将棋板か

8クイーンのコードあれば参考になるんだろうが
813デフォルトの名無しさん:2005/07/14(木) 02:33:28
#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);
    }
  }
}
814デフォルトの名無しさん:2005/07/14(木) 03:08:59
自身ねーなぁ・・・回転/鏡像解を排除してないもので、352個発見。
815デフォルトの名無しさん:2005/07/14(木) 03:28:49
馬に縦横の効きがあると勘違いした orz
816デフォルトの名無しさん:2005/07/14(木) 03:36:36
それじゃクイーンのままだw
817デフォルトの名無しさん:2005/07/14(木) 05:07:29
67809372個・・・ホントかよ・・・(回転/鏡像解を排除していない)
818デフォルトの名無しさん:2005/07/14(木) 05:24:08
クイーンや龍王と違って龍馬は縦横消せないから計算面倒なのか
819デフォルトの名無しさん:2005/07/14(木) 05:39:53
俺が前に作った8クイーンの回転/鏡像排除プログラムは、今まで求めた解を
リストにしておき、新しく求まった解を回転/鏡像回転して、今まで求めた解と
一つ一つ比較するという、恐ろしく効率の悪いものだった。

http://www.pro.or.jp/~fuji/puzzlestudy/recursive/index.html

↑ここはパズルでは有名なサイト。運営者さんは既にかなりお年を召してらして、
C++が頭に入らない様子だが、Cとパズルに関してはプロでいらっしゃるようなので、
参考になるだろう。
820デフォルトの名無しさん:2005/07/14(木) 08:35:26
>>819
うわぁ、翁のページだ。

ところで亀で恐縮だが、
>732
>Emacsにはコンパイルボタンが付いてるから
???
821デフォルトの名無しさん:2005/07/14(木) 08:42:53
[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] 期限:本日五時まで

お願いします
822デフォルトの名無しさん:2005/07/14(木) 08:44:43
data.txtじゃないのか…?
823デフォルトの名無しさん:2005/07/14(木) 08:46:09
「データ」じゃなくて「出た」なんです。
824デフォルトの名無しさん:2005/07/14(木) 08:47:07
いや、多分というか絶対そうだと思いますが、なぜかそう指定されました
825デフォルトの名無しさん:2005/07/14(木) 09:01:16
思わずfopen("neta.txt", "r")したくなるな。
826デフォルトの名無しさん:2005/07/14(木) 09:32:27
>>798
回転/鏡像解ぬき8480779個(20分かかる・・・)
個数のチェック誰かたのむ。

しかし・・・なんだな。プログラムがショボすぎて見せられん。
診断室に出せそうなレベルだ(鬱)
827デフォルトの名無しさん:2005/07/14(木) 09:54:50
>>823
ウンコが出たんだな、きっとそうだ、うん。
828デフォルトの名無しさん:2005/07/14(木) 10:04:32
構造体の勉強をしながら作ってみました。。
読み込みまでしかやってませんが疲れたので…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/717.c
829デフォルトの名無しさん:2005/07/14(木) 10:18:41
830デフォルトの名無しさん:2005/07/14(木) 12:28:07
>>821
seiseki.txt の間違いじゃないのか?
前プログラム作ってやっただろ、むかつく奴だなテメー
仕様と違ってたならそう書けばいいだろうに、C言語なら俺に聞け のスレでも
同じように聞いて回ってるし・・・ 礼儀知らずにも程がないかい? 
ま、他の方たちと比べるとしょぼいのは認めるけどさ、あんまりだ
831デフォルトの名無しさん:2005/07/14(木) 13:19:14
同じ講師の宿題で違う奴ってケースはここ最近多いからなぁ。
そういう時は以前の回答をリンクしたりコピペすればええ。
832デフォルトの名無しさん:2005/07/14(木) 13:49:01
[1] 授業単元: C言語実習
[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/719.txt
[3] 環境
 [3.1] OS:WindowsXP SP2
 [3.2] コンパイラ(バージョン): Microsoft Visual Studio .NET 2003
 [3.3] 言語:C
[4] 期限:2005年8月3日まで
[5] その他の制限:特になし

よろしくお願いしますm(_ _)m
833デフォルトの名無しさん:2005/07/14(木) 14:01:50
[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++をかじった程度ならべく簡単にお願いします。
よろしくお願いします。

834デフォルトの名無しさん:2005/07/14(木) 14:18:19
>>820
あ、マンドクサイからボタンて言っちゃった。
メニューバーの Tools→Compile...
でMakefileを探して実行してくれる。
コマンドはわからないから、メニューバーなんかねぇよ。とか言われたら困る
ちなみにXEmacsだとボタンが付いてる。
835デフォルトの名無しさん:2005/07/14(木) 14:22:42
>>834
大丈夫、compileコマンドなら使っているから。
そうか、メニューバー(つーかGUI)使ってないけど便利なのかもね。
836デフォルトの名無しさん:2005/07/14(木) 14:25:19
M-x compile って書け。
837デフォルトの名無しさん:2005/07/14(木) 14:26:00
[1] 授業単元:シミュレーション
[2] 問題文(含コード&リンク): ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/720.txt
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:明日
[5] その他の制限:特になし
切にお願いします。
838434:2005/07/14(木) 14:40:52
>>776

問題文そのまま移しましたので、いらない部分もあるかと思います><
4時半ごろまでに作成おねがいできるでしょうか?
839821:2005/07/14(木) 16:08:49
>>829
間に合いました。ありがとうございます
>>830
いえ、そのC言語なら俺に聞けスレで聞き回ってるのは自分ではありません
840デフォルトの名無しさん:2005/07/14(木) 18:30:06
>>833
> [3.2] コンパイラ(バージョン): .cpp
> [3.3] 言語:どちらでも可
>[4] 期限:2005年7月14日17:00まで
>[5] その他の制限:どこまで習っているか、=CとC++をかじった程度ならべく簡単にお願いします。

@コンパイラの欄にみんなgccとかbccとか書いてるからって適当に書くのはやめましょう
A言語はいっぱいあります。2行下を読まなくても分かるように書きましょう
B投稿する前に文を読み返しましょう、もしくは方言を使わないようにしましょう
841初心者ゴン:2005/07/14(木) 18:34:35
>>840さん
こういうことでしょうか→VC++6.0
842デフォルトの名無しさん:2005/07/14(木) 18:51:48
>>841
そゆことだな
843デフォルトの名無しさん:2005/07/14(木) 19:05:57
なぜコンパイラが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] 制限:説明がついていますと,とてもうれしいです。
よろしくお願いします。
845初心者ゴン:2005/07/14(木) 19:19:58
>>843
たぶんいままでファイル名.cppってやってきたので・・・これじゃないかなって思いまして。
846デフォルトの名無しさん:2005/07/14(木) 19:22:53
>>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;
}
847デフォルトの名無しさん:2005/07/14(木) 19:25:44
>>845
それが「コンパイラ」だと思ったわけですか?
848デフォルトの名無しさん:2005/07/14(木) 19:56:58
そんなレベルでよくプログラミングをやるなあ。
849844:2005/07/14(木) 20:10:49
846さん、ありがとうございますー。
大変申し訳ないのですが、このプログラムをここでこうして
ああしてなど、説明しなければならないのですが、
よろしければ、その説明もしていただけないでしょうか?
お願いします。
850デフォルトの名無しさん:2005/07/14(木) 20:23:20
うーむ(^^;;
851デフォルトの名無しさん:2005/07/14(木) 21:16:21
846でいいのか…
852デフォルトの名無しさん:2005/07/14(木) 21:20:32
>>838
あらごめんwww
853デフォルトの名無しさん:2005/07/14(木) 22:01:07
>>826
俺もそうなった。(50秒ぐらい)
3マス2枚とか4マス2枚とか、小さい数字で確認したから多分間違いない。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/721.c
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] その他の制限:関数、配列まで習ってます。

今日中にできますかねぇ?お願いします!!
855デフォルトの名無しさん:2005/07/14(木) 23:08:20
>>854
その問題なら最近見たぞ。このスレをよく見て味噌。
856デフォルトの名無しさん:2005/07/14(木) 23:11:34
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;
}
857デフォルトの名無しさん:2005/07/15(金) 00:15:03
[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
859857:2005/07/15(金) 01:10:24
>>858
ありがとうございます!!!
本当に感謝します!!


でも…
もう一問あったんでどなたかお願いできませんでしょうか…(´・ω・`)

[2] 問題文(含コード&リンク):
問1
商品の金額を入力すると、消費税額を計算して表示するプログラム
[消費税と商品の税抜き金額の表示]
[消費税率は変動する可能性があるのでプリプロセッサ(#define)を使う]

問2
商品の金額を入力する前に、税込価格か税抜価格かを入力し、税抜価格だったら消費税を計算して、消費税と税込価格を表示させる

問3
10回繰り返して金額を入力して計算できるようにする
[繰返しの途中でも終了できるようにする]
[while文を使って終了するまで何度でも繰り返せるようにする]
860857:2005/07/15(金) 01:12:22
問4
繰返して入力した金額を合計して、総額(税込)を最後に表示させる

問5
複数の客の購入金額を繰返して入力して、各客の総額を最後に表示できるようにする
[全ての客の総額(総売上額)も表示させる]

問6
プログラムのソースに、/* */で囲み注釈を適宜記述

問題文のみ書かせていただきます。
他は>>857の通りです。
[ ]内は発展問題ですので、どうしてもというわけではありません。
次から次へ図々しいのは承知してますが、よろしくお願いいたします。
861デフォルトの名無しさん:2005/07/15(金) 02:19:10
問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] その他の制限:関数まで
はじめまして。本日テストを控えていまして、自分達の力ではどうしようもないでした。どなたか親切な方ご教授お願いします。
863デフォルトの名無しさん:2005/07/15(金) 02:39:20
ファイルスコープを持つ変数。
宣言位置、関数の外。
変数の使い方、引数でパラメータを渡すと宣言等が面倒になるため、パラメータを渡す用途で用いる。
有効な範囲、ファイル全体。

関数全体に関係するブロックスコープを持つ変数。
宣言位置、関数の外。
変数の使い方、実はファイルスコープの変数でも問題ないが、関数の先頭に書いておくことで、その関数がどの変数を使うかが分かりやすくなる。
有効な範囲、関数全体。


864デフォルトの名無しさん:2005/07/15(金) 02:42:03
>関数全体に関係するブロックスコープを持つ変数。
>宣言位置、関数の外。

へ〜
865858:2005/07/15(金) 02:44:07
>>859
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/724.zip

(;´ρ`)チカレタヨ・・・

問5とか単に金額を総計しただけ。
消費税とか計算してないからね!

眠りながらやったので間違いあるかもだから自分でチェックしてね〜

866デフォルトの名無しさん:2005/07/15(金) 02:45:08
>>863さん
ありがとうございました!!お陰で助かりました。本日のテストがんばらせていただきます
867デフォルトの名無しさん:2005/07/15(金) 02:53:59
>>864
すまんすまん。関数の中ね。

>>866 がんばれー。
俺んときはstaticを説明せよってのが出た。値を変えない変数と答えておいた。
868864:2005/07/15(金) 03:02:20
>staticを説明せよってのが出た。値を変えない変数

へ〜
ぢゃぁconstは?
869デフォルトの名無しさん:2005/07/15(金) 03:04:10
代入しちゃいけない変数
870デフォルトの名無しさん:2005/07/15(金) 04:27:26
>>869 の理論に基づくと
×const double pi = 3.1415926535;
さて、どうするか…
871デフォルトの名無しさん:2005/07/15(金) 04:33:07
代入と初期化は違いますが何か?
872デフォルトの名無しさん:2005/07/15(金) 04:38:08
ネタ、楽しませてもらってます。
873デフォルトの名無しさん:2005/07/15(金) 08:56:55
>>832をよろしくお願いします・・・
874デフォルトの名無しさん:2005/07/15(金) 09:14:54
期末試験の人、どんな問題だったかレポートよろしく。
875デフォルトの名無しさん:2005/07/15(金) 09:17:35
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」を立ち上げた段階でプログラムが起動してしまうのですがどうすればいいのでしょうか?
877デフォルトの名無しさん:2005/07/15(金) 10:38:14
878デフォルトの名無しさん:2005/07/15(金) 12:01:40
どなたか>>837をお願いします…。
879デフォルトの名無しさん:2005/07/15(金) 12:12:01
>>878
既にヒントの段階でランダムウォークしているんだから、後は正気に戻るロジックを書けばいいじゃん。
つーか、ヒントが汚いから追加する気になれん。
880デフォルトの名無しさん:2005/07/15(金) 13:00:50
[1] 授業単元: C言語
[2]
問題文(含コード&リンク)
:現在の時刻を表示する関数
void put_time(void){.....}
を作りなさい。            
[3] 環境
 [3.1] OS:Windows2000
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
[4] 期限:7月21日
[5] その他の制限:構造体が終わったところです。
         参考プログラムとして、今日の日付を表示するプログラムがあります
         http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/728.txt
881デフォルトの名無しさん:2005/07/15(金) 13:10:40
>>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);
}
882デフォルトの名無しさん:2005/07/15(金) 13:14:57
>>880
void put_time(void)
{
time_t now = time(NULL);
char buf[20];
strftime(buf, sizeof(buf), "%H:%M:%S", localtime(& now));
}
883デフォルトの名無しさん:2005/07/15(金) 14:18:15
ありがとうございます。
しかし
¤
の文字は一体………………
キーボードで押すところありますでしょうか。
884デフォルトの名無しさん:2005/07/15(金) 14:29:46
>>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
885844:2005/07/15(金) 14:29:49
あつかましいですが、
この問題の説明だれかお願いしますー。
886デフォルトの名無しさん:2005/07/15(金) 14:36:13
>>883
& に読みかえるべし。
887デフォルトの名無しさん:2005/07/15(金) 14:38:12
>>885
参考プログラムに >>881 >>882 のプログラムを追加するんだ。
ちなみに、882のやつは時刻を表示しないので、仕様を満たしてないようだ。
888882:2005/07/15(金) 14:56:43
>>884
#include <time.h>
を適当に入れてくれ。

>>887
あ、忘れてた。
strftime(...);の次の行でprintf(buf);だね。
889デフォルトの名無しさん:2005/07/15(金) 15:08:47
>>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
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):
http://users.kyoto-kcg.ac.jp/~k-konishi/Program/CProgram/section4-2.htm
ここのページの1番下にある演習4−2です。
[3] 環境  [3.1] OS:Windows2000
 [3.2] コンパイラ(バージョン): gcc
 [3.3] 言語:C
 [4] 期限:今度の日曜日17日いっぱいまで


double atof(char s[])
{
以下はわかるのですが、main文他がわかりません。


891882:2005/07/15(金) 15:13:29
>>889
箸の上げ下ろしまで全て教えないと飯も喰えないのか?
main()関数くらい自分で適当にでっち上げてくれ。
int main() {put_time(); return 0;}
892デフォルトの名無しさん:2005/07/15(金) 15:17:11
>>890
そのテキストの上の方にあるmain()「原始的な電卓」でも使っとけ。
つーか、本当にatof()の書き方は判ったのか?

それはさておき、随分とアナクロなCを教えているなぁ。
社会で全く役に立たないCか……
折角だから通報しておくか。
893デフォルトの名無しさん:2005/07/15(金) 15:19:09
>>891
ハァ…。赤ん坊は箸は使えないんですが。
とりあえずやってみます。ありがとうございました。
894デフォルトの名無しさん:2005/07/15(金) 15:20:56
>>893
赤ん坊はそんな舐めた口はきかねぇなぁ。
895デフォルトの名無しさん:2005/07/15(金) 15:21:43
見ず知らずの赤ん坊の世話をしろと…?
896820:2005/07/15(金) 15:29:45
ああすいません、僕が悪かったです。

#include <time.h>
#include <stdio.h>
int main()
return 0;
使ってみたらコンパイル出来ました。ですが、時間が表示されません。
strftime(...);
の行のあとにprintf(buf);
を入れても駄目です。
897デフォルトの名無しさん:2005/07/15(金) 15:29:57
幼女のめんどうなら喜んでみようじゃないか
898デフォルトの名無しさん:2005/07/15(金) 15:45:50
>>844
japan と言えば漆、china と言えば磁器と言うように、国の名前が一般名詞として
別の意味になることがある。
そこで、ポーランドがなにを意味するのかを考えて、さらに逆ポーランドが
思いつけばオッケーなのでは?
899880:2005/07/15(金) 15:51:05
キタ━━━━(゚∀゚)━━━━!!!!!
やりますた。
おふた方ありがとう。
900890:2005/07/15(金) 15:52:43
main,getlineできました。
どっちも教科書に載っていました・・・

どうもありがとうございました。
901デフォルトの名無しさん:2005/07/15(金) 15:53:09
>>889
おまい、もうこなくていいから。
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;
903902続き: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: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関
数ヘッダーがありません。」というエラーが出たんですが対処法が分かりません。どうか教えてください。
904デフォルトの名無しさん:2005/07/15(金) 16:08:47
>>898
>844は逆ポーランドなんて言ってない
905デフォルトの名無しさん:2005/07/15(金) 16:09:04
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); ← ; は必要ない。
906898:2005/07/15(金) 16:40:42
>>904
しまった。逆ボーランドか……
すっげー、引っかけ問題だな。まあ引っかかってしまって言い訳がましいが。
>>844
すまん。これ、私の手に負えるような問題じゃないや。超難問。
907844:2005/07/15(金) 16:51:50
846さんが逆ボーランドのプログラムが書いてくれたんですけど
プログラムの説明をしなければならないので、プログラムで
ここがこうで、あそこがこうなってーみたいな説明が欲しいんです(><)
908デフォルトの名無しさん:2005/07/15(金) 16:55:49
846ではどうやっても逆ボーランドの制作などできんが・・・。
909デフォルトの名無しさん:2005/07/15(金) 16:56:01
>>907
それは自分で考えろ。
というか、授業で原理の解説くらいあったんだろ?
その解説とソースを見ていけば普通分かる。
910デフォルトの名無しさん:2005/07/15(金) 17:04:49
>>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
ボーランド?ポーランド??
914デフォルトの名無しさん:2005/07/15(金) 17:17:07
>>911
それは無理なんじゃないかな?
要するに4次元のベクトルに全順序を定義できるかだけど、
各要素の大小関係では例えば、 (1,0,0,0) と (0,1,0,0) なんかは
比較不能になるんじゃないかな?
915デフォルトの名無しさん:2005/07/15(金) 17:26:35
846は何のプログラムなの?
916デフォルトの名無しさん:2005/07/15(金) 17:29:05
>>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;
}
917デフォルトの名無しさん:2005/07/15(金) 17:32:51
>>915
実行すれば分かる予感(w
918デフォルトの名無しさん:2005/07/15(金) 17:35:28
よくわからんけど、
>>844の答えは、>>846じゃないって事か?
919デフォルトの名無しさん:2005/07/15(金) 17:43:47
>>916
サンクスモニカ
920デフォルトの名無しさん:2005/07/15(金) 17:46:34
>>916
ごめん、通らなかった。
921デフォルトの名無しさん:2005/07/15(金) 17:48:57
>>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;
  }
}
922916:2005/07/15(金) 17:49:09
>>920
コンパイラなに使ってるんだ?
あと、インデントのために全角スペース入ってるからちゃんと消せよ。
923デフォルトの名無しさん:2005/07/15(金) 17:50:22
>>918
だからよくソース見てごらんて。


924デフォルトの名無しさん:2005/07/15(金) 17:51:52
>>922
gcc でつ。
925デフォルトの名無しさん:2005/07/15(金) 17:53:46
>>922
全角スペースよか&nbsp;を適度に入れてやるほうが親切ですよ。
926918:2005/07/15(金) 17:54:21
>>844は、ボーランドって言ってるけど
>>846は、ポーランドって言ってるって事?
927デフォルトの名無しさん:2005/07/15(金) 17:57:18
>>844は、ボーランドって言ってるけど
>>846は、ドンラーポって言ってるって事
928916:2005/07/15(金) 17:58:58
>>925
コピペ用フィルタを   で出力するようにしたであります。
ということは、& → &amp; とかもしておいたほうがいいのかな?
929デフォルトの名無しさん:2005/07/15(金) 17:59:15
>>924
つかテンプレ嫁よ。
930844:2005/07/15(金) 18:17:17
すいません、私の問題は逆ポーランドでした。
これなら846さんの回答はあっているんでしょうか?
931デフォルトの名無しさん:2005/07/15(金) 18:23:09
ネタだから。

932デフォルトの名無しさん:2005/07/15(金) 18:25:21
そろそろ教えてあげたほうがいいのかな?
933デフォルトの名無しさん:2005/07/15(金) 18:41:43
>>930=844
>>927

これで>>844が釣りだったらワロス
934デフォルトの名無しさん:2005/07/15(金) 18:47:27
ていうかあの問題文だと答え様が無いような。
935デフォルトの名無しさん:2005/07/15(金) 18:54:23
#include <stdio.h>

int main(void)
{
  int c;

  while ((c = getchar()) != EOF) {
    switch (c) {
    case '&':
      printf("&amp;");
      break;
    case '<':
      printf("&lt;");
      break;
    case '\t':
      printf("&nbsp; ");
      break;
    default:
      putchar(c);
    }
  }
  return 0;
}
936デフォルトの名無しさん:2005/07/15(金) 19:33:17
>>844
釣りだろう。演算子の種類くらいは指定するはず。
937デフォルトの名無しさん:2005/07/15(金) 19:56:52
まあ、釣りじゃなかったらゴソだろうな。
938デフォルトの名無しさん:2005/07/15(金) 19:58:46
>>844
逆ポーランドって、逆光沢仕上げ、つまりつや消し仕上げのこと?
939デフォルトの名無しさん:2005/07/15(金) 20:08:44
>>911
人待ちで暇だったから遊んでみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/731.c
お前さんのテンプレないから内容はこっちで勝手に解釈したぞ
仕様が違ってもシラネ
940939:2005/07/15(金) 20:11:47
タブ使うと環境によってずれるの忘れてた(つA`)
941デフォルトの名無しさん:2005/07/15(金) 20:33:53
#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;
    }
  }
}
942デフォルトの名無しさん:2005/07/16(土) 01:22:27
>>844
もしかして844、プログラム設計とアルゴリズムって教科名かい?
943デフォルトの名無しさん:2005/07/16(土) 02:23:03
[1] 授業単元:情報工学演習C
[2] 問題文(含コード&リンク): 住所録を作り表示するプログラムを作成しなさい。
人数は任意とする。構造体を用い、キーボードから入力すること。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5
 [3.3] 言語:C
[4] 期限:7/19午前中
[5] 構造体の所なんですがよくわかりません。よろしくお願いします。
944デフォルトの名無しさん:2005/07/16(土) 03:15:49
945デフォルトの名無しさん:2005/07/16(土) 03:29:27
>>944
ちとまだ早いけど立てるの?立てないの?
946デフォルトの名無しさん:2005/07/16(土) 03:49:49
>>944
ありがとうございました。
どうやら問題を難しく解釈しすぎてたみたいです。
947デフォルトの名無しさん
オレは何度かスレ立てこころみてるんだが、スルーされる