C/C++の宿題を片付けます 107代目
レス数が1000を超えています。これ以上書き込みはできません。
【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう.
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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:520003デフォルトの名無しさん
2008/05/17(土) 21:05:40[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>プログラムを作成せよ。
>
>実行例
>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#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のように使用されています。
0007デフォルトの名無しさん
2008/05/17(土) 22:11:16C#はスレ違い というか宿題ですらないし
0008デフォルトの名無しさん
2008/05/17(土) 22:13:19JavaはダメだがC#はおkでいい。
0009デフォルトの名無しさん
2008/05/17(土) 22:13:430010デフォルトの名無しさん
2008/05/17(土) 22:16:11互換性ない言語をまとめるのもどうかなあ。
それに、ウルトラ過疎ってるがC#宿題スレは既にある。
0011デフォルトの名無しさん
2008/05/17(土) 22:20:07Javaの方が似てるくらいだし
0012デフォルトの名無しさん
2008/05/18(日) 01:55:30>>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[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(432)[/home/user0230/]./6586
>
(null): not found
Oh NO!!!
segmentation fault core dumped!
$fuga(433)[/home/user0230/]
0015デフォルトの名無しさん
2008/05/18(日) 05:00:23http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6588.txt
0016デフォルトの名無しさん
2008/05/18(日) 12:07:15[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:25printf("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[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:20http://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実行環境の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;
}
0022デフォルトの名無しさん
2008/05/18(日) 13:42:10どうも
>>19
不正な初期化(16行目)と出てコンパイルできないです
0023デフォルトの名無しさん
2008/05/18(日) 13:47:15問題文じゃそんなこと書いて無いのに
空間の中の直線だったらどーすんだ?
002419
2008/05/18(日) 13:48:46これならどう?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6590.txt
0025デフォルトの名無しさん
2008/05/18(日) 13:50:11その場合、
平行か/交わるか
のほかに、
平行ではなくかつ交わらない(同一平面上にない)
が必要ですね。
0026デフォルトの名無しさん
2008/05/18(日) 13:50:37大丈夫でした。ありがとうございました
0028デフォルトの名無しさん
2008/05/18(日) 13:53:130029デフォルトの名無しさん
2008/05/18(日) 13:57:420030デフォルトの名無しさん
2008/05/18(日) 14:03:05[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:26p1,p2を通る直線とp3,p4が通る直線が
交わるか
平行か(「交わる」場合もあれば、交わらない場合もある)
ねじれ(交わらない)
か、判定出来ないというのでつね(|)
0032デフォルトの名無しさん
2008/05/18(日) 14:46:39003320
2008/05/18(日) 15:17:13これならどう?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6593.txt
0035デフォルトの名無しさん
2008/05/18(日) 15:43:130036デフォルトの名無しさん
2008/05/18(日) 15:48:410037デフォルトの名無しさん
2008/05/18(日) 16:08:3923は煽りじゃないだろ
仕様が曖昧なのに勝手に問題を単純化してすぐにコードにしてしまう
癖はCプログラマに限らずプログラマの悪い癖(自分もそうかも)
しかも公開の場所にあげてしまうし...
今回のは平面だろうが空間だろうが、意匠とか著作権やら絡まないし
ましてや個人情報も含まれるわけでもない単純な数学問題だからいい
かも知れないが、それでは済まされない分野も相手にするのもまた
Cプログラミングの世界。そういったことも伝えるのも大事だと思うな。
003813
2008/05/18(日) 16:28:35ありがとうございます。
ですが38行目のあたり
(int solve_sub( int *m0, int *m1, int *m2, int *m3))
でエラーが出てしまいます(__)
0039デフォルトの名無しさん
2008/05/18(日) 16:31:02おまいが23でないとして...
クソ仕様にはクソコードで速攻応酬するしか自衛手段が無いんだよ。
クソ仕様しか作れないから質問(発注)するわけだからな。
0040デフォルトの名無しさん
2008/05/18(日) 16:34:01>>1
> ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
0041デフォルトの名無しさん
2008/05/18(日) 16:37:30[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
004313
2008/05/18(日) 17:17:18すいませんでした。
エラーメッセージ(?)なのかなぞなんですが
38: non-constant expression
と言う風に出ました。
0044デフォルトの名無しさん
2008/05/18(日) 17:24:54int 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:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6598.txt
0046デフォルトの名無しさん
2008/05/18(日) 18:01:55>課題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{
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;
}
004841
2008/05/18(日) 18:06:06ありがとうござます。
0050デフォルトの名無しさん
2008/05/18(日) 19:27:13[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#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解が無いパターンと途中を0で除算してしまう所の追加
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6599.txt
必ずしも正しいという保証はなし
0053デフォルトの名無しさん
2008/05/18(日) 20:33:26お早い回答ありがとうございます。
自分は格納用変数3つ作成ってところがよく分からなかったので、大変参考になります。
005430です
2008/05/18(日) 20:46:17本当にありがとうございます。質問なんですが、これは課題4の操作3゜まで完了したプログラムでしょうか・・
課題2の数値をこのプログラムに入れて実行した結果は多分正解でした。
0055デフォルトの名無しさん
2008/05/18(日) 21:00:25操作3ですよ
完璧に丸ごと問題通りにできているのかは怪しいですね。。
005630です
2008/05/18(日) 21:15:40課題5は課題4の操作3゜の部分を書き換えたら完成ですかね?
0058452
2008/05/18(日) 22:11:23[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の値が何度現れたのか表示する部分をどうすればよいのかわかりません。
よろしくお願いします。
005958
2008/05/18(日) 22:13:15回数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;
}
}
行数の関係で空白行を削除しています。よろしくお願いします。
0061デフォルトの名無しさん
2008/05/18(日) 22:29:29自分で考えて一応プログラムを作りました。
キーボードで数字を入力すると答えが出るようにしようと思いましたがうまくいきません。
#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] その他の制限:特に制限はありませんがなるべく簡単というか簡潔にお願いします。
006257
2008/05/18(日) 22:32:52各行を数字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
の解が出なければならないのですが・・・
006457
2008/05/18(日) 22:39:08お願いします(__)
0065デフォルトの名無しさん
2008/05/18(日) 22:52:23[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つ ctype.h isupper
006715
2008/05/18(日) 22:55:21すまんかった。これで解ける。
不定・不能は判定しなくなったので。あしからず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6601.txt
0068デフォルトの名無しさん
2008/05/18(日) 23:03:52返答ありがとうございます!
つい先ほどif分の内容を変えてみたところ正常に動作しました。
お手数おかけしてもうしわけありませんでした
}
0070デフォルトの名無しさん
2008/05/18(日) 23:43:240071デフォルトの名無しさん
2008/05/19(月) 00:03:062*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:52http://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:44nが小さくて、BRANCH_NUMが大きいときだけ、mapが有効ということで。
0075デフォルトの名無しさん
2008/05/19(月) 00:32:09partitionでより分けて
不要部分をeraseし
そのままcoutへ。
・・・char型配列使わないから反則負けだ。・3・
0076デフォルトの名無しさん
2008/05/19(月) 00:36:45まさに望んていた動作です。
ofstream file("data.txt");
等の命令は私の知識不足でどういったものかわからないのですが、調べてみようと思います。
本当にありがとうございます。
0077デフォルトの名無しさん
2008/05/19(月) 00:40:37#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π=3.14でお願いします
0079デフォルトの名無しさん
2008/05/19(月) 02:13:56#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:10C習い始めたばかりで困っていました;
ありがとうございます
0081デフォルトの名無しさん
2008/05/19(月) 02:19:010082デフォルトの名無しさん
2008/05/19(月) 05:53:390083デフォルトの名無しさん
2008/05/19(月) 06:06:310084デフォルトの名無しさん
2008/05/19(月) 08:13:14[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それな、C言語を使う意味ないでw
008684
2008/05/19(月) 08:17:29○○ 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[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インラインアセンブラで書けってことかな?
アーキテクチャはなんですか?
0089デフォルトの名無しさん
2008/05/19(月) 08:46:58そうなると、飲食店は菜園、家畜する施設が必要になるな・・・
0090デフォルトの名無しさん
2008/05/19(月) 08:51:080091デフォルトの名無しさん
2008/05/19(月) 08:54:33専門書読まないと辛いからといって、宿題に出ないとは限らない。
底辺の学校ならそうかもしれんがね。
0092デフォルトの名無しさん
2008/05/19(月) 08:55:34UNIXの専門書読んでwrite,readなどの低レベル関数使ったり
書式設定文字列を自前で展開しろって奴?
フローチャート書かせたりはありえてもコンパイル可能なコード
にしろというわきゃない。
0093デフォルトの名無しさん
2008/05/19(月) 08:58:48接線の本数で重なるかどうかの判定はできる
0094デフォルトの名無しさん
2008/05/19(月) 09:01:40API使ってGUIで作ればいいんじゃね。
標準さえ使わなきゃいいんだろ、コンソールに表示しろとも書いてないし。
0095デフォルトの名無しさん
2008/05/19(月) 09:03:46なるほど、アセンブラまで落とさなくても低レベル関数を使う段がありましたね。
可変個引数や書式文字列の展開を課題で行うのは大変だということで
整数の入出力という制限がついているのかも。
0096デフォルトの名無しさん
2008/05/19(月) 09:06:12反例もあるよ。それが常に成り立つとは限らない
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6603.lzh
009784
2008/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#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という強力なワザが取れる以上宿題に出す馬鹿講師はいないよ
0100デフォルトの名無しさん
2008/05/19(月) 09:19:270101デフォルトの名無しさん
2008/05/19(月) 09:21:43おまけ以外は標準ライブラリは使用禁止だそうだ。
0102デフォルトの名無しさん
2008/05/19(月) 09:21:4801034
2008/05/19(月) 09:35:30もう一度よろしくお願いします。
0104デフォルトの名無しさん
2008/05/19(月) 09:35:54何を勉強してんの?見えない敵と(ryってなるぞw
0106デフォルトの名無しさん
2008/05/19(月) 09:41:280107デフォルトの名無しさん
2008/05/19(月) 10:07:40resultの34を求める具体式を書いてみそ。
(13+25+41+61)/4なら、35だろ。
01084
2008/05/19(月) 10:18:11ホントすみません。よく分からないのですが。
具体式をどこに書けば?
0109デフォルトの名無しさん
2008/05/19(月) 10:33:55107みたいに、ここに書けばいいじゃん。
34、というのは間違いなんじゃないか?って事。
もしかして釣り?
0110デフォルトの名無しさん
2008/05/19(月) 10:52:52for(j=0;j<3;++j){
result[i][j]=
( sample[2*i][2*j] + sample[2*i][2*j+1]
+ sample[2*i+1][2*j] + sample[2*i+1][2*j+1] ) /4;
}
}
0111デフォルトの名無しさん
2008/05/19(月) 11:00:55(13+36+25+62)/4=34だろ
もう少し頭使えよ
0112デフォルトの名無しさん
2008/05/19(月) 11:05:09一言余計だろ、お前みたいな罵倒レスや上から目線で偉そうにしているカスって
実社会じゃ役に立ってないから、こういう場でしか強がれない小物なんだろ?w
0113デフォルトの名無しさん
2008/05/19(月) 11:06:12for(j=0;j<3;++j){
result[i][j]=
( sample[2*i][2*j] + sample[2*i][2*j+1]
+ sample[2*i+1][2*j] + sample[2*i+1][2*j+1] ) /4.0 + 0.5;
}
}
>>110 ヒントありがとう
0114デフォルトの名無しさん
2008/05/19(月) 11:06:57なんてこった。
0115デフォルトの名無しさん
2008/05/19(月) 11:09:43for (i=0;i<2;++i)
for(j=0;j<3;++j)
result[i][j]=(2+sample[2*i][2*j]+sample[2*i][2*j+1]+sample[2*i+1][2*j]+sample[2*i+1][2*j+1])/4;
0116デフォルトの名無しさん
2008/05/19(月) 11:12:260117デフォルトの名無しさん
2008/05/19(月) 11:24:58問題を誤読しといて釣りあつかいする107=109よりはマシだろw
0118デフォルトの名無しさん
2008/05/19(月) 11:39:46なるほど集計前後の比率を見て、2*2ずつ切り出せばいいと推測する訳か。
まあでもパズルスレじゃないし、出題者が間違う場合もあるから
「4つ」の意味を明記すべきだとは思う。
0119デフォルトの名無しさん
2008/05/19(月) 11:47:150120デフォルトの名無しさん
2008/05/19(月) 11:50:22#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <string.h>
size_t Strlen(char * NumStr)
{
size_t len = 0;
for(len = 0;NumStr[len];len++) return len;
}
void GetNum(char * NumStr,size_t len)
{
size_t i;
for(i=0; i < len; i++) putchar(NumStr[i]);
}
void *Malloc(char *NumStr, size_t size)
{ return realloc(NumStr, size); }
0121デフォルトの名無しさん
2008/05/19(月) 11:50:57void *Memset(char *NumStr,int c, size_t n)
{
char *p = &NumStr[0];
while(n > 0){ *p = c; p++; n--; }
return NumStr;
}
void *Calloc(char *NumStr,size_t nmemb,size_t size)
{
size_t n = nmemb*size;
NumStr = (char *)Malloc(NumStr,n);
Memset(NumStr,'\0',n);
return NumStr;
}
int main()
{
char *NumStr=NULL;
int limits=0,ch=0,rank=1;
size_t len = 0;
int Max = INT_MAX;
for(;Max != 0;){ Max /= 10; rank++; }
NumStr = (char *)Calloc(NumStr,sizeof(char),rank);
for(limits= 0;ch != '\n'&& limits < rank-1;limits++){
ch = getchar();
if(ch != '\n') NumStr[limits] = (char)ch;
}
len = Strlen(NumStr);
GetNum(NumStr,len);
return 0;
}
0122デフォルトの名無しさん
2008/05/19(月) 12:00:000123デフォルトの名無しさん
2008/05/19(月) 12:07:110124デフォルトの名無しさん
2008/05/19(月) 12:09:23標準ライブラリ関数printfやputs、scanfやgets等を使用してはいけない!
まるごと作成すること。入出力関数を作成する際にも標準ライブラリ
関数は使用してはいけない。
これらの条件が分かっていれば、標準ライブラリが何も
入出力に関するものだけではないと分かっているとは思うのだが・・・
要するに、reallocだのgetcharだの、そういったものも当然ダメぽ
0125デフォルトの名無しさん
2008/05/19(月) 12:11:39アセンブリでBIOSの機能使って文字表示とかならできるけどそれってCじゃないよな・・・
0126デフォルトの名無しさん
2008/05/19(月) 12:36:31大学特定した
0127デフォルトの名無しさん
2008/05/19(月) 13:13:20>>113
0128デフォルトの名無しさん
2008/05/19(月) 13:22:03ベクトルの内積で、接触or交差の判定は出来るだろうけど接線が判らんな。
0129デフォルトの名無しさん
2008/05/19(月) 13:39:130130デフォルトの名無しさん
2008/05/19(月) 13:51:310131デフォルトの名無しさん
2008/05/19(月) 13:52:53お前、よく読めよ。
おまけの問題では「malloc/calloc関数以外の標準ライブラリ関数を使用してよい。」と書いてあるだろ。
0132121
2008/05/19(月) 14:02:400133デフォルトの名無しさん
2008/05/19(月) 15:19:050134121
2008/05/19(月) 15:40:22#include <stdio.h>
#define SIZE 10
int main()
{
char str[SIZE] = {'\0'};
int i;
for(i=0;i<SIZE;i++)
str[i] = getchar();
for(i=0;i<SIZE;i++){
if(str[i] >= 'A' && 'Z' >= str[i])
putchar(str[i]);
}
putchar('\n');
return 0;
}
0135デフォルトの名無しさん
2008/05/19(月) 16:51:08[2] http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6605.zip
[3] 環境
[3.1] Windows XP
[3.2] gcc
[3.3] C
[4] 2008年5月22日
[5] #include<conio.h>が使えません
どうかよろしくお願いします
013692
2008/05/19(月) 16:55:59仕事の合間に作ってみました。
参考になればと思います。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6606.txt
013795
2008/05/19(月) 16:57:140138121
2008/05/19(月) 17:16:27http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6607.lzh
4-1は答え出たけど4-2は解けなかった
ちなみに数値は打ち込むのがめんどうだったのでファイルから読み込ませてます。
0139デフォルトの名無しさん
2008/05/19(月) 17:21:19[2] 問題文(含コード&リンク):
一般の連立1次方程式の解法プログラムを作成しなさい
[3] 環境
[3.1] OS: windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008/05/20
[5] その他の制限:連立四元一次方程式を解けるプログラムであること
0141デフォルトの名無しさん
2008/05/19(月) 17:38:50未知数4に対して式が何個あるのかが分からないことには手がつけられん
0142デフォルトの名無しさん
2008/05/19(月) 17:48:17一般の、と書いてあるから可能な限りたくさんなのかな。
んで、最低でも連立四元一次方程式がとければよい、かな。
n元なら最低でもn式必要なんでしたっけ?すっかり忘れてますが。。
0143デフォルトの名無しさん
2008/05/19(月) 17:50:16説明不足ですいません。
未知数4の場合は式が4つだと思うんですが、未知数4で式が3だった場合、答えが出るのですか?
数学素人なんで変な事を言ってるかもしれません。
0144139
2008/05/19(月) 17:55:52可能な限り沢山なのかわかりませんが、連立五元や連立六元などは授業で扱ったことがないので
おそらく一元一次方程式から四元一次方程式まで解ければ問題ないはずです。
0145デフォルトの名無しさん
2008/05/19(月) 17:59:083x3はまだいいとして4x4の行列式の計算をつらつら書くのが面倒くさすぎる
0146デフォルトの名無しさん
2008/05/19(月) 18:01:47式3つ以下だと解が一意に決まらない。
式4つの場合、逆行列があれば解が求まる。
0147デフォルトの名無しさん
2008/05/19(月) 18:02:11こんな公式があるんですねえ。
適当にループでくるくるしたらどうにかできないかな?
0148デフォルトの名無しさん
2008/05/19(月) 18:02:443x3ならwikiにも書いてある
http://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%EF%BC%9D%E3%82%B6%E3%82%A4%E3%83%87%E3%83%AB%E6%B3%95
0149121
2008/05/19(月) 18:18:03手入力するのめんどうなのでファイルからデータよみこませてます
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6608.lzh
0150デフォルトの名無しさん
2008/05/19(月) 19:05:18[2] 問題文(含コード&リンク):
100桁以内の整数を2つ読み込み、その和・差・積・差をそれぞれ
出力するプログラムを作成せよ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 5月20日23:55まで
[5] その他の制限:
ヘッダは<stdio.h>、<math.h>しか習っていません。
main関数で整数2つを読み込み、和・差・積・商はそれぞれ違う関数内で
演算しろとの事です。
また、グローバル変数は極力使うなと言われました。
口頭での説明だった為、問題が曖昧ですいません。
前スレで全く同じ問題を質問した人がいたのですが、解答を見ても内容が
高度過ぎて全く理解できず、重複で申し訳ないと思いつつも質問させて
もらいました。
整数を文字列としてchar型配列に格納し、それを-48してint型に変換(?)
してから4bitずつ25個に振り分けて―
―といった風に教えて貰ったのですが、結局ほとんど意味が分からないという始末…
講師いわく最終的に200行以上になるとの事ですが、もしよろしければよろしくお願いします。
0151デフォルトの名無しさん
2008/05/19(月) 19:28:36[2] 問題文(含コード&リンク):長いのでこちらに
(http://www.youlost.mine.nu/html999/img/4451.zip)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ gcc
[3.3] 言語: C
[4] 5月20日火曜日朝8時まで
[5] その他の制限: 特になし
0152デフォルトの名無しさん
2008/05/19(月) 19:30:130153121
2008/05/19(月) 20:30:14たぶん答えとしては意味合いが違ってるだろうけどはっとく
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6611.txt
0154側近中の側近 ◆0351148456
2008/05/19(月) 21:18:10(っ´▽`)っ
小行列式に分割するってのはどうなの?
再帰を使えばできるような気がするよ
0155デフォルトの名無しさん
2008/05/19(月) 21:26:23前スレで解答出てるんならそのリンクも張って具体的にどこがどう分からないのかも書けよ
あと、「多倍長」でググレ
0156デフォルトの名無しさん
2008/05/19(月) 22:05:52期待してる
0157側近中の側近 ◆0351148456
2008/05/19(月) 22:06:37(っ´▽`)っ
がんばってる☆
0158デフォルトの名無しさん
2008/05/19(月) 22:07:58[2] 文字列sを先頭から順に1行に1文字ずつ表示する関数putvを作成せよ。
void putv(const char*s)
[3]
[3.1]Windows XP
[3.3]C++
[4] 期限 5月20日の午後3時まで
[5] 特になし
よろしくお願いします
0159デフォルトの名無しさん
2008/05/19(月) 22:21:12void putv(const char*s)
{
for(int i = 0 ; s[i] != '\0' ; i++)
{
printf("%c\n",s[i]);
}
}
0160デフォルトの名無しさん
2008/05/19(月) 22:22:26#include <stdio.h>
#include <string.h>
void putv(const char*s)
{
size_t len = strlen(s);
size_t i;
for(i = 0; i < len; i++){
putchar(s[i]);
putchar('\n');
}
}
0161デフォルトの名無しさん
2008/05/19(月) 22:36:01強烈に難しいです…できた人は神!
内容:
[1] 授業単元: プログラミング概論第二
[2] 問題文(含コード&リンク):
ANNという最近傍探索のアルゴリズムがある。
このアルゴリズムは以下のステップを用いる
1)n次元k個のデータ群からkd木を作成する
2)探したいあるn次元のクエリから、kd木に格納されている点を探す
3)クエリと探し出された点との距離をdとする
4)距離dの超球を書く
5)「超球に触れているすべてのkd木で作成されたbox」内にあるすべての点をリストアップする
6)リストアップされた点を元に最も距離の近い点を探す。
というものです。
1〜4までは作りましたが
5)がよくわかりません…解決できる方どうか助けてください!
[3.1] OS:windows
[3.2] visual studio 2007
[3.3] 言語: C
[4] 期限: 2008年5月20日まで]
[5] なし
0162161
2008/05/19(月) 22:40:18(nlogn)の計算量を極力スポイルしないよう、(5)のステップに注意し作成せよ
だそうです。
0163デフォルトの名無しさん
2008/05/19(月) 22:54:150164側近中の側近 ◆0351148456
2008/05/19(月) 22:57:25#include <stdio.h>
#include <stdlib.h>
#define MATRIX_FACT(row, col) a[(row) * rowLength + (col)]
#define PART_MATRIX_FACT(row, col) partMatrix[(row) * (rowLength - 1) + (col)]
double getDeterminant(double *a, int rowLength, int colLength);
int main(void){
double a[4][4] = {{1, 2, 3, 0}, {4, 5, 6, 0}, {7, 8, 9, 0}, {2, 4, 6, 8}};
//double a[4][4] = {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}};
int rowLength = 4;
int colLength = 4;
//double a[3][3] = {{0, -2, 0}, {-1, 3, 1}, {4, 2, 1}};
//int rowLength = 3;
//int colLength = 3;
double determinant = (double)0;
determinant = getDeterminant((double *)a, rowLength, colLength);
printf("determinant=%f\n", determinant);
return 0;
}
(続く)
0165側近中の側近 ◆0351148456
2008/05/19(月) 22:58:08double getDeterminant(double *a, int rowLength, int colLength)
{
double determinant = (double)0;
double minorDeterminant = (double)0;
double *partMatrix = NULL;
int i = 0;
int j = 0;
int k = 0;
if(rowLength < 2 || colLength < 2 || rowLength != colLength){
goto catch;
}
if(rowLength == 2){
determinant = MATRIX_FACT(0, 0) * MATRIX_FACT(1, 1) - MATRIX_FACT(0, 1) * MATRIX_FACT(1, 0);
}
else{
for(i = 0; i < rowLength; i++){
partMatrix = (double *)malloc(sizeof(a[0]) * (rowLength - 1) * (colLength - 1));
for(j = 0; j < i; j++){
for(k = 0; k < colLength - 1; k++){
PART_MATRIX_FACT(j, k) = MATRIX_FACT(j, k + 1);
}
}
for(j = i; j < rowLength - 1; j++){
for(k = 0; k < colLength - 1; k++){
PART_MATRIX_FACT(j, k) = MATRIX_FACT(j + 1, k + 1);
}
}
(続く)
0166側近中の側近 ◆0351148456
2008/05/19(月) 22:58:48printf("partMatrix={");
for(j = 0; j < rowLength - 1; j++){
printf("{");
for(k = 0; k < colLength - 1; k++){
printf("%f,", PART_MATRIX_FACT(j, k));
}
printf("\b},");
}
printf("\b}\n");
minorDeterminant = getDeterminant(partMatrix, rowLength - 1, colLength - 1);
printf("minorDeterminant=%f\n", minorDeterminant);
free(partMatrix);
determinant += minorDeterminant * (i % 2 == 0 ? 1 : -1) * MATRIX_FACT(i, 0);
}
}
catch:
return determinant;
}
0168デフォルトの名無しさん
2008/05/19(月) 23:29:040169側近中の側近 ◆0351148456
2008/05/19(月) 23:35:01|▽`)っ ニヤニヤ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6613.txt
0170デフォルトの名無しさん
2008/05/19(月) 23:35:03不必要にスレが流れるのを考慮して、マナーとして使うべきだろ
0171側近中の側近 ◆0351148456
2008/05/19(月) 23:36:07(っ´ω`)っ いきててごめんね
0172デフォルトの名無しさん
2008/05/20(火) 00:04:07[2] 問題文(含コード&リンク):
作成した「画像表示」のプログラムを、同じ画像を横に並べて
表示するように修正せよ(「画像表示」のボタンに対応するプログラムを修正)。
作成したプログラムはこちらです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6615.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: visual studio 6.0
[3.3] 言語:C++
[4] 期限:20日正午まで
[5] その他の制限:
「画像表示」のボタンに対応するプログラムは下の通りです。
CWnd* myPICT=GetDlgItem(IDC_PICT);
CClientDC myDC(myPICT);
CRect myRECT;
my PICT->GetClientRect(myRECT);
int x,y;
for(y=0;y<height;y=y+1)
for(x=0;x<width;x=x;1)
myDC.SetPixel(x,y,RGB(r[y][x],g[y][x],b[y][x]));
よろしくお願いします。
0173デフォルトの名無しさん
2008/05/20(火) 00:04:21質問です。
今、最近傍探索を調べているのですが、意味がよくわからないところがありますので、教えていただけますでしょうか。
1) k次元(ユークリッド)空間R^k 内にデータが n個散らばっている。
2) ここに、点P がある。
3) 点P にもっとも「近い」データを探し出したい。
というのが最近傍探索で、問題のアルゴリズムは、
4) , 3) でもっとも近いデータを探すのに「n 個のデータすべてについて距離を求め、一番距離が小さいものを求める」のは計算量が多くて大変!
5) そこで、とりあえず適当なデータQ と P との距離dを求め、
6) 辺の長さが 2d, 中心がP, 辺は座標軸に平行である k次元立方体 S を考え、
7) 領域探索アルゴリズムにて S 内にあるデータをすべて列挙し、
8) S 内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
ということでしょうか。
そうすると、5) の Q をとりあえず探す、というのが、非常に大事で、まかりまちがって P から遠い Q を選んでしまうと計算量を少なくできないですが、Q の選び方はどうすればよろしいのでしょうか?
以上の解釈でいいのでしょうか。
0174デフォルトの名無しさん
2008/05/20(火) 00:38:41int x,y;
for(y=0;y<height;y=y+1)
for(x=0;x<width;x=x;1)
myDC.SetPixel(x,y,RGB(r[y][x],g[y][x],b[y][x]));
↓
int x,y,x2;
for(y=0,x2=0;y<height;y=y+1)
for(int i=0;i<2;i++)
for(x=0;x<width;x=x+1,x2++)
myDC.SetPixel(x2,y,RGB(r[y][x],g[y][x],b[y][x]));
0175デフォルトの名無しさん
2008/05/20(火) 01:13:11#include <stdio.h>
#define MAX 11
void putv(const char *s) {
do { putchar(*s++); printf("\n");
}while( *s != NULL && *s!='\n');
}
int main(void) {
char str[MAX];
fgets(str,MAX,stdin);
putv(str);
return 0;
}
0176151 ◆rGsyzf.Kp2
2008/05/20(火) 01:58:21やってくれるかたがいればおねがいします。
0177デフォルトの名無しさん
2008/05/20(火) 02:12:50ありがとうございました。
言い忘れたんですけど画像と画像の間を少し空けて表示させたいんですけど
どうなるでしょうか?
0178デフォルトの名無しさん
2008/05/20(火) 02:37:37#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;
void putv( const char* );
int main()
{
char s[] = "teststring";
putv( s );
}
void putv( const char* s )
{
string str( s );
copy( str.begin(), str.end(), ostream_iterator< char >( cout, "\n" ) );
}
どうすか、この華麗なるSTL。w
0179デフォルトの名無しさん
2008/05/20(火) 02:49:070180デフォルトの名無しさん
2008/05/20(火) 02:59:130181デフォルトの名無しさん
2008/05/20(火) 03:23:570182デフォルトの名無しさん
2008/05/20(火) 03:40:330183デフォルトの名無しさん
2008/05/20(火) 03:45:320184デフォルトの名無しさん
2008/05/20(火) 03:48:490185デフォルトの名無しさん
2008/05/20(火) 04:00:19たとえばこの板でもおすすめの入門書
Accelareted C++ にもこういう構文が普通にでてくる。
「何やってんだかわかりにくい」ってのは STL の勉強不足だろ単に。
0186デフォルトの名無しさん
2008/05/20(火) 04:01:20面倒な、処理時間が掛かるようなことをして何がしたいんだと?
0187デフォルトの名無しさん
2008/05/20(火) 04:06:56しかし課題の趣旨にはあわんな。
0188デフォルトの名無しさん
2008/05/20(火) 04:10:32Effective C++くらい読もうよ。
0189デフォルトの名無しさん
2008/05/20(火) 04:17:28do { printf("%c\n",*s++);}while( *s != NULL); }
と比較したら、倍近く差が出るぞ?
0190デフォルトの名無しさん
2008/05/20(火) 04:21:52課題がCではなくあえてC++だってところがミソだな。
Cライクなコードは書くなってことだから
型安全性と拡張性を持たないライブラリ関数は
いくら早くてもNGだろう。
ここまで */
0191デフォルトの名無しさん
2008/05/20(火) 04:25:310192デフォルトの名無しさん
2008/05/20(火) 04:53:43使いどころをわきまえてない。
0193デフォルトの名無しさん
2008/05/20(火) 04:55:38> いくら早くても
日本語でおk。C++だろうとwhileは特定の言語のものじゃないんで、あしからず。
あと、C++って結局Cの拡張。何か別物と勘違いする奴って笑われるぞw
0194側近中の側近 ◆0351148456
2008/05/20(火) 06:40:30>>169はどう?
0195デフォルトの名無しさん
2008/05/20(火) 06:54:36http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6617.txt
0196デフォルトの名無しさん
2008/05/20(火) 07:01:21ちゃんとは見ていませんが、Cプログラムとしては
なかなか良い作品ではないかと思いまつ。
だけど一般次数の行列式の計算なんてC言語のプログラミング実習
の問題の適切な範疇を遥かに超えてしまった課題じゃないかと思います。
C言語の世界はシステム記述が中心で一般論を非常に重視する世界だと思
います。
数値計算は数学の教科書の一般論がなかなか適用できず、問題に応じて
適切な方法を選択(考案)しなければいけない世界です。相当、系統の
違う専門分野だと思います。(一般論は欲しいのですが...)
0197デフォルトの名無しさん
2008/05/20(火) 07:29:36これは・・・w
0198139
2008/05/20(火) 07:43:59早速ありがとうございます。実行して出力した結果がどういうものか分からないんですが、
partMatrixとminorDeterminateがなにを表しているのか教えてください
あとプログラムの使い方も教えてほしいです。
たとえば3x3の行列式
4x+6y+2z=4000,2x+8y+6z=5000,6x+4y+4Z=4200
の場合と4x4の行列式
2w+1x+4y+3z=5,3w+2x+5y+0z=0,4w+3x+2y+1z=3,5w+0x+3y+2z=0
の場合の解を求めるには
このプログラムをどのようにすればいいのでしょうか?
0199デフォルトの名無しさん
2008/05/20(火) 07:51:46whileの話じゃない。詳しくはEffective C++参照。
0200173
2008/05/20(火) 07:56:47時間切れです。残念です。
こっそり仕事中にやれるのならやりますので(苦笑)、16:00 以降 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm をチェックしてください。
k-d tree の多次元化ははじめてで、おもしろいのではありますが‥‥‥、こういうおもしろい問題は、もっとはやく投げてほしかったですね。
まだエラーがとれないものを、http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6618.txt においておきます。
眠い。
0201デフォルトの名無しさん
2008/05/20(火) 07:58:16<stdio.h>が<cstdio>になり、<iostream>を使うよう推奨されても
<stdio.h>を使う人間は使い続ける。
0202デフォルトの名無しさん
2008/05/20(火) 08:03:41流儀
変数の命名の方法とか、所有権とか...
デフォを決めとかないと、コードが大きくなってしまった
場合に急ぎの作業が入ったらキツクなるから
流儀が設定されることもある。
必要悪
0203デフォルトの名無しさん
2008/05/20(火) 08:11:43C++プログラムで<stdio.h>を使う人は10年以上前にC++を習得した人。
つまりおっさんPG。
0204デフォルトの名無しさん
2008/05/20(火) 08:14:08Cに関しても10年以上前に習得した人ってこと。
どう考えてもおっさんPG。
0205デフォルトの名無しさん
2008/05/20(火) 08:19:020206デフォルトの名無しさん
2008/05/20(火) 08:22:50「アジャイルプラクティス-達人プログラマに学ぶ現場開発者の習慣」より
0207デフォルトの名無しさん
2008/05/20(火) 08:25:28C プログラムとしての指摘:
> double a[4][4] = ...
> getDeterminant((double)*a, ...)
これは多くの処理系で動くけれど、
ANSI Cの規格には従っていないことに注意。
アルゴリズムとしての指摘:
余因子展開で行列式を計算するのは O(n!) かかるので、非常に遅い。
ガウスの消去法などを用いると O(n^3) で計算できる。
0208デフォルトの名無しさん
2008/05/20(火) 08:26:54見出しだけだと誤解を招くよ
0209デフォルトの名無しさん
2008/05/20(火) 08:29:37「行列式 (determinant)」という言葉を調べてこい。
4x+6y+2z=4000,2x+8y+6z=5000,6x+4y+4Z=4200 みたいなのは
行列式とは言わない。せいぜい 3×3連立方程式。
0210デフォルトの名無しさん
2008/05/20(火) 08:33:50ウェブも本もcstdioはなかなかないのでは
0211デフォルトの名無しさん
2008/05/20(火) 08:36:060212デフォルトの名無しさん
2008/05/20(火) 08:41:35現代において、自分が知っていることだけがすべてだと思う
思い上がりの方がバカを通り越した井の中の蛙だろ
0213デフォルトの名無しさん
2008/05/20(火) 08:46:53光に関しても関わってくる話ではあるが、光速度を知らなかったのだよ、
アインシュタインは。何が重要か?必要に応じて必要なものを
取り込む頭がない奴は、現代のような無駄な生活をしていても
その無駄さえも 必要 という勘違いを始めるから困る。
または、無駄を省かない、省けない。誰かに指摘されるまでそうしている。
0214デフォルトの名無しさん
2008/05/20(火) 08:48:14<cstdio>よりも<iostream>を使うことが推奨されているから
<cstdio>を使っているC++の本は少ないだろうけど
<stdio.h>を使っているC++の本は(多分もう)一冊もないだろうと思う。
古い本でも版を重ねると直しているくらいだし。
少なくともC++の宿題に今<stdio.h>を使ったら
歳の行った人に答えを聞きましたってばれちゃう。
学校でもC++の授業で<stdio.h>は教えないだろうから。
0215デフォルトの名無しさん
2008/05/20(火) 08:54:10それは間違いだ。
アインシュタインの相対性理論は、光速度一定と言う仮定の上に成り立っている。
と言うことは、実際の速度がどれくらいかは兎も角光速度を知らないということにはならないな。
処で、馬鹿といわれて過剰に反応するのは何故だろう。余程、自覚があるのだろうか。
0216デフォルトの名無しさん
2008/05/20(火) 08:59:590217デフォルトの名無しさん
2008/05/20(火) 09:15:16チームメンバーから袋だろ。w
名前空間を汚染するなって。
0218デフォルトの名無しさん
2008/05/20(火) 09:25:06その流儀に宗教が紛れ込みやすい。
というか完全に除去するのは不可能。
宗教は流儀に強い信頼性を与えるから
だろうけど。
修羅場で無くなった状態で、流儀が伝統
になってしまうとそこに潜む宗教という強い
力が全体を緩慢かつ堅固に拘束していくと
やっかい。
0219デフォルトの名無しさん
2008/05/20(火) 09:25:39脱線すんな
0220デフォルトの名無しさん
2008/05/20(火) 09:54:27C++標準にSTLが組み込まれたのは同時期だから
いまだに<stdio.h>を使う人が
STLを使ったコードを理解できなくても不思議はない。
0221デフォルトの名無しさん
2008/05/20(火) 10:02:1610年以上前の規格を使い続けるやつなんて存在価値なし。
0222デフォルトの名無しさん
2008/05/20(火) 10:02:32さすがに知らないとか理解できないとか、うざい。
あのコードが 無駄 だと気づけw
0223デフォルトの名無しさん
2008/05/20(火) 10:08:55> どうすか、この華麗なるSTL。w
こいつだろ、さっきっから理解できない奴がいる、自分は知ってるみたいな
華麗とか、マジでそれ 糞 だからw
0224デフォルトの名無しさん
2008/05/20(火) 10:14:22おまえら反応しすぎ。どこまでコンプレックスなんだ。
0225デフォルトの名無しさん
2008/05/20(火) 10:17:31ふぅ〜ん、もう10年以上前ってレベルじゃねーぞっ。んで、知っているからって何?
知らない奴を見つけて楽しんでいるわけ?ケツの穴が小せぇなぁ。性格悪ぅ〜〜。
知っている奴もいるが、何そんなに必死に知らない奴を探してんの?って思われるだけだぞw
0226デフォルトの名無しさん
2008/05/20(火) 10:19:58IOマニピュレータ面倒すぎ
0227デフォルトの名無しさん
2008/05/20(火) 10:21:44過去に(模擬)宿題として出てたような
0228デフォルトの名無しさん
2008/05/20(火) 10:25:49いつものやつっぽいからそっとしておいてやれ
0229デフォルトの名無しさん
2008/05/20(火) 10:26:050230デフォルトの名無しさん
2008/05/20(火) 12:15:45うちはC++の講義すら無い件。
Cの講義のみでひたすら<stdio.h>
0231デフォルトの名無しさん
2008/05/20(火) 12:46:13[2] 体重と身長の値から算出される指数の1つに
Body Mass Index(BMI)がある。
体重[kg]を身長[m]の2乗で割って計算し,
標準値は22.0とされている。
【問題】
キーボードから身長と体重を入力すると,
BMIが画面に出力されるプログラムを作成しなさい。
[3] 環境
[3.1]Windows
[3.2]VC?(よくわかりません)
[3.3]C++
[4]5月27日 17時まで
[5]特にありません。
よろしくお願いします!
0232デフォルトの名無しさん
2008/05/20(火) 13:19:11// 「キーボードから入力」と「画面に出力」が標準入出力のことじゃないならしらね。
#include <iostream>
int main()
{
int height;
int weight;
std::cin >> height >> weight;
std::cout << weight / (height / 100.0 * height / 100.0);
return 0;
}
0233161
2008/05/20(火) 14:45:22えっと、ここにc++版があります。
http://www.cs.umd.edu/~mount/ANN/
力不足なことに、私はc++を全く理解することができません。理解は時間があればできそうですが、時間が足りません(汗
>今、最近傍探索を調べているのですが、意味がよくわからないところがありますので、教えていただけますでしょうか。
>1) k次元(ユークリッド)空間R^k 内にデータが n個散らばっている。
>2) ここに、点P がある。
>3) 点P にもっとも「近い」データを探し出したい。
>というのが最近傍探索で、問題のアルゴリズムは、
>4) , 3) でもっとも近いデータを探すのに「n 個のデータすべてについて距離を求め、一番距離が小さいものを求める」のは計算量が多くて大変!
>5) そこで、とりあえず適当なデータQ と P との距離dを求め、
>6) 辺の長さが 2d, 中心がP, 辺は座標軸に平行である k次元立方体 S を考え、
>7) 領域探索アルゴリズムにて S 内にあるデータをすべて列挙し、
>8) S 内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
>ということでしょうか。
最近傍探索の考えはあっています。
ですが
5)まずkd木を探索して、点Pがどの立方体に所属するかどうかをさがし、その立方体の中に入っている点Q と P との距離dを求め超球を書く
6)超球に接している立方体、超球の中にある立方体をすべてリストアップする
7) 領域探索アルゴリズムにて 立方体群内にあるデータをすべて列挙し、
8) 立方体群内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
のうち領域探索アルゴリズムがわかりません。
どのようなアルゴリズムを組めば計算量が少なくて済むのか知恵を御借りしたいと考えて質問させていただきました。
0234デフォルトの名無しさん
2008/05/20(火) 14:47:52[2] 以下の処理を順に行うプログラムを作成しなさい。
>232 ありがとうございました!
まだ問題があったのでまたよろしくお願いします!
1. キーボードから整数を入力する。
2. 入力された整数が3の倍数のとき,
画面に「3の倍数です」と表示する。
[3] 環境
[3.1]Windows
[3.2]VC
[3.3]C++
[4]5月27日 17時まで
[5]なし。
0235デフォルトの名無しさん
2008/05/20(火) 14:55:48if ( 入力 % 3 == 0 )
{
出力 3の倍数です
}
>>232 の内容と組み合わせて作りな
0236c言語素人 ◆K0sCe6ES.U
2008/05/20(火) 16:05:08[1] 授業単元:プログラミング実習
[2] 問題文(含コード&リンク):
各自で、カラー自然画像(出来れば画像中のオブジェクトが豊かな物)をみつけ、
kmeansによって画像中の要素を分類せよ。さらに、分類の数を変えながら、変化を観察せよ。(原文のまま)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限: 2008年5月23日 13:00まで
[5] その他の制限: 制限は特にありません。
ppmフォーマットの画像を読み込んで分類する(クラスター分析?)プログラムと言われたのですが、さっぱりわからないです・・・orz
どうかみなさんご協力おねがいしますm(_ _)m
0237161
2008/05/20(火) 16:05:14ちなみに、233で書いたやつがANNという手法です。
ちなみに
>4) , 3) でもっとも近いデータを探すのに「n 個のデータすべてについて距離を求め、一番距離が小さいものを求める」のは計算量が多くて大変!
>5) そこで、とりあえず適当なデータQ と P との距離dを求め、
>6) 辺の長さが 2d, 中心がP, 辺は座標軸に平行である k次元立方体 S を考え、
>7) 領域探索アルゴリズムにて S 内にあるデータをすべて列挙し、
>8) S 内のデータすべてと P との距離をそれぞれ求めて、一番距離小さいものを求める
にあるように、超球の中にある点すべてについて探索するというのでは、結局全点について距離を比較しないといけなくなるので、
結局n^2の話になってしまいます。
kd木のnlognをスポイルしたくないというのはここに絡んできます。
ANNのこの手法が理解できればいいのですが…
ちなみに期限が延びましてあと2日になりました。
最悪223に書いたサイトからソース引っ張ってきてcで書いた私のソースとc++で書かれているソースをドッキングして性能を確かめることを考えていますが…
0238デフォルトの名無しさん
2008/05/20(火) 17:45:01このtxtに追加して提出するように言われました。
助けてくれる方お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6619.txt
0239デフォルトの名無しさん
2008/05/20(火) 17:54:20何その頭の悪そうな日本語もまともに書けていない問題。
おまけに、C++でお願いされる内容がC言語理解度確認って何さ。
挙句の果てに、「文字列変数」ってstd::stringじゃないのかよ。
0240デフォルトの名無しさん
2008/05/20(火) 17:55:250241デフォルトの名無しさん
2008/05/20(火) 17:59:180242デフォルトの名無しさん
2008/05/20(火) 18:23:060243デフォルトの名無しさん
2008/05/20(火) 19:16:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6621.c
これで間違いなく優だぜb
0244デフォルトの名無しさん
2008/05/20(火) 19:21:41you 要修正
0245デフォルトの名無しさん
2008/05/20(火) 19:36:23問10の回答って再起呼び出し? LISP?
0246デフォルトの名無しさん
2008/05/20(火) 19:37:08[2] 問題文int型変数x,yをキーボードから値を入力し、その大小を判定する関数funcを作成せよ
[3] 環境
[3.1] OS: xp
[3.2] コンパイラ名とバージョン: VC 6.0だと思います
[3.3] 言語: C
[4] 期限:今週中
[5] その他の制限: ポインタを使用する
お願いしますm(_ _)m
0247デフォルトの名無しさん
2008/05/20(火) 19:40:36包丁でたまねぎを半分に切るのはどうすれば?っていう、そんなかんじ。
0248デフォルトの名無しさん
2008/05/20(火) 19:52:50再帰
0249デフォルトの名無しさん
2008/05/20(火) 19:53:55int func(int* x, int* y){
if (*x > *y) {
return 1;
} else if (*x < *y) {
return -1;
}
return 0;
}
一応こんな感じで作ってみた。
まぁ>>247の言う通りこの位自分でやるべきだとは思ったけどもね
0250デフォルトの名無しさん
2008/05/20(火) 19:55:11#define MAX_VAL(x,y) return(x>y?x:y)
初めて引数付きマクロ書いた
動くか分からん
0251デフォルトの名無しさん
2008/05/20(火) 19:55:44if (*x > *y) {
return 1;
} else if (*x < *y) {
return -1;
}
return 0;
}
0252デフォルトの名無しさん
2008/05/20(火) 21:13:49[2] 問題文(含コード&リンク):
入力された数値を\とカンマ区切りに編集する関数YenConvertを作成せよ。
int YenConvert(int kingaku,int mode,char *buffer,int result);
引数1:編集用の数値(4桁以上でかつint型の範囲内の入力のみと仮定)
引数2:編集モード
1:引数1の先頭に\を付ける(1000→\1000)
2:引数1の先頭に\を付け、カンマを挿入(1000→\1,000)
引数3:数値編集の格納領域アドレス
引数4:引数3のアドレス先の領域サイズ
戻り値は正常:0 モード誤り:-1 編集用領域不足:-2
[3] 環境
[3.1] OS:XP(自宅) / Vista(実習室)
[3.2] コンパイラ名とバージョン:VC6.0
[3.3] 言語: C言語
[4] 期限:(0時を挟むので)明日 午前2時頃
[5] その他の制限:特にありません。
春季基本情報合格祝いという名目で、ポインタなんて名前しか知らないのに課題が出ました…。
無茶と失礼は承知の上で、寝るまでの期限でお願い致します。
0253デフォルトの名無しさん
2008/05/20(火) 21:16:49記述漏れとミスがあったので訂正します。
int YenConvert(int kingaku,int mode,char *buffer,int bufferlen)
[5] その他の制限:YenConvertでは編集のみ。mainで値から編集した文字列の出力も行なうこと。
0254デフォルトの名無しさん
2008/05/20(火) 22:23:17[2] 問題文(含コード&リンク):for文を使ってひし形の作成せよ。
[3] 環境
[3.1] OS:Windows vista
[3.2] コンパイラ名とバージョン: 通常使用のPCがないのでわからないです。
[3.3] 言語:C
[4] 期限: 金曜日まで
[5] その他の制限:配列使用不可
少し考えてみたソースです。
下半分がどうもできません。
#include <stdio.h>
void main(void) {
int dan,j,k;
for (dan=1; dan<=9; dan=dan+2){
for(j=1; j<=9-dan; j=j+2){
printf(" ");
}
for(k=1; k<=dan*2-1; k=k+2){
printf("*");
}
printf("\n");
}
}
0255デフォルトの名無しさん
2008/05/20(火) 22:25:29#include <stdio.h>
#include <stdlib.h>
#define min(x, y) (x<y)? x : y
int tmp;
#define list(n, s) for( tmp=n; tmp-- >0; ){ printf("%s",s); };
int main(void) {
const int dan=9;
int i;
for( i=0; i<9; i++ ){
list((abs(dan/2-i))," ");
list((min(i,dan-i-1))*2+1,"*");
puts("");
}
return 0;
}
0256デフォルトの名無しさん
2008/05/20(火) 22:27:01言動には注意した方が良いぞ。
0257デフォルトの名無しさん
2008/05/20(火) 22:49:38ありがとうございました。
自分の説明不足なのですが、254のレスに書いた感じのソースで下半分作りたいのでそれと同じようなソースでお願いしたいのですが…。
0258側近中の側近 ◆0351148456
2008/05/20(火) 22:54:35(っ´▽`)っ サンクス☆(抱
>>198
(っ´▽`)っ
partMatrix:部分行列
minorDeterminate:小行列式
getDeterminantの第1引数に行列のポインタ、第2引数にその行列の行数、第3引数に列数を設定する。
行列式を求めるわけだから、第2引数と第3引数は同じでなければならない。
4x+6y+2z=4000,2x+8y+6z=5000,6x+4y+4Z=4200の解は、クラメルの公式より、
x=({{4000, 6, 2}, {5000, 8, 6}, {4200, 4, 4}}の行列式)/({{4, 6, 2}, {2, 8, 6}, {6, 4, 4}}の行列式)
y=({{4, 4000, 2}, {2, 5000, 6}, {6, 4200, 4}}の行列式)/({{4, 6, 2}, {2, 8, 6}, {6, 4, 4}}の行列式)
z=({{4, 6, 4000}, {2, 8, 5000}, {6, 4, 4200}}の行列式)/({{4, 6, 2}, {2, 8, 6}, {6, 4, 4}}の行列式)
2w+1x+4y+3z=5,3w+2x+5y+0z=0,4w+3x+2y+1z=3,5w+0x+3y+2z=0の解は、クラメルの公式より、
w=({{5, 1, 4, 3}, {0, 2, 5, 0}, {3, 3, 2, 1}, {0, 0, 3, 2}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
x=({{2, 5, 4, 3}, {3, 0, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
y=({{2, 1, 5, 3}, {3, 2, 0, 0}, {4, 3, 3, 1}, {5, 0, 0, 2}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
z=({{2, 1, 4, 5}, {3, 2, 5, 0}, {4, 3, 2, 3}, {5, 0, 3, 0}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
0259側近中の側近 ◆0351148456
2008/05/20(火) 22:55:19(っ´▽`)っ
ほうほう・・・もっと勉強しよっと☆ありがと♥(抱
0260デフォルトの名無しさん
2008/05/20(火) 22:56:02*********
*********
*********
*********
*********
*********
*********
*********
*********
0261139
2008/05/20(火) 23:08:26自分の説明不足みたいでごめんなさい。
一般の連立1次方程式の解法プログラムを作成しなさい
って問題なので、最終的に
2w+1x+4y+3z=5,3w+2x+5y+0z=0,4w+3x+2y+1z=3,5w+0x+3y+2z=0の解は、クラメルの公式より、
w=({{5, 1, 4, 3}, {0, 2, 5, 0}, {3, 3, 2, 1}, {0, 0, 3, 2}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
x=({{2, 5, 4, 3}, {3, 0, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
y=({{2, 1, 5, 3}, {3, 2, 0, 0}, {4, 3, 3, 1}, {5, 0, 0, 2}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
z=({{2, 1, 4, 5}, {3, 2, 5, 0}, {4, 3, 2, 3}, {5, 0, 3, 0}}の行列式)/({{2, 1, 4, 3}, {3, 2, 5, 0}, {4, 3, 2, 1}, {5, 0, 3, 2}}の行列式)
のような行列式を出力を期待しているのではんく、w=1,x=100,y=1000,z=10000などのように出力するのではないでしょうか?
せっかく作ってもらったのに文句言ってすいません。
0262デフォルトの名無しさん
2008/05/20(火) 23:16:37http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6625.txt
0263デフォルトの名無しさん
2008/05/20(火) 23:43:36[2] 問題文(含コード&リンク):
"end"が入力されるまでキーボードから入力を受付け、入力されたらそれを入力の逆順に表示する。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2008年5月22日22:00まで
[5] その他の制限:charのポインタを対象としたスタックを使う
よろしくおねがいします。
0264デフォルトの名無しさん
2008/05/21(水) 00:04:45[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6626.txt
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:VC++2005
[3.3] 言語:C++
[4] 期限:5月23日
[5] その他の制限:問題文中に記載してあります。
よろしくお願いしますm(__)m 。
0265デフォルトの名無しさん
2008/05/21(水) 00:11:21問題がわからん
0266デフォルトの名無しさん
2008/05/21(水) 00:16:49#include<stdio.h>
#include<math.h>
#define PI 3.14159
int main(void){
int alpha, degree;
double theta;
printf("終了する角度を入力してください ");
scanf("%d", &alpha);
for(degree=0;degree<=alpha;degree+=5){
theta=PI*degree/180;
printf(" 角度θ= %d°sinθ= %.5f cosθ= %.5f\n", degree, sin(theta), cos(theta));
}
return 0;
}
0267266
2008/05/21(水) 00:17:290268デフォルトの名無しさん
2008/05/21(水) 00:39:00入力されたものをプッシュして、
endが入力されたらポップした順番に表示すればいいみたいです。
0269デフォルトの名無しさん
2008/05/21(水) 00:42:32文字単位、行単位?
0270デフォルトの名無しさん
2008/05/21(水) 00:43:31行単位です。何度もすみません。
0271デフォルトの名無しさん
2008/05/21(水) 00:49:40これで良いかな?
#include <stdio.h>
void main(void) {
int dan,j,k;
for (dan=1; dan<=9; dan=dan+2){
for(j=1; j<=9-dan; j=j+2){
printf(" ");
}
for(k=1; k<=dan*2-1; k=k+2){
printf("*");
}
printf("\n");
}
for (dan=7; dan>0; dan=dan-2){
for(j=1; j<=9-dan; j=j+2){
printf(" ");
}
for(k=1; k<=dan*2-1; k=k+2){
printf("*");
}
printf("\n");
}
}
0272デフォルトの名無しさん
2008/05/21(水) 00:52:16#include <iostream>
#include <iomanip>
#include <cmath>
#define PI 3.14159
using namespace std;
int main(){
double alpha, r=5.0;
cout << "終了する角度を入力してください " ; cin >> alpha;
cout << showpoint << setprecision(5);
for(double i=0; i <= alpha ; i += r)
cout << "角度θ= "<< (int)i << " sinθ= " << sin(i*PI/180) << " cosθ= " << cos(i*PI/180) <<endl;
}
0274デフォルトの名無しさん
2008/05/21(水) 01:14:35とりあえずカンマ入れるモードだけ作った。
int YenConvert(int kingaku, int mode, char *buffer, int result)
{
int min_buf_size, tmp, sign, digit;
char *p;
/* */
if (!buffer) return -3;
/* mode check */
if (mode != 1 && mode != 2) return -1;
/** calc required buf size by kingaku **/
/* get sign */
sign = kingaku < 0 ? -1: 1;
/* abs */
kingaku = kingaku < 0 ? -kingaku : kingaku;
/* digit */
tmp = kingaku / 10;
digit = 1;
while(tmp > 0) {
digit++;
tmp /= 10;
}
/* buf size */
min_buf_size = 1; /* nul terminator */
if (sign == -1) min_buf_size++;
min_buf_size += digit + (digit-1)/3;
0275デフォルトの名無しさん
2008/05/21(水) 01:15:18/* check buf size */
if (result < min_buf_size) return -1;
p = buffer + min_buf_size;
*(p--) = '\0';
tmp = 0;
while (1) {
*(p--) = (kingaku % 10) + '0';
kingaku /= 10;
digit--;
tmp++;
if (digit <= 0) break;
if ((tmp) % 3 == 0) (*p--) = ',';
};
*(p--) = '\\';
if (sign == -1) *(p--) = '-';
}
0276デフォルトの名無しさん
2008/05/21(水) 01:20:46#include <stdio.h>
#include <string.h>
#define TRUE 1
int main(void);
int main(){
char s[100][100];
int i=0;
while(TRUE){
fgets(s[i],100,stdin);
if(strcmp(s[i],"end\n")==0){break;}
i++;
}
for(;i>=0;i--){
printf("%s",s[i]);
}
return 0;
}
0277デフォルトの名無しさん
2008/05/21(水) 01:26:48スタックにつむならこうだろ常識的に考えて
#include <stdio.h>
int func()
{
char s[100];
fgets(s, 100, stdin);
if (strcmp(s, "end\n") == 0) return;
func();
printf("%s", s);
}
int main(void)
{
func();
}
0278デフォルトの名無しさん
2008/05/21(水) 01:35:03int YenConvert(int kingaku,int mode,char *buffer,int result)
{
char work[20], *p=work;
char *fmt[][2]={{NULL, NULL}, {"%d", "%03d"}, {"%d", ",%03d"}};
int div, kingaku_abs;
if(mode!=1 && mode!=2) return -1;
kingaku_abs=abs(kingaku);
*p++='\\';
for(div=1;kingaku_abs/div>=1000;div*=1000);
p+=sprintf(p, fmt_set[mode][0], kingaku/div);
for(div/=1000;div>0;div/=1000) p+=sprintf(p, fmt[mode][1], (kingaku_abs/div)%1000);
if(strlen(work)+1>result) return -2;
strcpy(buffer, work);
return 0;
}
0279デフォルトの名無しさん
2008/05/21(水) 01:39:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6627.txt
0280デフォルトの名無しさん
2008/05/21(水) 01:45:57その発想はなかったwww
0281デフォルトの名無しさん
2008/05/21(水) 01:51:29この時間まで足掻いても先頭に\付けるだけで精一杯…。
お答え頂いた>>262 >>274-275 >>278の方々に感謝します。
講師に何を言おうか考えつつ寝ます。遅くまでありがとうございました。
0282デフォルトの名無しさん
2008/05/21(水) 01:57:14うはwたしかにそうだわww
0283デフォルトの名無しさん
2008/05/21(水) 02:07:22おっと、時間切れか?
int YenConvert(int kingaku, int mode, char *buffer, int result)
{
char work[30], *p0 = work, *p;
if(mode != 1 && mode != 2 ) return -1;
*p0++ = '\\';
if(kingaku < 0) {
*p0++ = '-';
kingaku = -kingaku;
}
sprintf(p0, "%d", kingaku);
if(mode == 2) {
for(p=p0+strlen(p0); p>p0+3; p-=3) {
memmove(p-2, p-3, strlen(p-3)+1);
p[-3] = ',';
}
}
if(strlen(work)+1 >= result) return -2;
strcpy(buffer, work);
return 0;
}
0284デフォルトの名無しさん
2008/05/21(水) 02:16:02スタックアーキテクチャーにあんまし慣れすぎないほうがいいと思うぞ
特に10代からCとかやってた奴は。5年はプログラムから離れて
適当に忘れたほうがいい。
(本来は30・40代から始めても遅くないというか、むしろ相応しい
ものなんだけどね==>C言語)
0285デフォルトの名無しさん
2008/05/21(水) 02:38:48なぜそう思うのか教えていただきたいです。
0286デフォルトの名無しさん
2008/05/21(水) 02:50:090287デフォルトの名無しさん
2008/05/21(水) 02:55:52雰囲気だな。
0288デフォルトの名無しさん
2008/05/21(水) 02:57:08頭大丈夫?
0289デフォルトの名無しさん
2008/05/21(水) 05:23:100290デフォルトの名無しさん
2008/05/21(水) 05:28:43具体的にどういうことなのか?そんなのは扱ってみりゃ分かる
0291デフォルトの名無しさん
2008/05/21(水) 06:31:18それよりも他に気にすることはあるだろ。
0292デフォルトの名無しさん
2008/05/21(水) 06:35:44|::::::::::::|:::::/::::::::::;:::::::::/ /:::/ i::::::i:::::::::::::i たとえば『地球温暖化』だ。
|:::::::::::|:::::i:::::::/::::/ /:::/ |::::|:::::::::::/ CO2排出量増加による地球温暖化は常識だね?
∨:::::::|::::|:::::イ:::/ /:::/ |::::|:::::::::/ そう、常識だ。いや、常識だと多くの人々が思っている。
∨:::::|:::| ̄ナナ=、 /::Zz=='"T:T|:::::::/ だが、実はCO2が地球温暖化の原因だという証拠は無いんだよ。
∨:::|::|::ャ代戌ナ= // 弋戌テT:ァi::::::/ そもそも地球温暖化という現象は仮説に過ぎない。
∨:::i:i/ i/ / i/./:::::/,_,, そう主張する人も少なくない。
rヤ::::|i. ! / /i::::::ハ Y ふっ、どうも私は口下手で困るよ。
,,イrヤ::::|ゝ. i / ,イ::::< .〉 .ト、 つまり常識を疑えということだ。
rイ! レヤ:::|i .ゝ. _ _ .イ.|:::/ ソ ! ト‐、
>ー''フ/''| | ヤi::| i .|\ // |::/ / ト、 `ー、
/ i i ャヤi j > 、 //./ |:i / | Y
0293デフォルトの名無しさん
2008/05/21(水) 06:43:23速度は遅いが着実にそちらの方向に流れてるということだ。
0294デフォルトの名無しさん
2008/05/21(水) 06:53:180295デフォルトの名無しさん
2008/05/21(水) 07:19:50[2] 問題文ライフゲームを作成せよ
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: (
[4] 期限: 今週中(できるだけ早めでお願いします)
[5] その他の制限:特になし
0296デフォルトの名無しさん
2008/05/21(水) 07:20:510297デフォルトの名無しさん
2008/05/21(水) 07:23:47過去の気象データと比較して、平均気温が上がった場所、局地的に熱くなった
あるいは寒くなった場所、今まで冬を越さなかった生き物が長々と生息して
生態系が変わるとか、色々とありますからね・・・何が自然か?まぁ俺の戯言はこの辺でw
0298デフォルトの名無しさん
2008/05/21(水) 07:24:28ライフゲームって、人生ゲームみたいなテーブルゲームを文字ばかりで作れと?
0299デフォルトの名無しさん
2008/05/21(水) 07:26:420300デフォルトの名無しさん
2008/05/21(水) 07:30:150301デフォルトの名無しさん
2008/05/21(水) 08:30:53仕様があいまいすぎwww
もっと担当者と要求仕様詰めてから出直せwwww
0302デフォルトの名無しさん
2008/05/21(水) 09:16:47#define JUMYOU 82
int main(void){
int age=0;
char ch='\0';
printf("年齢%d歳:出生",age);
age++;
getchar(&ch);
while(age<JUMYOU){
printf("現在の年齢%d歳",age);
getchar(&ch);
age++;
}
printf("年齢%d歳:ご臨終",age);
puts("あなたは寿命を全うしました。");
return(0);
}
0303デフォルトの名無しさん
2008/05/21(水) 12:09:04[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6629.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: CygnusVer.2.02.1
[3.3] 言語: C
[4] 期限: ([2008年5月22日17:00まで]
[5] その他の制限:for文使用。
よろしくお願いします!
0304デフォルトの名無しさん
2008/05/21(水) 12:13:59#include <stdio.h>
int main(void){
int i, j, n;
printf("段数を入力してください:");
scanf("%d", &n);
for(i=0;i<n;i++){
for(j=0;j<n-1-i;j++) printf(" ");
for(j=0;j<i*2+1;j++) printf("*");
printf("\n");
}
return 0;
}
0305デフォルトの名無しさん
2008/05/21(水) 12:24:06ありがとうございます!!
0306デフォルトの名無しさん
2008/05/21(水) 12:26:26左右が対象には見えないw
0307デフォルトの名無しさん
2008/05/21(水) 12:50:50携帯からなので後ほど途中まで自分でやったものアップします。
[1] 授業単元:ファイルの入出力
[2] 問題文:
in.txtに入力された文をout.txtに番号をつけて出力する
〜例〜
(in.txtの内容)
気になっていることがあるとなかなか眠れない
小さなことでイライラする
根に持つタイプだ
(out.txt)
0001:気になっていることがあるとなかなか眠れない
0002:小さなことでイライラする
0003:
0004:根に持つタイプだ
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C++
[4] 期限:2008年5月21日23:00まで
[5] その他の制限:
0308デフォルトの名無しさん
2008/05/21(水) 12:58:01http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6630.c
0309デフォルトの名無しさん
2008/05/21(水) 13:08:305の倍数で激しくなる(ry
0310デフォルトの名無しさん
2008/05/21(水) 13:13:32#include <stdio.h>
int main(void)
{
FILE *in, *out;
char buff[256];
int i;
if((in=fopen("in.txt", "r"))==NULL) return 0;
if((out=fopen("out.txt", "w"))==NULL) return 0;
for(i=0; fgets(buff, sizeof buff, in); i++) fprintf(out, "%04d:%s", i, buff);
fclose(in);
fclose(out);
return 0;
}
0311デフォルトの名無しさん
2008/05/21(水) 14:04:28[2] 問題文:
ある文章を入力して、その中に含まれる「数字の個数」を求め、
戻り値で返す関数と、その関数を呼び出して下記のように表示する
プログラムを作成せよ。
例えば、
aiueo12kakikukeko34
と打ち込むと、「数字の数:4」と表示する。
関数は、 int count(char*s) とする。
[3] 環境
[3.1] OS:WindowsXP
[3.3] 言語:C++
[4] 期限:5月22日の午後4時まで
よろしくお願いします
0312311
2008/05/21(水) 14:06:01#include<cctype>
#include<iostream>
using namespace std;
int strch_cnt(const char* s,char c)
{
int i=0;
while (*s)
{
if(*s == c) i++;
s++;
}
return i;
}
int main()
{
char s[40];
char c;
cout << "文字列:";
cin >> s;
cout << "\n";
cout << "カウントする文字:";
cin >> c;
cout <<"\n";
cout << "文字数は:"<< strch_cnt(s,c) << "\n";
return 0;
}
↑のプログラムを参考に作ればいいとのことですが、
どうやって数字の個数のみを求め、表示させればいいのかが分かりません
0313デフォルトの名無しさん
2008/05/21(水) 14:07:05charよりもstringを使え
ポインタ渡しではなく参照渡しできないかどうかもう一度考えろ
って書いてあるのに
どうして学校の授業はchar*とか普通に使いたがるのだ。
0314デフォルトの名無しさん
2008/05/21(水) 14:36:27プログラミングの経験を積めば積む程そう感じるものなのだが....
0315デフォルトの名無しさん
2008/05/21(水) 14:41:37#include <cctype>
#include <iostream>
using namespace std;
int count(char *s)
{
int i = 0;
while(*s)
{
if(isdigit(*s)) i++;
s++;
}
return i;
}
int main()
{
char s[40];
cout << "文字列:";
cin >> s;
cout << "\n";
cout << "数字の数:" << count(s) << "\n";
return 0;
}
0316デフォルトの名無しさん
2008/05/21(水) 14:56:03・3・) エェー セックスとデートのハウツー本は役にたつよな?
0317デフォルトの名無しさん
2008/05/21(水) 14:56:42のところで1000文字くらい打ち込んでみようかな。
0318デフォルトの名無しさん
2008/05/21(水) 15:10:440319デフォルトの名無しさん
2008/05/21(水) 15:24:24[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6631.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C++
[4] 期限:2008/05/23
[5] その他の制限:適切な制御構造を用い,読み直した時に理解しやすいプログラムにする.
よろしくお願いします.
0320デフォルトの名無しさん
2008/05/21(水) 15:26:30std::cin.getline(s, sizeof(s));
0321デフォルトの名無しさん
2008/05/21(水) 15:35:02>>149のかた迅速な解答ありがとうございます。
実際に学校のPCで動作を確認したところ
セグメンテーション違反というエラーがでてしまいました。
どのようにすればよいでしょうか?
0322デフォルトの名無しさん
2008/05/21(水) 16:06:52a,b,cをint型変数としてscanfでコンソール等から取得
( (a>0)&&(b>0)&&(c>0) )をチェック 満たされてない場合は
再取得するか、プログラムを終了しろ
( (a+b>c)&&(a+c>b)&&(c+b>a) )
これを満たしてないと三角形にはならないので、その旨表示して終了
((a==b)&&(b==c))
これが真の場合は正三角形だから正三角形と表示
((a==b)||(c==b)||(a==c))
これが真の場合は二等辺三角形だから二等辺三角形と表示
(正三角形と判定された場合、この条件の判定はしない)
( (a*a+b*b==c*c)||(a*a+c*c=b*b)||(c*c+b*b==a*a) )
これが真の場合は直角三角形だから直角三角形と表示
(直角二等辺三角形と表示したい場合はあと一工夫いる)
( ( a*a+b*b>c*c ) && (a*a+c*c>b*b) &&(b*b+c*c>a*a) )
これが真の場合は、鋭角のみで構成された三角形だから鋭角三角形と表示
これが真でない場合は、鈍角を持った三角形と表示する。
これをヒントに後は自分で書け
0323デフォルトの名無しさん
2008/05/21(水) 16:16:23#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void){
int a[3], chk;
string s1, s2;
cin >> a[0] >> a[1] >> a[2];
sort(&a[0], &a[2+1]);
if(a[0]<=0 || a[2]>=a[0]+a[1]){
cout << "三角形として不可能な3辺の長さです" << endl;
return 0;
}
chk=a[2]*a[2]-(a[0]*a[0]+a[1]*a[1]);
if(chk==0) s1="直角";
else if(chk<0) s1="鋭角";
else s1="鈍角";
if(a[0]==a[2]) s2="正", s1="";
else if(a[0]==a[1] || a[1]==a[2]) s2="二等辺";
else s2="不等辺";
cout << s1 << s2 << "三角形" << endl;
return 0;
}
0324307
2008/05/21(水) 16:43:06ありがとうございます!!
ヒントで配られたプリントを参考にして作ってみましたのですが
ファイルを入力するところまでこれで合ってますか?
(10は行数で256は文字数です)
#include<fstream.h>
main()
{
char line[10][256];
ifstream fin("in.txt", ios::in);
if(!fin){
cerr << "error" << endl;
exit(1);
}
for(int i=0;i<10 ; i++){
while(!fin.eof()){
fin.getline(line[i], 256);
}
}
fin.close();
0325デフォルトの名無しさん
2008/05/21(水) 16:46:37ふざけすぎだろ?
0326デフォルトの名無しさん
2008/05/21(水) 16:53:43ヒントと回答をありがとうございました.
ヒントのおかげでだいたいの形は完成しました.
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6632.txt
しかし,直角二等辺三角形と表示するための一工夫だけがどうしてもわからないので,教えてはいただけないでしょうか?
お願いします!
>>323
また,回答ありがとうございました.
しかし,かなり難しくて理解ができません・・・・わざわざしてもらったのにすみません.
0327デフォルトの名無しさん
2008/05/21(水) 16:54:33Windows XP Pro Service Pack 2/OfficeProfessional 2007 4GB(1GBx4) 500GB DVD+/-RW ATI(R) RADEON(R) X1300 Pro 256MB DDR(DVI/TV-Out付) On Board Dell マウス(USB,オプティカル,2ボタン,ホイール付,ブラック)/19メディア対応カードリーダー/ライター
3YS2GBX エクスプレス \74,839 XPS Desktop 420 スタンダードシャーシ インテル(R) Core(TM) 2 Quad プロセッサー Q6600(8MB L2 キャッシュ 2.40GHz 1066MHz FSB)
Windows Vista Home Premium 2GB(1GBx2) 500GB DVD+/-RW NVIDIA(R) GeForce(R) 8600 GTS 256MB DDR(DVIx2/TV-out付) On Board Dell プレミアムマウス(USB,オプティカル,4ボタン,ホイール付)
5YS2GBX エクスプレス \122,995 XPS Desktop 420 スタンダードシャーシ インテル(R) Core(TM) 2 Quad プロセッサー Q6600(8MB L2 キャッシュ 2.40GHz 1066MHz FSB)
Windows Vista Home Premium/Office(Personal & PowerPoint) 2007 4GB(1GBx4) 500GB DVD+/-RW NVIDIA(R) GeForce(R) 8800 GT 512MB DDR(DVIx2/TV-out付) Sound Blaster(R) X-Fi Xtreme Music(D) PCIサウンドカード Dell プレミアムマウス(USB,オプティカル,4ボタン,ホイール付)
6VR2GBX エクスプレス \63,053 Vostro Desktop 200 スリムタワー インテル(R) Core(TM) 2 Duo プロセッサー E4500(2MB L2 キャッシュ 2.20GHz 800MHz FSB)
Windows Vista Business 32ビット/OfficePersonal 2007 2GB(1GBx2) 250GB DVD/CD-RWコンボドライブ ATI(R) RADEON(R) HD 2400 Pro 256MB HyperMemory(TM)(DVI/TV-out付) On Board Dell マウス(USB,オプティカル,2ボタン,ホイール付,ブラック)/19メディア対応カードリーダー/ライター
9NG4GBX エクスプレス \134,611 XPS Desktop 420 スタンダードシャーシ インテル(R) Core(TM) 2 Quad プロセッサー Q6600(8MB L2 キャッシュ 2.40GHz 1066MHz FSB)
Windows Vista Home Premium/OfficePersonal 2007 4GB(1GBx4) 500GB ブルーレイディスクドライブ NVIDIA(R) GeForce(R) 8800 GT 512MB DDR(DVIx2/TV-out付) On Board Dell プレミアムマウス(USB,オプティカル,4ボタン,ホイール付)
CD85GBX エクスプレス \83,532 Vostro Desktop 200 スリムタワー インテル(R) Core(TM) 2 Duo プロセッサー E6550(4MB L2 キャッシュ 2.33GHz 1333MHz FSB)
Windows Vista Ultimate 32ビット/OfficePersonal 2007 4GB(1GBx4) 160GB DVD+/-RW ATI(R) RADEON(R) XT 2400 256MB HyperMemory(TM)(DVI/TV-out付) On Board Dell マウス(USB,オプティカル,2ボタン,ホイール付,ブラック)
0328307
2008/05/21(水) 16:54:54やはり間違ってますか?
僕もこれで実行してみたけど出来ませんでした…。
プリントの変数など変えただけなんですが
0329デフォルトの名無しさん
2008/05/21(水) 17:13:52うぉぉぉ Q6600 が安いぜぇぇぇぇ!
って、すでにQ6600を持ってるけどさ・・・。
DELLエクスプレスは安いけど
めったにディスコティップのいいのはでないのと
あらかじめ現金用意しとかないといけないのが難点だな。
0330デフォルトの名無しさん
2008/05/21(水) 17:38:05#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
int main(void){
ifstream in("in.txt");
ofstream out("out.txt");
string s;
int i;
for(i=1;;i++){
getline(in, s);
if(in.fail()) break;
out << setw(4) << setfill('0') << i << ":";
out << s << endl;
}
return 0;
}
0331デフォルトの名無しさん
2008/05/21(水) 17:58:02直角でかつ二等辺三角形が直角二等辺三角形だよね。
がんばれー
0332307
2008/05/21(水) 17:59:43ありがとうございます
すごく参考になりますた。
0333デフォルトの名無しさん
2008/05/21(水) 18:03:29ぜってえ理解してねえwww
参考になってないだろwww
0334デフォルトの名無しさん
2008/05/21(水) 18:10:46アドバイスありがとうございます!こんな感じでいいんでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6633.txt
0335デフォルトの名無しさん
2008/05/21(水) 18:12:11C++じゃないの?
0336307
2008/05/21(水) 18:13:31正直stringとかusing namespace とか習ってないす。爆
けど0001:の表示の仕方とかわかっただけでも充分です!
0337デフォルトの名無しさん
2008/05/21(水) 18:16:25今使用してるのが「Visual C++ 6.0」なので
C++だとおもっていたんですが・・・・
もしかしてCだったんですかね?
勘違いさせてすみません.
0338デフォルトの名無しさん
2008/05/21(水) 18:28:490339デフォルトの名無しさん
2008/05/21(水) 18:37:35for文内で定義したインデックス変数のスコープがfor文の外になっちゃったり
maxやminのような一部ライブラリが使えなかったり
標準C++への準拠度が低いから
すぐにでもVisual C++ 2008に移行したほうがいいよ。
どう考えてもそのレベルじゃMFCは使わないだろうか
無料のExpressエディションで十分だろうし。
あと、Cを勉強するのにC++は使わないほうがいい。
Cは現在第2版になっていて、C++とは互換性ないから。
0340デフォルトの名無しさん
2008/05/21(水) 18:46:34ずいぶんと方針を変えたねw
いろんな入力を試して、望ましい結果が出てるならOKだとおもうよ。
あとは無駄なロジックを見つけて、省けるようになれば十分かな。
>>336
とりあえず得るものはあったのかw
ならおkww
0341デフォルトの名無しさん
2008/05/21(水) 18:49:43sort(&a[0], &a[2+1]);
の一文がスマートだね。
あらかじめソートしておけば条件が探しやすい。
0342ケータイから
2008/05/21(水) 18:54:30#include<iostream>
#include<string>
using namespace std;
int iGetNumInString(string str);
int main()
{
string str='\0';
//なんかstring型に文字列入力させるコードがあるのでそれ呼んで↓
//getline(cin,str);
int num=iGetNumInString(str);
cout << num << endl;
return(0);
}
int iGetNumInString(string str)
{
int num=0;
for(int i=0;str.c_str()[i]!='\0';i++){
if(str.c_str()[i]>='0'&&str.c_str()[i]<='9'){
num++;
}
}
return(num);
}
0343ケータイから
2008/05/21(水) 18:56:18自重する
0344デフォルトの名無しさん
2008/05/21(水) 20:14:42[2] 問題文(含コード&リンク):
nまでの自然数の平方の和の公式は, 1*1 + 2*2 + ... + n*n = n(n+1)(2n+1)/6である.
まず, 要素が101の配列a[0],a[1], ..., a[100]のそれぞれに,各配列の添え字までの自然数の平方の和を計算し,
代入する. (a[1] = 1, a[2] = 5, ...などとする(a[0] = 0とする).
次に, 自然数mを1つ読込み, その平方の和がはじめてmを超えるような自然数x, すなわち, a[x]>mとなるような最小の自然数xと,
その次の行にa[x]を出力するプログラムを作成しなさい.(自然数が入力されない場合は想定する必要はない.)
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C言語
[4] 期限:2008年05月22日18:00まで
[5] その他の制限:配列・文字列まで習ってます。
0345デフォルトの名無しさん
2008/05/21(水) 20:39:59#include <stdio.h>
int main(){
int a[101];
int i,num;
a[0] = 0;
for(i = 0;i < sizeof(a)/sizeof(a[0]);i++){
a[i+1] = a[i] + (i+1)*(i+1);
}
printf("m > ");
scanf("%d",&num);
for(i = 0;num >= a[i];i++){}
printf("%d\n%d",i,a[i]);
return 0;
}
0346デフォルトの名無しさん
2008/05/21(水) 20:43:23[2] 問題文:以下のプログラム(一部)における内部仕様を作成せよ
http://www.toel.sytes.net/~toel/cgi-bin/upload/stored/up2711.txt
機能概要
モジュールインタフェース(引数、戻り値)
内部変数
処理の流れ
上記4項目についてお願いします
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限: ([2008年05月24日23:59まで] または [無期限] のいずれか)
[5] その他の制限:特になし
0347デフォルトの名無しさん
2008/05/21(水) 21:00:18[2] 問題文(含コード&リンク):
関係演算子を使って5つの整数の最大値と最小値を求めよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: c
[4] 期限: 2008/5/23
超初歩的な問題なんですが、かなり頭悪くて解けません。よろしくお願いします。
0348347
2008/05/21(水) 21:00:540349デフォルトの名無しさん
2008/05/21(水) 21:04:425つの整数はどのように与えられるのか
最大値、最小値を求めたら表示などをするのか
0350デフォルトの名無しさん
2008/05/21(水) 21:05:02#include<stdio.h>
int main(void){
int data[]={4,7,2,1,9};
int i, maximum, minimum;
maximum=minimum=data[0];
for(i=1;i<sizeof(data)/sizeof(data[0]);i++){
maximum=data[i]>maximum?data[i]:maximum;
minimum=data[i]<minimum?data[i]:minimum;
}
printf("max:%d min:%d\n", maximum, minimum);
return 0;
}
0351デフォルトの名無しさん
2008/05/21(水) 21:07:26Cは関数の途中で変数宣言できないんじゃないのかな?
0352デフォルトの名無しさん
2008/05/21(水) 21:08:42[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6635.txt
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:VC++2005
[3.3] 言語:C++
[4] 期限:5月24日
[5] その他の制限:問題文中に記載してあります。
よろしくお願いしますm(__)m 。
0353デフォルトの名無しさん
2008/05/21(水) 21:12:22puts("");
0354デフォルトの名無しさん
2008/05/21(水) 21:15:025つの整数はscanfで読み取る形で、最大値と最小値は表示します。
>>350
for文は習っていません…。
0355デフォルトの名無しさん
2008/05/21(水) 21:26:35#include<iostream>
#include<string>
using namespace std;
int main(void){
string str, str_new;
cout << "文字列を入力してください. ";
getline(cin, str);
cout << "文字列の長さは " << str.size() << " です." << endl;
for(int i=0;i<str.size();i++){
if(isupper(str[i])) str_new+=tolower(str[i]);
else if(islower(str[i])) str_new+=toupper(str[i]);
else if(isdigit(str[i])) str_new+=str[i];
}
cout << "変換された文字列: " << str_new << endl;
return 0;
}
0356デフォルトの名無しさん
2008/05/21(水) 21:40:37ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6636.cpp
0357デフォルトの名無しさん
2008/05/21(水) 21:46:46関数の先頭ではなく、ブロックの先頭で宣言可能
0358347
2008/05/21(水) 21:46:50[1] 授業単元:プログラミング実習
[2] 問題文:if文の条件演算子(? , :)を使って、
scanfで読み取る5つの整数の最大値と最小値を表示せよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2]gcc
[3.3] 言語:c
[4] 期限:5月23日
[5]if文まで習いました。
0359デフォルトの名無しさん
2008/05/21(水) 21:48:48#include <iostream>
#include <string>
using namespace std;
int iCountNum( string str );
int main()
{
string str = "\0";
cout << "文字列入力" << ends;
getline( cin, str );
int num = iCountNum( str );
cout << "数字の数:" << num << endl;
return( 0 );
}
int iCountNum( string str )
{
int count = 0;
for( int i = 0; str[ i ] != '\0'; i++ ){
if( str[ i ] >= '0' && str[ i ] <= '9' ){
count++;
}
}
return( count );
}
0360デフォルトの名無しさん
2008/05/21(水) 21:50:21インデントをはずす関数だと思う
0361360
2008/05/21(水) 21:51:33変更する、ですね。
viにおけるexpandtab
0362デフォルトの名無しさん
2008/05/21(水) 21:53:30コード読みにくいから読みやすくして
0363デフォルトの名無しさん
2008/05/21(水) 21:55:10>[2] 問題文:if文の条件演算子(? , :)を使って、
三項演算子じゃね? ~~~~
0365デフォルトの名無しさん
2008/05/21(水) 21:58:47これでいいでしょうか?
http://www.toel.sytes.net/~toel/cgi-bin/upload/stored/up2713.txt
0366デフォルトの名無しさん
2008/05/21(水) 22:03:59int a,b,c,d,e;
/* 適当にabcdeを読み込む */
printf("max %d min %d\n",
(((a>=b?a:b)>=(c>=d?c:d)?(a>=b?a:b):(c>=d?c:d))>=e)?
((a>=b?a:b)>=(c>=d?c:d)?(a>=b?a:b):(c>=d?c:d)):e,
(((a<=b?a:b)<=(c<=d?c:d)?(a<=b?a:b):(c<=d?c:d))<=e)?
((a<=b?a:b)<=(c<=d?c:d)?(a<=b?a:b):(c<=d?c:d)):e
);
こういうことじゃなくて?
0367デフォルトの名無しさん
2008/05/21(水) 22:09:09max = a>=b?a:b;
max = max>=c?max:c;
max = max>=d?max:d;
max = max>=e?max:e;
printf( "%d",max);
これでいいんじゃない?
if文無いけど
0368デフォルトの名無しさん
2008/05/21(水) 22:12:03コードの読みやすさなんて人それぞれだからもういいけどさ('A`)
for文を抜ける条件が見つからない><
ぎぶあっぷ
0369デフォルトの名無しさん
2008/05/21(水) 22:13:300370デフォルトの名無しさん
2008/05/21(水) 22:14:37return してるよ。
0371デフォルトの名無しさん
2008/05/21(水) 22:15:31細切れ連投スマヌ
0373352
2008/05/21(水) 22:20:32実行結果確認しました。
ありがとうございましたm(__)m
0374デフォルトの名無しさん
2008/05/21(水) 22:24:23って問題です。
実数の時は出来たのですが重解と虚数のときが上手くいきません。
どこがおかしいでしょうか。
0375デフォルトの名無しさん
2008/05/21(水) 22:25:06#include <stdio.h>
#include <math.h>
main(){
double a,b,c,D,x1,x2,x3,x4,x5;
printf("a=");
scanf("%lf",&a);
printf("b=");
scanf("%lf",&b);
printf("c=");
scanf("%lf",&c);
D=b*b-4*a*c;
printf("判別式=%lf\n",D);
if(D>0){
x1=(-b+sqrt(D))/2*a;
x2=(-b-sqrt(D))/2*a;
printf("実根:x=%lf,%lf\n",x1,x2);
}
else if(D=0){
x3=-b/2*a;
printf("重根:x=%lf\n",x3);
}
else{
x4=-b/2*a;
x5=sqrt(-D)/2*a;
printf("虚根:x=%lf+%lfi,x=%lf-%lfi\n",x4,x5,x4,x5);
}
}
0376デフォルトの名無しさん
2008/05/21(水) 22:26:18else if(D=0)
これを
else if(D==0)
にすると?
0377デフォルトの名無しさん
2008/05/21(水) 22:27:42b=1
c=3
と打つと
D=-35
虚根:x=-1.5+-0.00000i,x=-1.5--0.00000i
と出てきます。
0378デフォルトの名無しさん
2008/05/21(水) 22:29:45こういうのを
b/2/a もしくは b/(2*a)
にしてみては?
0379375
2008/05/21(水) 22:31:06ああああああああああああああああああああああ
初心者がしやすい間違いとか言う奴ですねw
重解のときは正解しましたw
0380375
2008/05/21(水) 22:38:33直したら虚根のときも出来るようになりました。
x5=sqrt(-D)/2*a
これは
どうやって計算してるんですか?
√D÷2×aとも違うような気がするんですが
0381デフォルトの名無しさん
2008/05/21(水) 22:40:35http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6637.txt
0382デフォルトの名無しさん
2008/05/21(水) 22:43:56hogeを2×aで割りたいのなら、
hogeを2で割った結果をさらにaで割る → hoge/2/a
か、
2×aを先に計算して、それで割る → hoge/(2*a)
という方法になる。
解の公式的には後者のほうが見やすいかも。
非常に惜しいところまでいっていたよw
0383375
2008/05/21(水) 22:48:46ありがとうございます。
ついでにaの場合を考慮しないとダメな時はどうやって付け加えれば良いのですか?
0384375
2008/05/21(水) 22:54:22if(a==0){
x6=-c/b;
printf("x=%lf\n",x6);
}
if(a!=0){
if(D>0){
x1=(-b+sqrt(D))/(2*a);
x2=(-b-sqrt(D))/(2*a);
printf("実根:x=%lf,%lf\n",x1,x2);
}
else if(D==0){
x3=-b/(2*a);
printf("重根:x=%lf\n",x3);
}
else{
x4=-b/(2*a);
x5=sqrt(-D)/(2*a);
printf("虚根:x=%lf+%lfi,x=%lf-%lfi\n",x4,x5,x4,x5);
}
}
}
0385デフォルトの名無しさん
2008/05/21(水) 22:55:30if(a == 0){
x = c/ b;
printf("----");
}else{
//>>375の中身
}
あと、演算子には優先順位ってのがあって*/は同じ優先順位で左から右へ順に計算される。
だから、a/b*cはa/bしたものにcをかけるって意味になる。
つ 参考に
演算子の優先順位
http://c-production.com/special/04092101.html
0386デフォルトの名無しさん
2008/05/21(水) 23:02:41私が考えたやり方と同じように作りなおして下さってありがとうございました。
今、環境がないので確認できませんがやってみます。
助かりました。
0387382とか
2008/05/21(水) 23:06:06そう、それでいいよw
ここまで自力でできたのに何でできないんだろう?って思ってたw
あとはif(a!=0)をelseにしてもいいし、いろいろ書く事ができるんです。
人によっていろんな書き方があるので、丸写ししてる生徒が
いれば先生にはバレバレということです。
ちなみに解用の変数はx1x2の2個だけでもできるので、
そのように変えてみなさい、という宿題を出しときます。
>>385
フォローアップサンクス
0389346
2008/05/21(水) 23:42:09具体的な条件分岐が分からないのでだいたいでもいいのでよろしくお願いします
0390デフォルトの名無しさん
2008/05/21(水) 23:42:49無理に transform して 2 pass になってるな。ぜんぜん華麗じゃない。
0391デフォルトの名無しさん
2008/05/21(水) 23:51:40>>356は間違ってる。
>>381は2passで遅い。
しかし1passでやろうとすると各要素の操作と要素の削除が同時に発生する。
stringは要素の削除に時間がかかるから微妙なところだな。
0392デフォルトの名無しさん
2008/05/21(水) 23:52:05C言語
[2] 問題文
int array[]={30,29,69,-1454,22224,-23.65.23.66,77}をバブルソートを使って昇順しなさい
[3] 環境
OS:XP 使用テテキストエディタ:MicrosoftVisualC++ 使用言語:C
[4] 期限: 金曜日まで
[5] その他の制限
プログラム中に
#define FLAG_NUM 10
#define FLAG_OFF 0
#define FLAG_ON 1
を使う
0393デフォルトの名無しさん
2008/05/21(水) 23:53:37#define DATA 10
#define FLAG_OFF 0
#define FLAG_ON 1
int array[]={30,29,69,-1454,22224,-23.65.23.66,77};
#include<stdio.h>
int main(void)
{
int t,i=0,w=0,j=0.c=0
char flg;
for(i=0;i<DATA-1;i++)
{
flg=FLAG_OFF;
for(j=0;)j<DATA-1;j++)
{
までです。このFLAG_OFFとかを使う意味がよく分かりません
正解を少しみしてもらって記憶しているif(flg|=FLAF_ON)を使う意味とか
if(flg|=FLAF_ON){
break;
}
の「break」が何をやっているのかがさっぱりです
どうか教えてください;;
0394デフォルトの名無しさん
2008/05/21(水) 23:55:01すいません
0395デフォルトの名無しさん
2008/05/21(水) 23:56:11[2] 問題文(含コード&リンク):
#include <windows.h>
#include <stdio.h>
int main()
{
RECT rc;
SetRect(&rc, 0, 0, 640, 480);
printf_s("(%d, %d) - (%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom);
SetRectEmpty(&rc);
printf_s("(%d, %d) - (%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom);
return 0;
}
上記のプログラムを、以下の説明にしたがって変更せよ。
クラスの名前は Rect に。
Rect クラスのメンバ変数 left、top、right、bottom は public で int 型に。
SetRect 関数と SetRectEmpty 関数は Rect クラスの public メンバ関数に。
上記メンバ関数の戻り値は void に。
上記メンバ関数の引数はメンバ関数として適切なものになるようにする。
作成したクラスをテストする main 関数を作成する。
これは RECT 構造体をテストした main 関数を同程度のもので良い。
入出力は IO ストリームを使う。windows.h と stdio.h のインクルードは無し
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語:C++
[4] 期限: なし
[5] その他の制限:なし
よろしくお願いします
0396デフォルトの名無しさん
2008/05/22(木) 00:17:14#include<iostream>
class Rect{
public:
int left,top,right,bottom;
void Rect::SetRect(int left,int top,int right,int bottom){
this->left = left;
this->top = top;
this->right = right;
this->bottom = bottom;
}
void Rect::SetRectEmpty(void){
left = top = right = bottom = 0;
}
};
int main(void){
Rect rc;
rc.SetRect( 0, 0, 640, 480);
std::cout << "(" << rc.left << ", " << rc.top << ") - (" << rc.right << ", " << rc.bottom << ")" << std::endl;
rc.SetRectEmpty();
std::cout << "(" << rc.left << ", " << rc.top << ") - (" << rc.right << ", " << rc.bottom << ")" << std::endl;
return 0;
}
0397デフォルトの名無しさん
2008/05/22(木) 00:18:01if(flg|=FLAF_ON){
break;
}
このコード毎回実行されると思うんだけど。つまり無意味な条件だと思うんだけど。
0398デフォルトの名無しさん
2008/05/22(木) 00:23:02途中で移動させたから不要な「Rect::」がついてる orz
「void SetRect(」「void SetRectEmpty(」でおk
0399デフォルトの名無しさん
2008/05/22(木) 00:26:35[2] 問題文(含コード&リンク):
#include <stdio.h>
int main(void)
{
int age[10],cnt[5];
int i;
//年齢データ
age[0]=40; age[1]=41; age[2]=40; age[3]=43; age[4]=39;
age[5]=43; age[6]=40; age[7]=41; age[8]=39; age[10]=43;
cnt[0]=0; cnt[1]=0; cnt[2]=0;
cnt[3]=0; cnt[4]=0;
//ここからを変更
for(i=0;i<10;i++){
}
//ここまでを変更
for(i=0;i<5;i++){
printf("%d歳の人数:%d人\n",i+39,cnt[i]);
}
return 0;
}
問題文:ここから変更〜ここまで変更の中身を書いて各年齢の人数をカウントするプログラムを完成せよ。
[3] 環境
[3.1] OS: WindowsXP 言語:C
[4] 期限: 5月23日まで
どうかよろしくお願いします。
0400デフォルトの名無しさん
2008/05/22(木) 00:30:390401デフォルトの名無しさん
2008/05/22(木) 00:33:32各年齢らしいです
39歳が二人、40歳が三人…みたいに表示させるプログラムを組めとの事でした
0402デフォルトの名無しさん
2008/05/22(木) 00:36:49//ここからを変更
for(i=0;i<10;i++){
cnt[age[i]-39]++;
}
//ここまでを変更
あと、age[10]=43; → age[9]=43;
しかしひどいプログラムだ。
0403デフォルトの名無しさん
2008/05/22(木) 00:44:13>あと、age[10]=43; → age[9]=43;
あ、本当ですね…申し訳ないです
正常に動作したのを確認しました
迅速な解答有難うございます
0404デフォルトの名無しさん
2008/05/22(木) 00:48:17[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6638.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2008年5月22日22:00まで
[5] その他の制限:特になし
木構造やスタックやポインタやらで何が何だか分からなく混乱してしまいます…。
よろしくお願いします。
0405デフォルトの名無しさん
2008/05/22(木) 00:53:08もう質問者的には解決してるっぽいけど、1passでメモリ食わないように書いてみた。
速いかどうかは分からない。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6639.cpp
(UTF-8にしないと化ける…)
0406デフォルトの名無しさん
2008/05/22(木) 00:57:45バブルソートってのが何なのかはわかるんだよね?
普通はこんな風にフラグなんか使わずに終わると思うんだ。
#include <iostream>
using namespace std;
int main()
{
int array[]={ 30, 29, 69, -1454, 22224, -23, 65, 23, 66, 77 };
int size = sizeof( array ) / sizeof( int );
for( int i = 0; i < size; i++ ){
cout << array[ i ] << "," << ends;
}
cout << endl;
for( int i = size; i >= 0; i-- ){
for( int k = i - 1; k >= 0; k-- ){
if( array[ i ] < array[ k ] ){
int temp = array[ i ];
array[ i ] = array[ k ];
array[ k ] = temp;
}
}
}
for( int i = 0; i < size; i++ ){
cout << array[ i ] << "," << ends;
}
return( 0 );
}
0407393
2008/05/22(木) 01:04:20#define FLAG_OFF 0
#define FLAG_ON 1
int array[]={30,29,69,-1454,22224,-23.65.23.66,77};
#include<stdio.h>
int main(void)
{
int tmp,i=0,w=0,j=0,counter=0;
char chgflg;
for(i=0;i<DATA_NUM-1;i++)
{
chgflg=FLAG_OFF;
for(j=0;j<DATA_NUM-1;j++)
{
if(array[i]>array[i+1])
{
tmp=array[i];
array[i]=array[i+1];
array[i+1]=tmp;
chgflg=FLAG_ON;
}
}
if(chgflg != FLAG_ON)
{
break;
}
}
0408デフォルトの名無しさん
2008/05/22(木) 01:06:31#include <stdio.h>
int main( void )
{
int i = 0, temp = 0;
int firstKey = 0, secondKey = 0;
int array[]={ 30, 29, 69, -1454, 22224, -23, 65, 23, 66, 77 };
int size = sizeof( array ) / sizeof( int );
for( i = 0; i < size; i++ ){
printf( "%d, ",array[ i ] );
}
puts("");
for( firstKey = size; firstKey >= 0; firstKey-- ){
for( int secondKey = firstKey - 1; secondKey >= 0; secondKey-- ){
if( array[ firstKey ] < array[ secondKey ] ){
temp = array[ firstKey ];
array[ firstKey ] = array[ secondKey ];
array[ secondKey ] = temp;
}
}
}
for( i = 0; i < size; i++ ){
printf( "%d, ",array[ i ] );
}
return( 0 );
}
0409393
2008/05/22(木) 01:07:310410デフォルトの名無しさん
2008/05/22(木) 01:08:48せめて出題者なら自分でコンパイルしてよ
「小数点が多すぎる」ではじかれるでしょうよそれ
0411デフォルトの名無しさん
2008/05/22(木) 01:10:35ぐっジョブ。理想的アルゴリズム。
消費メモリは少なく速度も速くstringの弱点も回避。
0412デフォルトの名無しさん
2008/05/22(木) 01:12:39>>356って何が間違ってるの?
0413デフォルトの名無しさん
2008/05/22(木) 01:14:07[1] 授業:プログラム演習
[2] 問題文:
while文、do〜while文、for文をそれぞれ用いて、
1からnまでの偶数と奇数の合計をそれぞれ求めるプログラムを3通り作成せよ。
<実行例>
整数を入力してください。
10
偶数の合計:30
奇数の合計:25
[3] 環境
[3.1] Windows XP
[3.2] gcc
[3.3] C
[4] 期限:2008年5月22日22:00まで
[5] その他の制限:特になし
よろしくお願いします。
0414デフォルトの名無しさん
2008/05/22(木) 01:17:060415デフォルトの名無しさん
2008/05/22(木) 01:17:18実際にコンパイルして質問の例どおりに入力して味噌汁。
0416デフォルトの名無しさん
2008/05/22(木) 01:17:23昇順できましたッ
本当にありがとうございました!!
0417デフォルトの名無しさん
2008/05/22(木) 01:18:46「・その他ならば削除.」の仕様を満たしていない。
個人的にはstringの宣言も微妙。
0418デフォルトの名無しさん
2008/05/22(木) 01:31:36フラグ使ってないよ
>>417
ああ、削除してないのね
>>413
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6640.c
0419デフォルトの名無しさん
2008/05/22(木) 01:35:24ありがとうございました
0420デフォルトの名無しさん
2008/05/22(木) 03:10:44【質問テンプレ】
[1] 授業単元: プログラミング基礎
[2] 問題文:
問題1実行すると大吉、吉、凶、大凶のどれかを表示するおみくじプログラムを作れ。
ただし、大凶があまり多いと精神衛生に悪いので、大凶の確率は5%とせよ。
問題2コンピュータが乱数で決めた数字(0から99までの間)を人間が当てるゲームを作れ。
人間が推測した数字を入れると、コンピュータはそれより大きいか小さいか答える。
例)% a.out
数字を当ててください? 50
それより大きいです。
数字を当ててください? 75
それより小さいです。
数字を当ててください? 62
当たりです。
問題3逆に人間が決めた数字(0から99までの間)をコンピュータが当てるゲームを作れ。
なるべく少ない回数で当てるようにすること。
大きいか小さいか当たりかは1, -1, 0を入力することで伝える。
例)% a.out
その数字は50ですか? 1
その数字は75ですか? -1
その数字は62ですか? 0
当たった!
[3] 環境
[3.1] OS: (mac)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C++)
[4] 期限: 明日まで(5/23、21時まで)
本当に初心者で勉強してるのですが、さっぱりわからず、
しかしながら単位はとらないと留年しそうなので
本当によろしくおねがいいたします。
0421デフォルトの名無しさん
2008/05/22(木) 04:28:27まだ出来ませんか。
0422173
2008/05/22(木) 04:56:55遅くなりましたが、k-d tree による領域探索部分だけが完成いたしました。
5次元まで確認しています。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6641.txt
これは、領域探索のテストプログラムとなっています。データを発生させて、直接チェックした結果と k-d tree を使用して探索した結果の両方を出力します。
#define K で次元をかえることができます。
main() の min, max で各座標軸の探索範囲を指定しています。
#define MAX はデータ数です。
動かしてみた感じでは、k-d tree の構築が重たいです。教科書によると、上に示した方法では、計算量はο(n log^2 n) のオーダーとのことです。
引き続き、作業いたします。
眠たい。
0423デフォルトの名無しさん
2008/05/22(木) 05:33:030424デフォルトの名無しさん
2008/05/22(木) 05:45:32ヒントね。
(1)
乱数を生成させてその値が0.05以下である確率は5%だ(建前は)
だからその値が0.05以下の時に大凶を出す。
残りの95%の3分の1の確率で大吉・吉・凶を出せばいいんだね。
ということは、その値が0.05より大きく0.95/3+0.05以下である時に
大吉、0.05+0.95/3より大きく0.05+0.95*2/3以下の時に吉
それ以外の時に凶を出せばいいんだ。
(2)
これは簡単だから自分でやれ。出来るまで留年しろ
(3)
2分探索でぐぐるんだ。
コンピュータが2分探索をする際に値を比較するが
その値を人間に答えさせるようにコードを改造するんだ。
0425デフォルトの名無しさん
2008/05/22(木) 05:46:50スレタイ、スレの趣旨が分かってない奴。
ソースで答える気がないならレスしなくて良いよ。
お前一人の存在なんて無くても問題ないから。
0426デフォルトの名無しさん
2008/05/22(木) 07:12:54それなりの動作確認テストと冗長性を最適化したソースを
伴わないレスはご遠慮下さい
0427デフォルトの名無しさん
2008/05/22(木) 07:13:052と、3は大小正解を答える部分は省略しているから参考までに
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6642.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6643.c
0428デフォルトの名無しさん
2008/05/22(木) 07:14:00気に入る入らない以前にスレの趣旨に沿ってないから
ヒントなんて書かないで結構。丸投げで質問した奴が自分でやるかよw
0429側近中の側近 ◆0351148456
2008/05/22(木) 07:16:20(っ´▽`)っ
留年すればいいじゃない☆
0430デフォルトの名無しさん
2008/05/22(木) 07:19:100431デフォルトの名無しさん
2008/05/22(木) 07:39:05じゃん。
今時ネットに丸投げする優秀な学生のほうが珍しいんとちゃうか?
0432デフォルトの名無しさん
2008/05/22(木) 07:45:370433デフォルトの名無しさん
2008/05/22(木) 07:52:36宿題スレはチェックして丸写しのやつは評価半分にしてる。
さすがに不可にはしないけどな。
0434デフォルトの名無しさん
2008/05/22(木) 07:56:34後になって困るのはサボった自分だって、想像力働かないのかね?
0435デフォルトの名無しさん
2008/05/22(木) 08:10:170436デフォルトの名無しさん
2008/05/22(木) 08:17:18但し、バグも入れ、コンパイルも出来ないように工夫する。
自分のソースが提出されても、ABCD評価で
A:バグ修正されてる
B:バグは修正されてないが、コンパイルは通る
C:コンパイルは通らないが、コードは自分で入力してる
D:コードも自分の書いたものの、まんま
だが、こういうのははっきり言って危険な楽しみで絶対にやっては
ならないことだな。
0437デフォルトの名無しさん
2008/05/22(木) 08:26:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6644.c
0438デフォルトの名無しさん
2008/05/22(木) 08:26:57問1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* 変数宣言 */
int res, n = 0;
const char* omikuji[4] = {"大凶", "凶", "吉", "大吉"};
void main()
{
/* 実行時の時間で乱数を初期化して実行ごとに違う結果を得られるようにする */
srandom((unsigned int) time(NULL));
/* 0〜19の20通りの乱数を得る。20分率、5%刻み。 */
res = random() % 20;
if(res >= 18) /* 確率10%で大吉 */
++n;
if(res >= 15) /* 確率15%で吉 */
++n;
if(res >= 1) /* 確率70%で凶 */
++n;
puts(omikuji[n]); /* 確率 5%で大凶 */
}
0439デフォルトの名無しさん
2008/05/22(木) 08:32:22なんでC++の問題なのにCで回答よこすんだよ!
0440デフォルトの名無しさん
2008/05/22(木) 08:33:51C++はCを含む。だから++。
0441デフォルトの名無しさん
2008/05/22(木) 08:34:02cin,coutに書き換えチャイナと
0442デフォルトの名無しさん
2008/05/22(木) 08:35:28じゃあ>>438を修正無しにC++でコンパイルしてみろよ、ハゲ!
0443デフォルトの名無しさん
2008/05/22(木) 08:42:18素直にC++知りませんって言ったらどうかな
0444デフォルトの名無しさん
2008/05/22(木) 08:44:550445デフォルトの名無しさん
2008/05/22(木) 08:46:06srandomで引っかかるだろうけど、それを直せば別にC++コンパイラでも通るかと
0446デフォルトの名無しさん
2008/05/22(木) 09:20:00srandom以外にもrandomとvoid mainもあるな。
後者はg++とかだと駄目。
正直、糞ったれなコードすぎるんで、
意図的に変なコード書いてる気もするけど。
0447デフォルトの名無しさん
2008/05/22(木) 09:31:45じゃあ、お手本を・・・
0448デフォルトの名無しさん
2008/05/22(木) 09:45:17お前がやってから言えよw
0449デフォルトの名無しさん
2008/05/22(木) 09:45:47夜中の3時にも関わらず、1時間弱で催促してる>>421に切れたんじゃね?w
ざっくりC++に修正してみた
#include <cstdio>
#include <cstdlib>
#include <ctime>
/* 変数宣言 */
int n = 0;
const char* omikuji[4] = {"大凶", "凶", "吉", "大吉"};
int main()
{
/* 実行時の時間で乱数を初期化して実行ごとに違う結果を得られるようにする */
std::srand((unsigned int) std::time(NULL));
/* 0〜19の20通りの乱数を得る。20分率、5%刻み。 */
int res = std::rand() % 20;
if(res >= 18) /* 確率10%で大吉 */
++n;
if(res >= 15) /* 確率15%で吉 */
++n;
if(res >= 1) /* 確率70%で凶 */
++n;
std::puts(omikuji[n]); /* 確率 5%で大凶 */
return 0;
}
0450デフォルトの名無しさん
2008/05/22(木) 09:52:40○1時間強
そんなところより>>420に問題2と3があったのにいまさら気が付いたw
出勤までに暇があったらこれもC++に修正するか
0451デフォルトの名無しさん
2008/05/22(木) 09:57:410452デフォルトの名無しさん
2008/05/22(木) 10:21:11間違いじゃないだろうけど減点されると思うぞ。
せっかくなんだからいい点取らせよう。
0453デフォルトの名無しさん
2008/05/22(木) 10:21:320454デフォルトの名無しさん
2008/05/22(木) 10:33:43良い点とりたきゃ自分で考えろ
0455デフォルトの名無しさん
2008/05/22(木) 10:41:36[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク)
身長 150 cm から 170 cm までの標準体重(BMI法で計算)によるの対応を
表示するプログラムを for 文を使って作成せよ。
標準体重は小数点以下を1桁だけ表示すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:特になし
[5] その他の制限:特になし
0456デフォルトの名無しさん
2008/05/22(木) 10:43:03>>427さんのを忠実にC++に変更してみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6646.txt
>>451
1レスに収まる範囲だから別にいいかと思ってた スマソ
0457デフォルトの名無しさん
2008/05/22(木) 11:41:03チャオ!
>>438だけど、なんかもう全面的に反省して問2を書いてみた。
今度はちゃんとC++風に見えてよくわかってない学生臭いオトクなソースさ!
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6647.txt
0458デフォルトの名無しさん
2008/05/22(木) 12:04:300459デフォルトの名無しさん
2008/05/22(木) 12:09:40ここをmax=100.0にせにゃ、0〜99にならないことに気づいた
0460デフォルトの名無しさん
2008/05/22(木) 12:10:08#include <stdio.h>
#include <string.h>
int main(void)
{
int i;
printf("身長(cm),BMIによる標準体重(kg)\n");
for(i = 150; i <= 170; i++)
{
#define calcIBWByBMI(Height) (Height * Height * 22.0l)
printf("%3d,%.1f\n", i, calcIBWByBMI(i/100.0l));
}
return 0;
}
0461デフォルトの名無しさん
2008/05/22(木) 12:16:570462デフォルトの名無しさん
2008/05/22(木) 13:04:34必死すぎるw
パクリだろうがなんだろうが、内容を「自分の言葉」で説明できれば
それはOKだと思うがいかがか>講師の方々
0463デフォルトの名無しさん
2008/05/22(木) 13:08:02馬鹿が横行すると指導者が責められる
0464デフォルトの名無しさん
2008/05/22(木) 13:37:050465デフォルトの名無しさん
2008/05/22(木) 14:07:17ん。これはいい感じ。
メッセージは変数に格納して
内部では列挙型で判定するのとか。
0466デフォルトの名無しさん
2008/05/22(木) 14:07:56プログラマらしからぬ無思慮って感じ
0467デフォルトの名無しさん
2008/05/22(木) 14:15:32こんなスレを覗いているお前も同じ穴の狢だし
0469デフォルトの名無しさん
2008/05/22(木) 14:36:41分かる範囲で書いてうp
0470デフォルトの名無しさん
2008/05/22(木) 14:59:060471デフォルトの名無しさん
2008/05/22(木) 15:17:50関数の仕様
関数名 compare_date
日付の比較をする関数。
2個の日付(日付1,日付2と呼ぶ)を引数として受け取り、
日付1と日付2のどちらが早いか比較する。
日付1が早いときは 1 を、日付2が早いときは -1を、等しいときは 0 を返すとする
引数
int year1 日付1の年
int month1 日付1の月
int day1 日付1の日
int year2 日付2の年
int month2 日付2の月
int day2 日付2の日
戻り値
int 型で、日付1が早いときは 1 を、日付2が早いときは -1を、
等しいときは 0 を返す。
0472デフォルトの名無しさん
2008/05/22(木) 15:21:08[2] 問題文
縦、横、奥行きと重さを引数にとり、お急ぎ便でないときの料金を
計算する関数 calc_normal_fee() を作り、この関数を使って
計算をするように変更せよ。
プログラムはコーディング基準に合うよう記述
宅急便の料金が次の様に決まっているとき、
金額計算をするプログラムを作れ。
(何を入力、出力とするかは各自で考えること。
入力待ちの時には適切なメッセージを表示すること。)
縦横奥行きの合計が60cm以内で、かつ重量が 2kg 以下の時 800円
縦横奥行きの合計が80cm以内で、かつ重量が 5kg 以下の時 1100円
縦横奥行きの合計が120cm以内で、かつ重量が 15kg 以下の時 1500円
お急ぎ便の場合は 500円加算される。
[3] 環境
[3.1] OS:Windows visual studio
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限:5/21
[5] その他の制限:特になし
0473デフォルトの名無しさん
2008/05/22(木) 15:22:30[2] 問題文
西暦年を引数に取り、閏年かどうか判定する関数 is_leap_year() を作成し、
この関数を用いて西暦年を3回入力するとそれぞれが閏年かどうか
判定するプログラムを作れ。
[3] 環境
[3.1] OS:Windows visual studio
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限:5/21
[5] その他の制限:特になし
0474デフォルトの名無しさん
2008/05/22(木) 15:40:09int compare_date(int year1, int month1, int day1, int year2, int month2, int day2)
{
return year1 < year2 ? 1 : year1 > year2 ? -1 : month1 < month2 ? 1 : month1 > month2 ? -1 : day1 < day2 ? 1 : day1 > day2 ? -1 : 0;
}
0475デフォルトの名無しさん
2008/05/22(木) 15:41:05int compare_date(int year1,int month1,int day1,int year2,int month2,int day2)
{
if(year1>year2) return 1;
if(year2>year1) return -1;
if(month1>month2) return 1;
if(month2>month1) return -1;
if(day1>day2) return 1;
if(day2>day1) return -1;
return 0;
}
>>472
// x=横,y=縦,z=奥,weight=重量,bl=お急ぎ便ならTRUE,規格外なら-1戻し
int calc_normal_fee(int x,int y,int z,int weight,BOOL bl)
{
int hurry = 0;
if(bl) hurry = 500;
if(x+y+z<=60 && wight<=2) return 800+hurry;
if(x+y+z<=80 && wight<=5) return 1100+hurry;
if(x+y+z<=120 && wight<=15) return 1500+hurry;
return -1;
}
>>473
// year=入力年,閏年なら1,違えば0戻し
int is_leap_year(int year)
{
if(year%4==0&&year%100!=4) return 1;
if(year%400==0) return 1;
return 0;
}
0476デフォルトの名無しさん
2008/05/22(木) 15:43:390477デフォルトの名無しさん
2008/05/22(木) 18:27:20[2] 問題文:
ある実数を入力して、その数字の「総桁数」・「小数点以下の桁数」を求め
ポインタ引数が指す変数に返す関数と、その関数を呼び出して下記のように表示する
表示するプログラムを作成せよ。
例
314.15926
と打ち込むと、
総桁数:8
小数点以下の桁数:5
と表示される。
関数は、
void countno(cher*s,int*a,int*b)
とする。
[3] 環境
[3.1] OS:WindowsXP
[3.3] 言語:C++
[4] 期限:5月23日の午後2時まで
どうかよろしくお願いします。
0478デフォルトの名無しさん
2008/05/22(木) 18:44:33#include<string.h>
void countno(char *s, int *a, int *b)
{
int dot = (int) (strchr(s, '.') - s);
int len = strlen(s);
*a = len - 1;
*b = *a - dot;
return;
}
int main(void)
{
int fig, dec;
char str[256];
fgets(str, 256, stdin);
countno(str, &fig, &dec);
printf("総桁数:%d\n小数点以下の桁数:%d\n", fig, dec);
return 0;
}
書いてから気づいたがC++だったのか
テストしてないから動作は一切保障できん
0479デフォルトの名無しさん
2008/05/22(木) 18:47:42入力に小数点は必ずあるの?
指数形式は考慮しなくていいの?
0480352
2008/05/22(木) 19:18:10[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6635.txt
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:VC++2005
[3.3] 言語:C++
[4] 期限:5月26日
[5] その他の制限:問題文中に記載してあります。
よろしくお願いしますm(__)m 。
0481352
2008/05/22(木) 19:31:08>>355の方法とは別の方法でメモリの消費を少なくしたいのですが
0482デフォルトの名無しさん
2008/05/22(木) 19:37:26メモリの消費を少なくと言うことは、iostreamの代わりにcstdioを使うと言うことでよろしいか。
0483352
2008/05/22(木) 20:00:56とりあえず、iostream を使わずに済むようにしたいんですが。
0484346
2008/05/22(木) 21:01:18タブを改行に変えるプログラムなのは分かるのですが、条件分岐などの内容が分かりません
0485デフォルトの名無しさん
2008/05/22(木) 21:02:46bool countNum(string str, int &total, int &decimal){
int point=0;
total=decimal=0;
for(int i=0;str[i]!='\0';i++){
if(str[i]>='0'&&str[i]<='9'){
switch(point){
case 0:
total++;
break;
case 1:
decimal++;
break;
default:
return false;
}
}
else if(str[i]=='.'){
point++;
if(point>1){
return false;
}
else{
return false;
}
}
return true;
}
0486485
2008/05/22(木) 21:08:07インターフェースは見ての通り
str:string型入力させた文字列
total:int型総桁数、参照渡し
decimal:int型小数点以下桁数、参照渡し
あとはメインで呼んで表示させてくれ
0487デフォルトの名無しさん
2008/05/22(木) 21:13:34#include <string>
using namespace std;
void countno(string s, int *a, int *b){
int i, dot = -1, len = 0;
for(i=0; s[i]!='\0'; i++){
len ++;
if(s[i]=='.'){dot=i;}
}
switch(dot){
case -1: // dot not found
*a = len;
*b = 0;
break;
default: // dot found
*a = len-1;
*b = len-dot-1;
}
return;
}
int main(void){
int fig, dec;
string str;
while(1){
cout << "input:";
cin >> str;
countno(str, &fig, &dec);
cout << "総桁数:" << fig << endl;
cout << "小数点以下の桁数:" << dec << endl;
}
return 0;
}
0488デフォルトの名無しさん
2008/05/22(木) 21:14:33コンバートするなら次の処理をする
タブなら次のタブストップまでの隙間分スペース書く
バックスペースなら一文字戻る
文字書く
終わり
0489デフォルトの名無しさん
2008/05/22(木) 21:15:12アンカー忘れ。
>>487は、>>477向け。
0491485
2008/05/22(木) 21:21:27>>485
0000.00000
って入力されたらどうすんだ俺
>>489
apa.123.456
どうすんだ
まぁエラー処理くらい自分でやれと思うが
0492デフォルトの名無しさん
2008/05/22(木) 21:22:170493488
2008/05/22(木) 21:23:09http://www.koders.com/c/fid0831F9F781DE447A3DE09C3F6B5CA9751A3F5A6D.aspx
0494346
2008/05/22(木) 21:42:13レスありがとうございます
まさにそのプログラムです
おかげさまで機能概要と処理の流れを理解できました
あとはモジュールインターフェース(引数、戻り値)と内部変数ですが
戻り値はintでいいんでしょうか?
0495デフォルトの名無しさん
2008/05/22(木) 21:55:21void countno(cher*s,int*a,int*b)
を満たしていないぞ。
cher*ってなんだとか思ったりもするが。
0496>>488
2008/05/22(木) 21:56:37ええええ引数と戻り値も分からないのに理解できたのかよ。。。
戻り値はintじゃないよ。
内部変数については下のような感じだと思います。
FILE *fp がInput stream.
int c がInput character, or EOF.
bool convertがperform translationsのフラグ
uintmax_t columnがColumn of next input character.
size_t tab_indexがIndex in TAB_LIST of next tab stop to examine.
uintmax_t next_tab_columnがColumn the next input tab stop is on.
0497デフォルトの名無しさん
2008/05/22(木) 22:06:22重要な変数なのに変数名がa,bってので
そんなクソ要求満たしたくなくなる
0499488
2008/05/22(木) 22:24:39> intじゃないんですか
はい、intではありません。
> 内部変数の説明の英文が>>496にもありますが
> ColumnがとTABLISTが分かりません
ColumnとTABLISTという内部変数はありません。
0500デフォルトの名無しさん
2008/05/22(木) 22:44:49[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6650.txt
[3] 環境
[3.1] Windows
[3.2] コンパイラ名とバージョン:visual studio
[3.3] 言語: C言語
[4] 期限:5月23日9:00まで
どうぞよろしくお願いします
0501デフォルトの名無しさん
2008/05/22(木) 23:09:50さすがにColumnとTAB_LISTが内部変数じゃないことぐらいは・・・・orz
英語の説明がうまく訳せないというかColumnが分からないんです
0502デフォルトの名無しさん
2008/05/22(木) 23:12:06宿題なんだから満たせよw
ま、俺の宿題じゃないからどうでもいいが。
0503488
2008/05/22(木) 23:31:17columnは列番号をあらわしてます。0からカウントします。
見かけ上の位置が先頭から何文字目であるか、というものです。
以下の行があるとすると、columnが3の位置にaという文字があります。
expand
また、タブを[tab]と表記し、タブサイズが4である場合、以下の行について
aという文字は6バイト目に存在し、columnが11の位置にあるといえます。
[tab][tab]expand
タブサイズが8である場合は、6バイト目に存在し、columnが19の位置に
あるといえます。
また、重要な点として、タブサイズが4であり、
[tab]x[tab]expand
という行である場合、aという文字は、7バイト目に存在し、columnが11の
位置にあるということです。
処理の内容を理解されたということですので問題ないと思ってはいますが、参考までに。
また、TAB_LISTはグローバル変数のtab_listのことを指しています。
>>502
要求仕様を満たそうにもa、bの中に何を入れるのかが示されていない。
0504デフォルトの名無しさん
2008/05/22(木) 23:34:49double d;
stringstream ss;
string s;
cin >> d;
ss << d;
s = ss.str();
countno( s.c_str(), a, b )
みたいにするか。
これなら 1.02e-2 とか 0000.0000 とか fool.800.fool とか
入力されても大丈夫。
0505デフォルトの名無しさん
2008/05/22(木) 23:37:23ありがとうございます
ものすごく分かりやすいです
聞いてばっかりなのもなんなんで自力でちょっとやってみます
0506デフォルトの名無しさん
2008/05/23(金) 00:10:14C言語
[2] 問題文
キーボードから変数yearに入力された年号について、開催された年に第何回大会が開催(中止)されたか画面にその旨メッセージを出力すること。
[3] 環境
[3.1] Windows XP
[3.2] microsoft visual studio 2005
[3.3] C
[4] 期限
5月27日
[5] その他
1916年の第6回大会、1940年の第12回大会、1944年の第13回大会は世界大戦の影響で中止された。
ただし中止の場合も回数に数える。
1906年には、近代オリンピック制定10周年記念大会が開催された。
ただし特別大会のため、回数には数えない。
次回は2012年、第30回大会が開催予定。
お願いします。
0507デフォルトの名無しさん
2008/05/23(金) 00:13:27[1] 授業単元
C言語
[2] 問題文
キーボードから変数yearに入力された年号について、開催された年に第何回大会が開催(中止)されたか
画面に表示するプログラムを作成しなさい。
またオリンピックイヤーでない場合は画面にその旨メッセージを出力すること。
[3] 環境
[3.1] Windows XP
[3.2] microsoft visual studio 2005
[3.3] C
[4] 期限
5月27日
[5] その他
1916年の第6回大会、1940年の第12回大会、1944年の第13回大会は世界大戦の影響で中止された。
ただし中止の場合も回数に数える。
1906年には、近代オリンピック制定10周年記念大会が開催された。
ただし特別大会のため、回数には数えない。
次回は2012年、第30回大会が開催予定。
お願いします。
0508デフォルトの名無しさん
2008/05/23(金) 00:15:030509デフォルトの名無しさん
2008/05/23(金) 00:39:402008年以降は「開催されていません。」としたけどこれでいいのかな?
#include <stdio.h>
int main(void);
int main(){
int year;
int nopfg = 0;
printf("開催年:");
scanf("%d",&year);
if(year%4!=0 || year<1896 || year>2004){
printf("開催されていません。\n");
return 0;
}
if(year==1916 || year==1940 || year==1944){nopfg=1;}
printf("第%d回大会が%sされました。\n",(year-1892)/4,(nopfg? "中止":"開催"));
return 0;
}
0511デフォルトの名無しさん
2008/05/23(金) 01:21:34なぜなら、未来の予定はわからないし、
夏と冬で回数は違うし、1994年からは夏と冬は2年おきに交互に開催されるようになる。
プログラム中にマジックナンバーを書き込んで対処するよりも
年表を作って読み込ませ、過去の分と未来の予定とを分けて処理するプログラムに
するべきのような気がする。
というわけで今から組むぞ。
0512デフォルトの名無しさん
2008/05/23(金) 01:33:28(・ω・)ガンバルネェ
0513デフォルトの名無しさん
2008/05/23(金) 01:48:020514507
2008/05/23(金) 02:24:15[1] 授業単元
C言語
[2] 問題文
>>507と同様に、冬季オリンピックについても作成しなさい。
冬季オリンピックの開催年は夏季に比べて少し複雑である。
[3] 環境
[3.1] Windows XP
[3.2] microsoft visual studio 2005
[3.3] C
[4] 期限
5月27日
[5] その他
1924年の第1回大会以来、4年に一度開催されている。
1992年の第16回大会までは、夏季大会と同じ年に開催されたが、
1994年の第17回大会からは、夏季大会の2年後に開催されるようになった。
1940年、1944年は第二次世界大戦の影響で中止。
中止の場合は回数を数えない。
次回は2010年、第21回大会が開催予定。
0515デフォルトの名無しさん
2008/05/23(金) 03:05:46がんばってねw
0516422
2008/05/23(金) 03:15:57当方が確認した環境は WindowsXP/cygwin, 処理系は gcc 3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6653.txt
これはテストプログラムです。各座標軸とも 0 〜 1000 である n 次元(変更可)のデータを多数(設定可) 発生させて、
中心点(500, 500, ...., 500) との距離が一番小さいデータを探索します。
「距離」は n 次元ユークリッドノルムです。
全数を直接計算して求めたものも表示させています。
で、結論は「全数計算にくらべてのメリットがぜんぜんありません。」
推察される原因は次のとおりです。
・k-d tree の設計がよろしくない。left ノードと right ノードにふりわける基準を中央値としたのがよくなかったと思います。座標成分が同一のデータの振り分けがいいかげんになってしまいました。
このために、「クエリが属する k-d tree 区分空間に属する点を2分探索で求める」というアルゴリズムの精度が悪くなってしまいました。
・次数が高くなると、ユークリッドノルムが大きくなりすぎて、n次元超球が往々にして定義域よりもおおきくなってしまいました。
ということで、私は楽しかったのですが、お役にはたてないことになってしまいました。
k-d tree のインプリメントを根本からかえないといけないでしょうね。
0517デフォルトの名無しさん
2008/05/23(金) 03:57:480518デフォルトの名無しさん
2008/05/23(金) 04:29:53#include <stdio.h>
int main(void);
int main(){
int year;
int times;
printf("開催年:");
scanf("%d",&year);
if(year<1924){
printf("開催されていません。\n");
return 0;
}else if(year==1940||year==1944){
printf("中止されました。\n");
return 0;
}else if(year<1940 && year%4==0){
times=(year-1920)/4;
}else if(year<=1992 && year%4==0){
times=(year-1920)/4-2;
}else if(year<2010 && year%4==2){
times=(year-1994)/4+17;
}else{
printf("開催されていません。\n");
return 0;
}
printf("第%d回大会が開催されました。\n",times);
return 0;
}
0519デフォルトの名無しさん
2008/05/23(金) 15:55:27[1] 授業単元:Cプログラム実習
[2] 問題文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6655.zip
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ:gcc 3.4
[3.3] 言語:C
[4] 期限:2008年05月23日22:00まで
[5] その他の制限:実習を数回経ただけのド素人ですので、それに見合ったレベルでお願いします
時間制限が短く、また課題も複数あって恐縮ですが、どうかよろしくおねがいしますm(_ _)m
0520デフォルトの名無しさん
2008/05/23(金) 17:54:28学校名晒しちゃってるけど大丈夫?
0521デフォルトの名無しさん
2008/05/23(金) 18:20:14[2] 問題文(含コード&リンク):
for文で1から任意の数まで表示するプログラムを作れ。
数字が1つ増えるたびに
終了しますか?y or nと表示し、yが入力されたときはプログラムを終了し、nが入力されたときは
プログラムをせずループを続けるようにせよ
[3] 環境
[3.1] OS: Win XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 明日
[5] その他の制限: なし
0522デフォルトの名無しさん
2008/05/23(金) 18:24:10http://pc11.2ch.net/test/read.cgi/tech/1104092624/
0523デフォルトの名無しさん
2008/05/23(金) 19:03:16終了しますか?
どのタイミングで表示?
0524デフォルトの名無しさん
2008/05/23(金) 19:04:341
と表示したあとに表示してNなら
2を表示って事だとおもいます
0525デフォルトの名無しさん
2008/05/23(金) 19:19:36#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
int i, n, exit;
char ss[]="";
printf("任意の数>>");
n = atoi(gets(ss));
for(i=1;i<=n;i++) {
printf("%d\n", i);
printf("終了しますか?y or n ");
if(strcmp(gets(ss), "y") == 0) break;
}
return 0;
}
0526デフォルトの名無しさん
2008/05/23(金) 19:21:470527デフォルトの名無しさん
2008/05/23(金) 19:25:040529デフォルトの名無しさん
2008/05/23(金) 19:27:56ちゃんとなるけど?
0530デフォルトの名無しさん
2008/05/23(金) 19:54:00実行してから言えよw
0531デフォルトの名無しさん
2008/05/23(金) 20:07:38[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6657.txt
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:VC++2005
[3.3] 言語:C++
[4] 期限:5月27日
[5] その他の制限:問題文中に記載してあります。
よろしくお願いします 。
0532デフォルトの名無しさん
2008/05/23(金) 20:10:34おいおい。。。
0533デフォルトの名無しさん
2008/05/23(金) 20:11:35↑問題文です。
途中まで考えてみました。
バブルソートでやろうかと思ってました。
変数が足りなかったら足して結構です。
#include <stdio.h>
void main(void)
{
int a[10]={25,56,65,80,73,53,68,87,36,78};
int i,j;
printf("整列前:");
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
}
できれば今日中にお願いします。
0534デフォルトの名無しさん
2008/05/23(金) 20:17:33gets(ss)
0535デフォルトの名無しさん
2008/05/23(金) 20:20:25>>406
0536デフォルトの名無しさん
2008/05/23(金) 20:21:35>>533
>>408
0537デフォルトの名無しさん
2008/05/23(金) 20:26:16ありがとうございます。
こっちの説明不足なのですが、Returnを使わない方法でお願いします。
0538デフォルトの名無しさん
2008/05/23(金) 20:27:24そこらへんは察しry
0539デフォルトの名無しさん
2008/05/23(金) 20:48:09細かなミスがおおい…
俺ダメだ…
0540デフォルトの名無しさん
2008/05/23(金) 20:51:14できた!
→コンパイル
→エラー修正
→コンパイル
→実行
→おかしい
→ソースと睨めっこ修正
→完成
こんな流れは良くある事だ
0541デフォルトの名無しさん
2008/05/23(金) 20:55:04#include<stdio.h>
int main(){
int point[4][5];
int num[4],sum[4];
double ave[4];
int i,j;
FILE *fp;
fp = fopen("point.txt","r");
for(i=0;i<4;i++){
sum[i] = 0;
ave[i] = 0;
fscanf(fp,"%d %d %d %d %d %d",&num[i],&point[i][0],&point[i][1],&point[i][2]
,&point[i][3],&point[i][4]);
for(j=0;j<5;j++){
sum[i] += point[i][j];
}
ave[i] = sum[i] / 5.0;
printf("%d sum = %d average = %f ",num[i],sum[i],ave[i]);
if(ave[i]>=80.0)
printf("Rank A¥n");
else if(ave[i]>=70.0)
printf("Rank B¥n");
else if(ave[i]>=60.0)
printf("Rank C¥n");
else
printf("Rank D¥n");
}
fclose(fp);
return 0;
}
0542541
2008/05/23(金) 20:55:49ソートは他見てやってくれ
無駄に2次元配列が…
0543541
2008/05/23(金) 21:09:27rank[i] = 'A';
else if(ave[i]>=70.0)
rank[i] = 'B';
else if(ave[i]>=60.0)
rank[i] = 'C';
else
rank[i] = 'D';
}
fclose(fp);
printf("-->");
scanf("%d",&number);
while(number!=0){
if(number==9999)
for(i=0;i<4;i++)
printf("%d¥t%d¥t%d¥t%d¥t%d¥t%d¥t%d¥t%f¥t%c¥n",
num[i],point[i][0],point[i][1],point[i][2],point[i][3]
,point[i][4],sum[i],ave[i],rank[i]);
else{
i = number-1001;
printf("%d¥t%d¥t%d¥t%d¥t%d¥t%d¥t%d¥t%f¥t%c¥n",
num[i],point[i][0],point[i][1],point[i][2],point[i][3]
,point[i][4],sum[i],ave[i],rank[i]);
}
printf("-->");
scanf("%d",&number);
}
課題2追加
ソースがきたねぇ…
0544541
2008/05/23(金) 21:11:283はここみてやれ↓
ttp://www12.plala.or.jp/dokugaku/algo/lcm.html
0545541
2008/05/23(金) 21:24:09やってしまった…
#include<stdio.h>
int gcd(int m,int n);
int lcm(int m,int n);
int main(){
int a,b;
int res;
scanf("%d",&a);
scanf("%d",&b);
printf("GCD = %d¥n",gcd(a,b));
printf("LCM = %d¥n",lcm(a,b));
return 0;
}
int gcd(int m,int n){
int tmp;
while(m%n!=0){
tmp = n;
n = m%n;
m = tmp;
}
return n;
}
int lcm(int m,int n){
return (m*n / gcd(m,n));
}
0546519
2008/05/23(金) 21:25:40ありがとうございましたm(_ _)m
催促がましくて申し訳ありませんが、残りがおわかりの方、どうかよろしくお願いします
0547デフォルトの名無しさん
2008/05/23(金) 21:39:17[2] 問題文
電圧x 20 40 60 80 100
電流y 1.31 2.93 3.21 4.58 5.46
電圧と電流の筧が与えられた時、最小二乗法によりデータを y=ax+bの一 次関数で表すとき、定数a、bを求めよ。
[3] 環境
[3.1] OS: Windows
[3.2] VC 6.0
[3.3] 言語:C++
[4] 期限: ([2008年05月26日08:30まで]
[5] その他の制限: 特に無し
どなたかよろしくお願いします。
正直教科書読んでも解りませんでした。
0548デフォルトの名無しさん
2008/05/23(金) 21:51:20最小二乗法の1次方程式への近似
http://ja.wikipedia.org/wiki/最小二乗法#.E4.B8.80.E6.AC.A1.E6.96.B9.E7.A8.8B.E5.BC.8F.E3.81.B8.E3.81.AE.E8.BF.91.E4.BC.BC
ここに公式が出てる。これを自分でCで書けないこと確認してからここに丸投げしてくれ
0549548
2008/05/23(金) 21:52:48http://ja.wikipedia.org/wiki/最小二乗法
ならあってるとおも
0550519
2008/05/23(金) 21:55:13ありがとうございました
0551547
2008/05/23(金) 22:33:49お早い解答有難う御座います。
今見てみました。
この式をどのようにプログラムを作っていくのかが全然解りません。
プログラムのソースも提出しなければいけない上、グラフも必要です。
今の自分の知識力では無理っぽいので、どうかお願いします。
0552デフォルトの名無しさん
2008/05/23(金) 23:31:01ワロタ
たまには落ちないこともあるんかねw
0553デフォルトの名無しさん
2008/05/23(金) 23:40:06落ちるん?何回やっても落ちないけど
WinXP SP3
Borland C++ 5.5.1
0554デフォルトの名無しさん
2008/05/23(金) 23:47:50おいおい、神戸情報大学院大学では学生にルートで作業させているのか?
それとも、プロンプトを#に替える洒落でも流行しているのか?
おまけに、a.outで実行しているってことは、PATHに.を含めているってことか?
0556デフォルトの名無しさん
2008/05/23(金) 23:50:50落ちるかどうか以前に、ソースを見ればおかしいのが判るだろ。
0557デフォルトの名無しさん
2008/05/23(金) 23:53:18#include <stdio.h>
#include <stdlib.h>
static int cmpa(const void*a,const void*b){ return*((int*)a)-*((int*)b);}
static int cmpd(const void*a,const void*b){ return cmpa(b,a);}
static int(*cmpfs[])(const void*,const void*) = { cmpa,cmpd };
int main(int argc,char**args){
FILE*fp;
if(fp=fopen("in.txt","r")){
char buf[ 2 ]="";
fprintf(stdout,"input sort method. 1.ascending,2.descending\n");
fgets(buf,sizeof(buf),stdin);
if(*buf=='1'||*buf=='2'){
int v,len=1,idx=0,*vals=NULL,m=*buf-'1';
while(fscanf(fp,"%d",&v)==1){
if(len==idx+1){
len <<=1;
if(!(vals=(int*)realloc(vals,len*sizeof(*vals))))exit(1);}
vals[idx++]=v;}
qsort(vals,idx,sizeof(*vals),*(cmpfs+m));
fclose(fp);
if(fp=fopen("out.txt","w"))for(v=0;v<idx;++v)fprintf(fp,"%d\n",*(vals+v));
fprintf(stdout,"write into %s\n","out.txt");
fclose(fp);free(vals);}}
return 0;
}
0558541
2008/05/24(土) 00:22:16できた
#include<stdio.h>
int main(){
double x[]={20.0,40.0,60.0,80.0,100.0};
double y[]={1.31,2.93,3.21,4.85,5.46};
double a,b;
int i,j,n;
double xk,yk,xy,x2;
FILE *fp;
xk=yk=xy=x2=0;
a = 0;
b = 0;
n=5;
fp = fopen("test.dat","w");
for(i=0;i<n;i++){
xk += x[i];
yk += y[i];
xy += x[i]*y[i];
x2 += x[i]*x[i];
fprintf(fp,"%f %f¥n",x[i],y[i]);
}
printf("%lf %lf %lf %lf¥n",xk,yk,xy,x2);
a = (n*xy - xk*yk)/(n*x2 - xk*xk);
b = (x2*yk - xy*xk)/(n*x2 - xk*xk);
printf("f(x) = %lf * x + %lf¥n",a,b);
return 0;
}
変数テキトーすぎたwww
0559541
2008/05/24(土) 00:25:220560デフォルトの名無しさん
2008/05/24(土) 00:25:51[2] 問題文(含コード&リンク):()
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6659.txt
[3] 環境
[3.1] OS: (Windows/Linux/等々)
linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
5月26日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
構造体を習っているところです。よろしくお願いします。
0561541
2008/05/24(土) 00:43:12課題1
POINT getMiddlePoint(POINT p1,POINT p2){
POINT MiddlePoint;
MiddlePoint.x = (p1.x + p2.x) / 2;
MiddlePoint.y = (p1.y + p2.y) / 2;
return MiddlePoint;
}
0562541
2008/05/24(土) 00:44:590563デフォルトの名無しさん
2008/05/24(土) 00:45:54恐らくそうだと・・
0564541
2008/05/24(土) 01:11:15一応やった
void rotatePoint(POINT *p1,int dt){
double rad = dt * M_PI / 180.0;
int x,y;
x = p1->x;
y = p1->y;
p1->x = x * cos(rad) - y * sin(rad);
p1->y = y * cos(rad) + x * sin(rad);
printf("(%d,%d)¥n",p1->x,p1->y);
return;
}
int型じゃ絶対あの結果でないよ…
先生は何を考えているんだ…
0565541
2008/05/24(土) 01:22:59#include <stdio.h>
#include <stdlib.h>
int *makeArray(int argc,char *argv[])
{
int num;
int *table;
int i;
if (argc < 2){
fprintf(stderr, "引数が指定されていない¥n");
exit(1);
}
num = argc -1;
table = malloc(sizeof(int) * num);
for(i=0;i<num;i++){
*(table + i) = atoi(argv[i+1]);
}
return table;
}
int main(int argc, char *argv[]){
int i, num;
double sum = 0.0;
int *table;
table = makeArray(argc,argv);
num = argc -1;
for (i = 0; i < num; i++){
sum += (double)table[i];
}
printf("%d 個の実数の平均値は %.2f です ¥n",num, sum / num);
free(table);
return 0;
}
0566デフォルトの名無しさん
2008/05/24(土) 01:25:35ありがとうございます。
では本来はどうするべきなのでしょうか?
0568デフォルトの名無しさん
2008/05/24(土) 01:38:17黙ってれば無知はばれないんだからおとなしくしてろって
0569541
2008/05/24(土) 01:47:24座標の値を実数型にすればキレイにでるよ
0570デフォルトの名無しさん
2008/05/24(土) 01:49:55え?
0571デフォルトの名無しさん
2008/05/24(土) 01:57:44これでどう?
round は四捨五入する関数 ( 関数プロトタイプmath.h double round(double); )
void rotatePoint(POINT *p1,int dt){
double rad = dt * M_PI / 180.0;
int x,y;
x = p1->x;
y = p1->y;
p1->x = round(x * cos(rad) - y * sin(rad));
p1->y = round(y * cos(rad) + x * sin(rad));
printf("(%d,%d)\n",p1->x,p1->y);
return;
}
0572デフォルトの名無しさん
2008/05/24(土) 02:04:07>>571
ありがとうございます。
ところで、課題2のプログラムは不完全なプログラムだと思うのですが、完全なプログラムを書いていただけないでしょうか?
課題1のほうはなんとか自分で付け加えることができたのですが、課題2のほうは上手くいかなくて・・
ところで>>565における課題3のプログラムにおいて、
メモリ不足です云々の処理がなくなっているのはそういう仕様なのでしょうか?
いまいち課題3の意味がわからなくて・・
0573541
2008/05/24(土) 02:14:17さすがにそれくらいは自分でやろう
自分のためにならない
課題3は…めんどいから飛ばしただけですorz
0574デフォルトの名無しさん
2008/05/24(土) 02:16:08黙ってれば>>554だとばれないんだからおとなしくしてろって
0575デフォルトの名無しさん
2008/05/24(土) 03:23:04>>554じゃないんだけど、何がおかしいのか分からん。
rootではないユーザのデフォルトプロンプトが#なシェルがあるってこと?
PATHに.を含める事があまりにもひどい設定であったのはもう過去のことってこと?
0576デフォルトの名無しさん
2008/05/24(土) 03:30:18>>574じゃないけど、大学とかの課題では
暗黙的にシェルは#で表記する。ディレクトリ構成は人によって違うし。
後は、gccで指定せずコンパイルすれば
実行ファイルはa.outになる。
問題文になんらおかしな点はない。
0578デフォルトの名無しさん
2008/05/24(土) 06:44:29だからレスしなきゃバレなかったのに・・・
0579デフォルトの名無しさん
2008/05/24(土) 08:41:060580デフォルトの名無しさん
2008/05/24(土) 08:44:41ss の領域が足りてない
0581デフォルトの名無しさん
2008/05/24(土) 08:50:33ss[]="";
領域指定してないから問題無いでしょ
*limitsのMAX以上にならない限りって意味で
0582デフォルトの名無しさん
2008/05/24(土) 08:58:50sizeof(ss)==1
'\0' を考慮して少なくとも領域の大きさとして 2 は必要
領域指定してない場合には必要最低限をコンパイラが自動計算するだけで
勝手に巨大な領域を割り当てたりはしない
0583側近中の側近 ◆0351148456
2008/05/24(土) 08:58:59char ss[]="";
n = atoi(gets(ss));
について
(1)
ssにリテラル文字列""を代入している。
よって、ssは静的領域を指すアドレスが設定されている。
静的領域を勝手に書き換えるなゴルァ!
(2)
さらに、ssが確保している領域のサイズは\0の1バイトのみ。
1バイトを超えたら記憶領域を壊す。
ってか、何らかの文字を入れた時点で\0と合わせて2バイト以上になるから、
確実にダメだね。
0584デフォルトの名無しさん
2008/05/24(土) 09:00:04(1)は違う
配列を確保して "" で初期化している
0585側近中の側近 ◆0351148456
2008/05/24(土) 09:02:51(っ´ω`)っ
char *ss="";
と
char ss[]="";
は等価だと思ってたよ・・・いきててごめんね
0586側近中の側近 ◆0351148456
2008/05/24(土) 09:10:43char ss[]="";
は
char ss[]={'\0'}
と等価なのか・・・。
0587デフォルトの名無しさん
2008/05/24(土) 09:12:11肯定だ
0588デフォルトの名無しさん
2008/05/24(土) 09:16:55これをよく見かけるからchar ss[]="";ってしたんじゃないかな
L1の書き方も問題あるよね
後からそれ以上のサイズ書き込まれたらエラーなのに
0589側近中の側近 ◆0351148456
2008/05/24(土) 09:24:55で、ガウスの消去法を用いた逆行列算出プログラムを作ったんだが要るかい?
0590デフォルトの名無しさん
2008/05/24(土) 09:27:070591ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 09:30:010592デフォルトの名無しさん
2008/05/24(土) 09:34:01数独は真面目に解法を考えるよりも、闇雲に再帰で解いた方が手っ取り早い。
どうせ瞬時に解が得られるなら、工夫をするまでもないだろ。
0593デフォルトの名無しさん
2008/05/24(土) 09:34:20遅い例と早い例合わせて見てみたい気がする
0594560
2008/05/24(土) 09:50:59課題2はどうにかできました。ありがとうございます!
課題3はどうしても自分ではできないので、どなたか完全版を書いてくれないでしょうか?
よろしくお願いします。
>>560の課題3です。。
0595側近中の側近 ◆0351148456
2008/05/24(土) 10:00:13(っ´▽`)っ
留年すればいいじゃない☆
どうして留年したくないの?
0596ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 10:15:08同じバックトラッキングでも、1マスずつ、1から9まで当てずっぽうでやったらものすごい計算量になるので
もちろん効率は大事。
1マスずつマメに可能性をチェックして潰していくことが大事
俺なら1マスを16ビットにするかな
4ビットを使って1〜9の数字にする。0を未確定の状態とする。
9ビットで、各数字が入る可能性の状態を保持。
残った3ビットは・・・未使用でも良いしなんかのフラグに使っても良いと思う。
これを81マス分+αでスタックの1層を構築。
で、
1スタックで推定→推定に伴う各マスの評価
を繰り返す。
矛盾が見つかればスタックを1つ前の状態に戻し、推定したマスの可能性を消す。
0597560
2008/05/24(土) 10:19:13授業料等が1年分かかるのはきついかと・・
1年分まるまる働けないことにもなるので、合計するとかなりの損失になりますし
また、就職活動において、留年というのは浪人よりもマイナスに見られるらしいです
0598ヽ・´∀`・,,)っ━━━━━━┓
2008/05/24(土) 10:23:250599560
2008/05/24(土) 10:34:39すいませんバカで・
0600デフォルトの名無しさん
2008/05/24(土) 11:58:09[2] 問題文(含コード&リンク):()
ファイル入力でも、プログラム上のランダム作成でも方法は問わず定義された2次元上の4頂点で形成される矩形を最低30以上用い
それらを最少面積で敷き詰める為の各矩形の座標を求めよ(最適解でOK)
[3] 環境
[3.1] OS: Windows2000
[3.2] コンパイラ名とバージョン: Microsoft Visual C++ 6.0 アカデミック版
[3.3] 言語: C/C++/どちらでも可
[4] 期限: 2008年6月9日AM3:00まで
[5] その他の制限: C/C++の標準的な機能以外(フリーのライブラリ等)の使用は禁止
プログラミングコンペのような物です。期限日に各々のプログラムで教授から受け取った矩形データを、一番最適配置出来た人間に、スーパーな特典が出ます。
SA法とか使うとか騒がれていますが、プログラムがサッパリです。お願いします。
0601600
2008/05/24(土) 12:07:04矩形を敷き詰める空間は矩形です。(要は正方形)
この正方形が最少で、その敷き詰めた各矩形の座標が出ていれば良いそうです。
0602デフォルトの名無しさん
2008/05/24(土) 12:22:44ディレクトリ構成については気になんかいないよ。
#じゃなくて$のほうがよくね?って言ってるんだけど。
実行ファイルがa.outになるのは知ってるが、通常の環境で
a.outと入力して実行できるか?って話。
./a.outが普通だろ、と言っている。
>>578
お前のほうが無知だな。
0603デフォルトの名無しさん
2008/05/24(土) 12:25:42ほぼ解答に近いものが提示されていて、それを手直しすればいいだけなのに
それすらもできない人を雇う会社の損失については考慮しないのですか?
0605デフォルトの名無しさん
2008/05/24(土) 12:43:30sは読み取り専用の場合が殆どです。マルチバイトコードの場合はバイトサイズを
間違った為に何の前触れもなく突然死する、深刻なバグが起こるので、読み取り専
用にされてます。それだけでも使いにくいです。プログラムテスター泣かせなコードです。
このコードはコンパイラの最適化能力が低かった為、上記手段で共通文字列を手動で
共有させなければならなかった古い時代の化石コードです。現在は最適化が行われ、
同一内容固定文字列は共有されたコードが出力されます。
ですので、上記sを使って共有させるのと同じことが
#define s "ABC"
で出来ます。
上記のようなchar s[]を使うのはやめましょう。
将来的に上記構文は廃止されるかもしれません。
それに対して
char s[]={'A','B','C','¥0'};は書き込み可能なsを作ります.
その代わりマルチバイトキャラクタコードの変更可能文字列変数への宣言時直接初期化は難しくな
ってきてます
0606デフォルトの名無しさん
2008/05/24(土) 12:45:04[2] 問題文: xのy乗を求めるPower関数の作成
[3] 環境
[3.1] OS: Windows XP SP2
[3.2] コンパイラ名とバージョン: Microsoft Visual Studio 2005
[3.3] 言語: C言語
[4] 期限: 今日中
[5] その他の制限: main関数はあらかじめ組みあがっていて変更できないです。なので省略しました。
#include <stdio.h>
double Power(double x, int y)
{
int i;
double tmp;
tmp = 1.0;
for(i=1; i<=y; i++){
tmp *= x;
}
return(tmp);
}
実行結果例の
x = 4.0
y = -3
x^y = 0.015625
これが導き出せません
0607デフォルトの名無しさん
2008/05/24(土) 12:46:05元の処理とmakeArrayの処理を見比べろよ。
メモリ不足の判定処理がどれか分かるだろ?
コピーして貼れよ。それもできないのか?クズ。
期限までに土日2日もあるんだ。無い脳絞って本気で考えろ。
ダメなら日曜の夜にまた来い。で、その時点までの成果を見せろ。
0608デフォルトの名無しさん
2008/05/24(土) 12:48:42黙ってれば>>554だとばれないんだからおとなしくしてろって
0609デフォルトの名無しさん
2008/05/24(土) 12:49:450610デフォルトの名無しさん
2008/05/24(土) 12:52:200611デフォルトの名無しさん
2008/05/24(土) 12:55:14http://pc11.2ch.net/linux/
0612デフォルトの名無しさん
2008/05/24(土) 12:56:200613デフォルトの名無しさん
2008/05/24(土) 13:03:17x^(-y)=1/(x^y) だから,y の符号みればおk
double Power(double x, int y){
int i, n = ( y < 0 ) ? -y : y;
double ret = 1.0;
for ( i = 0; i < n; ++i ) ret *= x
return ( n == y ) ? ret : 1.0 / ret;
}
実際には,これに x が 0 のときとか,ret が 0 になったときとか,
y が 0 か 1 のとき辺りの例外処理を入れれ
0614603
2008/05/24(土) 13:07:22抜粋ですが、以下のように変更すればよいです。
int i;
double tmp;
if (y < 0) {
return Power(1/x, -y);
}
tmp = 1.0;
0615デフォルトの名無しさん
2008/05/24(土) 13:21:23UNIXを使用していたが、自分のところじゃ % で、a.out でも実行は出来た。
Linux系ではそうでないものもあるが、まぁとりあえず、言うだけ言っておいて
自分が知っていることだけで話をして、相手に無知だってことはないだろ。
俺はお前が無知だなんて言ってないが、お前が通常の環境だの普通だの
#じゃなくて$の方が よくね? という個人的な主観でモノを言っている方が
無知丸出しに見えるんだが?自分の経験や知っていることだけがこの世のすべてだとでも?
対面交通じゃ、左側通行より右側通行が多いんだぜ、ベイビー?
ジャポネーゼは島国だから、ちったぁ引きこもってねーで海外にでも旅行してみな。
考えが360度変わっちまうぜ。おっと、一周して戻っちまったぜ、ベイビー。
0616デフォルトの名無しさん
2008/05/24(土) 13:24:49ごめん。あんまり無知無知言われるのでかっとなった。
ユーザプロンプトが%であるか$であるか、ではなくて、言いたいのは
少なくとも#ではないだろう、ということ。
カレントディレクトリがPATHに含まれているのがOS標準なのか、
/etc/profileに記述されているからなのか、ということ。
後者であればシステム管理者が行ってはいけない設定をしてるよね。
そういう話なんです。
0617デフォルトの名無しさん
2008/05/24(土) 13:25:16まっ、こんなこともあるから、それなりの説明をしてくれや、ボーイ?
0618デフォルトの名無しさん
2008/05/24(土) 13:27:07もしカレントディレクトリがPATHに含まれるようなUN*X系で存在するので
あればわたしの知識不足でした。
0619デフォルトの名無しさん
2008/05/24(土) 13:29:16>>614
参考にさせていただきます
ありがとうございました
0620デフォルトの名無しさん
2008/05/24(土) 13:31:240621デフォルトの名無しさん
2008/05/24(土) 13:49:51興味がありますが、いま一つ意味がわかりません。
具体的な例を示していただくとわかりやすいと思います。お願いいたします。
0622デフォルトの名無しさん
2008/05/24(土) 14:01:57役に立ちそうな資料を載せとくと誰かががんばるかもしれないですよ?
0623デフォルトの名無しさん
2008/05/24(土) 14:11:370624600
2008/05/24(土) 14:40:13おお、ありがとうございます。
口頭で出た問題なので、私が説明不足でした。
30個以上の、様々な大きさの四角形を、正方形に敷き詰める
その正方形が小さければ小さい程良い、と言う問題です。
プログラム部分での、その様々な四角形の与え方は
四角形構造体の配列をランダム初期化で作っても
ファイルに定義してあって読み込んでも、何でも良いそうです。
コンペではCSVファイルで、1行に一矩形の情報(縦横の値、整数2つ)で、数は見てのお楽しみ(30以上は確定)だそうです
0625600
2008/05/24(土) 15:01:06一応ネットで調べたんですが、凄そうな方の卒論見たいのしか見つかりませんでした
ttp://chihara.aist-nara.ac.jp/public/research/thesis/master/98/sawa9651054.pdf
ttp://www.jaist.ac.jp/library/thesis/is-master-2005/paper/ogawa-t/paper.pdf
0626デフォルトの名無しさん
2008/05/24(土) 15:08:32[2] 問題文:キーボードからの、数値入力(制限あり)
[3] 環境
[3.1] Windows XP SP/Fedora Linux Core 8
[3.2] VS2005 VC++/gcc++
[3.3] 言語: C/C++
[4] 期限:
[5] STLはOKです、boostはちょっと・・・
キーボードから入力した数値を
一番目の数値をint xに、二番目の数値をint yに代入し、それ以降の数値は、
破棄したいのですがどのように書いたらイイデツカ
教えてくださいエロイヒト
int main()
{
istream_iterator<int> iit( cin );
istream_iterator<int> iit_eof;
while( iit != iit_eof ) {
cout << *iit << endl;
iit++;
}
return 0;
}
0627デフォルトの名無しさん
2008/05/24(土) 16:05:09char ss[16];
gets(ss); //例:4278入力
x = atoi(ss[0]); //x = 4
y = atoi(ss[1]); //y = 2
--------------------------------
int i, tmp[16];
for(i=0;tmp[i] != 'e';i++) {
scanf("%d", &tmp[i]);
}
x = tmp[0];
y = tmp[1];
---------------------------
前者左から1桁目をXへ、2桁目をYへ
後者1文字ずつ入力し、1回目をXへ、2回目をYへ、eで終了
0628デフォルトの名無しさん
2008/05/24(土) 16:14:170629デフォルトの名無しさん
2008/05/24(土) 16:19:490630デフォルトの名無しさん
2008/05/24(土) 16:52:060631デフォルトの名無しさん
2008/05/24(土) 17:04:21ひどすぎるw
0632デフォルトの名無しさん
2008/05/24(土) 17:04:310633デフォルトの名無しさん
2008/05/24(土) 17:07:56[2] 問題文
合計で税込み500円以下の買い物をすることにした
消費税別の価格で100円、150円、170円、220円、240円、290円の商品がある
この中から2つ選んで500円に一番近い組み合わせを表示しなさい
ただし2つの商品は違う種類のものを選ぶこと
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C
[4] 期限:今月中(できるだけ早めに解答していただけると助かります
[5] その他の制限:大学3年レベル
お願いします
0634デフォルトの名無しさん
2008/05/24(土) 17:22:55なのでss[0]で可。
0635デフォルトの名無しさん
2008/05/24(土) 17:23:22税込み価格で500円に一番近い商品?
0636デフォルトの名無しさん
2008/05/24(土) 17:24:52const char*にcharが渡せるの?
0637デフォルトの名無しさん
2008/05/24(土) 17:25:06170 + 290 = 460、220 + 240 = 460と二つあるんだけれど、
どうしよ?
あと、レジは2つまとめて税計算、端数切り捨てでよいの?
0638デフォルトの名無しさん
2008/05/24(土) 17:25:560639デフォルトの名無しさん
2008/05/24(土) 17:26:41可じゃねーよw
0640側近中の側近 ◆0351148456
2008/05/24(土) 17:35:31(っ´▽`)っ
さあ感謝するんだ☆
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6661.txt
0641デフォルトの名無しさん
2008/05/24(土) 17:37:13priseは大学三年生レベルに合わせてあげてるのか?
0642側近中の側近 ◆0351148456
2008/05/24(土) 17:38:46終わった・・・スペルミスだ
(っ´ω`)っ しにたいよぅ
0643デフォルトの名無しさん
2008/05/24(土) 17:39:53解答ありがとうございます
こんなに早く答えてもらえるとは思ってませんでした
0644側近中の側近 ◆0351148456
2008/05/24(土) 17:40:52(っ´▽`)っ
で、priseで提出するんだよね?当然
0645デフォルトの名無しさん
2008/05/24(土) 17:43:05> ただし2つの商品は違う種類のものを選ぶこと
これを実装してないように思えるけどそこは残課題として頑張れって事かな
側近はいつも何かをあえて残しているように思う
0646デフォルトの名無しさん
2008/05/24(土) 17:45:25誰とは言わないが
AtoI
0647デフォルトの名無しさん
2008/05/24(土) 17:45:250648側近中の側近 ◆0351148456
2008/05/24(土) 17:47:07(っ´ω`)っ
いっしょにしのうね
0649デフォルトの名無しさん
2008/05/24(土) 17:47:580650デフォルトの名無しさん
2008/05/24(土) 17:49:39どっちに言ってるかはっきりしてくれ
0651側近中の側近 ◆0351148456
2008/05/24(土) 17:50:45とりあえずatoiを「あとい」と呼ぶ奴はダメだな☆
0652626
2008/05/24(土) 17:56:24#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <math.h>
using namespace std;
class Math {
div_t ires;
int iquot, irem;
public:
Math ():iquot(0), irem(0){}
~Math(){}
int HeadFigure(int n);
int Digit(int n);
};
int Math::HeadFigure(int n)
{
int digit = 10;
while( digit < 65535 ) {
ires = div(n, digit);
iquot = ires.quot; // 商
irem = ires.rem; // 余り
if (0 < iquot && iquot < 10)
return iquot;
if (iquot == 0)
return irem;
digit *= 10;
}
return -1;
}
0653デフォルトの名無しさん
2008/05/24(土) 17:56:32俺はだめプログラマーだたのか。
0654626
2008/05/24(土) 17:57:20{
int cou = 1;
int digit = 10;
while( digit < 65535 ) {
ires = div(n, digit);
iquot = ires.quot; // 商
irem = ires.rem; // 余り
if (0 < iquot && iquot < 10)
return cou;
if (iquot == 0)
return -1;
digit *= 10;
++cou;
}
return -1;
}
0655626
2008/05/24(土) 17:57:57{
Math math;
int x, y, cou;
double result;
istream_iterator<int> iit( cin );
istream_iterator<int> iit_eof;
while( iit != iit_eof ) {
cou = math.Digit(*iit);
if (cou == -1)
cout << "二桁以上の整数を入力してください" << endl;
x = math.HeadFigure(*iit);
cout << x << endl;
result = x * pow(10.0, (double)cou);
y = math.HeadFigure(*iit - result);
cout << y << endl;
iit++;
}
}
0656デフォルトの名無しさん
2008/05/24(土) 18:06:220657デフォルトの名無しさん
2008/05/24(土) 18:07:180658626
2008/05/24(土) 18:09:42スマン
だめだしタノンマス
class Math
は、使い回しが出来そうなんでわざとクラスにシマスタ
template使ったら、intでもlongでも使えて(現実的にはありえんがw)
より汎用的になると思われるが、そこまでの実力はない・・・orz
0659デフォルトの名無しさん
2008/05/24(土) 18:13:490660デフォルトの名無しさん
2008/05/24(土) 18:15:57なぜこうも。。。そしてなぜ65535。。。
0661626
2008/05/24(土) 18:22:38そうそう(^^;
実は、ボードゲームを作っていて、駒を置く座標の入力を
X座標Y座標[enter]で入力したかっただけなんですw
具体的には
35enterってな感じっす
X座標[enter]
Y座標[enter]
ならcinで全然OKだったんだけど、少々意地になってシマイマスタ
0662デフォルトの名無しさん
2008/05/24(土) 18:32:45各座標は1-9の範囲で十分ってこと?
string s;
getline(cin,s);
printf("%d %d\n", s[0]-'0', s[1]-'0');
上記のようなやり方では何がダメなの?
こだわるのはいいけれど、こだわりどころを間違えてはいけないと思うよ。
main関数が何も返さないのを直すとか、そういうもっと基本的な部分を
こだわってみようよ。
0663デフォルトの名無しさん
2008/05/24(土) 18:35:14それよりもせっかくボードゲーム作るならAIとかにこだわれよ
0664デフォルトの名無しさん
2008/05/24(土) 18:43:460665626
2008/05/24(土) 18:52:55return 0;
が抜けてマスタ、コピペの失敗だす
こだわりその2は
istream_iteratorが使って見たかったッス
それから
printf("%d %d\n", s[0]-'0', s[1]-'0');
std::stringはCの配列[]をオーバーロードしてたんですよね、忘れてマスタ、これを忘れてたのは痛い
>>663
AIもおもろそうだけど、socketの実装が先に出来ているんで
サーバーを介して、人 vs 人の、対戦型ボードゲームを先に作ってその後で考えます
>>664
そんなところです
0666デフォルトの名無しさん
2008/05/24(土) 22:16:140667デフォルトの名無しさん
2008/05/24(土) 22:58:460668デフォルトの名無しさん
2008/05/24(土) 23:05:17こんなんどう?
x:1-9 y:a-i
#include<iostream>
#include<string>
#include<cctype>
int main(void){
std::string s;
int x, y;
for(;;){
x=y=-1;
std::cout << "座標を入力してください ";
getline(std::cin, s);
if(s.size()!=2) continue;
for(int i=0;i<2;i++){
if(isupper(s[i])) y=s[i]-'A'+1;
if(islower(s[i])) y=s[i]-'a'+1;
if(isdigit(s[i])) x=s[i]-'1'+1;
}
if(x>=1 && x<=9 && y>=1 && y<=9) break;
}
std::cout << "x=" << x << " y=" << y << std::endl;
return 0;
}
0669668
2008/05/24(土) 23:35:03for(int i=0;i<2;i++){
if(isupper(s[i])) y=s[i]-'A'+1;
if(islower(s[i])) y=s[i]-'a'+1;
if(isdigit(s[i])) x=s[i]-'1'+1;
}
↓
for(int i=0;i<2;i++){
if(isalpha(s[i])) y=toupper(s[i])-'A'+1;
if(isdigit(s[i])) x=s[i]-'1'+1;
}
0670デフォルトの名無しさん
2008/05/25(日) 00:28:10[2] 問題文(含コード&リンク):
共用体を用いた単精度実数型の値のバイトオーダーを変換する関数
(ビッグエンディアン→リトルエンディアン)を作成せよ
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2008年5月28日まで]
[5] 以下のコードが与えられています
union byteorder {
(A)
float fval;
};
float conv_order_(float *f)
{
union byteorder buf;
buf.fval = *f;
(B)
return buf.fval;
};
(A)と(B)を埋める問題です。
よろしくお願いします。
0671デフォルトの名無しさん
2008/05/25(日) 01:16:30union byteorder {
unsigned char bytes[4];
float fval;
};
float conv_order_( float* f )
{
union byteorder buf;
buf.fval = *f;
{
unsigned char temp;
temp = buf.bytes[0];
buf.bytes[0] = buf.bytes[3];
buf.bytes[3] = temp;
temp = buf.bytes[1];
buf.bytes[1] = buf.bytes[2];
buf.bytes[2] = temp;
}
return buf.fval;
}
0672デフォルトの名無しさん
2008/05/25(日) 01:39:32int main(){
double x[]={20.0,40.0,60.0,80.0,100.0};
double y[]={1.31,2.93,3.21,4.85,5.46};
double a,b;
int i,j,n;
double xk,yk,xy,x2;
FILE *fp;
xk=yk=xy=x2=0;
a = 0;
b = 0;
n=5;
fp = fopen("test.dat","w");
for(i=0;i<n;i++){
xk += x[i];
yk += y[i];
xy += x[i]*y[i];
x2 += x[i]*x[i];
fprintf(fp,"%f %f¥n",x[i],y[i]);
}
printf("%lf %lf %lf %lf¥n",xk,yk,xy,x2);
a = (n*xy - xk*yk)/(n*x2 - xk*xk);
b = (x2*yk - xy*xk)/(n*x2 - xk*xk);
printf("f(x) = %lf * x + %lf¥n",a,b);
return 0;
}
ここまでは教えて頂いたのですが、
実際に実行してみるとデバッグでエラーが発生しました。
上のプログラムのどこかを直せばいいのでしょうか?
0674デフォルトの名無しさん
2008/05/25(日) 02:09:45実際に実行するとエラーが出ずに終わりました。
06751/2
2008/05/25(日) 02:39:02main(){
char *ptr ="I'm";
char *x;
x=change(ptr);
printf("change()=%s\n",x);
}
char *change(char *ptr){
char *s;
char t;
int i,count=0;
while(*ptr!='\0'){
ptr++;
count++;
}
ptr-=count;
for(i=0;i<=count;i++){
if(*(ptr+i)>=0x41 && *(ptr+i)<=0x5A){
t=*(ptr+i)+32;
*(s+i)=t;
}else if(*(ptr+i)>=0x61 && *(ptr+i)<=0x7A){
t=*(ptr+i)-32;
*(s+i)=t;
}else{
t=*(ptr+i);
*(s+i)=t;
}
}
*(s+count)='\0';
return s;
}
半角英数字文字列の大文字を小文字に、小文字を大文字にするプログラムなんですがセグメンテーション違反を吐き出します。
06762/2
2008/05/25(日) 02:39:28簡略化してみたプログラムで
main(){
char *ptr="strings";
char *s,t;
int i,count=0;
while(*ptr!='\0'){
ptr++;
count++;
}
ptr-=count;
for(i=0;i<count;i++){
if(*(ptr+i)>=0x41 && *(ptr+i)<=0x5A){
*(s+i)=*(ptr+i)+35;
}else if(*(ptr+i)>=0x61 && *(ptr+i)<=0x7A){
*(s+i)=*(ptr+i)-29;
}else{
*(s+i)=*(ptr+i);
}
printf("a");
}
*(s+count)='\0';
printf("%s",s);
}
を作ってみたのですが文字列が4文字以上になるとセグメンテーション違反を吐き出します。
なぜでしょうか?
0677訂正です
2008/05/25(日) 02:41:59f(*(ptr+i)>=0x41 && *(ptr+i)<=0x5A){
*(s+i)=*(ptr+i)+35;
}else if(*(ptr+i)>=0x61 && *(ptr+i)<=0x7A){
*(s+i)=*(ptr+i)-29;
}else{
*(s+i)=*(ptr+i);
}
は
f(*(ptr+i)>=0x41 && *(ptr+i)<=0x5A){
*(s+i)=*(ptr+i)+32;
}else if(*(ptr+i)>=0x61 && *(ptr+i)<=0x7A){
*(s+i)=*(ptr+i)-32;
}else{
*(s+i)=*(ptr+i);
}
です。
0678デフォルトの名無しさん
2008/05/25(日) 03:31:470679デフォルトの名無しさん
2008/05/25(日) 03:36:24sは一体どこを指しているんだ。
初期化していない(どこか知らないテキトーなアドレスを指している)ポインタをアクセスしたら
落ちて当たり前。
4文字未満で落ちなかったのは偶然だ。
0680デフォルトの名無しさん
2008/05/25(日) 03:41:23ポインタと変数のスコープの勉強をやり直し
0681675
2008/05/25(日) 04:08:26ポインタでの問題も理解しました。
局所変数のアドレスを返してしまうスコープの問題も宣言で大域変数にすることで解決しました。
ありがとうございました。
0682633
2008/05/25(日) 14:15:40たびたびすいません
もう少し簡単なプログラムはないでしょうか
あと価格が290円ではなく390円でした
おねがいします
0683デフォルトの名無しさん
2008/05/25(日) 14:19:07290を390に書き換えろよ
ソース見れば理解できるだろ
0684デフォルトの名無しさん
2008/05/25(日) 14:30:53sizeofを習っていないので使ってないプログラムを
お願いしたいのですが
0685デフォルトの名無しさん
2008/05/25(日) 14:33:02変:6
0686デフォルトの名無しさん
2008/05/25(日) 14:36:31本当にありがとうございます
0687デフォルトの名無しさん
2008/05/25(日) 14:39:560688デフォルトの名無しさん
2008/05/25(日) 14:40:51[2] 問題文:フィボナッチ数列とは(0,1,1,2,3,5,8,13,21…)のような数列で、n番目のフィボナッチ数Fnは、F0=0,F1=1, Fn+2=Fn+Fn+1(n≧0)で表すことができる。
n番目のフィボナッチ数を返す関数fiboを再帰関数で作成せよ。
[3] 環境
[3.1] OS:WindowsVista
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C++
[4] 期限:2008年5月26日21:00まで
[5] その他の制限:
小文字が出来なくて見にくくなってしまいましたが,よろしくお願いします!
0689デフォルトの名無しさん
2008/05/25(日) 14:49:41最初のは0番目っていうのか?おかしくね?
0690デフォルトの名無しさん
2008/05/25(日) 15:13:44[2] 問題文:(キーボードから5つの数値を取得し、その合計を出力せよ。
ただし、変数は2つまでしか使えないとする。)
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C)
[4] 期限: 5/27
[5] その他の制限: (printf、四則演算、scanfを習いました)
よろしくお願いします
0691デフォルトの名無しさん
2008/05/25(日) 15:17:05int fibo(int n)
{
const int n_max = 46;
static int cache[n_max+1] = {0};
if(n < 0 || n > n_max) return -1;
if(n <= 1) return n;
if(cache[n]) return cache[n];
return cache[n] = fibo(n-2) + fibo(n-1);
}
0692デフォルトの名無しさん
2008/05/25(日) 15:19:43#include<stdio.h>
int main()
{
int sum = 0, v;
scanf("%d", &v); sum += v;
scanf("%d", &v); sum += v;
scanf("%d", &v); sum += v;
scanf("%d", &v); sum += v;
scanf("%d", &v); sum += v;
printf("合計は%d\n", sum);
return 0;
}
0693デフォルトの名無しさん
2008/05/25(日) 15:23:540694デフォルトの名無しさん
2008/05/25(日) 15:31:55#include<stdio.h>
int main()
{
int sum_i = 0, v;
for(; (sum_i & 7) < 5; sum_i ++) {
scanf("%d", &v);
sum_i += v * 8;
}
printf("合計は%d\n", (sum_i & ~7) / 8);
return 0;
}
0695デフォルトの名無しさん
2008/05/25(日) 15:43:11回答ありがとうございます
授業ではなくてやっているものなので
先輩が課題を作っています
0696デフォルトの名無しさん
2008/05/25(日) 15:48:21キーボードから取得する数値は、整数のみ?
0697デフォルトの名無しさん
2008/05/25(日) 15:49:25これって配列の変数1つとループ用の変数1つを使えって問題なんじゃ?
0698691
2008/05/25(日) 15:56:26改良しました。
//compile as C++
int fibo(int n){
static int *fibonatti_seq_table=NULL;
static int already_done=1;
if( (n<0) || (n>46) )return -1;
if(n<=1)return 1;
if(n<=already_done)return fibonatti_seq_table[n];
if(fibonatti_seq_table==NULL){
fibonatti_seq_table=new int[47];
for(int i=2;i<=46;i++){
fibonatti_seq_table[i]=fibo(i-1)+fibo(i-2);
already_done=i;
}
}
return fibo(n);
}
0699デフォルトの名無しさん
2008/05/25(日) 16:02:12int fibo(int n) {
if (n == 0) return 1;
if (n == 1) return 1;
return fibo(n-1) + fibo(n-2);
}
0700デフォルトの名無しさん
2008/05/25(日) 16:06:27何でもアリになっちまう。
再帰処理したいんだったっらLISPでもやれ
0701デフォルトの名無しさん
2008/05/25(日) 16:09:19その理屈はおかしい
0702デフォルトの名無しさん
2008/05/25(日) 16:09:330703デフォルトの名無しさん
2008/05/25(日) 16:11:060704デフォルトの名無しさん
2008/05/25(日) 16:15:15ぶん殴られるな
0705デフォルトの名無しさん
2008/05/25(日) 16:16:25末尾再帰は非再帰に置き換えられるが
アッカーマン関数のような再帰点が複数ある場合は
置き換え不可能
0706デフォルトの名無しさん
2008/05/25(日) 16:17:420707デフォルトの名無しさん
2008/05/25(日) 16:18:11そっとしとけよ。
0708デフォルトの名無しさん
2008/05/25(日) 16:28:07コールスタックを自前で実現すれば見た目非再帰になるけれど?
0709デフォルトの名無しさん
2008/05/25(日) 16:35:12#include <stdbool.h>
static unsigned long long fib(unsigned n)
{
if (n == 0) return 0;
static unsigned long long a[94] = {0, 1, };
bool inRange = n < sizeof(a) / sizeof(* a);
if (inRange && a[n] != 0) return a[n];
// if (fib(n - 1) > INT64_MAX) return UINT64_MAX;
unsigned long long val = fib(n - 1) + fib(n - 2);
if (inRange) a[n] = val;
return val;
}
int main()
{
for (int n = 0; n <= 93; ++n) { // max fib with ulonglong
printf("%d:%llu\n", n, fib(n));
}
return 0;
}
0710デフォルトの名無しさん
2008/05/25(日) 16:37:100711デフォルトの名無しさん
2008/05/25(日) 17:01:21どうせするならここまでやれ
int fibo(int n){
static int *fib_tb=NULL;
if(n<0)
return -1;
if(n>46)
return -1;
if(n<=1)
return 1;
if(fib_tb)
return fib_tb[n];
fib_tb=new int[47];
fib_tb[0]=fib_tb[1]=1;
for(int i=2;i<=46;i++)
fib_tb[i]=fib_tb[i-1]+fib_tb[i-2];
return fibo(n);
}
0712691
2008/05/25(日) 17:07:000713デフォルトの名無しさん
2008/05/25(日) 17:13:140714デフォルトの名無しさん
2008/05/25(日) 17:54:54再度書き込み失礼します。
[1] 授業単元:C言語の実習
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6664.txt
[3] 環境
[3.1] OS:Windows vista
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C,c++
[4] 期限:未完成のまま出してしまったので再提出だと思うので、できれば早めにお願いします。
[5] その他の制限:return使用禁止。 forやwhile、printfなどの初歩的なものしか習ってません。
分けたりせずに1本のプログラムで書いて下さい。
0715デフォルトの名無しさん
2008/05/25(日) 18:06:21#include <stdio.h>
void main(void)
{
int a[10]={25,56,65,80,73,53,68,87,36,78};
int i,j,k;
printf("整列前:");
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
for(i=9; i>=0; i--)
for(j=0; j<i; j++)
if(a[j]<a[j+1]) {
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
printf("整列後:");
for(i=0; i<10; i++)
printf("%d ", a[i]);
printf("\n");
}
0716デフォルトの名無しさん
2008/05/25(日) 18:06:31#include <stdio.h>
void main(void)
{
int a[10]={25,56,65,80,73,53,68,87,36,78};
int i,j,k;
printf("整列前:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
for(i=0;i<10;i++)
for(j=i;j<10;j++)
if(a[i]<a[j]){
k=a[i]; a[i]=a[j]; a[j]=k;
}
printf("整列後:");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
0718デフォルトの名無しさん
2008/05/25(日) 19:06:19[1] 授業単元:プログラミング基礎
[2] 問題文(含コード&リンク):
ある自然数Nを入力し、N以下の3つの自然数a,b,cで、
aの2乗+bの2乗=c2乗
を満たすものを全て表示するプログラムを作りなさい。
ただし、
a<b となっているものだけを表示(a=3,b=4,c=5は表示するがa=4,b=3,c=5は表示しない)。
a,b,cが共通の素因数を持っているものは表示しない(a=6,b=8,c=10は表示しない)。
とすること。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: ([2008年6月6日まで]
[5] その他の制限:簡単な配列や関数までは習いました
0719デフォルトの名無しさん
2008/05/25(日) 19:11:52ANSI準拠していない場合にはあり得るかも知れませんが、
それはどのコンパイラの話ですか?
#include<stdio.h>
#include<string.h>
void foo(void){
char s[]="foo Initialized!", *p;
puts("----------");
puts(s);
if((p=strchr(s, '!'))) *p='?';
puts(s);
}
void bar(void){
char *s="bar Initialized!", *p;
puts("----------");
puts(s);
if((p=strchr(s, '!'))) *p='?'; // 本当はやっちゃダメ
puts(s);
}
int main(void){
foo();
foo();
bar();
bar();
return 0;
}
0720デフォルトの名無しさん
2008/05/25(日) 19:21:56#include <stdio.h>
int gcd(int a, int b) { return a % b ? gcd(b, a % b) : b; }
int main(void)
{
int a, b, c, n;
scanf("%d", &n);
for(c=1; c<=n; c++) {
for(a=1; a<=n; a++) {
for(b=a+1; b<=n; b++) {
if(c*c==a*a+b*b && gcd(a, b)==1) printf("a=%d b=%d c=%d\n", a, b, c);
}
}
}
return 0;
}
0721デフォルトの名無しさん
2008/05/25(日) 19:27:100722デフォルトの名無しさん
2008/05/25(日) 19:33:30#include<stdio.h>
#include<math.h>
int gcd(int a, int b){
int c;
while((c=a%b)) a=b,b=c;
return b;
}
int gcd3(int a, int b, int c){
return gcd(a, gcd(b, c));
}
int main(void){
int a, b, c, N, chk;
scanf("%d", &N);
for(c=3;c<=N;c++){
for(b=sqrt(c*c/2)+1;b<c;b++){
a=sqrt(c*c-b*b-1)+1;
chk=c*c-b*b-a*a;
if(chk==0 && gcd3(a, b, c)==1) printf("a=%d b=%d c=%d\n", a, b, c);
}
}
return 0;
}
0723デフォルトの名無しさん
2008/05/25(日) 19:41:17int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
int main() {
int N, m, n;
scanf("%d", &N);
for (n = 1; n*n <= N; ++n)
for (m = n+1; m*m+n*n <= N; m+=2)
if (gcd(n, m) == 1)
printf("%d %d %d\n", m*m-n*n, 2*m*n, m*m+n*n);
return 0;
}
0724デフォルトの名無しさん
2008/05/25(日) 19:48:380725デフォルトの名無しさん
2008/05/25(日) 19:50:03そうだねw
0726718
2008/05/25(日) 20:11:290727デフォルトの名無しさん
2008/05/25(日) 20:49:27[1] 授業単元: Cプログラミング
[2] 問題文(含コード&リンク):
1、学生10名の3科目 英語数学国語の成績表がある(値は任意で入力)。
個人別の合計、及び科目ごとの平均を計算するプログラムを、次の仕様に従って組みなさい。
(1)各学生の点数をキーボードから入力すること。
(2)合計、及び平均を求める箇所を関数とすること。
(3)結果をファイル(kekka.txtなど)に出力すること。
(学生名 英語 数学 国語 合計)
2、問題1で作成したプログラムを、合計点が大きい順にソートして出力するように変更しなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VC2005
[3.3] 言語: C/C++どちらでも可
[4] 期限: [2008年5月26日14:30まで]
[5] その他の制限:
0728デフォルトの名無しさん
2008/05/25(日) 21:09:47[2] 問題文(含コード&リンク):
【n人のテストの得点に関する順位付け】
以下の関数にメインプログラムを付け、プログラムを実行せよ。実際何回の演算が行われたか数えるルーチンを追加すること。
�@http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6665.txt
�Ahttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6666.txt
�Bhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6667.txt
データhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6668.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc g++
[3.3] 言語: どちらでも可
[4] 期限: 5月27日24:00まで
[5] その他の制限: 特にないです。よろしくお願い致します。
0729デフォルトの名無しさん
2008/05/25(日) 22:55:40[2] 問題文(含コード&リンク):
入力された値を2進数に変換せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc
[4] 期限: 5月26日まで
[5] その他の制限:よろしくお願い致します。
0730デフォルトの名無しさん
2008/05/25(日) 23:00:21#include<stdio.h>
int main(void){
int i, n;
scanf("%d", &n);
for(i=0;(n>>i) && i<32;i++);
for(i--;i>0;i--) printf("%d", (n>>i)&1);
printf("%d\n", n&1);
return 0;
}
0731デフォルトの名無しさん
2008/05/25(日) 23:23:31[2] 問題文(含コード&リンク):
キーボードから入力した数だけ、*(アスタリスク)を表示するプログラムを作れ。
ただし、*を10個表示させるたびに改行を入れよ。
[3] 環境
[3.1] OS: WindowsVista
[3.2] コンパイラ名とバージョン:VisualStudio2008
[3.3] 言語:C言語
[4] 期限: [2008年5月28日00:00まで]
[5] その他の制限:printf,scanf,for,while,do-while,if,switch文のみ使用可。
お願いします。
「*を入力された数だけ表示」というところはできましたが、10個ごとに改行するのができません。
#include <stdio.h>
int main(void)
{
int x,n,m,y;
printf("*(アスタリスク)を表示する数を入力してください:");
scanf("%d",&x);
for(n=1;n<=x;n++){
printf("*");
y=n/10;
for(m=1;m<=y;m=m+10){
printf("\n");
}
}
return 0;
}
0732デフォルトの名無しさん
2008/05/25(日) 23:26:51#include <stdio.h>
int main(void){
int x,n;
printf("*(アスタリスク)を表示する数を入力してください:");
scanf("%d",&x);
for(n=1;n<=x;n++){
printf("*%.*s", !(n%10), "\n");
}
return 0;
}
0733デフォルトの名無しさん
2008/05/25(日) 23:49:02うはw同じクラスだww
これで課題間に合いそうだ、スレのおかげで助かったよ。
0734デフォルトの名無しさん
2008/05/25(日) 23:57:02早いレスありがとうございます。
ありがたいのですが、
printf("*%.*s", !(n%10), "\n");
の部分について、式が3つあるようなprintf文は習っておらず、意味もわかりません。
申し訳ありませんが、再度お願いします。
0735デフォルトの名無しさん
2008/05/26(月) 00:04:34#include <stdio.h>
int main(void){
int x,n,m;
printf("*(アスタリスク)を表示する数を入力してください:");
scanf("%d",&x);
for(n=0;x-n>10;n+=10){
for(m=0;m<10;m++) printf("*");
printf("\n");
}
for(;n<x;n++) printf("*");
printf("\n");
return 0;
}
0736デフォルトの名無しさん
2008/05/26(月) 00:19:44本当にありがとうございます!
二度手間かけてすみませんでした。
0737 ◆wYUuBm6d7Q
2008/05/26(月) 01:13:32問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6669.txt
環境:Windows vista
VisualStudio2008
C言語
期限:5/26 17:00まで
その他:基本事項は学びました。
期限が近くて焦ってます。。よろしくお願いします。
0738デフォルトの名無しさん
2008/05/26(月) 02:54:19当方の環境は Windows XP/cygwin 処理系は gcc 3.4.4 です。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 100000
#define T 100
int main()
{
int n, p, q, st, t, i;
time_t start_time, stop_time;
start_time = time(NULL);
for (i = 0; i < T; i++) {
for (p = 3, n = 1; p <= N; p += 2) {
st = sqrt(p);
for (q = 2; q <= st; q += (q == 2) ? 1 : 2) {
if ((t = p % q) == 0)
break;
}
if (t == 0)
continue;
n++;
}
if (i % 10 == 0)
printf("%d\n", i);
}
stop_time = time(NULL);
printf("n = %d, time: %.3fsec\n", n, (double)(stop_time - start_time) / T);
return 0;
Pentium3(1.0GHz)で 0.11 秒でした。
0739デフォルトの名無しさん
2008/05/26(月) 02:55:38失敗しました。もう一度。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 100000
#define T 100
int main()
{
int n, p, q, st, t, i;
time_t start_time, stop_time;
start_time = time(NULL);
for (i = 0; i < T; i++) {
for (p = 3, n = 1; p <= N; p += 2) {
st = sqrt(p);
for (q = 2; q <= st; q += (q == 2) ? 1 : 2) {
if ((t = p % q) == 0)
break;
}
if (t == 0)
continue;
n++;
}
if (i % 10 == 0)
printf("%d\n", i);
}
stop_time = time(NULL);
printf("n = %d, time: %.3fsec\n", n, (double)(stop_time - start_time) / T);
return 0;
}
0740デフォルトの名無しさん
2008/05/26(月) 03:02:480741デフォルトの名無しさん
2008/05/26(月) 03:13:060742デフォルトの名無しさん
2008/05/26(月) 03:21:079592個、Pen4 2.53GHzで2msecでした。
0743デフォルトの名無しさん
2008/05/26(月) 03:25:14printf("%d\n", i);
を
printf("%d %d\n",i,n);
に置き換えて実行した結果
0 9592
10 9591
20 9591
30 9591
40 9591
50 9591
60 9591
70 9591
80 9591
90 9591
n = 9591, time: 0.080sec
0745743
2008/05/26(月) 03:44:21BCC5.0でもやてみたら今度はすべからくn=9591
float(double)をintに置き換えるところ周りが原因なのだろけど
VCの場合は、よくわからん。何で一番と二番目以降の結果が
違うんだろか.
この謎の解明した人神
0746デフォルトの名無しさん
2008/05/26(月) 03:53:420747デフォルトの名無しさん
2008/05/26(月) 03:55:27じゃないの?
07481/5
2008/05/26(月) 04:11:44// main.cpp
#include "Student_info.h"
#include "average.h"
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>
int main()
{
using namespace std;
// ifstream infile( "in.txt" );
ofstream outfile( "out.txt" );
Student_info s;
vector< Student_info > students;
// (1)各学生の点数をキーボードから入力すること。
cout << "成績を入力せよ(学生名 国語 英語 数学):" << endl;
copy( istream_iterator< Student_info >( cin ), istream_iterator< Student_info >(),
back_inserter( students ) );
// (2)合計、及び平均を求める箇所を関数とすること。
// (合計は Student_info クラスの メンバ関数)
// (3)結果をファイル(kekka.txtなど)に出力すること。
copy( students.begin(), students.end(), ostream_iterator< Student_info >( outfile, "\n" ) );
outfile << "英語平均:" << average( students, accum_english ) << endl;
outfile << "数学平均:" << average( students, accum_mathematic ) << endl;
outfile << "国語平均:" << average( students, accum_japanese ) << endl;
// 2、問題1で作成したプログラムを、合計点が大きい順にソートして出力するように変更しなさい。
sort( students.begin(), students.end(), compare_sum );
copy( students.begin(), students.end(), ostream_iterator< Student_info >( outfile, "\n" ) );
return 0;
}
0749748
2008/05/26(月) 04:15:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6671.txt
0750デフォルトの名無しさん
2008/05/26(月) 06:10:00[2] 問題文 文字列をキーボードから入力してから逆順にして返す関数を作れ
また文字列が奇数と偶数の2通りの結果を出すこと
関数内がポインタの場合も作成せよ
#include <stdio.h>
void func(char cc[])
{
処理の記述(逆順)
}
int main(void)
{
char str[10];
printf("string ->");
処理の記述(文字列入力)
func(str);
printf("逆順は%sです\n",str);
return(0);
}
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C
[4] 期限今週中
[5] その他の制限:大学レベル
お願いします
0751デフォルトの名無しさん
2008/05/26(月) 06:58:45謎でもなんでもなくてただの初期化忘れ。
p = 3 を試すときに st = [sqrt(p)] = 1 なので
試し割りするループは回らない。
そのとき t がどうなってるか考えれば分かる。
0752デフォルトの名無しさん
2008/05/26(月) 07:17:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6672.txt
0753752
2008/05/26(月) 07:24:20#define DATANUM 10にしといて
0755727
2008/05/26(月) 08:14:07すいません、39行目
human[i].name = malloc(sizeof(char)*(strlen(BUFF)+1));
で error C2440: '=' : 'void *' から 'char *' に変換できません。
'void*' から非 'void' 型への変換には明示的なキャストが必要です。
と出るのですが、どこを修正すればよいのでしょうか。
0756デフォルトの名無しさん
2008/05/26(月) 08:18:59私が寝ている間にバグを退治していただいて、感謝です。>>751
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define N 100000
#define T 100
int main()
{
int n, p, q, st, t, i;
time_t start_time, stop_time;
start_time = time(NULL);
for (i = 0; i < T; i++) {
for (p = 3, n = 1; p <= N; p += 2) {
st = sqrt(p);
t = 1;
for (q = 2; q <= st; q += (q == 2) ? 1 : 2) {
if ((t = p % q) == 0)
break;
}
if (t == 0)
continue;
n++;
}
if (i % 10 == 0)
printf("%d\n", i);
}
stop_time = time(NULL);
printf("n = %d, time: %.3fsec\n", n, (double)(stop_time - start_time) / T);
return 0;
}
0757742
2008/05/26(月) 09:30:31関数の中でNに依存するコードがあったので修正しました。
これにより、メモリを動的に確保する必要があり、処理速度が遅くなりました。
また、アルゴリズムを改良しました。
2以外の偶数は素数で無い事が明らかなので、ふるいの処理を
別にすること、また、その後の処理は奇数のみ吟味するようにしました。
結果的には2msec→0.7msecとなりました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6673.txt
0758750
2008/05/26(月) 10:01:01期限が今日中になったので早めに解答してくださると助かります
0759デフォルトの名無しさん
2008/05/26(月) 10:42:00{
char *p = cc;
whille(*p) p++;
while(--p > cc) {
char temp = *p;
*p = *cc;
*cc++ = temp;
}
}
0760デフォルトの名無しさん
2008/05/26(月) 10:45:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6674.c
本当に助かりました。ありがとうございます!
0762デフォルトの名無しさん
2008/05/26(月) 10:59:39一部を削除、追加とかマジうぜぇから
0763デフォルトの名無しさん
2008/05/26(月) 11:00:49解答ありがとうございます
もう少し簡単なプログラムはないでしょうか
(defineを使わずにあくまで処理を指定されている部分のみの追加で)
あとポインタの解答もお願いします
0764デフォルトの名無しさん
2008/05/26(月) 11:38:48#define BIT_SET(index) (furui[index/32]|=1<<(index&31))
#define BIT_GET(index) ((furui[index/32]>>(index&31))&1)
int sosuu_count(int max){
unsigned long *furui;
int search_max = sqrt(max);
int i, work, num_sosuu;
if ((furui = (unsigned long*)calloc((max/32 + 1), sizeof(*furui))) == NULL){
fprintf(stderr, "malloc error\n");
return -1;
}
/* 0と1は素数ではない */
BIT_SET(0);
BIT_SET(1);
/* 以降は奇数のみ吟味する */
/* 3, 5, 7… */
for (i = 3; i<=search_max; i+=2){
if (BIT_GET(i) == 0){
/* 3倍、5倍、7倍… */
for(work = i*3; work <= max; work+=i*2) BIT_SET(work);
}
}
num_sosuu=1;
for (i = 3; i<=max; i+=2) num_sosuu+=!BIT_GET(i);
free(furui);
return num_sosuu;
}
0765デフォルトの名無しさん
2008/05/26(月) 11:58:17ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6675.c
0766デフォルトの名無しさん
2008/05/26(月) 12:00:220767デフォルトの名無しさん
2008/05/26(月) 12:05:38http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6676.c
0768752
2008/05/26(月) 12:16:07malloc(sizeof(char)*(strlen(BUFF)+1));を
(char *)malloc(sizeof(char)*(strlen(BUFF)+1));
0769742
2008/05/26(月) 12:20:37いじくっていただきありがとうございます。
なんかいいチューニング方法が他に無いかなあと思ってました。
車輪の再開発かもしれないですが、おもしろいですね。
0770デフォルトの名無しさん
2008/05/26(月) 12:36:53http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6677.c
0771デフォルトの名無しさん
2008/05/26(月) 12:38:10これもポインタを使ってるよ、ということを先生に説明すればいいのでは
0772デフォルトの名無しさん
2008/05/26(月) 12:54:47たびたびすみません
fgetsやsizeofは習っていないのでもっと初心者用プログラムはありませんか?
あと関数がvoid func(char *cc)場合もお願いします
0773デフォルトの名無しさん
2008/05/26(月) 12:55:39> あと関数がvoid func(char *cc)場合もお願いします
>>766
>>759
0774デフォルトの名無しさん
2008/05/26(月) 12:57:08> fgetsやsizeofは習っていないのでもっと初心者用プログラムはありませんか?
初心者の基準が曖昧。授業で習った手法があるならそれを使え。
あとは逆順に並び替える関数にそのまんま渡してやりゃ済むこと。
あと char cc[] でも char *cc でも同じことだから。
0775デフォルトの名無しさん
2008/05/26(月) 13:08:03初心者用プログラムってなんでしょう?
0776デフォルトの名無しさん
2008/05/26(月) 13:33:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6678.c
0777デフォルトの名無しさん
2008/05/26(月) 15:02:09[2] 問題文(含コード&リンク):
�@Dijkstraのアルゴリズム解法を実現するプログラムを作成し、コンパイルして実行せよ。このとき、グラフ中の指定頂点(ここでは頂点0)に対して、全ての頂点への最短経路コストと最短経路を標準出力に表示すること。
〜Graph〜
#define NC 9999
#define N 6
int edge[N][N] = {
/* src: 0 1 2 3 4 5 ...dst */
/* 0 */ { 0, NC, NC, 8, 15, NC},
/* 1 */ { 10, 0, 24, NC, 8, NC},
/* 2 */ { NC, NC, 0, NC, NC, 6},
/* 3 */ { NC, NC, NC, 0, 5, NC},
/* 4 */ { NC, NC, 12, NC, 0, 7},
/* 5 */ { NC, NC, 3, NC, NC, 0}
};
〜Result Sample〜
Result (from 0)
To 0 : ---
To 1 : No Path
To 2 : cost 23 : 2 <- 5 <- 4 <- 3 <- 0
To 3 : cost 8 : 3 <- 0
To 4 : cost 13 : 4 <- 3 <- 0
To 5 : cost 20 : 5 <- 4 <- 3 <- 0
�ADijkstraのアルゴリズムと、Floydのアルゴリズムについて、空間計算量と時間計算量をオーダーで表現せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名: gcc
[3.3] 言語: C
[4] 期限: 2008/05/29(Thu)
[5] その他の制限: 特にありません
よろしくお願いします。
0779デフォルトの名無しさん
2008/05/26(月) 17:22:48[2] 問題文(含コード&リンク):
任意のコマンドライン引数の平均を計算
ただしmalloc関数で配列用にメモリを確保し、コマンドライン引数の値を格納する処理を
次の関数(int *makeArray(int argc,char *argv[]))として定義し、プログラムを作成し動作を確認せよ。
ただしmakeArray関数はint型の配列の先頭を返すものとし、コマンドライン引数では
整数を指定するようにint型の配列にする。
[3] 環境
[3.1] OS: Vista
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 明日の夜まで
[5] その他の制限:一応例題などを手本に自分で作成したのですが
コンパイル時にこのようにsyntax errorがでてしまいます
kadai8.c:32: error: syntax error before ']' token
32行目はmakeArray(argc1,&argv1[],*table1);です
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6679.txt
これが自分で作成したものです
0780デフォルトの名無しさん
2008/05/26(月) 18:01:05int *makeArray(int argc, char *argv[]) {
int i, *a = malloc(sizeof(int) * (argc - 1));
for (i = 0; i < argc; i++) {
a[i] = atoi(argv[i]);
}
return a;
}
int main(int argc,char **argv) {
int i, sum = 0, *a = makeArray(argc, argv);
for (i = 0; i < argc; i++) {
sum += a[i];
}
printf("%d", sum / (argc - 1));
return 0;
}
0782531
2008/05/26(月) 18:51:51[1] 授業単元:プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6657.txt
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:VC++2005
[3.3] 言語:C++
[4] 期限:5月27日
[5] その他の制限:問題文中に記載してあります。
よろしくお願いします 。
0783デフォルトの名無しさん
2008/05/26(月) 19:12:24これはこれは。週末がんばったかね。
メモリ不足の処理を実装した上で壊しちゃったのかな。
0784デフォルトの名無しさん
2008/05/26(月) 20:09:58sinθ と cosθ を使い分けるのにどうして引数が kakudo だけなのだ。
グローバル変数を使って関数内部から参照しろとかいう
OOPをまるっきり無視したプログラムを組めってことかいな・・・。
それとも kakudo の中に学生番号の情報を埋め込むか。
0785デフォルトの名無しさん
2008/05/26(月) 20:25:19深読みしすぎw
偶数、奇数それぞれ違う宿題出ただけ
0786ヽ・´∀`・,,)っ━━━━━━┓
2008/05/26(月) 20:28:34しかし、そういうミスは出題ミスを指摘してOK
メモリ解放ミスですよとかね
それで優もらってたよ。
0787デフォルトの名無しさん
2008/05/26(月) 21:02:480788デフォルトの名無しさん
2008/05/26(月) 21:17:180789デフォルトの名無しさん
2008/05/26(月) 21:18:42何か不安あるならそのソース見せてみ
0790デフォルトの名無しさん
2008/05/26(月) 21:21:130791デフォルトの名無しさん
2008/05/26(月) 21:30:46>>764はすごそうなんだけど、数えるためだけにもう一回ループしてる
ので結局速くないよね?
ふかいなあ
0792デフォルトの名無しさん
2008/05/26(月) 22:16:390793デフォルトの名無しさん
2008/05/26(月) 22:16:51[2] 問題文:txtファイルを読み込みして、入力したデータを部分一致検索するプログラム
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:Borland
[3.3] 言語:C
[4] 期限:5月27日
[5] その他の制限:特になし。
お願いします><
0794デフォルトの名無しさん
2008/05/26(月) 22:16:540795デフォルトの名無しさん
2008/05/26(月) 22:17:520796デフォルトの名無しさん
2008/05/26(月) 22:17:59よければプラットホームを教えて欲しい
ちなみに
Core2Duo E6750 2.66GHz メモリ割当512MB
WindowsXP Pro on VMWarePlayer で
#define N 1000000
にした時
>>757 4.776[msec]
>>764 3.194[msec]
で 30% 程度 >>764 の方が高速だったけど?
0797796
2008/05/26(月) 22:19:33双方ともに -O2 オプション使用
0798793
2008/05/26(月) 22:23:37日本語下手ですいません…
0799799
2008/05/26(月) 22:26:470800デフォルトの名無しさん
2008/05/26(月) 22:39:06P4 2.8G コンパイラはVC、前者が>>757 後者が>>764
N=100000 最適化オプション無し
0.780 0.940
N=100000 -O2
0.460 0.310
N=1000000 最適化オプション無し
9.300 9.400
N=1000000 -O2
6.200 4.600
N=10000000 最適化オプション無し
284.300 170.300
Nが大きくなればなるほど>>764のほうが速くなるようでした。
最適化も>>764のほうがよく効くようでした。
お騒がせしますた。
0801デフォルトの名無しさん
2008/05/26(月) 22:53:42だから問題が意味不明w
>txtファイルを読み込みして、入力したデータを部分一致検索するプログラム
>ファイルオープンしてそのファイルから検索するソースです。
入力したデータってなんなんだよ
部分一致ってどの位なんだよ
具体例くらい示せ
0802793
2008/05/26(月) 23:00:21例)
txtデータ
1 あいうえお
2 かきくけこ
3 さしすせそ
4 あかさたな
入力データ
えお
出力結果
1 あいうえお
例2)
例)
txtデータ
1 あいうえお
2 かきくけこ
3 さしすせそ
4 あかさたな
入力データ
か
出力結果
2 かきくけこ
4 あかさたな
こんな感じです
0803デフォルトの名無しさん
2008/05/26(月) 23:09:08何様?
>>793によると出力いらないみたいだけど?
0804793
2008/05/26(月) 23:13:41具体例って言われたんでわかりやすく書いただけですが。
ついでに何様でもないですよ。
んでスレ違いになりそうなんで消えますね。
すいませんでした。
0805デフォルトの名無しさん
2008/05/26(月) 23:21:18こういうのを何様っていうんだよw
0806デフォルトの名無しさん
2008/05/26(月) 23:25:42[2] 問題文(含コード&リンク):コンピュータとチャHしよ♪プログラム
[3] 環境
[3.1] OS:Windows
[3.2] VisualStudio2005 [3.3] C
[4] 期限:
[5] その他の制限: あのシーマンのように声を掛けるとその掛けた声に
対して返信するようなプログラム。ただしエッチ中のかけ声に対した返答で
あること。また声で反応させるのは難しいので入力した文章に対して
返信すること。
例
自分の名前を入力> Taro
相手の名前を入力> Hana
taro>どうだ?気持ちいか?
taro:どうだ?気持ちいか?
Hana: もうちょっと奥まで・・・
taro>そうか、これでどうだ!
taro:そうか、これでどうだ!
Hana: あぁぁあああん
0807デフォルトの名無しさん
2008/05/26(月) 23:26:37何様?って何だよ。
宿題解答者も提出者も対等な関係だろ。
気に食わないなら放置すりゃいいだろ。
0808デフォルトの名無しさん
2008/05/26(月) 23:31:14エサ与えてもらってる分際で何様だよホント
0809デフォルトの名無しさん
2008/05/26(月) 23:31:320810デフォルトの名無しさん
2008/05/26(月) 23:35:46#include <stdio.h>
#include <string.h>
#define STR_MAX 256 // 一行読み込み最大
int main(int argc, char* argv[])
{
FILE *fpInput = NULL;
char string[STR_MAX] = {0};
if( argc < 3 ){
printf("実行ファイル 入力.txt 文字列\n");
return 1;
}
fopen_s( &fpInput, argv[1], "r" );
while( fgets( string, sizeof(string), fpInput ) != NULL ){
if( strstr( string, argv[2] ) != NULL )
puts( string );
}
fclose( fpInput );
return 0;
}
てけと。
出力はコンソールでよかったのかな…
0811デフォルトの名無しさん
2008/05/26(月) 23:35:47とか、いちいちスレの総論っぽく促してんじゃねーよw
0812デフォルトの名無しさん
2008/05/26(月) 23:36:38そもそも>>801が何様
0813デフォルトの名無しさん
2008/05/26(月) 23:37:000814デフォルトの名無しさん
2008/05/26(月) 23:37:380815デフォルトの名無しさん
2008/05/26(月) 23:45:34http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6680.c
ほい、遅くなった。
表示部分は適当に弄って。
0816デフォルトの名無しさん
2008/05/26(月) 23:48:180817デフォルトの名無しさん
2008/05/27(火) 00:24:26ありがとうございます助かりました
0818デフォルトの名無しさん
2008/05/27(火) 00:40:53メッセージテーブル持つしかないんじゃない?
0819デフォルトの名無しさん
2008/05/27(火) 00:49:57>>813
0820デフォルトの名無しさん
2008/05/27(火) 01:59:47それはアップできないファイルですと表示されるのでが
板違いの質問すみません
0821デフォルトの名無しさん
2008/05/27(火) 02:10:55添付可能ファイル : TEXT, LHA, ZIP, C, CPP
と書かれているが。
何アップロードしようとしてんの?
0822デフォルトの名無しさん
2008/05/27(火) 02:14:420823デフォルトの名無しさん
2008/05/27(火) 02:27:18C言語
[2] 問題文(含コード&リンク):()
数当て
キーボードから何度か数字を入力して当てるゲームを作成しなさい。
・入力のチャンスは五回までとする
・正解したら、「正解!」と出力して終了する
・不正解の場合は、大小関係や「惜しい!」などヒントを出力する
・五回とも不正解の場合は、正解と「残念!」などのメッセージを出力して終了する
【発展】
乱数生成の関数を使い、プログラムを実行するたびに
コンピュータが自動的に正解を用意するように改良しなさい。
[3] 環境
[3.1] OS: (Windows/Linux/等々)
Windows XP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
Micro soft Visual Studio 2005
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
6月2日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
途中まで書きました。
次のレスに貼ります。
0824823
2008/05/27(火) 02:29:09#include <stdlib.h>
#include <time.h>
int main(void)
{
int a, i, w;
srand((unsigned)time(NULL));
w = rand() % 51 + 1;
for(i=5; i>=1; i--){
printf("数字を入力してください。1〜50(あと%d回)\n", i);
scanf("%d", &a);
if(a==w){
printf("正解!\n");
break;
}else if(a == w+5)
printf("惜しい! もっと小さい数字です。\n");
else if(a == w-5)
printf("惜しい! もっと大きい数字です。\n");
else if(a > w)
printf("不正解! もっと小さい数字です。\n");
else if(a < w)
printf("不正解! もっと大きい数字です。\n");
}
if(i==0)
printf("残念!\n答えは%dです。\n", w);
printf("終了します。\n");
return 0;
}
これが限界です。後お願いします。
0825デフォルトの名無しさん
2008/05/27(火) 02:42:36「キーボードから何度か数字を入力して当てるゲームを作成しなさい。」でググったら90代目のスレで回答ありそうでワロタ
0826823
2008/05/27(火) 02:52:19#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int a, i, w;
srand((unsigned)time(NULL));
w = rand() % 51 + 1;
for(i=5; i>=1; i--){
printf("数字を入力してください。1〜50(あと%d回)\n", i);
scanf("%d", &a);
if(a==w){
printf("正解!\n");
break;
}else if(a == w+5 || a == w+4 || a == w+3 || a == w+2 || a == w+1)
printf("惜しい! もっと小さい数字です。\n");
else if(a == w-5 || a == w-4 || a == w-3 || a == w-2 || a == w-1)
printf("惜しい! もっと大きい数字です。\n");
else if(a > w)
printf("不正解! もっと小さい数字です。\n");
else if(a < w)
printf("不正解! もっと大きい数字です。\n");
}
if(i==0)
printf("残念!\n答えは%dです。\n", w);
printf("終了します。\n");
return 0;
}
0827デフォルトの名無しさん
2008/05/27(火) 03:04:07…。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int a, i, w;
srand((unsigned)time(NULL));
w = rand() % 51 + 1;
for(i=5; i>=1; i--){
printf("数字を入力してください。1〜50(あと%d回)\n", i);
scanf("%d", &a);
if(a==w){
printf("正解!\n");
break;
}
if(w+5>=a&&a>w)printf("惜しい! もっと小さい数字です。\n");
if(w>a&&w-5<=a)printf("惜しい! もっと大きい数字です。\n");
else if(a > w+5)
printf("不正解! もっと小さい数字です。\n");
else if(a < w-5)
printf("不正解! もっと大きい数字です。\n");
}
if(i==0)
printf("残念!\n答えは%dです。\n", w);
printf("終了します。\n");
return 0;
}
0828デフォルトの名無しさん
2008/05/27(火) 03:32:20試してないけどこんな感じ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int i, ans, choice;
srand((unsigned)time(NULL));
ans=(unsigned int)rand()%10;
for(i=5; i>0; i--){
printf("0〜9までの数字を入力してください: ");
scanf("%d", &choice);
if(! (0<=choice && choice<=9)){
printf("入力は0〜9までの数字でお願いします\n");
continue;
}else if(choice==ans){
printf("おめでとう,正解です\n");
return 0;
}else if(choice<ans){
printf("もっと大きい!\n");
}else if(choice>ans){
printf("もっと小さい!\n");
}
}
printf("残念,正解は%dでした\n", ans);
return 1;
}
0829デフォルトの名無しさん
2008/05/27(火) 05:15:350830デフォルトの名無しさん
2008/05/27(火) 07:28:47マクロにマルウェアを仕込めるようなフォーマットで、オフィススイートを持ってない人間には読めないようなもの、
アップロードしようと思う方がどうかしています。
0831デフォルトの名無しさん
2008/05/27(火) 07:48:25とか思わなくも無い。
0832デフォルトの名無しさん
2008/05/27(火) 08:13:28perrorの説明を見てみると、以下のようにあります。
「関数 perror() は、システムコールやライブラリ関数の呼び出しにおいて、最後に発生したエラーに関する説明メッセージを生成し、標準エラー出力に出力する。」
標準エラー出力に出すだけだったら、fprintf(stderr,...)を使えばいいきがしますが、どのような違いがあるのでしょうか?
0833つ[strerror()]
2008/05/27(火) 08:23:310834デフォルトの名無しさん
2008/05/27(火) 08:25:28ココ ヨメ
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/perror.3.html
0835デフォルトの名無しさん
2008/05/27(火) 10:34:15何かお勧めのフリーソフトをあったら教えてください
変な質問すいません
0836デフォルトの名無しさん
2008/05/27(火) 10:53:00いっぱいテキストファイルをアップロードしたい→圧縮ソフト
うpろだがいっぱいあってどれを使えばいいかわからない→>>1
さぁどれだ
0837823
2008/05/27(火) 11:00:17課題ではないのですが、入力された数字が1〜50以外の場合に、繰り返し入力させるようにするにはどうすればいいですか?
少し気になっただけなのでスルーしてもらっても構いません。
0838デフォルトの名無しさん
2008/05/27(火) 11:07:25while(1){
printf("数字を入力してください。1〜50(あと%d回)\n", i);
scanf("%d", &a);
if(a>0&&a<=50)break;
printf("入力は1〜50の範囲でお願いします。\n");
}
0839デフォルトの名無しさん
2008/05/27(火) 11:14:55[2] 問題文(含コード&リンク)
与えられた非減少非負整数列がグラフ的であるかどうかを判定する
関数 isDegreeSequence を C言語を用いて作れ。関数仕様は次の
通りとする。
int isDegreeSeqence(int d[], int p) は、配列dに入った長さpの
非減少非負整数列を次数列としてもつようなp頂点単純グラフが
存在するときに、1を戻り値として返し、存在しないときに0を返す。
main 関数も作って,きちんと動くことが分かるプログラムにする。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C
[4] 期限: 5月30日まで
[5] その他の制限:
よろしくお願いします。
0840デフォルトの名無しさん
2008/05/27(火) 13:02:16[2] 問題文(含コード&リンク):()
2008年は閏年(うるうどし)である。
現在の暦において閏年は,
地球が太陽の周りを公転する周期が,
約365.24日であることに由来する調整法である。
閏年でない年は平年という。
キーボードから西暦を入力し
入力された年が閏年かどうか判定する
プログラムを作成しなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 6月3日
[5] その他の制限:
0841デフォルトの名無しさん
2008/05/27(火) 13:02:44[2] 問題文(含コード&リンク):()
今年(2008年)はオリンピックイヤー
(オリンピック開催年)である。
8月8日から24日までにかけて,中国の北京で
夏季オリンピック第29回大会が開かれる。
次の説明はオリンピックの開催年についての説明である。
キーボードから変数year に入力された年号について,
開催された年に第何回大会が開催(中止)されたか
画面に表示するプログラムを作成しなさい。
またオリンピックイヤーでない場合は、
画面にその旨メッセージを出力すること。
【説明】
・1896年の第1回大会以来、4 年に1 度開催されている。
・1916年の第6回大会,1940年の第12回大会,1944年の第13回大会は
世界大戦の影響で中止された。ただし中止の場合も回数は数える。
・1906年には,近代オリンピック制定10周年記念大会が開催された。
ただし特別大会のため,回数には数えない。
・次回は2012年、第30回大会がロンドンで開催予定。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 6月3日
[5] その他の制限:
2問ありますが、よろしくお願いします!
0842デフォルトの名無しさん
2008/05/27(火) 13:03:08それが単純グラフであるのかどうかをチェックするにはどーしたらええねん。
0843ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 13:05:420844デフォルトの名無しさん
2008/05/27(火) 13:15:200845デフォルトの名無しさん
2008/05/27(火) 13:16:45ループまたは多重辺を含むと考えていいのかしらん?
プログラムよりも数学の方が難しいぜ。あははん。
0846デフォルトの名無しさん
2008/05/27(火) 15:20:45どのようにやったら良いでしょうか?
//------------------------------------------------------
// C言語基礎 問題
// 3人の学生の英数国理社のテストの点数データが
// それぞれ配列にある
// 学生それぞれの平均点と科目別に平均点を出せ
//------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
// 英 数 国 理 社
static int seito1[]={41,93,64,88,33};
static int seito2[]={84,31,78,53,57};
static int seito3[]={54,34,59,46,58};
}
0847デフォルトの名無しさん
2008/05/27(火) 15:28:36[2] 問題文
キーボードから入力される2つの整数を変数a、bに格納し、
aの0乗からaのb乗までを順に出力するプログラムを作成せよ。
ただし変数bは0以上の整数が入力されるまで、入力を繰り返すものとする。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 6月10日
[5] その他の制限:
[1] 授業単元: C++
[2] 問題文
キーボードから2以上の整数を入力し、その数が素数であるかどうかを判断するコードを記述せよ。
ただし入力される数値が2以上でない場合、繰り返し入力を求めること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限: 6月10日
[5] その他の制限:
よろしくお願いします。
0848デフォルトの名無しさん
2008/05/27(火) 15:52:21#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// 英 数 国 理 社
static int seito1[]={41,93,64,88,33};
static int seito2[]={84,31,78,53,57};
static int seito3[]={54,34,59,46,58};
static int average[]={0,0,0,0,0};
char str[5][10]={"english","math","japanese","science","society"};
int i;
float sum1=0,sum2=0,sum3=0;
for(i=0;i<5;i++){
sum1 += (float)seito1[i];
sum2 += (float)seito2[i];
sum3 += (float)seito3[i];
average[i] = seito1[i] + seito2[i] + seito3[i];
}
printf("生徒1の平均点:%.2f\n",sum1/5);
printf("生徒2の平均点:%.2f\n",sum2/5);
printf("生徒3の平均点:%.2f\n",sum3/5);
printf("科目平均\n");
for(i=0;i<5;i++) printf("%s:%.2f\n",str[i],(float)average[i]/3);
return 0;
}
力押し
0849デフォルトの名無しさん
2008/05/27(火) 15:56:52ありがとうございます。
あと、この2つも分かりますか?
//--------------------------------------
// 半径 73cmの円の面積を求めよ
// だたし、円周率は3.14とする
//--------------------------------------
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
}
//------------------------------------
// 乱数(0~32767)を発生させ
// 30000以上が20回出たら終わる
// プログラムを作成せよ
// ただし、乱数列の開始点は30000とする
//------------------------------------
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
}
0850デフォルトの名無しさん
2008/05/27(火) 16:11:11>1
int main()
{
printf("%gcm^2\n", 3.14 * 73 * 73);
return 0;
}
0851デフォルトの名無しさん
2008/05/27(火) 16:20:40> // ただし、乱数列の開始点は30000とする
意味が分からん。
0852デフォルトの名無しさん
2008/05/27(火) 16:33:09>>(2) 最初の30000が出るまで読み飛ばす、と見なした。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void);
int main(){
int i=0, cnt=0, count_start_fg=0, r;
srand((unsigned)time(NULL));
while(cnt < 20){
i++;
r = rand() % 32768;
if(r >= 30000){
if(r == 30000){count_start_fg = 1;}
if(count_start_fg == 1){
cnt++;
printf("%d番目の乱数=%d\n", i, r);
}
}
}
return 0;
}
0853デフォルトの名無しさん
2008/05/27(火) 16:48:00int leap_check(int y){
#define chk(y,n,x) if(!(y%n)){return x;}
chk(y,400,y);
chk(y,100,0);
chk(y,4,y);
return 0;
}
0854デフォルトの名無しさん
2008/05/27(火) 17:24:02こんな感じでどうかな?1つ目
#include <iostream>
using namespace std ;
void main(void)
{
long nRet = 1;
int a,b ;
cout << "一つ目の数" << endl ;
cin >> a ;
for(;;){
cout << "二つ目の数" << endl ;
cin >> b ;
if(b > 0) break ;
}
cout << "------------------" << endl ;
cout << "1" << endl ;
for(int i = 1; i <= b; i++){
nRet *= a ;
cout << nRet << endl ;
}
}
0855デフォルトの名無しさん
2008/05/27(火) 17:25:042つ目
void main(void)
{
long nRet = 1;
int a ;
for(;;) {
cout << "判定する数(2より大きい数)" << endl ;
cin >> a ; if(a > 2) break ;
}
for(int i = 0; i < a - 1; i++) {
nRet = nRet * 2 ;
}
if(nRet % a == 1) cout << "素数かな?" << endl ;
else cout << "素数じゃないかも" << endl ;
}
0856デフォルトの名無しさん
2008/05/27(火) 17:27:02r = rand() % 32768;
は乱数にならない。
0857デフォルトの名無しさん
2008/05/27(火) 17:42:13完全乱数は宿題の趣旨には無いと思うから、timeで揺らせば充分じゃね?
標準ライブラリでもっといいの有る?
0858デフォルトの名無しさん
2008/05/27(火) 18:56:56問題を書くためのテキストファイルを探してます
0859デフォルトの名無しさん
2008/05/27(火) 19:00:18予想の斜め上www
0860デフォルトの名無しさん
2008/05/27(火) 19:15:330861デフォルトの名無しさん
2008/05/27(火) 19:16:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6684.zip
アップしてから気づいたんだけど、
olympic_data.hにバグがあった。
誤 std::string venue() const { return m_host; }
正 std::string venue() const { return m_venue; }
0862デフォルトの名無しさん
2008/05/27(火) 19:31:56[2] 1から9までの9つの数字が順番にならんでいる。数字の順番を変えずに全て用いて、途中に+を1個、−を2個入れると、
例えば次のような式ができる。
123−45−67+89=100
1234+5−6−789=444
同様の方法で 450,500,666を作る方法をすべて見つけなさい
[3]
[3.1] Linux
[3.3] C
[4] 5月29日
0863デフォルトの名無しさん
2008/05/27(火) 19:44:21[1]C [2]
以下は2以上の整数を素因数分解するプログラムである。
#include<stdio.h>
#include<stdio.h>
main(){
int d,n;
do{
printf("2以上の整数を与えてください\n");
scanf("%d",&n);
}while(n<2);
printf("%d=1",n);
while(n%2==0){
printf("*2");
n/2; }
for(d=3;d*d<=n;d++,d++){
while(n%d==0){
printf("*%d",d);
n/d;
} }
if(n!=1)printf("%d",n);
puts(";"); }
2以上の整数で素数でないもののうち、K番目に小さいものをp[k]とすると、
小さなkについてp[k]を素因数分解したものは以下のようになる。
p[1]=4=1*2*2; p[2]=6=1*2*3; p[3]=8=1*2*2*2; p[4]=9=1*3*3;
問題:p[4000000],p[4500000],p[5000000],p[5500000]の値と、それぞれの素因数分解を示せ
これを求めるにあたって、上記の素因数分解のプログラムを参考に、
素因数分解を行う関数を持ったプログラムを作ること。 プログラムでは変数nを定義して、n=2,3,4、、、と順に増やしながら、
nを素因数分解して素数か判定しなさい
[3.1]Linux [3.3]C [4]5月29日
0864デフォルトの名無しさん
2008/05/27(火) 19:52:530865デフォルトの名無しさん
2008/05/27(火) 20:02:03は省いたほうがいいんですかね?…
全く答えが見えてこないので助けて下さい。お願いします。
0867デフォルトの名無しさん
2008/05/27(火) 20:29:23#include<stdio.h>
int hoge(long prime[], long value){ // 素因数分解
long i, j=0;
for(i=2;value/i>=i;i++){
if(value%i==0){
value/=i;
prime[j++]=i;
}
}
prime[j++]=value;
return j;
}
int main(void){
long i, j, prime[32], prime_num, index, index_list[]={1,2,3,4,4000000, 4500000, 5000000, 5500000, 0}, index_index;
for(i=2,index=1,index_index=0;;i++){
if((prime_num=hoge(prime, i))!=1){
if(index_list[index_index]==index){
printf("p[%ld]=%ld=%ld", index, i, prime[0]);
for(j=1;j<prime_num;j++) printf("*%ld", prime[j]);
printf("\n");
index_index++;
if(index>index_list[index_index]) break;
}
index++;
}
}
return 0;
}
0868531
2008/05/27(火) 20:38:01[1] 授業単元:プログラミング
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6657.txt
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:VC++2005
[3.3] 言語:C++
[4] 期限:5月29日
[5] その他の制限:問題文中に記載してあります。
よろしくお願いしますm(__)m
0869デフォルトの名無しさん
2008/05/27(火) 20:50:30なかなかおもしろい課題を出す学校だねぇ
ありきたりじゃない感じ。
>>867
とりあえず、8が2*4になっちゃいますね。
0872デフォルトの名無しさん
2008/05/27(火) 20:58:58[2] 問題文
問題()
1〜nまでの数のうち、素数を出力させるプログラムを作成せよ。
問題(2)
10進整数(0-255)を2進数に変換するプログラムを作成せよ。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:Borland C
[3.3] 言語: C
[4] 期限今週中
[5] その他の制限:ありません
0873デフォルトの名無しさん
2008/05/27(火) 21:11:07君の出席番号がわからないとどうしようもないよ
0874ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 21:16:29(1)http://www.tsg.ne.jp/text/2004/c/1.html のソースをnを適宜変更しる
(2)
意味わからん
10進数で入力して2進数文字列で出力すればいいの?
printf("0b");
for (i = 0; i < 8; i++) putchar( n & (0x80 >> i) ? '1' : '0' );
putchar('\n');
あとはわかるな?てか解れ。
0875デフォルトの名無しさん
2008/05/27(火) 21:20:590876デフォルトの名無しさん
2008/05/27(火) 21:23:04ありがとうございます
(2)は自己解決しました
こういうことでした
↓
#include <stdio.h>
void bin(int n);
int main(void)
{
int i,k;
scanf("%d",&k);
printf(" 2進数:"), bin(k), printf("\n\n");
return 0;
}
void bin(int n)
{
int a[8], i;
for (i = 0; i < 8; i++, n /= 2)
a[i] = n % 2;
for (i = 7; i >= 0; i--)
printf("%d", a[i]);
}
0877868
2008/05/27(火) 21:23:10すいません記述し忘れましたm(__)m
番号は120でお願いします。(実行するときは20*2の値で)
0878デフォルトの名無しさん
2008/05/27(火) 21:32:46http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6686.c
0879デフォルトの名無しさん
2008/05/27(火) 21:34:53もちっとエリートらしいイケメソースを書いて下さいな
0880デフォルトの名無しさん
2008/05/27(火) 21:35:59[2] 問題文
問題
1〜nまでの数のうち、素数を出力させるプログラムを作成せよ。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:Borland C
[3.3] 言語: C
[4] 期限今週中
[5] その他の制限:ありません
すいません、どなたかもういちどおねがいします
0881ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 21:41:15>>880
http://c-kadai.sakura.ne.jp/index.php?itemid=17&catid=5
0882デフォルトの名無しさん
2008/05/27(火) 21:42:07なんでだよw
>>737も素数求めるのだったからそれ見てもいいしw
0883デフォルトの名無しさん
2008/05/27(火) 21:43:35[1] 授業単元:
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6687.txt
[3] 環境
[3.1] OS: xp
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C
[4] 期限:緊急(最終期限:木曜深夜)
[5] その他の制限:習ってるのはポインタ、配列、関数の初歩程度です。
なのでレベルを合わせたプログラムを書いていただけると助かります
お願いします
0884デフォルトの名無しさん
2008/05/27(火) 21:44:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6688.c
0885デフォルトの名無しさん
2008/05/27(火) 21:47:47ありがとうございました
0886デフォルトの名無しさん
2008/05/27(火) 21:49:45マインスイーパのように自動で開ける限り開く機能はいらないのかね?
0887デフォルトの名無しさん
2008/05/27(火) 21:50:36なんかしらんけどあちこちのWebサイトに勝ったなwおめwww
0888デフォルトの名無しさん
2008/05/27(火) 21:51:57かなりの確率で一回で場所が分かっちゃうよw
0889ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 21:52:22どうして配列使わずに解けるのか、おじさん一瞬よくわからなかったよ。
0890デフォルトの名無しさん
2008/05/27(火) 21:54:36Phaseに入れた数字分動くプログラムでお願いします
0891デフォルトの名無しさん
2008/05/27(火) 21:57:27自動で開ける限り開くマインスイーパでも一回ではクリアできないよ><
0892883
2008/05/27(火) 21:59:09訂正がありました。すいません
Input : e6(入力)
GET!!(宝を見つけたら表示される)
Phase = 4(ゲーム回数)
Treasures left = 7(宝の残り)
a b c d e f g h i j
0 + + + + + + + + + + 0
1 + + + + + + + + + + 1
2 + + + + + + + + + + 2
3 + + + 0 + + + + + + 3
4 + + + + + + + + + + 4
5 + + + + + + + + + + 5
6 + + + 1 $ + + + + + 6
7 + + + + + + + + + + 7
8 + + + + + + + + + + 8
9 + + + + + + + + + + 9
a b c d e f g h i j
宝をGETしたときに宝の残りの数をへらすのを忘れてました
m<_ _>m
0893デフォルトの名無しさん
2008/05/27(火) 22:11:58ちょっと試してみた
10x10盤に爆弾が7個以上あれば一回で解けることは少なかった
6個以下の場合は一回で解ける可能性大だった
0894デフォルトの名無しさん
2008/05/27(火) 22:16:43なんということ。
確かにマインスイーパ初級が10x10で爆弾10個だった。
少ないと全部あいちゃうのね。適当なこといって酢マンコ
0895デフォルトの名無しさん
2008/05/27(火) 22:18:38[2] 問題文:
You are writing firmware for an exercise machine. Each second, a routine in your firmware is
called which decides whether it should display the percentage of the workout completed.
The display does not have any ability to show decimal points, so the routine should only
display a percentage if the second it is called results in a whole percentage of the total workout.
Given a string time representing how long the workout lasts, in the format "hours:minutes:seconds",
return the number of times a percentage will be displayed by the routine.
The machine should never display 0% or 100%.
CONSTRAINTS
-time will be a string formatted as "HH:MM:SS", HH = hours, MM = minutes, SS = seconds.
-The hours portion of time will be an integer with exactly two digits, with a value between 00 and 23, inclusive.
-The minutes portion of time will be an integer with exactly two digits, with a value between 00 and 59, inclusive.
-The seconds portion of time will be an integer with exactly two digits, with a value between 00 and 59, inclusive
-time will not be "00:00:00".
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語: C++
[4] 期限:今週中
[5] その他の制限:習ってるのはポインタ、配列、関数の初歩程度です。
0896デフォルトの名無しさん
2008/05/27(火) 22:20:30全部あくんじゃなくて全部の爆弾の場所が分かるだけ
0897デフォルトの名無しさん
2008/05/27(火) 22:23:40よし in English
0898デフォルトの名無しさん
2008/05/27(火) 22:31:020899デフォルトの名無しさん
2008/05/27(火) 22:31:22[2] 問題文
16kHz、16bitで録音しwav形式で保存されたファイル
を読み込み、波のデータのみをwave.datという名前のファイルに出力するプログラムを作成せよ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名:gcc
[3.3] 言語: C言語
[4] 期限:5/31
[5] その他制限:
wave.datの中身は
1
2
3
15
4
7
:
:のようにgnuplotですぐに読み込めるような形にする。というものです
http://www.kk.iij4u.or.jp/~kondo/wave/
のサイトを参考にしているのですがわかりません。
よろしくお願いします
0900868
2008/05/27(火) 22:33:58[5] その他の制限:学籍番号120でお願いします。
0901デフォルトの名無しさん
2008/05/27(火) 22:34:370902デフォルトの名無しさん
2008/05/27(火) 22:39:05トータルの時間はどうやって指定すればいいの?
0903デフォルトの名無しさん
2008/05/27(火) 22:45:14[2] 問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6689.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Cygnus
[3.3] 言語: C
[4] 期限: 今週
[5] その他の制限: 配列を使用
お願いします。。。
0904デフォルトの名無しさん
2008/05/27(火) 22:46:17#include<stdio.h>
void display(long whole_time, long left_time){
long rate;
rate=(left_time-1)*100/whole_time+1;
if(whole_time*rate/100==left_time && left_time!=0 && left_time!=whole_time){
printf("%2ld%%\n", rate);
}else{
printf("%02ld:%02ld:%02ld\n", left_time/3600, (left_time/60)%60, left_time%60);
}
}
int main(void){
long whole_time, left_time;
whole_time=333; // second
for(left_time=whole_time;left_time>0;left_time--){
display(whole_time, left_time);
}
return 0;
}
0905904
2008/05/27(火) 22:51:57C++はパスです
0906デフォルトの名無しさん
2008/05/27(火) 22:59:250907デフォルトの名無しさん
2008/05/27(火) 23:01:22第一外国語は普通英語だと思うのだが。
0908デフォルトの名無しさん
2008/05/27(火) 23:04:490909デフォルトの名無しさん
2008/05/27(火) 23:06:07爆弾じゃないところ指定したときの仕様がわからん。
0,1 となってるが、2,3,4と行くのか?
2桁になったら、隣の数字とくっついてみにくくなりそうだが。
0910ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 23:09:03#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <math.h>
int main(void) {
int a[10];
int sum = 0;
int n_max = INT_MIN;
int n_min = INT_MAX;
char buf[80];
int i;
for (i = 0; i < 10; i++) {
printf("データ[No. %d]を入力してください:", i+1);
a[i] = atoi(fgets(buf, sizeof(buf), stdin));
n_max = MAX(n_max, a[i]);
n_min = MIN(n_min, a[i]);
sum += a[i];
}
puts("データ一覧を表示します");
for (i = 0; i < 10; i++) printf("[%d] %d", i+1, a[i]);
putchar('\n')
printf("合計値: %d", sum);
printf("平均値: %.2f", (double)sum / 10.0);
printf("最大値: %d", n_max);
printf("最小値: %d", n_min);
return EXIT_SUCCESS;
}
0911904
2008/05/27(火) 23:09:25whole_time < 100 の時に正しく表示されなかったので >>904 の訂正
void display(long whole_time, long left_time){
long rate;
int is_percentage=0;
rate=left_time*100/whole_time;
if(whole_time*rate/100==left_time) is_percentage=1;
if(whole_time*(rate+1)/100==left_time) rate++,is_percentage=1;
if(is_percentage && left_time!=0 && left_time!=whole_time){
printf("%2ld%%\n", rate);
}else{
printf("%02ld:%02ld:%02ld\n", left_time/3600, (left_time/60)%60, left_time%60);
}
}
0912デフォルトの名無しさん
2008/05/27(火) 23:12:28superthxです。
0913ヽ・´∀`・,,)っ━━━━━━┓
2008/05/27(火) 23:12:33#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
int main(void) {
int a[10];
int sum = 0;
int n_max = INT_MIN, i_max;
int n_min = INT_MAX, i_min;
char buf[1024];
int i;
for (i = 0; i < 10; i++) {
printf("データ[No.%2d]を入力してください:", i+1);
array[i] = atoi(fgets(buf, sizeof(buf), stdin));
if (n_max < a[i]) {
i_max = i+1;
n_max = a[i];
} else if (a[i] < n_min) {
i_min = i+1;
n_min = a[i];
}
sum += a[i];
}
puts("データ一覧を表示します");
for (i = 0; i < 10; i++) printf("[%d] %d", i+1, a[i]);
printf("\n合計値: %d", sum);
printf("平均値: %.2f", (double)sum / 10.0);
printf("最大値: %d(No.%d)", n_max, i_max);
printf("最小値: %d(No.%d)", n_min, i_min);
return EXIT_SUCCESS;
}
0914デフォルトの名無しさん
2008/05/27(火) 23:23:300や1はその周り(八方)に宝(爆弾)が0個もしくは1個ありますよっていう表示です
書き方がわかりにくくてごめんなさい
0915デフォルトの名無しさん
2008/05/27(火) 23:31:160916 ◆FbQrKbwE2g
2008/05/27(火) 23:35:05プログラムは自分で考えますのであつかましいのですが考え方を教えて頂ければと・・・。
windowsのC++で、期限は三日ほどです。
初心者レベルだと思います。実験機器の制御に使います。
機器に繰り返し計測させる事で増加していく出力値が、ある値で増加をやめた際に、その値だけを出力したいとなれば、どうすればよろしいのでしょうか。
一つ前の値と現在の値の差がほぼゼロになった時の値を出力させれば良いのだろうか等と考えてはいるのですが、これをどうすればいいかわかりません。
0917デフォルトの名無しさん
2008/05/27(火) 23:42:36なにかしらの型 ひとつ前の値を保存する変数( Aとする )
なにかしらの型 現在の値を保存する関数 ( Bとする )
if ( A - B < ほぼゼロ )
出力 B
ほぼゼロっていうんだから整数ではないんだろうけど…
内容さらせないなら先輩にでも聞けよ
0918デフォルトの名無しさん
2008/05/27(火) 23:46:14#define PI 3.14159 // π
#define STUDENT_ID 120 // 学籍番号
enum { SIN, COS }TRI_FUNC;
int main(void)
{
}
double calc(const double Degree, const TRI_FUNC SINorCOS)
{
double Radian = 0;
Radian = Degree / ( 180 * PI );
if( SINorCOS == SIN ){
return sin(Radian);
}else{
return cos(Radian);
}
}
テンプレートに従ってやるとなんか悲しいので
関数部だけ…
0919デフォルトの名無しさん
2008/05/27(火) 23:46:55計測
出力
}
0920デフォルトの名無しさん
2008/05/27(火) 23:48:50ピークは一箇所だけ?
それとも正弦波のように何度も上下のピークができてその度に記録が必要?
0921 ◆FbQrKbwE2g
2008/05/27(火) 23:48:53すいません、晒す内容自体ない感じで・・・
なにかしらの型 ひとつ前の値を保存する変数( Aとする )
なにかしらの型 現在の値を保存する関数 ( Bとする )
これがよく分からないんです。どうやってひとつ前と現在を分けて保存させるんですか?
0922 ◆FbQrKbwE2g
2008/05/27(火) 23:49:56返答ありがとうございます。ピークは一箇所だけです。
0923863
2008/05/27(火) 23:55:55今更返信ですが、そう言ってもらえると行ってるかいがあります
でもレポート1回も全部解けて出せたことないですが…
>>871
了解しました
ありがとうございます
0924デフォルトの名無しさん
2008/05/27(火) 23:58:14int before=0,now=0;
while(INPUT(now) < before) before = now;
intは適当に、INPUTは装置からデータ取ってくる。
1.データをnowに代入したら、前回の値と比べる。
2.前回の値より小さければ、前回の値に今回の値を代入。
3.再びデータを取ってくる(1に戻る)。
0925デフォルトの名無しさん
2008/05/27(火) 23:59:18ごめん、等号の<は>に直して。
0926900
2008/05/28(水) 00:00:29いえいえ、関数部だけでも十分すぎるくらいですよ(^^ゞ
お手数かけてすみませんでしたm(__)m。
ありがとうございます。
0927デフォルトの名無しさん
2008/05/28(水) 00:15:41トータル時間が与えられたときにパーセント表示する回数を求めよって問題じゃね?
0928 ◆FbQrKbwE2g
2008/05/28(水) 00:17:14ありがとうございます。
最初どっちもゼロにしといて、ゼロよりnowが大きければbeforeにnowを入れる(出発)、またnowを取って来て、beforeよりnowが大きければbeforeにnowを・・・
って感じと取らせていただいたのですがよろしいでしょうか?
いや全く思いつきませんでした・・・
0929デフォルトの名無しさん
2008/05/28(水) 00:21:25それでおk
ただ、ごめん・・・そのwhileの条件式だと、
初めにnowが絶対値をとってこないとループから出てしまう。
そこは微調整してがんばってくれ
0930デフォルトの名無しさん
2008/05/28(水) 00:23:18http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6692.txt
こんなもんだろうか。
要求レベルからすると、ビットマスクは難しいかもしれないが。
インデントがなんかおかしいな。
0931デフォルトの名無しさん
2008/05/28(水) 00:24:100932 ◆FbQrKbwE2g
2008/05/28(水) 00:30:28分かりました!ありがとうございました。
0933デフォルトの名無しさん
2008/05/28(水) 00:45:27問題文が書かれたファイルをアップロードしたい
→ワード形式のファイルなのでできない
→よく分からないけどTEXTとやらにすればOKらしい
→ググってみたらそれらしいフリーソフトがいっぱいあった
→どれ使ったらいいの?
という事か?メモ帳でいいんじゃね
0934デフォルトの名無しさん
2008/05/28(水) 00:46:46読解力がなくて表示する条件がよくわからんかった。
百分率が変わった時だけ表示するものとする、であれば、36行目をコメント化して37行目を有効にして。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6693.cpp
0935デフォルトの名無しさん
2008/05/28(水) 00:49:03解答ありがとうございます
#define MASK_BOM 0x0001 /* 宝 */
#define MASK_HIDE 0x0002 /* まだオープンしてない */
#define MASK_AROUND 0xFF00 /* 周囲の宝の数は、この位置に保存 */
この部分はまだ習ってないのでもっと簡単なやりかたはありませんか?
わがまま言ってすいません
0936デフォルトの名無しさん
2008/05/28(水) 00:57:27まったくの別プログラムになるだろうな。
ようは、各セルの情報をどうやって持つかなんだが。
既に指定されている前半部コードを見ると、どうしてもtakara配列の中に情報を詰め込みたくなる。
そうすると、自然とこういう方法になると思うんだが・・・。
0937デフォルトの名無しさん
2008/05/28(水) 00:58:09[2] 問題文(含コード&リンク):()
C言語では再帰呼び出しは、セキュアなコードとは言えない。この理由を100字以内で述べよ
[3] 環境
[3.1] OS: Unix準拠(Windowsを含む)他
[3.2] コンパイラ名とバージョン: ANSI-C,ISO-C準拠
[3.3] 言語: C
[4] 期限: 2008/05/30
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
C言語の規格は一通り学びました。
ヒントとしては、メモリクラスがどーのこーのという話でした。
おねがいしますです。(|)
0938デフォルトの名無しさん
2008/05/28(水) 01:00:02動かない…だと…?
haii1.c: In function `main':
haii1.c:7: `INT_MIN' undeclared (first use in this function)
haii1.c:7: (Each undeclared identifier is reported only once
haii1.c:7: for each function it appears in.)
haii1.c:8: `INT_MAX' undeclared (first use in this function)
haii1.c:13: `array' undeclared (first use in this function)
haii1.c:23: warning: unknown escape sequence: `\' followed by char code 0x8e
haii1.c:30: parse error at end of input
0939デフォルトの名無しさん
2008/05/28(水) 01:04:18そうですか…直接アドレスいれるプログラム見たのはじめてなので混乱してます
0940デフォルトの名無しさん
2008/05/28(水) 01:08:47途中まで(式-->値)は作ったけど、式を生成する部分が判らん。
例:char s[]="123-45-67+89"
expr2val(s) --> 100
int expr2val(char *s){
int i, sum=0, tmp=0, sign=1;
char c;
printf("%s\n",s);
loop(i, strlen(s)){
c=s[i];
if((c<'0')||('9'<c)){
sum+=(tmp*sign);
tmp=0;
sign=((c=='+')? 1:-1);
}
else{ // numeric
tmp*=10;
tmp+=(c-'0');
}
}
sum+=(tmp*sign);
return sum;
}
0941デフォルトの名無しさん
2008/05/28(水) 01:09:040942デフォルトの名無しさん
2008/05/28(水) 01:09:40char strの配列に入っているIPアドレス("10.20.30.40"とか)を
ネットワークバイトオーダーに変換して、unsigned char ipaddr[4]に
格納したいのですが、とりあえず以下のプログラムでアドレス不正せずに
表示ができています。ポインタの使い方とかおかしい箇所はありますでしょうか?
動作環境はUbuntu8.04(x86)でIntel Core2DuoのノートPCです。
【プログラム内容】
int i;
unsigned char *ip;
unsigned char ipaddr[4];
long long val;
char str[] = "10.20.30.40";
/* ネットワークバイトオーダー変換前 */
val = inet_addr(str);
ip = (unsigned char *) &val;
for(i = 0; i < 4; i++){
ipaddr[i] = ip[i];
}
printf("変換前 : %d %d %d %d\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
/* ネットワークバイトオーダー変換後 */
val = htonl(val);
ip = (unsigned char *) &val;
for(i = 0; i < 4; i++){
ipaddr[i] = ip[i];
}
printf("変換後 : %d %d %d %d\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
【表示結果】
変換前 : 10.20.30.40
変換後 : 40.30.20.10
0943デフォルトの名無しさん
2008/05/28(水) 02:48:51スレ違いの気もするが、とりあえずlong longが4バイトかどうか確認した方がいいと思う
というかinet_addrってlong longを返すんだっけ?
0944942
2008/05/28(水) 03:29:00sizeof(long long)=8バイトとなりました。unsigned char *でキャストすると
4バイトしか取られないので駄目ですね。
あとinet_addrの戻り値はin_addr_t(unsigned int)でした。
long longの変数に代入しても一応大丈夫そうですが…。
指摘も考慮して以下のように修正してみました。
どうでしょうか?
【修正内容】
int i;
long nval;
struct in_addr addr;
unsigned char ipaddr[4];
unsigned char *ip;
char str[] = "10.20.30.40";
inet_pton(AF_INET, str, &addr);
nval = htonl(addr.s_addr);
ip = (unsigned char *) &nval;
for(i = 0; i < 4; i++){
ipaddr[i] = ip[i];
}
printf("%d %d %d %d\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
【出力結果】
40 30 20 10
0945デフォルトの名無しさん
2008/05/28(水) 04:03:03#include<stdio.h>
int expr2val(const char *s){
int sum=0, value, n;
while(sscanf(s, "%d%n", &value, &n)>=1) sum+=value,s+=n;
return sum;
}
int main(void)
{
char base[]="123456789", buf[9+3+1];
int i, j, k, l, result;
for(i=1;i<9;i++)
for(j=i+1;j<9;j++)
for(k=j+1;k<9;k++)
for(l=0;l<3;l++){
char sign[]="---";
sign[l]='+';
sprintf(buf, "%.*s%c%.*s%c%.*s%c%s", i, &base[0], sign[0], j-i, &base[i], sign[1], k-j, &base[j], sign[2], &base[k]);
result=expr2val(buf);
if(result==450 || result==500 || result==666) printf("%s=%d\n", buf, result);
}
return 0;
}
0946デフォルトの名無しさん
2008/05/28(水) 07:34:36>>878は無視かい?w 処理速度に差がありすぎるんだが・・・
0947デフォルトの名無しさん
2008/05/28(水) 07:52:22間違ってんじゃね?
・完全なパーセンテージを表示できるときだけ表示
・小数点以下は表示できない
って条件だから、32%ぴったりのときとかだけ表示する仕様だと思ふ。
0948デフォルトの名無しさん
2008/05/28(水) 08:34:19〉〉839
をお願いしたいのですが。
0949デフォルトの名無しさん
2008/05/28(水) 08:49:13そう読めたんだけど、それだと殆ど表示が更新されない場合がある気がして。
0950デフォルトの名無しさん
2008/05/28(水) 09:40:120951デフォルトの名無しさん
2008/05/28(水) 10:01:440952デフォルトの名無しさん
2008/05/28(水) 10:11:190953デフォルトの名無しさん
2008/05/28(水) 10:16:030954デフォルトの名無しさん
2008/05/28(水) 10:21:000955デフォルトの名無しさん
2008/05/28(水) 10:27:310956デフォルトの名無しさん
2008/05/28(水) 10:28:100957デフォルトの名無しさん
2008/05/28(水) 10:29:37いやいや、
・小数点以下は表示できないので、整数部が変わったときだけ表示する
って話じゃね?
0958デフォルトの名無しさん
2008/05/28(水) 10:56:49グラフ的な数列とはどんな条件を満たせばよいの?
0959デフォルトの名無しさん
2008/05/28(水) 11:22:39グラフの各頂点の次数(隣接する頂点の数)をソートした結果になっていること。
Havel-Hakimi の定理などでアルゴリズミックに判定可能。過去スレにもある。
0960デフォルトの名無しさん
2008/05/28(水) 11:47:22#include<stdio.h>
#include<stdlib.h>
int cmp(const int *a, const int *b){
return *b-*a;
}
int isDegreeSequence(int d[], int p){
int i;
for(;p>0;p--,d++){
qsort(d, p, sizeof(d[0]), cmp);
if(d[0]<0 || d[0]>=p) return 0;
for(i=1;i<=d[0];i++) d[i]--;
}
return 1;
}
int main(void){
int test_data[][10]={
{1,1,1,1,1,1,1,1,1,5},
{1,2,3,4,5,6,7,8,9,10},
{2,2,3,4,6,5,7,8,9,6},
};
int i;
for(i=0;i<sizeof(test_data)/sizeof(test_data[0]);i++)
if(isDegreeSequence(test_data[i], 10)==1) printf("%d は単純グラフ的\n", i);
return 0;
}
>>959 thx Havel-Hakimi でググったら106代目がヒットしたw
0961デフォルトの名無しさん
2008/05/28(水) 13:36:05[2] 問題文(含コード&リンク):
シェルに定義されている環境変数の一覧表を表示するプログラムを作れ。
サンプルプログラムを参考にして作成すること。必ず子プロセスに実行させること。
///サンプルプログラム///
#include <stdio.h>
int main(int argc, char *argv[], char *envp[])
{
int i;
for (i=0; envp[i]!=NULL; i++)
printf("%s\n", envp[i]);
exit (0);
}
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:6月2日
[5] その他の制限:
よろしくお願いします。
0962デフォルトの名無しさん
2008/05/28(水) 16:46:00ソート、文字列比較、リスト、構造体、素数、フィボナッチェ、再帰。
0963デフォルトの名無しさん
2008/05/28(水) 17:02:15[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6696.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 2008/06/01
[5] その他の制限:標準ライブラリは使用不可.構造体・再帰・関数などは習いました.
複雑すぎて全くわからないので,よろしくお願いします.
0964デフォルトの名無しさん
2008/05/28(水) 17:19:47>標準ライブラリは使用不可.
printfすら駄目ってことになるぞ
Win32 APIで画面起こしてテキストコントロールにGetWindowTextを使って読めと?
0965デフォルトの名無しさん
2008/05/28(水) 17:21:44よくわからずに発言してしまったみたいです.すみません.
標準ライブラリ使ってください.
0966883
2008/05/28(水) 18:00:20[1] 授業単元:
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6697.txt
[3] 環境
[3.1] OS: xp
[3.2] コンパイラ名とバージョン:VC 6.0
[3.3] 言語: C
[4] 期限:緊急(最終期限:木曜深夜)
[5] その他の制限:習ってるのはポインタ、配列、関数の初歩程度です。
なのでレベルを合わせたプログラムを書いていただけると助かります
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6692.txt
以上の解答をいただいたのですがやはりビットマスクはだめのようです
ビットマスクのとこを配列でやる。
takaraにいっぱい詰め込む必要はないそうです
自分で一日ねばってもできませんでした
どうかお願いしますm(_ _)m
0967デフォルトの名無しさん
2008/05/28(水) 18:22:30takaraに加えて、以下の2配列を追加してみては?
・オープンしているかどうかの配列
・周囲の宝の数を格納する配列
んで、それぞれの処理はそれぞれの配列を参照するように変更。
0968デフォルトの名無しさん
2008/05/28(水) 18:43:55素のままでは、スタックあふれを逐次チェックする機構がない、
てことでしょうか?
これは MS-DOS などの仮想メモリ空間を準備できない環境での
話だと思っていましたが、unix や NT でもだめでしたっけ?わかりません。
0969デフォルトの名無しさん
2008/05/28(水) 18:58:38どう書けばよいのでしょうか?
無知ですいません…
0970デフォルトの名無しさん
2008/05/28(水) 19:28:02手法への変換ができないままだと疑われるし!
部屋の隅で単位落とすかもしれないと思って涙目で震えてる学生を助けろよ!
0971デフォルトの名無しさん
2008/05/28(水) 19:29:52できもしない奴に単位が取れる可能性を与えただけで十分だろ
0972デフォルトの名無しさん
2008/05/28(水) 19:32:19後でどうなろうと知ったこっちゃ無い
0973デフォルトの名無しさん
2008/05/28(水) 19:37:110974778
2008/05/28(水) 19:38:05[1] 授業単元:アルゴリズム
[2] 問題文(含コード&リンク):
�@Dijkstraのアルゴリズム解法を実現するプログラムを作成し、コンパイルして実行せよ。
このとき、グラフ中の指定頂点(ここでは頂点0)に対して、全ての頂点への最短経路コストと最短経路を標準出力に表示すること。
〜Graph〜
#define NC 9999
#define N 6
int edge[N][N] = {
/* src: 0 1 2 3 4 5 ...dst */
/* 0 */ { 0, NC, NC, 8, 15, NC},
/* 1 */ { 10, 0, 24, NC, 8, NC},
/* 2 */ { NC, NC, 0, NC, NC, 6},
/* 3 */ { NC, NC, NC, 0, 5, NC},
/* 4 */ { NC, NC, 12, NC, 0, 7},
/* 5 */ { NC, NC, 3, NC, NC, 0}
};
〜Result Sample〜
Result (from 0)
To 0 : ---
To 1 : No Path
To 2 : cost 23 : 2 <- 5 <- 4 <- 3 <- 0
To 3 : cost 8 : 3 <- 0
To 4 : cost 13 : 4 <- 3 <- 0
To 5 : cost 20 : 5 <- 4 <- 3 <- 0
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名: gcc
[3.3] 言語: C
[4] 期限: 2008/05/29(Thu)
[5] その他の制限: 特にありません
よろしくお願いします。
0975デフォルトの名無しさん
2008/05/28(水) 19:41:12どうせ無理して卒業して社会に出ても使えないゴミなんだから退学しちゃえよ
とか思うけどな。まあ人のことだからどうでもいいけど。
>>972
こんなんで面白いって言ってるようじゃ(ry
刺激が欲しいなら「トリッキーなプログラム」の過去スレ漁ってみ?
0976デフォルトの名無しさん
2008/05/28(水) 20:54:39単位取得のタメ・必修過程終了するため
お前ら視野狭すぎる
0977デフォルトの名無しさん
2008/05/28(水) 20:56:41そんな個人的な事情はお父さんかお母さんくらいの身近な人と話してください
0978デフォルトの名無しさん
2008/05/28(水) 21:08:42必要ないならそれが必修ではない学校を選べばいいだけじゃん。
何のために大学とか行ってんの?そこで何を学ぶかも知らずに行ったの?
学校を選び間違えたなら他を受けなおすとかいくらでも道はあるよ。
>>976
お前は考えが幼すぎる。
0979デフォルトの名無しさん
2008/05/28(水) 21:14:29お前の考えの方が幼すぎる。っつか異常。ただの妬み、僻みだろ、低学歴
0980デフォルトの名無しさん
2008/05/28(水) 21:19:45[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6698.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: VC6.0
[3.3] 言語:C++
[4] 期限: 無期限
[5] その他の制限:なし
よろしくおねがいします
0981デフォルトの名無しさん
2008/05/28(水) 21:19:55高校以降、欲する知識が得られ、欲さない知識を得なくてすむ学校に
行き、今はその知識を活用する職につき、不自由の無い収入を得ています。
0982デフォルトの名無しさん
2008/05/28(水) 21:22:07[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6699.txt
[3] 環境
[3.1] OS:(WindowsXP)
[3.2] コンパイラ名とバージョン:VC++2005
[3.3] 言語:C++
[4] 期限:今週末まで
[5] その他の制限:問題文の解答であるプログラムを関数(ヘッダファイル)を<iostream>
を使用しない形で実行したいのですが。。
[5.2] C言語は関数を少しかじった程度のレベルです。
どうかよろしくお願いしますm(__)m。
0983デフォルトの名無しさん
2008/05/28(水) 21:28:59>>355丸写しなんだが・・・
お前は単位落としたほうがいいと思うよ
0984デフォルトの名無しさん
2008/05/28(水) 21:29:54とそれ解いてくれた人なら怒る。
0985デフォルトの名無しさん
2008/05/28(水) 21:38:39fgetsとかつかえる?
0986デフォルトの名無しさん
2008/05/28(水) 21:43:400987982&352
2008/05/28(水) 21:46:43>>356
本当にすいませんm(__)m。
提出後にメモリの消費量云々で返されてしまったので、
>>985
fgetsは使えます。
0988デフォルトの名無しさん
2008/05/28(水) 21:48:41fgets 使えるんだ。
んじゃ、fprintf も使える?
0989982&352
2008/05/28(水) 21:49:59fprintは使ったことがないのでわかりませんが、たぶん使えるかと。
0990デフォルトの名無しさん
2008/05/28(水) 21:52:29へえ!そうなんだ!
今回、iostreamを使わなくすると発生する問題は入出力部分のみかな?
0991デフォルトの名無しさん
2008/05/28(水) 21:52:49こんな感じでいいのかな?
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6700.cpp
0992デフォルトの名無しさん
2008/05/28(水) 21:59:02あえてこの状態なのかしら
0993982&352
2008/05/28(水) 21:59:31はい。
先生からは実行(入出力時)するときに必要になるメモリの関係上で
実行できない時があるのが駄目だと言われまして、
0994デフォルトの名無しさん
2008/05/28(水) 21:59:58消えろ
0995デフォルトの名無しさん
2008/05/28(水) 22:03:08じゃあfgetsとfprintfを使えばいいね!
君はまるで目の前にステーキとナイフとフォークが差し出されたにも関わらず、
それを一口サイズに切って、口に運んでもらわないと食べられないよ!
って言っているわがままなおぼっちゃんのようだ!
>>994
suck
0996デフォルトの名無しさん
2008/05/28(水) 22:03:30お前がこんなスレに来なきゃ良いだろw
0997デフォルトの名無しさん
2008/05/28(水) 22:05:270998デフォルトの名無しさん
2008/05/28(水) 22:19:350999デフォルトの名無しさん
2008/05/28(水) 22:22:57なんかおかしい?
うめ(´・ω・`)うめ
1000デフォルトの名無しさん
2008/05/28(水) 22:23:2810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。