暇な人がエレガントにC/C++の宿題片づけます 33代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
暇な人がエレガントにC/C++の宿題を片づけて見せます。
――【注意点】――――――――――――――――――――――
・使用する言語(C/C++)や環境(CUI/GUIなど)は必ず書きましょう。
・問題文は、ちゃんと解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式自体をあげ、どのような計算をするのか
・エラーは、その行とエラーの詳細を書きましょう。
エラーメッセージが出た場合はそのままコピーしてください。
・後になって問題につけたしをするのはやめましょう。
 解いてもらっている方に失礼になってしまいます。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

【歴代スレは>>2-10
2デフォルトの名無しさん:04/10/16 22:20:33
31代目: http://pc5.2ch.net/test/read.cgi/tech/1095075678/
30代目: http://pc5.2ch.net/test/read.cgi/tech/1091954342/
29代目: http://pc5.2ch.net/test/read.cgi/tech/1090765027/
28代目: http://pc5.2ch.net/test/read.cgi/tech/1089974839/
27代目: http://pc5.2ch.net/test/read.cgi/tech/1089448445/
26代目: http://pc5.2ch.net/test/read.cgi/tech/1088860889/
25代目: http://pc5.2ch.net/test/read.cgi/tech/1087929711/
24代目: http://pc5.2ch.net/test/read.cgi/tech/1086612317/
23代目: http://pc5.2ch.net/test/read.cgi/tech/1085149383/
22代目: http://pc5.2ch.net/test/read.cgi/tech/1083050221/
21代目: http://pc5.2ch.net/test/read.cgi/tech/1078157730/
20代目: http://pc5.2ch.net/test/read.cgi/tech/1075217631/
19代目: http://pc5.2ch.net/test/read.cgi/tech/1073566342/
18代目: http://pc5.2ch.net/test/read.cgi/tech/1071407728/
17代目: http://pc5.2ch.net/tech/kako/1070/10704/1070469896.html
16代目: http://pc5.2ch.net/tech/kako/1069/10698/1069837000.html
15代目: http://pc5.2ch.net/tech/kako/1068/10689/1068950713.html
14代目: http://pc5.2ch.net/tech/kako/1067/10671/1067175933.html
13代目: http://pc5.2ch.net/tech/kako/1064/10645/1064541405.html
12代目: http://pc5.2ch.net/tech/kako/1060/10607/1060706382.html
11代目: http://pc5.2ch.net/tech/kako/1058/10582/1058283913.html
10代目: http://pc5.2ch.net/tech/kako/1057/10570/1057070174.html
9代目: http://pc5.2ch.net/tech/kako/1055/10559/1055944101.html
8代目: http://pc5.2ch.net/tech/kako/1055/10550/1055056940.html
7代目: http://pc5.2ch.net/tech/kako/1053/10539/1053963794.html
6代目: http://pc5.2ch.net/tech/kako/1053/10530/1053045530.html
5代目: http://pc5.2ch.net/tech/kako/1051/10515/1051594046.html
4代目: http://pc5.2ch.net/tech/kako/1045/10450/1045074808.html
3代目: http://pc5.2ch.net/tech/kako/1041/10419/1041992392.html
2代目: http://pc3.2ch.net/tech/kako/1039/10397/1039772622.html
1代目: http://pc3.2ch.net/tech/kako/1038/10380/1038024989.html
3デフォルトの名無しさん:04/10/16 22:22:04
32代目は諸事情によりお見せできません。
どうかご了承ください。
4デフォルトの名無しさん:04/10/16 22:24:23
前スレが終わってからでも遅く無いのに
5デフォルトの名無しさん:04/10/16 22:25:14
【注意点追加】
・複雑なAAはスレが荒れたり問題を埋もれさせてしまう原因に
 なりますので、使用を控えてください。

【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:
6デフォルトの名無しさん:04/10/16 22:26:49
ダディクールがC/C++の宿題を片づけます 32代目
http://pc5.2ch.net/test/read.cgi/tech/1097592876/l50

↑使い切って、その時点でここ残っていれば移行すれば?
7デフォルトの名無しさん:04/10/16 22:26:57
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで/無期限 のいずれか
[5] その他の制限:

テンプレに沿って質問したほうが回答者も正確な情報をつかみやすくなります。
問題文はこう書いたほうが分かりやすいだろうとか自分で勝手に改変しないでください。
原文をそのまま忠実に書いてください。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8デフォルトの名無しさん:04/10/16 22:28:22
>>6
過去スレあさる奴が迷惑だろ?
あんなAAばっかの糞スレなんか
9デフォルトの名無しさん:04/10/16 22:31:26
安心しろ。過去スレあさる奴なんていない。
10デフォルトの名無しさん:04/10/16 22:34:10
>>8
AAばっか貼ってたのもあんたじゃないの?
11デフォルトの名無しさん:04/10/16 22:37:24
さぁ毎度お馴染みの最悪な空気です
つか、前1の影響引きずってるなー
12デフォルトの名無しさん:04/10/16 22:38:56
>>10
違う。
漏れは歴代スレの2-3でお世話になってた者
今では回答者側に回ってる。
ここのスレにお世話になったから変なAAでいっぱいになるのがつらかった。
だからこのスレたてた。
13デフォルトの名無しさん:04/10/16 22:39:05
今1=前1
だったりしてな
14デフォルトの名無しさん:04/10/16 22:40:12
ま、ガンバレ
俺はあっちが終わるまでは、重複に質問するようなのは無視する
15デフォルトの名無しさん:04/10/16 22:57:35
削除依頼しておく。
16デフォルトの名無しさん:04/10/16 23:00:40
>>15
それならついでに前スレのAAのレス削除依頼してきて
17デフォルトの名無しさん:04/10/16 23:04:24
こっちはその時(あっちを使い切ったとき)がくるまでじっくり寝かせておこう。
18デフォルトの名無しさん:04/10/16 23:20:17
             /ヽ       /ヽ
            / ヽ      / ヽ
  ______ /U ヽ___/  ヽ
  | ____ /   U    :::::::::::U:\
  | |       /|(●),   、(●)、.:::::::::::::::|
  | |       |   ,,ノ(、_, )ヽ、,, .U :::::::::::::::| なにこのスレ……
  | |      .|U  `-=ニ=- '  .::::::::::::U:::|
  | |       |    `ニニ´ U.....:::::::::::::::::/
  | |____ ヽ     .....:::::::::::::::::::::::<
  └___/ ̄ ̄      :::::::::::::::::::::::::|
  |\    |           :::::::::::::::::::::::|
  \ \  \___      ::::::
19NGワード:04/10/16 23:41:35
(●)
20デフォルトの名無しさん:04/10/16 23:52:24
             /ヽ       /ヽ
            / ヽ      / ヽ
  ______ /U ヽ___/  ヽ
  | ____ /   U    :::::::::::U:\
  | |       /|(○),   、(○)、.:::::::::::::::|
  | |       |   ,,ノ(、_, )ヽ、,, .U :::::::::::::::| なにこのスレ……
  | |      .|U  `-=ニ=- '  .::::::::::::U:::|
  | |       |    `ニニ´ U.....:::::::::::::::::/
  | |____ ヽ     .....:::::::::::::::::::::::<
  └___/ ̄ ̄      :::::::::::::::::::::::::|
  |\    |           :::::::::::::::::::::::|
  \ \  \___      ::::::
21NGワード:04/10/16 23:54:55
\((●|○)\)
22デフォルトの名無しさん:04/10/17 02:33:03
前スレタイよりはまし。
23デフォルトの名無しさん:04/10/17 02:42:21
ただ、感情にまかせてスレ立てするのはいただけない
気持ちはわかるが。
24デフォルトの名無しさん:04/10/17 12:14:06
Linax 2.4.23 SCHED.C を修正して FAIR TIME SCHEDULING にしなさい。
というものです。どうか、よろしくお願いします。
25デフォルトの名無しさん:04/10/17 12:16:04
あっ、間違いました。Fair Share Scheduling です。
すみません、よろしくお願いします。
26デフォルトの名無しさん:04/10/17 13:03:11
Linux 2.6.0 を修正してマイクロカーネルにしなさい.
というものです.どうかよろしくお願いします.
27デフォルトの名無しさん:04/10/17 23:22:45
>>26
良い課題に恵まれたんですね.いいなぁ.
GNU Hurd のソースとかは参考になるのかな?
28デフォルトの名無しさん:04/10/17 23:30:13
なんか凄いね。

会社で良い組み込み系OS探してんだが、
調べてる暇も無いので、完成したらパクらせて欲しい。
29デフォルトの名無しさん:04/10/18 05:19:32
    /\___/ヽ
   /''''''   '''''':::::::\     
  . |(●),   、(●)、.:| + >>26 全部自分でやりなさい。
  |   ,,ノ(、_, )ヽ、,, .::::|.    
.   |   `-=ニ=- ' .:::::::| +   
   \  `ニニ´  .:::::/  +  
,,.....イ.ヽヽ、ニ__ ーーノ゙-、    
:   |  '; \_____ ノ.| ヽ i   
    |  \/゙(__)\,|  i |
    >   ヽ. ハ  |   ||.
30デフォルトの名無しさん:04/10/19 13:32:14
>>26
既にそういうプロジェクトがあるようです.
http://research.nii.ac.jp/H2O/
31デフォルトの名無しさん:04/10/21 00:43:10
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:winXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限:特に無し

C言語初心者です。課題で迷っています。
strcmp関数(文字列の比較する関数)と同じ働きをする関数αを作りたいですがどのように作れば良いのか分かりません。教えて下さい。
ちなみに関数の作り方の構文は知っています。

3231:04/10/21 00:45:32
開発環境はMicrosoft Visual Studio .NET 2003
33デフォルトの名無しさん:04/10/21 00:45:44
>>31
関数の作り方の構文とは何だ。
ていうか、前スレ終わってから使えよ、ここを。
34デフォルトの名無しさん:04/10/21 10:41:35
>>31 動作確認もしとらんがこんなもんだろ。マルチやめれ。

int α( char* a, char* b )
{
while( *a && *b && *a == *b ) { a++; b++; }
return *a - *b;
}
35デフォルトの名無しさん:04/10/21 11:18:36
マルチなんかに答えてやるなよ
36デフォルトの名無しさん:04/10/21 11:25:20
まぁそうなんだが、誰か答えれば止めるだろうと...
37デフォルトの名無しさん:04/10/21 12:28:48
そうやって甘やかす香具師がいるから図に乗ってマルチすんだろが
38デフォルトの名無しさん:04/10/21 12:44:55
そうやって誰も答えないからさらにマルチするんだろが。

ま、素人のマナー違反にカリカリしなさんな。
39デフォルトの名無しさん:04/10/21 12:52:29
>>38
あっちでみんな答えてるだろうが。
お前のマナー違反をどうにかしろ馬鹿野郎
40デフォルトの名無しさん:04/10/21 14:11:16
↑あっちこっちにまともな回答がないから書いたわけだが...

不毛なのでもうやめ。逃げるにあらず。
41デフォルトの名無しさん:04/10/21 14:13:45
逃げやがった
42デフォルトの名無しさん:04/10/21 14:17:50
>>40
ちゃんと答え出てるのにな。ああ、お前が理解できないだけか。
逃げた馬鹿に何を言ってもしかたがないけど。
43デフォルトの名無しさん:04/10/21 14:21:55
ヘタレ野郎を追い詰めるスレはここですか?
44デフォルトの名無しさん:04/10/21 15:51:05
別板より誘導されたのでここで質問します。

[1] 授業単元:C言語
[2] 問題文(含コード&リンク):http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=126

[3] 環境
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):Microsoft Visual C++ 6.0
 [3.3] 言語:C
[4] 期限:10月22日まで

リンク先のプログラムはL x M 行列 A と M x N 行列 B の積 C(Cは L x N 行列)
を求めるプログラムですが、これを
「行列Bを、転置行列に変換してからAとの積を求める」プログラムにするには
どうしたらいいいか回答をお願いします。
45デフォルトの名無しさん:04/10/21 16:35:38
>>44
ていうか、前スレ終わってから使えよ、ここを。
46デフォルトの名無しさん:04/10/21 17:25:09
>>44
正方行列でなくても転置行列って定義できるのか?
というか題意の通り行と列をひっくり返したら正方行列でないと積が不可能になっちまう。
47デフォルトの名無しさん:04/10/21 21:10:36
>>46
..........................................................................
48デフォルトの名無しさん:04/10/21 21:50:17
>>47
何が言いたいのか低学歴なヲレにも分かるような表現をしてくれ
4944:04/10/22 00:49:36
行列Bは転置したあとに 必ずM x N 行列となると考えていいです。
50デフォルトの名無しさん:04/10/22 01:26:41
Bを転置する関数かいて放り込めばいいやん
それぐらいやれ
51デフォルトの名無しさん:04/10/25 18:25:51
すいません!よろしくお願いします!(赤、緑、青、白、黒を示すプログラム)
赤、緑、青の数値の中で

(1)まず青の数値の割合が20〜26%の時に白
(2)次に赤、緑、青のうちで最も割合の多い色を示し
(3)それ以外は黒
とするプログラムを作成願います。
自分はif文のただ羅列で行き詰ってしまったのでお手数ですが。
52デフォルトの名無しさん:04/10/25 18:46:37
>>51
マルチは放置
53デフォルトの名無しさん:04/10/25 20:18:42
>>36
>>38
早く答えてやれよ
出番だぜ
54デフォルトの名無しさん:04/10/25 20:55:35
>>51
RGB各プレーンを対象とするということか?
(1)はBプレーン以外は関係ないのか?
(2)は各プレーンのうち一番明るいプレーンがどれかということか?
(3)は(1)以外で(2)以外と解釈すると有り得ないがどういう意味か?
55デフォルトの名無しさん:04/10/25 21:32:25
>>54
(1)はBプレーン以外のものはなんでもいいんじゃない!
それから(2)と(3)は逆のプログラムすればいいと思うがそれにしてもムリそうだな!
56デフォルトの名無しさん:04/10/25 22:10:50
>>51
何をしたいのか全く分からん。そのif文だらけになった
自分で書いたコードをさらしてみよ。理解の一助になるかも知れん。
57デフォルトの名無しさん:04/10/25 22:14:02
そうやって甘やかす香具師がいるから図に乗ってマルチすんだろが
58デフォルトの名無しさん:04/10/25 22:18:05
ここって、甘やかすためのスレではなかったのですか?
59デフォルトの名無しさん:04/10/25 22:27:29
マルチする奴にやってはいけませんよと優しくささやくスレですが?
60デフォルトの名無しさん:04/10/26 00:09:56
エラストテネスのふるいで100までの素数を求める方法キボンヌ
61デフォルトの名無しさん:04/10/26 00:11:32
ていうか、前スレ終わってから使えよ、ここを。
62デフォルトの名無しさん:04/10/26 00:22:06
>>60
工夫という工夫、一切なし。
#include <iostream>
static const int PRIME_MAX = 100;
int main()
{
  int prime[PRIME_MAX + 1];
  for (int i = 2; i <= PRIME_MAX; ++i)
    prime[i] = 1;
  for (int i = 2; i <= PRIME_MAX; ++i)
  {
    int notprime = i;
    while ((notprime += i) <= PRIME_MAX)
      prime[notprime] = 0;
  }
  for (int i = 2; i <= PRIME_MAX; ++i)
    if (prime[i]) std::cout << i << ' ';
  std::cout << std::endl;
}
63デフォルトの名無しさん:04/10/26 00:22:47
て い う か 、 前 ス レ 終 わ っ て か ら 使 え よ 、 こ こ を 。
64デフォルトの名無しさん:04/10/26 00:39:36
つまり前スレ終わってからここを使えってことか?
65デフォルトの名無しさん:04/10/26 00:49:38
「ていうか」ってなんですか?
66デフォルトの名無しさん:04/10/26 00:53:22
もうこのスレ埋め立てするの?
67デフォルトの名無しさん:04/10/26 06:15:38
本当にまずいんです!よろしくお願いします!(赤、緑、青、白、黒を示すプログラム)
赤、緑、青の数値の中で

(1)まず青の数値の割合が20〜26%の時に白
(2)次に赤、緑、青のうちで最も割合の多い色を示し
(3)それ以外は黒
とするプログラムを作成願います。
自分はif文のただ羅列で行き詰ってしまったのでお手数ですが。

>>54
違います!

>>56
すいません。いやになって消してしまいました

>>57
どうかお願いします!
68デフォルトの名無しさん:04/10/26 08:41:42
>>60
サンクス!!繰り返しの仕方かなり参考になるわ。初心者でスマヌ。
69デフォルトの名無しさん:04/10/26 08:55:01
だから何を言いたいのかまったく分からないと書いているだろうに。
こんなんでいいんかいな。
#include <stdio.h>
int max(double x[3]){
  return x[0] < x[1] && x[1] < x[2] ? 2 : x[0] < x[1] && x[1] > x[2] ? 1 : x[0] > x[1] && x[1] > x[2] ? 0 : x[0] < x[2] ? 2 : 0;
}
int main(void){
  double color[3];
  const char* colorname[3] = {"赤", "緑", "青"};
  printf("%s(%%)?:", colorname[0]);
  scanf("%lf", &color[0]);
  printf("%s(%%)?:", colorname[1]);
  scanf("%lf", &color[1]);
  printf("%s(%%)?:", colorname[2]);
  scanf("%lf", &color[2]);
  if (color[0] < 0.0 || 100.0 < color[0] ||
      color[1] < 0.0 || 100.0 < color[1] ||
      color[2] < 0.0 || 100.0 < color[2]) {
    printf("Error!:0%未満、または100%以上のものがあります!");
    return 1;
  }
  if (20.0 <= color[2] && color[2] <= 26.0) {
    printf("白\n");
    printf("最大のものは%s\n", colorname[max(color)]);
  }
  else
    printf("黒");
  return 0;
}
7051:04/10/26 10:06:12
>>67
誰だよ!俺のフリして書き込みしてるアホは!
>>69
どうもありがとうございました、ご恩に尽きます。
71デフォルトの名無しさん:04/10/26 11:08:54
恩に尽きちゃうのか。
72デフォルトの名無しさん:04/10/27 10:35:19
              ,,;:-‐''"⌒ ̄";;;;;;;⌒ ̄"ヾ、
              ='-‐''"/,::´ /::::::::::::::::ヽ :::`ヾ
              ァ'´.,:´/.::::::/i:: :::::. :; :::丶 ::::::ヾ、
             / / ::/.:  { l ヽ_,,,_`、 .:`、ヽ:::::::ヽ`
              {::/ァ' .i..:/i.::{::{.ヾ~::i:ヾ丶::::::.::::i:::::::::}
          、_ノ'.{ .::::{-{‐{:;iヾ{ '"T ヾ il.|'.:::.::}::::::::ト、
              l.:il :lヽi'"ヽ`、ヽ .l,'゚i!'〉リi}::i:::::l:::ノ::ハヽ、_
麻衣子は        {:| i .} } {'゚}.   ┴-' i}:ノl::::}::i:::::. l`ー"
 お風呂入るから   {、.ヾ-i ー´、    〃 ノ:::ノ::ノ::}:: ::. }
  ちょっと待っててね   ノト " っ   、_,;-':.:'/:::::::l: : l
                {:l:::`i::..、   ._.,.;:イシ:::/::ノ   l、
                iんV´iノノ` ツi iリノツ-‐''"  :: : ヽ 、
             _,-.r‐i {,-ト .i_,,ノ-‐-―/ : : :::ノ :::::.  } `、
            ( l ./ /~   /     .ノ/:::::/:  ::::::: : :l
           (.._,,iツvV   .,'     ,'::{:::;:::::   :::::::: :::i
          `ー7/::::{. '"~/     {;;;li/::::l::::::  :::::::::::::{
            {:l(ァ'  ,, '      l::;;|l/:::{i::::: : ::: :::: ::::l
            リァ' .,  ´       /メ{ {l:::/ {:::l:. :  :  ::::|
           /, ´      ノ // l {iメ {:::|i:: :    :::l
          /./       /::'/:/  {:i:|イ{ i::l::  i    ::}
          i' ´      /::::::/::/    l .:|::::|:l:::l : l :   ::l
          {      , イ´  /::;/  .ィ´:| }::::l:i::::i:i:. .| : :.  ::l
            i、__,, ィ i::::l  /:,:::l //l::::l .}::::li:::::l l::::} i: i  :::l
73デフォルトの名無しさん:04/10/27 15:00:07
>>72
( ゚Д゚)ゴルァ!!
こっちきちゃダメ。
74デフォルトの名無しさん:04/10/29 03:16:04
xが整数であるかどうかを,if文で判別したいんですが,どうすればいいんかな?
75デフォルトの名無しさん:04/10/29 03:47:41
doubleのxのことか?
76デフォルトの名無しさん:04/10/29 10:35:47
xは文字列ではないかと超予想
77デフォルトの名無しさん:04/10/29 10:46:54
>>76
エスパーキタ━━━━━━(゚∀゚)━━━━━━ !!!!!
7874:04/10/29 15:54:42
>>75
そう,xはdoubleっす
79デフォルトの名無しさん:04/10/29 16:09:54
>>74
if(x == (int)x)
で、望みの結果が得られるかもしれない。
80デフォルトの名無しさん:04/10/29 16:19:33
   / ̄ ̄ ̄ ̄ ̄ ミ
  /   ,――――-ミ
 /  /  /   \ |
 |  /   ,(・) (・) |
  (6       つ  |
  |      ___  |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |      /__/ /  < なわけねぇだろ!
/|         /\   \__________
81デフォルトの名無しさん:04/10/29 16:28:13
>>80
なんで?
82デフォルトの名無しさん:04/10/29 16:32:50
望みの結果がintに収まる範囲でのみ、で桶なら
83デフォルトの名無しさん:04/10/29 16:44:10
(x+0.5)(int)
四捨五入な。
8474:04/10/29 16:49:04
>>79
さんくす
85デフォルトの名無しさん:04/10/29 17:05:00
ファイルを読み込むときにその前にscanfで入力した値に
依存するファイルを読み込む、ってことはできるんでしょうか?
scanf("%d",&n);
fp=fopen("node3.dat","r");
この3をnによって変えたいのですがやり方がわかりません。
86デフォルトの名無しさん:04/10/29 17:05:42
>>85
できる
87デフォルトの名無しさん:04/10/29 17:06:57
>>85
char filename[100];
sprintf(filename, "node%d.dat", n);
fp = fopen(filename, "r");
88デフォルトの名無しさん:04/10/29 17:07:03
>>86
すみません、できれば教えていただきたいのですが・・・
89デフォルトの名無しさん:04/10/29 17:07:44
>>87
ありがとうございました
90デフォルトの名無しさん :04/10/30 02:03:56
依頼お願いします。
ある領域内に長方形が描画されている(入力画像として読み込み)として、
その長方形で平行な線分どうし(縦横各一組)をペアリングして検出する
プログラムをVC++で作りたいのですが、どのような記述にすればよいで
しょうか。
結果の表示方法は、平行だということが言えている様ならどんな感じでも
大丈夫です。どなたか知恵を貸して下さい。
91デフォルトの名無しさん:04/10/30 07:10:46
edgeの抽出は終わってて辺の直線のベクトルとかは既に得られてると考えていいの?
92デフォルトの名無しさん:04/10/30 09:40:07
>>90
  ■■■
  ■■■
こういう画像があったら、
  │
─┴─┬─
     │
微分するとこうなる。
  ↑  ↑
ここに注目すればペアが得られる。写真などの場合はノイズに注意。
93デフォルトの名無しさん:04/10/30 10:55:46

こんなのも
94デフォルトの名無しさん:04/10/30 13:50:30
質問なのですが
#defineで指定している定数値があるのですが
それを外部のファイルから数値を読み込んで設定する方式に変えたいのですが
どのように書けばいいでしょう?

95デフォルトの名無しさん:04/10/30 13:59:54
Win32APIのInterlocked〜とCriticalSectionだけを使って同期を取り、2つのスレッドを交互に実行する方法はありますか?ヒントだけでもお願いします。
96デフォルトの名無しさん:04/10/30 15:10:01
n人の成績データを入力して、合計、平均、平均との差を出力するプログラムを
書いてるんですが、もう少しきれいなソースになる気がするんですが、どう変更すればいいでしょうか?

#include<stdio.h>
#define N 10

int main(void)
{
int ten[N],sum,ave,i;
printf("点数データを%d件入力してください\n->",N);
scanf("%d",&ten[0]);
sum=ave=ten[0];

for(i=1;i<N;i++){
printf("->");
scanf("%d",&ten[i]);
ave=(ave+ten[i])/2;
sum+=ten[i];
}

printf(" 点数 平均との差\n");
printf("----------------\n");
for(i=0;i<N;i++){
printf("%3d\t%3d\n",ten[i],ten[i]-ave);
}
printf("----------------\n");
printf("合計:%4d : 平均:%3d\n",sum,ave);
return 0;
}
97デフォルトの名無しさん:04/10/30 15:15:00
>>96
平均の式が間違い
まず算数からやり直せ
9896:04/10/30 15:29:03
>>97
int sum=0

for(i=0;i<N;i++){
printf("->");
scanf("%d",&ten[i]);
sum+=ten[i]
}

ave=ten/N;

こんな感じに変更すればいいでしょうか?
99デフォルトの名無しさん:04/10/30 15:34:32
#include<stdio.h>
#define N 10

int main(void)
{
  int ten[N], sum, ave, i;
  printf("点数データを%d件入力してください", N);
  for (i = 0; i < N; i++) {
    puts("->");
    scanf("%d", &ten[i]);
    sum += ten[i];
  }
  ave = sum / N;

  puts(" 点数 平均との差");
  puts("----------------");
  for(i = 0; i < N; i++) {
    printf("%3d\t%3d\n", ten[i], ten[i] - ave);
  }
  puts("----------------");
  printf("合計:%4d : 平均:%3d\n", sum, ave);
  return 0;
}
100从*・ 。.・) ◆SayuminPM. :04/10/30 17:25:08
100
10190:04/10/30 18:06:17
>>91-92
返信遅れてすみません。
edgeの抽出は終わってる状態でかまいません。もし分かるなら
教えていただけませんでしょうか。
102デフォルトの名無しさん:04/10/30 18:18:35
Cで自然数a,bの約数を全て表示するプログラムを教えてください。
103デフォルトの名無しさん:04/10/30 18:26:45
>>102
公約数じゃなくてそれぞれの約数でいいのか?
104デフォルトの名無しさん:04/10/30 18:37:04
工夫なし
#include <stdio.h>

int main(void)
{
int a, b, x, i;

printf("a b "); scanf("%d %d", &a, &b);
if (a < 0 || b < 0) return 1;
x = (a - b) ? (b) : (a);
for (i = 1; i <= x; i++)
if(a % i == 0 && b % i == 0) printf("%d\n", i);

return 0;
}
105デフォルトの名無しさん:04/10/30 18:43:01
一応
#include <stdio.h>

void f(int x)
{
int i;
for (i = 1; i <= x; i++)
if(x % i == 0) printf("%3d ", i);
puts("");
}

int main(void)
{
int a, b;

printf("a b "); scanf("%d %d", &a, &b);
if (a < 0 || b < 0) return 1;

puts("aの約数"); f(a);
puts("bの約数"); f(b);

return 0;
}
106デフォルトの名無しさん:04/10/30 18:47:02
あ、まちがえてた。
まあいいや、勝手にしる。
107デフォルトの名無しさん:04/10/30 18:54:30
>>102
公約数なら、、 と思って作ったら表示してねぇ。まぁいいか。

struct int_list{
  int value;
  int_list next*;
}
int_list* kouyakusuu(int a,int b){
  if(a==0 || b==0){
    return null;
  }
  int_list result* = new int_list;
  int_list nowList* = result;
  int minArg = a<b?a:b;
  for(int i=1;i <= minArg;i++){
    if(a%i==0 && b%i==0){
      (*nowList).next = new int_list;
      nowList = (*nowList).next;
      (*nowList).value=i;
    }
  }
  return (*result).next;
}
108102:04/10/30 18:59:45
>>103-107
すいません、ありがとうございます。
公約数って書き忘れてました。
109デフォルトの名無しさん:04/10/30 19:00:31
公約数とはどこにも書いてないからなあ
110107:04/10/30 19:10:30
>>107 に、これつなげれば動くかな。

#include <stdio.h>

void main(char** args){
  int a,b;
  scanf("%d %d", &a, &b);
  int_list result* = kouyakusuu(a,b);
  while(result != null){
    printf("%d\n", (*result).value);
    result = (*result).next;
  }
}
111デフォルトの名無しさん:04/10/30 19:19:08
#include <stdio.h>

int main(void)
{
    int a = 234, b = 354, i;
    for(i = 1; i <= a && i <= b; i++)
        if(a % i == 0 && b % i == 0)
            printf("%d\n", i);
    return 0;
}
112ジョン:04/10/30 23:33:00
急ぎなんですけど、誰か助けてください。
学校で課題が出たんですけど、さっぱり分かりません。
ボイヤームーア法を使って文字列の探索するプログラムを作れという課題です。
下にプログラム(未完成)を載せておきます。これを改良して作るのらしいのですが・・・。
どなたかお願いします。
#include <stdio.h> #include <string.h> #define MAXCHR1 1000 #define MAXCHR2 256
int main(void){
char filename[MAXCHR2], ex[MAXCHR1], strg[MAXCHR2];
FILE *fp;
printf("Input filename.\n");
fgets(filename, MAXCHR2, stdin);
printf("Input search string.\n");
fgets(strg, MAXCHR2, stdin);
if((fp = fopen(filename, "r")) == NULL){
printf("read open error!");
return(-1);
while(fgets(ex, MAXCHR1, fp) != NULL){
/* ここでボイヤームーア法を使う */ }
fclose(fp);
return (0);
113デフォルトの名無しさん:04/10/30 23:36:59
>>112
ちょっとまってろ。めしおごれよ。
114デフォルトの名無しさん:04/10/30 23:38:45
急ぎ?
今日土曜だし、明日日曜だし、早くても明後日までだろ?
115ジョン:04/10/30 23:39:59
そうですね。あさってまでなら何とかなりそうです。
お願いします。
116デフォルトの名無しさん:04/10/31 02:53:12
知ってるが
      お前の態度が
                気に入らない
117r:04/10/31 12:46:04
BMサーチ

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1027870433_319/bms.c

うそ。インチキ。
インチキなのは、INCHIKI を含む行です。
つか、どうやるんだろう。いくつ足し算をするんだろう。
118デフォルトの名無しさん:04/10/31 13:51:42
C++ の宿題なんですが
入力した文字を逆転表示して表示させるにはどうしればいいのでしょうか・・・?


こんにちは

はちにんこ

と言った具合です。

119デフォルトの名無しさん:04/10/31 13:58:38
for(i=0; i<sizeof(str); i++)
{
printf("%c",str[(sizeof(str)-1)-i]);
}
printf("\n");
120デフォルトの名無しさん:04/10/31 14:01:44
sizeofでいいのかー?
121デフォルトの名無しさん:04/10/31 14:03:56
>>118
1-tape TuringMachineのプログラムでもいいですか?
122デフォルトの名無しさん:04/10/31 14:05:10
>>121
お願いします。
123デフォルトの名無しさん:04/10/31 14:07:11
こんにちは
はマルチバイトだよ
124デフォルトの名無しさん:04/10/31 14:07:36
#include <stdio.h>
void main(){
  char str[256];
  gets(str);
  for(int i=strlen(str)-1;i;i--){
    printf("%c",str[i]);
  }
}
125デフォルトの名無しさん:04/10/31 14:16:25
>>124
error C2065: 'strlen' : 定義されていない識別子です。とでました・・・
126デフォルトの名無しさん:04/10/31 14:21:31
ハハハ・・・
strlenはstring.hにあるの忘れてた上にマルチバイトも無視するとはな・・・

#include <string.h>
127デフォルトの名無しさん:04/10/31 14:25:08
>>126
今度は出来ました。
ありがとうございました。
128デフォルトの名無しさん:04/10/31 14:27:07
//ちょっと訂正。いまだマルチバイト無視。
#include <stdio.h>
#include <string.h>
void main(void){
  char[] str = new char[256];
  gets(str);
  int i=strlen(str);
  while(i){
    i--;
    printf("%c",str[i]);
  }
}
129デフォルトの名無しさん:04/10/31 14:37:27
>>128

\test2.cpp(5) : warning C4091: 空白の宣言が見つかりました。
\test2.cpp(5) : error C2143: 構文エラー : ';' が '[' の前に必要です。
\test2.cpp(5) : error C2143: 構文エラー : ';' が '[' の前に必要です。
\test2.cpp(6) : error C2065: 'str' : 定義されていない識別子です。
\test2.cpp(10) : error C2109: 配列または、ポインタでない変数に添字が使われました。
cl.exe の実行エラー

test2.exe - エラー 4、警告 1

ってなります・・・
130デフォルトの名無しさん:04/10/31 14:42:53
CコンパイラじゃなくてC++コンパイラじゃなきゃいやん。
131デフォルトの名無しさん:04/10/31 14:43:05
(σ゚∀゚)σgets!!
132デフォルトの名無しさん:04/10/31 14:45:36
>>130
コンパイラは Microsoft Visual C++ 6.0使ってます。
133デフォルトの名無しさん:04/10/31 14:45:36
あらま、、、 C++じゃない環境で動作確認したのがまずかったか・

char[] str = new char[256];
じゃなくて
char str[256];

だな。
134デフォルトの名無しさん:04/10/31 14:49:25
>>133
今度はOKでした。
しかし DOSでこんにちはと打つと

こんにちは
ヘちにんこ1ress any key to continue

となってしまいます・・・
135デフォルトの名無しさん:04/10/31 15:08:44
getsしたあと'\n'のあとに'\0'を入れなきゃだめな希ガス。
136デフォルトの名無しさん:04/10/31 15:23:24
再度依頼お願いします。
ある領域内に長方形が描画されている(入力画像として読み込み)として、
その長方形で平行な線分どうし(縦横各一組)をペアリングして検出する
プログラムをVC++で作りたいのですが、どのような記述にすればよいで
しょうか。
結果の表示方法は、平行だということが言えている様ならどんな感じでも
大丈夫です。edgeの抽出は終わってる状態として結構です。
どなたか知恵を貸して下さい。
137デフォルトの名無しさん:04/10/31 15:28:14
本当に宿題か?
138デフォルトの名無しさん:04/10/31 15:31:23
宿題じゃなくてもいいんじゃない?
139r:04/10/31 15:53:37
class Line {
public:
    double GetX1() const;
    double GetY1() const;
    double GetX2() const;
    double GetY2() const;
};
こんなインタフェースが用意されていて、
全部のLineはvector<Line> lines;に入っているとする。

こんなクラスを用意する
struct K {
    Line* line;
    double a;
    Katamuki( const Line* line ) {
    this.line = line;
    a = ( line -> getX1() - line -> getX2() )/ ( line -> getY1() - line -> getY2() );
    }
};
あとは、
vector<K> ks;
for( ... )
    katamuki.push_back( lines[i] );
とし、ks を a の値でソートし、
値の近い物を平行なラインとすればいい。
aが無限大になりそうな場合の処理は、まあ、なんとか考えて。
140デフォルトの名無しさん:04/10/31 15:58:06
>>139
せめてatan2とか使えよ。
141デフォルトの名無しさん:04/10/31 17:07:00
scanfでAかBを入力させて、そのあとifを使って分岐させて続きを作りたいのですが、
char x,A,B;
printf("AかBを入力してください>>");
scanf("%c",&x);
if(x == A)
{

}
if(x == B)
{

}
こんな感じにしましたが、ifの中身から実行されません。scanfで表示させた文字を
if文に反映させるにはどうすればいいんでしょうか?言語はCです。
142デフォルトの名無しさん:04/10/31 17:13:00
>>141
char x,A,B;
printf("AかBを入力してください>>");
scanf("%c",&x);
A = ’A’;
B = ’B’;
if(x == A)
{

}
if(x == B)
{

}
143デフォルトの名無しさん:04/10/31 17:21:35
>>142
できました。どうもありがとうございます。
144デフォルトの名無しさん:04/10/31 18:55:03
>>112
ここにソースある。これコピペでOKだ。
http://www-igm.univ-mlv.fr/~lecroq/string/node14.html#SECTION00140
145デフォルトの名無しさん:04/10/31 19:27:28
…テンプレ修正きぼん

旧: ・計算問題は必ず数式自体をあげ、どのような計算をするのか
新: ・計算問題、アルゴリズム問題では必ず数式や手順を示し、詳しい説明を付記してください。
146デフォルトの名無しさん:04/10/31 19:30:33
>>145
そんな事が書けるようだったら質問なんかするわけないじゃん
147118:04/10/31 19:47:17
誰か教えてください・・・
148デフォルトの名無しさん:04/10/31 19:49:31
/*
>>118
文字反転プログラム(Shift-JIS)
*/
#include<stdio.h>

#define SIZE   256

void    r_put(unsigned char* p) {
    if (*p == '\0')
        return;
    
    if (((0x80<p[0]) && (p[0]<0xa0)) || ((0xe0<=p[0]) && (p[0]<0xf0))) {
        r_put(p+2);
        putchar(p[0]);
        putchar(p[1]);
    } else {
        r_put(p+1);
        putchar(p[0]);
    }
}

int     main() {
    unsigned char    buff[SIZE];
    
    printf("文字列を入力してください\n");
    scanf ("%s", buff);
    r_put (buff);
    
    return 0;
}
149118:04/10/31 20:04:20
>>148
なんとお礼を申し上げたらいいものか・・・
完璧です!
ありがとうございました。
150ジョン:04/10/31 20:31:57
>>144
ありがとうございます。でも、コンパイル時にエラーがでます・・・。
151デフォルトの名無しさん:04/10/31 20:35:53
>>148
「хavを入力すると正しく動きません。
152デフォルトの名無しさん:04/10/31 20:57:30
>>150
ソースの先頭に
#include <stdio.h>
#define ASIZE 256 /* 256文字種(asciiだけでいいなら128?) */
#define XSIZE 100 /* 検索文字列の最大長かな(動的確保するなら不要) */
#define OUTPUT(x)printf("%d\n", (x))
#define MAX(a, b)(a) > (b) ? (a) : (b)
でもつけとけ。
153ジョン:04/10/31 21:14:58
>>152
#define MAX(a, b)(a) > (b) ? (a) : (b)
の?っていうのはどういうものですか?
154デフォルトの名無しさん:04/10/31 21:18:20
if(a>b)
return b;
else
return a;
を総画
155152:04/10/31 21:22:46
あー、小修正。
#define OUTPUT(x) printf("%d\n", (x)) /* 開始位置の出力(0オリジン) */
#define MAX(a, b) ((a) > (b) ? (a) : (b)) /* 大きいほうの数値を得るよくあるマクロ */
156デフォルトの名無しさん:04/10/31 21:31:49
どうしてもわかりません。どなたかご教授ください。おねがいします!
f(x)=exp(-x^2)-sinx=0を2分法で根を求めるプログラムを作成せよ。
・初期値a,bをそれぞれ1,0とし、収束判定値eを5*10^-7とすること。
・コマンドライン引数として「-k」を与えると計算量を表示すること。
・計算結果はファイルに保存できるようにすること。
(実行例1)
C:\....\C>nibunpou
a=1
b=0
e=5E-7

出力ファイル名を入力してください。 > test.txt
c  n
----------------
1  0.5000000
2  0.7500000
3  0.6250000
4  0.6875000
5  0.6562500



20  0.6805983
(実行例2)
C:\....\C>nibunpou -k
a=1
b=0
e=5E-7

計算量は20回です。
157デフォルトの名無しさん:04/10/31 21:44:04
言語はCです。お願いします。
158デフォルトの名無しさん:04/10/31 21:47:41
>>156
どこがどう判らない?
全部丸ごと一分たりとも判らないなら死ね。
159デフォルトの名無しさん:04/10/31 21:51:44
>>118
#include <locale>
#include <string>
#include <list>
#include <iostream>

int main() {
std::locale::global(std::locale("japanese"));
std::wstring wstr;
std::wcin >> wstr;
std::list<wchar_t> wclst(wstr.begin(), wstr.end());
wclst.reverse();
wstr.assign(wclst.begin(), wclst.end());
std::wcout<< wstr << std::endl;
}
160デフォルトの名無しさん:04/10/31 22:42:58
>>156
#include <stdio.h>
#include <assert.h>
#include <math.h>
#include <string.h>
#define func(x) (exp(-pow((x),2))-sin(x))
int main(int argc, char **argv) {
double low=0, mid, high=1, ret;
double e = 5 * pow(10,-7);
int count = 0;

assert((func(low)<0&&func(high)>0) || (func(low)>0&&func(high)<0));
for (;;) {
count++;
mid=(low+high)/2;
if (fabs(ret=func(mid))<e)
break;
if (ret>0)
low = mid;
else
high = mid;
}
if (argc==2 && strcmp(argv[1],"-k")==0)
printf("%d times, ans: %f\n",count,mid);
else
printf("ans: %f\n",mid);
return 0;
}
完全に仕様には沿ってないけど、こんなもんでどう?
161デフォルトの名無しさん:04/10/31 23:13:25
どうでもいいこと気にしてみたり。
#define func(x) (exp(-(x)*(x))-sin(x))
double e = 5e-7;
162デフォルトの名無しさん:04/10/31 23:38:17
163デフォルトの名無しさん:04/10/31 23:46:36
>double e = 5e-7;
完全に忘れてたよ(;´Д`)
164156:04/10/31 23:52:48
>>160,>>161,>>162
丁寧にお答えいただき非常に助かりました。
ありがとうございます!
165デフォルトの名無しさん:04/11/01 06:10:42
ここって大学の入試問題のプログラムとか面倒見てくれるの?
海外向け携帯電話の英文入力インターフェース作ってるんだけど
今日の昼までの期限なんですが未だ出来ておらず…
自宅受験なんですがカンニングではなく情報収集力のテストもかねられてるっぽいんで
ttps://www.52school.com/rits/ans_menu.jsp
とりあえず問題見て感想ぷりーず
166デフォルトの名無しさん:04/11/01 06:56:56
↑みれない
167デフォルトの名無しさん:04/11/01 07:17:35
↑へんなsはいってるぞ
ttp://www.52school.com/rits/ans_menu.jsp
168デフォルトの名無しさん:04/11/01 07:24:21
おもしろそうだけど今日の昼までにはさすがに無理。
3日くらいほしいな。。
169165:04/11/01 07:31:26
>>168
独創的なのを作ろうとして*ボタンを切り替えボタンにして、
キーボードのQWERTY配列をキーボード左から3×3マスずつカットして3分割したのを
*ボタンで切り替えてうつって方式やりたいんだけど
切り替えボタンのプログラムがわからないっぽ
170165:04/11/01 07:36:37
キーボードの3×3カットの意味わかります?
こゆことです
パターン1

  1ボタン q 2ボタン w 3ボタン e

  4ボタン a 5ボタン s 6ボタン d

  7ボタン z 8ボタン x 9ボタン c
パターン2

1ボタン r 2ボタン t/ 3ボタン y

4ボタン f 5ボタン g 6ボタン h

7ボタン v 8ボタン b 9ボタン n
パターン3 

1ボタン u 2ボタン i 3ボタン o

4ボタン j 5ボタン k 6ボタン l

7ボタン m 8ボタン p 9ボタン 記号
171デフォルトの名無しさん:04/11/01 07:42:05
マルチすんなボケ
172デフォルトの名無しさん:04/11/01 07:49:06
>>165
オオ同じ穴の狢よw
ところで、オレはオーソドックスにToUpperを使って小文字を大文字に変換するプログラムを作ろうと思ってるんだけど

else if(SensePressedDuration(2) == LONG){//強く押された時
if (status == 10 ){//直前に入力された文字が10[a]なら
DeleteLetter();//[a]を削除し
DisplayLetter(ToUpper(10));     //大文字の[A]に変換、表示し ←ここがかなり間違ってる臭い・・
status = -1;//文字を確定する
}
でいのでしょうか・・・教えて偉い人・・・
173デフォルトの名無しさん:04/11/01 07:55:30
>>172
終わりそう?
俺取扱説明書で死にそう。2000字もいかね
創意工夫点も1000字もいかねw
174デフォルトの名無しさん:04/11/01 07:57:03
質問です。
配列に格納された文字列を1文字ずつ表示する関数。

void put_st(const char str[])
{
unsigned i=0;

while(str[i])
putchar(str[i++]);
}

これをprintf関数を用いるとコンパイルは出来るのですが、
実行途中でエラーがでます。
printf("%s",str[i++]);

なぜでしょうか?
どう直したらいいのでしょうか?

おねがいします。
175173:04/11/01 08:00:27
>>172
else if(SensePressedDuration(2) == LONG){//強く押された時
ってPressedDurationは長さのやつやのにコメントが「長く」じゃなくて「強く」
になってんの?
176デフォルトの名無しさん:04/11/01 08:02:06
>>169
配列とかでパターンごとのマップで持つくっといて、
'*'が押されたらマップを切り替えるようなものを作ってみたら?
177デフォルトの名無しさん:04/11/01 08:07:15
>>165
マルチじゃねぇか。消えろ。

>>174
%sってなんだよ。
178デフォルトの名無しさん:04/11/01 08:10:29
%sは文字列。この場合は%c。
179デフォルトの名無しさん:04/11/01 08:10:39
>>176
アドバイスさんくすです。
それ考えてたんですが。パターンごとのボタン表示のプログラム(今は3つ繋げられないんでパターンごとに保存してます)
はできているんですが、マップとしてくくるためにどんなプログラム使えばよろしいでしょうか?
180174:04/11/01 08:17:11
みなさんどうもありがとうございましたm(. .)m
すっきりしました。
181デフォルトの名無しさん:04/11/01 08:24:15
>174

printf("%c",str[i++]);
じゃないの?あるいは
printf("%s",str+i);i++;
182デフォルトの名無しさん:04/11/01 08:40:10
ランレングス符号化において、
効率よく圧縮を行う方法はどのようなものがありますか?

183デフォルトの名無しさん:04/11/01 09:01:22
>>173
こっちに書き込むときに間違ってたw
本文は確かめたけどちゃんと短く長くになってた・・
取り扱い説明書は、いろんな所のマニュアルからひっぱってくればいいとおもうよ
創意工夫は・・・むずいw
int SensePressedDuration(int ButtonNum)のくだりは合ってると思う
int ToUpper(int LetterNum)の使い方がちょっとわからなくて・・・
185デフォルトの名無しさん:04/11/01 09:06:22
>>183
てか海外向けだから説明書は英語じゃなくていいのか?w
186デフォルトの名無しさん:04/11/01 10:41:43
>>182
ランレングス法の問題点は、ランダムな文字列を符号化する場合
かえってサイズを大きくしてしまうことがある
そこで 「ここからn文字先までは符号化をしない――」 
ような情報を付加すれば、極端な膨張をおこさずに効率よく圧縮できる。
187デフォルトの名無しさん:04/11/01 11:07:26
C言語:分割コンパイルの宿題

2つの値(実数)をキーボードから入力し、
それぞれ以下のことを行う関数を作成し画面に表示するソースコードを記述しなさい。
ただし、main()関数と以下の関数は別ファイルに記述し、ヘッダファイルmp用いること。
-@加算 A減算 B乗算 C除算
-D大きいほうを出力 E小さいほうを出力

よろしくお願いします。
188デフォルトの名無しさん:04/11/01 11:08:21
誤字です、すいません
mp→も
189デフォルトの名無しさん:04/11/01 11:36:57
>>185
もしそうだとしたら絶望的だ・・w
190デフォルトの名無しさん:04/11/01 12:02:24
>>189
そんなときはExcite翻訳で。
#事後チェックを忘れずにw
191デフォルトの名無しさん:04/11/01 12:30:29
エキサイト翻訳を使うのは初心者。
漏れみたい玄人は暗記パンを使う。
192デフォルトの名無しさん:04/11/01 12:51:53
人の宿題をやってあげるなんて・・・。
なんていい人たちだ・・
193デフォルトの名無しさん:04/11/01 13:11:25
教えたがり人種
194デフォルトの名無しさん:04/11/01 13:29:56
CやC++のスレで宿題教えてと書くと邪魔だからこの隔離スレがあるのだよ
195デフォルトの名無しさん:04/11/01 14:45:36
そしてスルーされる187
196デフォルトの名無しさん:04/11/01 15:29:07
>>187
//main.c
#include <stdio.h>
#include <stdlib.h>
#include "calc.h"
int main() {
  char Buffer[128];
  double Num[2];
  int i;
  for (i = 0; i < 2; i++) {
    printf("%dつめの数:", i + 1);
    fgets(Buffer, sizeof Buffer, stdin);
    Num[i] = atof(Buffer);
  }
  Add(Num);
  Sub(Num);
  Mul(Num);
  Div(Num);
  Max(Num);
  Min(Num);
  return 0;
}
197デフォルトの名無しさん:04/11/01 15:30:34
//calc.c
#include <stdio.h>
#include "calc.h"

void Add(double d[]) {
  printf("加算:%f\n", d[0] + d[1]);
}

void Sub(double d[]) {
  printf("減算:%f\n", d[0] - d[1]);
}

void Mul(double d[]) {
  printf("乗算:%f\n", d[0] * d[1]);
}

void Div(double d[]) {
  printf("除算:%f\n", d[0] / d[1]);
}

void Max(double d[]) {
  printf("最大値:%f\n", d[0] > d[1] ? d[0] : d[1]);
}

void Min(double d[]) {
  printf("最小値:%f\n", d[0] < d[1] ? d[0] : d[1]);
}
198デフォルトの名無しさん:04/11/01 15:31:22
//calc.h
void Add(double []);
void Sub(double []);
void Mul(double []);
void Div(double []);
void Max(double []);
void Min(double []);
199デフォルトの名無しさん:04/11/01 16:24:46
>>197
0除算チェックは?
200デフォルトの名無しさん:04/11/01 16:30:18
どうすべきか指定がないから、対応しようがないわな
201Cの課題:04/11/01 17:40:46
#include <stdio.h>
int gi;
void main(void)
{
int i,gi=0;
void count();
printf("\t gi\t ai\t si\n");
for(i=0; i<3; i++){
count();
gi=gi+1;
printf("main()\t gi= %d\n",gi);
}}
void count(void)
{
int i, ai=0;
static int si;
for(i=0; i<3; i++){
printf("count()\t gi= %d\t ai=%d\t si=%d\n",gi,ai,si);
ai =ai+1;
gi =gi+1;
si =si+1;
}}
(1)以上のプログラムを実行し,表示結果を説明せよ。
また,main()の中と外で変数名giを誤って重複使用している。
この場合,コンピュータは重複した変数をどう扱ってると考えられるか。
(2)変数宣言のところで,自動変数のgiやaiを0に初期化しているが,
初期化を行わないとどうなるか。
なんだかよく分からないので、どなたか説明して下さい!お願いします。


202デフォルトの名無しさん:04/11/01 18:15:59
(1)count関数を呼び、グローバル変数gi,自動変数ai,静的変数siを表示し、
  それぞれ+1する。これを3回繰り返しcount関数から戻る。
  自動変数giを+1して表示する。
  main関数内ではこの、「count関数を呼ぶ,自動変数giを+1して表示」を3回繰り返す。
  main関数内では、giは自動変数としてグローバル変数giとは別に扱われる。

(2)自動変数を初期化しないと、変数の内容は不定(なにが入っているか分からない)
  で開始される。
203デフォルトの名無しさん:04/11/01 18:36:30
#include <stdio.h>
#defineVSIZE 256
#defineHSIZE 256
int im[VSIZE][HSIZE];
main ()
{
int i,j;
int c;
FILE *fp;
fp = fopen("カラー.psd","rb");
for(i=0;i<VSIZE;i++){
for(j=0;j<HSIZE;j++){
c = fgetc(fp);
im[i][j] = c;
}
}
fclose(fp);
fp=fopen("グレースケール.psd", "wb");
for (i=0;i<VSIZE; i++){
for(j=0;j<HSIZE;j++){
fputc(im[i][j],fp);
}
}
fclose(fp);
}
カラー画像をグレースケール画像に変換する式は分かったんですが
どうやって書いていいのか分かりません。
変換式 グレースケール = 0.299R + 0.587G + 0.114B
おねがいします
204デフォルトの名無しさん:04/11/01 18:44:36
>>203
食事のあと入浴してから紅茶を飲んだ後に作ってあげるけれど、
言語はCでカラーのPSDフォーマットの画像をグレイスケールのPSDフォーマットの画像
に変換するんだね?
205デフォルトの名無しさん:04/11/01 18:45:22
C++でもOK?
206203:04/11/01 18:53:03
>>204 グレースケールは.rawに
>>205 OK
207デフォルトの名無しさん:04/11/01 19:29:33
>>165がどんな問題だったのか教えてくれorz気になって眠れん(´д`)
208デフォルトの名無しさん:04/11/01 20:55:06
PSDってどんな形式だっけ…。
209デフォルトの名無しさん:04/11/01 20:55:27
>>208
ホトショップ
210デフォルトの名無しさん:04/11/01 20:55:48
変換式がわかっててなんでかけないんだろう……
211デフォルトの名無しさん:04/11/01 20:56:48
psdって、レイヤー情報も持ってるんじゃなかったっけ?
単純に>203みたいには読めないと思うのだけど。
212デフォルトの名無しさん:04/11/01 21:02:05
PSDフォーマットの詳細がみつからないんだけど、
だれか知らない?
213デフォルトの名無しさん:04/11/01 21:57:49
psdの仕様が教えられている or 仕様書を貰っている
でもなきゃ、そんな宿題でないはず…。
214デフォルトの名無しさん:04/11/02 00:11:19
ちょっとお聞きしたいのですが、C言語の
関数からで.midiの再生をするプログラムを作ることは可能ですか?
.wavの再生にはPlaySound関数を使ってるのですがwavはファイルサイズ
が大きすぎて人に渡すプログラムを作るときに困ってしまいます。
もし再生する方法をどなたかご存じでしたらお願いします。


215デフォルトの名無しさん:04/11/02 00:16:47
>>214
とてもすれ違いです
216デフォルトの名無しさん:04/11/02 00:16:52
ふーん、宿題スレは誘導されなかったのに敢えてマルチとはねぇ。
217デフォルトの名無しさん:04/11/02 00:18:26
調べた方が早い上に労力もいらないだろうに
218デフォルトの名無しさん:04/11/02 00:21:55
216>>ついてきたか
217>>アフォだからわかんなかったんだよ
219デフォルトの名無しさん:04/11/02 03:22:37
220デフォルトの名無しさん:04/11/02 09:09:40
>>219
うへっ、めんどくせ。>204は満漢全席でも食べに行ったのか、一向に仕上がってこないから
フォーマットが来たことだしちょっとやってみようかと思ったら……
ImageMagickでも拾ってこいって感じだな。
221デフォルトの名無しさん:04/11/02 11:07:36
ポインタについて易しく書いてあるサイトありませんか?・・・
222デフォルトの名無しさん:04/11/02 11:53:11
ttp://www.plus-vision.com/jp/product/laserpointer/laserpointer.html
ttp://pya.cc/pyaimg/pimg.php?imgid=7198
ttp://www9.plala.or.jp/sgwr-t/

つーかググッたら結構出るだろうし、
ポインタ関連ならC専門スレのほうが的確(ここもスレ違いではないが)
223デフォルトの名無しさん:04/11/02 11:58:35
基礎的な事はサイトに頼る前に本買ってじっくり読めと思うが。

推薦図書/必読書のためのスレッド PART 20
http://pc5.2ch.net/test/read.cgi/tech/1097627740/l50
224デフォルトの名無しさん:04/11/02 12:27:49
ポインタの理解が変な人って、大抵メモリがイメージできてないんだよね
225デフォルトの名無しさん:04/11/02 15:03:28
目盛りですか?
軽量カップみたいなものを想像すればよろしいのでしょうか?
それとも、メジャーみたいなもののほうがいいのでしょうか?
226デフォルトの名無しさん:04/11/02 15:56:31
軽量カップですか?
NASAが開発した新素材かなんかを想像すればよろしいのでしょうか?
227デフォルトの名無しさん:04/11/02 16:22:44
昼間は厨房ばかりだな。つまんねーんだよ
228デフォルトの名無しさん:04/11/02 16:23:20
もう夕方だ
229デフォルトの名無しさん:04/11/02 16:26:46
クワガタ
230常識人:04/11/02 17:32:29
厨房ですか?
厨房は確かに、私のスーパープログラムの作成を阻害し、
またそれにより、私のスーパープログラムを、お目にかかることのできなくなった
このスレの住人には大損失です。
ですか、そもそも宿題を丸投げする人種は厨房なのです。
自分に利益をもたらす厨房(自己満足、優越感、技術向上を与えてくれる)は、歓迎し、
そうでない厨房(ネタレスをする厨房)は貶める。これはただのわがままです。
つまり、厨房ということになります。
厨房をこのスレでは許容すべきです。

お前が厨房だという意見は受け付けないので悪しからず。

231デフォルトの名無しさん:04/11/02 17:49:00
ほんたま?とはキャラ違うか
232デフォルトの名無しさん:04/11/02 17:59:16
> またそれにより、私のスーパープログラムを、お目にかかることのできなくなったこのスレの住人には大損失です。
日本語の勉強をしましょう
233デフォルトの名無しさん:04/11/02 18:07:00
優越感なんて感じるかよ・・・・こんな糞簡単な質問ばかりで・・・・・・
そりゃあ、君にはかなり難しいかもしれないがな・・・・
234常識人:04/11/02 18:08:24
批判は受け付けません。以上。
235デフォルトの名無しさん:04/11/02 18:12:16
まあコピペなんだがな。
236デフォルトの名無しさん:04/11/02 18:15:09
常識人さん。
またあなたですか?
どうして、あなたはわざわざ、長文を書いてまでこのスレを荒らすのです?
スーパープログラムですって?なんですか、スーパーって?
プログラマー以前に、人間として恥ずかしくないのですか?
もし、私だったらそんな生き恥をさらす前に、死を選ぶところです。
常識人さん。
わたしはこれまであなたに、「もう来ないで下さい」
そう言い続けてきました。
ですが、今日はあえて言わねばなりますまい。

常 識 人 死 ね。
237デフォルトの名無しさん:04/11/02 18:20:50
それもコピペなんだがな。
238デフォルトの名無しさん:04/11/02 20:46:33
コピペではないだろうが
>>236
お前は少し言いすぎなんじゃねーの?
”死ね”なんて軽々しく人に対して言っていいもんじゃない。
せめて”氏ね”とかにして”死”という字を使わないのが2ちゃんの常識。
そういう意味でお前は常識知らず。常識人のほうが
常識を持っている分だけまし。
もうこないでほしいのはお前のほうだ。常識人は、宿題が枯渇しているときの
俺たちの心のオアシス。
水がなければ俺たちは死ぬ。>>236、お前は俺たちを殺すつもりか?
殺される前に、俺はお前のことを警察に通報するつもりだ。


239デフォルトの名無しさん:04/11/02 20:49:36
これもコピペなんだがな。
240 :04/11/02 20:52:20
数系変換プログラムをつくってくれませんか?
241デフォルトの名無しさん:04/11/02 21:01:21
>>240
template< T_>
int henkan( T_ arg_ ){
    return 1;
}
242デフォルトの名無しさん:04/11/02 21:47:23
ここではレポートの書き方とか質問しても大丈夫ですか?
243デフォルトの名無しさん:04/11/02 22:02:00
言いわけねーだろ
244デフォルトの名無しさん:04/11/02 22:07:47
よしのぶもちょっときてるな。
古田もきてるしな。
245デフォルトの名無しさん:04/11/02 22:16:59
>>243
C言語の課題のアルゴリズムを書かなくちゃいけないレポートなんですけどそれでもダメですか?
246デフォルトの名無しさん:04/11/02 22:23:28
>>245
問題見て判断
247デフォルトの名無しさん:04/11/02 22:32:20
この問題が分かりません。どなたかお願いします。
1.要素の数256の文字型配列str1, str2を宣言する。gets 関数を使ってstr1にキーボードから文字列を入力し、
ポインタを使ってその文字列をstr2にコピーするプログラムを作りなさい
2.入力された英文字列を、すべて大文字に変換して出力するプログラムを、
ポインタを使って作りなさい。
248デフォルトの名無しさん:04/11/02 22:39:11
>>247
関係者ですが、自分でやりなさい。
249デフォルトの名無しさん:04/11/02 22:41:52
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=322

このプログラムを基にポーカーの役判定アルゴリズムを完成させてください。
※トランプ52枚のカードはスペードのエースが0…スペードのキングが12…
そしてクラブのキングが51というように整数で表します。ジョーカーはなしです。
250デフォルトの名無しさん:04/11/02 22:45:12
>249

もちとまともなのを基に汁!
251デフォルトの名無しさん:04/11/02 22:49:48
>>247

#include <stdio.h>
int main(void)
{
char str1[256], str2[256], *p1 = str1, *p2 = str2;

printf("str1:");
gets(str1);
while (*p2++ = *p1++) ;
printf("str2:%s\n",str2);
return 0;
}

#include <stdio.h>
#include <ctype.h>
int main(void)
{
char str[256], *p = str;
gets(str);
while (*p) *p++ = toupper(*p);
printf("%s\n", str);
return 0;
}

252デフォルトの名無しさん:04/11/02 23:05:05
>>249
ポーカーのルールがわからない俺は(ry
253デフォルトの名無しさん:04/11/02 23:20:24
常にクールな顔をすればいいのだよ
254デフォルトの名無しさん:04/11/02 23:22:35
( ´・ω・`)Am I cool?
255デフォルトの名無しさん:04/11/02 23:24:10
( ´・ω・`)私は寒いの?
256デフォルトの名無しさん:04/11/02 23:25:14
( ´・ω・`)そう、心が寒いの
257デフォルトの名無しさん:04/11/03 00:22:38
ストレートの判定

下の関数は外で宣言
int comp(const void *i, const void *j)
{
  return *(int*)i - *(int*)j;
}

ここから

//hdは%13されてる
int flag_str=0;

qsort(hd,5,sizeof(int),comp);

for(int i=0; i<4; i++){
 // 9は13から1にいった場合の判定
 if(abs(hd[i]-hd[i+1])==1 || abs(hd[i]-hd[i+1])==9){if(i==3) flag_str=1; }
 else{i=4}
}
ストレートフラッシュはフラッシュとのフラグの組み合わせ

合ってるか自信は無い


   

   
258デフォルトの名無しさん:04/11/03 01:56:22
259デフォルトの名無しさん:04/11/03 02:01:28
>>257,>>258
ありがとうございます。
一応一通り判定はできるようになりました。

あと、同じマークのカードが4つ来たときに
フラッシュを狙うための方法を考えているのですが
うまくいきません。もしよければ教えていただけませんか?
260デフォルトの名無しさん:04/11/03 02:43:36
>>259
それはもうスレ違い
261デフォルトの名無しさん:04/11/03 03:42:12
ハニーフラッシュを作りなさい
262デフォルトの名無しさん:04/11/03 09:37:23
>>261
すべてQで、ハニーフラッシュな。
263デフォルトの名無しさん:04/11/03 11:07:35
Qが5枚はイカサマです。
264デフォルトの名無しさん:04/11/03 12:34:27
ジョーカー使えば・・・?
265デフォルトの名無しさん:04/11/03 12:35:15
ショッカーってなんでキーキー言うの?耳障りなんだけど
266r:04/11/03 13:00:09
>>259
仲間はずれのカードを捨てればいいんじゃないの?
267デフォルトの名無しさん:04/11/03 13:12:13
card[5] に、手持ちのカードが入ってるとして

/* 捨てるべき、手持ちのカードへのインデックスを返す */
int forFlash( int* card )
  int mark[4], i, target_mark;
  for( i = 0; i < 5; i++ )
    mark[ card[i] / 13 ]++;
  for( i = 0; i < 4 && mark[i] == 4; i++ )
    ;
  if( i == 4 )
    return -1;
  target_mark = mark[i];
  for( i = 0; i < 5; i++ )
    if( card[i] / 13 != target_mark )
      return i;
  return -1; // エラー
}
268デフォルトの名無しさん:04/11/03 14:19:29
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=323
誰かこれを分かりやすく説明して下さいお願いします
269デフォルトの名無しさん:04/11/03 14:25:25
>>268
見たまんまだろ?
これ以上、何を説明しろと?
270デフォルトの名無しさん:04/11/03 14:31:43
271デフォルトの名無しさん:04/11/03 14:57:07
前者はローカル変数を引数として渡し、後者はグローバル変数を使っている。以上。

何が知りたいのかよく分からん。
「プログラム変数の受け渡し方法の違い」って何よ?
同じ出力結果になるソースを提示されても非常に説明しづらい。
違う結果になるソース貼られて「どうして違うの?」なら答えやすいけど。
272デフォルトの名無しさん:04/11/03 15:08:19
グローバルに宣言しちゃえば関数に渡す必要ないんだから
全部グローバルで宣言すればええやん
なんでわざわざそんな面倒なことするん?



とエスパってみる(リンク先すら見てないので見当違いかも)
273268:04/11/03 15:50:30
>>271
>>この二つのプログラムの変数の受け渡し方法の違いを
「の」が抜けてましたね
自分も答え方が分からなくて困ってます
274デフォルトの名無しさん:04/11/03 16:00:36
例えて言うならデータを渡す時にメール(引数)を使うか
掲示板(グローバル変数)を使うかの差。

なんて答え方すればいいのだろうか。
275デフォルトの名無しさん:04/11/03 16:04:12
関数の呼び出し時に値がスタックに積まれる、とか
戻り値がeaxに入ってくる、とか
なんかソッチ方面の気がしね?

あとは何だ、再帰してたり再入してたりすると
アレだったりとかよ。
276デフォルトの名無しさん:04/11/03 16:11:19
>>275
>関数の呼び出し時に値がスタックに積まれる、とか

これは処理系依存。レジスタ渡しだって普通にあるぜ
277デフォルトの名無しさん:04/11/03 16:21:53
>276
言われてみりゃそうだな。Winでも fastcall だとレジスタ渡しか。
__declspec(naked) で自前で fastcall やろうとして暴走させたりしてよw

まーでも学校の課題だしよ。センコーも難しーことは考えてなさそーくね?
もれはソッチ方面にジェンキン寿司禁固1年賭けんぜ。ウヘヘ
278デフォルトの名無しさん:04/11/03 16:28:15
問題文の意図が汲み取れないので、
答え方が解らんといっているくせに、
当の問題文を改変せずに
そのまま載せようとしない奴には
回答のしようがない。
279デフォルトの名無しさん:04/11/03 16:40:17
同じクラスの奴キタ━━━━(゚∀゚)━━━━ッ!!
280デフォルトの名無しさん:04/11/03 17:01:03
>>279
で、>>279 はどういう風に解釈した?
281デフォルトの名無しさん:04/11/03 20:28:44
a(0)=1
b(0)=1
a(n)=a(n-1)+b(n)
b(n)=b(n-1)*1.1
で与えられる数列を、a(n)が30以下の間表示せよ

変数がいっぱいで意味わからない。゚(゚´Д`゚)゜。
おねがいしまs
282デフォルトの名無しさん:04/11/03 20:39:18
>>281
#include <iostream>

double b(int n)
{
 return (n == 0) ? 1. : b(n - 1) * 1.1;
}

double a(int n)
{
 return (n == 0) ? 1. : a(n - 1) + b(n);
}

int main()
{
 for (int n = 0; n <= 30; n++)
  std::cout << "a(" << n << ") = " << a(n) << ", b(" << n << ") = " << b(n) << std::endl;
}
283デフォルトの名無しさん:04/11/03 20:43:11
>>281
#include <stdio.h>

int main() {
int i = 0;
double a = 1;
double b = 1;

printf("a(%d) = %lf, b(%d) = %lf\n", i, a, i, b);

for(i = 1; i < 30; i++) {
b = b * 1.1;
a = a + b;
printf("a(%d) = %lf, b(%d) = %lf\n", i, a, i, b);
}
return 0;
}
284デフォルトの名無しさん:04/11/03 20:45:15
>>281 失礼。訂正。
#include <iostream>

double b(int n)
{
 return (n == 0) ? 1. : b(n - 1) * 1.1;
}

double a(int n)
{
 return (n == 0) ? 1. : a(n - 1) + b(n);
}

int main()
{
 for (int n = 0; n <= 30; n++)
  if (a(n) <= 30.)
   std::cout << "a(" << n << ") = " << a(n) << ", b(" << n << ") = " << b(n) << std::endl;
}
285デフォルトの名無しさん:04/11/03 20:45:17
>>281

#include <stdio.h>
int main() {
 int i;
 double a=b=0;
 
 for (i=0; i<30; i++) {
  b = b * 1.1;
  a = a + b;
  printf("a(%d) = %f\n", i, a);
  printf("b(%d) = %f\n", i, b);
 }
 return 0;
}

どのへんが変数多いんだろう?
286285:04/11/03 20:46:39
( ´д`;) aとbを0にしてどうするんだろう・・・
double a=b=1.0;
287デフォルトの名無しさん:04/11/03 20:49:19
a(n)が30以下の時だぞ。
今の所正解は>>284だけだ。
288デフォルトの名無しさん:04/11/03 20:52:45
>>283
>>285
for (i=1; i<=30; i++) {
だな
289デフォルトの名無しさん:04/11/03 20:56:29
>>288
そうしても>>285の場合はa(0)がなくてa(31)が余分になるんじゃない?
290デフォルトの名無しさん:04/11/03 20:56:35
>>288
そりゃ「nが30以下の場合」だろ。頭悪いのか?
291デフォルトの名無しさん:04/11/03 20:58:27
>>287
馬鹿。>>284 は唯の勘違い野郎だ。
問題文には「数列」と書いてあるだろうが。
292デフォルトの名無しさん:04/11/03 20:59:59
a(n)が30以下の間表示せよ
a(n)が30以下の間表示せよ
a(n)が30以下の間表示せよ
a(n)が30以下の間表示せよ
293デフォルトの名無しさん:04/11/03 21:01:42
おおっと、全員間違いか?!
アホばっかだな。
294デフォルトの名無しさん:04/11/03 21:02:28
>>293
だから>>284が唯一の正解なの。今のところ。
295デフォルトの名無しさん:04/11/03 21:03:41
こんな奴らに仕事は出せんな。とんでもないプログラムを作ってくれそうだ。
296デフォルトの名無しさん:04/11/03 21:05:51
>>295
厨房なので許してあげてください。
297281:04/11/03 21:16:08
あ!
いっぱい書いてもらったところ恐縮なんですが
while文使ってできますか?
298デフォルトの名無しさん:04/11/03 21:20:07
>>297
#include <iostream>

double b(int n)
{
 return (n == 0) ? 1. : b(n - 1) * 1.1;
}

double a(int n)
{
 return (n == 0) ? 1. : a(n - 1) + b(n);
}

int main()
{
 double a = 1., b = 1.;
 int n = 1;

 while (true) {
  if (a > 30.) break;
   std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;
  b *= 1.1;
  a += b;
  n++;
 }
}
299デフォルトの名無しさん:04/11/03 21:20:46
C言語で『西暦年月日を入力し、2000年12月31日までの日数を計算するプログラム』を作りたいのですが、
全然分かりません.どなたかプログラムを作ってくれませんか?お願いします.
300デフォルトの名無しさん:04/11/03 21:21:04
あ、スマソ。こちらで
#include <iostream>

int main()
{
 double a = 1., b = 1.;
 int n = 1;

 while (true) {
  if (a > 30.) break;
   std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;
  b *= 1.1;
  a += b;
  n++;
 }
}
301デフォルトの名無しさん:04/11/03 21:22:34
whileを使うならこの方が良くない?

#include <iostream>
int main()
{
 double a = 1., b = 1.;
 int n = 1;

 while (a <= 30.) {
  std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;
  b *= 1.1;
  a += b;
  n++;
 }
}
302デフォルトの名無しさん:04/11/03 21:25:54
>>297
std::cout << "a(" << n << ") = " << a << ", b(" << n << ") = " << b << std::endl;



printf("a(%d) = %lf, b(%d) = %lf\n", n, a, n, b);

ね。
死らな刈田だろう。
303デフォルトの名無しさん:04/11/03 21:45:19
>>299
#include <stdio.h>
#include <time.h>

int main(void)
{
 struct tm tm, tm2;
 int y, m, d;

 printf("西暦と年月日を入力して下さい:");
 scanf("%d %d %d", &y, &m, &d);

 tm.tm_year = 2000 - 1900;
 tm.tm_mon = 12 - 1;
 tm.tm_mday = 31;
 tm.tm_hour = 0;
 tm.tm_min = 0;
 tm.tm_sec = 0;
 tm.tm_isdst = 0;

 tm2.tm_year = y - 1900;
 tm2.tm_mon = m - 1;
 tm2.tm_mday = d;
 tm2.tm_hour = 0;
 tm2.tm_min = 0;
 tm2.tm_sec = 0;
 tm2.tm_isdst = 0;

 printf("%ld days\n", (long)difftime(mktime(&tm), mktime(&tm2)) / (60 * 60 * 24));
 return 0;
}
304デフォルトの名無しさん:04/11/03 21:46:20
>>299
ちなみに2000年12月31日から経過した日数ならtmとtm2をdifftime()の中で
ひっくり返せ。
305デフォルトの名無しさん:04/11/03 21:48:08
>>303
「西暦と年月日」というのはおかしいので、「年月日を年を西暦で」か何かに
読み替えてくれ。
306デフォルトの名無しさん:04/11/03 22:02:50
問題はキーボードから入力した文字列中の英大文字、英小文字、数字、記号の個数を出力しなさい。というものです。
下記のところまでできました。エラー、警告等もないのですが、KKKkkk999−−−と3つずつのように同じ数だけ入力すると最後にエラー表示(?)がでます。
なぜでしょうか?
#include <stdio.h>
void main()
{
char *a;
int o=0,k=0,su=0,ki=0;
scanf("%s",a);
while(*a!='\0'){
if(*a>='a'&&*a<='z'){
k++;}
else if(*a>='A'&&*a<='Z'){
o++;}
else if(*a>='0'&&*a<='9'){
su++;}
else{
ki++;}
a++;
}
printf("小文字は%d個\n大文字%d個\n数 字%d個\nその他%d個\n",k,o,su,ki);
}
307デフォルトの名無しさん:04/11/03 22:09:47
エラー表示(?)
308デフォルトの名無しさん:04/11/03 22:10:33
>>char *a;
>>scanf("%s",a);

ネ申
309デフォルトの名無しさん:04/11/03 22:12:22
何もかもが理解出来てない悪寒
310306:04/11/03 22:12:49
すみませんエラー表示書き忘れました。
エラー表示は「"0x77f627fe"の命令が"0x00000004"のメモリを参照しました。メモリが"read"になることはできませんでした」というものです。
スミマセンでした。
311デフォルトの名無しさん:04/11/03 22:20:15
変えてみた
char *a=(char*)malloc(sizeof(char)*100);
char *b = a;
int o=0,k=0,su=0,ki=0;
scanf("%s",a);

while(*a!='\0'){
if(*a>='a'&&*a<='z'){
k++;}
else if(*a>='A'&&*a<='Z'){
o++;}
else if(*a>='0'&&*a<='9'){
su++;}
else{
ki++;}
a++;
}
a=b;

printf("小文字は%d個\n大文字%d個\n数 字%d個\nその他%d個\n",k,o,su,ki);
free(a);

でいいのかなあ

しかし暦の計算は知らなかったなあ
312デフォルトの名無しさん:04/11/03 22:23:03
>>311
char a[100];でもいいんじゃないか?
313デフォルトの名無しさん:04/11/03 22:26:02
ポインタインクリメントしてるからなあ
コンパイラに怒られたよ
314デフォルトの名無しさん:04/11/03 22:26:15
free( b ); でいいじゃん。
315デフォルトの名無しさん:04/11/03 22:30:49
それは何となく…
316デフォルトの名無しさん:04/11/03 22:33:58
>>313
char buf[100];
char *a = buf;
317デフォルトの名無しさん:04/11/03 22:37:59
>>問題はキーボードから入力した文字列中の
318306:04/11/03 23:51:12
ポインタでインクリメントを使用し、ポインタの文字型に入れた「m12」の「2」を画面に出力しなさい。
printf("?",*(a+2));
「?」は?
319デフォルトの名無しさん:04/11/03 23:53:06
ポインタの文字型に入れた
      ↑
   このへんが「?」
320デフォルトの名無しさん:04/11/04 00:05:07
%cが文字
%sが文字列

>>318
どんな本使ってるんだ?
もしかして釣り?
321839:04/11/04 19:37:52
バネ振り子をプログラムで作る宿題が出ました。
式は
dx/dt=v
dtheta/dt=a
dv/dt=(L+x)*a^2+g*cos(theta)-k/m*x
da/dt=-(2*v*a+g*sin(theta)/(L+x)
です。
これをアダプティブ・ルンゲクッタ法で解くプログラムをお願いします?
322デフォルトの名無しさん:04/11/04 20:19:10
氏ねってお願いします?
323デフォルトの名無しさん:04/11/04 20:21:43
お願いしません。
324デフォルトの名無しさん:04/11/04 20:25:10
逝けってお願いします?
325デフォルトの名無しさん:04/11/04 20:46:37
質問です
ttp://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H12a2/pm01.html
ここの問1のプログラムをCで構造体を使わずに作るのですが
訳解らず困ってます。

どなたか御教授願えませんでしょうか。
326デフォルトの名無しさん:04/11/04 20:53:34
327デフォルトの名無しさん:04/11/04 22:29:34
西暦1900年の干支は「子」である。1900以上の数値を
入力したとき、その歳の干支を出力するプログラムを作りなさい。

文字型配列etoに{"子","丑","虎",〜・・・"戌","猪"}を格納。
入力された数値と1900の差を12で割った余りでその年の干支を特定すればよい。
ポインタを使ったほうが、プログラムが簡単になる。

この問題が宿題として出されたんですが、どなたかお願いします。
328デフォルトの名無しさん:04/11/04 22:33:09
それは干支か?十二支ではなく、本当に干支か?
329デフォルトの名無しさん:04/11/04 22:33:11
>>325
フローに 1→n って書いてあるから出題者は BASIC を対象言語にしてるんだろなぁ。
香ばしい問題なので汚いソースを用意しました。
#include <stdio.h>
int main( void ) {
int maxn=5,n,Irank,Iusrn,Orm=0,Ormno[5];
int no[]={101,102,201,202,301},umaxn[]={4,4,3,4,6},status[]={0,1,0,1,0},rank[]={3,3,2,2,1};
scanf("%d %d", &Irank, &Iusrn );
for(n=0;n<maxn;n++)
if(!status[n]&&umaxn[n]>=Iusrn&&(Irank<1||Irank==rank[n])){
Ormno[Orm]=no[n];Orm++;
}
for(n=0;n<Orm;n++)
printf("%d\n",Ormno[n]);
return 0;
}
330デフォルトの名無しさん:04/11/04 22:39:38
>>327
ポインタを使ったほうが簡単って
char* eto[]={"子","丑"....};
の事かぁ?
printf("%s\n", eto[(In-1900)%12]):
これだけ書けば良いだろ。
331デフォルトの名無しさん:04/11/04 22:42:44
>>327
ということで回答。
#include <iostream>
int main()
{
  static const char jikkan[][3] = {"庚", "辛", "壬", "癸", "甲", "乙", "丙", "丁", "戊", "己"};
  static const char junishi[][3] = {"申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"};
  std::cout << "西暦(年):";
  int year;
  std::cin >> year;
  std::cout << "干支:" << jikkan[year % 10] << junishi[year % 12] << std::flush;
}
332デフォルトの名無しさん:04/11/05 01:01:25
ポインタってdouble型なら
double *a;
と書くと思いますが、
double* a; てのとどう違うのですか?(*の位置?両方あっているの?)
333デフォルトの名無しさん:04/11/05 01:05:24
>>332
それは本当に宿題なのか?
334デフォルトの名無しさん:04/11/05 01:09:26
>>332
意味は同じ。
前者が昔風、後者が最近(といっても10年くらい前)からの流行。
「double* までが型である」という主張に元ずく。
double* a, b;
だと b の型は double になるのが気持ち悪いので、後者で書くときは1行1変数が
一般的。
335デフォルトの名無しさん:04/11/05 01:13:54
double* a, * b;
336デフォルトの名無しさん:04/11/05 01:18:30
↑本当にそんな書き方してるの?
337デフォルトの名無しさん:04/11/05 01:27:40
double* a, *b;
338デフォルトの名無しさん:04/11/05 01:36:28
>>334
基づく
339325:04/11/05 03:53:31
>>329さん
ありがとうございます。
助かりました
これぐらいすぐ作れるように頑張ります〜
340デフォルトの名無しさん:04/11/05 07:23:26
double
* a,
* b;
341デフォルトの名無しさん:04/11/05 08:45:42
>>334
「元ずく」という表記は何時頃からの流行でつか?
342デフォルトの名無しさん:04/11/05 08:54:43
typedef double *pointer_to_double;
pointer_to_double a, b;
343デフォルトの名無しさん:04/11/05 10:16:36
どなたかお願い致します。Cです。

一問目
整数を入力し、入力した数値の二乗を出力するプログラムを作成せよ。
ただし、入力した整数を引数とし、その二乗を復帰値とする関数を作ること。

二問目
時間を(0〜23)を入力し、以下のような挨拶を出力せよ。
ただし、関数には入力した時間を引数として渡し、復帰値は無いこと。
0〜3 Good Night
4〜11 Good Morning
12〜16 Good Afternoon
17〜20 Good Evening
21〜23 Good Night
344デフォルトの名無しさん:04/11/05 10:26:34
int square(int n)
{
 return n * n;
}

void greeting(int hour)
{
 switch (hour)
 {
 case 0:
 case 1:
 case 2:
 case 3:
  printf("Good Night");
  break;
マンドクセ
 default: 
  break;
 }  
}

後適当に埋めて。マンドクセ
345デフォルトの名無しさん:04/11/05 10:27:26
case 1:
が消えちゃってら。マンドクセ
346デフォルトの名無しさん:04/11/05 10:28:25
Janeが変だっただけだ。マンドクセ
347343:04/11/05 10:32:20
続きです。

三問目

2つの正の整数を入力し、最大公約数を求めよ。
ただし、入力促進メッセージを必ず付けること。
また、ユークリッドの互除法を用いること。
また、何回ループしたかも表示せよ。

四問目
矩形則にてf(x)=x(2)の(a,b)での定積分を求めよ。
ただし、分割数nとa,bはキーボードより入力すること。

五問目
座標P(a,b)を円の中心とし、座標Q(c,d)を円周の一点とする円の面積を求めよ。

ヒント 1,点(e,f)を中心で半径をrとする円の公式は
    (x - e)(2)+(y - f)(2)=r(2)
    
    2,円の面積はs=πr(2)
    
    3,まず、1からr(2)を求め、それから面積を求める。
348デフォルトの名無しさん:04/11/05 10:33:17
>>344
挨拶の中の空白は全角だYO!
349デフォルトの名無しさん:04/11/05 10:40:26
マンドクセ
350デフォルトの名無しさん:04/11/05 11:36:35
>>343
void greeting(int hour){
  char *word[] = {"Night", "Morning", "Afternoon", "Evening"};
  int id[24] = {0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,0,0,0};
  printf("Good %s\n", word[id[hour % 24]]);
}
351デフォルトの名無しさん:04/11/05 12:01:11
>>347 
5

#include <stdio.h>
#define PI 3.14159
int main(void)
{
double a, b, c, d, s;

printf("a >>"); scanf("%lf", &a);
printf("b >>"); scanf("%lf", &b);
printf("c >>"); scanf("%lf", &c);
printf("d >>"); scanf("%lf", &d);
s = PI * ((c - a) * (c - a) + (d - b) * (d - b));
printf("s = %f", s);
return 0;
}
352デフォルトの名無しさん:04/11/05 12:45:28
ぱいのていぎは 4*atan(1.0)
353デフォルトの名無しさん:04/11/05 12:48:33
titty fucking
354デフォルトの名無しさん:04/11/05 13:15:49
>>352
atanの定義は?
355デフォルトの名無しさん:04/11/05 13:22:10
>>352
ふつーM_PI (@math.h)
356デフォルトの名無しさん:04/11/05 18:15:49
>>355
uva では使えない
357デフォルトの名無しさん:04/11/05 18:28:37
>>356
スレタイ嫁
358デフォルトの名無しさん:04/11/05 21:04:13
すいません皆さんにはレベルが低すぎてつまらないかと思いますがお願いします
双方向リストの隣接交換法でソートするプログラムです

struct EMPLOYEE { /* 社員データ */

char name[NAME_LENGTH]; /* 氏名 */
int age; /* 年齢 */
char section[SECTION_LENGTH]; /* 所属 */
char address[ADDRESS_LENGTH]; /* 住所 */
char status; /* 状態 ('i':データ有り、'h':データ仮削除) */
struct EMPLOYEE * next; /* 次のリストを示す */
struct EMPLOYEE * prev; /* 前のリストを示す */
};
を使用してください
ソートには、ポインタをつなぎかえる方法を使用してください
359デフォルトの名無しさん:04/11/05 21:53:53
Cで 4次の方程式
x^4 + A*x^3 + B*x^2 + C*x + D = 0
を A, B, C, Dを与えて、虚数解を含む4つの解を求めたいのですが
上手くいきません。どうかお願いします。
360デフォルトの名無しさん:04/11/05 22:28:39
visual C++ 6.0
配列の最大値と最小値を求める関数を作成しなさい。
最大値と最小値の表示はmain関数で表示するものとします。

初期値
a[] = {10, 25, 7, 45, 2, 100, 3, 70, 50, -1};

-1は配列の終端を意味します。

#include <stdio.h>

void MaxMin(int*, int*);


void main(void)
{
int a[] = {10, 25, 7, 45, 2, 100, 3, 70, 50, -1};

void MaxMin(int *x, int *y)
{
}

別の変数名例えば”int Max = 0”を宣言してforで-1になるまでループし、ifで比較して格納するって言う方法以外を探しているのですができませぬ。
考えるだけ考えましたが無理だったので恥を忍んでお願いします。orz

後説明へたくそで面目ない。(´・ω・`)
361デフォルトの名無しさん:04/11/05 22:38:10
>>358
何をどの順番にソートするんだ?

>>360
ソートとアルゴリズムで検索してくれ

4次は無理です…
解き方いろいろありそう
362デフォルトの名無しさん:04/11/05 22:38:58
最大値、最小値の初期値は はいれつの先頭要素に汁のがセオリー(w
んで、要素2番目から比較汁!
363デフォルトの名無しさん:04/11/05 22:43:31
>360
>別の変数名例えば”int Max = 0”を宣言

えーっと、パラメータの *x,*y そのまま使え(w
364360:04/11/05 22:48:32
何となくわかってきました。
>>361 >>362 >>363

ありがとうございまする。
365デフォルトの名無しさん:04/11/05 22:49:04
年齢でお願いします >361
366デフォルトの名無しさん:04/11/05 23:01:47
#include <stdio.h>
void MaxMin(int*, int*, int*);
void main(void)
{
int a[] = {10, 25, 7, 45, 2, 100, 3, 70, 50, -1};
int Max, Min;
MaxMin(&Max, &Min, a);
printf("%d\n", Max);
printf("%d\n", Min);
}
void MaxMin(int *x, int *y, int *z)
{
for(*x = *y = *z, *z++; *z != -1; *z++)
{
if(*x < *z)
*x = *z;
if(*y > *z)
*y = *z;
}
}
試してないから動くかは知らん
367デフォルトの名無しさん:04/11/05 23:40:57
すみません。お手上げです。5時間以上考えたんですが、どうしても上手くいきません。
何故でしょうか?^^;。分かる方ご指摘下さい。f=1です。
http://ceram.material.tohoku.ac.jp/~takamura/class/comp16/day5/day5.html

#include <stdio.h>
#include <math.h>

main()
{

int h, k, l;
float x1=0.0, x2=0.0, x3=0.5, x4=0.5, y1=0.0, y2=0.5, y3=0.5, y4=0.0, z1=0.0, z2=0.5, z3=0.0, z4=0.5;
double a, d, lambda, theta, F, FF, Fa, Fb;

a = 0.3615;
lambda = 0.154056;

for( h = -4; h<=4; h++){
for( k = -4; k<=4; k++){
for( l = -4; l<=4; l++){
if ( !(h==0 && k==0 && l==0) ){

d = a / sqrt(h*h+k*k+l*l);
theta = 2*asin(lambda/(2*d));
if ( F > 0.001){
Fa = 1+cos(6.28*(h*x2+k*y2+l*z2))+cos(6.28*(h*x3+k*y3+l*z3))+cos(6.28*(h*x4+k*y4+l*z4));
Fb = sin(6.28*(h*x1+k*y1+l*z1))+sin(6.28*(h*x2+k*y2+l*z2))+sin(6.28*(h*x3+k*y3+l*z3))+sin(6.28*(h*x4+k*y4+l*z4));

FF = Fa*Fa + Fb*Fb

printf("( %2d %2d %2d ) d = %.4lf 2theta = %.41fnm F_square = %.41f\n", h, k, l, d, theta, FF);
}}}}}}
368デフォルトの名無しさん:04/11/06 00:21:53
>>347
> 三問目
20bitまでの対応だけど

/* calc GreatestCommonDivisor and get Iteration count */
#include <stdio.h>
int gcd(int a, int b, int n){
return (a>b)?b?gcd(b,a%b,++n):a|n<<20:gcd(b,a,n);
}

int main(){
int a, b, n, tmp;
puts("a wo irete:"); scanf("%d", &a);
puts("b wo irete:"); scanf("%d", &b);
tmp=gcd(a,b,0);
printf("saidai kouyakusu ha %d\n%d kai no loop\n",tmp&1048575,tmp>>20);
return 0;
}
369r:04/11/06 10:51:44
370デフォルトの名無しさん:04/11/06 15:20:45
>>367
とりあえず突っ込みどころ、
sqrtの引数、(double)でキャストしてあげましょう。
if(F>0.001)、Fの値が未定義です。全て偽になってprintf文が一回も呼び出されません。
printf文内、%.41fは小数点以下41桁出します。nmは謎です。指数を使いたいなら、eを使いましょう。

とりあえず5時間何を考えてたのか知りませんが、適当なところでprintf文埋め込んでデバッグしていくのがいいかと思われます。
また、うまくいかないのは何なのか、しっかり答えましょう(コンパイルがうまくいかない、実行中エラーが出る、値が違う、など)
がんばってくださいね。
371370:04/11/06 15:31:26
悪い、nmはナノメートルの事ね。fとくっついてたからわからんかった。スマソ
372370:04/11/06 15:43:29
#define PI 3.141592654
int main()
{
int h, k, l, cnt=0; /*追加*/
float x1=0.0, x2=0.0, x3=0.5, x4=0.5, y1=0.0, y2=0.5, y3=0.5, y4=0.0, z1=0.0, z2=0.5, z3=0.0, z4=0.5;
double a, d, lambda, theta, F, FF, Fa, Fb;

a = 0.3615;
lambda = 0.154056;

for( h = -4; h<=4; h++){
for( k = -4; k<=4; k++){
for( l = -4; l<=4; l++){
if ( !(h==0 && k==0 && l==0) ){
d = a / sqrt((double)(h*h+k*k+l*l));/*変更*/
if(lambda/(2*d)>1){continue;} /*追加*/
theta = 2*asin(lambda/(2*d));
Fa = 1+cos(6.28*(h*x2+k*y2+l*z2))+cos(6.28*(h*x3+k*y3+l*z3))+cos(6.28*(h*x4+k*y4+l*z4));
Fb = sin(6.28*(h*x1+k*y1+l*z1))+sin(6.28*(h*x2+k*y2+l*z2))+sin(6.28*(h*x3+k*y3+l*z3))+sin(6.28*(h*x4+k*y4+l*z4));

FF = Fa*Fa + Fb*Fb;
if ( FF > 0.001){
cnt++;/*追加*/
printf("( %2d %2d %2d ) d = %.4lf nm 2theta = %6.2f F_square = %4.2e\n",h,k,l,d,(180*theta)/PI,FF);/*変更*/
}}}}}
printf("count=%d",cnt);/*追加*/
}
できた。
確認のためにcntでカウント回したが、いらなかったら削除してくれ。あとはソートするだけ。
373デフォルトの名無しさん:04/11/06 17:13:29
すみません、教えていただきたいのですが、
「100行100列のフィールドを全体領域として、そのフィールド内で5行5列の
窓枠を用意する。その窓枠内の各行列全ての値の総和が、別のフィールド(
任意の行列で構成)の任意のマスの値として代入できるようなプログラム」
という課題が出たのですが、お手上げです。どなたか考えていただけない
でしょうか。。VisualC++です。これを機会に勉強したいと思っております。
374デフォルトの名無しさん:04/11/06 17:20:37
フィールドの構造も指定されてないのか?
375373:04/11/06 18:03:36
>>374
指定されていませんが、おそらくある程度大きなフィールドを用意しなければ
いけないと思います。30×30の行列くらいで考えていただけないでしょうか。
もし不都合ならば、多少いじっても大丈夫だと思います。
376デフォルトの名無しさん:04/11/06 18:34:49
素直に二次元配列でやればいいんじゃないの?
クラスでやるのも面白いだろうけど、373はそこまでやる気あるとは
思えないし。
377367:04/11/06 18:37:04
>>370
明らかに勉強不足でした。それと説明不足で申し訳ありませんでした。
5時間一体何をやっていたのでしょうか?^^;。やはり基本的なところ
に穴があるようなので、もっとCの事を勉強しなくてはと思いました。
本当にどうもありがとうございました。
378デフォルトの名無しさん:04/11/06 19:04:13
質問です。
iとj,nを指定してある中で下記のようなプログラムを作りました。
do{
 t = rand()%n+1;
}while(t==i&&t==j);
i,j≠tであるtが欲しいのですが、実行してもi=tやj=tのときが
あります。do whileの継続条件にこのような書き方は認められない
のでしょうか?だとしたらどのようにかけばよいのでしょうか?
379デフォルトの名無しさん:04/11/06 19:06:28
do{
 t = rand()%n+1;
}while(t==i||t==j);
か?
380378:04/11/06 19:10:12
>>379
ありがとうございます!実行したところできました!
そうですよね、かつではなくまたは、じゃないと
明らかにダメでした…助かりました☆
381デフォルトの名無しさん:04/11/06 19:10:38
i = 3 j = 10
とかのとき
t = i と t = j
が同時になりたつことなんてないだろw
382373:04/11/06 19:19:25
>>376
二次元配列・・・。そんな言葉が授業中出てきたような気がします。。
自分で考えるべきなのは承知してますが、助けてもらえないでしょうか・・・
383デフォルトの名無しさん:04/11/06 19:21:35
>>382
二次元配列だったらググった方が絶対に早いぞ
384デフォルトの名無しさん:04/11/06 19:27:50
test
385デフォルトの名無しさん:04/11/06 19:30:03
int matrix[100][100];

っていうのはわかるの?
わからないと相当説明がしんどい。
386デフォルトの名無しさん:04/11/06 19:37:56
まとりっくすひゃくばんひゃくばん
387373:04/11/06 19:45:35
>>385
はい、左の[]が行で右の[]が列を表すんだと思います。
for文を使ってループだの、和をsumに足しこむなどするんだと
思うんですが、それをプログラムの記述にしたときのルールと
いうか、順番というか、表現方法がいまいち分かりません。。
388デフォルトの名無しさん:04/11/06 19:53:31
言語はCです。どなたかお願いします。

空白で区切られた2つの正の整数を標準入力から読み込んで、そのまま標準出力へ書き出すプログラムを作成しなさい。
ただし以下の条件を満たすこと。
1、scanfは使わない。
2、行の先頭にある連続した空白は無視する。
3、2つの整数は複数の空白で区切られてもよい。
4、最初の2つの整数以降の文字は無視する。
5、数字以外の文字が含まれている場合(4f ,343kd 等)は0とする。

389デフォルトの名無しさん:04/11/06 20:03:18
sscanf()って落ち?w
390デフォルトの名無しさん:04/11/06 20:06:56
getcをループでまわして文字列入力
そのあと、strtolを二回呼び
最後にprintf
391デフォルトの名無しさん:04/11/06 20:30:40
で、strtol の前にstrtok?
392デフォルトの名無しさん:04/11/06 21:08:59
393392:04/11/06 21:17:32
訂正

最初の while を 無限ループではなく。

while( *word_start )

としてくれ。
こうしないと、1ワード + スペースだけしか入力されなかったとき、無駄な0が出力される。
394デフォルトの名無しさん:04/11/06 21:24:50
>>392
ちゃんとみてないが、2つの整数の間の空白に関して
> そのまま標準出力へ書き出す
が満たされていない気がする。

ということでやってみた。

#include <stdio.h>
int buf[256], sp;
void push(int c) { if(sp < 256) buf[sp++] = c; }
void output(void) { int i; for(i = 0; i < sp; i++) putchar(buf[i]); sp = 0; }
void popall(void) { sp = 0; }
395デフォルトの名無しさん:04/11/06 21:25:06
int main(int argc, char argv) {
  int c, state = 0, num_output = 0;
  c = getchar();
  while(c != EOF && c != '\n') {
    switch(state) {
    case 0:
      if(isspace(c)) { c = getchar(); continue; }
      else if(isdigit(c)) { state = 1; }
      else { state = -1; }
      break;
    case 1:
      while(isdigit(c)) { push(c); c = getchar(); }
      if(isspace(c)) { output(); }
      else { putchar('0'); popall(); while(!isspace(c)) c = getchar(); }
      if(++num_output == 2) return 0;
      state = 2;
      break;
    case 2:
      while(isspace(c)) { putchar(c); c = getchar(); }
      state = 0;
      break;
    default:
      printf("bad input\n");
      return -1;
    }
  }
}
396デフォルトの名無しさん:04/11/06 22:06:47
>>388 エラーは考慮してない。
#include <stdio.h>
#include <ctype.h>
int a[2], i, flag;
int space(void) {
  char c = getc(stdin);
  if (isspace(c)) return 1;
  else {ungetc(c, stdin); return 0;}
}
int graph(void) {
  char c = getc(stdin);
  if (isgraph(c)) {
    if (isdigit(c) && flag) (a[i] *= 10) += c - '0';
    else a[i] = flag = 0;
    return 1;
  }
  else {ungetc(c, stdin); return 0;}
}
void doc(void) {
  while (space()) ;
  i = 0; flag = 1; a[i] = 0; while (graph()) ;
  while (space()) ;
  i = 1; flag = 1; a[i] = 0; while (graph()) ;
}
int main(void) {
  doc();
  printf("%d %d", a[0], a[1]);
  return 0;
}
397デフォルトの名無しさん:04/11/06 22:07:47
言語はC++です。どなたかお願いします。

適当に名前を入力すると、名前のアルファベット順にソートして出力する。
入力件数は最大5件とする。
名前はローマ字表記とし、半角大文字で入力する。
名前入力の時に改行のみを入力するか、5件入力されたら、入力を打ち切る。
ソートのアルゴリズムは単純選択法を用いること。
398デフォルトの名無しさん:04/11/06 22:47:09
double a[}={3.4 , 5.8 , 0.6 , 2.4 , 1.8 , -1}の配列の要素をバブルソートで昇順に並べるプログラム(C++)
"-1"は番兵である。 これ私に教えてください〜!!
399デフォルトの名無しさん:04/11/06 22:50:28
>>398
複数のスレで聞く行為はマルチと呼ばれ、一番最低の行為です。
400r:04/11/06 22:52:12
>>397
ソート部分は作った。
入力部分は自分で作れ。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=325
401デフォルトの名無しさん:04/11/06 23:02:57
>>397
#include <iostream>
#include <string>
void selection_sort(std::string* first, std::string* last){
  for (int n = last - first, i = 0; i < n - 1; i++) {
    int k = i;
    for (int j = i + 1; j < n; j++) if (*(first + j) < *(first + k)) k = j;
    std::string temp = *(first + i); *(first + i) = *(first + k); *(first + k) = temp;
  }
}
int main(){
  std::string name[5];
  int i = 0;
  for (; i < sizeof(name) / sizeof(name[0]); ++i) {
    std::cout << "name?:";
    if (!std::getline(std::cin, name[i]) || name[i] == "") break;
  }
  selection_sort(name, name + i);
  for (int j = 0; j < i; ++j) std::cout << "name[" << j << "]:" << name[j] << std::endl;
}
402デフォルトの名無しさん:04/11/06 23:35:59
ごめんなさい、よくそういうの知らなかったもので>w<
403デフォルトの名無しさん:04/11/06 23:40:48
>>402
誰に対する何のレスなんだよ。
404デフォルトの名無しさん:04/11/06 23:50:11
399に対してです。たびたびすみません。
405デフォルトの名無しさん:04/11/07 00:09:00
あなたは404ふぉーびっつんです
406デフォルトの名無しさん:04/11/07 00:14:24
何か398可哀想だから教えてあげるかな。
407デフォルトの名無しさん:04/11/07 00:30:02
>>398 そうやって成長するのだよ
408デフォルトの名無しさん:04/11/07 00:38:29
何を知らないって、常識を知らないんだな。
あと客観的思考が足りないとか。
409デフォルトの名無しさん:04/11/07 00:43:29
ほんとにごめんなさい。でも私、その398のやつ知りたかったから〜>w<できればもう常識はずれなことをしないから教えて欲しい・・・。
410デフォルトの名無しさん:04/11/07 01:15:19
>>405
404なのにForbidden?
411デフォルトの名無しさん:04/11/07 01:21:22
>>409
とりあえずその相手をおちょくってるような顔文字やめろ
412デフォルトの名無しさん:04/11/07 01:23:25
>>409
自分で調べたところまでを書くとかなんとか…
せめて予想でも.
いきなり,もってきてわかりませんじゃ,答えてくれないよ
413モウモウ:04/11/07 01:26:13
>>398
こことか読めばわかるんでないの?
http://www1.cts.ne.jp/~clab/hsample/Sort/Sort1.html
414デフォルトの名無しさん:04/11/07 01:37:02
何か厳しいというか、私が何にもわかってなかったから、ほんとみなさんすみませんでした。
415デフォルトの名無しさん:04/11/07 01:39:01
頼むからここでは非常識な厨にも優しくしてやってくれ
他のスレに来られると困るんだよ。
416モウモウ:04/11/07 01:42:05
>>414
その宿題かたずけないと、先生に怒られるの?
せっぱつまっているんなら教えてあげてもいい。
417デフォルトの名無しさん:04/11/07 01:49:48
できれば教えて欲しいです。実は焦ってるんで、お願いします。
418デフォルトの名無しさん:04/11/07 01:53:30
>>417
というか
>>413
読めって.
こうしている時間に勉強したら解決したんじゃない?
419モウモウ:04/11/07 01:57:05
>>417
わかった。30分ぐらいまってて。
プログラム書くから。
420373:04/11/07 02:10:17
どなたか>>373をお願いします。。
421モウモウ:04/11/07 02:12:49
>>398 >>>417
これでいいだろう。たぶん。

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

/**
 *  data に数値データを渡すと、バブルソートで昇順にソートする。
 *  data 内の -1 は番兵になる。
 *  data には番兵を除いて少なくとも 1 つの数値があること。
 */
void bubble_sort(double* data)
{
    int i, j;
    for (i = 0; data[i] != -1; i++) {
        for (j = i + 1; data[j] != -1; j++) {
            if (data[i] > data[j]) {
                // データを入れ替える
                double temp = data[i];
                data[i] = data[j];
                data[j] = temp;
            }
        }
    }
}
422モウモウ:04/11/07 02:13:52

/**
 *  数値データを表示する。
 */
void print_data(double* data)
{
    int i;
    printf("data =");
    for (i = 0; data[i] != -1; i++) {
        printf(" %g", data[i]);
    }
    printf("\n");    
}

int main(void)
{
    double a[] = {3.4 , 5.8 , 0.6 , 2.4 , 1.8 , -1};

    print_data(a);
    bubble_sort(a);
    print_data(a);

    return 0;
}
423モウモウ:04/11/07 02:14:44
>>420
その宿題かたずけないと、先生に怒られるの?
せっぱつまっているんなら教えてあげてもいい。
424デフォルトの名無しさん:04/11/07 02:22:39
モウモウさん、できれば421のやつをC++でやってもらいたいのですが。でもたぶん同じ感じですよね!?
425モウモウ:04/11/07 02:23:55
>>424
上のやつは C に近いけど、C ではコンパイルとおらないよ。
C++ でって、どういうこと?STL とか使えってこと?
要件定義をしっかり教えてくれ。
426デフォルトの名無しさん:04/11/07 02:25:20
STL使ったら、バブルソートなんか作るのアホだよな
427モウモウ:04/11/07 02:25:37
ごめん、C でもたぶんとおるよ (C++ でもとおる)。
printf じゃなくて cout を使ってほしいってこと?
428デフォルトの名無しさん:04/11/07 02:27:14
>>424
やってもらって礼もいわずに書き直せだから常識がないと言われるんですよ.
429373:04/11/07 02:29:13
>>モウモウさん
月曜日までに作るように言われてるんですが、知り合いのいない授業
でして・・・。できないと怒られるというより、単位がでないかもしれ
なくてかなり困ってる次第です。どうか教えてください。
430デフォルトの名無しさん:04/11/07 02:29:24
>>373
やろうと思ったけど問題の意味が分からない。
100行100列のフィールドと、別のフィールドを造るってこと?
431モウモウ:04/11/07 02:30:40
>>430
やってくれるんなら 430 さんに任せるけど、それでいいですか?
432373:04/11/07 02:31:45
>>430
そうです。お願いします。
433430:04/11/07 02:32:00
いいけど、問題の意味がいまいち理解できてない。
434デフォルトの名無しさん:04/11/07 02:33:17
他にもstd::vector<std::vector<hoge> >とかstd::valarray<hoge>を
使っていいかとか。それによってはコード量も違う。
435モウモウ:04/11/07 02:34:49
>>434
老婆心ですまないが、初心者にそれは使わないほうがいいんでは?
C だけで済ませておいたほうが、彼のためにもなるし。。。
436デフォルトの名無しさん:04/11/07 02:38:19
野暮なことで申し訳ないが
彼のため、というのならそもそも答えてあげるのが間違いだ罠
437430:04/11/07 02:38:23
全体フィールドのある領域の合計を、別のフィールドの特定の場所に代入すればいいのかな?
438373:04/11/07 02:45:21
最初の100行100列の各行列に数値(任意)を入れます。次に5行5列の窓枠を
用意して、1行1列のマスに入ってる数値、1行2列のマスに入っている数値、
1行3列のマスに入っている数値、1行4列のマスに入ってる数値、1行5列のマスに入ってる数値、
2行1列に入っている数値、2行2列のマスに入ってる数値、・・・、5行5列に入っている数値
までの総和を、別の50行×50列のフィールドの1行1列目のマスの値となるように
代入、1行2列のマスに入っている数値〜1行6列のマスに入っている数値、2行2列・・・5行6列
のマスに入っている数値までの総和が別の50行×50列のフィールドの1行2列目のマスの値と
なるように代入、以下同様に5行5列の窓枠をシフトしていってそれぞれの総和が順次代入
されていくようなプログラムです。説明が足らずすみませんでした。
439373:04/11/07 02:50:33
50*50だと足りないですね・・・。100*100の行列をもう一つ用意
に訂正です。。すみません。
440430:04/11/07 02:52:04
C++ でいいんだっけ?
441373:04/11/07 02:56:21
>>440
はい、そうです。すごく助かります。。
442デフォルトの名無しさん:04/11/07 02:59:36
>>441
ほんとにいいのか?
第3者から見ても、
おそらく>>373の考えてるレベルと>>440が書こうとしてる内容は
結構ギャップがあると思うぞ

見栄張らず、Cで書いてもらったほうが勉強という意味でも適正レベルだと思うぞ
443373:04/11/07 03:03:53
>>442
VisualC++だったと思うんですが、それってC++ということではないの
でしょうか?
444デフォルトの名無しさん:04/11/07 03:04:20
ほんとありがとうございます。そしてすぐにお礼もいわずにすみません。COUTを使ったらどうなりますか!?
445430:04/11/07 03:05:44
まぁ、C++といっても、Cに毛の生えたような感じで作ります。
malloc 使いたくないだけなんでw
446デフォルトの名無しさん:04/11/07 03:06:29
>>444
あんた誰?
447デフォルトの名無しさん:04/11/07 03:06:36
VisualC++というのはソフトウェアを指す
C++というのはC言語の拡張版、といったところ
C言語と記述方法は互換性あるけど、別物と考えてもいいぐらい

なので、C言語もろくすっぽに理解してない場合はC++なんて到底理解できない
448モウモウ:04/11/07 03:07:43
>>444
printf(" %g", data[i]) のところを cout << " " << data[i]
printf("\n") のところを cout << "\n" もしくは cout << endl にするだけ。
ちなみに私はもう寝るからな。
449373:04/11/07 03:13:59
>>430
本当に助かります。よろしくお願いします。
>>447
授業がC++だと思うので提出もC++だと思います。
作っていただくプログラムを頑張って理解したいと思います。
もし、わからないところが出てきたら質問するのでそのときは
よろしくお願いします。
450デフォルトの名無しさん:04/11/07 03:15:59
もう一度>>1を読もうな。
451373:04/11/07 03:20:25
>>450
はい。。430さんをはじめ、すみませんでした。
452デフォルトの名無しさん:04/11/07 03:31:43
>>438

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1064150088&res=252&fi=no

正直へんてこなコードになった。
C++ 使いつつあんまり C++ っぽくしないようにしたんで。
かといって、初心者に優しいわけでもないんだな、これが。
453デフォルトの名無しさん:04/11/07 03:37:42
>>373
多分勘違いのままだろうから説明加えとく

おそらく授業というのは
「VisualC++という名前のソフトウェアを使ったC言語」の授業だろう
この「VisualC++」が「メモ帳」であってもC言語やC++言語は勉強できる
ソフトの名前にC++が付いていても
C++言語を授業として扱わない限りC++を習っていることにはならない

そもそもC++が理解できるレベルならこういう宿題もぱっぱと済ませられる(はず)
っていうかそもそもそんな宿題出さないね



この勘違いのままスレ違いな発言して追い出されてマルチということはするなよ
454デフォルトの名無しさん:04/11/07 04:39:38
>>439
ちょっと待て。100*100の行列を別に用意したとして、
辺や隅はどうするんだ。
455281:04/11/07 06:05:42
教えてもらったプログラム間違ってるんですけど・・・
全部0になっちゃう

#include <stdio.h>←これ使いたい
int main()
{
 double a = 1., b = 1.;
 int n = 1;

 while (a <= 30.) {
  printf("a(%d) = %lf, b(%d) = %lf\n", n, a, n, b);
  b *= 1.1;
  a += b;
  n++;
 }
}
456デフォルトの名無しさん:04/11/07 06:47:28
>455
普通に>283でいいんじゃない?
それとnの初期値は0にしてね
457デフォルトの名無しさん:04/11/07 08:16:11
C++の問題をCで解いたってなんの問題もないだろ
coutやclassを使えというなら、そのことを書くべき

CとC++が全然別の言語とでも思い込んでるんだろ
458デフォルトの名無しさん:04/11/07 09:30:47
〔問題〕
文字列strを空文字列にする関数
void null_string(char str[])
を作成し作成した関数を実行する
プログラムを作成せよ
459デフォルトの名無しさん:04/11/07 09:40:24
そんな餌に(ry
460デフォルトの名無しさん:04/11/07 09:50:45
void null_string(char str[]){
  str[0] = '\0';
}
int main(void){
  char str[] = "クマー";
  null_string(str);
  return 0;
}
461デフォルトの名無しさん:04/11/07 10:10:20
>>455
printf()の"%lf"は(基本的に)間違い。
また、"%f"よりも"%g"をお奨め。
462デフォルトの名無しさん:04/11/07 10:19:04
((String)null).length();
463r:04/11/07 10:21:16
>>462
ガッ
464デフォルトの名無しさん:04/11/07 10:38:00
>>461
そこでC99
465デフォルトの名無しさん:04/11/07 12:56:12
>>444
coutを大文字で書くヤツ初めて見た
466デフォルトの名無しさん:04/11/07 13:01:49
COUT
467デフォルトの名無しさん:04/11/07 13:09:46
BASICに時代を戻さないでください
468デフォルトの名無しさん:04/11/07 13:10:46
何でも大文字にしたがるMFCにはカスタマイズされたCOUTがあるに違いない。
469373:04/11/07 14:47:00
>>452-453
助かりました。ありがとうございました!
470マイク ◆yrBrqfF1Ew :04/11/07 16:21:12
すいませんこれがわからなくて困ってますぅ
言語仕様外ですがおねがいしまーす

//以下のプログラムに何らかの入力を与え
//結果として以下のプログラム内で/bin/shを実行せよ
//環境はi386 && (linux||*bsd)とする
namespace vuln {
void off_by_one(const char *input)
{
char buffer[16];
for (int i = 0; i <= sizeof(buffer) && input[i] != '\0'; ++i)
buffer[i] = input[i];
}
}

int main(int argc, char **argv)
{
if (argc == 2)
vuln::off_by_one(argv[1]);
return 0;
}
471r:04/11/07 16:24:48
>>470
それで問題文は全部?
なんか意味がわからね。


off_by_one()をリターンする前に
system( buffer );
を呼べばイイとか、そういう事?
472マイク ◆yrBrqfF1Ew :04/11/07 16:26:31
コードの書き換え書き足し削除は一切無しで。
473デフォルトの名無しさん:04/11/07 16:31:37
バッファオーバーランでも狙うのか?
474デフォルトの名無しさん:04/11/07 16:44:22
i <= sizeof(buffer)
ここを突けってことか?
475マイク ◆yrBrqfF1Ew :04/11/07 16:47:54
patchあてるならそこですねー。
476デフォルトの名無しさん:04/11/07 16:50:27
言葉遣い悪すぎ
477デフォルトの名無しさん:04/11/07 16:53:04
57 名前:マイク ◆yrBrqfF1Ew [] 投稿日:04/10/25 08:37:20
俺はできるがgoodを表示させられる奴いるか?

//bcc32 5.5.1 on win2k
#include <iostream>
#include <iomanip>
int main()
{
volatile int n = 0;
char buffer[128];
cin.get(buffer, 132, '\0');
std::cout<<(n == 4276545 ? "good" : "bad")<<std::endl;
return 0;
}

58 名前:マイク ◆yrBrqfF1Ew [sage] 投稿日:04/10/27 18:45:03
やはり誰もいないな(▽
478マイク ◆yrBrqfF1Ew :04/11/07 17:07:09
で、できるんですか?
479マイク (仮):04/11/07 17:14:12
やはり誰も出来ないな(▽
480デフォルトの名無しさん:04/11/07 19:56:47
まあなんかしらんが >>477 はできた。
てか'\0'ってのが不可解だ。
481デフォルトの名無しさん:04/11/07 20:21:23
>>480
どうやるの?
482480:04/11/07 20:41:09
ヒントは4276545が何を表すかを考えることだなあ。
あとは128に132分読み込んでるって事か。それでbufferがあふれるわけだな。

これで十分だろ。答えになっちまうよ。
483デフォルトの名無しさん:04/11/07 20:53:19
なんか知らんが、どうしてチート関連になると答えないんだろうね。
ここはチートスレじゃないんだぞ?
484デフォルトの名無しさん:04/11/07 20:58:39
はいはい"AA...A"(Aを132個)入力すればいいんでしょ。それでは
宿題をドゾー
485デフォルトの名無しさん:04/11/07 20:59:09
Windowsについてる電卓使うとわかりやすくなるよね。
486デフォルトの名無しさん:04/11/07 20:59:37
チートスれじゃないから、チート関連には答えないんじゃねーの?
487マイク ◆yrBrqfF1Ew :04/11/07 21:15:44
>>470はどうした?
というかどこがチートだ?
488マイク(偽◇yrBrqfF1Ew :04/11/07 21:19:21
やはり誰も出来ないな(▽
489デフォルトの名無しさん:04/11/07 21:21:26
どうも、常識人さんがいないと
スレが荒れる傾向にあるな。
490マイク ◆yrBrqfF1Ew :04/11/07 21:26:14
それは大変だな。
491デフォルトの名無しさん:04/11/07 21:32:54
492マイク ◆yrBrqfF1Ew :04/11/07 21:39:53
そんな怪しいリンク誰も踏まないだろ。
493デフォルトの名無しさん:04/11/07 21:43:50
>>492
ん?このリンク先知らない?
英辞郎だよ
494マイク ◆yrBrqfF1Ew :04/11/07 21:45:04
全く知らん。
495476:04/11/07 21:51:44
こんな古典は答える価値もないのに、図に乗りやがって
土下座して出て行け

・処理系依存方法しかない
・1バイトオーバーライトで、(恐らく)pushされてるebpを書き換える
・関数エピローグでスタックをbufferに向けてeipを変更する
496デフォルトの名無しさん:04/11/07 21:52:06
>>494
だったら今知ればいい。
英語に通じている人でも、ときどきこの英単語を日本語ではどう訳せばよいのか、
と思うことがあるよね。
特に専門用語では訳が難しい。
エルミート作用素、演算子、どっちがいいの?とか。
497496:04/11/07 21:54:03
英辞郎はわりと専門用語も載っているWEB上の英和辞典だから便利だよ
498マイク ◆yrBrqfF1Ew :04/11/07 22:05:19
>>495
まあ、そんなとこか。

>>496
良かったな。
499デフォルトの名無しさん:04/11/07 22:25:11
四則計算

キーボードから実数を2つ入力し、実数の加算、減算、乗算、除算と
整数の加算、減算、乗算、除算、剰余算を表示するプログラムを作りなさい。
なお、整数の値は(入力せずに)実数値を整数値に変換して用いなさい。

[実行例]

a b = 64.2 22.8 <--- ここで2つの実数値を入力
a=64.19997, b=22.799999
a + b = 86.999996
a - b = 41.399998
a * b = 1463.759881
a / b = 2.815789
ia=64, ib=22 <--- この場所で入力した実数値を整数値に変換した値を表示しておく
ia + ib = 86
ia - ib = 42
ia * ib = 1408
ia / ib = 2
ia % ib = 20


お願いします。
500デフォルトの名無しさん:04/11/07 22:51:31
>>498
真摯さが足りん。
君は人の言葉に対して敬意がない。
君は情報をあたえてもらったのだから、そのことに対して「よかったな。」の一言か?
それはあまりに無礼だ。
常識人に常識を教えてもらったらどうだ?
501デフォルトの名無しさん:04/11/07 22:52:49
>>499
#include <stdio.h>
int main(void) {
double a, b;
int ia, ib;
printf("a b = ");
scanf("%lf %lf", &a, &b);
printf("a=%lf, b=%lf\na + b = %lf\na - b = %lf\na * b = %lf\na / b = %lf\n", a, b, a + b, a - b, a * b, a / b);
ia = a; ib = b;
printf("ia=%d, ib=%d\nia + ib = %d\nia - ib = %d\nia * ib = %d\nia / ib = %d\nia %% ib = %d\n", ia, ib, ia + ib, ia - ib, ia * ib, ia / ib, ia % ib);
return 0;
}
502デフォルトの名無しさん:04/11/07 22:56:08
>>499
言語は?

> a b = 64.2 22.8
ここから
> a=64.19997, b=22.799999
何でこうなるの?

> この場所で入力した実数値を整数値に変換した値を表示しておく
切り上げ?切り捨て?四捨五入?
503デフォルトの名無しさん:04/11/07 23:40:27
>>502
低レベルの人は書き込みをご遠慮ください。
504デフォルトの名無しさん:04/11/07 23:43:31
JIS丸めもあるね
505デフォルトの名無しさん:04/11/08 01:06:22
問題は文字型のポインタに数字を5個入れprintfで出力せよというものです。
そこで↓な感じで作りましたがうまくいきません。初心者なのですが、分かりやすい解説お願いします。
下記のとおりな感じでお願いします。
#include <sdio.h>
int mani()
{
char *a;
int i;
scanf("%s",a);
for(i=0;i<5;i++){
printf("c",*a);
a++;}
return 0;
}
506デフォルトの名無しさん:04/11/08 01:07:21
誤<sdio.h>→<stdio.h>
507デフォルトの名無しさん:04/11/08 01:40:27
>>505
まず、「文字型のポインタ」と言う表現をそのままとると、char*ということになる。
君の書いているchar *a;と言うのは、ポインタ型変数の宣言だ。しかし、ポインタとは
あくまである領域を指す値(メモリのアドレス)を入れる場所であって、数字などを入れる
場所ではない。ということは、ポインタだけ作ってやってもそれが指す領域を実際に
作ってやらないと、代入も何もないわけだ。
…とここまで書いてみて、突っ込みどころ満載過ぎてもう何を書いていいのやら。

とりあえずsdio→stdio、mani→main、char *a;→char a[6];、scanf("%s", a);→scanf("%5s", a);、
printf("c", *a);→printf("%c", *(a+i));、a++;→(削除)とすれば動かないではないけれども、
ポインタを使っているとは言いがたい。もうめんどくさいから寝る。
508デフォルトの名無しさん:04/11/08 01:44:11
>>505
ポインタ変数に数字を5個入れるのは無理だが・・・

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

int main()
{
  char *a;
  a = (char *)malloc(sizeof(char)*(5+1)); // とりあえず (5文字+終端文字) 分のメモリを確保

  scanf("%5s",a);  // 入力ストリームから5文字以内で入力
  printf("%s\n",a);  // あとは表示するだけ

  free(a);       // 確保したメモリを解放
  return 0;
}

もしや、配列を使ったほうがいいのだろうか・・・
509デフォルトの名無しさん:04/11/08 01:54:26
ちゅーか
>>505の内容だけでは
問題に沿った解答解説ができない
510デフォルトの名無しさん:04/11/08 02:05:56
#include <studio.h>

int main(void)
{
char *s = "12345";
printf("%s\n", s);
return 0;
}
511508:04/11/08 02:07:16
#include <stdio.h>

int main()
{
  char a[5+1];     // (5文字+終端文字) を格納する配列
  char *p;       // 題意に沿うようにポインタ変数を用意

  p = &a[0];      // 配列の先頭アドレスをポインタ変数に代入
  scanf("%5s",p);   // 5文字以内で入力

  for(i=0;i<5&&p[i]!='\0';i++){
    printf("%c",p[i]);  // 終端文字のところまで1文字づつ表示する
  }

  return 0;
}

これなら、ポインタを使ってると言える・・・よね?
512デフォルトの名無しさん:04/11/08 02:08:22
文字型のポインタに数字を入れることはできません。
513デフォルトの名無しさん:04/11/08 02:09:22
>>510
また斬新な回答を・・・

#include <studio.h>
になってるからネタか?
514デフォルトの名無しさん:04/11/08 02:12:13
もしや、>>510が正解か?
#include <studio.h>は別として
515デフォルトの名無しさん:04/11/08 02:12:35
>>513
全然斬新じゃない。
C言語のプログラミング入門的講義では、まず間違いなく一人はstudio.hと書く。
516デフォルトの名無しさん:04/11/08 04:24:47
>>515
と、言うことはみな「スタジオ」と読んでるのか?
君を含めて( ̄ー ̄)ニヤリッ。
517デフォルトの名無しさん:04/11/08 09:34:50
先生に
スタジオどっとえいち
と習いました
518デフォルトの名無しさん:04/11/08 09:35:08
うるせーよ (゚Д゚) バーヤ バーヤ


ノД`、)
519デフォルトの名無しさん:04/11/08 09:36:58
C言語課題

・「ID」「名前」「年齢」を要素にもつ構造体INFOを作成しなさい。
ただし、名前は動的メモリにて確保するものとする。

・scanf関数から「名前」と「年齢」を入力し、
動的メモリを用いて、どんどん何人分でも追加できていけるソースコードを記述しなさい。

この2つで1つのソースコードです。
よろしくお願いしますー
520デフォルトの名無しさん:04/11/08 09:40:12
>>どんどん何人分でも

不可能
521デフォルトの名無しさん:04/11/08 09:46:30
IDは自動採番やろか。
522デフォルトの名無しさん:04/11/08 09:46:52
template <class T> static T abs(T a) { return a > 0 ? a : -a; }

のtemplate <class T> static T abs(T a)って何を意味しているんですか?
523デフォルトの名無しさん:04/11/08 09:53:30
任意の型であるTという型のaというパラメータを採るabsという名前のTという型の値を返す静的なテンプレート関数。
524519:04/11/08 11:17:25
IDは連番数字です
525デフォルトの名無しさん:04/11/08 11:44:48
>>516
どう呼んでいようが聞いていない学生はいるものだ。
526デフォルトの名無しさん:04/11/08 12:56:18
>>519 少し長いので2回に分ける
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct INFO { int id;char* name;int age; };
static int Use = 0;
static int Max = 0;
static INFO* info = NULL;
static int add( char* name, int age )
{
INFO* tmp;
if( Use >= Max ) {
Max += 32;
tmp = (INFO*)malloc( sizeof( INFO ) * Max );
if( ! tmp )return 0;
if( info ) {
memcpy( (void*)tmp, (void*)info, sizeof( INFO ) * Use );
free( (void*)info );
}
info = tmp;
}
info[Use].id = Use;
info[Use].name = (char*)malloc( strlen( name ) + 1 );
if( ! info[Use].name )return 0;
strcpy( info[Use].name, name );
info[Use].age = age;
Use++;
return 1;
}
527526:04/11/08 12:57:09
続き
int main( void )
{
charname[128];
intage, i;
while( 1 ) {
scanf( "%s %d", name, &age );
if( ! strcmp( name, "end" ) )break;
if( ! add( name, age ) ) {
printf( "cannot alloc any more!\n" );
return 1;
}
}
for( i = 0; i < Use; i++ )
printf( "%d: %s (%d)\n", info[i].id, info[i].name, info[i].age );
return 0;
}
528526:04/11/08 13:04:21
なんかつながってしまったとこがあるな。
charname -> char name
intage -> int age
名前を end にすると終了して入力されたのを表示する。(それぐらい判るか)

529デフォルトの名無しさん:04/11/08 16:10:58
C言語で、x円借金して年利yで毎月z円返済して、
返却を完了する月とその月の返却額を計算するプログラムを教えてください。
530デフォルトの名無しさん:04/11/08 16:21:10
>>529
クレ板にイケ
531デフォルトの名無しさん:04/11/08 16:22:27
収入が無く返済できず自己破産で糸冬 了..._〆(゚▽゚*)
532デフォルトの名無しさん:04/11/08 16:33:28
お願いしますよ〜
533デフォルトの名無しさん:04/11/08 16:38:07
じゃあまず算数でそれを表現してみては?
いくらなんでもそれぐらいはできるだろ?
534デフォルトの名無しさん:04/11/08 16:46:42
#include <stdio.h>
void main()
{
    
int x,y,z;
int nokori;
int tuki;
int i;
int hensai;
tuki = 1;
printf("借金の金額:\n");
scanf("%d",&x);
printf("年利:\n");
scanf("%d",&y);
printf("月の返済額:\n");
scanf("%d",&z);
nokori = x;
while(nokori>0)
{
 for(i=0; i<12; i++,tuki++){
  nokori -= z;
  if(nokori <= 0)
  { break;}
 }
 nokori=nokori+x*y/100;
 if(nokori >= x || tuki > 1000) {printf("欝だ氏のう"); return;}
}
hensai = nokori+z;
printf("月:%d 返済額:%d\n",tuki,hensai);
return;
}
535デフォルトの名無しさん:04/11/08 16:59:45
直しておこう

while(nokori>0)
{
 for(i=0; i<12; i++,tuki++){
  nokori -= z;
  if(nokori <= 0)
  { goto yatta;}
 }
 nokori=nokori+x*y/100;
 if(nokori >= x || tuki > 1000) {printf("欝だ氏のう"); return;}
}
yatta:

たまにはgotoを
536デフォルトの名無しさん:04/11/08 17:01:40
void main
537デフォルトの名無しさん:04/11/08 17:03:08
おいらの人生終了..._〆(゚▽゚*)
538デフォルトの名無しさん:04/11/08 17:10:17
gotoを出すならgotoの問題もちゃんと教えとけ
goto推奨みたいに受け止められたらかなわん
539デフォルトの名無しさん:04/11/08 17:27:48
>>534
ありがとうございます。参考になりました。
540デフォルトの名無しさん:04/11/08 17:35:04
gotoはソース見づらくなるから、あまり使わないほうがいいらしいです

あとwhileの中とか直しといて
541デフォルトの名無しさん:04/11/08 17:53:33
多重ループやswitchから抜け出すための goto なら禿も推奨している
542デフォルトの名無しさん:04/11/08 17:54:27
リストの結果を逆順に表示するように表示関数を書き直す
って問題なんですが、教えて頂けますでしょうか?
void print(List *p) {
int i;
printf("(");
for(i=0; i<size(p); i++) {
printf("%d",get(p,i));
if (i < size(p)-1) printf(",");
}
printf(")\n");
}
543デフォルトの名無しさん:04/11/08 18:00:22
>>541
禿って誰ですか?
544デフォルトの名無しさん:04/11/08 18:06:10

void print(List *p) {
int i;
printf("(");
for(i=size(p)-1;i >=0 i--) {
printf("%d",get(p,i));
if (i !=0) printf(",");
}
printf(")\n");
}
545デフォルトの名無しさん:04/11/08 18:08:41
546542:04/11/08 18:11:52
>>544
さんくすです、できますた。
547541:04/11/08 18:15:45
>>545
ワロタ

漏れが言ったのはまあこいつのことだが、上級者には違いねぇ
http://pc5.2ch.net/test/read.cgi/tech/1095113801/
548541:04/11/08 18:16:42
間違えたorz
http://www.research.att.com/~bs/←こいつ
549デフォルトの名無しさん:04/11/08 18:34:38
>>543
Bjarne Stroustrap(C++の作者)のこと
550デフォルトの名無しさん:04/11/08 21:16:44
>>549
そいつバカ
551デフォルトの名無しさん:04/11/08 22:02:53
すみません、また質問なのですが、

/* index番目にvalueを挿入する */
void insert(List *p, int index, Item value) {
int i;
if (index < 0) return;
while (index >= size(p)) add(p,nil);
for (i = size(p)-1; i > index; i--)
set(p, i, get(p, i-1));
set(p, index, value);
}

とあるのですが、例えば
s(セット)で
1
5
(0,5)
とした場合、i(インサート)で
1
4
と入力すると、
(0,4)
となってしまうのですが、
(0,4,5)
と表示させるためにはどうしたらいいんでしょうか?
よければおしえてください…。
552デフォルトの名無しさん:04/11/08 22:09:14
( @盆@)
553デフォルトの名無しさん:04/11/08 22:10:44
>>551
それだけでは、情報不足でなんともいえない。
考えられることは。

(1) インサート処理がうまくされていない。(setのバグ)。
4のうしろのちゃんと5がリンクされているかどうか確認汁。

(2) 表示ルーチンのバグ。
ちゃんと0-4-5 とリストは出来ているが、全部表示できていない。


どっちかだろうな。
554デフォルトの名無しさん:04/11/08 22:11:23
sとかiとかって一体何だ。エスパーじゃないんだから何を指しているのか、
全ソースを示すなりしなければ何も相手に通じないぞ。
555デフォルトの名無しさん:04/11/08 22:12:42
void insert(List *p, int index, Item value) {
int i;
if (index < 0) return;
add(p,nil);
for (i = size(p)-1; i > index; i--)
set(p, i, get(p, i-1));
set(p, index, value);
}
でどうよ?
556デフォルトの名無しさん:04/11/08 22:15:46
>>555
なんでそう思ったのか、興味あるな。

関係なさげだが・・。
557デフォルトの名無しさん:04/11/08 22:18:46
>>553
試したんですけど、やっぱり見えていない部分の数字は消えていました・・。

>>555
すごいっす!できました。
ありがとうございます!

>>554
すみません・・。
558デフォルトの名無しさん:04/11/08 22:19:57
それでいいのか・・。何でだ?
559555:04/11/08 22:25:06
既に>>551は見てないだろうけど>>556のために。
indexの場所によらずサイズが増えるので while(index>=size(p)) は不要。
ただし消したせいでindex > size(p)+1 の場合バグになると言う罠…ということに気付いたのは今。
と言うことでリトライ。
void insert(List *p, int index, Item value) {
int i;
if (index < 0) return;
add(p,nil);
while (index >= size(p)) add(p,nil);
for (i = size(p)-1; i > index; i--)
set(p, i, get(p, i-1));
set(p, index, value);
}
…元のと混合しただけ。
560デフォルトの名無しさん:04/11/08 22:33:04
注釈つけ忘れ
add(p,nil); // 最低1つ追加
while (index >= size(p)) add(p,nil); // 足りなければその分追加
561551:04/11/08 22:36:58
>>559,560
みてますよ〜。馬鹿ですが、自分でも頑張ってみます^^
ありがとうございます。
562デフォルトの名無しさん:04/11/08 22:43:32
リストのなかに未使用ノードある場合、addしなくてもいいように思えたんだけど、
必ずaddしないとならないのか・・・。

setのつくりが分からんから、確かなことは分からないけど。
563551:04/11/08 23:13:17
すみません、setのつくりも載せておきます。

/* index番目の要素をvalueとする */
void set(List *p, int index, Item value) {
if (index < 0) return;
if (index >= p->N) {
insert(p, index, value);
return;
}
p->data[index] = value;
}
564デフォルトの名無しさん:04/11/09 00:16:52
dx/dt=V, dV/dt=-kx 初期条件x0=1, V0=0をadaptive runge kutta法
を用いて,0.0 <= t <= 10.0 の範囲で定数 k を 0.1 単位で 0.1 から
10.0 まで変えて変えて x の挙動を見なさい。

以下のプログラムを参考にしなさい。
http://gcc.gnu.org/ml/gcc-bugs/2000-03/msg00912.html
お願いします。
565マイク ◆yrBrqfF1Ew :04/11/09 05:12:55
>>500
あんだって?
566デフォルトの名無しさん:04/11/09 05:56:38
1,タナカ,キムラ,スズキ
2,ササキ,タムラ,アオキ
3,シムラ,カトウ,タカギ
(↓つづく)



半角数字につづき名前が並んだ、
カンマで区切られたN行4列のname.txtがあるとして、
このファイルを読み込み文字配列char yasai[128][4]に入れなさい。
ファイルのテキストの行数は128未満であるとする。
C言語です。お願いします。
567デフォルトの名無しさん:04/11/09 07:16:04
↑問題が変。
char* yasai[128][4]; に入れるなら可能だが...
568566:04/11/09 07:31:15
すいません、それでお願いします。
569デフォルトの名無しさん:04/11/09 08:29:16
↑1度に書けないので分割
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void) {
char*ya[128][4];
FILE*fp;
inti,j;
charbuf[1024];
char*ptr;

for( i = 0; i < 128; i++ )
for( j = 0; j < 4; j++ )
ya[i][j] = NULL;
fp = fopen( "name.txt","rt" );
i = 0;
while( i < 128 && fgets( buf, 1023, fp ) ) {
j = 0;
ptr = strtok( buf, ",\n" );
while( j < 4 && ptr ) {
ya[i][j] = (char*)malloc( strlen( ptr ) + 1 );
strcpy( ya[i][j], ptr );
j++;
ptr = strtok( NULL, ",\n" );
}
i++;
}
fclose( fp );

570569:04/11/09 08:29:51
i = 0;
while( ya[i][0] && i < 128 ) {
j = 0;
while( ya[i][j] && j < 4 ) {
printf( "%s\t", ya[i][j] );
j++;
}
printf( "\n" );
i++;
}
return 0;
}
571569:04/11/09 08:31:50
一部くっついた
inti -> int i,
charbuf ->char buf
572デフォルトの名無しさん:04/11/09 10:55:36
Cです。お願いします。

直線P1(1,4),P2(3,0)の二点を入力し、この直線に直行する
直線を求めよ。
1点目のX座標= =>1
1点目のY座標= =>4
2点目のX座標= =>3
2点目のY座標= =>0
直線の式は Y=0.50X + 1.00です。
573デフォルトの名無しさん:04/11/09 11:07:33
二点に直行する直線って何だ?
二点を結ぶ直線なら一意に決まるが、それに直交する直線なら無数にあるわけだが。
574デフォルトの名無しさん:04/11/09 11:09:45
>>573
ハズイ奴
575デフォルトの名無しさん:04/11/09 11:10:15
>>569
あんた、変数の定義のときにタブを入れる癖があるだろ。
だせぇからやめようぜ。
576デフォルトの名無しさん:04/11/09 11:11:43
>>573
プッ
577デフォルトの名無しさん:04/11/09 11:11:59
>>575
なんでだせぇの?
578デフォルトの名無しさん:04/11/09 11:17:18
>>577
メリットがねぇだろ。
579デフォルトの名無しさん:04/11/09 11:23:16
>>578
デメリットはあるのか?
580デフォルトの名無しさん:04/11/09 11:27:12
>>578
位置をそろえるのに使ったら見やすいよ
581デフォルトの名無しさん:04/11/09 11:36:45
>>575
おまえさんのソース提供だけは断るYO
>>578
メリット:
タブ幅のスペースを\t(タブ)に変更したらサイズが小さくなる
>>580
デメリット:
582デフォルトの名無しさん:04/11/09 11:40:59
俺も変数宣言にタブ文字使うんだけど、
ナウでヤングな若者の感覚じゃダサイのか。
583デフォルトの名無しさん:04/11/09 11:56:41
位置を揃えるなんて考えがださいっつーの。
int, doubleくらいならいいが、const char * も揃えるのか?
くだらねぇ。

あ、インデントにタブを使うなら賛成。つーか、スペースを4つも入れるな。
584575ではないけど:04/11/09 12:03:00
タブ幅が違うと悲しい結果にはなる気もする。
それにタブって機種依存しなかったっけ?記憶が薄いが。

>>581
ファイルサイズなんて・・・
まあプロポーショナルフォントを常用する人にはメリットがでかい気もする。


そんな俺はインデントにタブ使う。orz
585デフォルトの名無しさん:04/11/09 12:04:44
インデントは位置揃えに入らないのかと問い詰めたい。
586デフォルトの名無しさん:04/11/09 12:23:11
FORTRAN70です。お願いします。

ある数xとyのそれぞれの約数とxとyの最大公約数、そして最小公倍数を計算しなさい。

ただし、関数副プログラムまたはサブルーチン副プログラムのどちらかを用いること。
587デフォルトの名無しさん:04/11/09 12:26:50
>>586
ほほぅ。C/C++言語のスレでFORTRANか。狂ってるな。
588デフォルトの名無しさん:04/11/09 12:40:42
インデントはスペース
プログラマなら常識
589569:04/11/09 12:46:05
>>575
ここで晒すソースにタブ使わないほうが良いのは確かだな。
>>583
const char* どころか CLongLongNameClass とかが有っても揃えてるな。
見た目で変数名定義が揃ってると気持ち良いので...そろそろ止めようかとも思うけど。
590569:04/11/09 12:49:38
スレ違いの話題だが、目立系でタブ使用禁止のサイトあったな。
vi のタブ幅を変更できる奴が居なかったてのが理由なんだが...
591デフォルトの名無しさん:04/11/09 13:29:51
スペースにするとカーソルを移動させる際のキーを押す回数が増えるのがめんどくさい
592デフォルトの名無しさん:04/11/09 13:36:47
そんなエディタを使う(orそんな使い方しかできない)香具師が蛸
593デフォルトの名無しさん:04/11/09 13:43:40
>>587
細かいこと言うなよ。C/C++もFORTRAN70もたいして変わらないだろ。
594デフォルトの名無しさん:04/11/09 13:45:03
>>593
ケチな事言うなよ。お前がスパっと答えればいいだろ。
595デフォルトの名無しさん:04/11/09 13:46:06
FORTRANの問題を板間違えてカキコしてしまいました。すみませんでした
596デフォルトの名無しさん:04/11/09 14:12:34
タブに文句つけてるのは、タブ←→スペースを手で書き換えてる初心者だろ。
整形したきゃ自分でやれ
そんなの人にやらせることか
597デフォルトの名無しさん:04/11/09 14:14:07
>>596
自分が初心者のときそうだったからと言って、他人まで同じだと思わないほうがいいよ。
598デフォルトの名無しさん:04/11/09 14:49:31
とりあえずHomeとEndキーをFnつきにするのは止めて
>>最近のキーボード
599デフォルトの名無しさん:04/11/09 15:19:31
で、結局複数のスペースをカーソルキー(それに順ずるもの)一つで
一度にそのスペース群を飛ばせるエディタなんてあるの?

そもそもそんな挙動してたらタブと変わらんと思うが

>>598
ノートで十字キーのそばにあるならOK
600デフォルトの名無しさん:04/11/09 16:12:48
C言語で、N次元連立一次方程式の解を求めるプログラムを教えてください。
例えばNが3だとしたら、
A1x+A2y+A3z=B1
A4x+A5y+A6z=B2
A7x+A8y+A9z=B3
このAとBの値を入力してx,y,zを出力させるようなプログラムです。
601デフォルトの名無しさん:04/11/09 16:14:33
>>599
vi
emacs
及びその他諸々。
602デフォルトの名無しさん:04/11/09 16:15:13
>>600
先ずはそのような解を求める方法を教えてください。
603デフォルトの名無しさん:04/11/09 16:35:15
>>602
掃き出し法でもAの逆行列をBにかける方法でもなんでもいいです!
604デフォルトの名無しさん:04/11/09 16:43:44
>>603
>602はリア厨以下だからそれを知らないのだよ。
605デフォルトの名無しさん:04/11/09 16:53:43
>600
ここはC/C++の宿題を片付けるスレだ
学校の宿題は自分の机で片付ける方が将来の為だぞ
606デフォルトの名無しさん:04/11/09 16:55:45
>>605
このスレが何故あるのか知らないのか?
607デフォルトの名無しさん:04/11/09 16:57:50
>>605
600はC/C++の宿題じゃないの???
608デフォルトの名無しさん:04/11/09 16:58:44
>605は、>600が算数の問題を解くためにプログラムを作らせようとしていると思ったんジャマイカ。
609デフォルトの名無しさん:04/11/09 17:00:04
そんなばなな
610デフォルトの名無しさん:04/11/09 17:06:47
暇人だった
書き込めればなんでもよかった
いまは反省しているΛ||Λ
611デフォルトの名無しさん:04/11/09 19:46:07
Cです、お願いします。

キーボードから入力したの実数のビット列を表示するプログラムを作文しなさい
(32ビット表示し、4ビットごとにスペースで区切る)
612デフォルトの名無しさん:04/11/09 19:48:20
作文かい。
613デフォルトの名無しさん:04/11/09 19:52:25
(´-`).。oO(ここは質問の仕方を教えるスレじゃないんだけどな…)
614デフォルトの名無しさん:04/11/09 19:55:26
ビットパターンの出力なんてわざわざCでやる必要はない
Javaならデフォルト関数で一発だ。ハイ解決
615デフォルトの名無しさん:04/11/09 19:59:33
   「プログラム」
              ろく いちいち
 きょう、キーボードからにゅうりょくした
じっすうのビットれつをひょうじするプロ
グラムがしゅくだいにでた。じょうけんと
して32ビットひょうじし、4ビットごとにス
ペースでくぎるようにいわれた。
616611:04/11/09 20:04:12
[1] 授業単元:C言語演習
[2] 問題文(含コード&リンク):
キーボードから入力した実数のビット列を表示するプログラムを作文しなさい
(32ビット表示し、4ビットごとにスペースで区切る)
[原文通りです]
[3] 環境
 [3.1] OS:Windows Me
 [3.2] コンパイラ(バージョン):Borland C++ 5.5.0
 [3.3] 言語:C
[4] 期限:2004年11月12日15:00まで
[5] その他の制限:ありません
617デフォルトの名無しさん:04/11/09 20:07:49
ビットにして表示するなんて荒業以外方法あるのだろうか
ちょっと興味がある…
618デフォルトの名無しさん:04/11/09 20:09:15
あまりにも簡単な宿題を丸投げしてて、先々自分が困ると思わねーの?
619デフォルトの名無しさん:04/11/09 20:11:50
ここは宿題を片付けるスレであって
初心者に手取り足取り教えてやるすれではないんだけどな・・・・・・(´-`)y-┛~~
620デフォルトの名無しさん:04/11/09 20:30:26
>>613,619
じゃ、お前がやってあげればいいじゃん♪
621デフォルトの名無しさん:04/11/09 20:51:31
int xtob(unsigned int n)
{
int i, j;
for(i=31;i>=0;i++){
for(i=0;i<4;i++){
if(0x80000000 & n){
putchar('1');
}else{
putchar('0');
}
n <<= 1;
}
putchar(' ');
}
putchar('\n');
return 0;
}
622621:04/11/09 20:52:47
どっか間違いがあるけどバグ取りくらいしてくれるよな
どこが悪いかくらい自分で考えてね
623デフォルトの名無しさん:04/11/09 21:01:51
うわ、だっせぇ、問題もまともに読めないのに偉そうに「自分で考えてね」なんて書いちゃってるよこの人。
624デフォルトの名無しさん:04/11/09 21:07:30
625611:04/11/09 21:10:43
>>617-619
申し訳ありませんでした
やはりもう少し自分で考えてみます。
>>621
ありがとうございました。参考にさせていただきます
626デフォルトの名無しさん:04/11/09 21:13:13
タブは(広義の)環境依存だから使わない方がいいよ。
空白なら、等幅フォントの場合絶対ずれないし。
627デフォルトの名無しさん:04/11/09 21:23:05
>>625
おいおい、問題文が正しいなら実数だろ?
>621は整数だぞ。
628デフォルトの名無しさん:04/11/09 21:23:10
; orz
(setq-default indent-tabs-mode nil)
629デフォルトの名無しさん:04/11/09 21:26:58
だから、インデント以外でタブを使うからずれるんだって。
インデントで使うなら4カラムごとだろうが8カラムごとだろうが問題ないっしょ。
630デフォルトの名無しさん:04/11/09 21:37:40
スペース使っても固定ピッチじゃなきゃずれるけどな
631デフォルトの名無しさん:04/11/09 23:35:11
#include <stdio.h>
#include <string.h>
int main(){
int n,i,j;
float f;
unsigned char b[4],msk;
printf("数字をいれろ> ");fflush(stdin);
n = scanf("%g",&f);
if(n!=1){printf("嫁寝ーよ\n");exit(1);}
printf("\n 28 24 20 16 12 8 4 0\n");
memcpy((void *)b,(void *)&f,4);
for(i=3;i>=0;i--){
msk = (1 << 7);
for(j=7;j>=0;j--){
if(b[i] & msk)printf("1");
else printf("0");
if(!(j%4))printf(" ");
msk >>= 1;
}
}
printf("\n");
return 0;
}
632デフォルトの名無しさん:04/11/09 23:37:41
このスレじゃバカでも解答者になれるのか
633再挑戦:04/11/09 23:39:19
#include <stdio.h>
#include <string.h>
int main(){
  int n,i,j;
  float f;
  unsigned char b[4],msk;
  printf("数字をいれろ> ");fflush(stdin);
  n = scanf("%g",&f);
  if(n!=1){printf("嫁寝ーよ\n");exit(1);}
  printf("\n  28   24   20   16   12    8    4    0\n");
  memcpy((void *)b,(void *)&f,4);
  for(i=3;i>=0;i--){
    msk = (1 << 7);
    for(j=7;j>=0;j--){
      if(b[i] & msk)printf("1");
      else printf("0");
      if(!(j%4))printf(" ");
      msk >>= 1;
    }
  }
  printf("\n");
  return 0;
}
634>>611:04/11/10 00:48:43
タブが潰れてるけど勘弁な

#include<stdio.h>
int main(){
unsigned char buf[4];
char *table[] = { "0000 ","0001 ","0010 ","0011 ",
"0100 ","0101 ","0110 ","0111 ",
"1000 ","1001 ","1010 ","1011 ",
"1100 ","1101 ","1110 ","1111 "};

scanf("%f", (float *)buf);
printf("%s%s%s%s%s%s%s%s\n",table[buf[3]/16], table[buf[3]%16],
table[buf[2]/16], table[buf[2]%16],
table[buf[1]/16], table[buf[1]%16],
table[buf[0]/16], table[buf[0]%16]);
return 0;
}
635634:04/11/10 00:50:15
いちおうリトルエンディアン用、SUNとかには0123の順で表示さしてくれい。
636デフォルトの名無しさん:04/11/10 01:02:44
>unsigned char buf[4];

unsigned char buf[sizeof(float)];
後はループで
637デフォルトの名無しさん:04/11/10 01:03:38
関係ないけど、判定関数。

int is_little_endian(){
char ch[2];
*(int*)ch = 1;
return ch[0] == 1;
}
638デフォルトの名無しさん:04/11/10 01:05:40
あ、int のバイト数無視してた。
639デフォルトの名無しさん:04/11/10 01:53:39
>>611
これで良いと思うのだが...
『入力した実数のビット列を表示する』って書いてるからバイトオーダーなんか意識
する必要ないのでは?

#include <stdio.h>
#include <string.h>
int main( void )
{
int a, i;
float b;

scanf( "%f", &b );
memcpy( &a, &b, sizeof( int ) );
for( i = 0; i < 32; i++ ) {
printf( "%d", ( a & 0x80000000 ) / 0x80000000 );
a <<= 1;
if( i % 4 == 3 )
printf( " " );
}
return 0;
}
640デフォルトの名無しさん:04/11/10 02:05:21
>>410
亀レスだが一つだけ逝っておきたいことがある

のっとふぁうんど

でした。すいませんごめんなさいもうしません。゚(゚´Д`゚)゚。

641600:04/11/10 02:21:55
どなたか>>600の課題を・・・orz
642デフォルトの名無しさん:04/11/10 02:25:13
>>641
掃き出し法
643デフォルトの名無しさん:04/11/10 03:39:15
>>641
ここから自分で探せ。
ttp://www.mscom.or.jp/~tog/anna/
ヒント
ttp://www.mscom.or.jp/~tog/anna/LEQ2.C

但し、ガウスの消去法の途中でピボットが0になったら当然エラーになるから
ttp://www.mscom.or.jp/~tog/anna/LEQPTR6.C

のような完全ピボット選択法がよく使われる。しかし実際には部分ピボット選択
で十分な事が多いので、ぐぐれ。
644デフォルトの名無しさん:04/11/10 03:59:31
>>641
アルゴリズムはそこらじゅうに落ちてたから、後でトリッキーなコード
考えてみる。一日ほどまたれい。
645デフォルトの名無しさん:04/11/10 04:12:53
646デフォルトの名無しさん:04/11/10 07:43:50
for(t=0;t<10;t++)
num[t]=0; /* 配列fをクリヤー*/
while((ch=fgetc(fin))!=EOF) /* 1行読む*/
{
if(isdigit(ch))
num[ch-48]+=1; /*listの48番目に1を足す*/
}

for(t=0;t<10;t++)
fprintf(fout,"%c :%4d\n",t+48,num[t]);

数字を抽出して出力するプログラムですが、
これの後に、a-zA-zそれぞれをislower isupper を使って、上と同じようにfor whileでプログラムを作ったら、出力されるのは数字部分だけですよね。
数字、英小文字、英大文字を抽出して出力するにはどうすればいいでしょうか?

for(t=0;t<10;t++)のあとの出力で終わらないようにしたいのですが。
647デフォルトの名無しさん:04/11/10 07:44:18
ageます
648デフォルトの名無しさん:04/11/10 08:21:21
↑特定文字の出現回数を抽出するんだろ。
num[256] にして全文字の出現回数を取得→見たい文字だけ出力
が一番普通で早いと思うぞ。
お前さんのはトリッキー。
649デフォルトの名無しさん:04/11/10 08:35:48
>>648
どうもです。やってみます。
650デフォルトの名無しさん:04/11/10 08:36:42
あれだ。「コメントが無いほうがマシ」ってのの例だな。
問題の内容さえ理解していないのがワラッタ。

int num[256];
for(t=0;t<256;t++)num[t]=0;
while((ch=fgetc(fin))!=EOF){/*1文字読む*/
&bpsp;&bpsp;num[ch] += 1; /* 文字に対応したカウンタを1増やす*/
}

/* 大文字小文字といわず、記号も含めて吐きだす */
for(t=33;t<=126;t++) fprintf(fout,"%c :%4d\n",t,num[t]);
651デフォルトの名無しさん:04/11/10 08:54:46
>>650
そういえばコメント消すの忘れてたw
ハズカシ
652デフォルトの名無しさん:04/11/10 09:17:07
このプログラムではコンパイルが通りません
バグを教えて下さいお願いします。



http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html#1
653デフォルトの名無しさん:04/11/10 09:24:50
>>652
タイミング的にこれかな?
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=328

他人に余計な手間掛けさせるなや。
654余りにも単純なTypoだ:04/11/10 09:27:31
>>652
>・エラーは、その行とエラーの詳細を書きましょう。
>エラーメッセージが出た場合はそのままコピーしてください。
つーか、>1を100辺くらい読め。

そして己の書いたソースを穴が開くほど読め。
655ネムー:04/11/10 11:54:44
質問です。
フーリエガラーキン法を用いて、ガウシアンパルスf(x)=exp(-100*x^2)を
微分するプログラムを教えて下さい。
xの範囲は-1〜1で、f(x)の値としてはガウシアンパルスを
128等分した離散値を使うものとしてください。

言語はC++でコンパイラはボーランドC++コンパイラーです。
GNU Scientific Libraryが移植済みです。
656デフォルトの名無しさん:04/11/10 16:11:14
C言語の宿題です。
2桁以上の任意の整数を入力して、数字の桁を入れ替えるプログラムを作る問題です

例…1234→4321

誰かお願いします
657デフォルトの名無しさん:04/11/10 16:17:16
>>656
#include <stdio.h>
int main() {
int in,out,wk;
scanf("%d",&in);
wk = in;
out = 0;
while(wk)
{out = (out * 10) + wk % 10;
wk /= 10;
}
printf("%d %d",in,out);
return 0;
}
手抜きして作ったので自分で修正してくれ
658デフォルトの名無しさん:04/11/10 16:26:37
>>656
#include <stdio.h>
#include <string.h>

int main()
{
char buf[64];
size_t i;

printf("2桁以上の整数を入力: ");
scanf("%s", buf);

i = strlen(buf);
while( i > 0 )
printf("%c", buf[--i]);
printf("\n");

return 0;
}
659デフォルトの名無しさん:04/11/10 16:30:59
[1] 授業単元:C言語実習1
[2] 問題文(含コード&リンク):http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=329
[3] 環境
 [3.1] OS:WinXP SP2
 [3.2] コンパイラ(バージョン):Microsoft Visual Studio .NET 2003
 [3.3] 言語:C
[4] 期限:2004年11月17日23:59まで
[5] その他の制限:なし

よろしくお願いします。
660デフォルトの名無しさん:04/11/10 17:55:53
>>659
過去ログ嫁( ゚Д゚)ゴルァ!!
661デフォルトの名無しさん:04/11/10 17:57:12
>>660
何怒ってるでちゅか(プ
662526:04/11/10 18:14:00
漏れ >>660 じゃないけど気持ちは解る。
ほとんど同じ様な問題に解答したので...

もっとも >>659 にはそれを直すだけの力も無さそうだけどな。
今回は別な人が答えてやんなよ。
663デフォルトの名無しさん:04/11/10 18:19:34
この問題1から順にやればできるようになってる
よって順番にやって詰まってからもう一回鯉
664デフォルトの名無しさん:04/11/10 18:27:48
↑しかし、この問題を1から順番にやるとなると最初は main() に全処理書くことに
なりそうだな。

こうゆう学校を出た奴がKStep関数を書くのか?
665デフォルトの名無しさん:04/11/10 19:21:58
Cの課題です。
1.N×N行列の行列式を求めるプログラムを作成。
  Nはプリプロセッサで指定する。数値は初期値で設定する。
  不要な演算をしないようにする。たとえば0となっている要素に掛けたりすること
  エラー(計算結果にNaNとう値)が出ないようにする。
2.1のプログラムを参考して、逆行列を求めるプログラムを作成。
  行列式の値が0なら適切なメッセージを表示して、計算を中止する。
  それ以外は逆行列を表示する。

お願いします。
666デフォルトの名無しさん:04/11/10 19:37:10
行列式の求め方かいて
逆行列の求め方かいて
667デフォルトの名無しさん:04/11/10 19:39:47
>>665
>>643を探せ。
668デフォルトの名無しさん:04/11/10 19:42:31
失礼。行列式の求め方はガウスの消去法の前進消去のみで求まる。
ttp://www.mit.msn.to/matrix/determinant.html
669デフォルトの名無しさん:04/11/10 19:52:40
C言語でn×n行列のAとBの二乗平均誤差を計算をしたいのですが
どなたかわかりませんか?

式は
1/(n^2)×{Σ(A−B)^2}の平方根
で、Σの範囲は1≦i≦nです。
A及びBはA[1][1]、A[1][2]、・・・A[1][n]、A[2][1]、A[2][2]、・・・・A[n][n]
というように変化して計算いくものとします。
670665:04/11/10 20:30:59
ありがとうございます。参考になりました
671デフォルトの名無しさん:04/11/10 20:49:10
【宿題】
Σ(a_i - b_i)^2 を計算する場合と、
Σ(a_i^2 + b_i^2) - 2Σ(a_i * b_i) を計算する場合とでは、
どちらが誤差が大きくなりますか?
672デフォルトの名無しさん:04/11/10 21:05:46
>>671
符号による
673671:04/11/10 21:06:44
>>672
a_i と b_i は正の数で、近い値の場合はどうなりますか?
674デフォルトの名無しさん:04/11/10 21:07:45
675デフォルトの名無しさん:04/11/10 21:10:33
>>673
差を取ると桁落ちする
0.1234 - 0.1232 = 0.0002
有効数字 4桁 ⇒ 1桁
676611:04/11/11 00:38:24
課題が完了しました
ご指導くださった方々ありがとうございました
677デフォルトの名無しさん:04/11/11 10:32:55
なんか別のスレにも質問あがっているみたいですが、
どうやら同じ課題を与えられている人らしいです…

[1] 授業単元:データ構造とアルゴリズム
[2]問題:

標準入力からテキストファイルを読み込み、行を短い順に出力しなさい。
但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い出力し、
空行は出力しないで下さい。また、同じ長さの行は入力した順番に出しなさい。

なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存しなければなりません。勝手な上限を設けてはいけません。

実行例

入力
Windows XP
Power Mac G5
Unix SVR4

出力
Unix SVR4
Windows XP
Power Mac G5

[3] 環境:
 [3.1] OS:WinXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:2004年11月24日
[5] その他の制限:

どなたかわかる方はご教授くださいm(__)m
678ネムー:04/11/11 10:39:16
質問です。
・1次元配列で与えられた離散データをFFT(高速フーリエ変換)する
プログラムを教えて下さい。
・配列で与えられた離散データをFFTして、ikかけて
逆FFTすると微分値が求まるらしいので、その方法を教えて下さい。
OS;Windows XP
言語;CかC++
コンパイラ;ボーランドC++コンパイラ
です。
よろしくお願いします。
679デフォルトの名無しさん:04/11/11 10:59:30
>>678
俺も眠いから無理。
それに高速ふーりえ変換の方法も知らないし。
と、ゆうことで自分で調べるかネ申でもまってて。
680デフォルトの名無しさん:04/11/11 11:25:22
>>678

> 1次元配列で与えられた離散データをFFTするプログラム

www.fftw.org か
http://momonga.t.u-tokyo.ac.jp/~ooura/index-j.html から
ダウンロード汁!

> 配列で与えられた離散データをFFTして、ikかけて逆FFT
> すると微分値が求まる

...って、もう方法が完全にわかっているじゃないか。
681ネムー:04/11/11 11:31:43
すいません。
方法わかっててもなかなかうまいことかけなくて・・・。
とりあえずダウンロードしてやってみます。
ありがとうございました。
682デフォルトの名無しさん:04/11/11 12:11:28
キボードから入力された英小文字を英大文字にして表示するプログラム
文字列の最大の長さは20まで
それ以外はそのまま表示する
小文字 adc12
大文字 ADC12
683デフォルトの名無しさん:04/11/11 12:41:02
>>682
#include <stdio.h>
int main()
{
 int i;
 char str[21];
 printf("input> ");
 scanf("%20s",str);
 for(i=0;i<20;i++)
 {
  if(str[i]=='\0')break;
  else if(0x60<str[i]&&str[i]<0x7b) str[i]-=0x20;
 }
 printf("%s",str);
 return 0;
}
684デフォルトの名無しさん:04/11/11 12:50:19
>>683
どうもありがとうございました
685デフォルトの名無しさん:04/11/11 12:55:39
同じネタの繰り返しかorz
686デフォルトの名無しさん:04/11/11 13:08:19
任意サイズのリングバッファのアドレス計算
をするプログラムを作れ。

687デフォルトの名無しさん:04/11/11 13:10:26
>>683
tolower使うべき
688デフォルトの名無しさん:04/11/11 13:29:27
>>686
命令寸奈
689686:04/11/11 13:33:04
>>688
ごめんなさい。問題文がそうだったので・・・
改めまして
問題:任意サイズのリングバッファのアドレス計算
   をするプログラムを作りましょう。
以上、宜しくお願いします。
690デフォルトの名無しさん:04/11/11 15:37:38
>>689
アドレス計算
の意味がわからんのは俺だけか?
691デフォルトの名無しさん:04/11/11 15:38:46
俺もわかんね
692デフォルトの名無しさん:04/11/11 15:45:14
おらもわかんね
693デフォルトの名無しさん:04/11/11 15:55:50
授業に出席していない>>689もわからないにイピョーウ
694デフォルトの名無しさん:04/11/11 17:52:51
リングバッファの末尾のポインタを求めればいいんじゃないの?
695デフォルトの名無しさん:04/11/11 17:58:45
リングバッファは通信系でよく使うな。
なに。そんなに難しいものではない。
696デフォルトの名無しさん:04/11/11 18:03:08
では“アドレス計算”どぞー
697デフォルトの名無しさん:04/11/11 18:12:29
2問お願いします
「キーボードから入力された10進数を、2進数として出力するプログラムを作りなさい。
2進数への変換は、キーボードから入力された10進数を2で0になるまで割り、余りを逆の順番で並べる方法を用いる。
ただし、入力は正の整数で最大値は16383(すべてが1である14桁の2進数)とする。

「キーボードから和暦(英文字に続く文字)を入力したとき、西暦年を出力するプログラムをつくりなさい。
ただし、明治はmまたはM,大正はtまたはT,昭和はsまたはS、平成はhまたはHとし、数字は必ず2桁で入力するものとする。
たとえあ平成7年の場合はh07またはH07to入力すること。
698デフォルトの名無しさん:04/11/11 18:13:57
修正)最後の行の「またはH07to入力すること。」は「またはH07と入力すること。
」です。
お願いします。
699デフォルトの名無しさん:04/11/11 18:16:14
mtshMTSHは全角?
700デフォルトの名無しさん:04/11/11 18:26:42
>>697
本人がもういないようなのでこの質問はキャンセルされました。
701デフォルトの名無しさん:04/11/11 18:30:05
>>699
スミマセン。mtshMTSHは半角でお願いします
702デフォルトの名無しさん:04/11/11 18:43:09
  . ∩_∩ ;
  ; | ノ|||||||ヽ `
 , / ● ●|  
 ;, |\( _●)/ ミ
; 彡、| |∪| |、\ ,
 ./  ヽ/> ) :
(_ニニ>/ (/ ;
;  |   | ;
'  \ヽ/ / :
,  //\\ .  
;  し’ '`| | 
703デフォルトの名無しさん:04/11/11 19:23:47
というかそんな簡単なのもできないで大丈夫か?
704デフォルトの名無しさん:04/11/11 19:27:07
簡単言うならちゃちゃっとやってやれ
705デフォルトの名無しさん:04/11/11 19:29:47
>>730
当方、初心者なので。。申し訳ありません。
706デフォルトの名無しさん:04/11/11 19:36:51
>>705
答える気が失せた。ここ言って修行してこい
http://pc5.2ch.net/test/read.cgi/prog/1096909647/
707デフォルトの名無しさん:04/11/11 19:57:39
嫌です。
>>706様に教えて欲しい
708デフォルトの名無しさん:04/11/11 19:59:19
>>707
以前に出たような質問をするなよ。
過去ログでも参照しとけ。
709デフォルトの名無しさん:04/11/11 20:02:42
707は当方ではないので、お願いします。
当方、この場での質問は初めてなので>>708様がおっしゃっているのは別の方だと思います。
回答のほうお願いします
710デフォルトの名無しさん:04/11/11 20:06:20
自分でやりな
できないならできないで、できるとこまでやれ
それから来い
てか、過去ログにあるらしいから探しに行け
711デフォルトの名無しさん:04/11/11 20:08:59
>>697
#include <stdio.h>
#include <limits.h>
int main()
{
char buf[256];
unsigned int d, mask;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int status = sscanf(buf, "%ud", &d);
if (status == 0 || status == EOF) {
continue;
}
for (mask = ~(UINT_MAX >> 1); mask != 0; mask >>= 1) {
if ((d & mask) != 0) {
break;
}
}
if (mask == 0) {
puts("0");
continue;
}
for ( ; mask != 0; mask >>= 1) {
if ((d & mask) != 0) {
putchar('1');
} else {
putchar('0');
}
}
putchar('\n');
}
return 0;
}
712デフォルトの名無しさん:04/11/11 20:11:42
>>706さん、私はどうしてもあなたに教えてほしいのです。
あなたが、このスレ随一のプログラマだということを確信しておりますので。
もちろん、だからといって、あなたが私の”宿題”を引き受けてくれる道理
などはないことも、重々承知しているつもりです。
ですが、私は、自分の宿題を済ませるということだけが、目的というわけではないのです。
私は、あなたのプログラミング能力を、世間に知らしめたいのです。
”こんなにも才能あふれるプログラマが、このスレにはいるんだぞ”ということを
自慢してまわりたいのです。
どうかお願いします。私のささやかな願いをかなえてもらえないでしょうか。
あなたの、プログラムが、いつか世界を救う。
今ではそんな気さえしています。

713デフォルトの名無しさん:04/11/11 20:16:08
・長ったらしい文章
・文中からほとばしる電波
・くどい敬語








ま た 常 識 人 か ! !
714大原ゆき:04/11/11 20:18:04
>>713
違います。
715デフォルトの名無しさん:04/11/11 20:20:02
>>714
誰ですかあなたは?
716デフォルトの名無しさん:04/11/11 20:21:21
時々えらい粘着質な香具師がわくな
宿題をやってもらえず、単位でも落したか?
717デフォルトの名無しさん:04/11/11 20:23:05
>>716
いいから早く宿題やれよ。
718デフォルトの名無しさん:04/11/11 20:27:03
>>716
そんな奴は単位を落として当然だろ。
どうせ学科のゴミの癖にまだ大学にへばり付いて、
なに?粘着した垢?石鹸カス?チンカス?
大学にいても意味ないだろ。
大学の名前に傷がつくどころか、同級生にも迷惑なんだよ。
719デフォルトの名無しさん:04/11/11 20:30:17
>>697
#include <stdio.h>
int main()
{
char buf[256], era;
int year;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int status = sscanf(buf, "%c%d", &era, &year);
if (status == 0 || status == EOF) {
continue;
}
switch (era) {
case 'm': case 'M':
printf("%d\n", year + 1867);
break;
case 't': case 'T':
printf("%d\n", year + 1911);
break;
case 's': case 'S':
printf("%d\n", year + 1925);
break;
case 'h': case 'H':
printf("%d\n", year + 1988);
break;
default:
break;
}
}
return 0;
}
720デフォルトの名無しさん:04/11/11 20:30:38
宿題の内容から言って、工業高校か専門学校だろ
これが大学生の宿題だとしたら終わっとるよ
721デフォルトの名無しさん:04/11/11 20:42:31
#include <stdio.h>
int main()
{
char *a;
int i,k,n10,n1,g,a1,a2,a3;
scanf("%s",a);
for(i=0;i<=3;i++){
if(*(a+i)=='M'||*(a+i)=='m'){
k=1867;
}
else if(*(a+i)=='T'||*(a+i)=='t'){
k=1911;
}
else if(*(a+i)=='S'||*(a+i)=='s'){
k=1925;
}
else if(*(a+i)=='H'||*(a+i)=='h'){
k=1988;
}
a++;
}
for(i=0;i<=3;i++){a--;}
a1=*(a+1);
a2=*(a+2);
printf("西暦%d年",(k+(a1*10)+a2));
return 0;
}
久しぶりのCだができた。と思ったらどこかおかしいので>>697>>727以降を参照しな
早くこの流れを終わらせようぜ
722デフォルトの名無しさん:04/11/11 20:46:02
>>719
自分のやけど、ちょっとよろしゅうないところがあるわ。

> if (status == 0 || status == EOF) {

ここは、『if (status != 2 || status == EOF) {』 やね。
あとswitchのところは、『switch(toupper(era)) {』 でcaseを減らすのもええかも。
is〜()やto〜()の未定義動作が怖いから、あまり使いとうないねんけどな。
723デフォルトの名無しさん:04/11/11 20:46:58
宿題が出る。
煽るやつととくやつが出る。
だらだらする。
また宿題が出る。
マルチということが判明する。
叩く。
また宿題が出る。

ずっと前からこの流れだよ。
724デフォルトの名無しさん:04/11/11 20:49:06
>>721
『a1=*(a+1);
a2=*(a+2);』
のトコ見てみろ
725デフォルトの名無しさん:04/11/11 20:51:10
>>723
まとめページが必要かなぁー にゃんにゃん
726デフォルトの名無しさん:04/11/11 20:51:44
>>char *a;
>>scanf("%s",a);
727デフォルトの名無しさん:04/11/11 20:51:45
>>721
そのプログラムはまずいで。
aにメモリが割り当てられてへんから、スタック破壊される。
あと入力に年号の一文字が無かったときに、動作が不定やわ。
それとこれが一番問題やねんけど、それほんまにまともに動くん?
文字(a1, a2)に対して演算してはるで。
言わせてもらうと、かなりあかんプログラムやわ。作りがひどすぎます。
728デフォルトの名無しさん:04/11/11 20:51:47
てかレス激しいなw
729デフォルトの名無しさん:04/11/11 20:54:58
解答が出たことだし、これにて一件落着!
次の宿題の方、どうぞー
730デフォルトの名無しさん:04/11/11 20:56:19
>>723によれば
次の質問者はマルチだよ。
731デフォルトの名無しさん:04/11/11 20:58:19
氏ねマルチ
732デフォルトの名無しさん:04/11/11 20:59:13
ご主人様ぁ〜
733デフォルトの名無しさん:04/11/11 20:59:31
1問目がまだやんけ
734デフォルトの名無しさん:04/11/11 20:59:34
ほんたま辺りが…
735デフォルトの名無しさん:04/11/11 20:59:54
>>733
719
736デフォルトの名無しさん:04/11/11 21:01:36
>>735
2問お願いします
「キーボードから入力された10進数を、2進数として出力するプログラムを作りなさい。
2進数への変換は、キーボードから入力された10進数を2で0になるまで割り、余りを逆の順番で並べる方法を用いる。
ただし、入力は正の整数で最大値は16383(すべてが1である14桁の2進数)とする。

                   やて
737デフォルトの名無しさん:04/11/11 21:02:23
>>736
自分でやれ。
738デフォルトの名無しさん:04/11/11 21:03:33
>>736
どっかで見た問題
739デフォルトの名無しさん:04/11/11 21:05:00
>>736
「剰余算の結果を逆順で出力」って、全然面白くも何ともないやん。
719で出しとき。あれなら(逆順にするための)バッファもいらんし、なにより美しいわ。
740デフォルトの名無しさん:04/11/11 21:07:55
>>736
すでに誰か回答してたような気が…
741739:04/11/11 21:09:59
>>736
ごめん、間違えてもた。719 ちゃうわ。 711 が答えや。
742デフォルトの名無しさん:04/11/11 21:14:07
題意通りにやらないと失格だよ
743デフォルトの名無しさん:04/11/11 21:14:48
>>739
やっぱ学校は美しさにはこだわってないねん
ま、ほんま汚いプログラになんねやなw
744デフォルトの名無しさん:04/11/11 21:27:19
宿題やっててエラーの原因がわからないってのも貼ってよろしいのでしょうか
745デフォルトの名無しさん:04/11/11 21:30:04
いいんでない
746デフォルトの名無しさん:04/11/11 21:32:00
>>743

課題の意図が理解できない下級高卒プログラマ
747697:04/11/11 21:32:41
697です。
遅レスすみません。なにか私の偽者(?)が多く出没しておりますが。。。
2問目の回答ありがとうございました。
1問目のほうもよろしくおねがいします。>>697参照
748デフォルトの名無しさん:04/11/11 21:42:42
/* やおやさん */

#include <stdio.h>

#define MONEY 1000;

typedef struct
{
char name[20];
int price;
int rest;
int bought;
} yasai;

int main(void)
{
int roop = 1;
int i;
int money = MONEY;
int num;

yasai ve[] ={
{"ninjin", 100, 5, 0},
{"daikon", 150, 5, 0},
{"retasu", 400, 2, 0},
};

printf("(´・д・`)<へいらっしゃい\n");
749744,748:04/11/11 21:44:21
while(roop)
{
printf("残り残金:%d円\n\n", money);
for(i = 0; i < 3; i++)
printf("%d---%s-%d円-%d個持っている-残り%d個/n", i, ve[i].name, ve[i].price, ve[i].bought, ve[i].rest);

printf("何を買いますか? 0:%s 1:%s 2:%s 3:帰る", ve[0].name, ve[1].name, ve[2].name);
scanf("%d", &num);

if(num == 3)
{
printf("(´・д・`)<今後ともごひいきに\n");
break;
}

if(money < ve[num].price)
printf("(´・д・`)<お金が足りないよ\n");
else
{
money -= ve[num].price;
ve[num].rest--;
ve[num].bought++;
}
}

return(0);
}

20,22行目で「ここでは宣言はできない(関数 main )」といわれます
750デフォルトの名無しさん:04/11/11 21:47:53
>>749
20,22って何処だよ
751744,748:04/11/11 21:49:22
上から20行目と22行目です
752デフォルトの名無しさん:04/11/11 21:51:28
#define MONEY 1000;
            ↑
753744,748:04/11/11 21:54:04
>>752
(´・д・`)<愛してます
      今後とも ごひいきに
754デフォルトの名無しさん:04/11/11 22:08:25
>>752
プリプロセッサの悪いところそのままだね。
755デフォルトの名無しさん:04/11/11 22:18:49
以下の練習プログラムを変更して、node1、node2、node3の順にリストを構成して、
その内容を表示するコードを記述してください。 //よろしくおねがいします
#include<stdio.h>

typedef struct NODE{
int num;
struct NODE *pnext;
}NODE;

int main(void){

NODE node1,node2,node3;
NODE *phead,*ptmp;

scanf("%d",&node1.num);
scanf("%d",&node2.num);
scanf("%d",&node3.num);

phead = &node1;
node1.pnext = &node2;
node2.pnext = &node3;
node3.pnext = NULL;

printf("%d\n",phead->num);
printf("%d\n",phead->pnext->num);
printf("%d\n",phead->pnext->pnext->num);

for( ptmp=phead ; ptmp!=NULL ; ptmp=ptmp->pnext)
printf("%d\n",ptmp->num);

return 0;
} //見直しましたがPPTを見て手打ちしたのでスペルミスがあったらすいません
756デフォルトの名無しさん:04/11/11 22:30:23
#include <stdio.h>
char output_buf[14];

void flush(void)
{
for (int i = 13; i >= 0; i--){
if (output_buf[i] != 0x00){
putchar(output_buf[i]);
}
}
putchar('\n');
}

void reg(int num, int i)
{
if (i >= 14 && i < 0){
return;
}
if (num != 0 && num != 1){
return;
}
output_buf[i] = num + 0x30;
}

void init(void)
{
for (int i = 0; i < 14; i++){
output_buf[i] = 0x00;
}
}
757デフォルトの名無しさん:04/11/11 22:30:58
int main()
{
char buf[256];
int cnt;
unsigned int d;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
int status = sscanf(buf, "%ud", &d);
if (status == 0 || status == EOF) {
continue;
}
if (d > 16383 || d < 0){
continue;
}
cnt = 0;
init();
while (true){
reg(d % 2, cnt++);
d /= 2;
if (d == 1){
reg(d, cnt++);
break;
}
else if(d == 0)
break;
if (cnt >= 14)
break;
}
flush();
}
return 0;
}
758デフォルトの名無しさん:04/11/11 22:32:57
>>697
↑とりあえずうごく
759デフォルトの名無しさん:04/11/11 22:46:55
>>755
すでにリストになってるし、内容を順に表示してる気がする…
760デフォルトの名無しさん:04/11/11 22:57:42
C言語の課題が分からない・・・。どなたかお願いします。

非負の整数を入力する。・・・・@
1桁の整数を入力する。・・・・・A
@で入力した整数のA桁目を表示する。(@に5678,Aに3と入力したら出力結果は6となる)
上記をdo,while使って作成し、終了時に繰返し行なうかを尋ねるプログラミングです。
761755:04/11/11 23:10:23
あすいません
問題文が3,2,1の順にリスト構成しろでした
762デフォルトの名無しさん:04/11/11 23:11:17
#include<stdio.h>
#include<string.h>

int main(void)
{
 char buf[256];
 int a = 5678;
 int b = 3;
 int len;

 printf("適当な数値を入れてください\n");
 scanf("%d",&a);
 printf("一桁の数値を入れてください\n");
 scanf("%d",&b);

 sprintf(buf, "%d", a);
 len = strlen(buf);

 if ((b > 9 && b < 0) || (len < b)){
  printf("値が不適当");
  return 0;
 }

 printf("%c\n", buf[strlen(buf) - b]);
 return 1;
}

適当に直してくれ
763デフォルトの名無しさん:04/11/11 23:12:12
>>760
まず、丸付き数字使うたらあかんよ。そこのコードには本来、文字がないからね。
764デフォルトの名無しさん:04/11/11 23:25:13
数値のまま処理。(errorチェックなし)
#include <stdio.h>
int main(void)
{
int x, y, i;
char buf[16];
do{
printf("x >>"); scanf("%d", &x);
printf("y >>"); scanf("%d", &y);
(void)getchar();
for (i = 0; i < y - 1;i++)
x /= 10;
printf("%d\n", x % 10);
printf("continue? ");
fgets(buf, sizeof buf, stdin);
}while(buf[0] == 'Y' || buf[0] == 'y');
return 0;
}
765デフォルトの名無しさん:04/11/11 23:36:13
#include<stdio.h>

typedef struct NODE{
 int num;
 struct NODE *pnext;
}NODE;

int main(void){

 NODE node1,node2,node3;
 NODE *phead,*ptmp;

 scanf("%d",&node1.num);
 scanf("%d",&node2.num);
 scanf("%d",&node3.num);

 phead = &node3;  
 node3.pnext = &node2;
 node2.pnext = &node1;
 node1.pnext = NULL;

 printf("%d\n",phead->num);
 printf("%d\n",phead->pnext->num);
 printf("%d\n",phead->pnext->pnext->num);

 for( ptmp=phead ; ptmp!=NULL ; ptmp=ptmp->pnext)
 printf("%d\n",ptmp->num);

 return 0;
}
よく分からんけど、こんなんでいいの?
とりあえず要件は満たしてると思うんだけど
766760:04/11/11 23:39:19
>>764
かたじけない・・・。精進します。
767デフォルトの名無しさん:04/11/12 01:07:27
>>764 + errorチェック
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#define BUF_MAX 256

int main( void )
{
char *str_end, buf1[BUF_MAX], buf2[BUF_MAX];
int ndigits;
long l, ith_digit;
do {
parameter1_input:
printf( "non-negative integer? " );
if ( fgets( buf1, BUF_MAX, stdin ) == NULL ) {
fprintf( stderr, "ERROR: UNEXPECTED EOF. ABORT.\n" );
return EXIT_FAILURE;
}
l = strtol( buf1, &str_end, 10 );
if ( buf1[0] == '\n' || *str_end != '\n' || l < 0 ) {
printf( " invalid parameter: %s", buf1 );
goto parameter1_input;
} else if ( l == LONG_MAX ) {
printf( " sorry, it is an overflow situation...: %s",
buf1 );
goto parameter1_input;
}
ndigits = str_end - buf1;
768デフォルトの名無しさん:04/11/12 01:07:49
parameter2_input:
printf( "a digit? " );
if ( fgets( buf2, BUF_MAX, stdin ) == NULL ) {
fprintf( stderr, " ERROR: UNEXPECTED EOF. ABORT.\n" );
return EXIT_FAILURE;
}
if ( buf2[0] == '0' || buf2[1] != '\n' || ! isdigit( buf2[0] ) ) {
printf( " invalid parameter: %s", buf2 );
goto parameter2_input;
}
ith_digit = (int)strtol( buf2, NULL, 10 );
if ( ith_digit > ndigits ) { printf( " 0\n" ); }
else { printf( " %c\n", *(str_end-ith_digit) ); }
printf( "Wanna play more? (Y/N) " );
if ( fgets( buf1, BUF_MAX, stdin ) == NULL ) {
fprintf( stderr, "ERROR: UNEXPECTED EOF. ABORT.\n" );
return EXIT_FAILURE;
}

} while ( strcmp( buf1, "Y\n" ) == 0 || strcmp( buf1, "y\n" ) == 0 );

return EXIT_SUCCESS;
}
769767:04/11/12 01:26:52
あ、インプットが 256 文字以上の時のエラーチェックし忘れた。
770デフォルトの名無しさん:04/11/12 02:04:34
ここはエレガントに宿題を片付けるスレなんだが
771デフォルトの名無しさん:04/11/12 10:13:27
誰かいますか?
772デフォルトの名無しさん:04/11/12 10:48:45
いません
773デフォルトの名無しさん:04/11/12 11:02:05
誰か助けてください。
次の関数で0≦x≦2の範囲で、xの値の0,1ごとに
yの値を計算するプログラムを作成せよ。画面にはx、y両方の値を表示す
るようにすること。while文を使うこと。y=x*x−3x+5/4
774デフォルトの名無しさん:04/11/12 11:48:24
>>773

double x = 0.0;
while( x <= 2.0 )
std::cout << "x=" << x << " y=" << (x*x-3*x+5.0/4) << std::endl;
775774:04/11/12 11:49:13
途中で送信しちゃった
double x = 0.0;
while( x <= 2.0 )
{
std::cout << "x=" << x << " y=" << (x*x-3*x+5.0/4) << std::endl;
x += 0.1;
}
776773:04/11/12 13:49:40
ありがとうございます
777AA略:04/11/12 14:33:27
>>776
あやまれ!
マルチしたことをこのスレでもあやまれ!
778デフォルトの名無しさん:04/11/12 15:29:36
課題が出たのでお願いします。

【質問テンプレ】
[1] 授業単元:プログラミング応用
  使用教科書→問題解決のための Cプログラミング
        佐藤次男、中村理一郎 共著
        コロナ社  \2,600 + Tax
[2] 問題文(含コード&リンク):Nを入力し、Nの階乗を求めるプログラムを再帰的な処理を用いて作成せよ。教科書 p.131 例題5.8 参照
[3] 環境
 [3.1] OS:XPだと思います。
 [3.2] コンパイラ(バージョン):32
 [3.3] 言語:C
[4] 期限:2004年11月13日16:00まで
[5] その他の制限:ヒントとしてこのようなものが与えられました↓教科書 p.131 例題5.8 参照
階乗を求める関数をfact とする
1 の階乗  1
2 の階乗  2 × fact( 1 )
3 の階乗  3 × fact( 2 )
4 の階乗  4 × fact( 3 )
5 の階乗  5 × fact( 4 )
6 の階乗  6 × fact( 5 )
7 の階乗  7 × fact( 6 )
779デフォルトの名無しさん:04/11/12 15:37:12
>>778

int fact(int n)
{
if( n<1 )return 0;
if( n==1 )return 1;

return n*fact(n-1);
}

if( n<1 )return 0;
これはちょっと自信ない
780デフォルトの名無しさん:04/11/12 15:48:50
入力した文字列データを2次元配列に格納したあと、
逆順に表示するプログラムの表示。
ただし、一文字目に'@'が入力されるとデータ入力を終わる。
データ数は最大20個、また一つの文字列データの
最大長は半角10文字。
おねがいします

実行例
word=sekiyu
word=yasai
word=denwa
word=@
denwa
yasai
sekiyu
781デフォルトの名無しさん:04/11/12 15:58:35
int i = 0;
char buf[20][11];

while( i < 20 ) {
printf("word=");
scanf("%s", buf[i]);
if( strcmp(buf[i], "@") == 0 )
break;
++i;
}

while( i > 0 )
printf("%s\n", buf[--i]);
782780:04/11/12 16:14:53
strcmpが定義されていませんって出たんですが。
783デフォルトの名無しさん:04/11/12 16:16:09
>>782
それくらい自分で調べろよ
784773:04/11/12 16:41:15
ほんとにごめんなさい。いままで書き込んだことなくて
ルールよくわかってませんでした。
785デフォルトの名無しさん:04/11/12 17:35:37
こんな問題がでました
「HTTPの通信プログラムをC言語で作成する際,改行コードをどのように取り扱えばよいか調査せよ」
教えてエロイ人
786デフォルトの名無しさん:04/11/12 17:59:41
ネット環境あるなら・・・とか言ってみるが

しかしどのように取り扱うかというのはまた抽象的でよくわからんな。
787デフォルトの名無しさん:04/11/12 18:19:20
>>785
なかなか面白い問題やね。良い先生(もしくは良い大学)かも。
いろいろ試行錯誤するのがええねんけど、そういうスレッドちゃうからいきなり核心に行こか。
HTTPのRFC(RFC 2616)の「2.2 基本ルール」を読んでみ。改行コードの規定のあたり。
あとはそれをCに関連づけて説明すればええ。これで9割5分はもらえるやろ。
http://www.studyinghttp.net/translations#RFC2616

完璧を期すなら、socketをfdopen()したときのテキストモード/バイナリモードについても
触れておくとええんちゃうかな。「Cで作成する際」っていうのが気になるからね。
でもこれは冗長やろな。
788デフォルトの名無しさん:04/11/12 18:19:50
>>785
Windowsの改行コードに統一するだけでいい。
ペイロードに乗っている部分の改行はHTTPと無関係。
789デフォルトの名無しさん:04/11/12 18:32:27
>>785
なんとなく、和歌山大学け?
790デフォルトの名無しさん:04/11/12 19:48:10
ありがトン>>787
791デフォルトの名無しさん:04/11/12 19:52:56
数字を対応する序数(英語)に変換する関数
例えば
1 なら first, 2 なら second, 3 なら third
792デフォルトの名無しさん:04/11/12 19:58:15
>>791
const char* henkan(unsigned int i)
{
static char* eigo[] = {"first", "second", "third",…};
return eigo[i];
}
793デフォルトの名無しさん:04/11/12 19:58:50
>>792
const char* henkan(unsigned int i)
{
static const char* eigo[] = {"first", "second", "third",…};
return eigo[i + 1];
}
794デフォルトの名無しさん:04/11/12 19:59:23
-1だろ
795デフォルトの名無しさん:04/11/12 20:00:20
そうでしたっ!!テヘ
796デフォルトの名無しさん:04/11/12 20:34:17
スレ違いだということはわかってるが言わせてくれ。
俺は今まで、数々の宿題を解いてきてる、いわば大御所ってやつだ。
だから多少の無茶は許されるはずだ。
windows updataすると再起動しなきゃいけないじゃん?
で、めんどいから、すぐには再起動しないんだけど、数分おきに
右下からうにょっと、再起動をうながすウインドウが出て来るんだよな。
あれがうざくてしょうがない。
けどな、お前らよりはうざくないから別にいいよ。
俺が言いたかったのはそれだけ じゃ ノシ
797デフォルトの名無しさん:04/11/12 20:40:24
宿題が出る。
煽るやつと、とくやつが出る。
だらだらする。            ←今ここ。
また宿題が出る。
マルチということが判明する。
叩く。
また宿題が出る。
798デフォルトの名無しさん:04/11/12 21:03:04
暇なんでエレガントに片付けられそうな宿題投下してください。
799デフォルトの名無しさん:04/11/12 21:08:49
エイトクイーン問題を解くプログラムを作ってください
800デフォルトの名無しさん:04/11/12 21:10:15
エイトキング問題を解くプログラムを作ってください
801デフォルトの名無しさん:04/11/12 21:14:54
>>800
王□□王□□王□
□□□□□□□□
□□□□□□□□
王□□王□□王□
□□□□□□□□
□□□□□□□□
王□□王□□王□
□□□□□□□□
9個置けた。
802デフォルトの名無しさん:04/11/12 21:15:31
プログラムの宿題を作るプログラムを作って下さい。
803デフォルトの名無しさん:04/11/12 21:16:30
>>799
エイトクイーン昔やったんだけど。
暗算(?)で出来ちゃったよ。
マス書いてクイーン置いてってら出来た。
804デフォルトの名無しさん:04/11/12 21:18:45
>>801
一番効率の悪い置き方したらいくつくらいなんだろう?
805デフォルトの名無しさん:04/11/12 21:20:20
>>804
4
806デフォルトの名無しさん:04/11/12 21:21:16
>>801
一番ゆかいな置き方したらいくつくらいなんだろう?
807デフォルトの名無しさん:04/11/12 21:37:36
>>806
256
808デフォルトの名無しさん:04/11/12 22:56:23
>>778-779
せっかく提出するならこのぐらい。
int fact(int n){retrurn n?n*fact(n-1):1}
809デフォルトの名無しさん:04/11/12 23:21:41
適当な要素数の整数型の 1 次元配列を初期化し、全要素の合計を求めて表示するプログラムを教えてください。
ターミネータを用いる方法と、sizeofを用いる方法の両方をお願いします。
810デフォルトの名無しさん:04/11/12 23:26:05
>>809
関数内関数の本領発揮だ!
811デフォルトの名無しさん:04/11/12 23:31:06
大原ゆきさんに犯されたい
812デフォルトの名無しさん:04/11/12 23:38:49
#include <stdio.h>
int main(void){
int s[] ={1,23,6,38,14,6,3,54,44,3};
int i, n, sum= 0;
n = sizeof(s) / sizeof(int);
for (i = 0; i < n;i++)
sum += s[i];
printf("sum = %d\n", sum);
return 0;
}
813デフォルトの名無しさん:04/11/12 23:41:28
>>809
普通にやるとターミネータ(もしくは番兵、sentinel)の個数がsizeof()に含まれてしまうが・・・
その辺はどうなっとるの?
814デフォルトの名無しさん:04/11/12 23:43:34
>>809
usingterminator() {
    static int x[] = { 1, 2, -1 }, i, sum;
    for (i = 0; x[i] != -1; i++) sum += x[i];
    printf("sum= %d\n", sum);
}

usingsizeof() {
    static int x[] = { 1, 2 }, i, sum;
    for (i = 0; i < sizeof(x) / sizeof(x[0]); i++) sum += x[i];
    printf("sum= %d\n", sum);
}

main() { usingterminator(); usingsizeof(); }
815デフォルトの名無しさん:04/11/12 23:49:27
>>810-814
ありがとうございます。
816不明なデバイスさん:04/11/13 02:30:33
>>814
なんでstaticにしてんのかな?
変数が自動的に0に初期化されるから?
int main() {
usingterminator(); usingsizeof();
usingterminator(); usingsizeof();
}
を実行するとどうなる?
817816:04/11/13 02:33:11
return 0;
忘れてた… orz
818デフォルトの名無しさん:04/11/13 18:56:09

文字列を入力として受け付けて、その文字列中にabcという文字列が含まれていればyesを、
含まれていなければnoを出力せよ。ただし、文字列ライブラリは使ってはならない。

実行例
 ・ugabcftと入力 → yes
 ・abcと入力   → yes
 ・iunhabと入力 → yes

と、問題を出されました。
誰か解いて下さい。月曜夜までに。
819818:04/11/13 19:08:56
・iunhabと入力 → no

orz
820デフォルトの名無しさん:04/11/13 19:24:51
821デフォルトの名無しさん:04/11/13 19:25:35
strstrで速攻完了
822デフォルトの名無しさん:04/11/13 19:26:11
すま、ライブラリ使っちゃいけんのね
823デフォルトの名無しさん:04/11/13 19:47:21
>>820
スレタイトルをお読みください。
824デフォルトの名無しさん:04/11/13 20:06:06
strstrのソースを提出すれば
825818:04/11/13 21:08:20
>>820
ありがとうございます。

えっと、ちょこっとレスされてて何なんですど、結局
strstrっていうのは文字列ライブラリに入るんですか?
何か #include <string.h> が文字列ライブラリだー、
みたいな説明受けたんですが。

もうよくワカンネ('A`)
826デフォルトの名無しさん:04/11/13 21:14:54
>>825
文字列を検索するコードを自分で書くのが目的だから
string.hにあるstrstrを使うなってこと。
>>820のはそれを自作してあるから別に
関数名にstrstrが含まれてるからって関係ない。
827デフォルトの名無しさん:04/11/13 21:26:41
>>826
あー、なるほどー。
説明どうもです。
828デフォルトの名無しさん:04/11/13 21:37:15
C言語です。お願いします。
正整数nを入力するとn以下の正の偶数を計算するプログラムをwhile文とfor文
を用いたものをそれぞれつくれ。

829829:04/11/13 21:39:37
define EOF -1
int mojishirabe(char ss[], char str[])
{
int i, j=0, k;
for(;;){
i=0;
while(ss[i] != str[j] && ss[i] != '\0'){
i++;
}
if(ss[i] == '\0'){
return 0;
}
while(ss[i] == str[j] && str[j] != '\0'){
i++;
j++;
}
if(str[j] == '\0'){
return 1;
}
}
}
830829続き:04/11/13 21:40:19
int main(void)
{
int i, j, k;
char ss[80], str[80;
printf("入力される文字列中に"abc"が含まれているか判定します。\n");
printf("判定対称文字列を入力してください。\n");
printf("->");gets(ss);
if(mojishirabe(ss, "abc"){
printf("yes\n");
}else{
printf("no\n");
}
return 0;
}
831デフォルトの名無しさん:04/11/13 21:42:31
int i;
int n;
scanf("%d",n);
#ifdef WHILE_VER
i = 0;
while(++i <= n)
#else
for(i=1;i<=n;++i)
#endif
printf("%d\n",i);
832831:04/11/13 21:43:37
・・・偶数かすまん
833デフォルトの名無しさん:04/11/13 21:51:05
>>828
偶数を計算って
全部表示させろってこと?
合計ってこと?
834デフォルトの名無しさん:04/11/13 21:56:40
>>833
合計です。よろしくお願いします。
835デフォルトの名無しさん:04/11/13 21:59:04
while
#include <stdio.h>

int main(void)
{
int sum = 0, x;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
while(x){
sum += x;
x -= 2;
}
printf("sum = %d", sum);
return 0;
}
836デフォルトの名無しさん:04/11/13 22:05:56
for
#include <stdio.h>

int main(void)
{
int sum, x;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
for(sum = 0; x; x-=2){
sum += x;
}
printf("sum = %d", sum);
return 0;
}

xの値を変えたくなかったら
int main(void)
{
int sum = 0, x, i;
printf("x >> "); scanf("%d", &x);
if (x & 1) x--; /* if (x % 2 != 0)*/
for(i = x; i > 0; i-=2){
sum += i;
}
printf("sum = %d", sum);
return 0;
}
837デフォルトの名無しさん:04/11/13 22:08:44
if(x&1)x--; と if(x%2!=0)

って同じ意味ですか?
838デフォルトの名無しさん:04/11/13 22:11:39
if(x&1)x--; と if(x%2!=0)x--;ね。
学校じゃ後者の書き方しかしないだろうから一応。
839デフォルトの名無しさん:04/11/13 22:15:25
if(x%2) x--; でも同じ意味になりますわな
840デフォルトの名無しさん:04/11/13 22:16:18
学校でも x & 0x1 くらいすると思うが
841デフォルトの名無しさん:04/11/13 22:17:15
なるほど。あとwhile文の継続条件がxというのはxが0になったら
継続しなくなるということですか?

842デフォルトの名無しさん:04/11/13 22:20:28
>>841
そうだ。C では整数型が論理型の役目もする。
843デフォルトの名無しさん:04/11/13 22:23:06
はぁ〜。勉強になりました。ありがとうございました。
844818:04/11/13 22:53:01
>>829-830
お疲れ様です。ありがとうございます。

一つ注文といっては何ですが、このプログラムを
#include <stdio.h>
int main(void)
の2行から始めるように書き換える事って出来ますか?
845デフォルトの名無しさん:04/11/13 23:04:05
出来るけどmainの中が長たらしくて
分かりにくくなるぞ。
846デフォルトの名無しさん:04/11/13 23:10:47
エレガントな宿題まだー?
847818:04/11/13 23:12:53
>>845
それでも良いのでお願いします。
これが今習ってるスタイルなので。
848デフォルトの名無しさん:04/11/14 00:18:23
>>838
きょうび学校でも分岐は減らす方針で教えた方がいいのでは?
x-=(x%2);
x-=(x&1);
849デフォルトの名無しさん:04/11/14 00:21:25
>>836
エレガントってほどでもないけど・・・
for(sum=0,i=0; i<x; sum+=i,i+=2){}
850デフォルトの名無しさん:04/11/14 00:31:16
だんだん読みにくくなっててってねぇか?
851デフォルトの名無しさん
x/=2;