C♯相談室 Part15

このエントリーをはてなブックマークに追加
>>567
俺もそう思う。
俺はどうでもいい
そうは思わないってことは注意する必要はないってことか、そうか
あの〜、突然ですが、VSTi作ってるひといませんか?
.NETでやる作業ではないな
574557:04/06/01 08:40
>561
 ありがとう。いやー、よくわかりました。メチャすっきりしました。
 
 Form1 aForm = new Form1();
Application.Run(aForm);
  と書き換えると
Form1の中で aForm.close()なんて書き方をしちゃいけない(できない)わけですね。

>5xx
Application.Exit();
ではなんかマズイようです。Main()の終了までトレースできますが、
終了後、エディターに戻ってきません。
 
 Applicationはこのシステムの常駐インスタンスなんですかねー。
 Form1というクラスでグローバルのインスタンスを直接呼び出すのはよくないかも?
>>574
相変わらず頓珍漢だなオイ。

>Form1 aForm = new Form1();
>Application.Run(aForm);
> と書き換えると
>Form1の中で aForm.close()なんて書き方をしちゃいけない(できない)わけですね。

クラスとインスタンスの違いを理解してないのがバレバレ。

>Applicationはこのシステムの常駐インスタンスなんですかねー。
>Form1というクラスでグローバルのインスタンスを直接呼び出すのはよくないかも?

ApplicationはWindowsメッセージを処理するための静的(=static)なメソッドなどを集めたクラス。インスタンスなんか無い。
C#としてグローバルな変数もオブジェクトも存在しない。確かにstaticはそれに近い働きもあるが。
576554:04/06/01 10:08
クラスが型でインスタンスが実体。
Applicationは実体ではないだろうか?
 なぜなら実体のないものは実行でけない。Applicationは実行できる。
もしApplicationが継承できたり、インスタンスを作れるとすれば
それはクラスでもある。
 では何なのだ。結論としては、今ちょっとわからない。

>>576
Applicationはクラスである。
しかし、publicなコンストラクタがない=インスタンスを作れないクラスである。
ちなみに継承もsealedで禁止されている(重要ではないが)。

さて、staticという概念がC#に存在する(別にC#に限ったことではないが)。
通常のメソッドやプロパティはクラスのインスタンスの中に存在するが、
staticなメソッドやプロパティはクラスそのものに存在する。
だからインスタンスを一つも作らなくとも扱えるし、逆にインスタンスを幾つ作っても一つしか扱えない。

プログラムのエントリポイントとなるMainメソッドはその典型だ。
プログラムを起動する際、初め「オブジェクトインスタンスは存在しない」。
オブジェクトが存在しないのにMainメソッドが呼び出せるのは、
Mainメソッドはstaticで定義されているためである。
あー、
>  しかし、publicなコンストラクタがない=インスタンスを作れないクラスである。
これはなんか激しく誤解を招く表現だった。というか間違ってる表現だ。
この部分は無し。
579たすけて!!!:04/06/01 10:55
誰か問題といてくれますか??今なんですけど。
テスト中でせっぱつまってます
580デフォルトの名無しさん:04/06/01 11:01
>>579
大学か?
おまえの所属する機関名を晒して、
とりあえず問題をうpしろ。
最近は学校でC#の演習なんてのもあるのか。
582デフォルトの名無しさん:04/06/01 11:09
いい時代になったな。大学でC#か。でもいろんな言語をまわりまわってからC#の方が、よりありがたみがわかっていいと思うんだけどなぁ。
583たすけて!!!:04/06/01 11:12
大学なんですけど、どうやってここに問題貼ればいいですか??何もわからなくてすいません。。。
584たすけて!!!:04/06/01 11:13
問題

1. 整数型配列 data 内の, data[0] から data[n-1] までの総和を返す関数 int sum(int data[], int n) を作れ.

2. 整数型配列 data 内の data[0] から data[n-1] までの値の中で,最大の値を返す関数 int max(int data[], int n) を作れ.

3. 整数型配列 data 内の data[0] から data[n-1] までの中で,2番目に大きな値をもつ要素の添字を返す関数 int secondBiggestIndex(int data[], int n) を作れ.

ただし,同じ値の要素が複数個ある場合には,添字の順序で早い方の要素の値がより大きいと見なす.このことにより,2番目の大きい要素,というものが一意的に定まる.次の具体例を参照のこと(2番目に大きいと見なされる要素を赤くしている).
{1, 2, 3, 2, 3, 3}   (三つある3は 3 > 3 > 3 と見なされる)
{1, 3, 2, 1, 2, 1}   (二つある2は 2 > 2 と見なされる)

そして,作った関数を用いて次の計算をして,その結果を求めよ.
これです。。。
585たすけて!!!:04/06/01 11:14
続きです。

#include <stdio.h>
#include <stdlib.h>
#define N 1000

main()
{
int i, s, m, sbi;

int data[N];
srand(1);
for (i = 0; i < N; i++) {
data[i] = rand() % 1000;
}
s = sum(data, N);
m = max(data, N);
sbi = secondBiggestIndex(data, N);
printf("%d %d %d\n", s, m, sbi);
}

答案は,課題提出システムにある 小テスト へメッセージとして提出.
答案には,関数定義と計算結果とを書くこと.
Cじゃねえかドアホ
587デフォルトの名無しさん:04/06/01 11:17
ここはC#相談室だとわかってやっているのか?
それは C だろ。
588デフォルトの名無しさん:04/06/01 11:18
つか他力本願って好きじゃない。まぁやってやれない事は無いが・・・。
あとどれぐらいの時間だい?
スレ違いもさることながら、
その問題のどこがわからないのかがわからない。
590デフォルトの名無しさん:04/06/01 11:21
int sum(int data[], int n)
{
  int i;
  int sum = 0;
  for(i=0; i<n; i++) {
    sum += data[i];
  }
return (sum);
}

とりあえずsum関数。
591デフォルトの名無しさん:04/06/01 11:22
楽勝だな。
592デフォルトの名無しさん:04/06/01 11:23
脳内で解けるな。
593たすけて!!!:04/06/01 11:24
すいません。わかってなくて、、、。
プログラムの作り方自体がわからないです。
11:40分までなんですが、、。
壮大なネタだな。w
595デフォルトの名無しさん:04/06/01 11:27
max関数はこんな感じでいいか?

int max(int data[], int n)
{
  int i;
  int max = 0;
  for(i=0; i<n; i++) {
   if(max < data[i]) {
     max = data[i];
   }
  }
  return (max);
}
596デフォルトの名無しさん:04/06/01 11:28
>>593
コンパイルの仕方がわからないのか?
それともC言語がわからないのか?

なんなんだおまえは?
597デフォルトの名無しさん:04/06/01 11:29
さっきから関数を作っているのは無駄なのかそうでないのか、どっちなんだ?
598たすけて!!!:04/06/01 11:29
c言語がわからない。。です。
System.Math使って答えてあげようか?
600たすけて!!!:04/06/01 11:34
590,595ありがとうございます。
大丈夫だと思います。
               _, ‐ ' ゙ ゙̄ヽ,
  。 ゚,        , '゙          )
    。     ,ノ!,'         ◎/
  ゚ ゚,,.. --─- ノ゙!,/            ,'                  _
  て   ゙̄'i;  ノ゙!,!゙         ゙i, ノ               ∋oノハヽo∈_,.   ' ‐ .,_
  てて 。 ゙'゙ ,!V         ,゙゙ :,   。            ( ´・`) ^~         ゙)
 !.  ,゙      !!.,i         ノ゙,  .'.,   。            )⌒ヾ_.       ,.. ‐'゙
   .|      ! !_!_     ,'゙  i.,_ ゙,              .,_ノ .^フb'-'=y-‐ ' ゙
 i i |.       ! .!_!    ,゙   ゜ ゙!i,'              !゙k,\(
   .!.       i .i'i   ,゙                   ,べ,ヘへべ,_
 i  .i.      ゙, ',   !       。            Y(   〉 ヾ\
  ! i ',      '!,',   !,        。           〉 ヘ       ゞ\
 ヘ  ' ,      ' ,   ',                   (     ゝ Y   〉
    ヘ \.      \  ' ,        。゜        .ゝ 〉       ゞへ
 \ へ   \.       \,. ゙' ,      。 ゜。 。 ゜    「゙Y   く /   へ入
  へ  \ \        ゙ ' ‐゙ '_‐:,_   ゚)\ノヽ  _,, 〆、 ゝ゜ 。゚ヘ く  ヘ 〉、
     へ    ' .,          '! !  ゚ノ)\)\λ  \\\))\ル))\「    〉入
          へ   ' , へ ノ(ノ( '.,_' ノ )\λ )\ ) ) .) ) )) \∠~く  へ べ\
602デフォルトの名無しさん:04/06/01 11:39
int secondBiggestIndex(int data[], int n)
{
  int i=0;
  int sbi = 0;
  int sec = 0;
  int max = max(data, n);
sec = max;
  do {
   
   if(max > data[i] && data[i] > sec) {
     sec = data[i];
     sbi = i;
   }

   i++;
  } while(i<n);
  return (max);
}
それほどまで分からない状態で、しかもC#との区別もつかないで、
テストに合格して人に認められるなんてうらやましい。
何しに学校はいったのか知らないけど、ずいぶん得な人生だな。
604デフォルトの名無しさん:04/06/01 11:40
ちょっとギリギリだのぉ。
間に合うか。

>>585のプログラムの下に、
今書いた3つの関数を貼り付けろ。

んで、

>>585のmain()の前の行に

int sum(int data[], int n);
int max(int data[], int n);
int secondBiggestIndex(int data[], int n);

を追加な。で、コンパイル&実行。
605たすけて!!!:04/06/01 11:42
604本当にありがとうございます。
606デフォルトの名無しさん:04/06/01 11:42
あ、間違えたw
index値の優先度があったんだ。考慮してねぇや・・・。













ま、いいか。どうせネタだろうし。
607デフォルトの名無しさん:04/06/01 11:45
これがネタじゃなかったら、たすけて君をどうやって苛めてやろうか。
&nbsp失敗したとことか、そうやって書くものだと思いこんでコピペ
近年まれに見る盛り上がりだったな。
610デフォルトの名無しさん:04/06/01 11:51
たすけて君さぁ、助けてやったんだ。
今回のテストの準備不足に対する反省文と感謝の気持ちを
400字にまとめて貼り付けろや。

それから、さっきの問題に追加で、
4.中間値を返す関数int mean(int data[], int n) を作成せよ。
これ宿題な。やっとけよ。おまえこの程度の問題がさっぱりじゃ駄目だ。
就職で絶対苦労するタイプだ。現4年、大手IT企業内定のオレが言うんだから間違いない。
611デフォルトの名無しさん:04/06/01 11:52
ネタでも楽しめたよ。さて飯でも食いに行くか。
なんか凄い盛り上がっていたみたいだね。
613デフォルトの名無しさん:04/06/01 12:48
>559
> #define P_h80 0x20
>なら定数にしてやればいいよな。

では 
#define BIT(n) (1<<n)
はC#ではどうします?
そのくらいなら開いてやれ。
それなりに複雑なら関数作れ。
むしろCの逐語訳でC#のコードを書くな。
615デフォルトの名無しさん:04/06/01 13:21
Cしか受け付けない環境ってのはありますから、
CをC#の便利な環境ででシュミレーションするのは意味があるんです。
 実際今まではVBでシュミレーションして、うまく行ったら、Cに
書き換えて、マイコンに移す。なんて作業をやってましたから。
 でもやっぱり、関数にするしか方法ないですか?
なんのためにMC++あると思ってんだ
617デフォルトの名無しさん
> 大手IT企業内定のオレ
( ´,_ゝ`)プッ