トップページ⇒tech
1001コメント422KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG?2BP(417)
あなたが解けない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
【過去ログ検索】        http://chomework.sakura.ne.jp/
【wiki】               http://www23.atwiki.jp/homework/

【前スレ】
C/C++の宿題を片付けます 106代目
http://pc11.2ch.net/test/read.cgi/tech/1209810861/
0002デフォルトの名無しさん2008/05/17(土) 21:03:52
さて、未回答の問題はどれだ?
0003デフォルトの名無しさん2008/05/17(土) 21:05:40
[1] 授業単元:オペレーティングシステム論
[2] 問題文
?簡単なシェルを作れ
?fork、exec系、wait系のシステムコール(ライブラリ関数)を利用して作る
?最低限、以下の機能を実現する
1.プロンプトを出力する
2.ユーザに端末からコマンドを入力させる
3.新しくプロセスを生成し、そのプロセスが入力されたコマンドのプログラムを実行する
4.そのコマンドの実行(子プロセス)が終了するまでシェル(親プロセス)は、プロンプトを出さずに待つ
5.1に戻る

[3] 環境
OS:Windows/Linux
コンパイラ:gcc
言語: C
[4] 期限: 2008年5/17
実行結果もお願いします

前スレから未解答っぽいののコピペ
スルーされまくってる奴があるなwww
0004デフォルトの名無しさん2008/05/17(土) 21:13:01
>2次元配列変数sampleの中身を表示し、sampleの4つの値の平均値をresultの1つの値とする
>プログラムを作成せよ。
>
>実行例
>sample
>13 36 18 54 83 12
>25 62 19 78 21 5
>41 93 87 21 87 11
>61 81 68 46 35 98
>
>result
>34 42 30
>69 56 58
>
>この問題みなさんはできるかな?

前スレ862行け
0005デフォルトの名無しさん2008/05/17(土) 21:14:05
前スレ862より

#include<stdio.h>
int main(void)
{ int sample[4][6]={{13, 36, 18, 54, 83, 12},
{25, 62, 19, 78, 21, 5},
{41, 93, 87, 21, 87, 11},
{61, 81, 68, 46, 35, 98} };
int result[2][3]={0}, i, j;
puts("sample");
for(i=0;i<4;i++) {
for(j=0;j<6;j++) {
printf("%d ", sample[i][j]);
}
puts("");
}
result[0][0]=(sample[0][0]+sample[1][0]+sample[2][0]+sample[3][0]) / 4;
result[0][1]=(sample[0][1]+sample[1][1]+sample[2][1]+sample[3][1]) / 4;
result[0][2]=(sample[0][2]+sample[1][2]+sample[2][2]+sample[3][2]) / 4;
result[1][0]=(sample[0][3]+sample[1][3]+sample[2][3]+sample[3][3]) / 4;
result[1][1]=(sample[0][4]+sample[1][4]+sample[2][4]+sample[3][4]) / 4;
result[1][2]=(sample[0][5]+sample[1][5]+sample[2][5]+sample[3][5]) / 4;
puts("\nresult");
for(i=0;i<2;i++) {
for(j=0;j<3;j++) {
printf("%d ", result[i][j]);
}
puts("");
}
return 0;
}
0006デフォルトの名無しさん2008/05/17(土) 21:39:06
Form1.cs(13,17): error CS0118: 'CircleInsidePolygon' は '名前空間' ですが、'型'
のように使用されています。
0007デフォルトの名無しさん2008/05/17(土) 22:11:16
>>6
C#はスレ違い というか宿題ですらないし
0008デフォルトの名無しさん2008/05/17(土) 22:13:19
C#も含めていいんじゃないか?
JavaはダメだがC#はおkでいい。
0009デフォルトの名無しさん2008/05/17(土) 22:13:43
前スレは一応 >>3 以外は終わっているな。
0010デフォルトの名無しさん2008/05/17(土) 22:16:11
>>8
互換性ない言語をまとめるのもどうかなあ。
それに、ウルトラ過疎ってるがC#宿題スレは既にある。
0011デフォルトの名無しさん2008/05/17(土) 22:20:07
C++/CLIならともかくC#はスレ違いだろうな
Javaの方が似てるくらいだし
0012デフォルトの名無しさん2008/05/18(日) 01:55:30
>>http://pc11.2ch.net/test/read.cgi/tech/1209810861/832
>>http://pc11.2ch.net/test/read.cgi/tech/1209810861/965
>>3
当方の環境は Linux 4.2(kernel 2.6.16), コンパイラは gcc3 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6586.txt
0013デフォルトの名無しさん2008/05/18(日) 02:20:28
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):4×4のパズルを解くプログラム
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6587.txt
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 5月20日
[5] その他の制限:
基礎的な部分は一応一通り習ってます。

よろしくおねがいします。
0014デフォルトの名無しさん2008/05/18(日) 03:54:37
$fuga(431)[/home/user0230/]cc -o 6586 6586.c
$fuga(432)[/home/user0230/]./6586
>
(null): not found
Oh NO!!!
segmentation fault core dumped!

$fuga(433)[/home/user0230/]
0015デフォルトの名無しさん2008/05/18(日) 05:00:23
>>13
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6588.txt
0016デフォルトの名無しさん2008/05/18(日) 12:07:15
[1] 授業単元:情報プログラム
[2] 問題文(含コード&リンク):
4つの点p1,p2,p3,p4とその座標が与えられている。
その時p1とp2を通る直線とp3とp4を通る直線の交点座標を求めるプログラムをつくれ。
2直線が平行なときはその旨を表示せよ。

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


おねがいします。
0017デフォルトの名無しさん2008/05/18(日) 12:57:25
  float p1[2] , p2[2] , p3[2] , p4[2] , p12a , p12b , p34a , p34b , p5[2];
  printf("p1の座標入力\n");
  scanf("%f %f",p1,p1+1);
  printf("p2の座標入力\n");
  scanf("%f %f",p2,p2+1);
  printf("p3の座標入力\n");
  scanf("%f %f",p3,p3+1);
  printf("p4の座標入力\n");
  scanf("%f %f",p4,p4+1);
  
  p12a = (p2[1]-p1[1])/(p2[0]-p1[0]);
  p12b = (0 - p1[0]) * p12a + p1[1];
  p34a = (p4[1]-p3[1])/(p4[0]-p3[0]);
  p34b = (0 - p3[0]) * p34a + p3[1];
  p5[0] = (p34b - p12b)/(p12a - p34a);
  p5[1] = (p5[0] * p12a) + p12b;
  if(p12a==p34a)
  {
    printf("二直線は平行\n");
    return 0;
  }
  printf("二直線の交点の座標\n(%f , %f)\n",p5[0],p5[1]);
0018デフォルトの名無しさん2008/05/18(日) 13:02:25
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
長さが32のビット列を入力し、
このビット列が表す実数値を出力するプログラムを作成せよ。
ただし、この実数表現はIEEE754によるものとする。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月19日
[5] その他の制限: pow関数は使用しないこと。
0019デフォルトの名無しさん2008/05/18(日) 13:14:20
>>16
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6589.txt
参考 ttp://www.deqnotes.net/acmicpc/2d_geometry/lines
0020デフォルトの名無しさん2008/05/18(日) 13:28:24
>>18
実行環境のfloatが32bitのIEEE754形式なら、これでいい。
#include<stdio.h>
int main()
{
char str[33];
unsigned long bits = 0;
int i;
printf("32ビットの2進数を入力してください\n:");
scanf("%32s", str);
for(i = 0; str[i]; i ++)
bits = bits * 2 + str[i] - '0';
for(i = 0; i < 32; i ++)
putchar('0' + ((bits>>(31-i)) & 1));
putchar('\n');
printf("= %g\n", (double)*((float*)&bits));
return 0;
}
0021182008/05/18(日) 13:40:06
>>20
すいません、問題の注意事項をよく見たら
まず指数部と仮数部を求めてから実数値を求めなきゃいけなかったみたいです…。
0022デフォルトの名無しさん2008/05/18(日) 13:42:10
>>17
どうも

>>19

不正な初期化(16行目)と出てコンパイルできないです
0023デフォルトの名無しさん2008/05/18(日) 13:47:15
どうして最初から平面上の直線だってわかったのかな?
問題文じゃそんなこと書いて無いのに
空間の中の直線だったらどーすんだ?
0024192008/05/18(日) 13:48:46
>>22
これならどう?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6590.txt
0025デフォルトの名無しさん2008/05/18(日) 13:50:11
>>23
その場合、
平行か/交わるか
のほかに、
平行ではなくかつ交わらない(同一平面上にない)
が必要ですね。
0026デフォルトの名無しさん2008/05/18(日) 13:50:37
>>24
大丈夫でした。ありがとうございました
0027192008/05/18(日) 13:52:43
>>23
・平行には言及しているのに、ねじれの位置関係に言及していないから
・題意を満たすには2次元で十分だから
かな
0028デフォルトの名無しさん2008/05/18(日) 13:53:13
すまん、名前が残ってたw
0029デフォルトの名無しさん2008/05/18(日) 13:57:42
上手いこと揚げ足とったつもりが逆にフルボッコw
0030デフォルトの名無しさん2008/05/18(日) 14:03:05
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6591.zip
[3] 環境
 [3.1] OS: windowsXP
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 5月22日
[5] その他の制限:pdfファイルに細かく手順などが書いてあります

pdfファイルなのでzipで問題文をアップさせていただきました。
pdf文章の課題1,2,3までは終了。課題4,5が分らず困っています。
課題4,5のプログラムを教えて下さい。


0031デフォルトの名無しさん2008/05/18(日) 14:22:26
空間上の4点p1,p2,p3,p4が与えられていても
p1,p2を通る直線とp3,p4が通る直線が
交わるか
平行か(「交わる」場合もあれば、交わらない場合もある)
ねじれ(交わらない)
か、判定出来ないというのでつね(|)
0032デフォルトの名無しさん2008/05/18(日) 14:46:39
バカ?
0033202008/05/18(日) 15:17:13
>>21
これならどう?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6593.txt
0034182008/05/18(日) 15:43:06
>>33
これなら大丈夫そうです。
本当にありがとうございました!
0035デフォルトの名無しさん2008/05/18(日) 15:43:13
煽り目的の奴はどこにでもいる、スルーでおk
0036デフォルトの名無しさん2008/05/18(日) 15:48:41
23みたいなヤツのことかw
0037デフォルトの名無しさん2008/05/18(日) 16:08:39
>>36
23は煽りじゃないだろ
仕様が曖昧なのに勝手に問題を単純化してすぐにコードにしてしまう
癖はCプログラマに限らずプログラマの悪い癖(自分もそうかも)
しかも公開の場所にあげてしまうし...
今回のは平面だろうが空間だろうが、意匠とか著作権やら絡まないし
ましてや個人情報も含まれるわけでもない単純な数学問題だからいい
かも知れないが、それでは済まされない分野も相手にするのもまた
Cプログラミングの世界。そういったことも伝えるのも大事だと思うな。
0038132008/05/18(日) 16:28:35
>>15
ありがとうございます。
ですが38行目のあたり
(int solve_sub( int *m0, int *m1, int *m2, int *m3))
でエラーが出てしまいます(__)
0039デフォルトの名無しさん2008/05/18(日) 16:31:02
>>37
おまいが23でないとして...
クソ仕様にはクソコードで速攻応酬するしか自衛手段が無いんだよ。
クソ仕様しか作れないから質問(発注)するわけだからな。
0040デフォルトの名無しさん2008/05/18(日) 16:34:01
>>38
>>1
> ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
0041デフォルトの名無しさん2008/05/18(日) 16:37:30
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):動的計画法によるアライメント
問題文と実行例 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6594.txt
プログラムの枠組み http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6595.c
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] BorlandC++
 [3.3] 言語: C言語
[4] 期限: 5月19日1200まで
[5] その他の制限: 特になし
よろしくおねがいします
0042デフォルトの名無しさん2008/05/18(日) 16:54:28
言い争いなんかするなよ
仕様が曖昧でも、今回は2D or 3Dってレベルだろ
そんなのプログラムで吸収しろw

ほれ3D版だ、2DでやりたきゃZ値を全て0とかで合わせれば言い
>>16
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6597.txt
0043132008/05/18(日) 17:17:18
>>40
すいませんでした。
エラーメッセージ(?)なのかなぞなんですが
38: non-constant expression
と言う風に出ました。
0044デフォルトの名無しさん2008/05/18(日) 17:24:54
>>43
int dup=0, pos, val=0+1+2+3+4, *m[4], i;
m[0]=m0;
m[1]=m1;
m[2]=m2;
m[3]=m3;

みたいに書いたら?
0045デフォルトの名無しさん2008/05/18(日) 17:46:41
>>41
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6598.txt
0046デフォルトの名無しさん2008/05/18(日) 18:01:55
>>30
>課題4 まず操作1◦ と操作2◦ のみで,例題1 が正しく解けることを確認
とりあいずここまでできた
#include <stdio.h>
#define X 4
#define Y 3

void view(double a[Y][X])
{
char *kuuhaku;
int i , j;

for(i=0;i<Y;i++){
for(j=0;j<X;j++){
kuuhaku = j==X-1 ? a[i][j]<0 ? " " : " " : "";
printf("%s%7.2lf ",kuuhaku,a[i][j]);
}
printf("\n");
}
printf("\n");
}

0047デフォルトの名無しさん2008/05/18(日) 18:02:21
int main(void)
{
double a[Y][X]=
{{4,6,2,4000},
{2,8,6,5000},
{6,4,4,4200}};
double seki;
int target_gyou;
int i , j , k;

for(i=0;i<Y;i++){
printf("\n\n--------STEP %d--------\n\n",i+1);
for(j=X-1;j>=0;j--){
a[i][j]/=a[i][i];
}
view(a);
for(j=1;j<=Y-1;j++){
target_gyou=(i+j+Y)%Y;
seki=a[target_gyou][i]/a[i][i];
for(k=X-1;k>=0;k--){
a[target_gyou][k]=a[target_gyou][k]-a[i][k]*seki;
}
view(a);
}
}

return 0;
}
0048412008/05/18(日) 18:06:06
エラー直して実行したら実行例通りにできました
ありがとうござます。
0049302008/05/18(日) 19:10:51
>>46
面倒な問題なのにありがとうございます。
課題4の前半まで確認できました。
0050デフォルトの名無しさん2008/05/18(日) 19:27:13
[1] 授業単元: C言語〜基礎�T〜
[2] 問題文(含コード&リンク):
最初に整数nを入力し、nの数だけ実数x1, x2, ... ,xnを読み込みその値の平均を求める。
(配列ではなくfor分にて読み込み、n回for分を回し、値は順次加算する。for分を抜け次第nの値で割り平均を求める。)

また、入力した実数で大きい方から順次3つ表示する。
(大きいほうから順次3つというのは格納用の3つ変数を用意し大小関係を調べて変数の中身を入れ替える。)

(実行例)
n=5
8
1
2
6
3
平均=4
大きいほうから順に8,6,3です。
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C言語
[4] 期限: 5/20 12:00までにお願いします。
0051デフォルトの名無しさん2008/05/18(日) 19:44:46
>>50
#include<stdio.h>
#include<limits.h>
#define TOP 3
int main()
{
int n, i, j, t, sum = 0, top[TOP] = {INT_MIN, INT_MIN, INT_MIN};
printf("n=");
scanf("%d", &n);
for(i = 0; i < n; i ++) {
scanf("%d", &t);
sum += t;
if(t > top[TOP-1]) {
for(j = TOP-1; j > 0 && t > top[j-1]; j --)
top[j] = top[j-1];
top[j] = t;
}
}
printf("平均=%g\n", (double)sum/n);
printf("大きいほうから順に");
for(i = 0; i < TOP; i ++) {
if(i)
printf(",");
printf("%d", top[i]);
}
printf("です。\n");
return 0;
}
0052デフォルトの名無しさん2008/05/18(日) 19:50:11
>>30

解が無いパターンと途中を0で除算してしまう所の追加
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6599.txt

必ずしも正しいという保証はなし
0053デフォルトの名無しさん2008/05/18(日) 20:33:26
>>51
お早い回答ありがとうございます。

自分は格納用変数3つ作成ってところがよく分からなかったので、大変参考になります。
005430です2008/05/18(日) 20:46:17
>>52
本当にありがとうございます。質問なんですが、これは課題4の操作3゜まで完了したプログラムでしょうか・・
課題2の数値をこのプログラムに入れて実行した結果は多分正解でした。
0055デフォルトの名無しさん2008/05/18(日) 21:00:25
>>54 >>30
操作3ですよ
完璧に丸ごと問題通りにできているのかは怪しいですね。。
005630です2008/05/18(日) 21:15:40
丸ごと問題通りじゃなくても大丈夫なんで課題4はokです。
課題5は課題4の操作3゜の部分を書き換えたら完成ですかね?
0057432008/05/18(日) 22:01:05
>>44
ありがとうございました。エラーは解決しました!

ですが、実行結果が正しい値になりません...
00584522008/05/18(日) 22:11:23
[1] 授業単元: 情報基礎2
[2] 問題文(含コード&リンク):
物理量xについて、初期値x=0とする。分岐点を設けそこで乱数関数を利用して0-1の値を生成する。
この値が0.5-1の場合はxに1を加え、0-0.5のときは1を引く。
この分岐を100回経たときのxの値を保存する。
これをn回繰り返し、一つのファイルにn個のxの値を書き込む。
そして、、同じxの値が何回現れたかを表示するプログラムを作成せよ。
【実行例】
1回目 -14
2回目 -8
3回目 2
・
・
・
100回目 14
x=0 4回
x=2 5回
x=10 1回
・
・
・
x=20 2回
[3] 環境 
 [3.1] OS: Windows xp
 [3.2] コンパイラ名とバージョン:BCC Developer 
 [3.3] 言語:できればC++で
[4] 期限:08年5月19日

n回繰り返してファイルにn個のxの値を書き込むところまでは作成できたのですが、
同じxの値が何度現れたのか表示する部分をどうすればよいのかわかりません。
よろしくお願いします。
0059582008/05/18(日) 22:13:15
>>58の名前欄はミスです。
回数n=100とした場合の、途中までのプログラムを示します。
#include <iostream.h>
#include <stdlib.h>
int main (void)
{
    int i,j;
    const int N=100;
    double a,n=0,ran;
    double array[N];  
    
    srand((unsigned) time(NULL));
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
        
            ran =rand()/(float)RAND_MAX;
            a=ran;
            if(a<=0.5)
                n-=1;
            else
                n+=1;
            array[j]=n;       
        } 
        cout <<i<< "=" << array[N-1]<<endl;  
    }
}

行数の関係で空白行を削除しています。よろしくお願いします。
0060152008/05/18(日) 22:22:10
>>57
> 実行結果が正しい値になりません
入力例を示してもらえますか?
0061デフォルトの名無しさん2008/05/18(日) 22:29:29
[2] 問題文(含コード&リンク):シグモイド関数の値を求めるプログラムを書け。
自分で考えて一応プログラムを作りました。
キーボードで数字を入力すると答えが出るようにしようと思いましたがうまくいきません。
#include<stdio.h>
#include<math.h>
int main(void)
{
double f=0,x=0;
scanf("%f",&x);
f=1.0/(1.0+exp(-x));
printf("%f",f);
}
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: Microsoft Visual C++ 2005
 [3.3] 言語:どちらでも可
[4] 期限: なるべく早くお願いします。
[5] その他の制限:特に制限はありませんがなるべく簡単というか簡潔にお願いします。
0062572008/05/18(日) 22:32:52
>>60

各行を数字4文字で入力してください。
数字は1〜4、または0(空欄)です。(例:1034)
1行目:1004
2行目:0200
3行目:0010
4行目:2000
初期状態=
1 0 0 4
0 2 0 0
0 0 1 0
2 0 0 0

不定
1 0 0 4
0 2 0 0
0 0 1 0
2 0 0 0


本当ならば
1 3 2 4
4 2 3 1
3 4 1 2
2 1 4 3
の解が出なければならないのですが・・・
0063152008/05/18(日) 22:35:49
>>62
今問題を見返して、ようやく問題文の言わんとしているところを理解した。
>>15は頭が悪かった。
作り直すから、ちょっと待ってて。
0064572008/05/18(日) 22:39:08
すいません、ありがとうございます。
お願いします(__)
0065デフォルトの名無しさん2008/05/18(日) 22:52:23
1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):char 型の配列C[10] に10 個の文字を読み込み、
C[10] に格納された文字の中で英大文字だけを表示させるプロ
グラムを作成せよ
[3] 環境
 [3.1] (Windows xp
 [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
 [3.3] 言語 C++ borland ver2.31
[4] 期限: (来週の月曜日 5月27日
[5] その他の制限:2次元配列を学び終え,文字列に入ったところです。ポインタはまだ学習しておりません

C[10]の配列に文字を格納した後に、どのようにして大文字小文字を判別しているのかが
理解できません、どうかご教示おねがいします。
0066デフォルトの名無しさん2008/05/18(日) 22:54:45
>>65
つ ctype.h isupper
0067152008/05/18(日) 22:55:21
>>57
すまんかった。これで解ける。
不定・不能は判定しなくなったので。あしからず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6601.txt
0068デフォルトの名無しさん2008/05/18(日) 23:03:52
>>66
返答ありがとうございます!
つい先ほどif分の内容を変えてみたところ正常に動作しました。
お手数おかけしてもうしわけありませんでした
}
0069572008/05/18(日) 23:37:24
>>67
はい!きちんと実行できました。
ほんとうにありがとうございました!
0070デフォルトの名無しさん2008/05/18(日) 23:43:24
>>58-59をお願い致します。
0071デフォルトの名無しさん2008/05/19(月) 00:03:06
>>67
2*2を見る部分ってこれであってる?
多分題意では4*4を4分割した4つの2*2を表現してると思う。

なのでこうかなって。
c[m[(y/2)*2+0][(x/2)*2+0]] = 1; /* 2x2 */
c[m[(y/2)*2+0][(x/2)*2+1]] = 1;
c[m[(y/2)*2+1][(x/2)*2+0]] = 1;
c[m[(y/2)*2+1][(x/2)*2+1]] = 1;
0072デフォルトの名無しさん2008/05/19(月) 00:14:52
>>58
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6602.txt
本当は回数カウンタはmapを使うといいんだけど。
0073デフォルトの名無しさん2008/05/19(月) 00:22:21
高々定数にしかならないことが分かってるから固定長配列のほうが良いのでは?
普通の map だと O(n log n) になってオーダーの意味で悪化するけど
0074デフォルトの名無しさん2008/05/19(月) 00:24:44
そう言われればそうだな。
nが小さくて、BRANCH_NUMが大きいときだけ、mapが有効ということで。
0075デフォルトの名無しさん2008/05/19(月) 00:32:09
getlineでstringに読み込んだ後
partitionでより分けて
不要部分をeraseし
そのままcoutへ。

・・・char型配列使わないから反則負けだ。・3・
0076デフォルトの名無しさん2008/05/19(月) 00:36:45
>>72
まさに望んていた動作です。
  ofstream file("data.txt");
等の命令は私の知識不足でどういったものかわからないのですが、調べてみようと思います。
本当にありがとうございます。
0077デフォルトの名無しさん2008/05/19(月) 00:40:37
>>58 map 使ってみた
#include<cstdio>
#include<cstdlib>
#include<map>

double uniform_rand(void){return (double)rand()/(RAND_MAX+1);} // [0,1) の乱数を返す

int main(void){
std::map<int,int> count;
const int n=100;
FILE *fp;

if(!(fp=fopen("data.txt", "w"))) return 1;

for(int i=0;i<n;i++){
int x=0;
for(int j=0;j<100;j++){
if(uniform_rand()<0.5) x--;
else x++;
}
fprintf(fp, "%d回目 %d\n", i+1, x);
count[x]++;
}

for(std::map<int,int>::const_iterator it=count.begin();it!=count.end();++it){
fprintf(fp, "x=%d %d回\n", it->first, it->second);
}

fclose(fp);

return 0;
}
0078デフォルトの名無しさん2008/05/19(月) 02:05:54
半径が2.2cmの円の円周の長さを求めるプログラムをお願いいたします・・・
π=3.14でお願いします
0079デフォルトの名無しさん2008/05/19(月) 02:13:56
>>78
#include<stdio.h>
int main(void){
float r = 2.2f, pi = 3.14f;
printf("%f", 2*pi*r);
return 0;
}
0080デフォルトの名無しさん2008/05/19(月) 02:16:10
>>79
C習い始めたばかりで困っていました;
ありがとうございます
0081デフォルトの名無しさん2008/05/19(月) 02:19:01
てっきり円周の長さを求められないのかと思った
0082デフォルトの名無しさん2008/05/19(月) 05:53:39
おらっ、どうした、じゃんじゃん宿題を質問しチャイナと
0083デフォルトの名無しさん2008/05/19(月) 06:06:31
俺明日出る宿題全部書くんだ
0084デフォルトの名無しさん2008/05/19(月) 08:13:14
[1] 授業単元:応用プログラミング
[2] 問題文:整数を入力して表示する。(入力/出力関数の作成)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語:C
[4] 期限: 5月21日
[5] その他の制限:
標準ライブラリ関数printfやputs、scanfやgets等を使用してはいけない!
まるごと作成すること。入出力関数を作成する際にも標準ライブラリ
関数は使用してはいけない。


おまけ:発展課題としてmalloc/calloc関数を自作すること。
こちらの課題はmalloc/calloc関数以外の標準ライブラリ関数を
使用してよい。
0085デフォルトの名無しさん2008/05/19(月) 08:14:36
>>84
それな、C言語を使う意味ないでw
0086842008/05/19(月) 08:17:29
>>84
○○ nyuuryoku(○○)
{
//全ての標準ライブラリ関数使用禁止
}

○○ print(○○)
{
//全ての標準ライブラリ関数使用禁止
}

int main()
{
int a;

nyuuryoku("%d",&a); //5と入力
print("a=%d\n",a); //a=5表示されればOK

return 0;
}
0087デフォルトの名無しさん2008/05/19(月) 08:22:57
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):()

平面上の凸多角形 P と Q が与えられる。
(それぞれ、頂点の座標が反時計回りの順で与えられる)

このとき、
・P と Q が共通部分をもつとき INTERSECT と表示せよ。
・P と Q が共通部分をもたないとき DISJOINT と表示し、
 さらに P と Q の接線をすべて表示せよ。
 (接線は、接線の方程式 ax+by=c の a,b,c を出力)

なお、P と Q の頂点数はどちらも 10000 以下としてよい。

[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc 4
 [3.3] 言語: どちらでも可
[4] 期限: 2008/05/23
[5] その他の制限: 計算量を考慮すること

よろしくおねがいします
0088デフォルトの名無しさん2008/05/19(月) 08:45:35
>>84
インラインアセンブラで書けってことかな?
アーキテクチャはなんですか?
0089デフォルトの名無しさん2008/05/19(月) 08:46:58
料理するって時に、肉、野菜を1から作ってやれといっているようなものだ。
そうなると、飲食店は菜園、家畜する施設が必要になるな・・・
0090デフォルトの名無しさん2008/05/19(月) 08:51:08
86/87共に専門書読まなきゃ辛い問題で、宿題にでるわきゃない。
0091デフォルトの名無しさん2008/05/19(月) 08:54:33
>>90
専門書読まないと辛いからといって、宿題に出ないとは限らない。
底辺の学校ならそうかもしれんがね。
0092デフォルトの名無しさん2008/05/19(月) 08:55:34
>>88
UNIXの専門書読んでwrite,readなどの低レベル関数使ったり
書式設定文字列を自前で展開しろって奴?
フローチャート書かせたりはありえてもコンパイル可能なコード
にしろというわきゃない。
0093デフォルトの名無しさん2008/05/19(月) 08:58:48
少なくとも>>87は「平面上の二つの凸多角形の接線の式を求めよ」になる
接線の本数で重なるかどうかの判定はできる
0094デフォルトの名無しさん2008/05/19(月) 09:01:40
>>84
API使ってGUIで作ればいいんじゃね。
標準さえ使わなきゃいいんだろ、コンソールに表示しろとも書いてないし。
0095デフォルトの名無しさん2008/05/19(月) 09:03:46
>>92
なるほど、アセンブラまで落とさなくても低レベル関数を使う段がありましたね。

可変個引数や書式文字列の展開を課題で行うのは大変だということで
整数の入出力という制限がついているのかも。
0096デフォルトの名無しさん2008/05/19(月) 09:06:12
>>93
反例もあるよ。それが常に成り立つとは限らない
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6603.lzh
0097842008/05/19(月) 09:14:55
追記です。

※悪い例
##include <stdio.h>
void nyuuryoku(char *str , int *a){ scanf("%d",a); }
void print(char *str , int *a)
{
int i;
char numlist[10]={'0','1','2','3','4','5','6','7','8','9'};
char string[30];

for(i=0;str[i]!=NULL;i++){ string[i]=str[i]; }
string[i++]=numlist[*a];
while(str[i]!=NULL){ string[i++]=str[i]; }
string[i]='\0';
printf("%s",string);
}
int main()
{
int a;
nyuuryoku("%d",&a); //5と入力
printf("a=%d\n",a); //a=5表示されればOK

return 0;
}malloc/calloc関数自作の方だけでも大丈夫です。
0098デフォルトの名無しさん2008/05/19(月) 09:17:05
>>84
#include <stdlib.h>
#include <string.h>

void *malloc(size_t size)
{
return realloc(NULL,size);
}

void *calloc(size_t nmemb, size_t size)
{
void *p;
if(p=realloc(NULL,nmemb*size))
memset(p,0,nmemb*size);
return p;
}

/* おまけ */
void free(void *ptr)
{
realloc(ptr,0);
}
0099デフォルトの名無しさん2008/05/19(月) 09:19:19
mallocの実装コードなんて、Linuxとかからのソースコードから持ってくる
という強力なワザが取れる以上宿題に出す馬鹿講師はいないよ
0100デフォルトの名無しさん2008/05/19(月) 09:19:27
printfはpucharを使ってなんとか実装できそう?w
0101デフォルトの名無しさん2008/05/19(月) 09:21:43
>>100
おまけ以外は標準ライブラリは使用禁止だそうだ。
■ このスレッドは過去ログ倉庫に格納されています