C言語なら俺に聞け(入門編)Part 107at TECH
C言語なら俺に聞け(入門編)Part 107 - 暇つぶし2ch2:デフォルトの名無しさん
12/09/09 11:23:25.19
テンプレ改変乙

3:デフォルトの名無しさん
12/09/09 11:28:27.92
二次元配列の変数を関数に入れてmain()で使うことってできる?
できるなら具体的にどうなりますか

4: ◆QZaw55cn4c
12/09/09 11:36:11.17
>>3
ちょっと言葉たらずだ。もう少し説明してほしい。
URLリンク(codepad.org)

5:デフォルトの名無しさん
12/09/09 11:50:54.52
>>4
見てみます
早いレス感謝です

6:デフォルトの名無しさん
12/09/09 12:01:28.58
>>1がアボーンされてる

7: ◆5bhYRM1Rdk
12/09/09 21:02:10.06
ヒープ deleteminの関数作成がわかりません

問題文:ヒープの最小値を取り除く、deletemin関数を作成せよ。
空の配列にinsertを複数実行することでヒープ条件を満たすヒープを構成する。
これにdeleteminを実行することで最小値を抽出せよ。
最小値を抽出した後、一次元配列がヒープ条件を満たすように再構成せねばならない。プロトタイプ宣言は以下とする。
int deletemin(int a[], int *n);

質問:関数deleteminについて調べてはみたんですが何をしているのか分からないものばかりだったので質問させてください。
ヒープの最後のノードを根に持ってきて、右のノードと左のノードを比べて小さい値のノードの方と比較して
最後から持ってきたノードの値の方が大きければ交換するというの
繰り返して最小ヒープを再構成したいのですが、どうすればいいのかわかりません。
サイトなどみても分からなかったのでど素人でも分かるように説明お願いします。
自分のソースURLリンク(ideone.com)

8:デフォルトの名無しさん
12/09/09 21:48:46.54
あ~あ、マルチかぁ。
元々宿題っぽいから、スレチだし。

9:デフォルトの名無しさん
12/09/09 22:05:26.60


10:デフォルトの名無しさん
12/09/09 23:02:27.37
今からでも遅くないマルチしとけ。
スレリンク(tech板)

11: ◆5bhYRM1Rdk
12/09/10 01:03:07.35
>>8 すれ違いではないと思うんですが。
あちらは問題を丸投げするスレですが、こっちのスレはC言語ならなんでも聞いていい
わけですよね。だから最後に説明をといってるんですが。
書いたコードなんですが、コンパイルは通るのですが出力されません。
ソース
URLリンク(ideone.com)

12:デフォルトの名無しさん
12/09/10 01:31:10.99
まずは質問する前にGNUスタイルの出来損ないみたいな書き方を直して欲しい

13:デフォルトの名無しさん
12/09/10 01:45:19.08
num[k]とnum[i]の数値の交換をするためにビット演算を使ったら、なぜか上手いこと動かない。
どこに原因が有るのか?

int i,j,k,temp;
int *num;
/*numの値の取得と幾つかの処理*/
num[k] ^= num[i];
num[i] ^= num[k];
num[k] ^= num[i];
この部分が
temp=num[k];
num[k]=num[i];
num[i]=temp;
だと普通に動く。

環境は
OS:Linux
コンパイラ:gcc 4.7

14: ◆QZaw55cn4c
12/09/10 01:55:06.23
>>13
URLリンク(codepad.org)
URLリンク(codepad.org)

しかし
URLリンク(codepad.org)

k == i のときにうまくいっていないんじゃない?

15:デフォルトの名無しさん
12/09/10 02:08:33.19
>>14
k == i になる可能性を考えていなかった。

if(num[k]^num[i])
{
num[i]^=num[k];
num[k]^=num[i];
num[i]^=num[k];
}
こうしたら上手いこと動いた。

16:デフォルトの名無しさん
12/09/10 02:29:30.82
printfのメッセージを外部ファイル化したいのですが、タブや改行などの書式解釈が上手くいきません。
自前で\nを0x0aなどに置換しないとダメなのでしょうか?

--formatText.txt--
\\t[\t]\\t[\t]%%d[%d]\\n\n(ここでEOF)
--main.c--
#include <stdio.h>
int main()
{
 FILE *fp;
 char szBuf[256];
 if(NULL == (fp = fopen("formatText.txt", "r")) ){
  printf("open error\n");
  return -1;
 }
 printf("希望");
 strcpy(szBuf, "\\t[\t]\\t[\t]%%d[%d]\\n\n");
 printf("<<<");
  printf(szBuf, 999);
 printf(">>>\n");
 printf("現実");
 fgets(szBuf, 256, fp);
 printf("<<<");
  printf(szBuf, 999);
 printf(">>>\n");
 return 0;
}
--実行結果--
希望<<<\t[ ]\t[ ]%d[999]\n
>>>
現実<<<\\t[\t]\\t[\t]%d[999]\\n\n>>>

17:デフォルトの名無しさん
12/09/10 02:30:04.48
質問者です
URLリンク(detail.chiebukuro.yahoo.co.jp)
どなたか教えてください。

18: ◆QZaw55cn4c
12/09/10 02:38:42.78
>>16
printf() の実行時にはあくまでも書式指定のうち % がからむものしか解釈しない。
\nとか\\ とかは、コンパイル時に解釈されるものだ。

自前で置換するしかないでしょうね。それか、自前で \x を展開するルーチンを書くか。

19:デフォルトの名無しさん
12/09/10 03:13:02.52
>>16
printfのメッセージと引数は蜜結合しているので、分離することは良くない。
クラッシュするプログラムが簡単に出来あがるので、設計をやりなおすべき。

Qzとかいうクズのいう事は信用しないように。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch