C/C++の宿題を片付けます 63代目

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して
 投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: (Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】
http://www.linux.or.jp/JM/index.html

【前スレ】
C/C++の宿題を片付けます 62代目
http://pc8.2ch.net/test/read.cgi/tech/1141363718/
【過去スレ一覧】
http://makimo.to/cgi-bin/search/search.cgi?q=C%2B%2B%82%CC%8Fh%91%E8&andor=AND&sf=2&H=&view=table&D=tech&shw=2000
次スレが立たない時の避難所
http://pc8.2ch.net/test/read.cgi/tech/1122705615/
2デフォルトの名無しさん:2006/03/27(月) 05:33:48
[>>1からついでに色々。]
・同じ講義を受けている人が既に同じ宿題を依頼してるかもしれなせん。
 まずはスレを少しさかのぼって探してみてください。
 それさえ出来ないシメジ野郎はバター焼きにして食っちまうぞ
・解答者は答える義務もないし、答えてもそれが正しいかどうかは保証しません。
 もちろん、出題者先生の意図なんぞ知ったことではありません。
 At your own riskで。
・態度が余りに悪いとすーぱーはかーがあなたの先生にチクるかもしれません。

報告用テンプレ(任意)
[1] 先生の評価:
[2] 提出結果:
[3] 単位取得の有無:
[4] 回答者にコメント(愚痴等は禁止):
3デフォルトの名無しさん:2006/03/27(月) 05:36:22
*********************************
 I n f o r m a t i o n
  このスレは未稼働です。
前スレが埋まってから書き込みましょう
*********************************
4デフォルトの名無しさん:2006/03/29(水) 12:06:14
*********************************
 I n f o r m a t i o n
  前スレが埋まりますた。
 書き込み開始です。
*********************************
5デフォルトの名無しさん:2006/03/29(水) 12:07:07
前スレの間違い探しの答えはintとmainの間が無空白でおkですよね。
それより1000getされた・・・糞・・・('A`)
6デフォルトの名無しさん:2006/03/29(水) 12:10:50
[1] includeのstdiohに" . "が無い
[2] intとmainに空白が無い
[3] FILE *fpに;が無い
[4] fprintffp,"MsgBox \"馬鹿\");のfprintfに(が足りない
[5] fprintffp,"MsgBox \"馬鹿\");の"が足りない
7デフォルトの名無しさん:2006/03/29(水) 12:26:44
難しいです。
8デフォルトの名無しさん:2006/03/29(水) 12:32:25
2番はサービスです。
9デフォルトの名無しさん:2006/03/29(水) 13:25:10
おまいらいい加減教えれ。
10デフォルトの名無しさん:2006/03/29(水) 14:07:50
何を?
11デフォルトの名無しさん:2006/03/29(水) 14:11:59
実務を知らない引篭りがPGとして頑張りたいからお願いします。
最低限できればいい課題があったら教えて頂きたいので、例を出して頂けませんか?
と言うお願いです。
12デフォルトの名無しさん:2006/03/29(水) 14:12:12
教えれだってさ、どうする?
              ∧_∧
        ∧_∧  (´<_`  ) 下の2つから選んでくれ
       ( ´_ゝ`) /   ⌒i
       /    \    | |
      /    / ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
[1]教えない
[2]叩く
13デフォルトの名無しさん:2006/03/29(水) 14:13:40
[3]番の教えるをお願いします
14デフォルトの名無しさん:2006/03/29(水) 14:14:18
  そうキタか・・・そうなら答えは一つ・・・
              ∧_∧
        ∧_∧  (´<_`  )  一つなのか兄者
       ( ´_ゝ`) /   ⌒i
       /    \    | |
      /    / ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
  本を買って読むしかないだろ。
  少なくと俺はそれでやってきた
15デフォルトの名無しさん:2006/03/29(水) 14:15:28
>>13
[3]何か無いだろ・・・
              ∧_∧
        ∧_∧  (´<_`  ) 兄者が切れるぞ
       (.#´_ゝ`) /   ⌒i
       /    \    | |
      /    / ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
16デフォルトの名無しさん:2006/03/29(水) 14:17:21
自分のできる範囲を言ってませんでした。入門書はクリアしました。ポインタも理解できてきて
リストや多種のソートも時間を掛ければ出来ます。
しかしこのスレに出てくる難問には手が出ないので、これから何をすればいいのか分かりません。
17デフォルトの名無しさん:2006/03/29(水) 14:18:45
兄者気が短けーよ・・・。お礼にちんちんうpしますから。
18デフォルトの名無しさん:2006/03/29(水) 14:20:19
俺はそんなの求めちゃいねーよ!
              ∧_∧
        ∧_∧  (´<_`  ) 兄者PCが壊れるぞ
       (.#´_ゝ`) /   ⌒i
  バン   ∩    \    | |
    バン/ /ミ ./ ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
おぱーいをうp汁!
19デフォルトの名無しさん:2006/03/29(水) 14:22:22
兄者・・・おっぱいでもまんまんでもうpしますから、これからの課題はどうしたらいいのですか?
20デフォルトの名無しさん:2006/03/29(水) 14:22:48
仕方ないから俺がおすすめな本を紹介してやる
              ∧_∧
        ∧_∧  (´<_`  ) やっぱりプログラミング言語Cだな兄者
    ビシ! ( ´_ゝ`) /   ⌒i
      (m9    \    | |
       /   / ̄ ̄ ̄ ̄/ |
   __/_.__./  FMV  / .| |___
        \/____/ (u ⊃
    ・・・・・・・


      \\\
     (⌒\  ∧_∧
      \ ヽヽ( ´_ゝ`) 俺のセリフを盗るな!
       (mJ    ⌒\
        ノ ∩兄 / /
        .(  | .|∧_∧
     /\ノ  | (    ) ときに落ち着け兄者
    (___ヘ_ノ ゝ__ノ
21デフォルトの名無しさん:2006/03/29(水) 14:26:23
兄者使えないじょ〜・・・分かりました。過去ログ見て難しい問題を解きつつ俺に聞けスレに行きます。有難う御座います
22デフォルトの名無しさん:2006/03/29(水) 14:28:03
>>11-20
古典的にwarata
23デフォルトの名無しさん:2006/03/29(水) 14:35:12
おぱーいおうpぱまだか?!
              ∧_∧
        ∧_∧  (´<_`  ) だからPCが壊れるって兄者
       (.#´_ゝ`) /   ⌒i
  バン   ∩    \    | |
    バン/ /ミ ./ ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
うpうpうpうpうp!!
24デフォルトの名無しさん:2006/03/29(水) 14:53:26
              ∧_∧
        ∧_∧  (´<_`  ) 何をする気だ兄者
       (.#´_ゝ`) /   ⌒i
       /    \    | |
   グッ /    / ̄ ̄ ̄ ̄/ |
   __( ヾ /  FMV  / .| |___
       \_つ____/ (u ⊃


         ____
        /      /ミ
     ___/  FMV ./
     \/_____/
    グワッ!
    ∩     ∩  ∧_∧
 | ||  .| | ∧_∧| | (´<_`; ) うお!Pcを投げた!
  ||  |  (.#´_ゝ`) | /   ⌒i
    .\     / (__ニつ | |
     /    /|| | |    | |
___/____/__|_____| .|___
                 (u ⊃
25デフォルトの名無しさん:2006/03/29(水) 17:02:18
        |l| | |l| |
        _,,..,,,,_
       ./ ゚ 3  `ヽーっ
       l ゚ ll ⊃ ⌒_つ
        )`'ー---‐'''''"(_
        ⌒)   (⌒   ビターン
           ⌒
26デフォルトの名無しさん:2006/03/29(水) 18:05:20
[1] 授業単元:バイトの課題
[2] 問題文(含コード&リンク):
PCスピーカードライバ(drivers/input/misc/pcspkr.c)以下のように改良する。
・BEEP 音を/proc/beep で制御する。
 例:
 echo 100 > /proc/beep
 echo 200 > /proc/beep
 echo 300 > /proc/beep でスピーカー音発生(数字で音程制御)
 echo 0 > /proc/beep でストップ
[3] 環境
 [3.1] OS:Linux
 [3.2] 何でも
 [3.3] 言語:C
[4] 期限: 2006年4月4日
[5] その他の制限:
Linux のカーネルソース最新版(バージョン2.6.15.1)を使う。
詳細な仕様はお任せです。

以上、よろしくお願いします。
27デフォルトの名無しさん:2006/03/29(水) 18:11:43
>>29
バイトの課題ってことは、当然給与は発生するんだよな?

とりあえず PCスピーカードライバ あげてもらわんと手のつけようも無いし、
あげてもらっても俺はスルー。
28デフォルトの名無しさん:2006/03/29(水) 18:29:13
このすれにLinuxハカーはどれくらい居るんだろう
29デフォルトの名無しさん:2006/03/29(水) 19:09:27
バイトの課題でプログラムってあるの?
おれ田舎暮らしでワカラナス(´・ω・`)
30デフォルトの名無しさん:2006/03/29(水) 19:49:32
>>26
Linuxハカーじゃないけどできた。
見様見まねでやってるのでちゃんとチェックしてくれ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1714.c
31デフォルトの名無しさん:2006/03/29(水) 19:56:28
バイトの課題をここで依頼するのはいいが、課題が出されるって事は
向こうは>>26の実力を計りたいと思ってるわけだから
それで勘違いされて今後、ややこしい仕事任されたときにどうするつもりなんだろうな
3230:2006/03/29(水) 20:04:38
あー、上げるのパッチにしときゃよかったかな。
GNU GPL
http://www.gnu.org/licenses/gpl.html
念のため。
33デフォルトの名無しさん:2006/03/29(水) 21:08:01
>>30
なんじゃこれはさっぱりわからん
main関数すら無いではないか
理解したいのだが何から学べばいいんだろう
34デフォルトの名無しさん:2006/03/29(水) 21:08:43
>>33
Linux用ドライバなんだからそりゃmainは無いだろうな
3526:2006/03/30(木) 09:54:57
>>27
バイトの採用課題です。給与は発生しません。

>>29
漏れも初めてなので他の会社のことはワカラナス

>>31
とりあえずバイト先に入りたいんです。
入ってしまえばなんとかなるかなと。

>>30
ありがとうございます。
仕様を教えて頂けませんか?

36デフォルトの名無しさん:2006/03/30(木) 11:42:30
バイトでついていけなくなるんじゃないかな・・・
入ってしまえばなんとかなる人間は課題丸投げしないだろ
37デフォルトの名無しさん:2006/03/30(木) 12:20:09
バイトは計画的に
38デフォルトの名無しさん:2006/03/30(木) 15:20:01
悪いことはいわねえから自分の実力に見合ったとこに入んな。
そのうち給与の発生する「課題」も持ってきかねない。
39デフォルトの名無しさん:2006/03/30(木) 16:14:55
給与の発生する課題を盛ってきたら
やった人がその給与もらえるんだな?
              ∧_∧
        ∧_∧  (´<_`  ) そういうことになるな兄者
       ( ´_ゝ`) /   ⌒i
       /    \    | |
      /    / ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
4030:2006/03/30(木) 16:32:29
>仕様を教えて頂けませんか?
仕様って何を書けばいいんだ? >>26の要件は満たしているつもりだが。
コードから一見して分かる以上の事は折れにも分からん。
4126:2006/03/30(木) 17:05:54
さすがに給与の発生する課題はここに挙げるつもりはありませんが、
実力不相応のバイト先になりそうなので、実力つけてから再度チャレンジして
見たいと思います。

>>30
確かにそうですね。どうかしてました。
ありがとうございました。

42デフォルトの名無しさん:2006/03/30(木) 17:27:39
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):for文を使って1から1000までの和を求めよ。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:Turbo C ver2.0
 [3.3] 言語:C
[4] 期限:[2006年03月31日12:00まで]

宜しくお願いします。
43デフォルトの名無しさん:2006/03/30(木) 17:30:53
int i=1,j=0;
for(;i<=1000;i++)j+=i;
printf("%d",j);
44デフォルトの名無しさん:2006/03/30(木) 17:33:35
intが16bitだったりしない?
4542:2006/03/30(木) 17:38:49
>>44
コンパイラはTurbo C ver2.0ですが、どうなんでしょうか?

int i,s;
s=0;
for(i=0; i<=1000; i++){
s=s+i;
}
printf("s=%d\n",s);

でやってみたところなぜか-23788になりました。
46デフォルトの名無しさん:2006/03/30(木) 17:41:38
16bitだね。longにすれば良いと思うよ。
4742:2006/03/30(木) 17:44:34
>>46
int→long

%d→%ld

見事500500と表示されました。ありがとうございました。
48デフォルトの名無しさん:2006/03/30(木) 19:42:55
#include <stdio.h>
int foo(int a, int b)
{
return (a+b)*(b-a+1)/2;
}
main(void)
{
printf("%d\n", foo(1, 1000));
}
49デフォルトの名無しさん:2006/03/30(木) 21:05:39
>>48
for文を使えっフォーッ!
50デフォルトの名無しさん:2006/03/30(木) 21:17:21
俺が一番天才的なプログラムだぜ(>∀<)

#include <stdio.h>

int func(int a,int b);
void main(void)
{
  printf("%d",func(1,1000));
}
int func(int a,int b){
  if(b!=0)return func(a,b-1);
  return (a+b);
}
51デフォルトの名無しさん:2006/03/30(木) 21:18:20
天才的な間違え方をしちまったorz
52デフォルトの名無しさん:2006/03/30(木) 22:11:08
こうだな
int func(int a, int b){
  if(a!=b) return func(a, a) + func(a + 1, b);
  if(a!=0) return 1 + func(a - 1, b - 1);
  return 0;
}
53デフォルトの名無しさん:2006/03/30(木) 22:41:50
せめて末尾再帰にしてくれ
54デフォルトの名無しさん:2006/03/30(木) 22:47:56
末尾再帰なんてループと一緒じゃないか。
55デフォルトの名無しさん:2006/03/30(木) 22:56:11
int func(int a, int b){
  if(a!=b) return func(a, a)+func(a + 1, b);
  if(a!=0) return 1 + func(a - 1, b - 1);        //ここの部分
  return 0;
}
のここの部分の処理は何のために必要なんですか?
printf("%d",func(1,1000));

int func(int a, int b){
  if(a!=b) return func(a, a)+func(a + 1, b);
}

の処理で1〜1000の和は求められないのですか?
56デフォルトの名無しさん:2006/03/30(木) 23:07:19
long func(int a, int b)
{
return (a+b)*(a-b+1)/2;
}

int main(void)
{
int i;
static long sum;
for (i=1; i<1000; i+2) sum+=func(i, i+1);
printf("%ld\n", sum);
return -1;
}

どうせだから公式使え
5755:2006/03/30(木) 23:11:07
すいませんスルーして下さい。再帰を理解できてませんので勉強してきます。
58デフォルトの名無しさん:2006/03/30(木) 23:14:50
>>56
そのforを再帰に(略
59デフォルトの名無しさん:2006/03/31(金) 00:48:14
int f(int a, int b, int c) {
  return a > b ? c : f(a+1,b,a+c);
}
main() {
  printf("%d", f(1,1000,0));
}
これで末尾再帰。
60デフォルトの名無しさん:2006/03/31(金) 10:18:25
正直何が違うのか全く分からない・・・時間に余裕のある方!!独学に愛の手を
61デフォルトの名無しさん:2006/03/31(金) 10:29:18
検索しろって事か兄者。分かったよ弟。検索してくる
62デフォルトの名無しさん:2006/03/31(金) 11:55:56
>>60
52 を簡単にすると int g(int a, int b) { return a > b ? 0 : a + g(a+1,b); } g(1,3) を実行したとすると、
 1. g(1,3) が呼ばれる。g(2,3) が必要になる。
 2. g(2,3) が呼ばれる。g(3,3) が必要になる。
 3. g(3,3) が呼ばれる。g(4,3) が必要になる。
 4. 終端条件で g(4,3) = 0。
 5. g(3,3) に戻って g(3,3) = 3 + 0 = 3
 6. g(2,3) に戻って g(2,3) = 2 + 3 = 5
 7. g(1,3) に戻って g(1,3) = 1 + 5 = 6
この手順において 5-7 は必須の処理。ところが 59 で f(1,3,0) を実行したとすると
 1. f(1,3,0) が呼ばれる。f(2,3,1) が必要になる。
 2. f(2,3,1) が呼ばれる。f(3,3,3) が必要になる。
 3. f(3,3,3) が呼ばれる。f(4,3,6) が必要になる。
 4. 終端条件で f(4,3,6) = 6。
 5. f(3,3,3) に戻って f(3,3,3) = 6
 6. f(2,3,1) に戻って f(2,3,1) = 6
 7. f(1,3,0) に戻って f(1,3,0) = 6
ここで 5-7 で返す値はどうせ 4 で返す値と同じだから、スキップしても問題ない。こういうスタックの巻き戻しをスキップしても問題ないように書かれた再帰を末尾再帰といい、実際にスキップすることを末尾再帰の最適化という。
63デフォルトの名無しさん:2006/03/31(金) 12:28:46
>>62
先生凄いです!!変数一つで計算量が大幅に減るのですね。丁寧な解説までして頂き有難う御座います!
昨日から再帰のアルゴリズムを使いこなせるように脳内でいろいろ考えてますが難しいです。
計算量に合わせた高速なアルゴリズムを作りたいので何とか再帰を会得します。
分かりやすい解説有難う御座いました!!
64デフォルトの名無しさん:2006/03/31(金) 12:56:30
    宿題の投下が無いな
              ∧_∧
        ∧_∧  (´<_`  ) 今の時期、宿題は出ないと思うぞ兄者
       ( ´_ゝ`) /   ⌒i
       /    \    | |
      /    / ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
所でなんでこのスレにはトリップ付けてる人がいないんだ?
65デフォルトの名無しさん:2006/03/31(金) 14:45:08
トリップって必要あるものか?
66デフォルトの名無しさん:2006/03/31(金) 15:33:33
>>65
「自己解決しました。ありがとうございました。」
といういたずらを防ぐためには有効では?
67デフォルトの名無しさん:2006/03/31(金) 15:59:26
 回答者側は誰一人トリップ使ってねぇな
              ∧_∧
        ∧_∧  (´<_`  ) 代々続いているスレなんだから
       ( ´_ゝ`) /   ⌒i  何人かいてもいいと思うんだが
       /    \    | |
      /    / ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
68俺スゴス ◆0dPUwWlTPg :2006/03/31(金) 16:13:20
何でもお答えしよう。
69俺スゴス ◆0dPUwWlTPg :2006/03/31(金) 16:21:59
誰か質問汁。ネタ投下まで冬眠するか。
70デフォルトの名無しさん:2006/03/31(金) 16:36:33
[1] 授業単元: はじめてのC
[2] 問題文(含コード&リンク):
テキストファイルをHTTPを使って取得し、その内容を画面に表示するプログラムを作成せよ
[3] 環境 
 [3.1] OS: Windows
 [3.2] VC 7 
 [3.3] C 
[4] 期限: 2006/4/1 
[5] その他の制限: 特になし 
71デフォルトの名無しさん:2006/03/31(金) 16:40:45
winsockかよ
72俺スゴス ◆0dPUwWlTPg :2006/03/31(金) 17:00:40
正直できなかった・・・ヘタレだね。2週間でマスターしてくるぜ!!!!
73デフォルトの名無しさん:2006/03/31(金) 17:29:55
>>72
もしかして、>70も自演か?

>>67
奥床しいんだよ、きっと。

トリップつけるのが当たり前になれば漏れもつけてもいいけどねぇ。
74デフォルトの名無しさん:2006/03/31(金) 17:39:37
>>66
>>1に質問者はトリップをつけるようにって書いてある

正直回答者はトリップが必要だとは思えない・・・
まぁつけても別にいいと思うけど。
75デフォルトの名無しさん:2006/03/31(金) 17:47:07
回答者トリップつけて1回変なソース書いたら以降叩かれまくりの気がする
76デフォルトの名無しさん:2006/03/31(金) 17:48:20
それは悲惨だな
7770:2006/03/31(金) 17:58:49
自己解決しますた。ありがとうございますた。
78禿@ベル研究所 ◆HsptrkZmYk :2006/03/31(金) 18:12:29
なんでも聞いてくれ
あと禿って言うな
79デフォルトの名無しさん:2006/03/31(金) 18:18:18
80デフォルトの名無しさん:2006/03/31(金) 18:20:50
>>78
OS作って
81デフォルトの名無しさん:2006/03/31(金) 18:33:31
  なんだこの流れは・・・
              ∧_∧
        ∧_∧  (´<_`  ) 兄者、>>67がまずかったのでは?
       (.#´_ゝ`) /   ⌒i
       /    \    | |
      /    / ̄ ̄ ̄ ̄/ |
   __(__ニつ/  FMV  / .| |___
        \/____/ (u ⊃
82禿@ベル研究所 ◆HsptrkZmYk :2006/03/31(金) 18:42:59
>>70
#include <stdio.h>
#include <windows.h>
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
int main(void)
{
    char url[1024] = "";
    char buf[1024] = "";
    DWORD readsize = 0;
    HINTERNET internet = InternetOpen("禿", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
    HINTERNET file = 0;

    scanf("%s", url);
    file = InternetOpenUrl(internet, url, 0, 0, INTERNET_FLAG_RELOAD, 0);

    do {
        InternetReadFile(file, buf, 1024, &readsize);
        printf("%s", buf);
    } while (readsize == 1024);

    InternetCloseHandle(file);
    InternetCloseHandle(internet);

    return 0;
}
>>78
#include <stdio.h>
int main(void) {
    printf("%s", "How many files?");
    return 0;
}
83デフォルトの名無しさん:2006/03/31(金) 18:50:03
>>78
はい先生!
これは何をするPGでちゅか?!
void a(char *a,const char *b)
{
while (*a++=*b++);
}
84禿@ベル研究所 ◆HsptrkZmYk :2006/03/31(金) 18:52:29
>>83
知るかハゲ
85( ´,_ゝ`)プッ:2006/03/31(金) 18:54:26
>>84
ハゲじゃなーい
86K&R@ベル研究所 ◆AdFPdBLC86 :2006/03/31(金) 19:02:25
仕様の不備以外なら何でも聞いてくれ

>>84-85
ケンカするな
87デフォルトの名無しさん:2006/03/31(金) 20:38:40
嫌な流れになってきたな。
88デフォルトの名無しさん:2006/03/31(金) 22:44:44
C++で書けよハゲ
89デフォルトの名無しさん:2006/03/31(金) 22:46:51
>>88
出題者に言えよw
あとハゲは失礼だろwwハゲにwww
90:2006/03/31(金) 23:04:25
何でも聞いてくれ。瞬間的に答えを出すであろう。
91デフォルトの名無しさん:2006/03/31(金) 23:05:25
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    スルー
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
92デフォルトの名無しさん:2006/03/31(金) 23:19:26
>>90
C++?宿題?何のことです?
93デフォルトの名無しさん:2006/03/31(金) 23:38:00
>>90
次の方程式の数値解を求めるプログラムをお願いします。
(a+b^n)/n = x
94デフォルトの名無しさん:2006/03/32(土) 00:38:02
>>90
ローマ字⇒かな変換 をするプログラムをお願いします。
95デフォルトの名無しさん:2006/03/32(土) 01:20:42
>>93
なんについての方程式だい。つーかプログラムの質問なのかすらあやしい。
96デフォルトの名無しさん:2006/03/32(土) 01:39:21
まだ3月か。
97デフォルトの名無しさん:2006/03/32(土) 02:30:06
いつまでも3月だお
98デフォルトの名無しさん:2006/03/32(土) 08:32:09
32?!
99デフォルトの名無しさん:2006/03/32(土) 08:37:53
やったまだ冬休みだ!
100デフォルトの名無しさん:2006/03/32(土) 09:09:41
何で32日なんだ?
101デフォルトの名無しさん:2006/03/32(土) 09:25:12
エイプリルフールだ
102デフォルトの名無しさん:2006/03/32(土) 09:27:00
ようし!
"hello"と画面に出力できたら10000YENあげちゃうぞ!
103デフォルトの名無しさん:2006/03/32(土) 09:34:15
C言語からC++言語に乗り換える時期が分かりません。自分としては
C→C++→WinAPI→趣味でゲーム製作。と行きたいのですが、C言語が
基礎になるのでしっかり学んでからC++に移行すべきだと思っています。

どの程度できればC++に移行すべきタイミングでしょうか?教えて頂けないでしょうか?お願いします。
104俺スゴス ◆0dPUwWlTPg :2006/03/32(土) 09:36:17
#include <stdio.h>

void main(){
printf("\"hello\"");
}
>>102
1000円(ノ∀`)
105デフォルトの名無しさん:2006/03/32(土) 09:43:59
>>104
エイプリルフール

>>103
好きなときに移行すれば?
わからなければCに戻ればいいし
106デフォルトの名無しさん:2006/03/32(土) 09:46:45
>>105
好きな時ですか・・・。分かりました!自分で満足した時に移行します。有難う御座いました!
107デフォルトの名無しさん:2006/03/32(土) 10:39:58
C→WinAPI→ゲーム製作→C++ がオススメ
108デフォルトの名無しさん:2006/03/32(土) 10:46:45
先生それはなぜですか?
109デフォルトの名無しさん:2006/03/32(土) 10:49:36
Win32 APIのサンプルってC言語が多くない?
110デフォルトの名無しさん:2006/03/32(土) 10:50:53
OSに密接に関わるところだとやっぱり高級アセンブリとしてのCが求められるからじゃね。
111デフォルトの名無しさん:2006/03/32(土) 11:10:55
Win32API が C++ と相性がよくないから。設計思想が C なんだよね。
代表的なのはキャストを前提で作られてる関数で、C++ は C より型に厳しいから
reinterpret_cast だらけになったりするんだよね。
112デフォルトの名無しさん:2006/03/32(土) 11:50:50
漏れはC++→Cですが、なにか?
113デフォルトの名無しさん:2006/03/32(土) 20:09:37
別に・・・
114デフォルトの名無しさん:2006/04/02(日) 14:49:38
age
115デフォルトの名無しさん:2006/04/02(日) 18:55:48
ひま〜。誰かおもしろい問題捏造して。
116デフォルトの名無しさん:2006/04/02(日) 19:54:50
[1] 授業単元:脳内
[2] 問題文(含コード&リンク):strcpyをできるかぎり簡潔に作れ
[3] 環境
 [3.1] OS: (Windows/Linux/等々)Windows
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)自由
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)C/C++
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)2006/4/2 23:59:59
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)暇つぶしにはなるかどうかはわからない
突っ込みは無しで
117デフォルトの名無しさん:2006/04/02(日) 19:55:43
くだらね
118デフォルトの名無しさん:2006/04/02(日) 20:04:03
>>116
void strcpy(char *dest, const char *src){while(*dest++=*stc++);}

strcpyって返り値はコピー先のポインタだっけ?まあいいか
119デフォルトの名無しさん:2006/04/02(日) 20:11:54
[1] 授業単元:脳内
[2] 問題文(含コード&リンク):問題を自動的に作るPG
[3] 環境
 [3.1] OS: (Windows/Linux/等々)自由
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)自由
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)自由
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)自由
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)自由
120デフォルトの名無しさん:2006/04/02(日) 20:21:54
[1] 授業単元: ゼミで出た話題
[2] 問題文:
入力と出力の対応が与えられたとき,それを満たす「あみだくじ」を作りたい.

何人用のあみだくじであるかを表す縦線の数 N をあみだくじの位数という.以下ではあみだくじに引く横線は全て水平で,縦線を飛び越すことはなく,高さは全て異なるものとする.引いた横線の個数 M をあみだくじの大きさという.

入力:
あみだくじの位数 N,それに続いて N 個の数で,あみだくじの入出力の対応を表す.ただし対応は入力側の1番に対応するものが1番目に書かれた数,2番に対応するのが2番目に書かれた数,……とする.
例:
3 2 3 1
(位数3のあみだくじで,1→2,2→3, 3→1 と対応するものを表す)

出力:
あみだくじの大きさ M,それに続いて M 個の数で,横線の位置を上から順に表す.ただし位置はその横線が接している左側の縦線の値とする.
例:
4 1 2 1 2
(大きさ 4 のあみだくじで,上から順に 1, 2, 1, 2 と横線が引かれているもの,つまり,以下のあみだくじを表す.)
|_|  |
|  |_|
|_|  |
|  |_|
|  |  |

(*)出力するあみだくじは,大きさ最小のものとする.同じ大きさのものが複数あればどれを表示してもかまわない.

[3] 環境: 自由.
[4] 期限: 4月7日まで.

分かりにくい問題文ですが,どーかおねがいします.わからないところがあれば質問ください.
121120:2006/04/02(日) 20:24:43
すんません,例の出力が狂ってました.正しい出力は「2 2 1」で,以下のあみだくじです.
|  |_|
|_|  |
|  |  |
122デフォルトの名無しさん:2006/04/02(日) 20:29:48
今問題文の意味を理解しようと悪戦苦闘中
123デフォルトの名無しさん:2006/04/02(日) 20:31:44
>>120
前の問題の単純化版だな。
今度は探索無しで解けるかも。
124デフォルトの名無しさん:2006/04/02(日) 21:21:11
>>120
#include <stdio.h>
#include <stdlib.h>
void bubblesort(int *array, int size) {
  int i, j;
  for(i = 0; i < size; i++)
    for(j = size - 1; j > i; j--)
      if(array[j] < array[j-1]) {
        int t = array[j];
        array[j] = array[j-1];
        array[j-1] = t;
        printf(" %d", j);
      }
}
int number_of_transpositions(int *array, int size) {
  int r = 0, i, j;
  for(i = 0; i < size; i++) for(j = 0; j < i; j++) if(array[i] < array[j]) r++;
  return r;
}
int main(void) {
  int n, i, *data;
  scanf("%d", &n);
  data = (int *)malloc(sizeof(int) * n);
  for(i = 0; i < n; i++) scanf("%d", data+i);
  printf("%d", number_of_transpositions(data, n));
  bubblesort(data, n);
  putchar('\n');
  free(data);
  return 0;
}
125デフォルトの名無しさん:2006/04/03(月) 22:58:32
あげ
126デフォルトの名無しさん:2006/04/04(火) 02:14:21
>>124
最近思うんだけど、なんでメイン関数が一番下なん?

プロトタイプ宣言しなくていいから?
127デフォルトの名無しさん:2006/04/04(火) 04:49:24
レスの行数制限とかあるしね
128デフォルトの名無しさん:2006/04/04(火) 19:19:23
[1] 授業単元: 脳内
[2] 問題文(含コード&リンク):
C:\file.binの0x2000-0x2010バイト目の内容を標準出力に出力し、
標準入力から受け取った16進のバイナリデータ10バイト分に書き換える。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: なんでも
 [3.3] 言語: C
[4] 期限: 無期限
129デフォルトの名無しさん:2006/04/04(火) 19:22:34
バイナリエディタ使えよ
130デフォルトの名無しさん:2006/04/04(火) 19:37:47
[1]授業単元:個人的な要望
[2]問題文および、要望:
10年以上前から思っていたのだが
Ctrl+f
以外に使いにくい
良く使うショートカットだと思うが
こんな機能を実装シテホスイ
1
検索の常駐、非常駐の切り替え
2
IME前回ON、次回ON
3
IME前回OFF、次回OFF
4
IME前回関係なくON
5
IME前回関係なくOFF
6
複数ブラウザの一斉検索
7
検索した文言と検索窓が重なったら、窓がよける
どうよこんな感じで
[3]環境
[3.1]OS Windows2000SP4
[3.2]コンパイラ:Visual Studio 2005
[3.3]言語:CまたはC++または.NETもOK
[4]期限:早いほうが( ・∀・)イイ!!

131デフォルトの名無しさん:2006/04/04(火) 19:42:32
[1] 授業単元: 脳内
[2] 問題文(含コード&リンク):
ax+by=c
dx+ey=f
でa,b,c,d,e,fを与え、連立方程式の解を求める
解が無い場合はその旨を表示

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: なんでも
 [3.3] 言語: C
[4] 期限: 無期限
132デフォルトの名無しさん:2006/04/04(火) 19:43:49
  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    スルー
三.ヽ= (⌒ヽ;:;:;,.二)
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
133デフォルトの名無しさん:2006/04/04(火) 19:59:52
わしも
[1] 授業単元:個人的要望
[2] 問題文(含コード&リンク):
 ExcelでF1を押下したときにヘルプが起動されないようにしてほしい。
 F2と間違えて固まるのが非常に難儀。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:VCとかbccあたりで
 [3.3] 言語:C/C++
[4] 期限:[無期限]
[5] その他の制限:実行モジュールでなくソースでお願いします。
134デフォルトの名無しさん:2006/04/04(火) 20:14:20
>>133
いろいろ条件不足だな。どこまでやっていいの?
例えば API hook かけて F1 入力全部奪う手もあるし、
Excel の実行ファイル書き換えて F1 きかないようにする手もあるかもしれない。
135デフォルトの名無しさん:2006/04/04(火) 20:18:52
MSOHELP.EXEを消してそんな名前のダミープログラム置いておけばええやん
136デフォルトの名無しさん:2006/04/04(火) 20:24:12
俺はキーバインドいじって F1 も ESC にしてある
137デフォルトの名無しさん:2006/04/04(火) 21:05:29
130ですが、スルーっぽいので
他のスレで質問したいのですが、どこか良いとこあります?
138133:2006/04/04(火) 21:08:28
>>134-135
最良はExcel上でF1を押したときになにも起きなければOK。
ヘルプは関数使用時に稀に見るのでメニュー等からも立ち上がらなくなるのは困る。
他のアプリへの影響は、体感できないほどのタイムラグが出るくらいはOK。
実行ファイル書き換えは、私がその内容を検証できないのでNGでお願いします。

>>136
スレ違いだけど、Excelのキーバインドっていじれるの?
139デフォルトの名無しさん:2006/04/04(火) 21:13:00
>>133
低脳か貴様
答え教えてやるから、うざいから早く消えろ、マクロでF1になにもしないキー割り当てすればいいだろ
死ね
140133:2006/04/04(火) 21:18:10
>>139
うん。
で、それをどうやってやるの?
141デフォルトの名無しさん:2006/04/04(火) 21:22:54
そなるとC/C++ではないからスレ違いだな。
142デフォルトの名無しさん:2006/04/04(火) 22:01:54
>>140
グローバルフックあたりでググルべし。
143デフォルトの名無しさん:2006/04/04(火) 22:05:26
>>139
死ねって言ったね!
親父にも死ねって言われたことないのに!
144デフォルトの名無しさん:2006/04/04(火) 22:07:12
145デフォルトの名無しさん:2006/04/04(火) 22:17:55
>>130
・日本語で書いてくれ。
・ここはプログラム依頼スレじゃない。
#依頼スレはもう落ちてるけど。
・そういうソフトが世の中にはあったはずだから勝手に探せ。
146デフォルトの名無しさん:2006/04/04(火) 23:18:05
>>131
適当バージョン。ちゃんとやろうと思うと面倒いよね。

#define GET_INT( x ) do { printf( "Input " #x "> " );\
scanf( "%i", &x ); } while (0)
int main( void )
{
int a, b, c, d, e, f, x, y;
GET_INT( a ); GET_INT( b ); GET_INT( c );
GET_INT( d ); GET_INT( e ); GET_INT( f );
/* a*x + b*y = c -> a*d*x + b*d*y = c*d */
/* d*x + e*y = f -> a*d*x + a*e*y = a*f */
/* (b*d-a*e)*y = c*d-a*f */
y = (c*d-a*f) / (b*d-a*e);
x = (c - b*y) / a;
printf( "x = %d, y = %d\n", x, y );
return 0;
}
147デフォルトの名無しさん:2006/04/04(火) 23:39:51
授業単元: 個人的要望
問題文(含コード&リンク):
以下のソースコートはGetTickCount()の値がオーバフローするたびに
タイマーがうまく動作しなくなるバグを抱えています。
オーバフローしても正常に動作するようにしてほしいです。

ttp://anotherred.hp.infoseek.co.jp/cgi-bin/src/up1346.txt

環境
 OS: Windows および linux
 コンパイラ名とバージョン: bcc(5.5) gcc(3.4.3)
 言語: C
期限: 無期限
その他の制限:
 "alaram!(id:??)"と表示された時のGetTickCount() - GetTickCount()との差を取る以外のやり方を
 しりたいので、他の方法で解決してくださるとありがたいです。
 (googleで探しても、この方法以外、見つかりませんでした)
148デフォルトの名無しさん:2006/04/04(火) 23:50:08
>>147
スレタイ嫁やカス
149デフォルトの名無しさん:2006/04/05(水) 00:28:16
>>147
> Windows および linux
この時点で統一した方法は提示できない。
標準Cにミリ秒単位で時間を取得する方法が存在しないから。
環境ごとにコードを分けること。
150デフォルトの名無しさん:2006/04/05(水) 01:04:42
>>147
jAのコードをこんなとこに出すんじゃない。
151デフォルトの名無しさん:2006/04/05(水) 01:15:51
てゆか元のコードの時点で #include <windows.h> って書いてるじゃん
152デフォルトの名無しさん:2006/04/05(水) 02:30:48
>>147-151
板違いのようなので、削除依頼を出しました。

>>150
jAのコードの流れを参考に書いただけなんですが・・・
それもだめなようなので削除依頼を出しておきました。
これ以上の突っ込みはご勘弁を。
153デフォルトの名無しさん:2006/04/05(水) 03:42:33
差がなんであかんのかが分からん
直す個所は変わらんだろし
154デフォルトの名無しさん:2006/04/05(水) 10:20:00
[1] 授業単元:個人課題
[2] 問題文(含コード&リンク):
12345の数字列をループやand,orなどを使用して21345,23145などのスワップと同等の関数を作成する
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:BCC
 [3.3] 言語:C
[4] 期限:[無期限]
[5] その他の制限:なし
155デフォルトの名無しさん:2006/04/05(水) 10:26:35
問題の意味・意図がよくわからん

数字列はひとつのintであらわすってこと??
156デフォルトの名無しさん:2006/04/05(水) 10:33:00
「ループやand,orなど」 がどこまで許されているのかもわからんな。
157154:2006/04/05(水) 10:33:41
いえ、別々のものです
158デフォルトの名無しさん:2006/04/05(水) 10:34:13
#include <iostream>
#include <algorithm>
#include <string>

int main(void)
{
std::string str = "12345";
do {
std::cout << str << std::endl;
} while (next_permutation(str.begin(), str.end()));

return 0;
}

これで我慢しろ
159154:2006/04/05(水) 10:37:42
C++が読めません
数字自体と数字の位置とを変数 i, jと固定した上で、and,notなどを使用して、、と
160デフォルトの名無しさん:2006/04/05(水) 10:43:30
>>159
156 にも答えてくれや
161154:2006/04/05(水) 10:45:14
ループ2つとand or not xor と
162デフォルトの名無しさん:2006/04/05(水) 11:01:51
>>161
それしか使っちゃいかんのか。シフトくらい許して欲しいところだが。

というかそれしかないとループはほとんど意味ねーな。
163デフォルトの名無しさん:2006/04/05(水) 11:07:21
とりあえずものすごくベタに書くとこんなか。減算とシフトが残ってるので仕様を満たしてないが。
#include <stdio.h>
int iswap(int x, int i, int j) {
return x&~(0xf<<(i<<2))&~(0xf<<(j<<2))|(x&0xf<<(i<<2))<<((j-i)<<2)|(x&0xf<<(j<<2))>>((j-i)<<2);
}
int main() {
int x = 0x12345;
printf("%08x\n", iswap(x,2,4));
}
164154:2006/04/05(水) 11:11:33
ごめんなさい。+%などを忘れてmした。使用可能です
165デフォルトの名無しさん:2006/04/05(水) 11:11:59
>>163
>>157 だそうな(´・ω・`)
166デフォルトの名無しさん:2006/04/05(水) 11:14:24
iso646.hに定義されてるand orなどのマクロを使うんじゃないのか
167163:2006/04/05(水) 11:18:18
減算は無くせた。シフトははずせんな。

int iswap(int x, int i, int j) {
int t = ((x >> (i << 2)) ^ (x >> (j << 2))) & 0xf;
return x ^ ((t << (i<<2)) | (t << (j<<2)));
}
168163:2006/04/05(水) 11:24:39
>>165
別々ってことは int x[] = {1,2,3,4,5} ってこと?・・・無駄な努力しちまった orz
169デフォルトの名無しさん:2006/04/05(水) 11:29:42
>>168
ネタだと思ってた。
170デフォルトの名無しさん:2006/04/05(水) 11:59:46
せっかく>>163が作ってくれたので、シフトを展開。多分これであってるはず。

int iswap(int x, int i, int j) {
// int t = ((x >> (i << 2)) ^ (x >> (j << 2))) & 0xf;
// return x ^ ((t << (i<<2)) | (t << (j<<2)));
 int t,t1,t2,count;
 t1 = x;
 t2 = x;
 for(count=1;count<=sizeof(int);++count){
  if(count <= i){
   t1 /= 16;
  }
  if(count <= j){
   t2 /= 16;
  }
 }
 t = (t1 ^ t2) & 0xf;
 t1 = t;
 t2 = t;
 for(count=1;count<=sizeof(int);++count){
  if(count <= i){
   t1 *= 16;
  }
  if(count <= j){
   t2 *= 16;
  }
 }
 return x ^ (t1 | t2);
}

ループ2つなので変だが気にするな。
171デフォルトの名無しさん:2006/04/05(水) 12:02:19
>>170
乗算除算使ったら意味ないと思われ
172170:2006/04/05(水) 12:58:26
>>164で、+%などが使用可能ってあったから*/も可だと思ってた。しょうがないから割り算かけ算をループで処理。

int idiv(unsigned int x,unsigned int y){
 int i=0;
 while(y<x){
  x -= y;
  ++i;
 }
 return i;
}

int imul(unsigned int x,unsigned int y){
 int i=0;
 while(y--){
  i += x;
 }
 return i;
}
173170:2006/04/05(水) 12:59:35
int iswap(int x, int i, int j) {
 int t,t1,t2,count;
 int data[] = {0,0x10,0x100,0x1000,0x10000,0x100000,0x1000000,0x10000000};
 if(data[i]){
  t1 = idiv(x,data[i]);
 }else{
  t1 = x;
 }
 if(data[j]){
  t2 = idiv(x,data[j]);
 }else{
  t2 = x;
 }
 t = (t1 ^ t2) & 0xf;

 if(data[i]){
  t1 = imul(t,data[i]);
 }else{
  t1 = t;
 }
 if(data[j]){
  t2 = imul(t,data[j]);
 }else{
  t2 = t;
 }
 return x ^ (t1 | t2);
}

引き算も駄目ってことはないよな?
174デフォルトの名無しさん:2006/04/05(水) 13:03:19
>>167 によると引き算も無くしたかったらしいな。and, or, xor, not。
175170:2006/04/05(水) 13:45:23
int idiv(unsigned int x,unsigned int y){
 int t0,t1,t2,t3,i;
 i = 0;
 switch(y){
 case 0: t0 = 0x1; t1 = 0x2; t2 = 0x4; t3 = 0x8; break;
 case 1: t0 = 0x10; t1 = 0x20; t2 = 0x40; t3 = 0x80; break;
 case 2: t0 = 0x100; t1 = 0x200; t2 = 0x400; t3 = 0x800; break;
 case 3: t0 = 0x1000; t1 = 0x2000; t2 = 0x4000; t3 = 0x8000; break;
 case 4: t0 = 0x10000; t1 = 0x20000; t2 = 0x40000; t3 = 0x80000; break;
 case 5: t0 = 0x100000; t1 = 0x200000; t2 = 0x400000; t3 = 0x800000; break;
 case 6: t0 = 0x1000000; t1 = 0x2000000; t2 = 0x4000000; t3 = 0x8000000; break;
 case 7: t0 = 0x10000000; t1 = 0x20000000; t2 = 0x40000000; t3 = 0x80000000; break;
 }
 if(x & t0) i = 0x1;
 if(x & t1) i |= 0x2;
 if(x & t2) i |= 0x4;
 if(x & t3) i |= 0x8;
 return i;
}
int imul(unsigned int x,unsigned int y){
 int t0,t1,t2,t3,i;
 i = 0;
 switch(y){
 case 0: t0 = 0x1; t1 = 0x2; t2 = 0x4; t3 = 0x8; break;
 case 1: t0 = 0x10; t1 = 0x20; t2 = 0x40; t3 = 0x80; break;
 case 2: t0 = 0x100; t1 = 0x200; t2 = 0x400; t3 = 0x800; break;
 case 3: t0 = 0x1000; t1 = 0x2000; t2 = 0x4000; t3 = 0x8000; break;
 case 4: t0 = 0x10000; t1 = 0x20000; t2 = 0x40000; t3 = 0x80000; break;
 case 5: t0 = 0x100000; t1 = 0x200000; t2 = 0x400000; t3 = 0x800000; break;
 case 6: t0 = 0x1000000; t1 = 0x2000000; t2 = 0x4000000; t3 = 0x8000000; break;
 case 7: t0 = 0x10000000; t1 = 0x20000000; t2 = 0x40000000; t3 = 0x80000000; break;
 }
176170:2006/04/05(水) 13:47:40
 if(x & 0x1) i = t0;
 if(x & 0x2) i |= t1;
 if(x & 0x4) i |= t2;
 if(x & 0x8) i |= t3;
 return i;
}
int iswap(int x, int i, int j) {
 int t,t1,t2;
 t1 = idiv(x,i);
 t2 = idiv(x,j);
 t = (t1 ^ t2) & 0xf;
 t1 = imul(t,i);
 t2 = imul(t,j);
 return x ^ (t1 | t2);
}

だーめんどくせー。
177デフォルトの名無しさん:2006/04/05(水) 13:52:38
しかも 163 のままのほうがよっぽど綺麗だしなw
178154:2006/04/05(水) 15:27:17
ここで、進数変換禁止と言いだしました
179154:2006/04/05(水) 16:42:39
以下の kをどうしようってことでした。10-16進などを禁止すると未解決難問ってやつになるのかも

x[L] = {1,2,3,4,5}
for(j=0,j<L,j++)
for(i=0,i<L,j++)
...
k=iとjと各種演算
UFOcatcher(x,k) <ーxの中のk番目を取り出す関数
180デフォルトの名無しさん:2006/04/05(水) 16:46:33
加減乗除ありなら 10^i とか 10^j で割ったり掛けたりするだけ
181154:2006/04/05(水) 17:38:28
問題を間違えた。さらに後出ししたし、あきらめてるけど
昇降順変数i,jと各種演算を用いて、swap(x,i,j)を作る。
以下の kをどうするか、でした。xのシフトの所で上の回答の場合、できないような
x[L] = {A,B,C,D}
...
for(j=0,j<L,j++)
for(i=0,i<L,i++)
...
k=iとjと各種演算
UFOcatcher(x,k) <ーxの中のk番目を取り出す関数
182154:2006/04/05(水) 17:41:53
訂正
>昇降順変数i,jと各種演算を用いて、swap(x,i,j)を作る。

昇降順変数i,jと各種演算を用いて、UFOcatcher(x,k) を作る。
183デフォルトの名無しさん:2006/04/05(水) 19:12:28
意 味 不 明 に つ き ス ル ー
184デフォルトの名無しさん:2006/04/06(木) 03:49:08
なんか最近いちいちスルースルーうるさいヤツがいるな
スルーするなら黙ってしようよ
185154:2006/04/06(木) 06:40:41
x[L] = {A,B,C,D}
for(j=0,j<L,j++)

for(i=0,i<L,i++)
k=iとjと各種演算
y[i]=y[i]とUFOcatcher(x,k) <ー xの中のk番目を取り出し、配列 yにこれを格納
next

つまり
k=2,1,3,4のとき、y[]=BACD
k=2,3,1,4のとき、y[]=BCAD
となります。このような kを iとjと各種演算から実現する。

これが元々のお題でした。これまでの回答をヒントに考え中です
154は同じ問題に置き換わっているはず。
186デフォルトの名無しさん:2006/04/06(木) 06:42:53
>>185
日本語でおk
出題者ぶっ殺せ
187デフォルトの名無しさん:2006/04/06(木) 08:42:40
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
C++で以下の3つのFunctionを含むプログラムを書きなさい。
1)静的で大きな配列を宣言するFunction
2)スタック上に同じサイズの配列を宣言するFunction
3)ヒープから同じサイズの配列を作るFunction

何回も各サブプログラムを呼び出し、それを表示しなさい。また、その結果を説明しなさい。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:4/10
[5] その他の制限:なし

宜しくお願いします。
188デフォルトの名無しさん:2006/04/06(木) 08:51:16
>>154>>185を何十回読み直しても意味がわからない・・・
189デフォルトの名無しさん:2006/04/06(木) 09:09:59
>>187
静的に作るのはstatic
スタック上に確保するのは自動変数
ヒープはnew

後は自分で作れ
190デフォルトの名無しさん:2006/04/06(木) 09:24:06
191デフォルトの名無しさん:2006/04/06(木) 13:24:40
>>185 例えばこういう事か?
#include <stdio.h>
#define L 4

void view(int a[],int size){
 int i;
 for(i=0;i<size;++i){ printf("%d ",a[i]); }
 printf("\n");
}

int main(){
 int x[L] = {100,200,300,400};
 int y[L];
 int k,i;
 for(i=0;i<L;++i){
  k = (i ^ 1)+1;
  y[i] = x[k-1];
 }
 view(y,L);
 return 0;
}

これでkは順に2→1→4→3となりy[]={200,100,400,300}になる。
192デフォルトの名無しさん:2006/04/06(木) 13:29:13
c++です。


The line "using std::cout;",

a. ensures that you don't need to type so much.
b. allows you to reference the "std::cout" object.
c. places the "cout" object into the "std" library.
d. None of the above.

どれですか?教えてください
193デフォルトの名無しさん:2006/04/06(木) 13:33:15
aかな。少なくともbやcではない。
194デフォルトの名無しさん:2006/04/06(木) 14:50:22
実行ファイルを開いた瞬間他のプログラムを開くという処理はどうすればいいのか教えてくれ。
195194:2006/04/06(木) 14:58:24
環境:WinXP VC++
196デフォルトの名無しさん:2006/04/06(木) 15:05:57
>>195
すれ違い。
197デフォルトの名無しさん:2006/04/06(木) 15:06:25
スルー
198154:2006/04/06(木) 19:11:57
これまでの回答から答えの方針がほぼまとまりつつあります
k=iとjと3つの演算(4つかも)でできそうな気がします
回答をくださった方々ありがとでした
199デフォルトの名無しさん:2006/04/07(金) 20:27:19
[1] 授業単元:なし
[2] 問題文(含コード&リンク):
not,and,or,xorに新たな演算vip(0011vip0101=1101)を加えて以下の式を短くして下さい
注意:以下の大小かっこはCの記法と異なる
{((i=a) And 1) And b} Xor {((i=b) And 1) And a} Xor {((i!=a) And (i!=b)) And i}
[3] 環境
 [3.1] OS:選ばない
 [3.2] コンパイラ名とバージョン:選ばない
 [3.3] 言語:Cがいい
[4] 期限:[早いと助かる]
[5] その他の制限:なし
200デフォルトの名無しさん:2006/04/07(金) 20:41:25
VIP嫌いなのでスルー
201デフォルトの名無しさん:2006/04/07(金) 20:48:47
>>199
( a xor b xor i ) and not(a and b)
VIPは役に立たなかった...
202199:2006/04/07(金) 21:27:09
置き換えてみたのですがそれは間違えています
203デフォルトの名無しさん:2006/04/07(金) 21:39:12
>>199
何の言語で書かれているか知らんが、= と != は比較でいいんだよな?
204デフォルトの名無しさん:2006/04/07(金) 21:44:36
Not (b vip a)
205デフォルトの名無しさん:2006/04/07(金) 21:51:08
>>199
(a xor b xor i) and (a xor b)
206デフォルトの名無しさん:2006/04/07(金) 21:59:43
>>199
(a xor b) and (not i)
207デフォルトの名無しさん:2006/04/07(金) 22:19:43
(^ω^ )
208デフォルトの名無しさん:2006/04/07(金) 22:39:03
>>201で正解じゃないのか?
探索したら、
(i or a) xor (b or (i and a))
が見付かった。vipを含む解としては、
(i xor (not a)) xor (b vip (i and a))
があった。
209201:2006/04/07(金) 22:50:34
>>208
おー最短の式はそんな形になるんですねー。
自分の場合自力で真理値表を元に書いたけど、
ちゃんと探索しないとやっぱ最短式は出ないか。
210199:2006/04/08(土) 00:07:48
ただし、i,a,b が 1,0 以外の値もとるものとする。
211199:2006/04/08(土) 09:26:21
i=2,a=3,b=4 の場合 199の式=2、201,208の式=5 となりました
212デフォルトの名無しさん:2006/04/08(土) 11:29:35
>>211
ひどすぎる後付だな。
213ランディ:2006/04/08(土) 11:44:01
アップローダに宿題張ってます
誰かHelpしてください
前スレで聞いたけど反応無くて・・・
突っ込み等もアプロダで![自分的にこっちを汚さない進行
214デフォルトの名無しさん:2006/04/08(土) 11:46:47
>>213
アドレス貼れ!
どこにあるかわかんねぇよ!
215デフォルトの名無しさん:2006/04/08(土) 12:30:59
>>1のところのやつだな

どうやら月曜が期日らしい
216デフォルトの名無しさん:2006/04/08(土) 12:31:41
よく見たらスレッドごとの表示できるのなうpろだ

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1702
217デフォルトの名無しさん:2006/04/08(土) 13:00:30
これって確か題意がうまく読み取れない日本語でおkレベルの課題だったし
内容自体も面白くないのでスルーした記憶があるな
218199:2006/04/08(土) 21:14:44
>>212確かにそう考えるのが自然と思います。後付けじゃないですよ。条件不足の感があるかなと210を書きました
既に211のように拡張して考えるのが常識なのでは。
219デフォルトの名無しさん:2006/04/08(土) 21:24:21
>>199
Andとか==とかの定義が分からん。
And類がビット演算で、==の結果が0か1だとすると、(i, a, b)=(2, 3, 4)のとき>>199の式の値は0じゃないか?
220219:2006/04/08(土) 21:27:21
==じゃなくて=でした。
221デフォルトの名無しさん:2006/04/08(土) 21:52:11
>>199
この辺できちんと問題を立て直してもらわないと答えられないんじゃないか?
(1) 演算子の定義は下表の如く<iso646.h>と同様であると仮定してよいか答えよ。
  and  &&
  not.   !
  or    ||
  xor.  ^
(2) 短絡評価が有効か答えよ。
222199:2006/04/08(土) 22:34:16
>>219正しいよ>>221(1)&とか。まさかすれ違い?いい宿題のような気も(2)有効
俺が解答者になってるお。これからもそうなるのかお?
223デフォルトの名無しさん:2006/04/08(土) 22:40:12
> 俺が解答者になってるお。これからもそうなるのかお?

  \\_
:三ニ=:::::::ヽ
:ヽ.ニ=::て.>廴_    立場をわきまえてなくて
三.ヽ= (⌒ヽ;:;:;,.二)  うざいからスルー
ニ=-ヽ:ヽ、,∠.^^ぅ
〃,べ= ̄ニ二 ̄
/;:ィリ ノノ ,.へヽ
;:ヘ/ ̄ ̄ ̄Vヽヽ
ソ        ├┤|
224199:2006/04/08(土) 22:45:59
だって名無しなんだもん^^わかってない人もいそうだし。前のレスにわかる人がいそうだったんでスルーも仕方ないかな
わかる人なんだろーね?you
225221:2006/04/08(土) 22:51:40
>>222
「&とか」とは?正確にお願いしたい。
C言語(C99。C89については知らない)とC++においては、andは&&ということになっている。
226199:2006/04/08(土) 22:58:48
本質はそのあたりを無視した所にあると思います。Cでも表現可能と思います
227デフォルトの名無しさん:2006/04/08(土) 22:59:44
短絡評価が有効ってどういうこと?
228199:2006/04/08(土) 23:02:13
短縮置換と捉えてしまいました。短絡評価ですか。。?
229デフォルトの名無しさん:2006/04/08(土) 23:17:23
>>226
ビット演算なのか論理演算なのかくらいは分かるだろうて。
230デフォルトの名無しさん:2006/04/08(土) 23:21:06
[1] 授業単元:昨日から独学してる明解C言語入門編
[2] 問題文:等価演算子、関係演算子が1または0を生成してる事をたしかめるプログラム
#include <stdio.h>
int main(void)
{
int x1,x2;
printf("整数1:"); scanf("%d",x1);
printf("整数2:"); scanf("%d",x2);
if(x1==x2)
printf("%d",);
else
printf("%d",);

return(0);
}
これを元にしてx1==x2が真、偽の時で1、0が生成されるか確かめようと思ったんですが
分かりません。
231デフォルトの名無しさん:2006/04/08(土) 23:21:41
>>199

とりあえずさ, >>199 の式を C の流儀で書き直してくれない?
232デフォルトの名無しさん:2006/04/08(土) 23:24:06
>>230
printf("%d", x_1 == x_2);
233デフォルトの名無しさん:2006/04/08(土) 23:30:53
>>230
scanfで代入する変数の前に&つけないと

printf("整数1:"); scanf("%d",&x1);
printf("整数2:"); scanf("%d",&x2);
printf("%d", x1 == x2);
234デフォルトの名無しさん:2006/04/08(土) 23:35:07
>>232>>233
出来ました。ありがとございます。
if文の条件式でしか使えないのかと思ってました。
235199:2006/04/08(土) 23:36:01
>>231する気が無い(やれたら聞かないと思う)。つーことで終了。残念。試行錯誤してわかったらどこかのスレに書こうと思う
まず道具探しからするかな。瞬間にイメージできないんだよなこういうのって。道は長い
236& ◆HkDahYoHlc :2006/04/09(日) 01:07:46
Assuming that int a has a value of 3 and that integer array b has 7 elements, what is the correct way to assign the value of the sum of 3 and the third element, to the fifth element of the array?

a. b[ a + 1 ] = b[ a ] + 3;
b. b[ a + 1 ] = b[ a - 1 ] + 3;
c. b[ a ] + 1 = b[ a + 3];
d. b[ a + 2 ] = b[ a ] + 3;
237↑教えてください:2006/04/09(日) 01:08:53
お願いします。
238教えてください:2006/04/09(日) 01:10:41
これもお願いします。

What will the following method output, assuming it is called three times in
succession?

void foo() {
static int x = 8;
cout << x--;
}

a. 8 7 6
b. 876
c. 765
d. 8910
239教えてください:2006/04/09(日) 01:12:46
できればこれも・・・。すいません。

What is the pointer syntax equilvalent of the following?


book[i] = manuscript[j];

a. *book = *manuscript;
b. *(book + i) = *(manuscript + j);
c. *book + i = *manuscript + j;
d. book + i = manuscript + j;
240デフォルトの名無しさん:2006/04/09(日) 01:14:14
全部b
241デフォルトの名無しさん:2006/04/09(日) 01:14:23
>>236
b
>>238
b
242デフォルトの名無しさん:2006/04/09(日) 01:18:03
>>236
b.
>>238
b.

最近テンプレ従わないヤツが増えてきてやだな。
243デフォルトの名無しさん:2006/04/09(日) 01:43:28
春だしなぁ。何か香ばしいのもおるし。
244デフォルトの名無しさん:2006/04/09(日) 02:06:09
Hello World の出力方法を教えてください><
245デフォルトの名無しさん:2006/04/09(日) 02:28:32
・ヒタイにHello Worldと書く
・服を全部脱ぐ
・エウレカー!と叫びながら街を疾走
246デフォルトの名無しさん:2006/04/09(日) 02:57:37
>>244
li $v0, 4
la $a0, str
syscall
str:
.asciiz "Hello, World"
247デフォルトの名無しさん:2006/04/09(日) 08:47:08
>>244

msg db 'hello, world', 0x0A
msglen equ $ - msg
mov ecx, msg
mov edx, msglen
mov eax, 4
mov ebx, 1
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
248デフォルトの名無しさん:2006/04/09(日) 09:11:08
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):双方向リストを使って、アドレス帳を作りなさい。アドレス帳はstring name, int age, char address[100]を含むこと。structではなくクラス構造を使うこと。
[3] 環境
 [3.1] OS: Windows XP/Windows2000
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C++
[4] 期限: 4月14日まで
[5] その他の制限: STL リストを使わずに。

よろしくお願いします。
249デフォルトの名無しさん:2006/04/09(日) 09:17:31
>>248
アドレス帳の仕様を詳しく。例えば

・名前を指定しての検索(同じ名前のユーザがいたらどうするか?とか)
・名前を指定しての削除
・新しいユーザの挿入
・全ユーザの表示
・etc...

などの機能で、どんなものが必要かを全部きちんと書いてくれ。
250デフォルトの名無しさん:2006/04/09(日) 10:00:09
>>249
すいません。重要なところ忘れてました。

詳しい仕様は、

・新しいユーザの挿入(frontへかとbackへかの指定がないのでbackにだけだと思います)。この際ユーザ1人ずつにランダムでint 0000~9999(unique number)の数字を割り当てる。
・名前を指定しての削除
・次のユーザの詳細の表示
・前のユーザの詳細の表示
・名前か追加時に割り当てられた数字での検索。検索結果としてユーザの詳細を表示する。(名前で検索して同じ名前の人が2人いた場合は両方の詳細を表示する)
・そしてそのユーザがアドレス帳に存在しない場合はエラーメッセージを返す。
・ランダムに数字を決め、その数字に1番近い検索結果を表示する。検索結果としてユーザの詳細を表示し、どれだけ結果が近いかを%で表示すること。

です。
251デフォルトの名無しさん:2006/04/09(日) 10:58:57
dequeだっ。dequeを使うんだ!
listじゃないですじょ?
252デフォルトの名無しさん:2006/04/09(日) 11:00:27
>>251
STLはなるべく使わないで、双方向リストだけでやらないといけないみたいなんです。
253デフォルトの名無しさん:2006/04/09(日) 11:02:13
Cならまだしも、C++で車輪の再開発するのは気が進まないな
254デフォルトの名無しさん:2006/04/09(日) 11:09:27
つーか、VC6でプログラミングの授業やる時点でもうダメポ。
255デフォルトの名無しさん:2006/04/09(日) 12:11:57
>>250
最後の仕様がよくわからない。「近い」って何と何が近いの?%って何の比率?
256デフォルトの名無しさん:2006/04/09(日) 12:28:18
A = ランダムに決めた数
B = Aに最も近い検索結果
として
abs(B-A)/B*100
じゃないの? 知らんけど。
257デフォルトの名無しさん:2006/04/09(日) 12:43:33
上から3,4番目の仕様もわからん。
次のユーザ、前のユーザって、何を基準にして次とか前とか言ってるの?

>>256
「Aに最も近い」って、何を比較して近いっていってるの?
ランダムに割り振った番号との差の絶対値が最小ってこと?
あと、その計算式だと A = 10, B = 1 のときにパーセントが100を超えるし、
そもそも B = 0 が未定義になる。
258デフォルトの名無しさん:2006/04/09(日) 12:47:16
↑パーセントが100を超えると頭から煙を吐く厨がいます
259デフォルトの名無しさん:2006/04/09(日) 12:50:52
>>258
「結果の近さが200パーセント」ってどういう意味?
260デフォルトの名無しさん:2006/04/09(日) 13:13:55
「結果の近さが50%」も十分に意味不明だな
261デフォルトの名無しさん:2006/04/09(日) 13:20:43
そうでもないよ
262デフォルトの名無しさん:2006/04/09(日) 13:23:15
年齢検索とかじゃないんかね、よくわからんけど

どっちにしろ%で表すようなもんじゃないけどな
263教えてください:2006/04/09(日) 13:24:33
>>240-242
ありがとうございます。

これもお願いします。


[1] 授業単元:C/C++ Programming
[2]
The method prototype
double mySqrt( int x );


a. declares a method called mySqrt which takes an integer as an argument and
returns a double

b. defines a method called double which calculates square roots

c. defines a method called mySqrt which takes an argument of type x and returns a
double

d. declares a method called mySqrt which takes a double as an argument and
returns an integer

264デフォルトの名無しさん:2006/04/09(日) 13:36:20
>>263
a
265デフォルトの名無しさん:2006/04/09(日) 13:41:01
>>263
Cheating will not be tolerated, and will result in a failing grade for the students involved. Cheating includes, but is not limited to, turning in homework assignments that are not the student’s work.
266デフォルトの名無しさん:2006/04/09(日) 13:48:57
>>263
それぐらいの英語が読めないとマジやばいよ。
267教えてください:2006/04/09(日) 14:02:47
みなさん、ありがとうございます。

[1] 授業単元:C/C++ Programming
[2]

1.
Pointers may be assigned which of the following?

a. all integer values
b. an address
c. NULL
d. both (b) and (c)

2.
What is the pointer syntax equilvalent of the following?

book[i] = manuscript[j];


a. *book = *manuscript;
b. *(book + i) = *(manuscript + j);
c. *book + i = *manuscript + j;
d. book + i = manuscript + j;

お願いします。
268デフォルトの名無しさん:2006/04/09(日) 14:03:48
>>266
待て、きっと>>263は英語は読めるのに答えがどれか分からないんだよ!



余計にやばいけどなw
269デフォルトの名無しさん:2006/04/09(日) 14:05:12
>>267
d

b
270教えてください:2006/04/09(日) 14:06:20
3.
Assuming that you have an integer instance variable named "fuelLevel", what is the proper code for a "set" method for that instance variable?

a. void setFuelLevel(int fuelLevel) {
this->fuelLevel = fuelLevel;
}

b. void setFuelLevel(int fuelLevel) {
fuelLevel = fuelLevel;
}

c. int setFuelLevel(int fuelLevel) {
return fuelLevel;
}

d. int setFuelLevel(int fuelLevel) {
this->fuelLevel = fuelLevel;
}

4.
The line "using std::cout; ",

a. ensures that you don't need to type so much.
b. allows you to reference the "std::cout" object.
c. places the "cout" object into the "std" library.
d. None of the above.


これらもお願いします。
271デフォルトの名無しさん:2006/04/09(日) 14:07:04
英語読めませんが何か?
272デフォルトの名無しさん:2006/04/09(日) 14:07:27
>>270
スレが流れすぎるので、全部まとめてロダにうp
273デフォルトの名無しさん:2006/04/09(日) 14:16:00
>>270
両方a
274デフォルトの名無しさん:2006/04/09(日) 14:28:00
namespace namespace_with_very_long_name{ using std::cout; }
という例も考えられるがな。
275教えてください:2006/04/09(日) 14:43:41
最後にこの二つお願いします。


How must the following code be modified in order for the text "Hello World!" to be
displayed on the console?

#include <iostream>
using std::cout;
using std::endl;
class HelloWorld
{ public:
// Default Constructor definition
HelloWorld()
{}

void displayMessage()
{cout << "Hello World!" << endl;}
};

int main()
{ HelloWorld helloWorld;
return 0; }

a. In the main method, the line HelloWorld helloWorld; should be changed to read HelloWorld helloWorld("Hello World!");
b. The line "displayMessage();" should be placed in the body of the constructor.
c. The code is fine as is; no changes are necessary.
d. The following #include directive needs to be added: #include "HelloWorld.h"
276教えてください:2006/04/09(日) 14:44:13
2
Which of the following is not true?

a. the first element of an array is the zeroth
b. the last element of an array is the array size - 1
c. the position number contained within square brackets is called a subscript
d. a subscript cannot be an expression.
277デフォルトの名無しさん:2006/04/09(日) 15:10:31
>>275
b
>>276
d
278デフォルトの名無しさん:2006/04/09(日) 15:25:09
お前ら日本語使ってください
どんなやりとりしてるのかさっぱりです
279デフォルトの名無しさん:2006/04/09(日) 15:34:40
>どんなやりとりしてるのかさっぱりです
誰だ!そんなこと言う香具師は?!
280デフォルトの名無しさん:2006/04/09(日) 15:38:59
281248:2006/04/09(日) 17:56:02
>>250
はい。最後のが少し意味が分からないんです。
たぶん、もしランダムで決められた数字が500だとしたら、500を探し出して、500が存在した場合は100%。
500がなくてもし499が存在した場合は、499を表示する。
%の計算はたぶんですけど、(ランダムに決めた数/最も近い結果)*100じゃないでしょうか?

>>262
年齢検索は書かれていませんでした。
はい。私も最初読んだとき1番最後の仕様は変だなって思いました。

282248:2006/04/09(日) 17:59:02
すいません。
%計算 (最も近い結果/ランダムに決めた数)*100 の間違いでした。
283デフォルトの名無しさん:2006/04/09(日) 18:13:45
>>281-282
出題者に確認してこい。
284248:2006/04/09(日) 18:18:24
>>283
そうします。
とりあえず1番最後以外を教えていただいてもよろしいでしょうか?
285デフォルトの名無しさん:2006/04/09(日) 18:21:10
>>284
「次のユーザ」と「前のユーザ」って、何に対して次と前なの?
286248:2006/04/09(日) 18:23:49
>>285
current pointerが指してるノードの前のノードと次のノードだと思います。
287デフォルトの名無しさん:2006/04/09(日) 18:29:09
>>286
少なくとも >>250 の仕様ではユーザが生のカレントポインタを得ることは無さそうだが。
288248:2006/04/09(日) 18:35:59
>>287
え・・・。
すいません、それも確認してきます。
289248:2006/04/09(日) 20:38:14
>>287
確認してきました。

「次のユーザ(というかアドレス帳?)」と「前のユーザ」はやっぱり、リンクリストのカレントポインタを前後に動かしてそのポインタが指しているデータを表示するということだそうです。
そして1番最後の最も近い結果というのも、ランダムに決めた数字との差が1番近い検索結果を表示するということらしいです。

双方向リストなので、新しくユーザを挿入する場合は新しくノードを作り、nextポインタとpreviousポインタをそのノードに設定した後にcurrentポインタを新しいノードに設定するんですよね?
削除する場合はcurrentポインタを削除したいノードに設定すると習いました。
そんな感じでそのcurrentポインタが現在指しているノードの前後のノードのデータを表示するんだと思っているんですが、違うでしょうか?
290デフォルトの名無しさん:2006/04/09(日) 21:19:09
>>289
あー、なるほど。双方向リスト自身に今どのノードに着目しているかを表す
「カレントポインタ」って奴を持たせておく、ってことか。

追加で質問。
>>250 の要素の追加の "back" ってのは、カレントポインタの後?それともリスト自体の末尾?
・名前を指定して削除するときカレントポインタは移動する?存在しなかった場合は?
・検索のときカレントポインタは移動する?存在しなかった場合は?複数あった場合は?
・一番近い要素を見つけるときはカレントポインタは移動する?
291教えてください:2006/04/09(日) 21:29:27
みなさん、お世話になりました。ありがとうございます!!
292デフォルトの名無しさん:2006/04/09(日) 21:36:24
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
1,0で成り立つ既約多項式を50個生成するコードを作りなさい
[3] 環境
 [3.1] OS:ウィンドウズ
 [3.2] コンパイラ名とバージョン:BCC
 [3.3] 言語:C
[4] 期限:[課題を理解できるまで]
[5] その他の制限:なし
293デフォルトの名無しさん:2006/04/09(日) 21:37:56
なめんな
294デフォルトの名無しさん:2006/04/09(日) 21:49:09
>>292
オレ理解できた。
期限は過ぎたな。
じゃ、次。
295248:2006/04/09(日) 21:50:27
>>290
そうです。

追加質問についてですが、

・backという言葉がややこしかったですね。
うまく説明できないんですけど、リストを始めから空かどうかチェックして、ノードが空だったらそこへ挿入、そうでない場合は次のノードをチェックという感じでした。
なのでリスト自体の末尾というよりは、カレントポインタの後といったほうがいいかもしれないです。

・名前を指定して削除する場合、カレントポインタは削除したいノードに移動させ、削除後ネクストポインタが指している次のノードに移動させるようです。
存在しなかった場合はメッセージで存在しないことを伝えればいいんだと思います。

・検索の場合、カレントポインタを1番最初のノードへ移動させデータをチェック、そしてまた次のノードへポインタを移動しチェックしていく。
名前で検索して存在しなかった場合はエラーメッセージを、複数あった場合は全て表示。
割り当てられた数字で検索して存在しなかった場合もエラーメッセージを表示させる。数字で検索の場合、特定の数字を割り当てられているので複数あるというのはありえないため、結果は常に1つになります。

・1番近い要素を見つけるときも、検索時同様カレントポインタを移動させると思います。
296292:2006/04/09(日) 22:41:45
>>293おれ?>>294オレが理解できてません><
297デフォルトの名無しさん:2006/04/09(日) 23:08:55
>>292
「1,0 で成り立つ既約多項式」ってのは、体 K = GF(2) = {0,1} 上の既約多項式って意味でいいの?
298292:2006/04/09(日) 23:11:12
そうです
299デフォルトの名無しさん:2006/04/09(日) 23:27:12
>>298
表示あたりひどい手抜き実装だが

int irr(int x) {
  return x & 1 && (((x * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
}
void print(int x) {
  int i;
  for (i = 0; x > 0; ++i, x >>= 1) 
    if (x & 1) printf("X^%d+", i);
  printf("\b \n");
}
int main() {
  int x, cnt;
  for (x = 0, cnt = 0; cnt < 50; ++x) 
    if (irr(x)) print(x), ++cnt;
}
300299:2006/04/09(日) 23:29:36
ごめん嘘勘違いしてた
301299:2006/04/10(月) 00:11:53
>>298 今度は大丈夫。

int ord(int x) {
  int k = 0;
  while (x >>= 1) ++k;
  return k;
}
int rem(int x, int y) {
  while (x >= y) x ^= (y << (ord(x)-ord(y)));
  return x;
}
void print(int x) {
  int i;
  for (i = 0; x > 0; ++i, x >>= 1) {
    if (x & 1) {
      if (i == 0) printf("1+");
      else if (i == 1) printf("X+");
      else printf("X^%d+", i);
    }
  }
  printf("\b \n");
}
int main() {
  int X[50], x, k = 0, i;
  for (x = 2; k < 50; ++x) {
    int irr = 1;
    for (i = 0; i < k; ++i) 
      if (rem(x,X[i]) == 0) irr = 0;
    if (irr) X[k++] = x, print(x);
  }
}
302デフォルトの名無しさん:2006/04/10(月) 00:13:35
return x & 1 && (((x * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
303302:2006/04/10(月) 00:14:41
ミスった。
>>299
俺もよく分かってないんだが、
-return x & 1 && (((x * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
+return x & 1 && ((((x & 0x55555555) * 0x0101010101010101ULL) & 0x8040201008040201ULL) % 0x1FF) & 1;
でいいかな?
304299:2006/04/10(月) 00:18:34
>>303
駄目。そもそも 299 は既約多項式を求めていなかった。
305デフォルトの名無しさん:2006/04/10(月) 00:20:47
このスレは毎年この時期になるといつも程度が(ry
306デフォルトの名無しさん:2006/04/10(月) 06:58:26
C言語覚えたての大学生が混じるからだろ
307デフォルトの名無しさん:2006/04/10(月) 07:27:54
301 って程度低い? 俺結構凄いと思うんだけど
308デフォルトの名無しさん:2006/04/10(月) 08:04:10
そもそも既約他項式て何w
高校で習うの?
309デフォルトの名無しさん:2006/04/10(月) 08:48:31
たしか因数分解不可能な多項式のことだった気がする
310デフォルトの名無しさん:2006/04/10(月) 10:29:33
ドイツ語でHello World の出力方法を教えてください
311デフォルトの名無しさん:2006/04/10(月) 10:35:27
>>310
違う場所で質問してください
312デフォルトの名無しさん:2006/04/10(月) 11:16:09
>>310
printf("∬∧βε ∂ζ⊂η");
313デフォルトの名無しさん:2006/04/10(月) 15:16:52
どうしても分からないのでよろしくお願いします。

Javaの配列について、以下の問に答えよ。

・int型の要素を50個持つ配列(配列名arr)を作るためのJavaの命令を書け。

・配列arrの値を全て0に初期化するための命令を,for文を用いて書け。

・配列arrの要素を全て画面に表示するための命令を,for文を用いて書け。

・配列arrの7番目の要素の値を-1に書き換えるためのJavaの命令を書け。
314デフォルトの名無しさん:2006/04/10(月) 15:21:32
>>313
スレ違い(失笑)
315デフォルトの名無しさん:2006/04/10(月) 15:22:15
>>313
>1
316デフォルトの名無しさん:2006/04/10(月) 15:23:31
>>313
int[] arr = new int[50];
for (int i = 0; i < arr.length; ++i) {
    arr[i] = 0;
}
for (int i = 0; i < arr.length; ++i) {
    System.out.println(arr[i]);
}
arr[6] = -1;
throw new NullPointerException("ぬるぽ");
317248:2006/04/10(月) 17:47:26
もう1度書いておきます。
誰か教えてください、お願いします。

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):双方向リストを使って、アドレス帳を作りなさい。アドレス帳はstring name, int age, char address[100]を含むこと。structではなくクラス構造を使うこと。
[3] 環境
 [3.1] OS: Windows XP/Windows2000
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C++
[4] 期限: 4月14日まで
[5] その他の制限: STL リストを使わずに。

双方向リストに今どのノードを指しているかを表すカレントポインタを持たせる。
下の仕様での検索時、挿入時、削除時では全てこのカレントポインタを使用する。

仕様:

・新しいユーザの挿入(ノードが空かどうかチェックし、空であればそこへ挿入、そうでなければ次のノードへ移動))。
この際ユーザ1人ずつにランダムでint 0000~9999(unique number)の数字を割り当てる。
・名前を指定しての削除(カレントポインタを削除したいノードへ移動)。
存在しない場合はエラーメッセージを返す。
・次のユーザの詳細の表示(カレントポインタの指している次のノードのデータ)
・前のユーザの詳細の表示(カレントポインタの指している前のノードのデータ)
・名前か追加時に割り当てられた数字での検索(カレントポインタを1番最初のノードへ移動させチェック、そしてまた次のノードへ移動)。
検索結果としてユーザの詳細を表示する。
存在しない場合はエラーメッセージを返す。(名前で検索して同じ名前の人が2人いた場合は両方の詳細を表示する)
・ランダムに数字を決め、その数字に1番近い検索結果を表示する。検索結果としてユーザの詳細を表示し、どれだけ結果が近いかを%で表示すること。
%=(1番近い結果/ランダムに決めた数字)*100

よろしくお願いします。
318デフォルトの名無しさん:2006/04/10(月) 17:49:47
その仕様だとランダムに決めた数字が0のときに死亡。
319248、 317:2006/04/10(月) 17:52:43
>>318
新しいユーザの挿入時にintで0からの数字を割り当てられててもダメでしょうか?
320デフォルトの名無しさん:2006/04/10(月) 18:04:58
まあ、そのへんは出題者もアフォっつーことで適当に処理すりゃいいんでない
321248. 317:2006/04/10(月) 18:06:19
>>320
その方向でお願いします。
あれでしたら1番最後の仕様は無視してくださってもいいので。
322デフォルトの名無しさん:2006/04/10(月) 20:35:38
>>317
設問はそれで全部でいいの?
中途半端に乗せないで丸々載せてくれないと勘違いするかもよ?
323デフォルトの名無しさん:2006/04/10(月) 23:30:57
なんで name はstringでaddressはそうじゃないんだ?
324デフォルトの名無しさん:2006/04/11(火) 00:02:16
>>317
仕様ってのは全部アドレス帳の機能でいいのか?
カレントポインタを削除対象のデータまで移動させたり
最後の仕様のランダムな数字を決めるのもアドレス帳の機能?
325317:2006/04/11(火) 00:59:51
>>322
はい。これで全部です。

>>323
こう書いてあったので理由は分かりませんが、nameは姓 名ではなくニックネームのようなもののみや下の名前だけでいいみたいです。

>>324
はい。仕様は全てアドレス帳の機能です。
カレントポインタを移動させたりするのはアドレス帳の機能というより、双方向リストの機能だと思います。
リストクラスの中にカレントポインタを定義して移動させるように習いました。
アドレス帳の機能として削除を選び、名前を指定したときにリストがその名前を探し出してカレントポインタを移動するので双方向リストの機能だと考えています。
最後の仕様のランダムな数字を決めるのもアドレス帳の機能です。
326187:2006/04/11(火) 04:13:28
>>187をお願いします。
327デフォルトの名無しさん:2006/04/11(火) 06:54:23
>>326
何を表示するの?
「それ」と書かれても該当しそうなのは「Function」くらいしか見つからないけど
「関数を表示する」とは普通言わないわけで。
328デフォルトの名無しさん:2006/04/11(火) 06:59:28
サブプログラムを呼び出す部分(メインプログラム?)もC++で作るんだろうか
329187:2006/04/11(火) 08:22:58
>>327
すみません。
「それ」は数字のことです。
どうかお願いします。
330デフォルトの名無しさん:2006/04/11(火) 09:54:35
何の数字だよ、おい。

void Function1() {static int array[BIGNUM];}
void Function2() {int array[BIGNUM];}
void Functino3() {int * array = new int[BIGNUM]; delete array[];}
331デフォルトの名無しさん:2006/04/11(火) 19:45:28
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
長いので、次のレスに。
[3] 環境
 [3.1] OS:windowsXP
 [3.2] Borland C++ 5.5.1 for Win32
 [3.3] 言語:C言語
[4] 期限:[2006年4月13日まで]
[5] その他の制限:まだ基本しか習ってません。週1で半年しかやってないので。現在大学2年です。
332331:2006/04/11(火) 19:46:20
入力として

●.. 英文が入っているテキストファイルの名前
●.. ページの幅(文字数)と行数
が与えられるものとする。
このテキストファイルの内容は,英単語が1 つ以上の空白又は1 つの改行によって区切
られた段落から構成される。段落同士は,1 つ以上の空行によって区切られる(2つ以上,
改行が連続していれば段落が変わったと見なす)。

テキストファイルから単語を読み込み,その単語を行に並べ,行が一杯になったら表示
をする(画面に表示する,あるいは出力ファイルに書き込む),という処理を繰り返してい
く。段落が終わっても表示をする。

次の関数を記述して,このプログラムを書きなさい。
void next_word(char word[ ]) この関数を呼ぶと,文字列word にテキストファイルが
格納されて戻ってくる(皆さんは,配列をこのように使うことをやったことがないかもし
れません。配列を宣言して,中身を入れずに関数に渡して,関数の中で中身を入れます。
関数から戻ってくると中身が入っているということになります)。文字列word には,空白
や改行が取り除かれて格納されること。なお,テキストファイルへのファイルポインタは,
グローバル変数として定義して,この関数内で利用してよい。
void print_line(char line[ ], int num_of_words)この関数を呼ぶと,行として出力すべき文字
列line を出力ファイルに出力する。num_of_words は,この行に入っている単語数を渡す。
わざわざ関数にするのは,この後の拡張に対応するためである。なお,出力ファイルへの
ファイルポインタ及びページ幅は,グローバル変数として定義して,この関数内で利用し
てよい。
自分の知識の無さを恥じています。正直分からないので、本当に誰か助けてください。
333デフォルトの名無しさん:2006/04/11(火) 20:38:32
>>332
>文字列word にテキストファイルが格納されて戻ってくる
ほんとにこれで合ってるのか?
だとしたら出題者のレベルを疑うが。
next_word()なら現在のファイルポインタが指す位置から見て
直後の1単語を取ってくるのが自然だろう
それにバッファだけ渡すって設計もなんだかな

とりあえず原文のままうpしろ
それが原文なら出題者を窓から投げ捨てろ
334デフォルトの名無しさん:2006/04/11(火) 20:46:39
「入力として」というのは
 ・コマンドライン引数
 ・scanfとかその類
のどっち?
多分講義ではこれまでの課題からどちらであるかは自明なのだろうが、
こういう場で聞くときにはそうした自明の条件も明示する必要がある。
335331:2006/04/11(火) 20:54:43
入力として、はscanfのほうです。
問題は原文のままです。基本的に長文打つのは苦手なので・・・コピペです。
336デフォルトの名無しさん:2006/04/11(火) 20:55:50
出題者窓逝きだー
337331:2006/04/11(火) 20:57:34
今,皆さんが英文の文書を作るときには,Word などのワープロソフトを使うだろう。ほ
んの20 年くらい前までは,英文の文書を作るときには,機械式のタイプライターを利用し
ていた。タイプライターで英文を作成すると,

●.. 文字の幅が同じである。
●.. ページの右端に来て単語が入らなくなると改行する。
ということになる。このような処理をするプログラムを作成したい。
プログラム1〜3まで順次拡張していく。それぞれプログラムを作成し,テストデータ
で結果を確認する必要がある。

プログラム2,3はやらなくてOKになったので省略しました。
338デフォルトの名無しさん:2006/04/11(火) 20:58:05
読みにくいな
339331:2006/04/11(火) 21:01:30
これが出来ないと講義の受講が認めない⇒留年決定 なんです・・・
問題定義が本当にあいまいでマジ辛いです・・・助けてくださいorz
340デフォルトの名無しさん:2006/04/11(火) 21:02:29
俺には出題者が何を言いたいのかわからない orz
理解に苦しむ
341デフォルトの名無しさん:2006/04/11(火) 21:03:25
出題が曖昧な上、いろいろとおかしいので誰もやらないと思われ
342デフォルトの名無しさん:2006/04/11(火) 21:06:33
問題定義があいまいなのはここで相談してもあいまいなまま。
出題者に確認してこい。
つーか、そんな講師の単位とってもクソの役にも立たんな。
まぁそんな大学選んだ時点で藻前の敗北だ。
343デフォルトの名無しさん:2006/04/11(火) 21:08:06
       ∧∧
 〜´ ̄ ̄(,,゚Д゚) <出題者!問題の意味を教えろゴルァ!
   UU ̄UU
344331:2006/04/11(火) 21:09:10
大学名いってもいいのかな・・・?
345デフォルトの名無しさん:2006/04/11(火) 21:10:05
>>339
曖昧だとおもってたなら確認すりゃいいだろ
普通は聞けばこれはこういう意図だと教えてくれるはず

それすらないなら窓決定だな
346デフォルトの名無しさん:2006/04/11(火) 21:15:11
大学名キボーン
347331:2006/04/11(火) 21:15:54
専修大学ネットワーク情報学部です
ああ・・・言っちゃったorz
348デフォルトの名無しさん:2006/04/11(火) 21:18:09
先生は?
メールアドレスは?
349331:2006/04/11(火) 21:19:48
え?まさかメールする気?
350デフォルトの名無しさん:2006/04/11(火) 21:19:57
通報しますた(´・д・`) とかやるつもりはないが
そんな教授の授業なんて受けない方がいいと思う
他で単位をどうにかできるなら留年覚悟でそれは捨てろ
他でもどうにもできないなら諦めろ
351デフォルトの名無しさん:2006/04/11(火) 21:23:09
曖昧だとわかっているのなら質問すればいいよ。
先生と話すのが苦手なら友達に聞くとか。
友達いないならこんなとこで質問してないで一人で生きていけるだけの力つけないとこの先つらいぞ。
352デフォルトの名無しさん:2006/04/11(火) 21:25:32
捨てアドレスでメールします。
353331:2006/04/11(火) 21:29:35
松永って人です
メールアドレスは多分大学のhpのどこかにあります・・・
354デフォルトの名無しさん:2006/04/11(火) 21:31:02
代ゼミランキングで偏差値50〜52
偏差値マンセーじゃないけれど、やっぱそれなりの大学にはそれなりの講師しかおらんな
355デフォルトの名無しさん:2006/04/11(火) 21:36:39
松永ハケーン!
356331:2006/04/11(火) 21:39:21
友達はいます・・・
でもみんな、問題の意味が分からずまだ終わってないです
357デフォルトの名無しさん:2006/04/11(火) 21:41:53
意味不明な日本語つかう講師はどこの大学でもいるけどな。
だから曖昧なところがわかってるんだから質問すればいいって言ってるのに。
高い金払ってるんだから怒られるわけないじゃん。

とりあえず意味不明なところを列挙するから聞いて来い。
・画面に表示する,あるいは出力ファイルに書き込む
画面に表示するか、出力ファイルに書き込むかはどうやって選択するのか?

・文字列word にテキストファイルが格納されて戻ってくる
ファイルポインタが指している次の単語の間違いではないのか?

・行として出力すべき文字列line を出力ファイルに出力する。
結局画面には表示しなくていいのか?出力ファイルの名前はソース中に埋め込むのか?それともユーザに入力させるのか?
358デフォルトの名無しさん:2006/04/11(火) 21:43:46
ttp://www.senshu-u.ac.jp/School/network/faculty/matsunaga.html

慶応の博士課程リタイア。それで助教授になれるらしい。
359357:2006/04/11(火) 21:45:01
出力先をリダイレクトで切り替えるという解釈をするなら一つ目と三つ目はいいよ。
二つ目はあきらかに意味不明。
360デフォルトの名無しさん:2006/04/11(火) 21:53:30
誰かメールした?
361357:2006/04/11(火) 21:54:48
void print_line(char line[ ], int num_of_words)
これって
void print_line(char *line[ ], int num_of_words)
の間違いじゃね?
362デフォルトの名無しさん:2006/04/11(火) 21:57:33
学生向けの宿題の仕様すらまともに書けない無能が、
オブジェクト指向技術を用いた情報システムの構築,情報検索・情報共有の支援と教育への応用
という大層な研究テーマを掲げているんですか。
363デフォルトの名無しさん:2006/04/11(火) 21:58:12
●.. ページの幅(文字数)と行数
良く見たら行数ってのもなににつかうのかわからん。
364デフォルトの名無しさん:2006/04/11(火) 21:59:31
件名何が良い?
365デフォルトの名無しさん:2006/04/11(火) 22:01:17
「あんたの無能さについて」
366デフォルトの名無しさん:2006/04/11(火) 22:01:34
OK
367デフォルトの名無しさん:2006/04/11(火) 22:04:50
お前ら本当に凄いな・・・
俺にはそんなメールする勇気ないぞ
368デフォルトの名無しさん:2006/04/11(火) 22:06:54
とりあえず適当に問題文と下のを送ってみる
>>357
>>359
>>361
>>363
369デフォルトの名無しさん:2006/04/11(火) 22:07:19
なんか前に見たことがある気がする。
前に見たときも問題の意味がサッパリわからなかったが。
370デフォルトの名無しさん:2006/04/11(火) 22:11:35
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
に送った内容を書いといた。
ちょっと適当すぎたかも
371デフォルトの名無しさん:2006/04/11(火) 22:15:21
>>361
それは大丈夫じゃね?
372デフォルトの名無しさん:2006/04/11(火) 22:16:16
じゃ俺はゲームするから一旦落ちるわ
373デフォルトの名無しさん:2006/04/11(火) 22:22:08
>>371
line[ ]に出力する文字列がそのまま入ってたらnum_of_wordsの仕様用途が意味不明じゃね?
374デフォルトの名無しさん:2006/04/11(火) 22:22:32
講義んときなんかいわれそうだな
いたずらメール送ったのは誰だ!とか
375デフォルトの名無しさん:2006/04/11(火) 22:30:56
エスパーぶりをフル回転させてちょっとやってみたが、かなり苦しい。
無理やり合わせようとすると、とてもじゃないが331の頭で理解できるとは思えん。
376331:2006/04/11(火) 22:38:08
わからないなりにソース作ってみました。
なぜかファイルが読み込めないので理由を教えてください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
の1727におきました
377317:2006/04/12(水) 00:17:31
317です。
331さんに便乗するようですが、私も自分なりに双方向リストを作ってみました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
1736.zip です。

現在stringの名前で挿入、追加、削除はできるようになりました。
ノードの中に1つのデータは入れられるのですが、3つのデータを入れるのができません。
3つのデータを1つのノードに入れるにはどうしたらいいんでしょうか?
378317:2006/04/12(水) 02:24:07
訂正です。
1つのデータというより、1つのデータフィールドは入れられるのですが、データフィールドを3つ(string name, int age, char address[100])にして同じように機能させるやり方がわかりません。
379デフォルトの名無しさん:2006/04/12(水) 05:34:43
>>376
>なぜかファイルが読み込めないので理由を教えてください。
fopenがnext_word、print_line内にあるのが原因。
next_word、print_lineは繰り返し何度も呼び出されるため、その都度fopenが実行されている。
main関数内の、for(i=0;i<linenum;i++){の行の前に移動させればOK。

ソース見てようやく何をやりたいのか分かった。ろだの1737に修正をあげといた。関数が若干指定と違うが。
380331:2006/04/12(水) 07:10:41
>>379さん
ありがとうございます!
もしよければ・・・空白と改行を取り除いたやつも作ってくれれば助かります。
381331:2006/04/12(水) 07:13:08
文章ちょっと変だった・・・
空白と改行は取り除かれるようにしたソースも、でした。
382331:2006/04/12(水) 16:58:55
すいません、途中まで作ったんですが、なぜかただしく出来ません。
単語の文字数をstrlenで調べていき、最初に指定した文字数に達したら、今まで取得した単語を一列に並べて表示させるやつなんですが・・・
おかしい部分あったら指摘してください
1738にのせました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=31
383デフォルトの名無しさん:2006/04/12(水) 17:25:50
>>382
面倒なんでコンパイル通してないが
>line[0-256]='\0';
こんな文法無かった気がするんだが

んで、それだとループ回る毎にlineの値が破棄されてるがいいのか?

それと細かいことだがこうした方がいい
+ now_lines+=strlen(word);
- now_lines=strlen(word)+now_lines;

使えるところでは複合代入演算子使え
その方が可読性も向上するし、ミスも減る
384331:2006/04/12(水) 17:34:44
ラインに単語がたまったので、プリントしたあとに中を空にしようとおもってそうしたんですが、やっぱ違ったのかな・・・
385デフォルトの名無しさん:2006/04/12(水) 17:42:29
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
x=a;b+c, y=2a-b で与えられ、a、b、cはそれぞれ1から100までの整数値をとる。
x=n, y=n(nは1から100)となるa,b,cの組み合わせの総数C(n)を求めよ。
ただし、a,b,cは全て異なる整数である。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:自由
 [3.3] 言語:C
[4] 期限:[2006年04月30日まで]

お願いします!
386デフォルトの名無しさん:2006/04/12(水) 17:46:21
>>385
問題の意味がわからない。日本語でおk
387デフォルトの名無しさん:2006/04/12(水) 17:49:34
すいません、x=a+b-c でした。
388デフォルトの名無しさん:2006/04/12(水) 17:56:39
>>386
おまえが数学的な表現になれてないだけじゃないか?
x(a, b, c) = a + b - c
y(a, b, c) = 2a - b
のとき、
{(a, b, c) | 1 <= a b c <= 100, n = x(a, b, c), n = y(a, b, c), a != b, a != c, b != c}
の要素の数をnで表せって事だろ。
389デフォルトの名無しさん:2006/04/12(水) 18:04:21
>>385
# include <stdio.h>

int c(int n)
{
  int a, b, c, sum;
  sum = 0;
  for(a = 1; a <= 100; a++)
    for(b = 1; b <= 100; b++)
      for(c = 1; c <= 100; c++)
        if(a + b - c == n && 2 * a - b == n && a != b && b != c && a != c)
          sum++;
  return sum;
}

int main(void)
{
  int n;
  printf("Input n: ");
  scanf("%d", &n);
  printf("C(n) = %d\n", c(n));
  return 0;
}
390379:2006/04/12(水) 18:28:02
>>381
>空白と改行は取り除かれるようにしたソース
入力ファイルにある空白と改行は無視して文字を詰めて出力するのか?
なら、379で上げたソースの17行目(case ' ':のすぐ下のword[i++] = c;)を1行だけ削除。
391331:2006/04/12(水) 18:38:48
ありがとうございます!
マジ助かります・・・こんな問題で留年とかこわいので
392デフォルトの名無しさん:2006/04/12(水) 19:49:45
メールこねぇな・・・
やっぱ件名がやばかったかな?
件名「あんたの無能さについて」
393331:2006/04/12(水) 19:56:38
まじでおくったんだw
講義んときなんか言われたら教えるね
394385:2006/04/12(水) 22:22:26
遅くなったけどありがとうございました!
明日大学で確認してみます。
395デフォルトの名無しさん:2006/04/12(水) 22:46:22
このスレのやりとり、教授も見てるかもな( ̄ー ̄)ニヤリ
396教授:2006/04/12(水) 22:57:03
宿題マダー?
397デフォルトの名無しさん:2006/04/13(木) 00:11:34
教授とかはこういう所を見ない希ガス
398デフォルトの名無しさん:2006/04/13(木) 00:13:12
TAは見てるぜ!
399デフォルトの名無しさん:2006/04/13(木) 00:21:46
ところでこれ知ってる人いる?
これは俺が小学生のときに何日か流行ったんだ。
「あたったあたったハワイのパチンコ」
400デフォルトの名無しさん:2006/04/13(木) 02:25:05
漏れのところは
国際パチンコだったが
401デフォルトの名無しさん:2006/04/13(木) 13:27:11
知らない人の為に。
「あたったあたったハワイのパチンコ」
        ↓
「あ」「ハ」「パ」を取って読む

メールこねぇな・・・
捨てられたかもな
402デフォルトの名無しさん:2006/04/13(木) 13:35:45
あたった
あたった
ハワイの
パチンコ

ヤッターマン
コーヒー
ライター
403デフォルトの名無しさん:2006/04/13(木) 13:41:23
エロ四天王、東を司る神の降臨だー
404デフォルトの名無しさん:2006/04/13(木) 15:16:38
[1] 授業単元:c
[2] 問題文(含コード&リンク):キーボードから20個の文字を入力し、英大文字、英小文字、その他の小文字の個数種類別にを表示する。
[3] 環境
 [3.1] Linux
 [3.2]gcc
 [3.3] 言語:c
[4] 期限: [無期限]
[5] その他の制限: 無し

よろしくお願いします。
405デフォルトの名無しさん:2006/04/13(木) 15:17:42
404 その他の小文字ではなく、その他の文字です。まちがえました。。
406デフォルトの名無しさん:2006/04/13(木) 15:20:10
なんでこの手の、入力させて種類ごとにカウントとか、そういうの絶えないんだろ('A`)
407デフォルトの名無しさん:2006/04/13(木) 15:24:02
プログラミング言語初学者に対して教育的だから。
408デフォルトの名無しさん:2006/04/13(木) 15:25:58
int lower=0, upper=0, other=0;
int i;
int c;

for (i=0; i<20;i++) {
c=getchar();
if (islower(c)) lower++;
else if (isupper(c)) upper++;
else other++;
}


あとは自分で考えろ('A`)
409デフォルトの名無しさん:2006/04/13(木) 15:45:22
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):コマンドライン引数からアルファベット小文字だけからなる文字列のみを選んで、 すべての文字を対応する大文字に変換し、 一行に一つずつ標準出力に出力するプログラムを作れ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: :2006/04/16
[5] その他の制限: 特になし
410デフォルトの名無しさん :2006/04/13(木) 15:56:06

if(0!=islower(c)
c=c-
411デフォルトの名無しさん:2006/04/13(木) 16:05:22
#include <stdio.h>

int main(int argc, char *argv[]) {
int i, j;
for (i=1; i<argc; i++) {
for (j=0; argv[i][j]!='\0'; j++)
if (!islower(argv[i][j])) goto NEXT;
else argv[i][j] = toupper(argv[i][j]);
printf("%s\n", argv[i]);
NEXT:
;}
}

なぜかNEXT:の次の行で、}の前のセミコロン抜かすとコンパイラにおこられたんだがナンデー(;´Д`)
412デフォルトの名無しさん:2006/04/13(木) 16:06:19
っていうかbreakでいいのかコレorz
なぜか2段ごとぬけなきゃいけないとおもいこんでいたorz
413デフォルトの名無しさん:2006/04/13(木) 16:07:23
たびたびすまん、やっぱりGOTOいるわwwwww
414デフォルトの名無しさん:2006/04/13(木) 16:18:41
>>411
ラベルは文に名前を付けるものだから、たとえ空文でも文が必要。
415デフォルトの名無しさん:2006/04/13(木) 16:20:15
>>411
argvを書き換えるなよ…
416デフォルトの名無しさん:2006/04/13(木) 16:22:08
int main(int argc, char **argv) {
int i;
for (i = 0; i < argc; i++) {
417デフォルトの名無しさん:2006/04/13(木) 16:22:32
>>414 あー、そういうことか
んじゃもう少し正しく(?)するには
NEXT:
;
}
っていうことか

>>415 めんどくさかったんだもん(・ω・)
418デフォルトの名無しさん:2006/04/13(木) 16:26:44
途中で書き込んじゃったよ('A`
419デフォルトの名無しさん:2006/04/13(木) 16:39:21
>>409
#include <stdio.h>
#include <ctype.h>

int main(int argc, char **argv) {
int i, j;
for (i = 1; i < argc; i++) {
j = 0;
while (islower(argv[i][j]))
j++;
if (argv[i][j] == '\0') {
j = 0;
while (argv[i][j] != '\0')
putchar(toupper(argv[i][j++]));
putchar('\n');
}
}
return 0;
}
420デフォルトの名無しさん:2006/04/14(金) 01:43:34

課題は適当な初期値(得点、順位)を与えてそれを
正しい順位に直すプログラムを作るというものです。
つまり例えば(得点、順位)=(10、1)(30、1)(20,1)の3つの値を(10、3)(30,1)(20,2)に変換するというものです。
rank1関数は問題に与えられていたのでいじらず自分で作るのはmain関数のみです。
下の私が考えたmain関数では実行結果が

得点は10、順位は5位です。
得点は100、順位は2位です。
得点は80、順位は2位です。
得点は30、順位は3位です。
得点は60、順位は2位です。

となり、なにかおかしいです。わかる方アドバイスお願いします。

環境
OS:Linux
コンパイラ名とバージョン: gcc  
言語: C
期限: できれば明日中で
421デフォルトの名無しさん:2006/04/14(金) 01:45:33
>>420の私の考えたプログラムです。
#define LIST_SIZE 5
#include<stdio.h>

struct data{
int rank;
int score;};

void rank1(struct data *z,int n){
int i,j;
 for(i=0;i<n;i++)
z[i].rank=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(z[i].score<z[j].score)
z[i].rank++;}
/*たぶんここから下がおかしいんだと思います。*/
int main(void){
 int i;
 struct data z[LIST_SIZE]={{0,10},{0,100},{0,80},{0,30},{0,60}};

for(i=0;i<LIST_SIZE;i++){
rank1(&z[i],LIST_SIZE);
printf("得点は%d、順位は%d位です。\n",z[i].score,z[i].rank);
}
return(0);
}
422デフォルトの名無しさん:2006/04/14(金) 01:49:47
フラグってなんですか?
423デフォルトの名無しさん:2006/04/14(金) 01:57:56
>>420
添削はすれ違い。

>>421
rank1の呼び出しはforに入る前に、
rank1(z, LIST_SIZE);
とすべき。

>>422
質問はすれ違い。
424デフォルトの名無しさん:2006/04/14(金) 02:02:57
>>423即レスありがとうございます。中に入れた場合は何が不都合になるんですか?
425デフォルトの名無しさん:2006/04/14(金) 02:51:46
>>424
だからスレ違いだと言ってるだろ。
即刻消えろ。
426デフォルトの名無しさん:2006/04/14(金) 07:55:35
誘導されて来ました。
10kバイト程度のバイナリファイルから特定の部分(例えばFF E3で始まり、04 0Fで終わるような区間)だけを、1バイトずつint型の配列に入れていく方法をご教授願います。
OSはXPでメモりは1Gです。C言語でおねがいします。
427デフォルトの名無しさん:2006/04/14(金) 11:35:17
428デフォルトの名無しさん:2006/04/14(金) 13:58:49
[1] 授業単元:
[2] 問題文(含コード&リンク): コマンドライン引数から十進整数値として解釈できる文字列のみを選び、 値が小さい順に並べ替えて、一行に一つずつ標準出力に出力するプログラムを書け。 ただし、十進整数値として解釈できる文字列とは、
正規表現 ^[-+]?[0-9]+ にマッチするものとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: c
[4] 期限:
[5] その他の制限: qsort()を使う
429デフォルトの名無しさん:2006/04/14(金) 14:27:33
>>428
grep '^[-+]?[0-9]+' |sort -n
430デフォルトの名無しさん:2006/04/14(金) 14:46:32
428を素直に解釈すりゃあ大小の比較は整数値でするよな。
sortって、その条件満たしてるか?
431デフォルトの名無しさん:2006/04/14(金) 14:48:23
#include <stdio.h>

int islarger(int *l, int *r) {
return *l - *r;
}

int isdigitstr(char s[]) {
/* こ こ は だ れ か に ま か せ た! */
}


int main(int argc, char *argv[]) {
int num[200];
int n = 0;
int i;

for (i=1; i<argc; i++)
if (isdigitstr(argv[i])) {
num[n] = atoi(argv[i]); n++;
}

qsort(num, n, sizeof(int), islarger);

for (i=0; i<n; i++)
printf("%d\n", num[i]);

}


>>429 そっちのほうが遥かにらくだなあwww
>>430 どゆこと?
432デフォルトの名無しさん:2006/04/14(金) 14:49:21
islargerって関数名はちとまずかったか・・・まあいいや(´・ω・`)
433デフォルトの名無しさん:2006/04/14(金) 15:01:42
int isdigitstr(char s[]) {
 return !*s || isdigit(*s) && isdigitstr(s+1);
}
434デフォルトの名無しさん:2006/04/14(金) 15:07:16
>>433 それ符号判定できない希ガス
435431:2006/04/14(金) 15:22:09
436デフォルトの名無しさん:2006/04/14(金) 15:29:46
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int not_zero(const char *p){ while(*p)if(*p++!='0')return 1;return 0; }
int compare(const void *pl, const void *pr){
const char *lhs = *(const char**)pl;const char *rhs = *(const char**)pr;
int sign = 1;if(*lhs=='+')++lhs;if(*rhs=='+')++rhs;
if(*lhs=='-'&&*rhs!='-')return(not_zero(lhs+1)&& not_zero(rhs))?-1:0;
if(*lhs!='-'&&*rhs=='-')return(not_zero(lhs)&¬_zero(rhs+1))?1:0;
if(*lhs=='-'&&*rhs=='-') sign = -1;if(*lhs=='-')++lhs;if(*rhs=='-')++rhs;
while(*lhs=='0')++lhs;while(*rhs=='0')++rhs;return strcmp(lhs, rhs)*sign;}
int match(char *s){char *p=s;if((*p<'0'||'9'<*p)&&*p!='+'&&*p!='-')return 0;
while(*++p)if(*p<'0'||'9'<*p)return 0; return 1;}
int main(int argc, char *argv[]){ char **array = malloc(sizeof(char*)*(argc-1));
int i,size=0;for(i=1;i<argc;++i)if(match(argv[i]))array[size++]=argv[i];
if(size){qsort(array,size,sizeof(char*), compare);for(i=0;i<size;++i)printf("%s\n",array[i]);}
free ( array );return 0;}

atoi使うとintの範囲超えるときに判定できんぞ
437デフォルトの名無しさん:2006/04/14(金) 15:39:09
436バグ non_zeroは && じゃなくて || だ(なんか文字変わっとるし)
if(*lhs=='-'&&*rhs!='-')return(not_zero(lhs+1)||not_zero(rhs))?-1:0;
if(*lhs!='-'&&*rhs=='-')return(not_zero(lhs)||not_zero(rhs+1))?1:0;
438デフォルトの名無しさん:2006/04/14(金) 15:44:23
>>430
普通のsortは-nを指定すれば数値比較になる。

>>429
それを書くなら、
echo $* |grep '^[-+]?[0-9]+' |sort -n
までやらんと。
439デフォルトの名無しさん:2006/04/14(金) 15:50:20
>>438
わりぃ。Linuxerじゃないんで無知った。thnk。
440デフォルトの名無しさん:2006/04/14(金) 15:51:22
よく読んでないけど、>>436のやつはintやlongに変換しないで文字列のまま扱っているってことかな?
んできちんと比較関数は文字列の表現のままでがんばっている、と
441438≠436:2006/04/14(金) 16:00:05
>>439
どうでもいいが、私もLinuxは触ったことがない。
#仕事でSolarisとCygwin、自宅でCygwinは使っているが。

>>440
桁数制限なしに比較する妥当な手段だね。
442デフォルトの名無しさん:2006/04/14(金) 16:03:01
>>436を普通に実行させてみたら(もちろん>>437の修正もして)

1111111111111
2
3
4
5

になったなw

まあ、compareちょっといぢりゃなんとかなるんだろうけど
443デフォルトの名無しさん:2006/04/14(金) 16:23:25
>>442
strcmpは長さ比較はしてくれないんだっけ(とか考えながら作って確かめるの忘れた)
さらに2ヶ所訂正
int sign=1; → int sign=1,llen,rlen;
return strcmp(lhs,rhs)*sign; → llen=strlen(lhs);rlen=strlen(rhs); return (llen==rlen)?strcmp(lhs,rhs)*sign:llen-rlen;
入力文字列がめっさ長いときはうまく動かんけど、そもそもコマンドラインとして受け付けないんちゃうかな。
444デフォルトの名無しさん:2006/04/14(金) 16:33:48
>>443 あと細かいところだが、matchのとこ while(*++p) の手前に
if((*(p+1)<'0'||'9'<*(p+1))&&(*p=='+'||*p=='-')) return 0;
これがないと "+" "-"が数値0として扱われる
445デフォルトの名無しさん:2006/04/14(金) 16:59:33
>>444
おお、確かに。そのパターンは考慮してなかった。Veryさんくー。
446デフォルトの名無しさん:2006/04/14(金) 23:09:27
PCだけが友達ですが何か?
447デフォルトの名無しさん:2006/04/15(土) 00:39:39
448デフォルトの名無しさん:2006/04/15(土) 01:01:16
>>447
なるほそ。分かったことは
・'+'が先頭にあるとき
・小数点があるとき
に仕様をみたさないっぽい?
449デフォルトの名無しさん:2006/04/15(土) 01:03:56
そーゆー問題を解くのに関しては、オートマトン理論を学んだほうがいいよ。
情報工学系の大学行けばやるとは思うけど、そうでないならば。
450438:2006/04/15(土) 02:02:51
>>448
後者は問題の性質上無問題。
前者は忘れてた。

訂正版:
echo $* |grep '^[-+]?[0-9]+' |tr -d '+' |sort -n
#grepとtrをsedで置き換えられる気もするが今眠い。
451デフォルトの名無しさん:2006/04/15(土) 10:01:09
おまえが正規表現得意なのはわかったから、いい加減スレ違いバカ消えろ。
452デフォルトの名無しさん:2006/04/15(土) 11:25:51
[1] 授業単元: プログラム演習基礎
[2] 問題文
入力した10個の数字について、最大値と最小値を表示する。
有効な入力数字は0以上20未満とする
[3] 環境
 [3.1] OS: Linuxです
 [3.2] コンパイラ名とバージョン: gccです。バージョンは不明・・・
 [3.3] 言語:C
[4] 期限: 申し訳ないですが明日までです
[5] その他の制限: 習ったのはif文とswitch文だけです。

よろしくお願いします
453デフォルトの名無しさん:2006/04/15(土) 11:58:38
forとかwhileは禁止なのか?
printf,scanfはさすがにOKだよな?
454デフォルトの名無しさん:2006/04/15(土) 12:03:20
俺だったら習ってなかったとしてもforやwhileぐらい使う

情報系に進むやつなら高校までにC言語ぐらい触っててもおかしくないだろ?
455デフォルトの名無しさん:2006/04/15(土) 12:12:40
#include <stdio.h>

int main() {
int i, n, min, max;

for (i=0; i<10; i++) {
scanf("%d", &n);
if (i == 0) min = max = n;
if (n < min) min = n;
if (n > max) max = n;
}

printf("min: %d, max: %d\n", min, max);
}

コンパイルしてないからあってるかしらんけど多分こんなかんじ
for使ってるけど「予習しますた!」って威張ればおk
456デフォルトの名無しさん:2006/04/15(土) 12:13:30
しまった、「有効な入力数字は0以上20未満とする」の部分見落としていたけど、
ここは自分でなんとかしような
457デフォルトの名無しさん:2006/04/15(土) 12:13:55
よしここは再帰でforの(r
void loop(int*min,int*max,int n,int *m){
    if(n==0)return;
    scanf("%d",m);
    if(*min > *m)*min = *m;
    if(*max < *m)*max = *m;
    loop(min,max,n-1,m);
}
int main(void){
    int m,min=19,max=0;
    loop(&min,&max,10,&m);
    printf("min = %d\nmax = %d\n",min,max);
    return 0;
}
458デフォルトの名無しさん:2006/04/15(土) 12:15:08
>>457 その手があったか!
でも絶対ポインタとか関数の引数とか習ってないと思う!
459デフォルトの名無しさん:2006/04/15(土) 12:23:54
じゃあグローバ(r

int min=19,max=0,n=10,m;
void loop(void){
    if(n==0)return;
    scanf("%d",&m);
    if(min > m)min = m;
    if(max < m)max = m;
    --n;
    loop();

int main(void){ 
    loop();
    printf("min = %d\nmax = %d\n",min,max);
    return 0;
}
460デフォルトの名無しさん:2006/04/15(土) 12:30:22
[1] 授業単元: 情報処理
[2] 問題文(含コード&リンク):
プログラムを変更し、サーバのindex.htmlを取得できるようにしなさい。
具体的には、ソケット生成部分とサーバとの送受信部分を補い、httpレスポンスの
メッセージボディのみを標準出力へ出力するようにすればよい。さらに
1.メッセージボディの出力先を標準出力かローカルファイルのどちらかを選べるようにする。
2.接続するWebサーバと要求するファイルのパスをコマンドライン引数で指定できるようにする。
3.代理サーバ経由で外部のWebサーバへもアクセスできるようにする。
必要ならばソースコードの文字コードを適切なものへ変換すること。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1740.txt
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:gcc バージョン?
 [3.3] 言語: C
[4] 期限: 明後日まで
[5] その他の制限: なし

よろしくお願いいたします。ソケットよくわかりません・・・
461デフォルトの名無しさん:2006/04/15(土) 12:36:23
>>460
そんなもん俺だってよくわかりません
462デフォルトの名無しさん:2006/04/15(土) 13:18:26
/* ソケット作成 */
sock = socket(AF_INET, SOCK_STREAM, 0);

/* HTTPリクエストの送信 */
const char* req_head = "GET "
cosnt char* req_foot = " HTTP/1.0\r\n\r\n"
send(sock, req_head, strlen(req_head), 0);
send(sock, path, strlen(path), 0);
send(sock, req_foot, strlen(req_foot), 0);

/* レスポンスのBODYだけ出力 */
char buf[1];/* 配列じゃなくてよかったっけ? */
int flag = 0;
while (recv(sock, &buf, 1, 0) > 0) {
switch (flag) {
case 0: if (buf[0] == '\r') flag = 1; break;
case 1: if (buf[0] == '\n') flag = 2; else flag = 0; break;
case 2: if (buf[0] == '\r') flag = 3; else flag = 0; break;
case 3: if (buf[0] == '\n') flag = 4; else flag = 0; break;
default: putchar(buf[0]);/* 出力 */
}
}

自信ないけどこんなだっけ?変数の宣言は移動してくれ。1と2はちょっといじればなんとかなるだろう。3は調べるのめんどい。
463452:2006/04/15(土) 22:22:29
>>453-459
ありがとうございます。
今日図書館で調べたんですけどやっぱ
for使ったのばっかでした
色々考えて自分なりになんとかなりそうです
464デフォルトの名無しさん:2006/04/15(土) 23:26:46
[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク): 10人の生徒が国語数学社会理科のテストを行った。
点数をキーボード入力し4教科の合計と平均を求め合計点数の上の人から順に並べるよう表示する。
また、4教科の平均は小数第一位を四捨五入する。
[3] 環境
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン:VC 6.0
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 4月17日
[5] その他の制限:
生徒A、国語、数学、社会、理科、合計、平均
生徒B、国語、数学、社会、理科、合計、平均
のように表示。

よろしくお願いします。
465デフォルトの名無しさん:2006/04/16(日) 00:35:51
オレ的には国語算数理科社会だな
466デフォルトの名無しさん:2006/04/16(日) 07:43:51
簡単すぎてまんどくせ
構造体にでもぶちこんでソートしたら?
さぁ・・・基本情報受けに行こうっと
467デフォルトの名無しさん:2006/04/16(日) 07:51:00
よし俺もソフ開受けにいってくる
がんばろうぜ
468デフォルトの名無しさん:2006/04/16(日) 09:38:42
>>464
四捨五入専用の関数ってあったけ。
とりあえずシンプルに考えてみた。
double roundoff(double x)
{ return int(x*10)%10<5 ? floor(x) : ceil(x); }
469デフォルトの名無しさん:2006/04/16(日) 10:19:44
>>468
double roundoff(double x) {return (double) (int) (x + 0.5);}
470デフォルトの名無しさん:2006/04/16(日) 11:10:07
>>464
なんか似たようなのを見た気がするんだが
471デフォルトの名無しさん:2006/04/16(日) 14:08:06
472468:2006/04/16(日) 14:40:47
>>469
気づかんかった。アフォです俺。
>>471
C99にはあるんだね。
473デフォルトの名無しさん:2006/04/16(日) 19:05:27
>>472 気づくかどうか、ていうよりも定番の四捨五入砲だな
この機に知ることが出来たってことでヨシとすればおk
474デフォルトの名無しさん:2006/04/16(日) 21:11:24
[1] 授業単元:コンピュータプログラミング入門

[2] 問題文(含コード&リンク):
以下はある計算をし、その結果を出力するプログラムだが、プログラムミスがあり、
コンパイル時はエラーが出ないけれども、実行すると、正しい値が表示されない。
ミスの原因をコメント(注釈:/* */で囲む)としてソースプログラム中に書いた上で、
プログラムを修正し正しく動作するようにしなさい。ただし、printfの書式には誤りが無いものとする。

/* ここにミスの原因を記入する */
#include <stdio.h>

main()
{
int a,b,c,res;
a=2;
b=3;
c=4;
res=a*b;
printf("%d * %d = %d\n",a,b,c,res);
res=(2*a+b)%c;
printf("(2*%d+%d)%%%d = %d\n",a,b);
/* printfで%を表示させたい場合は%%を使用する */
}

[3] 環境
 [3.1] OS:solaris 10
 [3.2] コンパイラ名とバージョン: gcc バージョンは分かりません。
 [3.3] 言語:C
[4] 期限: 2006年04月28日21:00まで
[5] その他の制限:特に無し

よろしくお願いします。
475デフォルトの名無しさん:2006/04/16(日) 21:31:00
>>474
printf("%d * %d = %d\n",a,b,/*c,←が余分*/res);
printf("(2*%d+%d)%%%d = %d\n",a,b,c,res);/*引数が足りなかった*/
476474:2006/04/16(日) 21:40:46
>>475
自分も最初はそうじゃないかと考えたのですが、
問題に「ただし、printfの書式には誤りが無いものとする。」
とあるんです。

printfの中身は書式ではないと解釈していいんですかね。

477デフォルトの名無しさん:2006/04/16(日) 21:45:08
[1] 授業単元:C言語中級
[2] 問題文(含コード&リンク):
txtファイル読み込んだ後、ソートし書き出すプログラム。
入出力部分は出来たんですが、ソートが符号付き実数のため挫折。
実数のソートを教えてください。
動いていないですが、途中のを貼り付けます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1745.txt
ちなみに入力用のtxtは
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1746.txt
です。
[3] 環境
 [3.1] OS: (Windows/Linux/等々):WindowsXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C
[4] 期限: 4月19日
[5] その他の制限:
よろしくお願いします。
478477:2006/04/16(日) 21:48:37
すいません、問題文は
txtにある数字を読み込み、ソートをして総和・平均を算出せよ。
さらに計算結果をエクセルで出力せよ。ソートは大→小でも逆でも可とする。
です。
479デフォルトの名無しさん:2006/04/16(日) 21:57:59
>>476
printfの書式っていうのは、%dとか%sとかの出てくる部分ね。
だから間違ってるのは引数の方って言う解釈。
480474:2006/04/16(日) 22:12:53
>>479
ありがとうございました。
481デフォルトの名無しさん:2006/04/16(日) 22:23:52
>>477-478
詳しく見てないけど
-qsort(sort, MAX, sizeof(int), comp);
+qsort(sort, MAX, sizeof(double), comp);
-return *(int*)i - *(int*)j;
+return *(double*)i - *(double*)j;
で正常に動くならケアレスミスもほどほどにしてほしい。
482477:2006/04/16(日) 22:53:04
>>481
やってみたものの上手く動きません・・・。
483デフォルトの名無しさん:2006/04/16(日) 23:05:59
>>481
-return *(double*)i - *(double*)j;
+return (*(double*)i > *(double*)j)?1:(*(double*)i == *(double*)j)?0:-1;

今回の入力データなら大丈夫だろうが、オーバーフローすると厄介だし
こっちの方が良くね?
484デフォルトの名無しさん:2006/04/16(日) 23:07:21
>>477
データがMAX個に満たないとどうなると思う?
485デフォルトの名無しさん:2006/04/16(日) 23:11:23
>>481
オーバーフロー云々ではなく、それ以前の段階で間違い。
まぁ、>483でいいわけだが。
486デフォルトの名無しさん:2006/04/16(日) 23:12:00
>>484
今回はちゃんとMAX個あるんだから余計なことで質問者混乱させるな
487477:2006/04/16(日) 23:39:35
>>481>>483の部分をどういう風に書き入れたらよろしいんでしょうか・・・?
あとMAXの部分はこれでOKでお願いします。
488デフォルトの名無しさん:2006/04/17(月) 00:00:50
>>483で上手くソートされました。
教えてくださりありがとうございましたm(_ _)m
489デフォルトの名無しさん:2006/04/17(月) 00:02:30
-ってのは元のソースからそれあぼーん
+ってのは-であぼーんした部分をそれに入れ替え
490デフォルトの名無しさん:2006/04/17(月) 00:08:38
でも>>481の方法で実行すると0付近がちゃんと並び替えされてないのは気のせい?
491デフォルトの名無しさん:2006/04/17(月) 00:13:03
>>490
例えば (int)(0.24-0.0) = 0(等しい) になるからでそ。
492デフォルトの名無しさん:2006/04/17(月) 00:13:16
>>490
compはintを返すのに、doubleの差を返してるからじゃまいか?
型変換はいるとややこしくなるからifでべた書きなり
三項演算子ですっきりまとめるなりするのが妥当
493デフォルトの名無しさん:2006/04/17(月) 00:19:30
なるほど、横レスとはいえ見落としてた。
>>491-492、素早いレスさんきゅー
494デフォルトの名無しさん:2006/04/17(月) 00:54:53
>>483がすっきりかと言われると異論もあろうかと思われるが
495デフォルトの名無しさん:2006/04/17(月) 13:44:03
[1] 授業単元: C言語研究
[2] 問題文(含コード&リンク):

int配列に対し, 並び順を逆にするような関数 void myreverse(int*,int)を作りなさい.
myreverseの第一引数は配列を意味するポインタ, 第二引数は配列の長さです.
例えば以下のmainでテストすると, 出力は
11 7 5 3 2
----------------------------
となるはずです.
int main(void)
{
int i;
int array[5]={2,3,5,7,11};

myreverse(array,5);
for( i = 0 ; i < 5 ; i ++ )printf("%d ",array[i]);
printf("\n");

return 0;
}
----------------------------
[3] 環境
 [3.1] OS: (Windows/Linux/等々) WindowsXP SP2
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) VS .NET 2003
 [3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 4/21

よろしくお願いします
496デフォルトの名無しさん:2006/04/17(月) 13:53:33
>>495
void myreverse(int *array, int length)
{
    int i;
    int tmp;
    for (i=0 ; i<length/2 ; i++)
    {
        tmp=array[i];
        array[i]=array[length-1-i];
        array[length-1-i]=tmp;
    }
}
497デフォルトの名無しさん:2006/04/17(月) 14:11:41
ありがとうございました
498デフォルトの名無しさん:2006/04/17(月) 17:03:56
一昨日PCぶっ壊れた
釣りでは無い
正直netの無い生活がこんなに大変だと思わなかた _| ̄|○i|l|i
今は親のnotePCから見てる
鬱だ・・・氏のう・・・('A`)
499デフォルトの名無しさん:2006/04/17(月) 21:45:20
[1] 授業単元: 情報数理解析入門
[2] 問題文(含コード&リンク):
標準入出力
ファイルを読み込んで、内容を配列に格納しなさい。

ファイル(data.txt)
12345(改行)
23456(改行)
34567[EOF]

配列
int[3][5] = {
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}
};

[3] 環境
 [3.1] Windows
 [3.2] 大学のパソコンに入っている教育用コンパイラ(使っているのは普通の教科書なので同じだと思います。)
 [3.3] C

[4] 期限:20060419 09:00
[5] その他の制限:なし

よろしくおねがいします。
500デフォルトの名無しさん:2006/04/17(月) 21:46:04
板違い
501デフォルトの名無しさん:2006/04/17(月) 22:18:55
家でC++言語の練習したいんですがどうしたらいいんですか?
502デフォルトの名無しさん:2006/04/17(月) 22:29:04
>>499
>教育用コンパイラ
こんなコンパイラ無いし
>普通の教科書
普通って何をもって普通って決めてるんだ?
>同じだと思います
何と?

日本語おかしい、頭の弱い人は消えてください
503デフォルトの名無しさん:2006/04/17(月) 22:39:15
質問内容を見れば質問者の程度ぐらいわかるだろ
察してやれよ
504デフォルトの名無しさん:2006/04/17(月) 23:22:15
状況は察せても教科書やコンパイラは察せない
505デフォルトの名無しさん:2006/04/17(月) 23:52:54
#include <stdio.h>
#include <stdlib.h>
int main(void){
int i,j,array[3][5];FILE *fp;
if((fp=fopen("data.txt","r"))==NULL){fprintf(stderr,"読めない\n"); return 1;}
for(i=0;i<3;i++)for(j=0;j<5;j++)array[i][j]=atoi(getch(fp));
fclose(fp);
return 0;
}
一応仕様は満たしている気がする。
506デフォルトの名無しさん:2006/04/17(月) 23:53:42
早速訂正。
getch(fp) → getc(fp)
507デフォルトの名無しさん:2006/04/18(火) 00:42:57
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):
(1)n個の点があり、任意の2点間ぶ確率pで枝があるとする。
この様にしてできるグラフG=(V,E)を考えて、n、pを与えた場合の|E|の平均値を
シュミレーションにより求めよ。
また、次数、直径の平均値を求めよ。
(2)1x1の正方形の中にn個の点が存在している。
各点のx座標が0から1の間に一様に分布し、
y座標が0から1の間に一様に分布しているとする。
距離がd以内である2点間を辺で結び、距離がdより大きい2点間は結ばないとする。
この様にしてできるグラフG=(V,E)を考えて、nを与えた場合の|E|、次数、直径
の平均値をシミュレーションにより求めよ
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc3.31
 [3.3] 言語: C
[4] 期限: 4月19日昼まで
[5] その他の制限:

よろしくお願いします
グラフ理論のランダムグラフ、ランダムネットワークらしいんですがどう組めば良いかさっぱりです
508デフォルトの名無しさん:2006/04/18(火) 01:12:50
座標とかの初期処理
for i=1..n
  for j=i+1..n
    if( v_i と v_j が条件を満たす ) then
      v_i と v_j 間にエッジをかける
    end if
  end of for
end of for
次数とか直径とかの計算

1回分の実験が↑でできるので、それを繰り返して統計をとる。
もう少し言葉に説明くれれば具体的なコード書くかも。
次数とか直径とか、グラフ理論やってないと知らん言葉と見た。
509デフォルトの名無しさん:2006/04/18(火) 01:57:37
あ、すいません。僕もwikipediaとttp://coolee.at.infoseek.co.jp/graphtheory.htmlとか見たくらいなんですが
次数 点に繋がっている辺の数
直径 グラフ上の任意の2点間の距離の最大値
Vはグラフの点集合で、Eは辺集合、|E|はグラフ全体の辺の数です。
ttp://f39.aaa.livedoor.jp/~hukuryu/random_graph.html
直径の平均の式はここに載ってました。
510デフォルトの名無しさん:2006/04/18(火) 02:12:42
>>505
確認してないけど、
これだと改行まで配列に格納されて、
最後2つが収まらないんじゃね。
511デフォルトの名無しさん:2006/04/18(火) 02:27:33
失礼。一部以下に変更を。
for(i=0;i<3;i++)for(j=0;j<5;j++){
  char c;
  do{c=atoi(getch(fp));}while(c=='\n'||c=='\r');
  array[i][j]=c-'0';
}
512317:2006/04/18(火) 03:48:16
何度もすいません。
STLのリストを使って317お願いしてもいいでしょうか?
513デフォルトの名無しさん:2006/04/18(火) 15:23:52
ある整数から符号、桁数、各桁の数字を知るにはどうすればいいのでしょうか?
これが解らないとどうにもなりません><
514デフォルトの名無しさん:2006/04/18(火) 15:27:33
>>513 符号:x<0とかx>0とか 桁数・各桁:10で割るのをループ
515デフォルトの名無しさん:2006/04/18(火) 15:34:50
>514
♪♪♪ d(`Д´)b♪♪♪サンキュ
516デフォルトの名無しさん:2006/04/18(火) 15:35:05
>>512
面倒なんでやり方だけ書いとくから頑張れ
以下、リストの変数名はinliAddress

リストの走査:
list<hoge>::iterator itrCurr; //以後、色々使う
for (list<hoge>::iterator itrEnd = inliAddress.end(), itrCurr = inliAddress.begin();
itrCurr != itrEnd; ++itrCurr) {
hoge(); //好きな処理
}

ノードの追加:
inliAddress.insert(itrCurr, hoge); //hogeが入れたい物でitrCurrが入れたい位置

ノードの削除:
inliAddress.erase(itrCurr); //itrCurrのノードを削除


<algorithm>のfind_if()とかを使えばもっとすっきりまとめられるだろうが
そこがSTLの面白さだから自分でやってみれ
517317:2006/04/18(火) 19:26:12
>>516
どうもありがとうございます!
参考にして1度自分でやってみます。
518デフォルトの名無しさん:2006/04/18(火) 20:36:05
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
西暦での年と月を与えると、その月のカレンダーを出力するプログラムを作成せよ
(ただし、1900年以降のものとして1900年1月1日は月曜日である)
[3] 環境
 [3.1] OS:Vine Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:4月20日
519デフォルトの名無しさん:2006/04/18(火) 20:44:23
C言語初心者です。「1.5」を表示するプログラムを作れと言われ作ったのですが、
1.5000000と表示されてしまいます。原因はどこにあるのでしょうか?

#include <stdio.h>

int main(void)
{
float a;

a = 1.5;
printf("a=%f\n",a);
return 0;
}
520デフォルトの名無しさん:2006/04/18(火) 20:54:03
>>518
#include <stdio.h>
int day_of_week(int year, int month, int day) {
    if (month == 1 || month == 2) {
        --year; month += 12;
    }
    return (year + year / 4 - year / 100 + year / 400 + (13 * month + 8) / 5 + day) % 7;
}
int days_of_month(int year, int month){
    static const int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (month < 1 || month > 12) month = 1;
    if (month == 2) return days[1] + (year % 4 == 0 && year % 100 != 0 || year % 400 == 0);
    else return days[month-1];
}
void calendar(int year, int month){
    int i, k, days;
    printf("%d年%d月\n日 月 火 水 木 金 土\n", year, month);
    k = day_of_week(year, month, 1);
    days = days_of_month(year, month);
    for (i = 0; i < k; i++) printf("  ");
    for (i = 1; i <= days; i++) {
        printf("%2d ", i);
        if (++k % 7 == 0) printf("\n");
    }
    printf("\n");
}
int main(void) {
    int year, month;
    printf("何年?:"); scanf("%d", &year);
    printf("何月?:"); scanf("%d", &month);
    calendar(year, month);
}
521デフォルトの名無しさん:2006/04/18(火) 20:56:27
>519
%fじゃなくて%gを使うといいかも
522デフォルトの名無しさん:2006/04/18(火) 20:59:20
>>519
%0.1f
523デフォルトの名無しさん:2006/04/18(火) 21:00:07
C/C++を覚えるために本を買ってるんですけどイイ本がありましたら教えてください
524デフォルトの名無しさん:2006/04/18(火) 21:01:50
>>523
どっち?
525519:2006/04/18(火) 21:05:50
%gで解決しました。ありがとうございました。
526デフォルトの名無しさん:2006/04/18(火) 21:08:04
>>523
読めそうなのを片っ端から買え!
多少の損害は気にするな!
PCがおかしくなるのに比べたら.....orz
527デフォルトの名無しさん:2006/04/18(火) 21:45:41
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
名前と点数を入力し点数の合計を降順に並べ替えるプログラム
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:vc6.0
 [3.3] 言語:C
[4] 期限:4月20日
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1752.txt
降順に並べ替えるところが上手くいきません。
しょうもない間違いだとは思いますがどこが違うのか分かりません。
よろしくお願いします。


528デフォルトの名無しさん:2006/04/18(火) 21:59:45
sum=data[i].koku+data[i].su;

if(data[i].sum < data[j].sum){

これで分からないか?
ちゃんとPG見直してみ?
529デフォルトの名無しさん:2006/04/18(火) 22:03:07
ループの度にsortしようとしてるのは無駄の極み。
sortをループの手前に出せば十分。

さらに言えば、sortのループ変数 i と、
sortの外側にあるループ変数 i がぶつかっている。

ま、これは上に書いたようにsortを外に出せば解決するけど
530デフォルトの名無しさん:2006/04/18(火) 22:39:44
>>529
スコープを作ってiを宣言するという手もある
531デフォルトの名無しさん :2006/04/19(水) 01:20:01
>>464
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>
#define N 2 //四捨五入する小数点桁数
typedef struct record{char name[256];int J_language;int Mathmatical;int History;int Science;int Sum;int Average_integer;int Average_small;struct record *next;}record;
void free_list(record *start);int main(void){record dmy = {"", 0, 0, 0, 0, 0, 0, 0, NULL };//番兵record *start = &dmy;record *ip;//for用record *rec;char buff[256] = {0};
int n;char *head = "名前\t国語\t数学\t社会\t理科\t合計点\t平均点\n";char *head2 = "%s\t%d\t%d\t%d\t%d\t%d\t%d.%d\n";n = (int)pow(10, N);while(1){if((rec = (record *)malloc(sizeof(record))) == NULL){
fprintf(stderr,"メモリ確保出来ず");exit(1);}printf("名前入力('E'で終了)");fgets(buff,sizeof(buff),stdin);if(strcmp(buff,"E\n\0") == 0 ) break;buff[ strlen(buff) - 1 ] = '\0';strcpy(rec->name,buff);printf("国語");fgets(buff,sizeof(buff),stdin);
532デフォルトの名無しさん :2006/04/19(水) 01:21:46
>>464
続き
rec ->J_language = atoi(buff);printf("数学");fgets(buff,sizeof(buff),stdin);rec->Mathmatical = atoi(buff);printf("社会");
fgets(buff,sizeof(buff),stdin);rec ->History = atoi(buff);printf("理科");fgets(buff,sizeof(buff),stdin);rec ->Science = atoi(buff);
rec->Sum = rec->History + rec->J_language + rec->Mathmatical + rec->Science ;rec->Average_integer = (((n * rec->Sum) + 2 ) / 4) / n;
rec->Average_small = (((n * rec->Sum) + 2 ) / 4) % n;for(ip = start; ip->next != NULL; ip = ip ->next){if(rec ->Sum < ip ->next ->Sum){
rec ->next = ip ->next;ip ->next = rec;break;}}if(ip->next == NULL){ip->next = rec;rec->next = NULL;}}printf(head);for(ip = start->next; ip != NULL;
ip = ip ->next){printf(head2,ip->name,ip->J_language,ip->Mathmatical,ip->History,ip->Science,ip->Sum,ip->Average_integer,ip->Average_small);
}free_list(start);return 0;}void free_list(record *start){record *current, *temp;for(current = start->next; current != NULL;){temp = current->next;
free(current);current = temp;}}
533デフォルトの名無しさん:2006/04/20(木) 09:23:41
>>529
よくわからんけど、合計ってなんの合計なんだろ。
降順にならべるってことなら、国語と数学を合計したものが3つのことだよね。
そうするとtypedef seiseki内のsumで十分だと思うんだけど、main関数で別に定義
しているint sumがよく分からん。
main関数で定義してるint sumは必要ないでしょう。
よってまずsumを全部data[i].sumに変更する。

あとは先にdata[0].sum、data[1].sum、data[2].sumを計算しておいてから、並び替えをするで
いいはずだけど、data[0].sumを計算してから、まだ計算されてないdata[1].sumとdata[2].sum
と大きさの評価をするっていうよくわからんことに。しかも>>529が書いてる通りiが被ってるから
さらに妙なことに。
forの中を追うと
1個目のforでi=0、data[0].sumを計算→2個目のforでさらにiを0
→3個目のforでdata[0].sumに対しdata[1].sumとdata[2].sumを比較、3個目のfor終了後i=1
→2個目のforに戻ってi<3は真→3個目のforでdata[1].sumに対しdata[2].sumを比較、3個目のfor終了でi=2→2個目のforに戻ってi<3は真
→3個目のforで(j=i+1)<3が偽だから何もせず終了、3個目のfor終了でi=3→2個目のforに戻ってi<3は偽だから何もせず終了
→1個目のforに戻ってi<3となってるから偽だから何もせず終了
data[1].sumとdata[2].sumは結局計算されていない。
534デフォルトの名無しさん:2006/04/20(木) 09:25:17
1)main関数であらたにint sumを使わない。
2)並び替え前にdata[0].sum、data[1].sum、data[2].sumを計算する。
を踏まえておけばいいんでしょう。
for(i=0;i<3;i++)
{
data[i].sum=data[i].koku+data[i].su;
}
for(i=0;i<3;i++){
for(j=i+1;j<3;j++){
if(data[i].sum < data[j].sum){
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
fprintf(fp,"名前%s",data[i].name);
fprintf(fp,"国語%d",data[i].koku);
fprintf(fp,"算数%d",data[i].su);
fprintf(fp,"合計%d",data[i].sum);
}
535デフォルトの名無しさん:2006/04/20(木) 09:34:12
>>533の最初の>>529>>527だ…orz
536デフォルトの名無しさん:2006/04/20(木) 10:17:31
[1] 授業単元:数値計算
[2] 問題文:連立n元一次方程式を掃き出し法で解くプログラムを
作成せよ。

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ(バージョン):gcc
 [3.3] 言語:C
[4] 期限:4/21まで
[5] その他の制限:無し

どなたかよろしくお願いします。
537536:2006/04/20(木) 10:53:10
i=1⇒ピボットa[i][i]を決定⇒ピボットでi行を割る⇒k行−(更新されたi行)×a[k][i]
⇒i=i+1⇒i≦n⇒終了
というアルゴリズムでお願いします。
538デフォルトの名無しさん:2006/04/20(木) 18:07:49
できたけど二次元配列のうまい渡し方がわからないorz

void sweepout(double a[][4], int rows, int cols) {

int pivot, i, j;
double p;

for (pivot=0; pivot<cols-1; pivot++) {
p = a[pivot][pivot];
for (i=pivot; i<cols; i++)
a[pivot][i] /= p;
for (i=0; i<rows; i++)
if (i != pivot) {
p = a[i][pivot];
for (j=pivot; j<cols; j++)
a[i][j] = a[i][j] - p*a[pivot][j];
}
}
}

double a[][4]の部分をもうちょい汎用的にしたいんだが・・・
539デフォルトの名無しさん:2006/04/20(木) 18:10:27
本体はこんなん

int main() {

double m[][4] = {
1, 1, 1, 3, // x0+x1+ x2=3
1,-1, 1, 1, // x0-x1+ x2=1
1,-1, 2, 2 // x0-x1+2x2=2
};

int i;
sweepout(m, 3, 4);

for (i=0; i<3; i++)
printf("x%d = %f\n", i, m[i][3]);
}
540デフォルトの名無しさん:2006/04/20(木) 18:23:35
[1] 授業単元: C言語による数値解析

[2] 問題文
1: f(x)=4x-xe^2x+2=0 の根をニュートン・ラフソン法で求めよ。
   ただし、初期値x1=1、収束判定定数 ε=0,00001 とする。
2: 2分法とニュートン・ラフソン法で f(x)=x-cosx=0 の根を求め、収束の状況を比較せよ。

[3] 環境
 [3.1] OS: Linuxです。
 [3.2] コンパイラ名とバージョン: gccです。バージョンまでは分かりません…
 [3.3] 言語:C言語

[4] 期限: 23日までです。

[5] その他の制限:CとC++を習いました。

宜しくお願い致します。
541デフォルトの名無しさん:2006/04/20(木) 18:31:35
>>538
mのアドレスを*aに渡さないと意味ないんじゃないか
っていうかスレ違い
542538:2006/04/20(木) 18:45:02
>>541 たしかにそうだな、すまんかった
結局一次元配列で扱うことにしたwwwwwwww

ちなみに俺は>>536ではないです、一応
解なしのときとかは考慮してないけどそこらへんは自分でやってくれ
543デフォルトの名無しさん:2006/04/20(木) 19:38:06
>>540

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

double newton(double x, double (*f)(double), double (*df)(double)) {
return x - f(x)/df(x);
}

void bisection(double *x, double *y, double (*f)(double)) {

double m = (*x + *y)/2;

if (f(m)*f(*x) > 0) *x = m;
else *y = m;
}

double f1(double x) { return 4*x - x*exp(2*x) + 2;}

double df1(double x) { return 4 - exp(2*x)*(1 + 2*x);}

double f2(double x) { return x - cos(x);}

double df2(double x) { return 1 + sin(x);}
544デフォルトの名無しさん:2006/04/20(木) 19:38:36
続き

int main() {

double x, y, m, e=0.00001;

x=1; y=0;
while (fabs(x-y) >= e) {
y = x;
x = newton(x, f1, df1);
}
printf("(1): x = %f\n", x);


x=1; y=0;
printf("Newton-Rhapson\n");
while (fabs(x-y) >= e) {
y = x;
x = newton(x, f2, df2);
printf("%f\n", x);
}

x=1; y=0;
printf("\nBisection\n");
while (fabs(x-y) >=e) {
bisection(&x, &y, f2);
printf("%f\n", x);
}
}
545540:2006/04/20(木) 22:24:02
>>543

こんなに早くにありがとうございます。
バイトから帰ってきて吃驚しました。

問題の1と2を分けたプログラムは、
各数値に対応している箇所を修正すれば良いのでしょうか?
546527:2006/04/21(金) 00:17:26
答えてくれた皆さんありがとうございました。
おかげで助かりました。
547536:2006/04/21(金) 10:27:49
>>538
どうもありがとうございます。
あとは自分で何とかします。
548デフォルトの名無しさん:2006/04/21(金) 12:38:55
[1] 授業単元:
[2] 問題文(含コード&リンク):標準入力またはコマンドライン引数で指定されたファイルからテキストを入力し、 必要なら特定の行の除去を行い、 標準出力に出力するプログラムを書け。
除去する行は、以下の二種類のオプションで指定する。 いずれのオプションも指定されていないときは、除去は行わない。 両方のオプションが同時にしていされているときは、両方の除去を行う。


[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 2006/04/23)
[5] その他の制限:ヒント:現在、#で始まる行の中にいるかどうかを示すフラグを使うと便利です。 具体的には、そのフラグの初期値はオフにします。行頭の#に出会うとオンにします。
改行文字に出会うとオフにします。
549デフォルトの名無しさん:2006/04/21(金) 13:14:13
>>548
詳細が何にもないじゃん。
オプションの詳細は?
#で始まる行を云々する仕様は?
550548:2006/04/21(金) 13:39:36
忘れてた。(´・ω・`)
コマンドラインのオプション -e が指定されたときは、 空行を除去する。
コマンドラインのオプション -s が指定されたときは、 #で始まる行を除去する。
551デフォルトの名無しさん:2006/04/21(金) 13:53:30
>>550
それだけの仕様なら、別段ヒントに頼る必要がない希ガス。
-e が sed -e '/^$/d'相当で
-s が sed -e '/^#/d'相当ってことでしょ。
552デフォルトの名無しさん:2006/04/21(金) 15:37:25
とりあえずデキターヨ
でもコマンドラインのオプションってどういう風に処理するのが
定番なのか知らんからすんげー汚い
あと、空行、ってのを単に改行のみの行ってことにしてるから
スペース、タブ、改行だけの行も扱いたいときはちょっといぢってくれ

#include <stdio.h>

enum State {NONE=0, E=1, S=2, ES=3, INVALID=4};

enum State getNewState(char c, enum State s) {

if (s == INVALID) return INVALID;
if (c == 'e')
if ((s&E) == E) return INVALID;
else return s|E;
else if (c == 's')
if ((s&S) == S) return INVALID;
else return s|S;
else
return INVALID;
}

int main(int argc, char *argv[]) {

char *filename;
char s[1024];
int nfile=0, i, j;
FILE *f;
enum State state = NONE;
553デフォルトの名無しさん:2006/04/21(金) 15:38:09
for (i=1; i<argc && state!=INVALID; i++)
if (argv[i][0] == '-')
if (argv[i][1] == '\0') state = INVALID;
else
for (j=1; argv[i][j]!='\0'; j++)
state = getNewState(argv[i][j], state);
else if(nfile != 0) state = INVALID;
else {
nfile++;
filename = argv[i];
}

if (state == INVALID) {
fprintf(stderr, "Invalid arguments.\n");
return 1;
}

if (nfile == 0) f = stdin;
else if((f=fopen(filename, "r")) == NULL) {
fprintf(stderr, "File not exists.\n");
return 1;
}

while (fgets(s, 1024, f) != NULL) {
if (s[0] =='#' && (state&S)==S) continue;
if (s[0]=='\n' && (state&E)==E) continue;
printf("%s", s);
}
}

ちなみに hoge.exe -s finename -e ってやっちゃってもOKになるけどこれっていいのかしら・・・
554デフォルトの名無しさん:2006/04/21(金) 16:06:26
>>553
コマンドライン処理の定番を外しているのはいいとして、
1行1024バイト以上だと巧くいかないっぽいね。

>>550
その辺の制限はあっていいの?
555デフォルトの名無しさん:2006/04/21(金) 23:28:00
[1] 授業単元:
[2] 問題文(含コード&リンク)というか質問です:
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: (visual studio.net2003)
 [3.3] 言語: (C)
[4] 期限:今夜中
[5] その他の制限:
製品1: 
製品2:
製品3: 
ってやりたいんですけど
製品1 製品1 製品1ってなるのはどうしてですか?
for(i=0; i<1; i++)
for(k=0; k<3; k++)
{

printf("製品%2d:",i+1);
scanf("%d",&ma[i][k]);
}
556デフォルトの名無しさん:2006/04/21(金) 23:42:50
printf("製品%2d:",i+1);
           ↑
           ここがiだから。
557デフォルトの名無しさん:2006/04/22(土) 00:00:14
>>555
ここは宿題スレ
質問じゃなく目的を書けば答えが出てくるはず
558デフォルトの名無しさん:2006/04/22(土) 00:09:44
1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):10人分の名前を全角文字を入力していき入力した文字が半角だったら入力し直し。
また途中でENDを入力したらそれまで入力した名前を保存して終了するプログラムを作成せよ。
[3] 環境
 [3.1] OS: windows xp
 [3.2] コンパイラ名とバージョン: vc6.0
 [3.3] 言語: C
[4] 期限: 2006/04/24
559デフォルトの名無しさん:2006/04/22(土) 00:17:04
>>556
ありがとうございました
560デフォルトの名無しさん:2006/04/22(土) 00:39:45
>>558
ENDを入力したら?
確かにキーボードを見ると「END」と書かれたキーはあるが。
561デフォルトの名無しさん:2006/04/22(土) 02:09:46
>>558 素敵な悪問だ。足りない部分は脳内補完。
Shift_JISの規格は厳密に定められていないようなので、適当。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char name[512];
int input_num = 0;
unsigned int i;
memcpy(name, name + 512, 0);
while(input_num < 10) {
fprintf(stdout, "名前%d人目(全角):", input_num + 1);
scanf("%s", name);
++input_num;
if(strcmp(name, "END") == 0)
break;
for(i = 0; i < strlen(name); i += 2) {
if((unsigned)name[i] < 0x80) {
fprintf(stdout, "全角で入力すること\n");
--input_num;
break;
}
}
}
return 0;
}

562デフォルトの名無しさん:2006/04/22(土) 08:15:52
>memcpy(name, name + 512, 0);
何このゴミコード。
563デフォルトの名無しさん:2006/04/22(土) 13:04:56
561 を勝手に改造。VC6 でまともに動くかは知らない。

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

#define MAX_ENTS (10)

int main(int argc, char *argv[])
{
char name[MAX_ENTS][512];
char buff[512];
int input_num = 0;
int i;
char *p;
FILE *fp;

setlocale(LC_ALL, "");

while(input_num < MAX_ENTS) {
fprintf(stdout, "名前%d人目(全角):", input_num + 1);
fgets(buff, sizeof(buff), stdin);
sscanf(buff, " %[^\r\n]", name[input_num]);
564デフォルトの名無しさん:2006/04/22(土) 13:06:05
if(strcmp(name[input_num], "END") == 0)
break;

mbtowc(0,0,0);
for(p = name[input_num]; *p != 0 ;) {
i = mbtowc(0, p, sizeof(name[0]));
if(*p != ' ' && i < 2) {
fprintf(stdout, "全角で入力すること\n");
input_num--;
break;
}
p+=i;
}
input_num++;
}

fp = fopen("name.txt","w");
for(i=0; i<input_num; i++)
fprintf(fp,"%s\n", name[i]);

fclose(fp);
return 0;
}
565デフォルトの名無しさん:2006/04/22(土) 14:44:47
>>562
人のソースに文句つけることしかできないお前がゴミ
566デフォルトの名無しさん:2006/04/22(土) 15:08:55
>>565
大丈夫、少なくとも文句つけるより自分のコードを載せる方が多いから。
つーか、ゴミをゴミと言って何が悪い。
567デフォルトの名無しさん:2006/04/22(土) 15:17:10
[1] 授業単元:プログラム演習基礎1
[2] 問題文:初項X0=1の漸化式Xn+1=Xn*Xn+2Xn+1の第n項の値を求める
      プログラムを再帰の方法を使って求める
[3] 環境
 [3.1] OS: SORALIS
 [3.2] コンパイラ名とバージョン: gcc バージョンはわかりませんけど古くない
 [3.3] 言語: C
[4] 期限: 日曜の24時です
[5] その他の制限:ないです。お願いします
568デフォルトの名無しさん:2006/04/22(土) 15:18:46
あの memcpy() は確かに意味不明。memset() でもしたかったのかしらん?
569デフォルトの名無しさん:2006/04/22(土) 15:26:32
>>567
mainは書くの面倒だから省略
int X(int n){
    if(n == 0)return 1;
    n = X(n-1);
    return n * n + 2 * n + 1;
}
570デフォルトの名無しさん:2006/04/22(土) 15:53:20
>>566
誰も考えないことをやる人を人は天才と呼ぶのです
571デフォルトの名無しさん:2006/04/22(土) 16:00:43
>>570
      _
   /´~  ~`ヽ
   ム  ,__    i
   !;;j_ ゞ;;;):、;;; ゙|   ほうほうそれで?
   };'=' __,ィ-‐ァノ____,
   'リ冊アァ".j~ 、t   /"ヽ、
   'ー‐‐'''´,,_/   i、、  丶
      /| j    j  ヽ/  i
      ! ハ     ヽ __、'`⌒|
      | ^ヘ,_,,、-ー'' ̄   }
      レ--(_____,,,-く
      丶       __/  |
       ''---‐‐ー'"     |
572デフォルトの名無しさん :2006/04/22(土) 16:03:26
再帰つかってこれで良い解?
>>567
#include <stdio.h>

int Sequence(int n)
{
return (n == 0) ? 1 : Sequence(n-1) * Sequence(n-1) + 2 * Sequence(n-1) + 1;
}

int main(void)
{
int n;
int Sum = 0;

puts("求める項");
scanf("%d",&n);

Sum = Sequence(n);
printf("%d\n",Sum);

return 0;
}
573デフォルトの名無しさん:2006/04/22(土) 17:08:46
>>572
Sequence(n-1) が三回も評価されるのが勿体無いのでキャッシュしませう
574デフォルトの名無しさん:2006/04/22(土) 17:12:14
ぼくのコンパイラは優秀なのでがんばってコピペするのがいいんです
575デフォルトの名無しさん :2006/04/22(土) 18:31:58
>>573
キャッシュって意味よくしらないけど
キャッシュしゅるー
576デフォルトの名無しさん:2006/04/22(土) 21:07:06
[1] 授業単元:授業課題
[2] 問題文:
下に示すように、横幅と高さを読み込んで、
縦横に * を並べて長方形を表示するプログラムを作成せよ。
なお、必ず横長になるように表示すること。

『実行結果』

長方形を作りましょう。
一辺(その1):3
一辺(その2):7

*****
*****
*****

[3] 環境
 [3.1] OS: XP
 [3.2] コンパイラ:Visual c++6.0
 [3.3] 言語:C

以上です。よろしくお願いします。
577デフォルトの名無しさん:2006/04/22(土) 21:14:55
void printRect(int len1, int len2)
{
if (len1 <= 0 || len2 <= 0) return;
if (len1 > len2) {
int tmp = len1;
len1 = len2;
len2 = tmp;
}
for (int yc = 0; yc < len1; ++yc) {
for (int xc = 0; xc < len2; ++xc) {
putchar('*');
}
putchar('\n');
}
}

int main()
{
int len1 = 0, len2 = 0;
printf("長方形を作りましょう。\n一辺(その1):");
scanf("%d", & len1);
printf("一辺(その2):");
scanf("%d", & len2);
printRect(len1, len2);
return 0;
}
578デフォルトの名無しさん:2006/04/22(土) 21:18:19
#include <stdio.h>
int main() {
int l1, l2, temp, i, j;
printf("長方形を作りましょう。\n一辺(その1):");
scanf("%d", &l1);
printf("一辺(その2):");
scanf("%d", &l2);
if (l2 > l1) {
temp = l2; l1 = l2; l2 = temp;
}
for (i=0; i<l2; i++) {
for (j=0; j<l1; j++)
putchar('*');
putchar('\n');
}
}

って書いてたら先客がw
しかもコンパイルしてないからちゃんと動くかワカンネ
579デフォルトの名無しさん:2006/04/22(土) 21:32:35
>>577,>>578

サンクスです。両方とも動きました。
早い回答ありがとうございました。
580 :2006/04/22(土) 23:33:55
[1]授業単元:プログラミング基礎(C)

[2]テーラー展開によってsin(x)の近似値を計算する関数mySinを書きなさい。以下のステップを踏むと良い。
 (1)展開式の第i項の正負を1,-1の値で表す関数fa(i)を書きなさい。
 (2)展開式の第i項のうち、符号を除いた値を計算する関数fb(x,i)を書きなさい。
 (3)sin(x)の近似値を表示する関数mySin(x)を書きなさい。展開式の第i項は、fa(i)*fb(x,i)である。

[3]環境
 OS:Windows XP
 コンパイラ名:gcc(バージョンなどはわかりません。Cygwinを使っています)
 言語:C

[4]期限:2006年4月24日午前9時頃まで

[5]補足:C言語に関してはまだ入り口程度で、floatなどは習っていません。一応Javaはやりました。


よろしくお願いします。
581デフォルトの名無しさん:2006/04/22(土) 23:40:23
float、double使わずにやるの?
分数自分で実現しろってこと?
582デフォルトの名無しさん:2006/04/22(土) 23:46:47
float は習ってなくとも double は習っていると見た。

double fa(int i) {
  if ((i-1)/2 % 2 == 0) {
    return 1;
  } else {
    return -1;
  }
}
double fb(double x, int i) {
  int j;
  if (i % 2 == 0) {
    return 0;
  } else {
    double ans = 1.0;
    for (j = 1; j <= i; ++j) {
      ans *= x;
      ans /= j;
    }
    return ans;
  }
}
double mySin(double x) {
  int i;
  double ans = 0;
  for (i = 0; i < 20; ++i)  /* 20 は適当な値 */
    ans += fa(i) * fb(x,i);
  return ans;
};
583デフォルトの名無しさん:2006/04/23(日) 00:27:09
>>580です
解答ありがとうございました

>>582のコードでコンパイルは出来たんですが
実行してみると『Syntax error: "(" unexpected』と出ました
これはどういうことなのでしょうか?

追加で申し訳ないのですが、メインメソッドは以下にしました
エラーと何か関係があるのでしょうか?


int main(void){
 double x;
 for(x = 0;x <= 6.0;x += 0.3){
  printf("%f\t%f\n", x, mySin(x));
 }
}
584デフォルトの名無しさん:2006/04/23(日) 00:31:45
# コンパイルが出来てんなら、んなエラーメッセージ出てるわけねぇだろ。
# とか思ってしまうのは俺だけだろうか?
585デフォルトの名無しさん:2006/04/23(日) 01:26:41
>>580です
すみません、自分のミスがわかりました
無事に実行出来ました

>>581-582 >>584
ありがとうございました
586デフォルトの名無しさん:2006/04/23(日) 01:27:17
# うん俺だけ。
587デフォルトの名無しさん :2006/04/23(日) 01:35:47
>>583
メインメソッドとは言わない
CはC,JAVAはJAVA
応用効くのは、ifとかの制御ステートメント
それも全部じゃない、あと、データ型も違う。
とにかくオブジェクティブではない。
CからJAVAなら
「へー便利な関数いっぱいあんな〜とか、char型2バイトだとか
あ、メソッドっていうのかとか、オブジェクト?インスタンス?
オーバライド?オーバーロード?インターフェース?
便利だけどややこしい〜ってな感じで入っていく」
JAVAからCだと、たぶん不便極まりない
588デフォルトの名無しさん:2006/04/23(日) 01:42:57
>>587
色々とありがとうございました
今のところ講義はJavaで書いたコードをほぼそのまま書いてCプログラムを書いているだけなので、
C言語に関する知識はあまりありませんでした

勉強になりました
ありがとうございました
589デフォルトの名無しさん:2006/04/23(日) 02:19:07
>>583
どうでもいいことなんだけど、
intでmain関数を宣言するなら
ちゃんと値を返そうよ
590デフォルトの名無しさん:2006/04/23(日) 02:24:26
>>587
そうそう、おれもC++やってからJavaやったんだけど
SunのAPIリファレンスを見て驚愕したよ
「なにこれ、揃いすぎじゃね!?」
って。

Linuxマシンもしょっちゅう触る俺にとっては
もうWin32 APIとか触るのが馬鹿馬鹿しく感じられるようになった
591デフォルトの名無しさん:2006/04/23(日) 05:01:55
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク): 整数値a,b,cをキーボードから与えたとき,ax"+bx+c=0の解を求めるプログラムを作成せよ。
                ただし、平方根を求めるためにsqrt関数を使用すること。

                ※axのxについてある『"』は二乗という意味です。二乗をキーボードからどうやって
                 打つかわかりませんでした。。  よろしくお願いします。    
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:BCC
 [3.3] 言語:C
[4] 期限:4月24日(月)
[5]補足:そこまで難しいところまで習ってないので、一番簡単でシンプルな解答をお願いします。

592デフォルトの名無しさん:2006/04/23(日) 05:03:59
593デフォルトの名無しさん:2006/04/23(日) 06:36:11
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define D(a,b,c) pow(b, 2) - 4 * a * c;


typedef struct Complex{
double a;
double b;
}complex;
594デフォルトの名無しさん:2006/04/23(日) 06:37:08
int F(double a, double b, double c, complex *x1, complex *x2)
{
double d;
d = D(a, b, c);
if(d > 0){
x1->a = (-b + sqrt(d)) / (2 * a);
x2->a = (-b - sqrt(d)) / (2 * a);
x1->b = x2->b = 0;
return 1;
}else{
if(d == 0){
x1->a = x2->a = -b / (2 * a);
x1->b = x2->b = 0;
return 1;
}else{
printf("%f\n", -b / (2 * a));
x1->a = x2->a = -b / (2 * a);
x1->b = sqrt(-d) / (2 * a);
x2->b = -sqrt(-d) / (2 * a);
return 1;
}
}
return 0;
}
595デフォルトの名無しさん:2006/04/23(日) 06:38:25
void printC(complex *x)
{
if(x->b == 0)
printf("%f\n", x->a);
else{
if(x->b > 0)
printf("%f + %fi\n", x->a, x->b);
else
printf("%f - %fi\n", x->a, -x->b);
}
}

たぶん、こんな感じかな?
あと、
#include <stdlib.h>
いらないから
596デフォルトの名無しさん:2006/04/23(日) 12:00:54
>>593
すばやい返答ありがとうございます。

でも、typedef struct Complex{ とかまだ習ってないんですよ。。
もっと簡単なプログラムはないんですかね??何度もすいません。
よろしくお願いします。
597デフォルトの名無しさん:2006/04/23(日) 12:47:00
1] 授業単元: C
[2] 整数を入力し偶数か奇数かを判定せよ。ただし%は使わずに。
[3] 環境
 [3.1] OS:windows
 [3.2] VC 6.0
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:[無期限]
[5] その他の制限:なし。

簡単な問題かもしれませんがよろしくお願いします。
598デフォルトの名無しさん:2006/04/23(日) 12:50:18
>>597
#include <stdio.h>

int main(){
int x;
printf("整数を入力してください->");
scanf("%d",&x);
printf("これは%sです。", x&1?"奇数":"偶数");
return 0;
}
599デフォルトの名無しさん:2006/04/23(日) 12:51:15
#include<stdio.h>
int main(){
    int n;
    scanf("%d",&n);
    puts(n&1 ? "奇数" : "偶数");
}
600デフォルトの名無しさん:2006/04/23(日) 12:54:52
あえてビット演算を使わずに素人っぽさを演出してみる
#include<stdio.h>
int main(){
    int n;
    printf("入力>");scanf("%d",&n);
    puts(n/2*2!=n ? "奇数" : "偶数");
}
601デフォルトの名無しさん:2006/04/23(日) 13:05:47
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int n;
  char tmp[1024];
  fgets(tmp, 1023, stdin);
  n = atoi(tmp);
  if( n & 1 ) puts("奇数");
  else puts("偶数");
  return 0;
}

%を使わずにやってみた。
602デフォルトの名無しさん:2006/04/23(日) 13:08:10
#include <stdio.h>
#include <stdlib.h>

int f(int n)
{
if (n < 0) n = abs(n);
return n==1 ? 1:
(!n ? 0 : f(n-2));
}

int main(void)
{
int n = -15421;

printf("%s\n", f(n)?"奇数です><":"偶数です><");

return 0;
}

再帰を使ってやってみた
603デフォルトの名無しさん:2006/04/23(日) 13:23:32
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char buf[100];
fgets(tmp, sizeof(buf), stdin);
puts(fmod(atoi(buf), 2) ? "奇数" : "偶数");
return 0;
}
604デフォルトの名無しさん:2006/04/23(日) 13:52:41
[1] 授業単元: C言語
[2] 問題文(含コード&リンク): データファイルから50万個の値を
fopen(),fscanf()などの関数を使用して配列に格納する
[3] 環境
 [3.1] OS: WINDOWS
 [3.2] コンパイラ名とバージョン:lcc-win32
 [3.3] 言語:C

お願いします
605デフォルトの名無しさん:2006/04/23(日) 13:54:51
データファイルの形式は?
606デフォルトの名無しさん:2006/04/23(日) 13:55:04
>>604
データファイルの中の書き方はどんな書式?
ファイル名は指定されている?
607デフォルトの名無しさん:2006/04/23(日) 14:00:34
すみませんdatファイルです。
608デフォルトの名無しさん:2006/04/23(日) 14:01:53
例えば「テキストファイルに int 型に入るような整数が空白と改行区切りで 50万個並んでいる 」 とか、そういうことを聞いている。
609デフォルトの名無しさん:2006/04/23(日) 14:04:12
W型の改行区切りで50万個です
610デフォルトの名無しさん:2006/04/23(日) 14:09:04
#include <stdio.h>
#include <stdlib.h>
#define N 500000
int main(void)
{
  FILE* fp;
  int* data, i;
  if((data=(int*)malloc(sizeof(int)*N))==NULL) return 1;
  if((fp=fopen("data.dat","r"))==NULL){free(data); return 1;}
  for(i=0;i<N;i++) fscanf(fp, "%d", &data[i]);
  // 50万個のデータ使ってやりたいことがあればここに記述
  free(data);
  fclose(fp);
  return 0;
}
611597:2006/04/23(日) 14:30:08
>>598 〜 >>603
有り難うございます.
参考になりました。
612デフォルトの名無しさん:2006/04/23(日) 14:58:27
今はdouble型をW型って教えるのか?
613デフォルトの名無しさん:2006/04/23(日) 15:25:39
[1] 授業単元: C
[2]
段数を読み込んで、
縦横に * を並べて左下側が直角となる直角三角形を
表示するプログラムを作成よ。
[3] 環境
 [3.1] OS:windows xp
 [3.2] VC++6.0
 [3.3] 言語:C
[4] 期限:[無期限]

よろしくお願いします。
614デフォルトの名無しさん:2006/04/23(日) 15:28:52
段数って縦と横両方読むの?
615デフォルトの名無しさん:2006/04/23(日) 15:33:04
2唐変でいいんぢゃねの?
616デフォルトの名無しさん:2006/04/23(日) 15:37:43
>>614

多分、両方読み込みなんだと思います。
実行結果が下のようになる感じですね。

『実行結果』

何段ですか?:5

*
**
***
****
*****
617デフォルトの名無しさん:2006/04/23(日) 15:44:25
#include <stdio.h>

void printTri(int l){
int i,j;
if(!l)return;
for(i=0;i<l;i++){
for(j=0;j<=i;j++)
printf("*");
puts("");
}
}

int main(void){
int l;
puts("段数?");
scanf("%d", &l);
puts("");
printTri(l);
return 0;
}
618デフォルトの名無しさん:2006/04/23(日) 15:45:46
>>613,616
ドゾー

i,j,l;
main()
{
scanf("%d",&l,printf("何段ですか?:"));
for(;i<l;j++<=i?printf("*"):puts((i++,j^=j,"")));
}
619デフォルトの名無しさん:2006/04/23(日) 15:46:02
#include<stdio.h>

int main(){
    int n,m,i;
    printf("何段ですか?:");scanf("%d",&n);
    for(m=1;m<=n;putchar('\n'),++m)
    for(i=0;i<m;++i)
        putchar('*');

}
620デフォルトの名無しさん:2006/04/23(日) 15:59:03
>>617
>>618
>>619

ありがとうございます。コンパイルできました。
参考になります。
621デフォルトの名無しさん:2006/04/23(日) 15:59:59
i,j;
main(k)
{
    printf("何段ですか?:");
    for(scanf("%d",&k);i<k;)putchar(j++>i?j=!++i,10:42);
}
622デフォルトの名無しさん:2006/04/23(日) 16:59:03
>>597
# include <stdio.h>

int main(void)
{
 int input;
 printf("Input an integer:");
 scanf("%d", &input);
 if(input / 2 * 2 == input)
   printf("even\n");
 else
   printf("odd\n");
 return 0;
}

いつも思うんだが、問題文の「整数を入力し」って日本語としておかしいよな。
623622:2006/04/23(日) 16:59:40
ごめん。解答が見えてなかった。
624デフォルトの名無しさん:2006/04/24(月) 11:23:29
[1] 授業単元:c
[2] 問題文@1000魔での素数をすべて表示するプログラムを以下の手順に従って作成せよ
       @ 2〜Nまでの素数候補リストを昇順に用意する
       A リストの先頭にある数を素数リストに記入する
       B 新たに素数リストに記入された素数のすべての倍数を素数候補リストから削除する
       C Aに戻る
     A100万までの素数の個数をなるべく高速に求めるプログラムを作成せよ
       hint :リストを数ではなく、フラグで用意する
         :mallocでメモリを確保する

[3] 環境
 [3.1] Linux
 [3.2]gcc
 [3.3] 言語:c
[4] 期限: [水曜日]
[5] その他の制限: 無し、2代も依頼して申し訳ないですが、どうかお願いします(´Д⊂ Aは100万が難しかったら50万、10万と減らしても可だそうです
625デフォルトの名無しさん:2006/04/24(月) 13:12:15
>>624
今PC使えないんでソースはだせないが
素数を求めるにはエラトステネスの篩という
有名すぎるアルゴリズムがあるから
調べて挑戦してみれ
626デフォルトの名無しさん:2006/04/24(月) 13:53:38
[1] 授業単元:C言語研究1
[2] 問題文(含コード&リンク):
--------------------------------------
次の順で, リスト(リンクリスト)を扱うプログラムを書いて下さい.
・intの値のリスト構造を定義して下さい.
・このリストの内容を表示する関数を書いて下さい.
・このリストをサーチして, 最も大きな数を返す関数を書いて下さい.
・このリストをサーチして, 最も大きな数をリストから外す関数を書いて下さい. (複数ある場合, 全てを削除します.)
・このリストをソートする関数を書いて下さい. 要素の比較には通常の整数の大小関係を使って下さい.
--------------------------------------
[3] 環境
 [3.1] OS:WindowsXP SP2
 [3.2] コンパイラ名とバージョン:VS .NET 2003
 [3.3] 言語:C
[4] 期限:今週の金曜(4/28)の17:00

どうかよろしくお願いします
627デフォルトの名無しさん:2006/04/24(月) 14:39:57
>>624
「リスト」って一覧とかの一般的な意味なん?
それとも構造としてリスト構造を使えって意味なん?

一般的な意味と仮定:
#include <stdio.h>
#define N 1000
main(){int c[N+1]={0},p[N+1]={0},i,j,k;
for(i=2;i<=N;++i)c[i]=i;j=0;
for(i=2;i<=N;++i) if(c[i]!=0){p[j]=c[i];for(k=p[j];k<=N;k+=p[j])c[k]=0;++j;}
for(i=0;i<j;++i)printf("%d ",p[i]);}
628デフォルトの名無しさん:2006/04/24(月) 15:36:47
>>624
(2)の方。1個目のヒントは無視。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define N 1000000
int* getPrimes(){
int count=1,prime=1,*primes=malloc(sizeof(int)*N),*judges=malloc(sizeof(int)*N);
int limit=1,next=2,next2=next*next,i;
for(i=1;i<N;++i)primes[i]=INT_MAX;primes[0]=2;
while(primes[count-1]<N){prime+=2;
if(next2<=prime){++limit;++next;next2=next*next;}
for (i=1;primes[i]<=limit;++i){while(judges[i]<prime)judges[i]+=primes[i];if(judges[i]==prime)goto while_end;}
primes[count]=prime;judges[count]=prime*2;++count;
while_end:;}free(judges);return primes;}
main(){int*p=getPrimes(),i=0;while(p[i]<N)printf("%d ",p[i++]);free(p);}
629デフォルトの名無しさん:2006/04/24(月) 16:30:49
>>626 とりあえずソート以外
#include <stdio.h>
#include <stdlib.h>
typedef struct _list list;
struct _list{
int n;
list * next;
};
void showlist(list *header) {
list *p;
for (p=header->next; p!=NULL; p=p->next)
printf("%d ", p->n);
putchar('\n');
}
list * insert(int x, list *prev) {
list *ins, *next;
if ((ins=(list*)malloc(sizeof(list)))==NULL) return NULL;
next = prev->next;
prev->next = ins;
ins->next = next;
ins->n = x;
return ins;
}
list * delnext(list *prev) { //delete prev's next
list *del;
del = prev->next;
if (del == NULL) return NULL;
prev->next = del->next;
free(del);
return prev;
}
630デフォルトの名無しさん:2006/04/24(月) 16:32:54
int delnum(int x, list *header) {
list *p, *prev;
int c = 0;
prev = header;
for (p=header->next; p!=NULL; p=p->next) {
if (p->n == x) {
delnext(prev);
p = prev;
++c;
}
prev = p;
}
return c;
}
int getmax(list *header) {
list *p; int max;
max = header->next->n;
for (p=header->next; p!=NULL; p=p->next)
if (p->n > max) max = p->n;
return max;
}
int delmax(list *header) {
return delnum(getmax(header), header);
}
main() {
int array[] = {5, 1, 1, 3, 4, 5, 0, 2, 3, 5, 1, 5}; int i;
list _h, *header, *p;
header = &_h; header->next = NULL; p = header;
for (i=0; i<sizeof(array)/sizeof(int); i++) {
insert(array[i], p); p = p->next;
}
}
631デフォルトの名無しさん:2006/04/24(月) 16:53:09
インチキっぽいソートもできたがこれでいいんだろうか・・・(;´Д`)
void intikisort(list *header) {
list *p, _h, *tmphead;
int c, max, i;
tmphead = &_h;
tmphead->next = NULL;
while(header->next != NULL) {
max = getmax(header);
c = delmax(header);
for (i=0; i<c; i++)
insert(max, tmphead);
}
header->next = tmphead->next;
}
main() {
int array[] = {5, 1, 1, 3, 4, 5, 0, 3, 5, 1, 5};
int i;
list _h, *header, *p;
header = &_h;
header->next = NULL;
p = header;
for (i=0; i<sizeof(array)/sizeof(int); i++) {
insert(array[i], p);
p = p->next;
}
showlist(header);
intikisort(header);
showlist(header);
}
632暗号コード:2006/04/24(月) 19:01:29
[1] 授業単元:C programming
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1793.zip
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: 一通り
[問題文]
1, すべてのshell scriptsを Makefilesに変える。(40%)
2, CVS version controlのもとにコードとMakefilesを置き、standard version keywordsを使って、updateし、version 2.0を宣言する。(10%)
3, default code valueを使わなければならないときは、いつでも、warning messageをstderrにprint outするようにsrc/getcode.cを書き変える。(10%)
4, 現在のコードは、アルファベットの大文字しか、encode/decodeできない。小文字、space, tab, newline, period, comma, query, bang,もできるようにコードを変える。(10%)
5,lib/cm_defs.hのtranslation table sizeを128から256に変え、unsigned charactersであるinput arrayを宣言するために、lib/{sparc,x86}/cm_trans.cのtranslate functionsを変える。(10%)

今、自分でも取り組み中ですが、最初からなかなか進みません。
どなたか、助けてください。部分的でもありがたいです。本当にお願いします。
633デフォルトの名無しさん:2006/04/24(月) 19:10:51
>>632
最初から意味がわからんと思ったら訳違ってるじゃねーか
まともに訳せないなら原文貼れよ
634暗号コード:2006/04/24(月) 19:24:36
ファイルの中にもあるのですが、一応、問題文そのままアップしました。
最初から、問題文の意味すら分からず、読解から始めたレベルなので、訳がおかしかったようです。
すいません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1794.txt
635暗号コード:2006/04/24(月) 19:33:10
中に入ってる、Makefileは、自分で作ったものですが、間違ってます。
一つではなく、sh filesように、ディレクトリごとに、作らなければならないと思います。
636デフォルトの名無しさん:2006/04/24(月) 19:34:27
>>632
どこにもCVSなんて書かれてないのに、勝手に付け加えてる所からして
RCSやmakeとかのサポートしてくれるプログラムの事、なんも知らないんだろうな
637デフォルトの名無しさん:2006/04/24(月) 22:20:52
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク):int型の配列とポインタを用意し、
ポインタをインクリメントしたとき、アドレスが何バイト進むのか表示しなさい。
表示例(答え):int = 4
[3] 環境
 [3.1] OS:UNIX
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:今月中

よろしくお願いします。
638デフォルトの名無しさん:2006/04/24(月) 23:36:13
悪い問題文だ
639デフォルトの名無しさん:2006/04/24(月) 23:40:20
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
長いので、次のレスに。
[3] 環境
 [3.1] OS:windowsXP
 [3.2] Borland C++ 5.5.1 for Win32
 [3.3] 言語:C言語
[4] 期限:[2006年4月26日まで]
[5] その他の制限:まだCを勉強しだして3週間です。本屋に置いてある入門書は
何冊か読んでいるので、一通り基本的なことは理解しているつもりですが、
課題がハイレベルなのと、期限が短すぎるので今ピンチです。
かなり長い問題ですので解くのが面倒でしたらアドバイスだけでもお願いします。
時間的な余裕が無いので、大雑把でもいいので早めにお願いします。
640デフォルトの名無しさん:2006/04/24(月) 23:48:47
>一通り基本的なことは理解しているつもりですが、

理解してないからピンチなんだろ
641デフォルトの名無しさん:2006/04/24(月) 23:50:53
de,kadai ha naniyo?
642デフォルトの名無しさん:2006/04/24(月) 23:53:09
もういいです。
643639:2006/04/25(火) 00:00:19
問;商品マスタファイル、店舗マスタファイル、売上マスタファイル、
都道府県マスタファイルを基にして、各店舗売上ファイルを作成せよ。
条件1;各ファイルは昇順に並んでいるものとする。
条件2;商品コードの先頭文字は、A;肉類、B;魚類、C;野菜の種類である。
条件3;店舗コードの先頭2文字、都道府県コードである。
条件4;各店舗売上ファイルの金額は、単価*数量である。
備考1;商品マスタファイル、店舗マスタファイル、売上マスタファイル、
都道府県マスタファイルにはすでにデータが入っている。(データ例は次スレで)
備考2;サイズはバイトである。
・売上マスタファイル
項目         サイズ        ・店舗マスタファイル
店舗コード        5         項目           サイズ
商品コード        5         店舗コード          5
売上数          5         店舗名            20

・都道府県マスタファイル         ・商品マスタファイル
項目          サイズ        項目           サイズ
都道府県コード      2        商品コード          5
都道府県名        6        商品名            20
                         単価              5
・各店舗売上ファイル
項目          サイズ
店舗コード         5
都道府県名        6
店舗名           20
商品コード         5
商品名           20
単価             5
売上数           5
金額            10

644デフォルトの名無しさん:2006/04/25(火) 00:01:42
次スレ建てる?(´Д`)
645デフォルトの名無しさん:2006/04/25(火) 00:03:38
>>644 早漏にもほどがある
646暗号コード:2006/04/25(火) 00:11:41
>636,640
授業でcvsの話をしていたので、てっきりそうなんだと、のcvs勉強をして、やってみてました。

>641
漢字はないです。

部分的でもいいので、どなたか助けてください。本当にお願いします。
647639:2006/04/25(火) 00:11:44
データ例
・売上マスタファイル
店舗コード   商品コード   売上数
01001 A0001 10
01001 B0003 100
02001 A0002 55
02001 C0001 3000
03001 A0003 100
03001 B0004 1
03001 C0003 140
03002 A0003 30
05001 A0001 100
05001 C0003 5000

・店舗マスタファイルデータ例
店舗コード        店舗名
01001 本店
02001           あおもりりんご店
03001           あきた店
03002           秋田空港前店
04001           岩手めんこい店
05001           仙台店

続きは次スレに。
648デフォルトの名無しさん:2006/04/25(火) 00:14:56
次スレ建てる?(´Д`)
649639:2006/04/25(火) 00:23:16
>>647の続き
データ例
・都道府県マスタファイル
都道府県コード      都道府県名
01 北海道
02               青森
03               秋田
04               岩手
05               宮城
・                 ・
・                 ・
・                 ・



・商品マスタファイル
商品コード        商品名             単価
A0001 松坂牛             1500
A0002           米沢牛 1500
A0003           東京X 1000
A0004           飛騨牛 900
B0001           本マグロ 500
B0002           鮭 300
B0003           いくら 400
B0004           あさり 100
B0005           車海老 300
C0001           ニンジン 15
C0002           ピーマン 20
C0003           キャベツ 10


650639:2006/04/25(火) 00:34:13
各店舗売上ファイルデータ例

店舗コード 都道府県名 店舗名 商品コード 商品名 単価  売上数 金額
01001     北海道    本店   A0001   松坂牛 1500 10 15000

01001 北海道    本店 A0003   いくら 400 100 40000

03001     秋田     あきた店 A0003 東京X 1000 100 100000
・        ・        ・            ・      ・    ・      ・
 ・        ・        ・            ・      ・    ・      ・
651639:2006/04/25(火) 00:38:29
>>647>>649>>650
文字がずれてしまいました。まだ未熟者ですいません。
652639:2006/04/25(火) 00:43:32
>>640
確かにそうなのかも知れません。
もう一度、本をしっかり読み、基本を叩き込みたいと思います。
しかし、この問題を解くには時間がありません。
自分の力だけではどうしようもできないので、皆様の力を貸してください。
よろしくお願いします。
653デフォルトの名無しさん:2006/04/25(火) 01:00:06
次スレって次スレって
654デフォルトの名無しさん:2006/04/25(火) 01:03:16
これC言語でやんの?
AccessとかSQL使ったほうが遥かに速そうなんだが・・・
655639:2006/04/25(火) 01:07:40
>>654
僕もそうおもったのですが、
C言語の講義なのでCじゃないとダメなんです。
面倒ですがお願いします。
656デフォルトの名無しさん:2006/04/25(火) 01:31:27
[1] 授業単元: C言語プログラミング
[2] 問題文(含コード&リンク): 4つのCSVファイルを読み込み、検索対象とするキーワードを入力し、そのキーワードが何個あるか計算し表示するプログラムを作れ。
CSVファイルは任意データを個人で作成し、プログラムソースとCSVファイルを提出すること
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン: ( VC 6.0等)
 [3.3] 言語: (C/C++/)
[4] 期限: ([2006年4月26日00:00まで])
[5] その他の制限: 制限無し


よろしくお願いします。
657デフォルトの名無しさん:2006/04/25(火) 01:34:14
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
#include <stdio.h>
#include <stdlib.h>

int main (void)
{
int i;
int rv;

srand(12345);
for(i=0; i<10; i++) {
rv = rand();
printf("%f\n", (double) rv/RAND_MAX);
}
return 0;
}
0より大きく1より小さい一様乱数を生成するには何行目をどのように変更すればよいか
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C
[4] 期限: 今月中
[5] その他の制限: なし
0以上1未満ならRAND_MAX+1でできるのですが0より大きいってところができないです。
よろしくお願いします。
658デフォルトの名無しさん:2006/04/25(火) 01:40:02
>>657
適当だが、これでどうよ?
(rv + 1) / (RAND_MAX + 2)
659デフォルトの名無しさん:2006/04/25(火) 01:43:36
[1] 授業単元:情報処理演習
[2] 問題文 :3変数の連立方程式をガウスの消去法を用いて解くプログラムを作成せよ
         a+3b-4c=8
a+b-2c=2
-a-2b+5c=-1
また、10の次数の連立方程式を、ガウスの方程式を用いて解くプログラムを作成せよ。
入力データーとして方程式の次数Nと各方程式の係数をプログラム実行時に読み込むようにせよ
データはキーボードから入力
     
[3] 環境
 [3.1] Linux
 [3.2]gcc
 [3.3] 言語:c
[4] 期限: 水曜午後6時まで
[5] 2題あるようですが片方だけでも宜しいのでできればお願いします
660デフォルトの名無しさん:2006/04/25(火) 01:50:45
>>658
思いつきませんでした、助かります。
ありがとうございました
661デフォルトの名無しさん:2006/04/25(火) 01:58:44
>>659
http://www.fuka.info.waseda.ac.jp/~kozo/suuchi/simple_equation/simple_equation_1.html
ただし係数の入力がちょっと変なのでそこだけいじっとけ
662デフォルトの名無しさん:2006/04/25(火) 02:33:02
>>656
CSVってRFC4180でいいの?それともRFC違反の
MS実装をベースにするのどっち?
663デフォルトの名無しさん:2006/04/25(火) 02:36:21
CSVファイルは任意
664デフォルトの名無しさん:2006/04/25(火) 02:39:22
1,2,3,4,5,6

こうゆうベーシックなやつしか来ないんだよね?
空カンマとか意地悪無しで考えていいんだよね?
665デフォルトの名無しさん:2006/04/25(火) 02:42:19
というか一週間前までに宿題は書こうな
666デフォルトの名無しさん:2006/04/25(火) 03:07:42
>>656 26日までは無理だと思うw
667デフォルトの名無しさん:2006/04/25(火) 03:26:38
ありがとうございます。

>662
特に何も言われてないです。

>664
はい。

668暗号コード:2006/04/25(火) 03:59:01
>666
実は、あと12時間後です。
全てではなくて、良いので、本当によろしくお願いします。
669デフォルトの名無しさん:2006/04/25(火) 04:31:46
>>668 おまえじゃねーよ
670デフォルトの名無しさん:2006/04/25(火) 05:01:39
>>637
#include <stdio.h>
main(){int a[2],*p=a;printf("int = %d",(int)++p-(int)a);}
671デフォルトの名無しさん:2006/04/25(火) 07:15:03
int rmc(int p[],int i,int j)
{
int k;
intm,q;

if(i==j)return 0;
for(k=i;k<j;k++){
q=rmc(p,i,k)+rmc(p,k+1,j)+p[i-1]*p[k]*p[j];
if(k==i)m=q;
else if(q<m)m=q;
}
return m;
}

行列の積の計算回数を最低にしたときの回数を求めようとしたんですが簡単な数を入れても
おかしな値(数十兆くらい)が出てしまいますどこがおかしいんでしょうか?
672671:2006/04/25(火) 07:19:46
追加

[1] 授業単元: アルゴリズム
[2] 問題文(含コード&リンク):
<連鎖行列積問題>
入力:
行列積 A_1 x A_2 x … x A_n. 但し,A_iは p_i-1 x p_i 型.
問題:
乗算回数を最小化する演算順序を求めよ.

(1) 分割統治法で解くプログラムを作成せよ.
(2) 動的計画法(DP)で解くプログラムを作成せよ.
(3) (1)と(2)の時間計算量を比較せよ.

の1
[3] 環境
 [3.1] OS: 環境:XP SP2
 [3.2] VC++ 6.0)
 [3.3] 言語:C
[4] 期限: 今日の8:30
[5] その他の制限: Cならば何でもおk

急ぎですいませんが誰かお願いします
673デフォルトの名無しさん:2006/04/25(火) 07:35:54
誰もいないorz
674639:2006/04/25(火) 07:36:07
皆さん、お願いします。助けてください。
675暗号コード:2006/04/25(火) 09:14:36
どなたか助けてください。本当にお願いします。Makefileだけでもいいので。

>>632
676デフォルトの名無しさん:2006/04/25(火) 09:22:10
バカしかいないのでできないです(>_<)
677デフォルトの名無しさん:2006/04/25(火) 09:55:08
そうです。ここにはバカしかいません。あなたたちの課題は、我々には難易度が高すぎます。
678デフォルトの名無しさん:2006/04/25(火) 11:11:42
679デフォルトの名無しさん:2006/04/25(火) 11:14:08
>>639
データ読み込んで管理して、吐き出せばすぐ終わるだろうが。
クラスか構造体使えば楽だろう。あとは自分で考えれ。
680暗号コード:2006/04/25(火) 11:43:44
どなたか、私のもお願いします。
締め切りまで、あと4時間しかないのです。
本当にお願いします。
681デフォルトの名無しさん:2006/04/25(火) 11:48:55
理解の手助けをしてください。

[1] 授業単元: 本による独学

[2] 問題文(含コード&リンク):
頭悪いためか再帰処理の理解が苦手なのですが
↓のprogramは何故あのような出力になるのかでしょうか?
main()関数がどんどん深くなっていくので、どんな順番で出力されているのか理解できません。
http://takaharamayou.sakura.ne.jp/media/saiki.txt

[3] 環境
特に依存しない
682659:2006/04/25(火) 11:52:22
ネット上のサンプルを写すのは禁止されているので多少変更していただけないでしょうか
おねがいします
683デフォルトの名無しさん:2006/04/25(火) 11:53:16
( ゚д゚)ポカーン
684デフォルトの名無しさん:2006/04/25(火) 11:59:44
>>682
夏目漱石は小説「こころ」の中で、 「向上心のないものは、馬鹿だ」 と書いた
685デフォルトの名無しさん:2006/04/25(火) 12:06:56
( ゚Д゚ )・・・・・・
686デフォルトの名無しさん:2006/04/25(火) 13:05:20
>>681
staticの意味を理解しているならx=2とか少なめに変えてみて紙に書き出してみろ。
687デフォルトの名無しさん:2006/04/25(火) 13:31:29
>>686
あ、たぶん分かりました
ありがとうございあした
688& ◆VP9H0VHJzM :2006/04/25(火) 14:00:20
締め切りまで、あと2時間。。。

>>632
689デフォルトの名無しさん:2006/04/25(火) 14:16:20
誰かできるやつ、おらんのか
690デフォルトの名無しさん:2006/04/25(火) 14:48:33
なかなかいい宿題だな。解いてやる気はしないけど。
691デフォルトの名無しさん:2006/04/25(火) 14:53:41
いい課題だな

見てないけど
692暗号コード:2006/04/25(火) 14:55:16
あと、1時間しかないです。
お願いします。どなたか、助けてください。
本気でピンチです。。。
693デフォルトの名無しさん:2006/04/25(火) 15:42:48
よし、任せろ。
俺の実力を持ってすれば1時間もかからないぜ。
あと30分で上げてやる。
694デフォルトの名無しさん:2006/04/25(火) 15:46:09
嘘つきは泥棒の始まり
695デフォルトの名無しさん:2006/04/25(火) 15:51:07
>>693
お願いします。最後の望みです。
696デフォルトの名無しさん:2006/04/25(火) 15:52:46
2ちゃんねるは嘘つきの始まり
697デフォルトの名無しさん:2006/04/25(火) 16:32:24
>656
何か忘れてる気もするが、とりあえず。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1797.c
698デフォルトの名無しさん:2006/04/25(火) 17:14:55
みんなうそつき。大嫌い。
699デフォルトの名無しさん:2006/04/25(火) 17:32:43
ウソつきではないのです。まちがいをするだけなのです。
700デフォルトの名無しさん:2006/04/25(火) 19:35:29
ここに出てる宿題って高校の?それとも大学の?
701デフォルトの名無しさん:2006/04/25(火) 19:36:49
大学のレベルに見えますか。
702デフォルトの名無しさん:2006/04/25(火) 19:40:07
ごめん、見えない
703デフォルトの名無しさん:2006/04/25(火) 19:53:22
>>682
ここに書いたものを写した時点で ネット上のサンプルを写した のと同じことなんだけど・・
704デフォルトの名無しさん:2006/04/25(火) 19:59:54
同じ事というか、ずばりそのもの
705デフォルトの名無しさん:2006/04/25(火) 20:59:15
開始時刻(時(h1)、分(m1))と終了時刻(時(h2)、分(m2))
を読み込み、開始から終了までの時間を分(md)で求め、表示してください。
hdを求める式は1つで書いてください。
例 開始時間、時?9
   開始時刻、分?30
   終了時刻、時?14
   終了時刻、分?10
   4時間40分

この問題のソースを教えてください。
706デフォルトの名無しさん:2006/04/25(火) 21:20:41
>>705
int hd,md;
hd=(h2*60+m2-h1*60-m1)/60;
md=(h2*60+m2-h1*60-m1)%60;

って事?
707639:2006/04/25(火) 21:25:33
>>678>>679
ありがとうございます。
本当に助かりました。
708デフォルトの名無しさん:2006/04/25(火) 21:30:52
>>706
すいません。ちょっと抜けてました
開始から終了までの時間を時(hd)、分(m)で求め表示してください。
でした
709デフォルトの名無しさん:2006/04/25(火) 21:50:05
>>670さん
ありがとうございました。
710デフォルトの名無しさん:2006/04/25(火) 22:04:12
[1] 授業単元: プログラミング1
[2] 問題文(含コード&リンク):
#include <stdio.h>
main()
{
int c,a,b;
printf("文字を入れて下さい");
c=getchar();
a=c+0x20;
b=(c<=0x5a)?a:c;
printf("%c",b)

}

を改良して、アルファベットの大文字を入れると小文字に、小文字をいれると大文字に変換するプログラムにせよ

[3] 環境
 [3.1] OS: (Windows/Linux/等々) Win
 [3.2] コンパイラ名とバージョン: borland
 [3.3] 言語: C
[4] 期限: あした
[5] その他の制限: なし
711デフォルトの名無しさん:2006/04/25(火) 22:09:38
>>710
お前の態度が気に入らない
712デフォルトの名無しさん:2006/04/25(火) 22:10:53
>>711
すいません 問題そのまま写したので高圧的に感じたかもしれません。
最後にお願いしますと付け忘れてしまいました。すいません
713デフォルトの名無しさん:2006/04/25(火) 22:11:29
ワロタwwwwww>>710が何処へ行っても嫌われるwwwwwwwwww
714デフォルトの名無しさん:2006/04/25(火) 22:41:56
toupper, tolower
715デフォルトの名無しさん:2006/04/25(火) 23:04:43
656の宿題してみたかった。
716依頼1/2:2006/04/25(火) 23:19:19
[1] 授業単元: 画像処理
[2] 問題文(含コード&リンク):

以下は,画像をR成分だけにするプログラム例である.
(プログラム例1)
#include "_wmgraph.h"
#include "_stdfunc.h"
main()
{
_init_wmimage();

printf("JPEGファイルを表示します.\n");
printf("何かキーを押して下さい.\n");
getchar();

char fname[256];
if(_fileopen(fname)) {
_bmap *b = _read_bmap(fname);

_newpage(1,"JPEG FILE",10,10,-(b->w),-(b->h));

_setactivepage(1);
_put_bmap(b, 10);
_putimage(0,0,10);
_setactivepage(1);
717依頼2/3:2006/04/25(火) 23:21:15
 //画像の操作
unsigned char *c = b->b;//bの画素の先頭へのポインタ
int blw=b->lw; //画素1ラインのバイト数

for (int i=0; i<b->h; i++)
for (int j=0; j<b->w; j++) {
//配列cで(i,j)画素の操作ができる.
c[blw*i+3*j+0]=0; //Blue
c[blw*i+3*j+1]=0; //Green
//c[blw*i+3*j+2]=0; //Red
}

_newpage(2,"JPEG FILE",20,20,-b->w,-b->h);
_setactivepage(2);
_put_bmap(b, 10);
_putimage(0,0,10);
_setactivepage(2);

delete b;//画像を破棄
}
return 0;
}
718依頼3/3:2006/04/25(火) 23:21:50
問題:画像をグレースケールにする.画像をネガにする.
(参考)画像をグレースケールにするときの注意:画像をグレースケールにするときには,R,,G,B各成分をすべて共通の平均値(R+G+B)/3にすればよいように思うだろう.しかし,色彩の理論によれば,そうではなく,重みをつけた平均
0.2126R+0.7152G+0.0722B
を使わなければならないことが知られている.単なる平均を使った場合と,色彩理論による正しい方法でつくったグレースケール画像を同時に表示して比較してみよ.

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] Miclosoft Visual Studio.net 2003
 [3.3] 言語: C++
[4] 期限: 2006年4月26日17:00迄
[5] その他の制限: 特に無し

長くなってしまいましたが、どうか宜しくお願い致しますm(_ _)m
719デフォルトの名無しさん:2006/04/25(火) 23:35:13
[1] 授業単元:上級プログラミング
[2] 問題文(含コード&リンク):

長いので以下に貼らせていただきます。クラスの問題です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1798.txt

[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン:不明
 [3.3] 言語:C++
[4] 期限: ([2006年4月27日10:00まで]
[5] その他の制限: 特になし
720デフォルトの名無しさん:2006/04/25(火) 23:44:03
>>710
int main(void){
 int c, a, b;
 puts("文字を入れて下さい");
 c=getchar();
 b=((c>=0x41)&&(c<=0x5a))?(c+0x20):(c-0x20);
 printf("%c",b);
 return 0;
}

721デフォルトの名無しさん:2006/04/25(火) 23:47:56
>>720
不正な文字 ' ' (0x8140)と出てコンパイルできません・・・
722デフォルトの名無しさん:2006/04/25(火) 23:50:50
>>721
それぐらい自分で何とかしろ
723デフォルトの名無しさん:2006/04/26(水) 00:03:47
>>718
インクルードしてるヘッダって…
724697:2006/04/26(水) 00:04:15
>715
今更だが、やっていいと思うよ。
他の人が答えたからってやっちゃ駄目って事はないし、今までだって複数人が回答した事もあったしね。
あんまり気にせずに好きにすればいいんじゃないか?
725デフォルトの名無しさん:2006/04/26(水) 00:08:10
[1] 授業単元:C言語実習
[2] 問題文(含コード&リンク): 整数値a,b,cをキーボードから与えたとき,ax"+bx+c=0の解を求めるプログラムを作成せよ。
                ただし、平方根を求めるためにsqrt関数を使用すること。

                ※axのxについてある『"』は二乗という意味です。二乗をキーボードからどうやって
                 打つかわかりませんでした。。  よろしくお願いします。    
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:BCC
 [3.3] 言語:C
[4] 期限:できれば明日の朝まで。
[5]補足:そこまで難しいところまで習ってないので、一番簡単でシンプルな解答をお願いします。

前に591で質問したんですけど、その返答のプログラムが難しかしくて、提出しても先生に説明できず
困ったので簡単でシンプルなやつをどうぞお願いします。


726デフォルトの名無しさん:2006/04/26(水) 00:17:46
>>725
えぇ〜、割と簡単に作ったつもりなのに(´・ω・`)ショボーン
それよりも、日本語でおk
727デフォルトの名無しさん:2006/04/26(水) 00:19:59
VBプログラマ Cプログラマのお仕事
http://www.vb-c.net/
728bit ◆bRMlyjWKAQ :2006/04/26(水) 00:20:36
こんばんは、お世話になりたいと思い書き込みしました。
高校2年です。
ここ3日間悩んだんですが自分では解決に至りませんでした。
皆様お願い致します。

[1] 授業単元:情報B
[2] 問題文:unsigned longの32ビット列があります。
       任意の位置を指定し0か1か判定不能かを調べる関数bitCheckを作れ。
[3] 環境
 [3.1] OS:WindowsXP sp1
 [3.2] コンパイラ名とバージョン:bcc ver5.5
 [3.3] 言語: C言語
[4] 期限:2006年05月01日10:40まで
[5] その他の制限: 特にないと思います。
729デフォルトの名無しさん:2006/04/26(水) 00:21:03
両方レベル低・・・・
730デフォルトの名無しさん:2006/04/26(水) 00:23:02
判定不能ってどういうこと?!
731デフォルトの名無しさん:2006/04/26(水) 00:24:26
>>728
判定不能の意味が分からない
unsigned long bitCheck(unsigned long value,int n){
    return value & 1 << n;
}
732デフォルトの名無しさん:2006/04/26(水) 00:25:26
>>725 基本的なこと聞くが(代数的に)解を求める方法は知ってるのか?
733bit ◆bRMlyjWKAQ :2006/04/26(水) 00:25:57
以下、ソースです。
#include<stdio.h>
#define __Val1 0x12345678
#define __Val2 0x87654321
#define __ValX 0xFFFFFFFF
typedef struct {
unsigned long Bit; //検定値
int Num; //ビット位置指定
int Result; //検定結果
} _bitUnit;
_bitUnit Tab[]= {
{ __Val1, 0, 0 }
,{ __Val1, 1, 0 }
,{ __Val1, 2, 0 }
,{ __Val1, 3, 0 }
,{ __Val1, 4, 0 }
,{ __Val1, 41, 0 }
,{ __Val1, -1, 0 }
,{ __Val2, 33, 0 }
,{ __Val2, 32, 0 }
,{ __Val2, 31, 0 }
,{ __Val2, 20, 0 }
,{ __Val2, -3, 0 }
,{ __Val2, 1, 0 }
,{ __ValX, 0, 0 } //テーブル終了
};
734デフォルトの名無しさん:2006/04/26(水) 00:26:02
>>725
複素数考えるん?
735bit ◆bRMlyjWKAQ :2006/04/26(水) 00:26:31
//ここから先を変更する
int bitCheck(int c,long arr)
{
printf("検定値は%d",arr);
printf("位置は%d",c);
arr >>= c;
printf("シフト後は%d",arr);
//指定位置が0〜32の間かを調べて測定値を返す
if (c < 0){ //指定位置が0以下か調べる
c = -1; //指定位置が0以下なとき-1を返す
}
else {
if(c <= 32){ //指定位置が32以下か調べる
c = (arr & 0x00000001); //アンドを取って1か0を返す
}
else { //指定位置が33以上なとき
c = -1;//-1を返す
}
return(c);
};
//ここまで
736bit ◆bRMlyjWKAQ :2006/04/26(水) 00:27:42
void bitChk(void)
{
int i;
for(i=0; Tab[i].Bit != __ValX; i++){
Tab[i].Result = bitCheck(Tab[i].Num, Tab[i].Bit);
printf("検定結果:%d\n",Tab[i].Result );
}
};
//■F:\bcpad231> bcc32 bitE.c
//Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
//bitE.c:
//エラー E2140 bitE.c 51: ここでは宣言はできない(関数 bitCheck )
//エラー E2141 bitE.c 52: 宣言の構文エラー(関数 bitCheck )
//エラー E2134 bitE.c 58: 複合文に } がない(関数 bitCheck )
//警告 W8070 bitE.c 58: 関数は値を返すべき(関数 bitCheck )
//*** 3 errors in Compile ***

以上です。お願いします。
737デフォルトの名無しさん:2006/04/26(水) 00:28:49
>>725
とりあえずa,b,cに入力するところはパスで。
if(a==0){
if(b!=0){printf("x=%f\n",c/(double)b);}
else{printf("aもbも0だと無理です。\n");}
}else{
if(b*b-4*a*c<0){printf("解なし。\n");}
else if(b*b-4*a*c==0){printf("x=%f\n",-b/(2.0*a));}
else{printf("x=%f,%f\n",(-b+sqrt(b*b-4*a*c))/(2.0*a),(-b-sqrt(b*b-4*a*c))/(2.0*a));}
}
738bit ◆bRMlyjWKAQ :2006/04/26(水) 00:32:50
>730様
>731様

判定不能とは指定位置に1〜32以外が入ったときです。
739デフォルトの名無しさん:2006/04/26(水) 00:39:47
>>738
普通0-31のような気がするけどまぁいいや。
/*
valueのnビット目が立っているか確認する
返地
+0 -> bitがたってない
+1 -> bitがたっている
-1 -> 範囲外
*/
int bitCheck(unsigned long value,int n){
    return n-1 <32u ? value>>n-1 & 1 : -1;
}
740デフォルトの名無しさん:2006/04/26(水) 00:42:07
>>732
はい。たぶん。。

>>734
複素数は考えないです。

すいません、さっきの問題の追加で、「a=0ではない」ということでお願いします。
741デフォルトの名無しさん:2006/04/26(水) 00:55:29
>>725
D=b^2-4acとするとき D>=0なら解ありでx=(-b+-sqrt(D))/2a D<0なら解なし、ってことを踏まえて
#include <stdio.h>
#include <math.h>
main() {
double a, b, c, D;
/* a〜cを与える処理は自分で書きやがれコンチクショウ */
D = b*b - 4*a*c;
if (D<0)
printf("解無し\n");
else if(D=0)
printf("x = %f\n", -b/(2*a););
else
printf("x = %f, %f\n", (-b-sqrt(D))/(2*a), (-b+sqrt(D))/(2*a));
}

コンパイルしてないけど多分あってる(´・ω・`)
742bit ◆bRMlyjWKAQ :2006/04/26(水) 00:57:02
>738様
そうですよね。0〜31ですね。
マイナスも考慮しなければいけなかったので改良しました。
//
int bitCheck(int n, unsigned long value){
if(n>=0){
return n-1 < 32u ? value>>n-1 & 1 : -1;
}
else{
return n = -1;}
} ;

完成しました。
大変助かりました。
ありがとうございました。
743739:2006/04/26(水) 01:00:17
>>742
たぶん俺のこと指してると仮定して話す。
全然改良になってない。俺の奴は最初から負数も考慮している。

もし、範囲を1-32から0-31に変えたいのなら俺のコードのn-1の部分をnに変えればOK
744bit ◆bRMlyjWKAQ :2006/04/26(水) 01:07:23
>739様
ありがとございます。
739様のプログラムは仰る通り負数を考慮してると思いました。
しかし結果は「0」が返されてしまったので改良してみました。
ちょっとナゾです。
745デフォルトの名無しさん:2006/04/26(水) 01:12:46
746bit ◆bRMlyjWKAQ :2006/04/26(水) 01:14:35
>739様
やはり
int bitCheck(unsigned long value,int n){
return n <32u ? value>>n & 1 : -1;
}
ではダメです。負数の位置に「0」が返されます。

以下で完成とします。
int bitCheck(int n, unsigned long value){
if(n>=0){
return n < 32u ? value>>n & 1 : -1;
}
else{
return n = -1;}
} ;

夜分遅くに付き合っていただき、ありがとうございました。
747739:2006/04/26(水) 01:16:35
>>744
んー0が返るのか。
原因として思いつくのはn-1 < 32uとちゃんと書いてないとか。
例えば、 n < 33uとか n-1<32とか n<=32uとかそういう風に変形するとうまく動かなくなる。
もしちゃんと書いてて結果が変なら俺には原因が分からん。
俺の手元の全てのコンパイラで問題なく動くし
748739:2006/04/26(水) 01:18:18
>>746
それでうまく動かないのか......
一応動かない入力の厳密な組み合わせを1個で良いから教えて。
ちょっと調べてみるから
749デフォルトの名無しさん:2006/04/26(水) 01:25:02
>>746
あ、そうだもう一つ原因が思いついた。
上下の関数で引数の順序が入れ替わってるけど、
引数の順番間違えてるとか (まぁさすがに、これはないか
750bit ◆bRMlyjWKAQ :2006/04/26(水) 01:28:12
>739様
ttp://makegumi.no-ip.info/loader/makegumi0010.zip
のmakegumi0010.zipにソースアップしました。
ダウンキーは bit です。
お願い致します。
使用環境、WinXPsp1 cbb55
751デフォルトの名無しさん:2006/04/26(水) 01:35:40
>739
俺も試してみたけど0になったよ。
return (unsigned int)(n-1) < 32u ? value>>n-1 & 1 : -1;
で強制的にunsigned intにしたら-1になったけど。
ちなみにwinXPでbcc
752739:2006/04/26(水) 01:40:13
>>751
BCCって暗黙の整数の昇格が正しく実装されていないのかー
間違いなくコンパイラのバグですねぇ。
コンパイラを疑うのは普段絶対しないから気づかんかった。ありがと
>>750
というわけでBCCのバグのようなので、>>751のようにキャストしてくださいな。
753bit ◆bRMlyjWKAQ :2006/04/26(水) 01:42:23
>>739
int bitCheck(int n,unsigned long value){
return (unsigned int)(n-1) < 32u ? value>>n-1 & 1 : -1;
}
は「-1」が返されました。
問題点はなんだったのかナゾですが、一応これで完成ということで。
本当にお世話になりました。
ありがとうございました。
754751:2006/04/26(水) 01:48:03
追記。cygwinでgccを試したら元の>739のソースでも正しく-1と出た。
755bit ◆bRMlyjWKAQ :2006/04/26(水) 01:57:26
>>739
父の.NET2003でも元ソースで正常に動きました。
ボーランドのコンパイラは信用ならないと痛感しました。

以上、ありがとうございました。

756デフォルトの名無しさん:2006/04/26(水) 02:04:08
>>754
追試ありがと。
やっぱり他のコンパイラでは正しく出ますね。

自分も追試ということで、clとdmcとgccでやってみた。
結果は全部正しい結果になった。

bcc持ってないから他のコンパイラで試したのが仇だったか......

>>755
まぁコンパイラのバグを正確に把握してない俺も悪いんだけどなw

うーん、templateの展開に難があるからbccって使ってないんだけど、
バグチェック用にbccもダウンロードしたほうが得策っぽいな。

ま、動いたから良しということで気分よく寝るわー。
757デフォルトの名無しさん:2006/04/26(水) 02:20:24
なんか宿題の量がすごいあるな
暇ならやってみたいけど今はまんどくせ
758デフォルトの名無しさん:2006/04/26(水) 02:58:11
[1] 授業単元:C言語実習
[2] 問題文:y=2x^2の値を0≦x≦5の範囲で0.5刻みに計算し、表示するプログラムを作成しなさい。
ただし、get_sqrなる関数を各自定義し、2x^2の値はそれにより計算させること。
また、結果を以下のように表示させること

x=0.0 y=0.0
x=0.5 y=0.5
x=1.0 y=1.0
 ・  ・
 ・  ・
x=5.0 y=0.0



[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語: C
[4] 期限:木曜3時
[5] すみませんが、どうかお願いいたします
759デフォルトの名無しさん:2006/04/26(水) 02:59:22
[1] 授業単元:C言語実習
[2] 問題文:y=2x^2の値を0≦x≦5の範囲で0.5刻みに計算し、表示するプログラムを作成しなさい。
ただし、get_sqrなる関数を各自定義し、2x^2の値はそれにより計算させること。
また、結果を以下のように表示させること

x=0.0 y=0.0
x=0.5 y=0.5
x=1.0 y=1.0
・  ・
 ・  ・
x=5.0 y=0.0



[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名:gcc
 [3.3] 言語: C
[4] 期限:木曜3時
[5] すみませんが、どうかお願いいたします
760デフォルトの名無しさん:2006/04/26(水) 03:00:07
2重投稿もうしわけありません
761デフォルトの名無しさん:2006/04/26(水) 03:36:54
#include <stdio.h>

double get_sqr(double x){
return 2.0 * x * x;
}

int main(){
int i;
double x, y;

for(i = 0;i <= 50;i += 5){
x = i / 10.0;
y = get_sqr(x);
printf("x=%1.1f y=%1.1f\n", x, y);
}

return 0;
}
762デフォルトの名無しさん:2006/04/26(水) 03:37:54
#include <stdio.h>
double get_sqr(double x) {
return 2 * (x * x);
}
int main() {
double x, y;
for(x = 0 ; x <= 5 ; x += 0.5) {
y = get_sqr(x);
printf("x=%.1f y=%.1f\n", x, y);
}
return 0;
}

素人コードで参入
763デフォルトの名無しさん:2006/04/26(水) 06:46:10
開始時刻(時(h1)、分(m1))と終了時刻(時(h2)、分(m2))
を読み込み、開始から終了までの時間を時(hd)、分(m)で求め表示してください。
hdを求める式は1つで書いてください。
例 開始時間、時?9
   開始時刻、分?30
   終了時刻、時?14
   終了時刻、分?10
   4時間40分

この問題のソースを教えてください。
764デフォルトの名無しさん:2006/04/26(水) 07:58:21
>>763
>1参照。
765デフォルトの名無しさん:2006/04/26(水) 12:24:35
[1] 授業単元:プログラミング演習
[2] 問題文:
16進数の乗算を求めるプログラムを作成せよ
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名: gcc
 [3.3] 言語: C
[4] 期限:4月28日
766デフォルトの名無しさん:2006/04/26(水) 12:44:12
>>765
int main(){
printf("%x\n",0x10 * 0x2);return 0;}
767765:2006/04/26(水) 13:02:56
2つの16進数を読み込んで、その乗算を出力するような感じで作成していただきたいです
768デフォルトの名無しさん:2006/04/26(水) 13:06:41
#include <stdio.h>

main(){
int n1, n2, p;
scanf("%x %x", &n1, &n2);

p = n1 * n2;

printf("%x\n", p);
}
769725:2006/04/26(水) 14:19:48
>>737
>>741

両方ともエラーがでるんですよ。

もう一度、すいませんが検討してみてください。
それと、できれば最初から最後までのプログラムをお願いします。
770デフォルトの名無しさん:2006/04/26(水) 14:37:45
それくらい自分でやれ
問題の大部分を解いてくれた人に失礼だろうが
771741:2006/04/26(水) 15:13:32
検討してみてください、とはえらそうなやつだ(゚Д゚)
俺のは
else if(D=0)
printf("x = %f\n", -b/(2*a));
になおせばコンパイルは通るぞ
772デフォルトの名無しさん:2006/04/26(水) 16:03:00
>>769
コンパイラのメッセージからミスを修正できない+その程度の補完も出来ない奴が
C言語の講義の単位取る資格なんてないんじゃね?
773デフォルトの名無しさん:2006/04/26(水) 17:31:57
>>769
何様だ、お前は
最初にお前が質問したときに作られたソースを少しいじればできるだろ。
それを習ってないとか難しいとか文句ばっかり言いやがって
学習する気のないやつにできるわけないだろ、と。
774デフォルトの名無しさん:2006/04/26(水) 18:32:36
おまえこそ何様だ。
質問者の都合なんて放っとけよ。
775デフォルトの名無しさん:2006/04/26(水) 21:41:38
[1] 授業単元: 文字列
[2] 問題文(含コード&リンク): 標準入力から文字列を読み込み、文字列の
数値を0に置き換えて表示するプログラミングを作りなさい。以下のような
結果になるようにする。
abc123dt→abc0dt
111 222 aaa bbb→0 0 aaa bbb
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [無期限]
[5] その他の制限:
です。一応自分でも作って見たんですがスペースを文字列に入れるとうまく
働かなかったり、どうしても出来ません。よろしくおねがいします。
776デフォルトの名無しさん:2006/04/26(水) 21:48:33
期限が無制限か
来年の今ごろ、覚えていたらやってやるよ
777デフォルトの名無しさん:2006/04/26(水) 21:50:34
>>775
#include<stdio.h>
#include<ctype.h>
int main(){
    for(;;){
        int c=getchar();
        if(isdigit(c))for(putchar('0');isdigit(c=getchar());){}
        if(c==EOF)break;
        putchar(c);
    }
}
778デフォルトの名無しさん:2006/04/26(水) 21:56:18
>>777さんありがとうございました。1文字出力と入力のときはgetcharとputchar
をつかえばよかったんですか・・・とても参考になりました〜
779デフォルトの名無しさん:2006/04/26(水) 21:57:02
穴埋め問題ですが・・・。

fopen関数はモードを指定し、ファイルをどのように利用するか明確にする。
書き込み専用に利用するのであればモードは( 14 )であり
また、読み取り専用にオープンするのであれば、( 15 )となる。
また、追加書き込みを可能にする場合は、( 16 )を用いると良い。
バイナリファイルを利用するときはモードに( 17 )をつける。

C言語にはランダムファイルを利用する関数が無いので、
必要なデータの先頭位置にアクセス位置を( 18 )関数に移動して、アクセスを行う。

14〜15に当てはまる言葉を教えてください。よろしくお願いします。
780デフォルトの名無しさん:2006/04/26(水) 22:00:25
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):#include <stdio.h>
#include <limits.h>
#include <float.h>
main()
{
int a;
printf("size of (a ) = %dbyte\n", sizeof(a));
printf("size of (short int ) = %dbyte\n", sizeof(short int));
printf("size of (int ) = %dbyte\n", sizeof(int));
printf("size of (long int ) = %dbyte\n", sizeof(long int));
printf("size of (float ) = %dbyte\n", sizeof(float));
printf("size of (double ) = %dbyte\n\n", sizeof(double));
printf("TYPE\t\tMIN\t\t\tMAX\n");
printf("char\t\t%d\t\t\t%d\n", CHAR_MIN, CHAR_MAX);
printf("short\t\t%d\t\t\t%d\n",SHRT_MIN, SHRT_MAX);
printf("int\t\t%d\t\t%d\n", INT_MIN, INT_MAX);
printf("long\t\t%ld\t\t%ld\n", LONG_MIN, LONG_MAX);
printf("float\t\t%f\t\t%f\n",FLT_MIN,FLT_MAX);
printf("float\t\t%e\t\t%e\n",FLT_MIN,FLT_MAX);
printf("double\t\t%lf\t\t%lf\n", DBL_MIN, DBL_MAX);
printf("double\t\t%e\t\t%e\n", DBL_MIN, DBL_MAX);
}
このプログラムを実行し、各変数に用いられてるbyte数と最大値最小値を確認し、考察せよ
[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン: borland bcc
 [3.3] 言語: C
[4] 期限: 今週中まで
[5] その他の制限: 特にありません

やたらながいのがでてきて表記に困ってます、考察もなにをいったらいいか・・・お願いします
781デフォルトの名無しさん:2006/04/26(水) 22:04:23
>>780
コンパイルして実行はしたんだろうな。
782デフォルトの名無しさん:2006/04/26(水) 22:06:10
>>781
はい バイトのトコは確認しました
783デフォルトの名無しさん:2006/04/26(水) 22:08:14
>>779
googleを開いて「fopen」でぐぐるんだ。
一番最初のヒットページを見れば
14:w 15:r 16:a
までは小学生でも埋められるだろう。
あと数行読み進めれば
17:b
が分かって、ちょっと根気良く読み進めれば
18:fseek
も分かるだろ。ちょっとくらい調べてから聞けよ。
784デフォルトの名無しさん:2006/04/26(水) 22:16:55
>>782
じゃぁサイズが2倍になったら表せる範囲も2倍になってるらしいぞ。とか
同じサイズなのに表せる範囲が違うのはこうじゃないか?とか
あと注意するのはfloatとdoubleのとこの%fと%eについて調べるくらいでいいんじゃね?
785デフォルトの名無しさん:2006/04/26(水) 22:22:25
>>784
わかりました。しんせつにども
786デフォルトの名無しさん:2006/04/27(木) 00:18:26
[1] 授業単元:プログラミング言語C
[2] 問題文:投入金額と購入金額の値を入力してお釣りを表示するプログラムの作成
  (お釣りは五千円札x枚、千円札y枚、百円玉z枚)といった感じです
[3] 環境
 [3.1] UNIX
 [3.2] gcc
 [3.3] C
[4] 期限: 今日の日付が変わるまで

お願いします
787デフォルトの名無しさん:2006/04/27(木) 00:27:45
>>786
#include <stdio.h>
int main() {
int a, b;
printf("投入金額?:");scanf("%d", &a);
printf("購入金額?:");scanf("%d", &b);
printf("お釣りは一円玉%d枚\n", a - b);
return 0;
}

要求は正確に伝えないとヘリクツこねられる。
788デフォルトの名無しさん:2006/04/27(木) 00:32:33
>>786 コンパイルはしてないので適当に修正しる
金額が負のときとかまったくかんがえてましぇん
#include <stdio.h>
main() {
int tonyu, konyu, oturi, x, y, z;
printf("投入金額:");
scanf("%d", &tonyu);
printf("購入金額:");
scanf("%d", &konyu);
oturi = tonyu - konyu;
x = oturi / 5000;
oturi %= 5000;
y = oturi / 1000;
oturi %= 1000;
z = oturi / 100;
printf("稲造:%d枚, 漱石:%d枚, 100円玉:%d個\n", x, y, z);
}
789デフォルトの名無しさん:2006/04/27(木) 01:01:12
>>777チョット気になったんですが、この分はどんな処理をしているんですか?
for(putchar('0');isdigit(c=getchar());)
790デフォルトの名無しさん:2006/04/27(木) 01:09:00
>>789
細かいつっこみを無視すれば
for(A;B;C){〜}

A
while(B){

C}
と一緒。
791デフォルトの名無しさん:2006/04/27(木) 01:12:46
>>788
dクス。参考にさせてもらいます
7921/2:2006/04/27(木) 01:20:29
>>786
#include <stdio.h>
int main() {
int pay, buy, oturi=0,
itiman, gosen, nisen, sen, gohyaku, hyaku, gojuu, juu, goen, itien;
printf("投入金額 > ");
scanf("%d", &pay);
printf("購入金額 > ");
scanf("%d", &buy);
while(pay < buy) {
printf("金額オーバー、再入力 > ");
scanf("%d", &buy);
}
oturi = pay - buy;
if(oturi <= 0) {
printf("お釣りはありません。");
return 0;
}
itiman = oturi / 10000;
oturi %= 10000;
gosen = oturi / 5000;
oturi %= 5000;
nisen = oturi / 2000;
oturi %= 2000;
7932/2:2006/04/27(木) 01:21:08
sen = oturi / 1000;
oturi %= 1000;
gohyaku = oturi / 500;
oturi %= 500;
hyaku = oturi / 100;
oturi %= 100;
gojuu = oturi / 50;
oturi %= 50;
juu = oturi / 10;
oturi %= 10;
goen = oturi / 5;
oturi %= 5;
itien = oturi / 1;
oturi %= 1;
if(itiman) printf("一万円札が%d枚。", itiman);
if(gosen) printf("五千円札が%d枚。", gosen);
if(nisen) printf("二千円札が%d枚。", nisen);
if(sen) printf("千円札が%d枚。", sen);
if(gohyaku) printf("五百円玉が%d枚。", gohyaku);
if(hyaku) printf("百円玉が%d枚。", hyaku);
if(gojuu) printf("五十円玉が%d枚。", gojuu);
if(juu) printf("十円玉が%d枚。", juu);
if(goen) printf("五円玉が%d枚。", goen);
if(itien) printf("一円玉が%d枚。", itien);
return 0;
}
794デフォルトの名無しさん:2006/04/27(木) 01:36:25
二千円札キター(´Д`)
795デフォルトの名無しさん:2006/04/27(木) 01:41:04
>>788
稲造→一葉
漱石→英世
796デフォルトの名無しさん:2006/04/27(木) 02:30:39
[1] 授業単元:C言語入門
[2] 問題文:問題1.以下のメンバを持つ構造体があるとき、各メンバに任意の値を代入し画面に
  表示プログラムを書きなさい。
  メンバ1:char mark
  メンバ2:char para[5]
  メンバ3:int no
  問題2.1で作成したプログラムを、画面表示処理のみ別関数にした形にしなさい。
  (別関数名は任意)
  問題3.2で作成したプログラムを、画面表示関数の仮引数にポインタを使用した形に
  書きかえなさい。
  問題4.3で作成したプログラム中の構造体をtypedefを用いた形に書きかえなさい。
[3] 環境
 [3.1] UNIX
 [3.2] gcc
 [3.3] C言語
[4] 期限: 27日の昼までですが早ければ早いほど嬉しいです。 
 よろしくお願いします。
797デフォルトの名無しさん:2006/04/27(木) 02:49:28
問題1----------
#include <stdio.h>
struct data_s { char mark, para[5], int no; };
int main(void){struct data_s data = {'c', "hoge", 2};
printf("mark->%c\npara->%s\nno->%d\n", data.mark, data.para, data.no);
return 0;}
問題2----------
#include <stdio.h>
struct data_s { char mark, para[5], int no; };
void display(struct data_s d){printf("mark->%c\npara->%s\nno->%d\n", d.mark, d.para, d.no);}
int main(void){struct data_s data = {'c', "hoge", 2};
display(data);
return 0;}
問題3-----------
#include <stdio.h>
struct data_s { char mark, para[5], int no; };
void display(struct data_s* p){printf("mark->%c\npara->%s\nno->%d\n", p->mark, p->para, p->no);}
int main(void){struct data_s data = {'c', "hoge", 2};
display(&data);
return 0;}
問題4-----------
#include <stdio.h>
typedef struct { char mark, para[5], int no; } data_t;
void display(data_t* p){printf("mark->%c\npara->%s\nno->%d\n", p->mark, p->para, p->no);}
int main(void){data_t data = {'c', "hoge", 2};
display(&data);
return 0;}
----------------
詰め込んだ気がするけど、こんなもん?
798デフォルトの名無しさん:2006/04/27(木) 02:50:51
眠いけど寝れる気がしないなぁ

>>796
問題4だけで堪忍

#include <stdio.h>
typedef char char1;
typedef int int1;
struct TEST {
char1 mark;
char1 para[5];
int1 no;
};
void out(struct TEST *temp) {
printf("mark=%c\n"
"para[5]=%s\n"
"no=%d\n", temp->mark, temp->para, temp->no);
return;
}
int main() {
struct TEST test = {'a', "test", 1};
out(&test);
return 0;
}
799798:2006/04/27(木) 02:52:04
しまった、問題よく読んでなかった
無視でよろしく(´・ω・)
800デフォルトの名無しさん:2006/04/27(木) 02:55:25
[1] 授業単元: プログラミング
[2] 問題文:プログラムPrint_ScreenにABE IOKA OGAWA FUKUMORIというパラメタが
与えられている場合、argc、argvの値をすべて答えなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日の午前中
[5] その他の制限:よろしくおねがいします。
801デフォルトの名無しさん:2006/04/27(木) 03:04:34
print_screen.c ここから
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
  int i;
  printf("argc=%c\n", argc);
  for( i = 0 ; argv[i] != NULL ; i++ ) {
    printf("argv[%d]=%s\n", i, argv[i]);
  }
  return 0;
}
print_screen.c ここまで
$ gcc print_screen.c -o Print_Screen
$ ./Print_Screen ABE IOKA OGAWA FUKUMORI
802デフォルトの名無しさん:2006/04/27(木) 03:34:41
わからない点
*bp bp b の区別がよくわからない
Get_int関数がどのような処理を行っているのか?
B++ num++などの ++表現
#define SKIP(cp) {while(isspace(*cp)) cp++;の機能がどのように使われているか
SKIPが使用されることでどのような処理がされているか

[1] 授業単元: プログラミング
[2] 問題文:このプログラミングがどのような処理を行っているか答えよ
[3] 環境
 [3.1] OS: Win
 [3.2] コンパイラ名とバージョン: vi
 [3.3] 言語: C
[4] 期限: 出来れば今日の午前中〜午後3時くらいまでに
[5] その他の制限:よろしくおねがいします。漠然とした質問でスイマセン時間がないもので。

うpろだの15にソースを貼っておきました。
803デフォルトの名無しさん:2006/04/27(木) 03:41:30
>>802
リンクを貼りましょう。ここの住人だって別にうpろだをブックマークしてるわけじゃないんだから。
804デフォルトの名無しさん:2006/04/27(木) 03:51:08
>>802
正直、書かれているコメント通りの動作(ただし get_int() 内にある *i *= 0; 以外)しかしてないと思うんだが。

>*bp bp b の区別がよくわからない
はよく初心者が混乱することで有名だから別にいいけど
>B++ num++などの ++表現
が分からないんだったら一から勉強しなおして。今後プログラム
やらないとしても、この状況でプログラムの単位もらわないで。

ついでに、vi はコンパイラじゃない。
805デフォルトの名無しさん:2006/04/27(木) 03:51:24
[1] 授業単元:C言語
[2] 問題文:fopen()関数が以下の定義の時の処理内容と戻り値を答えなさい。
       定義:FILE *fopen(char *filename, char *mode);
処理内容:
       戻り値:
[3] 環境
 [3.1] UNIX
 [3.2] gcc
 [3.3] C
[4] 期限: 今日中にお願いします。
806デフォルトの名無しさん:2006/04/27(木) 03:52:08
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.cgi?mode=thr&no=1708

すいません、ここの16番目になります。
番号も間違えてました・・・・
807デフォルトの名無しさん:2006/04/27(木) 03:54:34
>>800
main関数の引数がvoidだと無理

int main(int argc, char *argv[])

$ ./Print_Screen ABE IOKA OGAWA FUKUMORI
とでもすれば
argc=ここは未定
argv[0]=Print_Screen
argv[1]=ABE
...
argv[4]=FUKUMORI
とでもなるんじゃない?試してないけど
808デフォルトの名無しさん:2006/04/27(木) 03:54:35
>>805 fopen()の中身が書かれていないので分かりません。
809801:2006/04/27(木) 03:56:23
>>807
補足サンクス。間違えてた。
810デフォルトの名無しさん:2006/04/27(木) 04:22:58
>>805
質問に不備がないんだったら
www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html
ここの内容を適当にコピればOK。

>>807
$ ./Print_Screen ABE IOKA OGAWA FUKUMORI
とするなら argc は5だね。
811デフォルトの名無しさん:2006/04/27(木) 04:28:28
>>801
printf("argc=%c\n", argc);
は%cじゃなくて、%dではないか?
812デフォルトの名無しさん:2006/04/27(木) 09:33:37
[1] 授業単元:プログラム以前の問題・・・orz
[2] コンパイルできないつД`)・゚・。・゚゚・*:.。
[3] 環境
 [3.1] win xp
 [3.2] vcc 5.5
 [3.3] C
[4] マッハ
[5] C言語勉強始めたいつД`)・゚・。・゚゚・*:.。

昨日本買ってコツコツ勉強しようとしたんだけどさ、
「Error: 外部シンボル'_main'が未解決」って出てくる(´・ω・`)
一応ググってみたが意味わからんヽ(´ー`)ノ
誰か解決方法を漏れみたいなド素人でもわかるように教えてエロイ人
813812:2006/04/27(木) 09:36:46
ageちまったorz
814デフォルトの名無しさん:2006/04/27(木) 09:39:45
宿題じゃないならスレ違いだ。
815812:2006/04/27(木) 10:12:53
そうか・・・許せ
816デフォルトの名無しさん:2006/04/27(木) 10:50:13
コンソールプロジェクトでやってみたら

それ、Windowsプログラムになってない?
817デフォルトの名無しさん:2006/04/27(木) 11:59:34
>>812
あんた向けのスレッドがあるからそっちに逝け。
http://pc8.2ch.net/test/read.cgi/tech/1124256027/
http://pc8.2ch.net/test/read.cgi/tech/1141087248/
http://pc8.2ch.net/test/read.cgi/tech/1143639945/

>>816
スレ違いなんだから構うな。
818デフォルトの名無しさん:2006/04/27(木) 12:16:23
質問なんですが、整数a,b,cを与えたとき、ax^2+bx+c=0の解を求めるプログラム教えてくれないですか?
コンピュータ苦手で
819デフォルトの名無しさん:2006/04/27(木) 12:18:58
断る。
820デフォルトの名無しさん:2006/04/27(木) 12:36:41
>>818
>1
後氏ね。
821デフォルトの名無しさん:2006/04/27(木) 12:47:14
>>818
>817
コンピュータ苦手とか以前に、常識を弁えろ。
822デフォルトの名無しさん:2006/04/27(木) 12:56:41
[1] 授業単元: 情報工学演習
[2] 問題: 多倍長整数の演算プログラムをつくる
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 4月27日まで
[5] その他の制限: まだポインタはよくわかりません。。。

整数(int型)を受け取って、それを配列に一数値づつ区切って入れたいのですが
どうやるのでしょうか?
やはりchar型に変換しなくてはならないですか?
ちなみにsprintfでchar型に変換しようとしましたが、11桁?以上になると
なぜか変換できなくなるみたいです。(strlenで数えられなくなる)
823デフォルトの名無しさん:2006/04/27(木) 13:03:41
>>822
期限が今日ということは、既に期限切れか?

あんたの理解が悪すぎるらしくて説明が殆ど理解できないから、
宿題として丸投げしたいなら問題を正確に書き写せ。
丸投げではなくある程度は自力でやりたいなら日本語の勉強を
しなおしてから初心者スレ辺りへ。
824デフォルトの名無しさん:2006/04/27(木) 13:04:21
int p[128],i,err;
for(i=0;i>128;i++){
if(scanf("%d",*p[i])==0)
break;
}
825デフォルトの名無しさん:2006/04/27(木) 13:05:46
また意味不明なコードの断片を……
突っ込み所が多すぎて涙が出てくるぞ。
826824:2006/04/27(木) 13:07:44
正直すまんかった
827デフォルトの名無しさん:2006/04/27(木) 13:16:15
>>823
すいません、本当の期限は5月1日までなのですが、まだ最初の問題でして
今日当たりにここをクリアしないと間に合わないかな、と。。。

問題は↓です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1801.txt
828デフォルトの名無しさん:2006/04/27(木) 13:17:57
最初からそれうpしろ禿

sageろ
829デフォルトの名無しさん:2006/04/27(木) 13:20:30
>>828
何度もすいません。
830デフォルトの名無しさん:2006/04/27(木) 13:34:20
何でここの回答者は威張ってるんだ?
831デフォルトの名無しさん:2006/04/27(木) 13:39:01
>>830
わざわざして頂くわけですから。。。
832デフォルトの名無しさん:2006/04/27(木) 13:39:33
答えて*やってる*から。

嫌なら他あたってくれ。

833デフォルトの名無しさん:2006/04/27(木) 13:57:16
>>832
おまえがそう思うのは勝手だが、そう思うのが当然だとは決めつけないでくれ。
「答えてやってる」なんて考えたこともない回答者もいる。
834827:2006/04/27(木) 14:06:46
そろそろお願いできますか?^^;
835827:2006/04/27(木) 14:13:50
No.1802 さん本当にありがとうございます。
自分なりにがんばって理解して勉強してみますm(__)m
836デフォルトの名無しさん:2006/04/27(木) 16:19:11
>>827
つGNU MP
837デフォルトの名無しさん:2006/04/27(木) 16:44:31
                   _,,,,、、、、、、,,_
                  、-''~:::::::::::::::::::::::"ー-,,
                 .;":::::::::::::::::::::::::::::::::::::::::::i!
                |:::/ ̄ ̄ ̄`' ̄ ̄¨ヾ::::|
                |:::|  ━、_  _.━   |.:.:.:|
                |/  ,-ェュ 、 ,-ェュ、  |.:.:.|_
               (゙|   ´ ̄ ,/ 、  ̄`  |/,. |
                | ( 、 ゙、__,-'' 、)ヽ__/  俺達に感謝しろよ
                \  `こニニ'´ _..┘
                  \___ _,/ヽ
             _,. - '  ヽ...|:::::|... -‐'  `` ヽ、
          ,. '"    ,r::::::::::::::'::::::|         ``'''' ヽ.、
          /      i::::::r──‐''"              ヽ
         i   、i. ゚"!:::::|"゚               ,.    l,
         |    l ゚"|:::::|"゚            | ,/      〉
        /'   |  |::::::|              !i l      i
        /     '、 l:::::::i,              ヾ|        l
   __,.ィヘ、 !      ヽ.ヾ::::::i              |      |
  .!  ヽ、 ヘl      | 'i::::::|             ハ        l
  〉 ヽ、, X,ノ,-‐-、.   ハ. !:::::|              / ヽ     |
 ヽ.,ヽ-ノイ 'l  ヾ` / ! |:::::|            }   l ノ     〉
   `="丿  }    l  }--':::::|_      ,ヘヘ,.-‐{   {/,. -‐  l
    ヽ / /    |  r'==--、  ̄二二/`l ` 〉-''}   {      ヽ
    ヽ__/- 、__,,. ノ   〉、  ` ー= -=(, ,!l ソ,ヾ、ヘ.  |       |
             / `!::::.、___,,. -‐''"| !Y、" ヾ) l      |
838デフォルトの名無しさん:2006/04/27(木) 16:59:55
>>827
つ フーリエ変換
839高速フーリエ:2006/04/27(木) 17:14:29
漏れは?
840デフォルトの名無しさん:2006/04/27(木) 18:13:42
>>827
変数pとLIMITがいくつに定義してあるか、が書いてあるとよかった。
841デフォルトの名無しさん:2006/04/27(木) 19:05:40
>>783
スルーされても良いような質問なのに丁寧な解答ありがとうございました。
842840:2006/04/27(木) 19:05:53
>>827
#include <stdio.h>
#include <math.h>

#define LIMIT 16+1

typedef struct bignum{
int p;
int sign;
char str[LIMIT];
} BIGNUM;

BIGNUM tobignum(int x){
BIGNUM b;
int a, i;

if(x >= 0)b.sign = 0;
else b.sign = 1;x*=-1;
for(i = 0;i < LIMIT && (a = x % (int)pow(10, i+1)) != 0; i++){
b.str[i] = a / (int)pow(10, i) + '0';
x -= a;
}
b.p = i;
for(;i < LIMIT - 1;i++)b.str[i] = '0';
b.str[LIMIT - 1] = NULL;

return b;
}
やってみた
もう少しきれいにできるかも試練
signも説明なかったから0が+、1が-としてみた
843デフォルトの名無しさん:2006/04/27(木) 19:18:39
#define STACKSIZE 10 // デフォールトのスタックサイズ
class CIntStack {
private:
int m_StackPointer;//スタックポインタの役割をする整数(=データの数)
int m_StackSize;//スタックのサイズ
int *m_StackArea;//スタックエリアへのポインタ
844デフォルトの名無しさん:2006/04/27(木) 19:20:01
//上の続き


public:
// 例外 のためのクラス
class CEmptyStackPopError{ };
//空のスタックに対するPop操作 の 例外
class CFullStackPushError{ };
//一杯のスタックに対するPush操作 の 例外

};

上記ヘッダをもとに実装部をお願いします。
言語はC++で期限は5月1日です。
845デフォルトの名無しさん:2006/04/27(木) 19:22:16
すみません途中が抜けてしましました。
下記のものが間に入ります。

public:
//コンストラクタ
CIntStack();//type1 デフォールトのサイズでスタックエリアを確保
CIntStack( int size);// type2 引数sizeのスタックエリアを確保
//デストラクタ
~CIntStack();//スタックエリアを開放する

void Push( int x);
// x をプッシュする.
//具体的には(1)xの値を現在のスタックポインタの位置に保存し,(2)スタックポインタを1増やす.
//スタックがフルの場合に,Pushすると,例外CFullStackPushError を送出する.
int Pop( void);
// ポップした値を返す.
//具体的には(1)スタックポインタを1減らし,(2)スタックポインタの位置の値を返す.
//スタックが空の場合に,Popすると,例外CEmptyStackPopError を送出する.

bool IsEmpty( void);
// スタックが空のとき,真を返す.空でないときは偽を返す.
bool IsFull( void);
// スタックが一杯のとき,真を返す.一杯でないときは偽を返す.
846デフォルトの名無しさん:2006/04/27(木) 19:46:58
847デフォルトの名無しさん:2006/04/27(木) 19:54:01
[1] 授業単元:情報工学演習
[2] 問題:単振り子の運動方程式をオイラー法により数値解析する。
[3] 環境
 [3.1] OS:Windows
 [3.2] cygwinと一緒に入れたgcc
 [3.3] 言語:C
[4] 期限: 5月8日まで
[5] その他の制限:特になし

ググったら↓こんなの出てきたんですが、これをCに直したらどうなるんでしょうか?
 // オイラー法の計算開始
 x1dot = x2;
 x2dot = -(g/l) * sin(x1);
 x1 = x1 + x1dot * dt;
 x2 = x2 + x2dot * dt;
 // オイラー法の計算終了
848デフォルトの名無しさん:2006/04/27(木) 19:54:04
>>845
これでいいかい?
CIntStack::CIntStack():m_StackPointer(0),m_StackSize(STACKSIZE),m_StackArea
(new int[m_StackSize]){}CIntStack::CIntStack(int size):m_StackPointer(0),m_StackSize
(size),m_StackArea(new int[m_StackSize]){}CIntStack::~CIntStack(){delete[]m_StackArea
;}void CIntStack::Push(int x){if(IsFull())throw CFullStackPushError();m_StackArea[
m_StackPointer++] = x;}int CIntStack::Pop(void){if(IsEmpty())throw CEmptyStackPopError();
return m_StackArea[--m_StackPointer];}bool CIntStack::IsEmpty(void){return m_StackPointer 
== 0;}bool CIntStack::IsFull(void){return m_StackPointer == m_StackSize;}
849デフォルトの名無しさん:2006/04/27(木) 20:03:44
>>847
//から行末まではコメントなので、適宜削除するか/* */で囲めばいい。
その点を除けば、その断片はCとして通用するはずだ。
850アホ者です:2006/04/27(木) 20:03:50
▼課題1
通販のWebページでよく見かける「1万5千円以上のお買い物なら,送料無料」を実現するプログラムを作ってください.
具体的には,(あなたが買った品物の)合計金額をキーボードから入力して,1万5千円未満の場合は送料(680円とします)を加算し,最終的な金額を表示するプログラムを作ってください.



▼課題2
課題1にさらに以下の条件を加えます.
@ (合計金額が)3万円以上なら,10%値引き
A 5万円以上なら,15%値引き
B 3万3333円なら,特割33%値引き!(ifの入れ子を使うと楽ですよ)
上記以外の条件も,おもしろいアイデアがある人は加えてみてください.



誰か、このプログラムをつくってください。
851デフォルトの名無しさん:2006/04/27(木) 20:05:47
>>848
すげぇ…
C++だと、ずらずら〜っとつなげられるって聞いたけどまさかこんな風にできるとは…
852845:2006/04/27(木) 20:17:53
書き方悪くてすみません。
改行が多すぎるとエラーメッセージが出るんですけど、
どうすればすべてかけるのでしょうか?
853デフォルトの名無しさん:2006/04/27(木) 20:19:15
>>849
ありがとうございます
やってみます
854デフォルトの名無しさん:2006/04/27(木) 20:19:26
>>850
#include <stdio.h>

int main(void)
{
int x;
scanf("%d", &x);
x = (x>=15000)?x:x+680; //課題1
printf("%d\n", x);
}

課題2
x=
の文を
x = (x>=50000)?x*0.85:(x==33000)?x*0.67:(x>=30000)?x * 0.9:(x>=15000)?x:x+680; //課題2
にかえる

855854:2006/04/27(木) 20:21:04
>>854
printfの後に
return 0;
いれといて
856デフォルトの名無しさん:2006/04/27(木) 20:24:12
>>854
0以下を入れた時の判定も追加しておいて
857デフォルトの名無しさん:2006/04/27(木) 20:30:50
>>852
UpロダにUpして、そこへのURLをここに張ればよい。
858854:2006/04/27(木) 20:32:25
x = (x>=15000)?x:(x>=0)?x+680:x; //課題1
x = (x>=50000)?x*0.85:(x==33000)?x*0.67:(x>=30000)?x * 0.9:(x>=15000)?x:(x>=0)?x+680:x; //課題2
とりあえず負値の場合はそのまま返すようにした
859デフォルトの名無しさん:2006/04/27(木) 20:35:14
>>852 2つのレスに分けろよバカ
860アホ者です:2006/04/27(木) 20:37:13
説明不足でした。

今回はif(条件式)でプログラムの流れを変える構文を学びましたので,それを応用した課題となります.それぞれの課題に対して,ソースプログラムをペーストしてください.

▼課題1
通販のWebページでよく見かける「1万5千円以上のお買い物なら,送料無料」を実現するプログラムを作ってください.
具体的には,(あなたが買った品物の)合計金額をキーボードから入力して,1万5千円未満の場合は送料(680円とします)を加算し,最終的な金額を表示するプログラムを作ってください.

▼課題2
課題1にさらに以下の条件を加えます.
@ (合計金額が)3万円以上なら,10%値引き
A 5万円以上なら,15%値引き
B 3万3333円なら,特割33%値引き!(ifの入れ子を使うと楽ですよ)
上記以外の条件も,おもしろいアイデアがある人は加えてみてください.
861アホ者です:2006/04/27(木) 20:38:11
If文を考慮のもと、elseも加えてください。
862デフォルトの名無しさん:2006/04/27(木) 20:40:04
>>861
if文学んだのなら>>858を少しいじれば、できるだろうに
863デフォルトの名無しさん:2006/04/27(木) 20:40:43
>>861
>>858を見て判定部分をifに適用すればいいだろ
864デフォルトの名無しさん:2006/04/27(木) 20:41:40
釣ってきます
865アホ者です:2006/04/27(木) 20:50:50
難しすぎてできません。すいません。
866デフォルトの名無しさん:2006/04/27(木) 20:53:57
スルー
867デフォルトの名無しさん:2006/04/27(木) 20:54:08
精神的に向上心のないものは、馬鹿だ
868デフォルトの名無しさん:2006/04/27(木) 21:03:14
それ何のセリフだっけ?
869845:2006/04/27(木) 21:16:54
>>850

#include<iostream.h>
void main ()
{
int x;

cout<<"";cin>>x;

if(x<=0)
{
cout<<"値段がないよ〜"<<endl;
}
else if(x>=15000)
{
cout<<x<<endl;
}
else
{
cout<<x+680<<endl;
}
}
870デフォルトの名無しさん:2006/04/27(木) 21:18:46
この流れで!?
871デフォルトの名無しさん:2006/04/27(木) 21:29:55
[1] 授業単元:なし
[2] 問題:aで割るとb余りcで割るとd余る数Xを求める関数を異なった処理内容で3つ作りなさい
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限:GWが始まるまで
[5] その他の制限:なし
872845:2006/04/27(木) 21:30:11
>>845のやつを見やすくアップローダー使いました。

http://up.spawn.jp/file/up18702.txt
のヘッダ(stack.h)をもとに実装部をお願いします。
873デフォルトの名無しさん:2006/04/27(木) 21:34:59
874845:2006/04/27(木) 21:39:32
>>873
お手数ですが見やすくおねがいいたします。
875デフォルトの名無しさん:2006/04/27(木) 21:40:09
自分でやれ
876デフォルトの名無しさん:2006/04/27(木) 21:40:41
精神的に向上心のないものは、馬鹿だ
877デフォルトの名無しさん:2006/04/27(木) 21:51:52
最近やたらえらそうなのが増えたな

もちろん質問側な
878アホ者です:2006/04/27(木) 21:58:27
これが限界です。

#include <stdio.h>

int main(void)
{
int a,b,c;
printf("金額を入力せよ:");
scanf("%d", &a);
printf("続いて金額を入金せよ:");
scanf("%d", &b);
if(c>=15000){
printf("送料は680です:");
}else{
c = (x>=15000)?x:x+680;
printf("送料は無料です:");
}
return0;

}

879デフォルトの名無しさん:2006/04/27(木) 22:00:19
>>871 よくわからんので0と正の数のみ扱うことに
func1(int a, int b, int c, int d) {
int i;
for (i=1; i>0; i++)
if (i%a==b && i%c==d) return i;
return -1;
}
func2(int a, int b, int c, int d) {
int n;
for (n=b; n>0; n+=a)
if (n%c == d) return n;
return -1;
}
func3(int a, int b, int c, int d) {
if (a<c) return func2(c, d, a, b);
else return func2(a, b, c, d);
}
880デフォルトの名無しさん:2006/04/27(木) 22:10:35
>>851
そんな藻前にはここをご紹介

七行プログラミング part5
http://pc8.2ch.net/test/read.cgi/tech/1142467359/
881デフォルトの名無しさん:2006/04/27(木) 22:17:35
>>880
おぉ、thx
882854:2006/04/27(木) 22:25:20
>>878
条件演算子でぐぐればすぐに分かると思うけど…
A?B:C;
だったら、Aが成立するときBの処理を、成立しなければCの処理を
つまりif文で書くと
if(A) B
else C
となるわけだ
883デフォルトの名無しさん:2006/04/27(木) 23:44:52
>>871
#include <stdio.h>
#include <limits.h>

int main()
{
    int x, a, b, c, d;

    scanf("%d", &a);
    scanf("%d", &b);
    scanf("%d", &c);
    scanf("%d", &d);

    for (x=INT_MIN ; x<INT_MAX ; x++)
    {
        if (x%a==b && x%c==d)
        {
            printf("x:%d", x);
            break;
        }
    }

    return 0;
}
884デフォルトの名無しさん:2006/04/28(金) 00:22:20
>>775
やってみたかったのでやってみた。しょぼくてゴメンネ
#include <stdio.h>#include <stdlib.h>#include <ctype.h> #include <string.h>#include <unistd.h>#include <getopt.h>
int main(int argc, char **argv){
int size = 0, opt = 0, mcount = 0, scount = 0, i = 0;
char *result, *data_r, *result_r;char zero = '0';
char *data = "akokpe-00eaij ejiajof efe00 ejoifa033r 004 3 43";size = strlen(data);
result = (char *)malloc(sizeof(char) * size + 1);data_r = data;result_r = result;
for(i =0; i < size; i++){
if( *(data + i) >= 0x30 && *(data + i) <= 0x39){
if(scount > 0){
memcpy(result_r, data_r, scount);result_r = (result_r + scount);
data_r = (data_r + scount);scount = 0;
}mcount++;
}else{
if(mcount > 0){
memcpy(result_r, &zero, 1);result_r = (result_r + 1);
data_r = (data_r + mcount);mcount = 0;
}scount++;
}
}
if(scount > 0)
memcpy(result_r, data_r, scount);
if(mcount > 0)
memcpy(result_r, &zero, 1);
fprintf(stdout, "result = %s\n", result);
free(result);
return 0;
}
885827:2006/04/28(金) 01:26:07
>>842
ありがとうございます。参考にします。
886871:2006/04/28(金) 02:36:40
>>8793っつめが。。%なしで挑戦してみませんか
887デフォルトの名無しさん:2006/04/28(金) 03:19:09
投稿できるIPが回ってきたの一応…。
>>827の回答を以下にあげたナリ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1802.txt
本人さんはすでに気づいているようなので、この投稿へのお礼はいらないよ。
888デフォルトの名無しさん:2006/04/28(金) 06:21:32
cobolの質問ってここでしちゃ駄目?
889デフォルトの名無しさん:2006/04/28(金) 07:56:52
ダメ。
890デフォルトの名無しさん:2006/04/28(金) 10:50:00
          ,:::-、       __
      ,,r   〈:::::::::)    ィ::::::ヽ
      〃   ,::::;r‐'´       ヽ::ノ
    ,'::;'   /::/  __
     l:::l   l::::l /:::::)   ,:::::、  ji
    |::::ヽ j::::l、ゝ‐′  ゙:;;:ノ ,j:l
    }:::::::ヽ!::::::::ゝ、 <:::.ァ __ノ::;!
.    {::::::::::::::::::::::::::::`='=‐'´:::::::::/
    ';::::::::::::ト、::::::::::::::i^i::::::::::::/
      `ー--' ヽ:::::::::::l l;;;;::::ノ
          `ー-"

【ラッキーコアラ】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です。
891デフォルトの名無しさん:2006/04/28(金) 15:02:22
つまりペーペーで恋人もおらず宝くじに頼る体の不健康な人間にしか関係ないと。
892デフォルトの名無しさん:2006/04/28(金) 17:07:09
ええぃ、宿題はまだか
893デフォルトの名無しさん:2006/04/28(金) 18:29:01
【質問テンプレ】
[1] 授業単元: プログラム基礎演習
[2] 問題文(含コード&リンク): 20名の学生の成績表を作成。
成績表は学生番号、名前、点数、評価からなる。学生番号は
1番から20番、名前はa,b,c・・・の順に割り振る。点数は0〜100までの間の乱数で
作成し、成績は80点以上がAで70〜79がBで60〜69がCで59点以下がD
また、20名の点数の平均値を計算する。
[3] 環境
 [3.1] OS:Solaris
 [3.2] コンパイラ名とバージョン: gcc バージョンはわかりません
 [3.3] 言語: C
[4] 期限: 日曜の0時までです
[5] その他の制限:特にないです

よろしくお願いします。途中まで作ったんですが平均値がわからなくて・・・
一応自分が作ったのも載せておきます。1からやってくださっても結構です
894893:2006/04/28(金) 18:30:02
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int GetRandom(int min,int max);

int main(void)
{
int i,j,k, number[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
char name[21] ={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','\0'};
srand((unsigned int)time(NULL));

for (i = 0;i < 20;i++) {
j = GetRandom(1,100);
if (j < 60) {
printf("%c %d %d D\n",name[i],number[i],j);
} else if (j < 70) {
printf("%c %d %d C\n",name[i],number[i],j);
} else if (j < 80) {
printf("%c %d %d B\n",name[i],number[i],j);
} else if (j < 101) {
printf("%c %d %d A\n",name[i],number[i],j);
}
}
}

int GetRandom(int min,int max)
{
return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX));
}
895デフォルトの名無しさん:2006/04/28(金) 18:30:36
HAEEEEEEEEEEEE!!!!!!!!!!!!!!!!
896デフォルトの名無しさん:2006/04/28(金) 18:59:34
>>893
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 20

int GetRandom(int min,int max){ return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); }

int main(void){
int i,number[N],score[N],s=0;char name[N],result[N];
srand((unsigned int)time(NULL));
for(i=0;i<N;i++)number[i]=i+1;
for(i=0;i<N;i++)name[i]='a'+i;
for(i=0;i<N;i++){score[i]=GetRandom(1,100);s+=score[i];}
for(i=0;i<N;i++)result[i]=score[i]>=80?'A':score[i]>=70?'B':score[i]>=60?'C':'D';
printf("name\tno.\tsocore\tresult\n");
for(i=0;i<N;i++)printf("%c\t%d\t%d\t%c\n", name[i], number[i], score[i], result[i]);
printf("average\t%d\n",s/N);
}
平均値って、合計の点数/人数じゃなかったっけか?
まあ、平均値のとこはintでもdoubleでも好きに変えてくれ
897896:2006/04/28(金) 20:27:55
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 20

int GetRandom(int min,int max){ return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); }

int main(void){
int i,score,s=0;char result;
srand((unsigned int)time(NULL));
printf("name\tno.\tsocore\tresult\n");
for(i=0;i<N;i++){score=GetRandom(1,100);s+=score;
result=score>=80?'A':score>=70?'B':score>=60?'C':'D';
printf("%c\t%d\t%d\t%c\n", 'a'+i, i+1, score, result);}
printf("average\t%d\n",s/N);
}

コンパクトにしてみた
898デフォルトの名無しさん:2006/04/28(金) 23:48:01
>>893
GetRandom()の第一引数が1だと、
returnするときにminを足してるから最低点数が1以上になっちゃうぞ。

あとGetRandom()の中身が俺にはよう分からんかった。
899デフォルトの名無しさん:2006/04/28(金) 23:48:48
[1] 授業単元:なし
[2] 問題:%を作る
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: BCC
 [3.3] 言語: C
[4] 期限:GWが始まるまで
[5] その他の制限:なし
900デフォルトの名無しさん:2006/04/28(金) 23:55:02
一瞬
percent = n * 100.0;
が思い浮かんだ俺(w
901デフォルトの名無しさん:2006/04/28(金) 23:55:44
>>899
>[2] 問題:%を作る

をもっと詳しく書かないと怖いお兄さんが出てくるぞ。
902デフォルトの名無しさん:2006/04/28(金) 23:56:43
とりあえず、余りだと考えて
int main(void){int a=11,b=3;printf("%d\n", a-(a/b)*b);return 0; }
903デフォルトの名無しさん:2006/04/29(土) 00:54:21
>>893
C++の勉強がてらに組んでみた。
配列をコンストラクタ初期化子で初期化する方法がイマイチわからずorz
904デフォルトの名無しさん:2006/04/29(土) 00:55:29
#include<time.h>
#include<iostream>
#include<vector>
using namespace std;
class CStudentData
{
protected:
char StudentName[64];
char TestPoint;
public:
CStudentData()
:TestPoint( 0 )
{
memset( StudentName, 0 , sizeof(StudentName ) );
}
void setTestPoint(char InputPoint)
{
TestPoint = InputPoint;
}
void setName(const char *InputName)
{
strcpy(StudentName, InputName);
}
const int getTestPoint() const
{
return TestPoint;
}
const char *getName() const
{
return StudentName;
}
};
905デフォルトの名無しさん:2006/04/29(土) 00:57:31
int main()
{
int PointSum = 0;

srand(time(NULL));
static const char *Name[3] =
{
"Takeo",
"Masako",
"Butao",
};

vector<CStudentData> SData( 3 );

for(int i = 0; i < 3; i++)
{
SData[i].setName( Name[i] );
SData[i].setTestPoint( rand()%100 );
}

906デフォルトの名無しさん:2006/04/29(土) 00:58:23
for(i = 0; i < 3; i++)
{
int buffer = SData[i].getTestPoint();
cout << SData[i].getName();
cout << "\n";
cout << buffer;
cout << "\n";

if( buffer > 80 )
cout << "A\n";

if( buffer > 70 && buffer <= 79 )
cout << "B\n";

if( buffer > 60 && buffer <= 69 )
cout << "C\n";

if( buffer <= 59 )
cout << "D\n";

PointSum += buffer;
}

cout << PointSum;

return 0;
}
907デフォルトの名無しさん:2006/04/29(土) 01:00:23
生徒番号についてなんだが、それはそれは生徒データの配列番号に+1したものと
同じになるわけで、そこから算出すればいいかなと思った。

表示するだけならデータ構造体、またはクラスの中に入れる必要性は感じない
908デフォルトの名無しさん:2006/04/29(土) 01:19:23
>>871 正しく計算できてると思う。多分。
#include <stdio.h>
int main()
{
  long long x, a, b, c, d, i, j, la, lc, m;
  scanf("%lld", &a);
  scanf("%lld", &b);
  scanf("%lld", &c);
  scanf("%lld", &d);
  for (x = a, i = c; (j = (x % i)) > 0; i = j)
    x = i;
  if (i != 1 && (b % i) != (d % i)) {
    printf("解が無い\n");
    return 0;
  }
  if (a == i) {
    printf("x:%lld\n", d);
    return 0;
  }
  if (c == i) {
    printf("x:%lld\n", b);
    return 0;
  }
  a /= i;
  c /= i;
  m = a * c;
  for (la = c; ((la * c) % a) != 1; la = ((la * c) % a)) /* nop */;
  for (lc = a; ((lc * a) % c) != 1; lc = ((lc * a) % c)) /* nop */;
  printf("x:%lld", (((((b/i)*la)%m)*c*i)+((((d/i)*lc)%m)*a*i)+(b%i))%(m*i));
  return 0;
}
909デフォルトの名無しさん:2006/04/29(土) 07:59:29
[1] 授業単元:なし
[2]  問題:ユーザーに4−8桁の数字のパスワードを入力させ、
      そのパスワードの安全性を3段階で示す(弱、中、強)プログラム
      作りなさい。4桁ならば、弱。5−6桁ならば、中、7,8桁ならば、
      強になります。またリピートする数字、例えば、1111や1212、1234567など
      は安全性に欠けている事を考慮します。(隣り合った数字の引き算が2以上ならば、
      リピートする数字とは考えられません。)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: BCC
[3.3] 言語: C
[4] 期限:5/1
[5] その他の制限:なし
   よろしくお願いします。
910デフォルトの名無しさん:2006/04/29(土) 08:57:37
つ[1357]
つ[15263748]
911デフォルトの名無しさん:2006/04/29(土) 08:58:17
新人研修のネタは宿題じゃねーだろ
金貰ってるんだからそれぐらい自分で
やれよ。ヒントあれだけ教えたのにわからねぇってか?
912デフォルトの名無しさん:2006/04/29(土) 08:59:12
つーか、[13131313]でも安全か。
913デフォルトの名無しさん:2006/04/29(土) 09:02:55
>>911
何の話?
914デフォルトの名無しさん:2006/04/29(土) 09:25:17
>>911
関係者なら直接言えよ。
915デフォルトの名無しさん:2006/04/29(土) 09:33:17
書いててそう思ったから、今から家いって
引き回してくる
916デフォルトの名無しさん:2006/04/29(土) 10:33:29
>>909
仕様がよくわからんので適当に。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1807.c
917デフォルトの名無しさん:2006/04/29(土) 11:44:49
お前ら遊んでないで自分で宿題やれ以上
もう次スレはないと思え
918デフォルトの名無しさん:2006/04/29(土) 13:40:53
とカスが申しております
919デフォルトの名無しさん:2006/04/29(土) 14:22:36
弱キックと弱パンチの区別がつかんぞ
920デフォルトの名無しさん:2006/04/29(土) 15:18:07
金貰ってるからやれじゃなく、研修にならんからやれじゃないかな。
まぁ>909が営業職で単なる消化期間なら丸投げでもええかもしれんが。
921デフォルトの名無しさん:2006/04/29(土) 15:33:49
【質問】
 http://ysserve.int-univ.com/susi/Lecture/c2/
↑のページの【必須CAI課題】のどれかをクリックして適当に学生の番号入力するとようにオンラインのコンパイラに飛べて、
このようなC言語のオンラインコンパイラを自分のHPに設置したいのですがどうしたらいいのでしょうか?

ちなみに自分のHPサービス(sakura.ne.jp)にはCGI,PHP,gcc等コンパイラがあり、パスも分かるのですが
そこからどうしたよいのでようか?
ソースが入力された文章を受け取って、次にgccのパスを・・・どうやったらコンパイルできるのでしょうか?教えてください

922デフォルトの名無しさん:2006/04/29(土) 15:35:45
>>921
WebProg板へどうぞ。
923デフォルトの名無しさん:2006/04/29(土) 15:36:06
「考慮します。」じゃ話にならんよ
もし本当に>>911が出題者なら反省してくれ
924デフォルトの名無しさん:2006/04/29(土) 15:36:36
>>909
研修課題なら自分でこなせ。
じゃないとこれからより辛くなるぞ・・・。
925デフォルトの名無しさん:2006/04/29(土) 16:19:06
>>909
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char password[9];
    int password_length;
    char rank[][3]={"弱", "中", "強"};
    int i;

    do
    {
        scanf("%s", password);
        password_length=strlen(password);
    } while(password_length<4 || password_length>8);

    puts(rank[(password_length-3)/2]);

    for (i=1 ; abs(password[i-1]-password[i])<=1 ; i++)
        if (password[i+1]=='\0')
            puts("安全性に欠けている事を考慮します");

    return 0;
}
926デフォルトの名無しさん:2006/04/29(土) 16:27:12
>>899
#include <stdio.h>

int amari(int hijosu, int josu)
{
    if (hijosu<josu)
        return hijosu;
    return amari(hijosu-josu, josu);
}

int main()
{
    int hijosu=97, josu=5;
    printf("%d", amari(hijosu, josu));
    return 0;
}
927デフォルトの名無しさん:2006/04/29(土) 16:35:34
>>926
出題者じゃないけど頭いいな
928デフォルトの名無しさん:2006/04/29(土) 16:38:57
>>893
#include <stdio.h>

int main()
{
    int sum=0, i, score;
    char *rank="DDDDDDCBAAA";
    for (i=1 ; i<=20 ; i++)
    {
        sum+=(score=rand()%101);
        printf("%d %c %d %c\n", i, i+0x60, score, rank[score/10]);
    }
    printf("%d\n", sum/20);
    return 0;
}
929デフォルトの名無しさん:2006/04/29(土) 17:08:38
>>928のをそのまま改良して完全ランダムにしておいた

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

int main()
{
int sum=0, i, score;
char *rank="DDDDDDCBAAA";
srand(time(NULL));

for (i=1 ; i<=20 ; i++)
{
sum+=(score=rand()%101);
printf("%d %c %d %c\n", i, i+0x60, score, rank[score/10]);
}
printf("%d\n", sum/20);
return 0;
}
930デフォルトの名無しさん:2006/04/29(土) 17:22:42
>>871
#include <stdio.h>

int sx(int a, int b, int c, int d, int smax)
{
    int x1, x2;

    x1=b;
    x2=d;
    while (x1!=x2)
    {
        if (x1<x2)
            x1+=a;
        else
            x2+=c;
        if (x1>smax||x2>smax)
        {
            puts("解無し");
            return smax;
        }
    }
    return x1;
}

int main()
{
    int a=117,b=5,c=58,d=183,smax=99999;
    printf("%d\n", sx(a,b,c,d,smax));
}
931デフォルトの名無しさん:2006/04/29(土) 17:36:38
>>929
完全ランダムという言葉の意味を分かっているのかと問いたい。
932デフォルトの名無しさん:2006/04/29(土) 18:14:24
>>871
#include <stdio.h>

int sx(int a, int b, int c, int d, int smax)
{
    int x, tmp;
    if (a<c)
    {
        tmp=c;
        c=a;
        a=tmp;

        tmp=d;
        d=b;
        b=tmp;
    }

    for (x=b ; x<=smax ; x+=a)
        if ((x-d)%c==0)
            return x;

    return smax;
}

int main()
{
    int a=117,b=5,c=58,d=183,smax=99999;
    printf("%d\n", sx(a,b,c,d,smax));
}
933デフォルトの名無しさん:2006/04/29(土) 18:15:46
乱数とは次の値が予想できないもの、といいたいわけだな>>931
934デフォルトの名無しさん:2006/04/29(土) 18:17:03
MT実装しろってか
935デフォルトの名無しさん:2006/04/29(土) 18:17:48
rand() / (RAND_MAX / N + 1)
936デフォルトの名無しさん:2006/04/29(土) 18:19:55
実装しても擬似乱数に変わりはないでしょ
937デフォルトの名無しさん:2006/04/29(土) 18:24:28
周期がほぼ無限になるような乱数なんて実装だけで
金もらえるから諦めろ落しどころ覚えろ。
938デフォルトの名無しさん:2006/04/29(土) 18:27:16
そこで円周率ですよ
939デフォルトの名無しさん:2006/04/29(土) 18:29:10
円周率だと出てきやすい値とでにくい値があるからなぁ
940デフォルトの名無しさん:2006/04/29(土) 18:30:50
>>871

>>879 func1 試し割り算法
    func2,3 ガーナーのアルゴリズム
>>883 試し割り算法
>>908 中国剰余定理
>>930 正式名称不明
>>932 ガーナーのアルゴリズム
941デフォルトの名無しさん:2006/04/29(土) 18:37:41
とりあえず電圧とか温度とかをシードにして周期の長いMT法で実装しとけばよくね?
942デフォルトの名無しさん:2006/04/29(土) 19:17:04
質問じゃないがこのプログラム コンパイルしてみるまでミスに気がつかんかった・・・
恐るべし・・・getchar()


#include <stdio.h>

int main(void)
{
int ch;
char name[20];

puts("名前を入力せよ");
scanf("%s", name);

puts("よろしいですか(Y/N)?");
ch = getchar();

if (ch == 'Y' || ch == 'y') {
/* 処理 */
} else {
/* 処理 */
}

return 0;
}
943デフォルトの名無しさん:2006/04/29(土) 19:19:09
scanfではエンターキー(\nのこと?)は代入されないならまだしも、getcharにがそのエンターキーを受け取るとは・・

どうなってんだ?
944デフォルトの名無しさん:2006/04/29(土) 19:22:18
scanfのキーb−ド入力では最後エンターキーを押さないといけないルールがあるが

どうしたらいいんだ?
945デフォルトの名無しさん:2006/04/29(土) 19:24:59
scanf(" %c", &ch);
こんな感じでいいんじゃなかったっけ?
確認してないからわからんけど
946デフォルトの名無しさん:2006/04/29(土) 19:25:56
VC++8.0
dllをdefでエクスポートした関数を呼び出したいが宣言のしかたが分かりません
ディペンデンシーウォーカーで見るとちゃんとエクスポートされてます。
947デフォルトの名無しさん:2006/04/29(土) 19:26:44
2回getcharすりゃいいんじゃない
948デフォルトの名無しさん:2006/04/29(土) 19:31:23
>>939
MTの方がよっぽど偏ってるべ
949デフォルトの名無しさん:2006/04/29(土) 19:33:45
無理数って一様なもんなの?
950デフォルトの名無しさん:2006/04/29(土) 19:47:28
>>945
だめでしたね
scanf("%c", &ch);
scanf("%c", &ch);
と2回やってもだめでした

>>947
ch = getchar(); 2回でできました。でも冗長な気がしますがしょうがないのでしょうか?
951デフォルトの名無しさん:2006/04/29(土) 19:59:27
>>950
fgets + sscanf 推奨。
952デフォルトの名無しさん:2006/04/29(土) 20:06:42
>>950
" %c"とちゃんと%の手前の空白を打ってるか?
"%c"と打ってる低脳の予感がする......
953デフォルトの名無しさん:2006/04/29(土) 20:17:10
>>952
空白も入れてますが
if文の真偽判定で必ず偽になってしまいます

if (ch == 'Y' || ch == 'y') {
puts("成功");
} else {
puts("失敗");
}
954デフォルトの名無しさん:2006/04/29(土) 20:24:48
>>953
scanfの後にffluch(stdin);
955デフォルトの名無しさん:2006/04/29(土) 20:26:10
scanf("%c ")で前じゃなく後ろに空白じゃなかた?
956デフォルトの名無しさん:2006/04/29(土) 20:29:19
ぐぐったらすぐ出た
以下コピペ

scanf は,読み込む前の空白文字(スペース,改行など)は,読み飛ばしますが,
読み込んだ後の空白文字は,そのまま入力バッファに残ります。
この後で,gets やgetchar を実行すると,バッファに残っている改行文字が入力
されてしまい,見かけ上スキップされるように見えます。 たとえば,scanf の書式
指定の末尾に %*c と書いておくか,scanf の実行後に fflush(stdin); などを使っ
て入力バッファをクリアしておけば,この問題を回避することができます。
scanf は,注意して使わなければならない関数の1つです。
957デフォルトの名無しさん:2006/04/29(土) 20:29:27
>>953
%c は 1byte しか書き換えないのに、16bit 以上ある未初期化の int ch 使ってるからでは?
958デフォルトの名無しさん:2006/04/29(土) 20:31:51
fflush(stdin)
は規格上有効だっけ?
959デフォルトの名無しさん:2006/04/29(土) 20:37:40
>>957が原因ですな
char型にするか、あらかじめchに0を代入しておけば>>945でうまくいく

普通は>>945のやり方でやるよね?
960デフォルトの名無しさん:2006/04/29(土) 20:50:35
961デフォルトの名無しさん:2006/04/29(土) 21:12:58
>>959
int型ではエンディアンによっては巧くいくがエンディアンによっては巧くいかない。
962デフォルトの名無しさん:2006/04/29(土) 21:18:53
>>958
>streamが出力ストリームまたは直前の操作が入力でない更新ストリームを指すとき(略)
>それ以外の時の動作は、未定義とする。
JIS X3010:2003 - 7.19.5.2

まぁわざわざ規格票見なくても入力ストリームに対するfflushは未定義動作って事ぐらい常識だろ
963デフォルトの名無しさん:2006/04/29(土) 22:55:40
素直に fgets 使おうよ
964デフォルトの名無しさん:2006/04/29(土) 23:22:37
fgets(,,stdin)だと後ろの\n\0も吸い込むね
965デフォルトの名無しさん:2006/04/29(土) 23:31:43
>>964
それを sscanf で解析。

入力動作と解析動作を分ける事で自由度も良くなるし、今回みたいな
厄介事も回避できる。
まあ書き捨てるプログラムなら scanf もよく使うけど。
966デフォルトの名無しさん:2006/04/29(土) 23:42:57
【質問】
 http://ysserve.int-univ.com/susi/Lecture/c2/
↑のページの【必須CAI課題】のどれかをクリックして適当に学生の番号入力するとオンラインのコンパイラに飛べますが、
このようなC言語のオンラインコンパイラを自分のHPに設置したいのですがどうしたらいいのでしょうか?

ちなみに自分のHPサービス(sakura.ne.jp)にはCGI,PHP,C言語(gcc)等のコンパイラがあり、パスも分かるのですが
そこからどうしたよいのでようか?
ソースが入力された文章を受け取って、次にgccのパスを・・・どうやったらコンパイルできるのでしょうか?教えてください


ちなみにCやVBといった言語やHPビルダーは使えますが、Webプログラミングの勉強はしたことないので、HPビルダーで出来る程度でお願いします。


(さらにこのオンラインコンパイラだとscanf関数等数値のキーボ−ド入力が出来ないので、余裕があれば改善したいです。HTMLだけじゃ無理そうですが・・)
967デフォルトの名無しさん:2006/04/30(日) 00:02:16
【質問テンプレ】
[1] 授業単元: 2ちゃんねる
[2] 問題文(含コード&リンク): C/C++の宿題を片付けます64代目スレを立てる。
[3] 環境
 [3.1] OS: 任意
 [3.2] コンパイラ名とバージョン: 任意
 [3.3] 言語: 日本語
[4] 期限: 2006年04月30日12:00まで]
[5] その他の制限:
 立てる前に作業入り宣言お願いします。
 テンプレの避難所スレが落ちてるので、その辺もよしなに取り計らってください。
 寝落ちするので先にお礼言っておきます。スレ立てありがとうございました。
968デフォルトの名無しさん:2006/04/30(日) 00:12:25
C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/
969デフォルトの名無しさん:2006/04/30(日) 01:38:20
>>966
新スレにまで出張ご苦労様です、と
っていうか、質問スレ池
970デフォルトの名無しさん:2006/04/30(日) 01:48:01
gccはここにあります
これでオンラインコンパイルは無理でしょうか?
http://takaharamayou.sakura.ne.jp/proglang/gcc
971デフォルトの名無しさん:2006/04/30(日) 02:10:44
>>970
ヘッダにELFって、Unixのバイナリか
てかオンラインコンパイルとか何言ってんだ?
972デフォルトの名無しさん:2006/04/30(日) 02:13:59
どうでもいいよ、宿題と関係ないし
973デフォルトの名無しさん:2006/04/30(日) 02:15:33
>>971
966のリンク先はどうやってCソースをコンパイラしているんでしょうか
サーバー管理者じゃないとこのようなことは無理なんですかね?
974デフォルトの名無しさん:2006/04/30(日) 02:40:41
>Cソースをコンパイラしている
>Cソースをコンパイラしている
>Cソースをコンパイラしている
>Cソースをコンパイラしている
>Cソースをコンパイラしている
>Cソースをコンパイラしている
>Cソースをコンパイラしている
>Cソースをコンパイラしている
975デフォルトの名無しさん:2006/04/30(日) 02:46:55
976デフォルトの名無しさん:2006/04/30(日) 02:50:47
ノレ
977デフォルトの名無しさん:2006/04/30(日) 03:57:10
#include <stdio.h>

void otsuri(int zankin)
{
    int i, syubetsu[]={1,5,10,50,100,500,1000,2000,5000,10000};
    for (i=9 ; i>=0 ; i--)
    {
        printf("%d %d\n", syubetsu[i], zankin/syubetsu[i]);
        zankin%=syubetsu[i];
    }
}

int main()
{
    int tonyu, konyu;
    scanf("%d", &tonyu);
    scanf("%d", &konyu);
    otsuri(tonyu-konyu);
}
978デフォルトの名無しさん:2006/04/30(日) 04:04:45
>>966
何か恐ろしいレベルで勘違いしてそうだからあらかじめ言っておくが、
オンラインコンパイラなんて代物は存在しない。

とりあえずCGIというものについてちゃんと勉強してから来なさい。
ちなみにホームページビルダーでは何も出来ない。以上。
979デフォルトの名無しさん:2006/04/30(日) 04:21:13
>>728
#include <stdio.h>

int bitCheck(unsigned long bit, int pos)
{
    return (bit >> pos-1)&1;
}

int main()
{
    unsigned long bit=0xAAAAAAAA;
    int pos;
    for (pos=1 ; pos<=32 ; pos++)
    {
        if (bitCheck(bit, pos))
            puts("ON");
        else
            puts("OFF");
    }
}
980デフォルトの名無しさん:2006/04/30(日) 06:07:09
>>963
素直?なのかは分かりませんが
結局fgetsが一番スマートな書き方っぽいですね( ×scanf("%s",name);⇒○fgets(name,20,stdin); )

981デフォルトの名無しさん:2006/04/30(日) 06:19:32
>>979
あれ??
982822:2006/04/30(日) 06:50:08
[1] 授業単元: 情報工学演習
[2] 問題: 多倍長整数の演算プログラムをつくる
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月1日まで

すいません、つい先日お世話になったものでそれを参考に
作っていたのですが、また壁にぶち当たって困っています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1809.txt
↑二つの数値を入力し、それを配列に入れて表示させるんですが、
失敗してしまいます。(二つの数値の桁が同じだと時々成功する)
どこがおかしいのでしょうか?
あと、int f_intminとINT_MINの意図がわからなかったりします。
983デフォルトの名無しさん:2006/04/30(日) 07:15:01
void print(struct bignum b){
int i;
if(b.sign == MINUS){
printf("-");
}
for(i=b.p-1;0<=i;--i){
printf("%c",b.str[i]);
}
}

>INT_MINの意図
ビット表現の話になるが大丈夫か?
984デフォルトの名無しさん:2006/04/30(日) 07:23:34
なんでわざわざ>>887のを改悪してるのかわからんが・・・
例えばintが8bitの環境だと(んなもんねえけどw)、intの表現できる範囲は-128〜127
んで、-128がtobignumの引数になったとき、反転させるだけだと困ったことになる(0になる)
なので+1して-127にしてから反転させて127にして処理して、最後に+1させる
985デフォルトの名無しさん:2006/04/30(日) 07:29:10
>なんでわざわざ>>887のを改悪してるのか
FILEまだ習ってないんじゃない?
986デフォルトの名無しさん:2006/04/30(日) 13:53:59
そもそもなんでchar型の配列を使っているのか?
素直にint型でいいんじゃないの?
987822:2006/04/30(日) 15:10:19
>>984
ありがとうございました。
こんなにスマートに表現できるとはorz
参考までに>>982のどこが悪かったのか教えてくださいませんか?
自分の悪い頭で考えても思い浮かばない。。。

>>984
>-128がtobignumの引数になったとき、反転させるだけだと困ったことになる(0になる)
これは-128であるときの表現を可能にする(=表現の幅を広げる)という解釈でよろしいですか?

>>986
それができればいいんですが、int型で数値を丸ごと受け取ったあと
そのまま一桁ずつint型の配列に入れ込む方法が思い浮かばなかったので。
そういう方法はありますか?

あと、スレ違いっぽいので申し訳ないのですが、%sと%cとの違いはなんでしょうか?
解説のサイトを見ても、前者は文字列の表示、char型の表示と今市違いが
わかりません。
988デフォルトの名無しさん:2006/04/30(日) 15:50:30
ものすごくざっくり言えば %c は一文字、 %s は複数文字
989デフォルトの名無しさん:2006/04/30(日) 18:13:14
990986:2006/04/30(日) 18:19:55
自分で処理の分からないプログラムを書くなwwww
while ( x != 0 ){ b.str[b.p++] = x % 10 + '0';x /= 10; }
↑のchar型の配列に数値を一桁ずつ格納する処理が理解できれば
int型の配列に一桁ずつ入れる処理も分かるでしょ>>987


991986:2006/04/30(日) 18:39:23
今、ふと思ったんだけどtobignumの引数がintだから
int型の範囲を超える値を入れるとエラーになるよね
992デフォルトの名無しさん:2006/04/30(日) 19:32:45
>>988
ありがとうございます。

>>990-991
ああ、なんとなくわかりました。
int型は確かに自分も最初間違ってるんじゃないかと混乱しました。
993デフォルトの名無しさん:2006/04/30(日) 20:29:37
多倍長整数てことは32bit(環境に依存するが)以上の時のことも考えるわけで、
tobignumの引数をintにしておくと、INT_MAX〜INT_MINまでの値しか扱えないのよね

994デフォルトの名無しさん:2006/04/30(日) 21:24:37
入力した値をtobignumを使用して変換するのは間違い。
文字列として取得して、文字列としてそのまま格納するのが正(bignum自身をいじらないのであれば)。
入力文字列の解析時にエラーチェックをするのは当然として、0015などの入力も考慮する必要がある。
また、LIMIT桁を超えた入力をチェックするためには、LIMIT文字を受け取ったのでは×。
995デフォルトの名無しさん:2006/04/30(日) 22:31:04
995
996デフォルトの名無しさん:2006/04/30(日) 22:40:02
996
997デフォルトの名無しさん:2006/04/30(日) 22:46:24
997
998デフォルトの名無しさん:2006/04/30(日) 22:46:34
埋沢富市
999デフォルトの名無しさん:2006/04/30(日) 22:50:14
1000
1000デフォルトの名無しさん:2006/04/30(日) 22:50:30
1000げっと
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。