C/C++の宿題片付けます 143代目at TECH
C/C++の宿題片付けます 143代目 - 暇つぶし2ch50:デフォルトの名無しさん
10/11/17 21:50:41
>>48
参考までに
URLリンク(nojiriko.asia)

51:デフォルトの名無しさん
10/11/17 22:03:28
全スレ999です。
15パズルをランダムに状態を遷移させて完成にまで持って行きたいのですが
15パズルには考えられる状態数が多すぎるため10000回の遷移では完成させることができません
乱数を用いて、比較的すぐにパズルを完成させるためにはどのようにすれば良いですか?


52:デフォルトの名無しさん
10/11/17 22:06:01
完全ランダムを辞めて戦略を考えてやればいいじゃないの

53:デフォルトの名無しさん
10/11/17 22:08:29
>>49
課題として記述する関数だと思います;

>>50
ありがとうございます。
でもよくわからない…orz

54:51
10/11/17 22:14:45
>>52
探索ではなく、乱数を使った戦略は何がありますか?

55:デフォルトの名無しさん
10/11/17 22:15:55
なんで乱数にこだわるの

56:デフォルトの名無しさん
10/11/17 22:22:11
>>54
左上が正しい位置に来たら、そのピースだけは動かさないようにする。
更にその周辺のピースが正しい位置に来たら、そのピースは動かさないようにする。
みたいに動かさなくてもすむピースを固定していったら?

57:デフォルトの名無しさん
10/11/17 22:31:04
>>53
float ave(int a,int b,int c)の間違いじゃない?

58:デフォルトの名無しさん
10/11/17 22:36:54
>>56
横からですまんが
それで解けると思わないんだが

59:デフォルトの名無しさん
10/11/17 22:40:40
もしかして遺伝的アルゴリズムとかの系統を使う系?

60:デフォルトの名無しさん
10/11/17 22:44:50
>>29
とりあえず大雑把に。入力値のチェックはしていない
問題1:

#include<stdio.h>
int main()
{
int i;
scanf("%d",&i);
puts((i%3)?"3 no baisu dehanai":"3 no baisu");
return 0;
}


61:デフォルトの名無しさん
10/11/17 22:46:31
>>29
問題2:

#include<stdio.h>
float ave(int a,int b)
{
return (float)a/b;
}

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

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

printf("%f\n",ave(a+b+c,3));
return 0;
}

62:デフォルトの名無しさん
10/11/17 22:48:05
>>29
問題3:

#include<stdio.h>
char conv(char c)
{
return ((c>='a')&&(c<='z'))?(c-'a'+'A'):c;
}
int main()
{
char s[256];
int i;

scanf("%s",s);
for(i=0;'\0'!=s[i];i++)
printf("%c",conv(s[i]));
printf("\n");
return 0;
}

63:47
10/11/17 22:51:36
>>10
>>47 は話にならない事が飯食ってたら判ったので修正、何回目のアップだろう...orz

URLリンク(codepad.org)

これで最後にしたいなぁ....

64:デフォルトの名無しさん
10/11/17 23:00:19
>>57
多分、2項の平均値を得る関数を用いて3項の平均値を取るって所が肝なんじゃね?
ave( ave( a, b ), c );
だと重みが違っちゃうから駄目なんだろうなぁ、どうするんだろ?

65:デフォルトの名無しさん
10/11/17 23:08:23
>>64
(ave(a,b)+ave(b,c)+ave(c,a))/3.0

こうか?w

66:デフォルトの名無しさん
10/11/17 23:11:32
安部

67:デフォルトの名無しさん
10/11/17 23:18:26
麻里亞

68:デフォルトの名無しさん
10/11/17 23:47:39
こうだろ ave( ave( a, b ) * 2, c );

69:デフォルトの名無しさん
10/11/17 23:48:02
>>65
こんな式でもOK
ave(ave(a, b) * 2, c)

70:デフォルトの名無しさん
10/11/17 23:52:55
>>68-69
やめてやれよw

71:デフォルトの名無しさん
10/11/17 23:57:34
>>64
難しい式だなー 俺なら直感的にこう書くわ
(ave(a,a)+ave(b,b)+ave(c,c))/3.0

72:デフォルトの名無しさん
10/11/17 23:59:18
a=1,b=2,c=1.5の時のaveは1.5になるが、>>68>>69では2.25になってしまう

73:デフォルトの名無しさん
10/11/18 00:07:51
>>72
おっしゃる通りなので訂正。
((ave(a, b) * 2 + c) / 3.0

74:デフォルトの名無しさん
10/11/18 00:30:10
誰か宿題の回答書いてやれよ


75:デフォルトの名無しさん
10/11/18 00:54:24
>>29
 ave(a, b) = (a+b)/2
 ave(b, c) = (b+c)/2
+ ave(c, a) = (c+a)/2
----------------------
ave(a, b)+ave(b, c)+ave(c, a) = a+b+c

ave(a, b, c) = (a+b+c)/3 = {ave(a, b)+ave(b, c)+ave(c, a)}/3
これでどうよ

>>54
乱数だったら完全に運じゃん?

76:デフォルトの名無しさん
10/11/18 01:52:38
3で割ったら負けかなと思ってる

77:デフォルトの名無しさん
10/11/18 02:07:13
スカラー量を2等分しかできない道具を駆使して、スカラー量を3等分することって
可能なんだろうか? 昔いろいろ考えたけど、いい方法が思い浮かばなかったわ

78:デフォルトの名無しさん
10/11/18 02:22:49
>>77
1/4+1/16+1/64+1/256+・・・

Σ(1/4^n)=1/3

79:デフォルトの名無しさん
10/11/18 02:26:48
ほう・・・

80:デフォルトの名無しさん
10/11/18 03:20:38
>>58
56とは別人だが、固定箇所を限定すればいけんじゃね?
↓こんな感じで
■□□□ ■■□□ ■■□□ ■■□□ ■■■■ ■■■■ ■■■■ ■■■■ ■■■■ ■■■■
□□□□ □□□□ ■□□□ ■■□□ □□□□ ■□□□ ■■■■ ■■■■ ■■■■ ■■■■
□□□□ □□□□ □□□□ □□□□ □□□□ ■□□□ □□□□ ■□□□ ■■□□ ■■□□
□□□□ □□□□ □□□□ □□□□ □□□□ ■□□□ □□□□ ■□□□ □□□□ ■■□□

81:デフォルトの名無しさん
10/11/18 03:33:26
なるほど、それならできるかも

82:デフォルトの名無しさん
10/11/18 04:13:11
>>80
それって8パズルでも可能?

83:デフォルトの名無しさん
10/11/18 07:52:13
ポーカーゲームを作るプログラムの課題を教えてください。
[1] プログラムまとめ
[2] 課題1のストレート、フラッシュ、フルハウスをヒントを使って判定する関数を作る。

/* ヒント: この関数を使うと、 判定が簡単かも */
void distrib(struct card h[], int dist[]){
int i;
for(i = 0; i < 14; i++){
dist[i] = 0;}
for(i = 0; i < 5; i++){
dist[h[i].pips]++;}}

int is_straight(struct card h[]){
/* 課題1 */
return 0;}

int is_flush(struct card h[]){
/* 課題1 */}

int is_fullhouse(struct card h[]){
/* 課題1 */
return 0;}

[3] 環境
 [3.1] Mac
 [3.2] Xcode
 [3.3] C
[4] 期限: 2010年11月22日まで
よろしくお願いします。

84:デフォルトの名無しさん
10/11/18 07:55:37
83に付け足します。
card h[] は手札のカード
h[].pips は手札のカードの番号
h[].suit は手札のカードのマーク
のことです。

85:デフォルトの名無しさん
10/11/18 08:11:05
ジョーカーは0?

86:デフォルトの名無しさん
10/11/18 08:50:38
>85
カードは全部で52枚なので、ジョーカーは無いものと考えているようです。

87:デフォルトの名無しさん
10/11/18 10:13:18
dist[]のサイズが14だからジョーカーの分もあるのかと思ったら
ただ添え字と数字あわせただけか

88:デフォルトの名無しさん
10/11/18 12:57:24
>>83
書いてみた、ゲームの仕様が判らないので手役の判定だけね
ランダムに10000回手札を作ってその手役を判定する
出力としては、4カード以上の手役が出来たら手札を表示
最後に出来た役の総数を出力
手役表示の優先順位は誤っているかも知れん、ロイヤルストレートって出現頻度が低いんだなぁ

URLリンク(ideone.com)

89:デフォルトの名無しさん
10/11/18 12:57:37
>>60>>61>>62
ありがとうございました!
お礼が遅れてすみません

90:デフォルトの名無しさん
10/11/18 12:58:48
[1] 授業単元:画像処理
[2] 問題文(含コード&リンク):
赤(0~255)、緑(0~255)、青(0~255)のそれぞれの濃淡で
描かれた256色ビットマップ形式の3つの画像を読み込み、
それぞれの色を重ね合わせて一つの画像にする。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2010 Express
 [3.3] 言語: C/C++
[4] 期限: 2010年11月21日まで
[5] その他の制限:
↓これに近い感じでお願いします。
URLリンク(codepad.org)



91:デフォルトの名無しさん
10/11/18 13:11:31
codepadが開けない

92:デフォルトの名無しさん
10/11/18 13:23:17
>>83
チェックしてないけど
int is_straight(struct card h[]) {
int i, j, dist[14];
distrib(h, dist);
for(i = 1; dist[i] == 0; i++);
if(i == 1) {
for(j = 10; j <= 13; j++) if(dist[j] != 1) break;
if(j > 13) return 1; }
for(j = 0; j < 5; j++) if(dist[i + j] != 1) return 0;
reutrn 1; }

int is_flush(struct card h[]) {
int i;
for(i = 1; i < 5; i++) if(h[0].suit != h[i].suit) return 0;
return 1; }

int is_fullhouse(struct card h[]) {
int i, dist[14];
distrib(h, dist);
for(i = 1; i <= 13; i++) if(dist[i] == 1 || dist[i] == 4) return 0;
return 1;
}

93:デフォルトの名無しさん
10/11/18 13:32:49
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):

関数int yokin(int yen, double rishi, int year)を定義しなさい。
この関数はyen円を年利rishiの定期預金にyear年預けた後に戻ってくる金額を返す関数である。
引数はすべて0より大きいと仮定してよい。
rishiは,5%の場合には0.05となる。
利子は端数(小数点以下の値)があったとしても切り捨てられる。
端数の切り捨ては,毎年行われる。 main関数は次の処理をしなさい。
入力として,預け入れる金額を表す整数,利子を表す実数(0.0より大きく, 1.0より小さい),年数を受け付ける。
int yokin(int yen, double rishi, int year)を利用して,預け入れ後に受け取れる金額を出力せよ。

入力例1: 10000 0.05 3
入力例1に対する出力:11576
入力例2: 10000 0.05 5
入力例2に対する出力:12761
入力例3: 10000 0.035 10
入力例3に対する出力:14101

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C/C++
[4] 期限: できればはやめに
[5] その他の制限:
とくになしです

よろしくお願いします。

94:デフォルトの名無しさん
10/11/18 13:47:22
>>93

#include <stdio.h>

int yokin(int yen, double rishi, int year)
{
  for(; 0<year; year--, yen+=yen*rishi);
  return yen;
}

int main(void) {
  int yen; double rishi; int year;
  int counter=1;
START:
  printf("入力例%d: ", counter);
  scanf("%d %lf %d", ¥, &rishi, &year);
  printf("入力例%dに対する出力:%d\n", counter, yokin(yen, rishi, year));
  goto START;
  return 0;
}

95:デフォルトの名無しさん
10/11/18 13:48:31
>>93
カウンターのインクリメント忘れ。

#include <stdio.h>

int yokin(int yen, double rishi, int year)
{
  for(; 0<year; year--, yen+=yen*rishi);
  return yen;
}

int main(void) {
  int yen; double rishi; int year;
  int counter=1;
START:
  printf("入力例%d: ", counter);
  scanf("%d %lf %d", ¥, &rishi, &year);
  printf("入力例%dに対する出力:%d\n", counter++, yokin(yen, rishi, year));
  goto START;
  return 0;
}

96:デフォルトの名無しさん
10/11/18 13:49:48
yokin yen rishi と来て、最後が year かよ

97:デフォルトの名無しさん
10/11/18 13:56:55
yen rishi と来て、最後が year かよ

98:デフォルトの名無しさん
10/11/18 13:57:26
いやあそれほどでも

99:デフォルトの名無しさん
10/11/18 14:08:18
>>97
関数名が見えない目の不自由な人?

100:デフォルトの名無しさん
10/11/18 14:21:24
誰かパステルカラーの宿題をお願いします。

101:デフォルトの名無しさん
10/11/18 16:03:37
>>82
8パズル(右下が空きの場合)はこのように固定すればいい(一例)。たぶんな。
■□□ ■■■ ■■■ □□■
□□□ □□□ ■□□ □□□
□□□ □□□ ■□□ ■□□
  (a)     (b)    (c)     (d)

ただし、(a)とした状況で(d)を適用は不可能(d→aも同様)。下のようになっちゃうからね。
固定の仕方(aとするかdとするかなど)により、収束の早さが変わると思うが、どういう固定の仕方がいいのかはさっぱりわからん。
■□■
□□□
■□□

あと、おそらくだが、下の場合のように遷移可能な場所が1つであるような固定の仕方は駄目だと思う。
たとえば、ブロックの座標を(行,列)で表すとして、(1,2)のブロックは(2,2)だけにしか遷移できない、のように。
たぶん、こういった"遷移可能な場所が1つである部分"がないならどんな固定の仕方でも大丈夫だと思う。
 1 2 3
1■□■
2□□□
3□□□


102:デフォルトの名無しさん
10/11/18 16:14:41
お前らパズル引っ張りすぎ
飽きた

103:デフォルトの名無しさん
10/11/18 16:16:59
ポーカーは面白かったな

104:デフォルトの名無しさん
10/11/18 16:29:36
>>102
ごめん、引っ張ってんの俺だわw
たぶん最後のレス。

>>101に間違いあり。
一番下のどんな固定の仕方でも大丈夫と書いたけど、これ間違い。
(e)を遷移させていくと(f)になるんだが、この時点で固定すると(e)に戻せなくなる。
123 123
456 754
78  68
 (e)  (f)

まぁ、>>101の(a)→(b)→(c)と固定していくのが無難だと思われ。

105:デフォルトの名無しさん
10/11/18 17:13:32
>>88>>92
ありがとうございました!
助かりました^^

106:デフォルトの名無しさん
10/11/18 17:27:10
>>90
コレって合成先のビットマップも256色なの?
なんかパレット数が妙なことになってるけど
それはなかったことにして24bitか32bitビットマップとしていいのか?

107:デフォルトの名無しさん
10/11/18 18:08:49
>>100
>>1

108:デフォルトの名無しさん
10/11/18 18:13:12
>>107
>>109

109:デフォルトの名無しさん
10/11/18 18:21:57
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):3次元上に3点をランダム発生、半径を指定し、その3点が球面上に乗る球の中心を求めるプログラムを作成せよ。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:無期限
[5] その他の制限:特になし
球の中心の求め方の参考 URLリンク(oshiete.goo.ne.jp)
よろしくおねがいします。


110:デフォルトの名無しさん
10/11/18 19:11:48
>>109
二次方程式の解き方を教えてください

111:デフォルトの名無しさん
10/11/18 20:02:57
これ系→ >>101
取りあえず完全乱数版を作ってみた。
これから >>101 方式作って比べてみる。

112:111
10/11/18 20:03:39
URL忘れてた
URLリンク(codepad.org)


113:デフォルトの名無しさん
10/11/18 20:17:58
収束速くなったかな?
URLリンク(codepad.org)

114:デフォルトの名無しさん
10/11/18 20:47:32
ついでに >>80
URLリンク(codepad.org)

115:デフォルトの名無しさん
10/11/18 21:05:10
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):名前、学年、学科、番号を標準入力から入力し、
サブルーチン内で表示するプログラムを作成せよ。(構造体を使用しないこと。)
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:11/19
[5] その他の制限:特になし

連投しますが、よろしくお願いします。


116:デフォルトの名無しさん
10/11/18 21:09:36
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):名前、学年、学科、番号を標準入力から入力し、
サブルーチン内で表示するプログラムを構造体を用いて作成せよ。ただし、
構造体のメンバに値を代入する際には変数実体を操作する。
すなわちドット演算子を用いること。
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:11/19
[5] その他の制限:特になし

連投しますが、よろしくお願いします。

117:デフォルトの名無しさん
10/11/18 21:11:24
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):>>116において、構造体のメンバに値を
代入する際にポインタを用いて代入するプログラムを作成せよ。
すなわちアロー演算子を用いること

 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:11/19
[5] その他の制限:特になし


118:デフォルトの名無しさん
10/11/18 21:14:54
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):学年、学科、番号、を表示する
プログラムを作成せよ。ただし、構造体を使用し、構造体のメンバとして
構造体を含むようにすること。

 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:11/19
[5] その他の制限:特になし


119:デフォルトの名無しさん
10/11/18 21:18:24
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):メンバとしてchar型変数chとint型変数をi、
double型変数dを持つ共用体を用意する。
iに16進数値を代入した後ch,i,dそれぞれを表示する
プログラムを作成せよ。なお、表示する際に、全ての変数を%xで表示すること。

 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:Visual Studio 2005
 [3.3] 言語:C++
[4] 期限:11/19
[5] その他の制限:特になし

以上よろしくお願いします。

120:デフォルトの名無しさん
10/11/18 21:33:43
>>115~
なんかすごいな...
やり方教えたほうがいいのかな...

121:デフォルトの名無しさん
10/11/18 22:25:25
>>116 と >>117 なんて A[i].B と (A+i)->B の違いだけだしなぁ
C言語を覚えたての奴が独習として回答するんじゃないのか?

122:デフォルトの名無しさん
10/11/18 22:57:20
[1] 授業単元:プログラミング
[2] 問題文
コンストラクタでrow,columnを指定して、動的に確保
デストラクタを解放
これで足し算メソット add(matrix Y)を作ってください
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2010/11/20
[5] その他の制限:あまり難しくしすぎないでください。
あと、出力→coutで、入力はcinでお願いします。


123:デフォルトの名無しさん
10/11/18 23:03:52
>>122
問題文を日本語で頼む

124:デフォルトの名無しさん
10/11/18 23:36:13
>>123
お前日本語読めないの?

125:デフォルトの名無しさん
10/11/18 23:41:33
URLリンク(news.www.infoseek.co.jp)

126:デフォルトの名無しさん
10/11/18 23:45:14
あずにゃん

127:デフォルトの名無しさん
10/11/18 23:48:22
いまや低脳日本人だらけだからね
高脳なら低脳の意味不明な文章でも問題なく理解できるが、でも低脳は不可能
低脳は高脳が低脳にあわせて解りやすく言うことしか理解できない
ついでに、低脳同士のコミュニケーションは不可能


128:デフォルトの名無しさん
10/11/18 23:50:55
確かに、高脳なら普通に理解できるものを低脳は理解できない、しようとしない。

129:デフォルトの名無しさん
10/11/19 00:00:09
>>122
望んでるのはこんなんか?入力部分はコメントアウトしてある

URLリンク(codepad.org)

130:122
10/11/19 00:55:47
>>129
出来たら、coutの部分を日本語でいれていただきたいんですが…
あと、(void)って()の中のvoidは必要ですか?

131:デフォルトの名無しさん
10/11/19 01:39:08
>>130
このようなことまで注文するのは
回答者(2ch?)の著作権を尊重しての
ことなのでしょうね。

132:デフォルトの名無しさん
10/11/19 01:40:51
ISO、ANSI準拠の標準スタイルではC++ではmain関数への引数が無い場合はvoidが無くてもおk
int main() { } でどうぞ。return 0;も省略可。

133:デフォルトの名無しさん
10/11/19 02:07:32
>>130
日本語に直すぐらいは自分でやれ、エディターを使った事が無いなら別だけど

引数の void は引数が無いことを明示的に表現しているだけなので省略しても良い
しかし、明示的に表示する事によるデメリットは何も無いので、俺は必ず付ける

134:デフォルトの名無しさん
10/11/19 14:24:49
>>14
分かる方いましたらよろしくお願いします。

135:デフォルトの名無しさん
10/11/19 15:41:57


136:デフォルトの名無しさん
10/11/19 16:27:09
>>129
newしたものを初期化してほしければ
m_Mat[i] = new int[m_column]();
じゃないか?

137:デフォルトの名無しさん
10/11/19 16:33:26
>>136
() 付けないとコンストラクタは呼ばれないんだっけ?
忘れてることって多いな....

138:デフォルトの名無しさん
10/11/19 16:46:21
>>136
コンパイルエラー

139:デフォルトの名無しさん
10/11/19 16:48:06
>>136
やってみたら E2243 new で確保した配列には初期化子が使えない (C++) が出るな

#include <iostream>
class foo {
public: int x;  foo( void ) { x = 1; }
};
int main( void ) {
  foo* p; int* x; int i;
  p = new foo[10]; x = new int[10];
  for(  i = 0; i < 10; i++ )
    std::cout << p[i].x << ", " << x[i] << std::endl;
  return 0;
}
試しにこんなコードを書いてみたら、p[].x は全て1に初期化されていたけど、x[] は未初期化状態だ
int はディフォルトコンストラクタを持たないって事かな?

140:デフォルトの名無しさん
10/11/19 16:50:11
>>139
int()は単独では使えるけど、配列newには使えないだけ

141:デフォルトの名無しさん
10/11/19 16:53:11
規格のバージョンとか、独自拡張とかなのかな?
codepadとVC++2010じゃコンパイル出来た。

142:デフォルトの名無しさん
10/11/19 17:00:26
§5.3.4 New
15 A new-expression that creates an object of type T initializes that object as follows:
? If the new-initializer is omitted:
? If T is a (possibly cv-qualified) non-POD class type (or array thereof), the object is defaultinitialized
(8.5). If T is a const-qualified type, the underlying class type shall have a user-declared
default constructor.
? Otherwise, the object created has indeterminate value. If T is a const-qualified type, or a (possibly
cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of
const-qualified type, the program is ill-formed;

という事だそうです

143:デフォルトの名無しさん
10/11/19 17:15:43
>>140
それは foo に関しても同じ、 foo の配列 new ではディフォルトコンストラクタが呼ばれて x が 1 に初期化されたけど、
int は 0 に初期化されなかったので int にはディフォルトコンストラクタが用意されてないのかという話

144:デフォルトの名無しさん
10/11/19 17:17:05
>>141>>143
それはC++0xではいいが
C++ではだめ

POD class type (or array thereof) containing (directly or indirectly) a member of
const-qualified type, the program is ill-formed;

これの意味が分かれば分かるはず


145:デフォルトの名無しさん
10/11/19 17:18:02
Otherwise, the object created has indeterminate value.

ああこれも含めてな

146:デフォルトの名無しさん
10/11/19 17:37:50
英語弱いから日本語で書いてくれ


147:デフォルトの名無しさん
10/11/19 17:40:41
よし in English

148:デフォルトの名無しさん
10/11/19 18:24:28
C++03では配列newの場合非PODではデフォルトコンストラクタが呼ばれ、
PODの場合は不定値となるという事

もし new int[constant]() と書くと文法エラー(C++0xではOK)

149:デフォルトの名無しさん
10/11/19 18:32:38
>>148
じゃ >>143 は正しい解釈じゃないの?
要は plain old data にはディフォルトコンストラクタが無いことに起因してるんだから

150:デフォルトの名無しさん
10/11/19 18:44:44
デフォルトコンストラクタはある

int i() とやると iは0に初期化される

しかし配列newの場合はPOD型はデフォルトコンストラクタは呼ばれなくて
不定値になるとちゃんと書いてあるじゃん

151:デフォルトの名無しさん
10/11/19 19:04:55
PODのディフォルトコンストラクタは配列 new 時にはコールされないって解釈なら正しいのか?

152:mery
10/11/19 19:10:58
[1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
無限ループを用い、1~50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は10等分(例;1~10に4個, 11~20に3個, 21~30・・・41~50に0個)して表示せよ。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン: 不明
 [3.3] 言語:C
[4] 期限:11月21日
[5] その他の制限:1~50以外の数字が入力されたときの処理は考えなくていいそうです
よろしくお願いします!

153:デフォルトの名無しさん
10/11/19 19:15:02
>>152
その度数分布だと5等分なんじゃ?

154:デフォルトの名無しさん
10/11/19 19:44:05
>>151
規格を解釈するとそうなる

155:デフォルトの名無しさん
10/11/19 19:48:48
#include <stdio.h>
#include <stdlib.h>
double ave,var;
double heikin(double *array,int n)
{
int i;
double sum=0;
srand(10);
for(i=0;i<n;i++){
array[i] = (double)(rand())/RAND_MAX;
sum+=array[i];
printf("%lf\n",array[i]);
}
return sum;
}

156:デフォルトの名無しさん
10/11/19 19:50:46
int main(void)
{
int d=0;
double *h,r;

printf("乱数の数:");
scanf("%d",d);

h=(double*)malloc(d*sizeof(int));
r= heikin(h,d);
printf("合計:%lf",r);
return 0;
}

乱数の合計値を求めるプログラムなんですが、エラーが発生します。
どこが原因なんでしょうか?

157:デフォルトの名無しさん
10/11/19 19:54:03
>>156
sizeof(int)

158:デフォルトの名無しさん
10/11/19 19:56:05
>>157
sizeof(int)をどうすれば良いのですか?

159:デフォルトの名無しさん
10/11/19 20:12:30
double *h,r; hはdouble型のポイントで

h=(double*)malloc(d*sizeof(int)); int型のサイズで確保してどーすんだと

160:デフォルトの名無しさん
10/11/19 20:13:20
ポイントってなんだ、ポインタやん orz

161:デフォルトの名無しさん
10/11/19 20:20:25
>>156
scanf("%d",d);

scanf("%d",&d);

162:デフォルトの名無しさん
10/11/19 20:30:04
>>159-161
ありがとうございます。
初歩的なミスでした。

実を言うと、もう一つ質問があります。
この合計から「分散」を計算したいのですが、どうすれば良いですか?


163:mery
10/11/19 20:57:47
>153さん
すいません、5等分でした。
正しい問題は、
「無限ループを用い、1~50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は5等分(例;1~10に4個, 11~20に3個, 21~30・・・41~50に0個)して表示せよ。 」です。


164:デフォルトの名無しさん
10/11/19 21:23:30
>>152
#include <stdio.h>

int main(void)
{
int count[5]={0};
int i, j, x=0;
i=0;
while(1)
{
if(i>=10) break;
scanf("%d", &x);
count[(x-1)/10]++;
i++;
}
i=0;
while(1)
{
if(i>=5) break;
printf("%2d~%2d : ", i*10+1, (i+1)*10);
j=0;
while(1)
{
if(j>=count[i]) break;
printf("*");
j++;
}
printf("\n");
i++;
}
return 0;
}

165:デフォルトの名無しさん
10/11/19 21:36:07
よし、マイナスの値を入力して結果を見てみようか。

166:デフォルトの名無しさん
10/11/19 21:37:57
範囲外の値を入力したらエラーで落ちた orz

167:デフォルトの名無しさん
10/11/19 21:41:39
こういうのを勇み足といいます

168:デフォルトの名無しさん
10/11/19 21:49:20
入力された値をもとに配列の添え字を指定するのは思いついたが
範囲外の対処が甘かったか。

169:デフォルトの名無しさん
10/11/19 21:49:34
>>162の者ですが、「分散」のプログラムはこれで合ってますか?

ave=sum/n;
for(i=0;i<n;i++){
gokei+=(sum*((array[i]-heikin)*(array[i]-heikin)));
}
var=gokei/(n-1);

170:デフォルトの名無しさん
10/11/19 21:50:58
>>169
いいえ

171:デフォルトの名無しさん
10/11/19 21:56:25
>>169
どこが違うのか教えてください

172:デフォルトの名無しさん
10/11/19 22:45:54
>>169ですが、書き直しました。

ave=sum/N;
for(i=0;i<N;i++){
sum2+=((array[i]-ave)*(array[i]-ave));
}
var=sum2/(N-1);
return var;
}

これで合ってますか?間違っているのなら指摘をお願いします。

173:デフォルトの名無しさん
10/11/20 00:05:58
>>172
sum2=0;
をforの前に入れればOK

174:デフォルトの名無しさん
10/11/20 00:07:40
安部

175:デフォルトの名無しさん
10/11/20 00:09:48
分散は、
(二乗の平均) - (平均の二乗)
に等しい、という公式がありますので(URLリンク(ja.wikipedia.org)
平均を求めるときに二乗の平均もあわせて計算すると、1 pass ですみます。参考までに。

176:デフォルトの名無しさん
10/11/20 01:35:23
>>173>>175
ありがとうございます!

177:デフォルトの名無しさん
10/11/20 01:46:27
[1] 授業単元:プログラミング
[2] 問題文
URLリンク(imepita.jp)
図の左のプログラム(○つけてある方です)の30行目~32行目を消して、デストラクタを作って31行目の処理を実装して動作確認をしてください
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2010/11/22


178:デフォルトの名無しさん
10/11/20 01:51:07
>>177
読みづらい
それにSeiseki.hはどこにあるの?
面倒でもcodepadかどこかに上げてくれ

179:デフォルトの名無しさん
10/11/20 01:53:29
>>177
そのページを打ち込んだテキストファイルをアップする
それが最低限のマナーだと思うぞ


180:デフォルトの名無しさん
10/11/20 01:53:42
>>132
これって、printfはcoutにする事は不可能でしょうか

181:177
10/11/20 02:02:03
URLリンク(imepita.jp)
ごめんなさい。全体を貼ったほうがいいですね…

182:デフォルトの名無しさん
10/11/20 02:05:13
だからimepitaはやめろっつーに
それもデジカメじゃなくて携帯で撮ったろ
ボケて読めない
テキストで打ち込め

183:デフォルトの名無しさん
10/11/20 02:20:24
なんでわざわざ紙に印刷した上にデジカメで撮影した画像をアップするんだよw
もとのテキストをアップすりゃ済むことだろw

184:デフォルトの名無しさん
10/11/20 02:26:49
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):平均値:μ,分散:σ^2の分布がn個与えられているとする。
この分布が何であろうと、nの数が多きなるにつれてこの分布の合計は平均:nμ,分散:nσ^2の正規分布に近づくとされる。
要素数n個をもつx個の乱数系列を発生させるプログラムを作れ。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2010
 [3.3] 言語: C++
[4] 期限:2010年11月22日
[5] その他の制限:①キーボードから入力すること
②乱数は配列で保存すること
③#include <stdio.h>#include <stdlib.h>にしてはじめること


185:177
10/11/20 02:27:17
>>183
紙に印刷したんじゃなくて配布のプリントなんです…

186:デフォルトの名無しさん
10/11/20 02:28:16
宿題をくれているのに生意気なこと言うなよ
とっとと宿題をやれ

187:デフォルトの名無しさん
10/11/20 02:42:25
野良猫にえさを与えないで下さい

188:デフォルトの名無しさん
10/11/20 02:44:02
>>185
だから、それを一字一句間違いなく打ち込んでアップするのが出題者の最低限のマナーだ
コードを書けない馬鹿でも紙に書いてある物を間違いなく打ち込むくらいは出来るだろう

189:デフォルトの名無しさん
10/11/20 02:47:11
にゃおおおおー、にゃおーーーー

 ヾヽヽ
 (,, ・∀・)チュンチュン
  ミ_ノ
  ″″

190:デフォルトの名無しさん
10/11/20 02:48:51
>>188
>コードを書けない馬鹿でも紙に書いてある物を間違いなく打ち込むくらいは出来るだろう
これどうやるんですか?

191:デフォルトの名無しさん
10/11/20 03:14:56
まさかパソコン持ってないとか言うなよ・・・・

192:デフォルトの名無しさん
10/11/20 03:26:10
>>190
君に言うべき言葉が見つからない、ゴメン

193:デフォルトの名無しさん
10/11/20 03:30:47
いや、あるよ
>>190
君はこのスレに来る前にしなければならない事が山ほどある

194:デフォルトの名無しさん
10/11/20 03:35:42
PCなくてもネカフェ行けばいいんでないの

195:デフォルトの名無しさん
10/11/20 03:40:16
いまの学生は携帯は持っているけど、PCは持ってないの多そうだな
宿題の解答は学校のPCでダウソかな
時代は携帯中心になり、モビリティのないPCはおっさん時代の中心ねだろうな

196:デフォルトの名無しさん
10/11/20 03:45:36
だが、PCが一人1台すらない詐欺学校で
全て机上のペーパープログラミング授業だとしたらどうだろう?

197:デフォルトの名無しさん
10/11/20 03:45:56
>>177
よく分からないんだけど、これでいいの?
Seiseki.h URLリンク(codepad.org)
Seiseki.cpp URLリンク(codepad.org)
main.cpp URLリンク(codepad.org)

198:90
10/11/20 03:50:57
>>106
亀レスでごめんなさい。
256色で出力しようと思ってたのですが。
求める画像ができるならどの形式でも問題ありません。

codepad重いみたいなのでおかしいと思ったところを書き直して貼ってみます。
どなたか>>90をお願いします。


#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
FILE *fp = NULL;

int inwidth,inheight,insize;


RGBQUAD eq[256];
for(a=0; a<256; a++)
{
eq[a].rgbBlue = a;
eq[a].rgbGreen = a;
eq[a].rgbRed = a;
eq[a].rgbReserved = 0;
}



199:デフォルトの名無しさん
10/11/20 03:52:02
fopen_s(&fp, "赤rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
inwidth = bmih.biWidth;
inheight = bmih.biHeight;
insize = inwidth * inheight;
unsigned char* red;
red = new unsigned char[insize];
fread( &eq , sizeof(RGBQUAD)*256, 1 , fp );
fread(red, insize, 1, fp);
fclose(fp);

fopen_s(&fp, "緑rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
unsigned char* green;
green = new unsigned char[insize];
fread( &g , sizeof(RGBQUAD)*256, 1 , fp );
fread(green, insize, 1, fp);
fclose(fp);


200:デフォルトの名無しさん
10/11/20 03:52:44
fopen_s(&fp, "青rec00「RGB」.bmp", "rb");
if(fp==NULL)
{
printf("画像の読み込みに失敗");
exit (-1); /*処理を継続できないので終了する*/
}
fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);
unsigned char* blue;
blue = new unsigned char[insize];
fread( &eq , sizeof(RGBQUAD)*256, 1 , fp );
fread(blue, insize, 1, fp);
fclose(fp);


unsigned char* rgbrec;
rgbrec = new unsigned char[insize];
RGBQUAD rgb[256*128];
for (a=0; a<insize; a++)
{
rgb[a].rgbBlue = blue[a];
rgb[a].rgbGreen = green[a];
rgb[a].rgbRed = red[a];
rgb[a].rgbReserved = 0;

rgbrec[a] = a;
}



201:デフォルトの名無しさん
10/11/20 03:53:25

bmfh.bfType = 0x4D42;
bmfh.bfSize = 54+insize+(4*256*128);
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = 54+4*256*128;

bmih.biSize = 40;
bmih.biWidth = inwidth;
bmih.biHeight = inheight;
bmih.biPlanes = 1;
bmih.biBitCount = 8;
bmih.biCompression = 0;
bmih.biSizeImage = insize;
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 256;
bmih.biClrImportant = 0;

fopen_s(&fp, "rec「RGB」.bmp" , "wb" );
fwrite( &bmfh , sizeof(BITMAPFILEHEADER) , 1 , fp );
fwrite( &bmih , sizeof(BITMAPINFOHEADER) , 1 , fp );
fwrite( &rgb , sizeof(RGBQUAD)*256*128 , 1 , fp );
fwrite( rgbrec , 1 , insize , fp );
fclose( fp );

return 0;
}

202:デフォルトの名無しさん
10/11/20 03:54:05
長々と失礼しました。

203:デフォルトの名無しさん
10/11/20 04:25:28
>>181
君がアンカーをミスらなければもっと早く答えたんだけどね

void Matrix::disp( void )
{
    if( m_Mat ) {
        int i, j;
        for( i = 0; i < m_row; i++ ) {
            cout << "|\t";
            for( j = 0; j < m_column; j++ )
                cout << m_Mat[i][j] << "\t";
            cout << "|" << endl;
        }
    }
}
これの話だと思う、別にC++だからprintf() を使ってはいけない理由は無いと思うんだけどな


204:203
10/11/20 04:27:58
× >>181
○ >>180

そして俺がアンカーをミスるのは何故だ....

205:デフォルトの名無しさん
10/11/20 05:38:00
>>90
全部書き直したいくらいのソースだけど
一応可能な限り残して修正
てか、これ色々エラー処理入れたほうがいいんじゃないか?

吐き出しフォーマットは24bitビットマップ

URLリンク(codepad.org)

206:デフォルトの名無しさん
10/11/20 10:27:17
>>184
URLリンク(codepad.org)

C標準関数rand()の質が悪いのでもっと良いrand()を使えば
いい結果が得られると思う

207:デフォルトの名無しさん
10/11/20 10:31:37
>>184
ごめん乱数は配列に保存すると題意にあったのでarray[]に保存している
表示はしていない

URLリンク(codepad.org)

208:デフォルトの名無しさん
10/11/20 12:53:14
>>203
ごめんなさい。これを>>129のプログラムのprintfの所に代わりに入れてあげればいいんですか?


209:デフォルトの名無しさん
10/11/20 14:10:20
>>184ですが、書き間違えていました。

正しくは、

②乱数は配列で保存すること → ②乱数は「動的確保された」配列に保存すること

ごめんなさい。

210:デフォルトの名無しさん
10/11/20 14:21:25
>>209の続きです。

④乱数係数xはキーボードから入力するようにプログラムすること

を追加してください。

211:デフォルトの名無しさん
10/11/20 14:33:26
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):赤い領域と白い領域が隣り合っているところを抽出せよ。
[3] 環境
 [3.1] OS:Windows、visual studio2005
 [3.3] 言語:どちらでも可。
[4] 期限:今日か明日には完成させたいです。
[5] その他の制限:できるだけわかりやすいと嬉しいです。

とりあえず赤い領域は抽出できたのですが隣り合う白い領域を抽出するのができないです。
ラスタスキャンし、赤い画素を見つけたら4近傍を探索し、白い画素だったら抽出…という方向で組んでいるのですが
白い画素を見つけたとき、その白い画素の4近傍もまた探索しないといけないのでここでつまづいています。
よろしくお願いします。

212:デフォルトの名無しさん
10/11/20 14:36:19
>>209>>210
乱数は動的確保された配列に保存されています

乱数係数xの意味がよくわかりません
具体的に説明をお願いします
もしかしてsrand()に与える値ですか?

213:211
10/11/20 14:43:00
// (1)画素値(R,G,B)を順次取得し,変更する
// 赤色領域の4近傍を探索し、白色であった場合抽出する
for (y = 0; y < hsvImage->height; y++) {
for (x = 0; x < hsvImage->width; x++) {
cnt++;
p[0] = hsvImage->imageData[hsvImage->widthStep * y + x * 3]; //座標(x,y)のH(色相)値を取得
p[1] = hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1]; //座標(x,y)のS(彩度)値を取得
p[2] = hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2]; //座標(x,y)のV(輝度)値を取

//赤い画素を見つけたら
if(((p[0] >= THRESH_BOTTOM1) && (p[0] <= THRESH_TOP1)) || ((p[0] >= THRESH_BOTTOM2) && (p[0] <= THRESH_TOP2))){
if((p[2] >= THRESH_BOTTOM4) && (p[2] <= THRESH_TOP3)){

//// 4近傍を探索し、白色の画素があれば抽出(とりあえず左だけ)
x = x - 1;
if((p[2] >= THRESH_BOTTOM3) && (p[2] <= THRESH_TOP3)){
p[0] = cvRound(255);
p[1] = cvRound(255);
p[2] = cvRound(255);
flag=1;
}x=x+1;

214:211
10/11/20 14:44:08
}
}
if((p[0] >= THRESH_BOTTOM1 && p[0] <= THRESH_TOP1) || p[0] >= THRESH_BOTTOM2 && p[0] <= THRESH_TOP2){
if((p[2] >= THRESH_BOTTOM4) && (p[2] <= THRESH_TOP3)){
hsvImage->imageData[hsvImage->widthStep * y + x * 3] = cvRound(255);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1] = cvRound(255);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2] = cvRound(255);
}
}else if((p[0] == THRESHOLD_MAX_VALUE) && (p[1] == THRESHOLD_MAX_VALUE) && (p[2] == THRESHOLD_MAX_VALUE)){
hsvImage->imageData[hsvImage->widthStep * y + x * 3] = cvRound(100);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1] = cvRound(100);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2] = cvRound(100);

}else{
hsvImage->imageData[hsvImage->widthStep * y + x * 3] = cvRound(0);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 1] = cvRound(0);
hsvImage->imageData[hsvImage->widthStep * y + x * 3 + 2] = cvRound(0);
}
//printf("flag:%d\n",y);
if(flag==1){
y = y -1;
flag=0;
}
}
}
今のところこんな感じです。
赤い画素をH,S,V全てに255をセットし、みつけた白い画素をH,S,V全てに100をセットしています

215:デフォルトの名無しさん
10/11/20 14:44:18
>>211
サンプル画像も貼らずに質問とな?
説明の意味が分からんのだが、赤い領域と白い領域の境界を見るのなら
「白い画素の4近傍もまた探索」は必要ないのではないか?
とりあえず赤い領域と白い領域が何をさしてるのかちゃんと説明してくれ

216:デフォルトの名無しさん
10/11/20 14:52:32
>>209
>>210
奇特な >>129 がせっかく書いてくれてるのに、
理解する能力もなければ(ホントに全くないよね)、
理解する気持ちもない。
君は単位落とすべきでは?

217:211
10/11/20 14:55:50
>>215
URLリンク(www1.axfc.net)
画像用意しました。
この中からエビの部分だけを抽出したいんです。


218:デフォルトの名無しさん
10/11/20 16:08:51
jpegかよ

219:デフォルトの名無しさん
10/11/20 16:12:39
>>212

乱数係数ではなく「乱数系列」でした。

220:デフォルトの名無しさん
10/11/20 16:13:40
>>217
CDC MemDC1,MemDC2;を用意し、
MemDC1は白い色だけの色を残し、それ以外はCOLORREF=0にする。
MemDC2は赤い色だけの色を残し、それ以外はCOLORREF=0にする。
MemDC1とMemDC2のCOLORREF≠0の部分を縦横4ドットずつ広げる。
MemDC1とMemDC2のandを取る。

こんな感じでだめか?



221:デフォルトの名無しさん
10/11/20 16:15:16
>>216
>>122は私が書いたのものではないのですが…

222:デフォルトの名無しさん
10/11/20 16:17:52
>>14
URLリンク(codepad.org)

223:デフォルトの名無しさん
10/11/20 16:56:39
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):双方向リストを使って、複数行を読み込み、読み込んだ行をそのままの順に出力するプログラムを完成させなさい。
[3] 環境
 [3.1] OS: Windows7(Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc 3.4 VC 6.0
 [3.3] 言語:_C
[4] 期限:今日中
[5] その他の制限: 特になし


224:デフォルトの名無しさん
10/11/20 17:06:52
IT会社の経営者なんて、自社製品を何も持たず技術者をよその会社にぶちこんでピンはねで利益を上げてるだけだぞ?
従業員のやりがいとか成長とか全く興味がないからな。ビジネスモデルがピンはねなんだからやつらの考えることは
如何に従業員をこき使うかしか考えてない。それでしか利益を上げられないんだから。
普通会社の存在理由って、世の中に新しい価値を提供したいとかそういうことじゃん?
でもITの経営者のやることは技術者を売ってピンはねで金儲けすることだけだから。
技術者の命より金の方が優先度が高い世界だぞ?そりゃ精神病んで自殺に追い込まれるよ。

225:デフォルトの名無しさん
10/11/20 17:20:49
[1] 授業単元:集合知プログラミング
[2] 問題文(含コード&リンク):スレリンク(tech板:224番) はどこか
のスレからの誤爆である。このスレを探し、何に対するレスであるか示すプログラムを書きなさい。
[3] 環境
 [3.1] OS: Windows7(Windows/Linux/等々)
 [3.2] コンパイラ名とバージョン: gcc 3.4 VC 6.0
 [3.3] 言語:_C
[4] 期限:今日中
[5] その他の制限: 特になし

226:デフォルトの名無しさん
10/11/20 17:43:07
>>217
画像ファイルの扱いは不慣れなので、変なところがあるかもしれませんが、
取りあえずエビっぽいのが抽出できたんで。
URLリンク(www1.axfc.net)

227:デフォルトの名無しさん
10/11/20 17:46:04
>>222
すごいシンプルだな、参考にさせてもらうよ
俺もがんばって解いたが発狂しそうになった
URLリンク(codepad.org)

228:デフォルトの名無しさん
10/11/20 17:53:22
>>227
問題読んですらないけど51-98行の圧迫感にワロタw
力作おつです。

229:デフォルトの名無しさん
10/11/20 17:58:13
>>219
出掛けていて遅くなった

URLリンク(codepad.org)

これでいいのかな
ちなみにcodepadには上げてないけど、自前のもっと質の良い乱数発生
ルーチンを使ったら発生個数を上げると平均、分散ともに桁数の一致が
良くなりました

でも宿題用ならこれで十分でしょう

230:226
10/11/20 18:01:15
>>226
ごめん。↓ここがおかしいわ。
gAnd[y][x] = 0;
int xx,yy;
for (yy=((y-3)<0?0:(y-3)) ; !gAnd[y][x] && yy<((y+3)>300?300:(y+3)) ;yy++) {
for (xx=((x-3)<0?0:(x-3)) ; !gAnd[y][x] && xx<((x+3)>300?300:(x+3)) ;xx++) {
if (gW[y][x] && gR[y][x]) {
gAnd[y][x] = 1;
}
}}

正しくは、というより俺がイメージしたのは↓。
/* "3ドット広げて、W,Rともドットがあったら"って処理のつもり */
gAnd[y][x] = 0;
int xx,yy;
int flag = 0;
for (yy=((y-3)<0?0:(y-3)) ; !gAnd[y][x] && yy<((y+3)>300?300:(y+3)) ;yy++) {
for (xx=((x-3)<0?0:(x-3)) ; !gAnd[y][x] && xx<((x+3)>300?300:(x+3)) ;xx++) {
if (gW[y][x]) flag |= 1;
if (gR[y][x]) flag |= 2;
if (flag==3) gAnd[y][x] = 1;
}}

231:デフォルトの名無しさん
10/11/20 18:19:43
>>229
ありがとうございます。
ところで、このプログラムは、#include <math.h>と#include <time.h>を使わずにつくれますか?
できればなしのプログラムも欲しいんです。
何度も注文つけてしまってすいません。

232:211
10/11/20 18:21:31
>>230
ありがとうございます!
キレイに抽出できてますね…
ソースが難しいので頑張って解読してみます。

233:デフォルトの名無しさん
10/11/20 18:39:43
>>231
できるけどsinとかcosとかを自分で作らないといけないよ?
もともとあるものを自分で作るのは全く無意味だし
問題の本質ではないからこのままでいいんじゃない?
math.hとtime.hを使いたくない理由が分からないけど
もし習ってないとか言うバカげた理由なら考えを改めたほうがいいよ


234:デフォルトの名無しさん
10/11/20 18:39:46
>>232
スケルトンから変えたのはほぼ View の40~120行目あたりだけ。
ソースがみずらくてすまんが、やってることは大したことない。
 1.白と赤の部分だけを取り出す。gW , gR
 2.白と赤のORを作る。gOr
 3.白と赤を3ドット広げて、重なり部分を取り出す。gAnd
 4.gOrの島の中から,gAndが含まれる部分を抽出する。gMsk
おそらく君にとって、Fillだけがキモだと思うが、
gOr && gAnd を見つけたら gMsk を1にし、
その上下左右にgOrが続いていたら、xy座標を更新してFillを再起する。
最初の基点からジワーッとgOrをあぶりだしていく感じ。

235:デフォルトの名無しさん
10/11/20 18:40:32
>>231
あ、>>229は<time.h>はもう不要なので取り忘れました
<math.h>はlog()とsqrt()とsin()とcos()を呼び出すのに必要なので、
やるとすれば疑似的な発生法しかありません

それで作ってみます

236:211
10/11/20 18:49:05
>>234
スケルトンをまず知らないのでww
c言語でお願いすればよかったと後悔してます\(^o^)/

237:デフォルトの名無しさん
10/11/20 18:54:45
>>231
URLリンク(codepad.org)

floor()もsqort()も使えなくなったので、分散を求める事が出来ないので
発生した正規分布の乱数を表示するようにしました

238:デフォルトの名無しさん
10/11/20 19:52:14
糞スレ

239:デフォルトの名無しさん
10/11/20 20:21:00
>>237
無理なお願いを聞いて頂きありがとうございます。

240:デフォルトの名無しさん
10/11/20 21:09:33
>>205
ありがとうございます。
RGBTRIPLEなんて構造体があったのですね。

241:デフォルトの名無しさん
10/11/20 21:13:01
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク)
問題1
1から10までの整数の表示をするプログラムを、 do-while 文とを使用して作成しなさい。
< 実行例 >
1 2 3 4 5 6 7 8 9 10
問題2
10から1までの整数の表示をするプログラムを、 while 文を使用して作成しなさい。
< 実行例 > 
10 9 8 7 6 5 4 3 2 1
問題3
キーボードから 読み込ん だ整数が1~9の範囲内の場合は 繰返し、それ以外の場合は終了するプログラムを作成しなさ い。
< 実行例 >

整数: 8
範囲内です

整数: 3

範囲内です

整数: 11

範囲外です。

終了します。
  [3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11月21日
[5] その他の制限: なし
よろしくお願いします。

242:デフォルトの名無しさん
10/11/20 21:43:31
>>241
URLリンク(codepad.org)

243:デフォルトの名無しさん
10/11/20 21:45:35
>>223
スレリンク(tech板:80番)

244:デフォルトの名無しさん
10/11/20 21:46:58
>>243
おいおい問題があるスレに誘導するなよ
今運営に報告してきた所だぞ

245:デフォルトの名無しさん
10/11/20 21:55:53
>>244
報告先の URL を教えてください。
回答がありしだい、誘導を停止します。

246:デフォルトの名無しさん
10/11/20 21:57:50
>>245
その前にどうして誘導するのかその理由を聞かせてくれないか?
ここが宿題スレだろうに
誘導するのなら確固とした理由が必要だろ

247:デフォルトの名無しさん
10/11/20 22:03:49
◆QZaw55cn4c本人でしょ
いいかげん他スレにちょっかい出すのやめればいいのに
自分が立てたスレに責任が持てないなら削除依頼だしてこいよ

248:デフォルトの名無しさん
10/11/20 22:05:32
と言う事で◆QZaw55cn4cは自分のスレに書き込まれた問題のみに解答しろ
このスレから誘導すんな
このスレの意味が無くなる

249:226
10/11/20 22:19:01
あまり落とす人もいないでしょうが・・・
ちょっといじるとスタックオーバーフロー起こすので消しました。>>226
一応スタックオーバーフローの暫定対策版を↓に置いときます。
URLリンク(www1.axfc.net)

250:デフォルトの名無しさん
10/11/20 22:21:48
サーバ用途じゃないツールだったら、
思う存分落とせばいいじゃん。

251:デフォルトの名無しさん
10/11/20 22:23:10
あ、サーバ用途ってのは、それ自身が動き続けることが使命になってるプログラムのことね。
ツールってのは、コマンドとして実行させて、終了とともに結果を得るもの、ってつもり。

252:デフォルトの名無しさん
10/11/21 00:34:14
言わんとするところは伝わるような気がするが、
ツールだから落ちてもいいという根拠は何も出ていない。

253:デフォルトの名無しさん
10/11/21 02:32:40
作った本人が私的に使うツールなら分かるが、
そうでなければ、あまりにも無責任

254:デフォルトの名無しさん
10/11/21 03:09:35
ソースあるんだから文句があるなら自分で直せばいいだけなのに

255:デフォルトの名無しさん
10/11/21 09:51:24
プログラミング演習の問題で
入力した名前(アルファベット)を昇順に並び変える
sort_by_nameという関数を作りたいです。
2文字目ぐらいまで判定できればいいです。
数字の昇順ならできるのでヒントだけでもください。
URLリンク(codepad.org)

256:デフォルトの名無しさん
10/11/21 10:20:54
[1] 授業単元:情報処理概論Ⅰ
[2] 問題文(含コード&リンク):
つると亀が合わせてn匹います。足の数は合わせてmです。
nとmを入力して、つると亀がそれぞれ何匹いるのか求めるプログラムを作りなさい。
もし解がない場合は、その旨を出力するようプログラムすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: [無期限]
[5] その他の制限:if、while、for、配列、多重ループ、関数まで習いました。

よろしくお願いします。

257:デフォルトの名無しさん
10/11/21 10:30:42
>>255
strncmp

258:デフォルトの名無しさん
10/11/21 10:37:01
>>255
URLリンク(codepad.org)

259:デフォルトの名無しさん
10/11/21 11:01:00
>>256
URLリンク(codepad.org)

260:255
10/11/21 11:11:06
>>257>>258
ありがとうございました!
解決しました

261:デフォルトの名無しさん
10/11/21 14:30:29
[1] 授業単元: プログラミング
[2] 問題文: 4つの整数s,m,l,xlを小さい順に並べ替えるプログラムを作成しなさい。
      ただし、並び替えをする部分はユーザ定義関数化し、
      並び替え後の結果をmain関数で出力するようにすること。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:11月23日まで

よろしくお願いしますm(__)m



262:デフォルトの名無しさん
10/11/21 14:46:04
[1] 授業単元;プログラミング演習
[2] 問題文(含コード&リンク): ・ランダムな整数列を生成し,挿入ソート・シェルソートにより
並べ替えるプログラムを作れ
・実行時間を計測せよ

[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語:C/C++/どちらでも可
[4] 期限:11月24日
[5] その他の制限: unixのrand()とtimeコマンドを使用すること
         mainの中もお願いします。

263:デフォルトの名無しさん
10/11/21 14:46:17
>>261
#include <stdio.h>

void swap(int *a, int *b){int temp=*a; *a=*b; *b=temp;}

void sort(int *s, int *m, int *l, int *xl){
if(*s>*m) swap(s,m); if(*s>*l) swap(s,l); if(*s>*xl)swap(s,xl);
if(*m>*l) swap(m,l); if(*m>*xl)swap(m,xl);
if(*l>*xl)swap(l,xl);
}

int main(){
int s = 4, m = -33, l = 232, xl= 83;
sort(&s, &m, &l, &xl);

printf("s = %d, m = %d, l = %d, xl = %d",s, m, l, xl);
return 0;
}

264:デフォルトの名無しさん
10/11/21 16:27:49
>>262
スレリンク(tech板:83番)

265:デフォルトの名無しさん
10/11/21 16:29:54
[1] 授業単元: 情報工学
[2] 問題文: URLリンク(www.dotup.org)
[3] 環境
 [3.1] OS: Cygwin on Windows
 [3.2] コンパイラ名とバージョン: gcc 4.3.4
 [3.3] 言語: C
[4] 期限:11月22日まで

どうか宜しくお願いします。


266:デフォルトの名無しさん
10/11/21 16:35:16
>>264
◆QZaw55cn4cの出張ウザイです

267:デフォルトの名無しさん
10/11/21 19:08:46
>>265
入力してテストってのは面倒だからやってない、入力するには5行目の #define TEST をコメントアウトしてくれ
コードの問題で化けると嫌なので出力は英語になってるので気に喰わなければ勝手に直してくれ

URLリンク(codepad.org)

268:デフォルトの名無しさん
10/11/21 19:15:22
>>222 >>227
どうもありがとうございます。
御二方のコードを参考に自分でもう一度作ってみようと思います。

269:デフォルトの名無しさん
10/11/21 19:19:16
c言語の宿題の一部なのですが
コマンドプロンプトのmoreの役割をするプログラムを作るのはどうすればいいのでしょうか?
既に出来ているテキストファイルをコマンド上に表示するだけなのですが
出来ればソースをお願いします

270:デフォルトの名無しさん
10/11/21 19:24:28
ncursesを使う

271:デフォルトの名無しさん
10/11/21 19:38:42
解決しました
ありがとうございます

272:デフォルトの名無しさん
10/11/21 19:48:22
>>267
助かりました。
これからがんばって読みます。
ありがとうございました。

273:デフォルトの名無しさん
10/11/21 21:40:07
[1] 授業単元:プログラミング
[2] 問題文
問題1.文字列を入力し、入力された文字列について、次の1~6のすべてを表示するプログラムを作
成しなさい。
1 全文字の合計文字数
2 数字の文字数
3 英大文字の文字数
4 英小文字の文字数
5 空白の文字数
6 その他の文字の文字数
ただし、
・ 下記の実行結果のように、それらの数値を表示しなさい。
・ データの読み込みは getchar 関数を使うこと。

問題2.12 個の整数を入力し、それらの 3 倍の数値を表示するプログラムを作成しなさい。
ただし、
・入力した整数は、4 行 3 列の 2 次元配列に格納しなさい。
・配列の作成と表示にはループ制御を使用すること。
・下記の実行結果になるようにしなさい。
Column1 Column2 Column3
------------------------------------
Row1 : 3 6 9
Row2 : 300 600 900
Row3 : 3000 6000 9000
Row4 : 30000 60000 90000
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C++
[4] 期限:2010/11/20
[5] その他の制限: あまり難しくないようにお願いします。
繰り返しと条件判断と配列と簡単な関数までぐらいしか授業はやっていません。

274:デフォルトの名無しさん
10/11/21 21:50:02
>>269
スレリンク(tech板:87番)

275:デフォルトの名無しさん
10/11/21 21:55:21
うぜー

276:デフォルトの名無しさん
10/11/21 23:10:03
>>259
ありがとうございました!とても助かりました!

277:デフォルトの名無しさん
10/11/22 07:46:51
>>273
問題2だけ。
URLリンク(codepad.org)

278:デフォルトの名無しさん
10/11/22 08:32:07
>>273
問題1もやってみた。
C++でgetcharってこういうことかな?
URLリンク(codepad.org)

279:デフォルトの名無しさん
10/11/22 12:53:40
>>273ですが言語はCでした;

>>277
>>278
折角やっていただいたのにすみません!;
実行してみましたができませんでした。
普通にgetchar関数を使えと言われたんですが・・・。


280:デフォルトの名無しさん
10/11/22 13:08:02
1] 授業単元: プログラミング
[2] 問題文
#include <stdio.h>
#include <string.h> /*strlenのため */

void
main( void )
{
char mojis[16]; /* 文字列を入れるための配列 */
int i;
int n; /* 'e'の数 */

printf("文字列:");
scanf("%15s", mojis );
mojis[15] = '\0';


for( i=0, n=0; mojis[i]; i++ ) /* ヌル字まで順に見ていく */
{
if( mojis[i] == 'e' ) /* 文字と文字定数との比較 */
{
n++;
}
}
printf( "文字数 %d のうち'e'は %d個", strlen(mojis ), n );
return; }
このプログラミングを改造
1.strlenを使わずに文字数をカウントする。
[3] 環境
 [3.1] OS:Windows、visual studio2005
 [3.3] 言語:C
[4] 期限:11月22日

281:デフォルトの名無しさん
10/11/22 13:16:54
>>280
#include <stdio.h>

int main( void )
{
char mojis[16]; /* 文字列を入れるための配列 */
int i;
int n; /* 'e'の数 */
int len; /* 文字の数 */

printf("文字列:");
scanf("%15s", mojis );
mojis[15] = '\0';


for( i=0, n=0, len=0; mojis[i]; i++ ) /* ヌル字まで順に見ていく */
{
len++ ;
if( mojis[i] == 'e' ) /* 文字と文字定数との比較 */
{
n++;
}
}
printf( "文字数 %d のうち'e'は %d個", len, n );
return 0 ;
}

282:デフォルトの名無しさん
10/11/22 13:34:32
iでいいだろうよw

283:デフォルトの名無しさん
10/11/22 13:40:41
>>279
書いてくれてるプログラムはC++だけど
入出力以外はCと同じだから
#include <iostream>は#include <stdio.h>
std::getchar()はgetchar()
std::cout~の行はprintf()
std::cin~の行はscanf()に置き換えれば動くと思うよ

284:mery
10/11/22 13:42:18
以前152で
1] 授業単元:プログラミングC
[2] 問題文(含コード&リンク):
無限ループを用い、1~50までの数値を任意に10個入力し、その度数分布を求めよ。但し、度数分布は5等分(例;1~10に4個, 11~20に3個, 21~30・・・41~50に0個)して表示せよ。
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限:11月21日
[5] その他の制限:1~50以外の数字が入力されたときの処理は考えなくていいそうです
で書き込ませていただいた者なんですが、教えていただいた通り、打ち込んでみたのですが、実行結果がでませんでした。
なぜでしょうか?

285:デフォルトの名無しさん
10/11/22 13:47:00
>>282
iだと1引かないといけないのがなんか気持ち悪い

286:デフォルトの名無しさん
10/11/22 13:48:32
>>285
え?w

287:デフォルトの名無しさん
10/11/22 14:06:22
>>284
>>164 でうまくいきますよ。「実行結果がでませんでした」というのは、どういう状態か、もう少し詳しく教えてください。

288:デフォルトの名無しさん
10/11/22 14:09:00
一瞬で終了してるとかってオチか?

289:デフォルトの名無しさん
10/11/22 14:11:48
>>288
入力はできてるところをみると可能性はありそう

290:デフォルトの名無しさん
10/11/22 15:04:40
>>281
ありがとうございました。参考にします。

291: ◆/91kCCQXBo
10/11/22 15:04:57
>>273
URLリンク(jbbs.livedoor.jp)

292:デフォルトの名無しさん
10/11/22 15:58:58
>>283
わかりました。間違えてすみません;
ありがとうございます!

>>291
わざわざありがとうございます!


293:ごばくすみません
10/11/22 16:00:49
>>284
>以前152
>で書き込ませていただいた者なんですが、教えていただいた通り、打ち込んでみたのですが、実行結果がでませんでした。
>なぜでしょうか?

7行目>>164
i=0; を
i=0; puts("数値を入力>"); に変えてみようか?

294:デフォルトの名無しさん
10/11/22 16:47:17
[1] 授業単元: プログラミング
[2] 問題文:
変数iに100が入っています、

iとは別に、50,75,55,60というように、ランダムな数字の配列があり、
次にくる数字が前の数字(ここでは60)より、5%大きかったら、
iに1を加算するプログラムを作成。

-5%なら-1で、10%なら+2するといった感じです。5%未満なら加算しません。

[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc 3.4
 [3.3] 言語: C
[4] 期限:特に無し

よろしくお願いいたします。

295:デフォルトの名無しさん
10/11/22 17:07:41
100%なら+20?

296:デフォルトの名無しさん
10/11/22 17:11:47
>>294
ランダムな数字の配列に負数とかゼロが出現する可能性はあるのかな?

297:デフォルトの名無しさん
10/11/22 17:12:03
>>295
そうです。私の頭じゃさっぱりで・・・if文の乱立しか思い浮かびません。

298:デフォルトの名無しさん
10/11/22 17:13:35
>>296
負数やゼロはなしでお願いします。
問題にはありませんが、1~100あたりの乱数が入ると思っていただければ。

299:デフォルトの名無しさん
10/11/22 17:19:56
>>294
#include <stdio.h>

int main(void)
{
int i, j;
int data[]={50, 75, 55, 60, 0};

i=100;
for(j=1;data[j]>0;j++)
{
i+=(data[j]-data[j-1])*20/data[j-1];
}
printf("i=%d\n", i);

return 0;
}

300:299
10/11/22 17:54:23
>>294
>>299 の修正
負数の割り算は気持ち悪いので
#include <stdio.h>

int main(void)
{
int i, j;
int data[]={50, 75, 55, 60, 0};

i=100;
for(j=1;data[j]>0;j++)
{
if(data[j]>data[j-1])
i+=(data[j]-data[j-1])*20/data[j-1];
else
i-=(data[j-1]-data[j])*20/data[j-1];
}
printf("i=%d\n", i);

return 0;
}

301:デフォルトの名無しさん
10/11/22 18:42:03
>>300
ありがとうございます!
こういう式がさっと出てこないんですよね・・・頭悪いのが嫌になる・・・

302:デフォルトの名無しさん
10/11/23 08:07:57
[1] 授業単元:プログラミングC言語
[2] 問題文:診断メーカー風のプログラムを作成しなさい。
      名前を入力し、その名前に基づき何かしらの情報を出力。
      .txtファイルを読み込み出力できるものにする事。
      (オプション)日替わりで表示結果を変更。複数の組み合わせなど。
[3] 環境
 [3.1] OS:Linux
 [3.3] 言語:C++
[4] 期限:2010年11月23日12:00まで

自分の頭では何をどうしていいのかさっぱりわかりません。
ヒントだけでも良いので、どうかよろしくお願いします。

303:デフォルトの名無しさん
10/11/23 08:24:05
>>302
テキストファイルの中に名前が書かれているの?

304:デフォルトの名無しさん
10/11/23 09:19:39
>>302
URLリンク(codepad.org)

305:デフォルトの名無しさん
10/11/23 09:29:08
>>302
URLリンク(codepad.org)

306:デフォルトの名無しさん
10/11/23 09:31:48
>>302
脳内メーカーみたいな物を作れって事かな?
ならば、先ずは仕様を決めることが必要だ
例えば名前の文字列を1Byteづつ評価し、0~15なら毒、16~31なら薬、32~47なら愛.....等々の評価を与える
最後に全文字が何の評価を与えたかを集計すれば、毒:M%、愛:M%、薬:O%みたいな出力を出せるだろ
txtファイルを読むというのは引数にテキストファイル名が指定された場合にはそのファイルに書かれている
名前を標準入力の変わりに使えと言う事だと思う

参考になれば幸いだ

307:デフォルトの名無しさん
10/11/23 09:44:29
>>302
#include <iostream>
#include <string>
#include <cstdlib>
#include <fstream>
unsigned str2number(std::string str){
unsigned ret=7743; // 必要ならここに日付を数値化したものを足す time(NULL)/(60*60*24) みたいに
for(unsigned i=0;i<str.length();i++) ret=ret*37+str[i];
return ret;
}
int main(void){
std::string name, buf;
std::ifstream ifs("data.txt");

std::cout << "名前を入力してください : ";
getline(std::cin, name);
srand(str2number(name));
std::cout << name << " さんの" << std::endl;
while(getline(ifs, buf)){
if(buf[0]=='#'){
std::string theme, result;
theme=buf.substr(1);
for(int i=1;getline(ifs, buf);i++){
if(buf=="") break;
if(rand()%i==0) result=buf;
}
std::cout << theme << " は " << result << " です"<< std::endl;
}
}
return 0;
}

308:307
10/11/23 09:45:47
>>307 で使用する data.txt の中身

#運勢
大吉



#ラッキーアイテム
トイレットペーパー
栓抜き
生卵
ブルーアイズホワイトドラゴン

#ラッキーカラー
透明
シルバー


309:デフォルトの名無しさん
10/11/23 09:51:16
>>305
argcのチェックを入れるべき。

310:デフォルトの名無しさん
10/11/23 14:27:43
[1]プログラミング演習
[2] 問題文:URLリンク(codepad.org)
[3] 環境
 [3.1] windows
 [3.2] visual studio2010
 [3.3] C言語
[4] 2010/11/26まで
[5]配列、関数、文字列、関数形式マクロ、再帰は習っています。
構造体、ポインタ等は習っていません。
問題文が長く改行が多すぎて書き込めなかったのでcodepaに問題文も書きましたが
問題があったら言ってください。
お願いいたします。

311:デフォルトの名無しさん
10/11/23 14:45:14
コードパッドに本文を入れるとは斬新w

312:デフォルトの名無しさん
10/11/23 15:44:22
>>310
URLリンク(codepad.org)

313:デフォルトの名無しさん
10/11/23 15:59:54
>>310です。
>>312
御回答ありがとうございます。
無事できました。有難うございます。
>>311
あ…やっぱり文章を入れる物ではなかったですか…。


314:デフォルトの名無しさん
10/11/23 17:34:14
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク)
2分法により2の平方根を計算して表示するプログラムを作れ。
解の存在範囲|xb-xa|が矛め決めた値より小さくなったら計算を停止(収束判定)するようにせよ。
*注意
(1)f(xa)とf(xb)の符号が反対であるか否かの判定法を考えよ。
(2)f(xa)とf(xb)が共に同符号になるようなxa,xbが入力された場合に対処すること。
[3] 環境
 [3.1] OS: unix
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:11月24日
[5] その他の制限: なし
よろしくお願いします。

315:デフォルトの名無しさん
10/11/23 20:04:09
>>314
スレリンク(tech板:118番)

316:デフォルトの名無しさん
10/11/23 20:40:27
>>314
URLリンク(codepad.org)

317:デフォルトの名無しさん
10/11/23 21:13:54
配列とファイルの読み込みです。

たとえば、100個の数字が用意されたファイルを用意します。
そのファイルを使って平均値を求めるプログラムを作りたいのですが教えてください。
ファイル名は適当で良いです。

平均値を求める計算は関数部分でお願いします。

318:デフォルトの名無しさん
10/11/23 21:20:32
>>317
をPerlでお願いします。

319:デフォルトの名無しさん
10/11/23 21:42:51
int main(void) {
system("cat temp.txt | perl -e \"while(<>){$i+=$_} print $i/100\"");
return 0;
}


320:デフォルトの名無しさん
10/11/24 00:37:03
[1] 授業単元: プログラミング基礎
[2] 問題文: n 個の整数型データ配列a[i]を、一つの関数に渡して、
      その一つの関数内で平均値と分散値を求め、main関数内で
      平均値と分散値を参照できるプログラムを作成せよ。
      ただし、配列の受渡し、結果の受け渡しにはポインタを利用すること。
[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:11月25日まで
[5] その他の制限:なし
宜しくお願いします。

321:デフォルトの名無しさん
10/11/24 00:57:35
>>320
#include <stdio.h>
void func( int n, int* arr, double* heikin, double* bunsan ) {
int i, sum = 0, sum2 = 0;
for( i = 0;i < n; i++ ) {
sum += arr[i];
sum2 += ( arr[i] * arr[i] );
}
*heikin = (double)sum / (double)n;
*bunsan = (double)sum2 / (double)n - *heikin;
}
int main( void ) {
int arr[] = {1,2,3,4,5};
double h, b;
func( 5, arr, &h, &b );
printf( "heikin = %lf, bunsan = %lf\n", h, b );
return 0;
}


322:デフォルトの名無しさん
10/11/24 01:03:21
>>321
*bunsanの式の右辺第二項は*heikinの二乗

323:デフォルトの名無しさん
10/11/24 01:07:57
[1] 授業単元: 数学
[2] 問題文: リーマン予想の解をアルゴリズム化して10^100桁の素数を決定的に因数分解する
   プログラムを作成せよ     
[3] 環境
 [3.1] OS:Windows、Mac
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:1月25日まで
[5] その他の制限:しらみつぶしに因数分解するプログラムは不可
宜しくお願いします。

324:デフォルトの名無しさん
10/11/24 01:08:52
>>322
そうだった
*bunsan = (double)sum2 / (double)n - *heikin * *heikin;
に修正、*が並ぶと気持ち悪いな

325:デフォルトの名無しさん
10/11/24 01:08:59
>>323
おいww

326:デフォルトの名無しさん
10/11/24 01:12:23
>>323
素数を決定的に因数分解するって?

327:デフォルトの名無しさん
10/11/24 01:13:36
>>326
俺もそれ気になってた
素因数分解って言ってないから実数でもいいのか?だとしたら無数に存在するけど


328:320
10/11/24 01:16:09
>>321>>322>>324
ありがとうございます!

329:デフォルトの名無しさん
10/11/24 01:29:50
そもそも10^100桁の数値なんてどうやって扱えばいいのか分からない
情報量として (10^100)/2.41 byte分なんてしらみつぶししようとも思わないw

330:デフォルトの名無しさん
10/11/24 01:36:40
始めたばかりで何が何だかわかりません…

[1] 授業単元:メディア基礎
[2] 問題文(含コード&リンク):数式X=[{16/(k*π)^2}^2]がある。
kが整数1~30の時のXの値をそれぞれ出力するプログラムをCで書きなさい。
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 明日午前十時まで
[5] その他の制限: 特に無いと思います。

よろしくお願いしますorz

331:デフォルトの名無しさん
10/11/24 01:39:43
素因数分解って素数に対してはそれ自身が素因数分解された結果だよな
だとしたら与えられた素数をそのまま出力するだけで終了じゃね?

332:デフォルトの名無しさん
10/11/24 01:47:23
[1] 授業単元: 数学
[2] 問題文: リーマン予想の解をアルゴリズム化して10^100桁の合成数を決定的に因数分解する
   プログラムを作成せよ     
[3] 環境
 [3.1] OS:Windows、Mac
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:1月25日まで
[5] その他の制限:しらみつぶしに因数分解するプログラムは不可
宜しくお願いします。

333:デフォルトの名無しさん
10/11/24 01:56:14
サラリーマンの人、やってみようか?

334:デフォルトの名無しさん
10/11/24 01:59:44
>>330

#include <stdio.h>

int main(void)
{
int i, k;
double PI = 3.14159265358979323846;

for(k = 1; k <= 30; k++) {
double t = 4 / (PI * k);
for(i = 0; i < 2; i++) t *= t;
printf("k = %d X = %f\n", k, t);
}

return 0;
}

335:デフォルトの名無しさん
10/11/24 02:01:19
>>330
URLリンク(codepad.org)

336:デフォルトの名無しさん
10/11/24 02:05:09
>>332
URLリンク(codepad.org)

337:デフォルトの名無しさん
10/11/24 02:06:41
リーマン予想なんて解明されていないのに、もう解いたのか。
ノーベル科学賞でも受賞できんじゃね?w

338:デフォルトの名無しさん
10/11/24 02:10:26
アンカー見て、誰も返信なかったから貼ったけど。
俺がアンカーミスってたとは・・・

339:デフォルトの名無しさん
10/11/24 02:12:22
>>337
数学にノーベル賞は無い

340:デフォルトの名無しさん
10/11/24 02:13:26
2^100ならいいけど10^100はちょっとやる気しないなぁ

341:デフォルトの名無しさん
10/11/24 02:21:44
>>334
ありがとうございます!
ほんとうに助かりました!

342:デフォルトの名無しさん
10/11/24 02:27:07
>>339
数学が無いことくらい知っているから敢えて 科学 の面で言ってみたんだが・・・

343:デフォルトの名無しさん
10/11/24 02:29:04
科学も 化学 を文字ってネタで言ったまでw

344:デフォルトの名無しさん
10/11/24 02:30:42
>>335
ありがとうございます!
あわせて参考にさせていただきます!

345:デフォルトの名無しさん
10/11/24 02:33:21
数学にノーベル賞は無いっておかしくね?

346:デフォルトの名無しさん
10/11/24 02:51:54
>>345
ノーベルが数学が苦手だったからだと
代わりにフィールズ賞がある

347:デフォルトの名無しさん
10/11/24 04:03:19
リーマン予想には賞金もかかってるよ

348:デフォルトの名無しさん
10/11/24 18:55:55
[1] 授業単元: プログラミング
[2] 問題文:たとえば、100個の数字が用意されたファイルを用意します。
そのファイルを使って平均値を求めるプログラムを作りたいのですが教えてください。
ファイル名は適当で良いです。

平均値を求める計算は関数部分でお願いします。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C言語
[4] 期限:11月27日まで
[5] その他の制限:なし
お願いします。


349:デフォルトの名無しさん
10/11/24 19:13:55
>>348
スレリンク(tech板:120番)

350:デフォルトの名無しさん
10/11/24 19:21:06
簡単な問題に必死だな
巣にこもってろ出てくるなよ、ゴミが

351:デフォルトの名無しさん
10/11/24 19:33:53
>>349
◆QZaw55cn4c
>たとえば、100個の数字が用意された
たとえば付くから、これは例を言っている(可能性ある)から数字の個数の100個は変化する可能性ある
と読み取れない?

352:デフォルトの名無しさん
10/11/24 20:06:55
>>351
1) #define N 100 と#define で記述して、コンパイル時に簡単に変えることができるようにしています。
2) 個数が仮に N より少ないデータだったとしても、正常に動くようにしています。
すなわち #define N 100 とした場合に対して、実際にはデータの個数が 5 であってもOKです。

100 を無視することも可能ではありましたが、平均を求める関数を準備する、という点を優先し、
一次近似として「データ数が100」を尊重いたしました。

>>348
問題があればコメントを下さい。随時変更いたします。

353:デフォルトの名無しさん
10/11/24 20:08:27
いいから出てくるなって

354:デフォルトの名無しさん
10/11/24 20:17:34
こんな入門レベルのものはやりたくないみたいなこと言ってたのになw

355:デフォルトの名無しさん
10/11/24 20:21:13
>>352 ◆QZaw55cn4c
いや、ここのスレでやり取りするなよ、自分のスレでやれ
スレチガイならともかく他所のスレのを無理やり横取りするなよ
お前、道徳的に最低ことしていると認識ないだろ



356:デフォルトの名無しさん
10/11/24 20:32:06
>>355
にちゃんねるで「道徳的」といわれても。

357: ◆EkRIf9bJPo
10/11/24 20:32:07

[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
-------------------
/*hogehoge*/
int main(){/*ggg*/
printf("xxxxxx");
}
int a=c;
-------------------
上記のソース総ステップ数5ステップ、実ステップ数3ステップ、
コメント率40%が求められるステップカウンターを作製せよ。
また、以下の条件を提示する。
1.ディレクトリ単位で読み込めるようにする。
2.Cファイルのみのステップ数を求めるようにする。
[3] 環境
 [3.1] OS: UNIX
 [3.2] コンパイラ名とバージョン: gcc 4.3.4
 [3.3] 言語: C
[4] 期限: 2010年11月25日9:00
[5] その他の制限: なし
よろしくお願いします。



358:デフォルトの名無しさん
10/11/24 20:37:13
◆QZaw55cn4c
当然、>>357も横取りするんだろ

359:デフォルトの名無しさん
10/11/24 20:42:46
>>358
お客様としてお待ちしようかと。
でも期限が厳しいですね。

360:デフォルトの名無しさん
10/11/24 21:11:48
>>357
ディレクトリ指定も可能って事はサブディレクトリも再帰的に捜査するんだよね
まぁ500円くらいなら払う価値は有る問題だと思うよ

総ステップは行数だと思うけど実ステップってのは?
if( x ) {
  i = a + b
    + c + d;
}
これは何ステップ?
コメント率は ( "/*", "*/",  "//" を含むコメント文字数 ) / (総文字数) の事?
その場合は改行コードは計算に入れるの?
この辺は詰める必要があるね

361:デフォルトの名無しさん
10/11/24 21:21:56
>>357
カンマ演算子の扱いとか、do while とかどうする?

362:デフォルトの名無しさん
10/11/24 21:28:43
>>357
実ステップは4行になりそうだけど。

363: ◆EkRIf9bJPo
10/11/24 21:40:11
>>360

そうです。サブディレクトリを読み込みます。
実ステップは、コメントのみの行、行区切りだけの行をはずした行数です。
なので、例に出されたソースの実ステップは、3ステップになります。

コメント率に関しては、特に条件が記載されてないです…
コメントが記載されている行/全行のことだと解釈しています。
改行コードについても記載がないので、計算には入れることは、考えてないです。

364: ◆EkRIf9bJPo
10/11/24 21:48:48
>>361

すみません。どうするってどういう意味ですか?

>>362

問題文がそうだったので…

365:デフォルトの名無しさん
10/11/24 22:57:27
>>356
2chを楯に自分の糞さから逃げてないか?

366:デフォルトの名無しさん
10/11/24 23:06:24
>>363
判定条件はこうかな
コメント外部にアルファベット、数字、記号({}を除く)が出現したら実ステップ行(*1)
コメントが入っている業はコメント行(*2)
当然、*1 でかつ *2 の行も存在する

例えば#if 0 ~ #endif の間は無効な行だけどこれも実ステップ行扱いで良いんだろうな、さもないと判定が難しすぎる

367:デフォルトの名無しさん
10/11/24 23:07:06
反論してる人もこっちでやってくれんかな。
スレリンク(tech板)
◆QZaw55cn4cもこのスレでそういう論議しなければ俺はかまわん。
このスレのそういうレスは双方無視の方向で。

368:デフォルトの名無しさん
10/11/24 23:18:41
>>364
たとえば
a++,b++;
は1ステップか、それとも2ステップか
式は一つだから1ステップでいいとはおもうけど

do{
func();
}while();
は2ステップなのか3ステップなのか
doがなんかするわけじゃないから2ステップでいいのか?

あと、;だけの行はステップとして数えるのか?

369: ◆QZaw55cn4c
10/11/24 23:31:10
>>357
>>363
途中ですが、コードを示します。使い方は、
./a.out Cプログラムファイル
です。

>>357 に例示されたコード例が指定どおりの数字を出す、という点だけで仕様を勝手にきめました。
大方は、>>366 にしたがっています。
これにいろいろ食わせてみて問題があるようであれば指摘ください。
途中ゆえデバッグコードを多数含みますことご容赦を。
URLリンク(codepad.org)

xmalloc() -> malloc()
xfree() -> free()
xrealloc() -> realloc()
に読み替えてください。

370: ◆1reJfOTbE.
10/11/24 23:35:18
URLリンク(www.icsd3.tj.chiba-u.jp)
[1] 授業単元:プログラミング実験
[2] URLリンク(www.icsd3.tj.chiba-u.jp)
  ここの第2回の課題です。
[3] 環境
 [3.1] OS:WindowsXPでコマンドプロンプトやMeadowなどを使っています。
 [3.2] gcc
 [3.3] C
[4] 期限:11/26の18:00
[5] その他の制限:特にないと思います。
第1回に比べて急に難しくなったように思え、困っています。
とりあえず課題が何をどうすればよいかわかりません。
手順を教えていただきたいです。よろしくお願いします。

371: ◆EkRIf9bJPo
10/11/24 23:36:00
>>363

その判定条件で大丈夫です。
#if0~#endifも実ステップ行扱いで良いと思います。

>>368

特にカンマ演算子と、do whileについて何も条件が出されてないので、>>663さんが提示した判断条件でお願いします。


372:デフォルトの名無しさん
10/11/24 23:40:32
>>369
printf("xxx/*nocomment*/xxx");

373:デフォルトの名無しさん
10/11/24 23:54:48
>>357
>>372
URLリンク(codepad.org)
これ以上複雑になれば、今のコードは捨てて状態遷移(オートマトン)で書き直すことを検討します。限界です。

374:デフォルトの名無しさん
10/11/24 23:58:24
>>373
問題が結構いい加減だから、都合のいいように解釈すればよいと思う。

375: ◆EkRIf9bJPo
10/11/24 23:58:29
>>369

ありがとうございます!
早速、デバッグを行なったところ、以下のエラーが表示されました。

1.c:8: error: conflicting types for ‘getline’
/usr/include/sys/stdio.h:37: error: previous declaration of ‘getline’ was here
よろしくお願いします。

376:デフォルトの名無しさん
10/11/25 00:00:43
getlineって◆QZaw55cn4cじゃないかw

377:デフォルトの名無しさん
10/11/25 00:08:00
>>373
/* "A" */

今のロジックだと /* と " のどちらかを優先しなければならないから限界みたいだね

378: ◆QZaw55cn4c
10/11/25 00:08:29
>>357
>>375
URLリンク(codepad.org)

>>376
じゃあトリップつけときますか。

379:デフォルトの名無しさん
10/11/25 00:09:38
つけなくていいよ

380:デフォルトの名無しさん
10/11/25 00:14:07
>>377
そのようですね。
このコード>>378 は捨てましょう。

>>375
このロジックでよければ、ディレクトリを掘るコードをつけます、といっても明日があるので今日はおしまい。
期限を見直してください。あと >>2 をよろしく。

381:377
10/11/25 00:15:40
>>373
間違えた、駄目なのはこんなケース

printf( "/* a */" );
/* "a */
printf( "/* a */" );

改行で終わらない行は無視してるみたいだけどそんな必要有るのかな

382:デフォルトの名無しさん
10/11/25 00:24:35
ありゃ、テレビ見てたら盛り上がってるな。
乗り遅れたし、明日早いし。寝るくぁ。

383:デフォルトの名無しさん
10/11/25 01:07:35
>>370
非常に丁寧な教材ですね。
難しいところを素直に先生に聞いてみるのはいかが?

このスレは回答を提示することで若い芽を摘み取る非情な場所であることをお忘れなく。

384:デフォルトの名無しさん
10/11/25 01:12:23
>>383
ワロスw
確かにその通りかもw

385:デフォルトの名無しさん
10/11/25 01:48:20
>>370
dequeだけ作っといた
フィルタは気が向いたらやるかも
URLリンク(codepad.org)


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