1 :
デフォルトの名無しさん :
2009/07/13(月) 07:46:32 BE:142007235-DIA(287979)
[1] 授業単元:
コンパイラの構成
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9696.txt [3] 環境
[3.1] OS: (Windows/Linux/等々)
Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
C(yacc、lex)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
7月30日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
スレが新しくなったので再度依頼させていただきます。
lexとyaccの問題です。よろしくお願いします。
今日中にできそうにないので期限を延ばして再提出することにしました。
3 :
tac :2009/07/13(月) 19:48:08
【質問テンプレ】 [1] 授業単元: ゼミナール [2] 問題文(含コード&リンク): 「PC間でソケットの接続確立とデータを送信を行うプログラム」 [3] 環境 [3.1] OS: Windows XP [3.2] Micro Soft Visual C++ 2008 [3.3] 言語: C++ [4] 期限: 2009年7月22日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 制限は特にありません。 大学のゼミの課題なんですが、C++は今までに使ったことがなくさっぱりわかりません。 ネットワークプログラミングも初めてなため、一切わかりません。 まずは、C++でウインドウを開き、チャットの画面を作り、書き込み欄に書き込むと その書き込まれた文字列がウインドウに表示されるプログラムから教えていただけると嬉しいです。 期限は来週ですが、出来るだけ早い完成が望ましいので宜しくお願いします。
バレが怖いのでメールでやり取りしたいのですが、 もしそれでも片付けてくれる人がいらっしゃればお願いできないでしょうか?
問題文を見るとチャットである必要がないし、やるにしてもCUIでいいと思うんだが。
ゼミってことは通信技術方面の研究室なんでしょ?それなら今後を考えて自分でやったほうがいいと思うよ。
初心者でも分かる参考書を紹介しとくから、勉強してみてダメだったらもう一回来てみたら?
http://www.amazon.co.jp/dp/4797334797 あとCは使えるんだよね?Cが使えることは大前提だから。
6 :
デフォルトの名無しさん :2009/07/13(月) 20:17:38
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 下に示すように,5 人の学生の体重を読み込んで、最も重い人と最も軽い人の体重を表示す るプログラムを作成せよ.なお、体重はdouble 型で表すものとする。 体重を入力してください 1 番: 52.5 2 番: 64.0 3 番: 58.3 4 番: 67.4 5 番: 62.0 最も重い人の体重: 67.4 最も軽い人の体重: 52.5 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C [4] 期限: 7月14日まで [5] その他の制限:
>6 #include <stdio.h> #define NUM (5) int main() { double heavier,lighter,input; for(int i = 0 ; i < NUM ; i++){ printf("%d番:",i+1); scanf("%lf",&input); if(i == 0){ heavier = lighter = input; continue; } if(heavier < input){ heavier = input; } if(lighter > input){ lighter = input; } } printf("最も軽い人の体重:%g\n",lighter); printf("最も重い人の体重:%g\n",heavier); return 0; }
11 :
tac :2009/07/13(月) 21:28:03
>>5 完成系のイメージはチャットのような事ができるプログラムを使って、
実際の講義中にそのプログラムを使い、学生に対して使用した場合
どのような効果が得られるかを検証することなので、
チャットでなくても、インスタントメッセンジャー?!でも良いです。
一応、情報系の学部ですが、
研究テーマは「チャットのようなモノを使った時の学生の学習効果」です。
なので、プログラミングに対して全く無知なので、力を貸していただけないでしょうか??
期限前の問題(全て前スレ) >> 988-989 (1)3つ以上の整数の階層的プログラミングを行うプログラムを作成せよ。 7月23日 >> 988-989 (2)3つ以上の2次元ベクトルの階層的プログラミングを行うプログラムを作成せよ。 7月23日 >> 964(9736) 英単語とその出現回数を登録する二分探索木を書け。 7月14日10:00 >> 962(dotup.org231968) コマンドラインで指定した2つのファイルの内容を交換する。 7月14日 >> 962(dotup.org231968) ライブラリ関数qsortを使って乱数のソートを行います。 7月14日 >> 847 LLLアルゴリズムをCでプログラミング 7月17日 >> 820 3入力のクワイン・マクラスキー法のプログラム 7月13日 >> 799 指定された点x,yを含む指定された境界色C2で囲まれた平面領域を指定された色C1で塗りつぶす 7月17日 正午 >> 791(9708,9709,DLL_BMP_C) 歌詞を暗号鍵Kとして読み込み、画像 NewYear2003.bmpを暗号化した画像Cを生成する。 7月15日 >> 772 4次のルンゲ−クッタ法を用いて連立微分方程式を解く 7月28日
>>11 学習効果の調査ならc++である必要はあるの?
あと都合のいいコメントだけレス返すのやめたほうがいいですよ
14 :
tac :2009/07/13(月) 21:41:21
>>11 C++は所属しているゼミの先生の指定があったので、強制的に決定してしまいました。
都合のいいコメントだけにレスを返したつもりはなかったんですが、
勘違いされたなら、申し訳ありませんでした。
>>11 それがホントならフリーのチャットPG漁るべき。
C系言語でソケットから作ろうつーのは迂遠過ぎる。
(C系言語が得意で漁るより作るほうが早いって人は別ね)
勘違いにするならいいや
18 :
tac :2009/07/13(月) 21:50:14
>11
>>15 チャットPGっていうのは、簡易型のチャットってことですか?
「漁る」の意味がいまいち理解できなかったんですが、どういう意味でしょうか?
>>18 15じゃないが漁るというのはチャットプログラムを作るのではなく、
既にあり公開されているものを持ってきて利用した方が良いのでは?
ということだろう
>>18 漁るってのはどこからか適当なソースコード見つけてきてパクってくるってこと。
だいたい「チャットのようなモノを使った時の学生の学習効果」を調べるだけなら
わざわざ自分でチャットプログラム作る必要がないし。
チャットをする方法はjavascriptのチャットルーム使うとか、IRCクライアントを使うとか方法は
いくらでもあるからその研究内容でC++使って作るのははっきり言って無駄だって教授に言ってみろ。
本当は土曜日にもう一度お願いし直したかったのですが、しんどくて出来ませんでした
今日も休んだのですがメールで先生に連絡したら前スレの
>>997 のように少し待ってくれるみたいです
ギャグではないので改めて宜しくお願いします
>>17 >>19 さん
ありがとうございます!!!
提出するだけでなく、17,19さんみたいにソースを書けるように勉強させてもらいます^^
>>21 >その研究内容でC++使って作るのははっきり言って無駄だって教授に言ってみろ。
教授の真意を聞いたほうがいい。
本当の研究としてだけ(学会論文目指して)やってるならそうだが、
そうじゃないなら、学生の勉強のためにやらせてる可能性もある。
それに、調べるだけならチャットを作る必要はないんだが、
「改良」したいなら、学生がちゃんとソースを理解していることが必要だ。
それでも、C++を選択する理由としては弱いかもしれないが。
すいません、ぼけていました
正しくは749ですね
>>25 さん指摘ありがとうございました
>>11 全くの無知な学生にこの課題を出すなら、パワハラの可能性があるのでしかるべきところに相談するといいんじゃね?
>>28 >配列を用いた計算機のプログラム
の意味がよく分からない
32 :
デフォルトの名無しさん :2009/07/14(火) 00:42:12
#include<iostream> using namespace std; int main(){ int a; cout << "数値を入力してください\n"; cin >> a; if( a > 30) cout <<"31以上ですね\n"; } else if(a<10){ cout <<"10未満ですね\n"; } else { cout <<"30以下で10以上ですね\n"; } return 0; } これが例文なんですが、 ある整数変数をキーボードから入力し、その数値が9以下なら『入力した値は1桁です』と表示させて、10以上、99以下の場合は、『入力した値は2桁です』と表示させ、 100以上なら『入力した値は3桁以上です』と表示するプログラムを作成せよ 誰かこれ教えてくれませんか?
>>32 #include<iostream>
using namespace std;
int main(){
int a;
cout << "数値を入力してください\n";
cin >> a;
if( a <= 9)
cout <<"入力した値は1桁です\n";
}
else if(a <= 99){
cout <<"入力した値は2桁です\n";
}
else {
cout <<"入力した値は3桁以上です\n";
}
return 0;
}
>>32 その例があって、その問題が答えられないって小学生未満?
>>32 >>1 嫁といいたいところだがやさしい俺様は説いてあげるよ
#include <iostream>
#define DEBUG
using namespace std;
void hoge(int num){
if(num <= 9) cout << "入力した値は1桁です" << endl;
else if(num <= 99) cout << "入力した値は2桁です" << endl;
else cout << "入力した値は3桁以上です" << endl;
}
int main()
{
int num;
cin >> num;
hoge(num);
#ifdef DEBUG
cout << "num に負の数を入れてみる" << endl;
num = -100;
hoge(num);
cout << "規定外の動作だけど見なかったことにしよう!" << endl;
#endif
return 0;
}
>>35 質問の仕方からしてガキでしょ
"入力した値は1桁です"と出力せよであって、入力した値が1桁の場合に そのように出力する問題ではないのだよ -100は9以下なので、"入力した値は1桁です"と出力することは完全に仕様通り。
おっと失礼。規定外という表現が誤りだった。確かに完全に仕様通りだよ。 ただその仕様どうなのよってことが言いたかったの。
39 :
デフォルトの名無しさん :2009/07/14(火) 01:09:06
ありがとうございました 変数aの値がbより小さい場合には、『aはbより小さいです』と表示させ、大きい場合には"a=a+b"を計算させる 文字変数mの中身が'a'ならば、『aが格納されています』と表示させて、'a'でないならば『'a'でない文字が格納されています』と表示させたあと、変数bとcを使った『b=b+c』を計算する。 変数aが、変数bより小さい場合には、『aはbより小さいです』と表示し、変数bより大きい場合には、『aはbより大きいです』と表示し、変数bと等しい場合には、『aとbは等しいです』と表示する 先ほどの例を踏まえて誰かこれ教えてくれませんか?
9以下だった場合は「今日も暑いですね」と出力するのと同じように考えればいいよ 出力する文字列なんて下っ端には関係ないんです …もちろんネタだよ
おまwww 先ほどの例を参考に自分で考えるという選択肢はなしかよwww
でもお礼を言えるっていうのは良い事だよ、うん。
なんか前スレで見たような気がするな
>>39 >変数aの値がbより小さい場合には、『aはbより小さいです』と表示させ、大きい場合には"a=a+b"を計算させる
main(a,b){a+b<b*2&&puts("aはbより小さいです");}
>文字変数mの中身が'a'ならば、『aが格納されています』と表示させて、'a'でないならば『'a'でない文字が格納されています』と表示させたあと、変数bとcを使った『b=b+c』を計算する。
main(m){printf("%sが格納されています",m==97?"a":"'a'でない文字");}
>変数aが、変数bより小さい場合には、『aはbより小さいです』と表示し、変数bより大きい場合には、『aはbより大きいです』と表示し、変数bと等しい場合には、『aとbは等しいです』と表示する
main(a,b){a<b&&puts("aはbより小さいです")||a>b&&puts("aはbより大きいです")||puts("aとbは等しいです");}
久しぶりにショートコーディングしてみるぜ!
C++指定無いからこれでいいよね?
あ、もちろん先ほどの礼を踏まえた回答だよ?
これでキミはヒーローだっ!!
1] 授業単元:
ゼミナール
[2] 問題文(含コード&リンク):
「音声をマイクを使って入力し、リアルタイムでスピーカーから出力する」
[3] 環境
[3.1] OS: Linux
[3.2] gcc
[3.3] 言語:C言語
[4] 期限: 2009年7月20日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
制限は特にありません。
ttp://homepage3.nifty.com/rio_i/lab/oss/004mic.htm このページを参考にしつつプログラムを書いていたのですが、
録音と再生を同時に行うところで行き詰まってしまいました。
このページにのってるプログラムに追加する形でどなたか教えていただけないでしょうか。
前スレ
>>970 です。
エラーが起こってしまうので、どなたか修正していただけないでしょうか。
48 :
デフォルトの名無しさん :2009/07/14(火) 12:16:24
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 主語、目的語、述部が入ったデータファイルを読み込み、それらをランダムに組み合わせて生成した短文を20個ファイルに出力するプログラムの作成。 短文の構文は必ず、「(主語)は、(目的語)(述部)。」となるようにする。 出力例:俺は、カレーが大好きだ。 データファイルは以下を使用すること。 主語: 俺 私 あなた 彼 彼女 先生 犬のポチ 猫のタマ ライオン その人 政治家 ネズミ 目的語: カレー ご飯 肉 授業 男 女 すごいもの アレ アンパン お金 述部: が大好きだ が大嫌いだ を作った をなくした が欲しい に全力を尽くす を新しいものに交換した ?なにそれ美味いの? について深く考えた を捨てた に塩をふりかけた [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: 2009年7月20日
[1] 授業単元:プログラミング [2] 問題文 2人の人の名前と年齢をキー入力し、同じ年なら「○○さんと××さんは同じ年です」、 そうでなければ「○○さんは××さんよりyy 歳年上です」と表示するプログラムを作成せよ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: borlandc++ [3.3] 言語: C [4] 期限: 今日の2時30分 [5] その他の制限: なし よろしくお願いします
50 :
>8 :2009/07/14(火) 12:24:18
それ間違ってないか?
>>47 エラーが出るというなら、コードとそのエラーを貼るべきだな。
でないとどこで何が起きているのかわからん。
>>47 前スレ
>>971 の回答なら俺も試したがエラー出なかったぞ
自分の書いたソースをロダにうpすれ
54 :
47 :2009/07/14(火) 12:55:24
すみません。 入力が誤っていたみたいです。ありがとうございました。
前スレの
>>772 です。スレが変わったのでもう一度貼っておきます。
[1] 授業単元: 4次のルンゲ−クッタ法を用いて連立微分方程式を解く
[2] 問題文:システムの状態x = (x, y, z) が、以下の連立微分方程式に従う場合の挙動をシミュレーション
する.
dx/dt= −y − z
dy/dt= x + ay
dz/dt= b + (x − c)z
【課題1】4 次のルンゲ-クッタ法を用いて上記方程式を数値的に解くプログラムreport.c を完
成させよ.report.c には3 つの関数が定義されている.ルンゲ-クッタ法を1 ステップ行う関数
rungekutta() は完成しているが、導関数を求める関数deriv() とプログラム全体を制御する関
数main() は不完全である.各関数に適切な実行文等を記述し、プログラムを実行できるよう完
成させよ.
【課題2】課題1で完成させたプログラムreport.c を用い、シミュレーションを実行する.シス
テムパラメータが
1. (a, b, c) = (1.0, 0.2, 1.0)
2. (a, b, c) = (1.0, 0.2, 8.0)
の2つの場合に、時刻t = 200.0 からt = 400.0 の間にx が位相空間に描く軌跡を図に表せ.シ
ミュレーションの時間刻みはdt = 0.02 とし、初期値x(0) = (x(0), y(0), z(0)) は適当な値を選ぶ
こと.またそれぞれの場合について、初期値をわずかに変化させた場合に軌跡がどのように変化
するかを、同様に図に表して比較せよ.
[3] 環境 Vine Linux
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限:2009年7月28日
[5] その他の制限:ソースは長いので3レスに分けて投稿します。ソースを以前ろだに貼ろうと思ったのですができませんでした。見づらくてすいません。
どうか宜しくお願いします。
56 :
772 :2009/07/14(火) 13:00:29
#include <stdio.h> #include <math.h> #define N 3 //システムの次元 double a = 0.20; double b = 0.20; double c = 10.0; /* 導関数 */ /* x における dx/dt を求める */ void derivs(double t, double x[], double dxdt[]) { /* dx/dt = f(x) */ dxdt[0] = ; dxdt[1] = ; dxdt[2] = ; }
57 :
772 :2009/07/14(火) 13:01:33
>>56 の続きです。
/* ルンゲクッタ法を1ステップ行う関数 */
/* x(t)=xin から x(t+h)=xout を求める */
void rungekutta(double xin[], double xout[], double t, double h)
{
int i;
double th2,h2,h6;
double dxdt0[N], dxdt1[N], dxdt2[N], dxdt3[N], xt[N];
double deriv(double, double [], double []);
h2=h*0.5;
h6=h/6.0;
th2=t+h2;
derivs(t,xin,dxdt0);
for(i=0;i<N;i++) xt[i] = xin[i] + h2*dxdt0[i];
derivs(th2,xt,dxdt1);
for(i=0;i<N;i++) xt[i] = xin[i] + h2*dxdt1[i];
derivs(th2,xt,dxdt2);
for(i=0;i<N;i++) xt[i] = xin[i] + h*dxdt2[i];
derivs(t+h,xt,dxdt3);
for(i=0;i<N;i++)
xout[i] = xin[i] + h6*(dxdt0[i]+2.0*(dxdt1[i]+dxdt2[i])+dxdt3[i]);
}
58 :
772 :2009/07/14(火) 13:02:34
>>57 の続きです。
int main()
{
int i;
double t, tmax, dt;
double x[N], x_next[N];
FILE *fp;
void rungekutta(double [], double [], double, double);
/* 諸変数を初期化 */
tmax = ;
dt = ;
/* システムの状態を表すベクトルx(N次元)の初期化 */
/* 計算結果を書き出す為のファイルを開く */
fp = fopen("result.dat","w");
/* 時間tを刻み幅dtずつ増加させながら時間発展 */
for(t=0.0;t<tmax;t+=dt){
/* 時刻tとxの各要素をファイルに書き出す */
fprintf(fp,"%lf %lf %lf %lf\n ", t, x[0], x[1], x[2]);
/* xを更新 */
x +=
}
/* ファイルを閉じる */
fclose(fp);
return 0;
}
うpろだが使えなかった人だっけ はやくうpろだ使えるようになってくれよ
すみません。学習意欲がないんで、うpろだの使い方とか覚えるの面倒くさいんです。 だからはやく宿題手伝ってください。
>>50 いえいえ、合ってますよ。
>>60 ファイル名のところに直接ファイル名書いてる?、「参照..」ボタン押せ。
>>61 60は本人じゃないだろw
このスレのみんなの心の声だ
>>039 これは多分1、2、3を順次処理する問題なのだろう。
#include <iostream>
using namespace std;
int main(void) {
int a, b, c;
char m;
cout<<"a:"; cin>>a;
cout<<"b:"; cin>>b;
cout<<"c:"; cin>>c;
cout<<"m:"; cin>>m;
if(a < b) /* - 1 - */
cout<<"aはbより小さいです\n";
else if(a > b)
a = a + b;
if( m == 'a' ) /* - 2 - */
cout<<"'a'が格納されています\n";
else
cout<<"'a'でない文字が格納されています\n";
b = b + c;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
if(a < b) /* - 3 - */
cout<<"aはbより小さいです\n";
else if(a > b)
cout<<"aはbより大きいです\n";
else
cout<<"aとbは等しいです\n";
}
64 :
デフォルトの名無しさん :2009/07/14(火) 13:56:51
66 :
デフォルトの名無しさん :2009/07/14(火) 15:27:58
>>55 です。大変ご迷惑をおかけしました。ろだにソースを貼りましたのでよろしくお願いします。
67 :
デフォルトの名無しさん :2009/07/14(火) 15:41:56
>>53 回答に誤りがあったみたいでプログラムが作動しません。
>>48 どなたかお願いします。
>>67 前スレ
>>939 の回答だが試してみた。
で、コンパイルエラーが起こったけど修正すれば動いた。
>>srand((unsigned) time(NULL));/* 乱数系列の変更 */
上記の一文を変数宣言後の位置にいどうするか、コメントアウトすれば動く。
C99なら問題ないのだけど。
>>67 前回回答した者だけど、規格とかまで理解できてなかったゴメン・・・
>>68 さんが言ってるように修正してみてほしい
コメントアウトすると乱数が一定になるからなるべく移動で解決する方が良さそう
あと、それでもエラーが出るようなら、エラーメッセージを貼り付けて欲しい
ノールなら130資源地しらみつぶしに攻撃したら100匹くらいやとってるとこあるからそれで完了
72 :
デフォルトの名無しさん :2009/07/14(火) 18:37:04
[1] 授業単元:C言語 [2] 問題文:配列を用いた計算機のプログラムを作成してください。 計算は前から順に行われていく。 入力される数値の個数は最大でも20個としてください。 [3] 環境 [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語:C言語 [4] 期限:2009年7月19日 [5] その他:特になし 自分も新スレになったので再貼りです 改めてよろしくおねがいします
>>72 >配列を用いた計算機のプログラムを作成してください。
の具体例をくれ
>>070 コンパイルして、テストはしていないみたい。
#define DELIMITER " \n" /* 半角文字 */
/* 主語の読み込み */
fgets(sbuff, BUFFSIZE, ifp);
s[0] = strtok(sbuff, DELIMITER);
for (i = 1; i < S; ++i) s[i] = strtok(NULL, DELIMITER);
/* 目的語の読み込み */
fgets(mbuff, BUFFSIZE, ifp);
m[0] = strtok(mbuff, DELIMITER);
for (i = 1; i < M; ++i) m[i] = strtok(NULL, DELIMITER);
/* 述部の読み込み */
fgets(jbuff, BUFFSIZE, ifp);
j[0] = strtok(jbuff, DELIMITER);
for (i = 1; i < J; ++i) j[i] = strtok(NULL, DELIMITER);
>>72 ・問題文は、出題されたまま全文を書いてください。
>>64 はい!ほんとにありがとうございました。
助かりました
適当にエスパーしたものを貼っておく #include <stdio.h> #define MAX 20 int main(void) { int i; double result; double num[MAX]; char op[MAX]; printf("1 個目の数字 = "); scanf("%lf", &num[0]); getchar(); for (i = 1; i < MAX; i++) { printf("%d 個目の演算子 = ", i); if ((op[i] = getchar()) == EOF) break; printf("%d 個目の数字 = ", i + 1); scanf("%lf", &num[i]); getchar(); } result = num[0]; for (i = 1; i < MAX && op[i] != EOF; i++) { switch (op[i]) { case '+': result += num[i]; break; case '-': result -= num[i]; break; case '*': result *= num[i]; break; case '/': result /= num[i]; break; default: printf("error\n"); return 1; } } printf("ans = %f\n", result); return 0; }
79 :
デフォルトの名無しさん :2009/07/14(火) 20:34:06
前スレ962をお願いします
81 :
79 :2009/07/14(火) 20:44:12
82 :
デフォルトの名無しさん :2009/07/14(火) 20:47:21
課題なんだが。。。。 #include<stdio.h> void kakugyou(void); int hen,x,y; void main(void) { printf("数字(2〜9)を入力してください:"); scanf("%d",&hen); while(x<=hen) { kakugyou(); x++; }
83 :
デフォルトの名無しさん :2009/07/14(火) 20:48:42
↑の続き x=hen-1; while(1<=x) { kakugyou(); x=x-1; } } void kakugyou(void) { y=1; while(y<=x) { printf("*"); y=y+1; } printf("\n"); } これだと、アスタリスクが旗みたいな形になるけど、これを基本にしてダイヤ型と六角形、星形の結果を出すにはどうしたらいいのだろうか。 誰か教えてください。
ゆとり増えすぎだろこのスレマジで・・
>星形の結果を出すにはどうしたらいいのだろうか ビルから飛び降りればいいんじゃないかな?
[1] 授業単元:C++
[2] 問題文(含コード&リンク):
http://down11.ddo.jp/uploader/download/1247572884.rar/attatch [3] 環境
[3.1] OS: (WindowsVista)
[3.2] textpad
[3.3] 言語: (C++)
[4] 期限: ([2009年07月15日23:59まで)
独自のプログラムの書き方なので、とても困っています。
色々と試してみたのですが、自分の力だけでは出来そうにないため相談しました。
取り扱い説明書やプログラムは001.rarに入れておきました。
緊急を要しますので、何方かどうかよろしくお願いします。
ファイルサイズが大きいため違うアップローダーをお借りしました。
パスワードは以下になります。
pass:C/C++
>>81 課題1
#include <stdio.h>
int main(int argc, char **argv)
{
FILE *fp1, *fp2, *tfp;
int c;
if (argc != 3) return 1;
fp1 = fopen(argv[1], "r"); tfp = fopen("temp.txt", "w");
while ((c = fgetc(fp1)) != EOF) fputc(c, tfp);
fclose(fp1); fclose(tfp);
fp1 = fopen(argv[1], "w"); fp2 = fopen(argv[2], "r");
while ((c = fgetc(fp2)) != EOF) fputc(c, fp1);
fclose(fp1); fclose(fp2);
fp2 = fopen(argv[2], "w"); tfp = fopen("temp.txt", "r");
while ((c = fgetc(tfp)) != EOF) fputc(c, fp2);
fclose(fp2); fclose(tfp);
return 0;
}
>>86 RAR駄目やっ。
Extracting from D:\My Documents\Cplus\Part129_086\001.rar
Extracting D:\My Documents\Cplus\Part129_086\tex.bmp
CRCエラー: D:\My Documents\Cplus\Part129_086\tex.bmp
>>81 課題2
#include <stdio.h>
#include <stdlib.h>
#define N 10
int comp_i(const void *m, const void *n) { return *(int *)m - *(int *)n; }
int comp_d(const void *x, const void *y) { return *(double *)x - *(double *)y; }
int main(void)
{
int a[N];
double x[N];
int i;
srand(time(NULL));
for (i = 0; i < N; i++) { a[i] = rand() % 100; x[i] = (double)rand() / RAND_MAX; }
printf("整数1〜100の乱数を%d個発生しました\n", N);
for (i = 0; i < N; i++) printf("%7d", a[i]);
puts("\nソートすると");
qsort(a, N, sizeof(int), comp_i);
for (i = 0; i < N; i++) printf("%7d", a[i]);
puts("");
printf("実数[0, 1]の乱数を%d個発生しました\n");
for (i = 0; i < N; i++) printf("%7.3f", x[i]);
puts("\nソートすると");
qsort(x, N, sizeof(double), comp_d);
for (i = 0; i < N; i++) printf("%7.3f", x[i]);
puts("");
return 0;
}
>>92 (2)
#include <stdio.h>
int main(void)
{
int i, j;
i = 1;
while (i < 10) {
j = 1;
while (j < 10) printf("%3d", i * j++);
printf("\n");
i++;
}
return 0;
}
>>92 (1)
#include <stdio.h>
int main(void)
{
int f1, f2, f3, n;
printf("n = "); scanf("%d", &n);
if (n == 0) { printf("F(0) = 0\n"); return 0; }
if (n == 1) { printf("F(1) = 1\n"); return 0; }
f1 = 0; f2 = 1;
while (n >= 2) { f3 = f2 + f1; f1 = f2; f2 = f3; n--; }
printf("F(%d) = %d\n", n, f3);
return 0;
}
98 :
79 :2009/07/14(火) 23:01:46
99 :
デフォルトの名無しさん :2009/07/15(水) 01:17:23
>>99 解答01: string.h
解答02: cc minitest0926A.c -o minitest0926A
解答03: 3.464102
解答04: s=r*r*3.142;
解答05: 25
解答06: ( (x)<5 ? 'c' : 'd' )
解答07: .9
解答08: p=3.141592654
環境依存あるかも。
101 :
デフォルトの名無しさん :2009/07/15(水) 01:50:31
[1] 授業単元:OS演習
[2] 問題文(含コード&リンク):
(1)pipe3.cを完成させて、親子プロセス間で交互にメッセ
ージを交換するプログラムを作成せよ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9752.txt (2)共有バッファを用いて、子プロセスでメッセージを書き込
み、親プロセスで読み出すプログラムを作成せよ。ただし、
共有バッファは128バイトとし、その先頭には‘書き込み
マーク’を付し、そのリセットは親プロセスが、セットは子
プロセスが行うとせよ。
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語:C言語
[4] 期限: 7/16
[5] その他の制限:特にないです、どうかよろしくお願いします
ここすごく面白そうなスレだ プログラミングの題材探しにすんげぇ助かるかもしれない
最初はそう思うもんだ がんばって技術向上のついでに単位取得を手伝ってあげるといい
107 :
デフォルトの名無しさん :2009/07/15(水) 03:28:46
[1] 授業単元: デジタル信号処理 [2] 問題文(含コード&リンク): 2つのテキストファイル(double型)を読み込み、畳み込み和を計算し、別のファイルに出力せよ。 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 2009年 7月16日 [5] その他の制限: よろしくお願いします。
109 :
デフォルトの名無しさん :2009/07/15(水) 09:13:24
[1] 授業単元: OS [2] 問題文(含コード&リンク): 共有バッファを用いて、子プロセスでメッセージを書き込み、親プロセスで読み出すプログラムを作成せよ。 ただし、共有バッファは128バイトとし 先頭には‘書き込みマーク’を付し、そのリセットは親プロセスが、セットは子プロセスが行うとせよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限:7月17日 [5] その他の制限:なし よろしくお願いします。
1] 授業単元:数値情報解析 [2] 問題文:ニュートン法により代数方程式を解くプログラムを作りなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual Studio [3.3] 言語:C [4] 期限:2009年7月22日 [5]少しでも易しい表現にしていただくようよろしくお願い致します。 あと、ソースファイルに処理過程がわかり易いようにコメント文を加えて いただけるとありがたいです。
maximaだとこれだけなんだけどね t(f):=block([fd,h],fd:diff(f(x),x),h:x-f(x)/fd,return(rat(h)))$t(f); 代数方程式に制限はないの?普通の多項式に限るとか それか、代数方程式とその微分が与えられている前提なら 話は簡単だけども 多項式の微分を自分で作れって問題ならめんどいね
112 :
デフォルトの名無しさん :2009/07/15(水) 10:36:10
>>110 方程式と、方程式の微分結果は、ソースに直接書くの?
それとも、入力された方程式を解くの?
それによって、難易度がかなり違うんだけども。
113 :
72 :2009/07/15(水) 11:26:38
問題文はこれで全部です 作成例の実行ファイルを昨日貰ったので家に帰ったらアップします
114 :
tac :2009/07/15(水) 16:06:17
先日、このスレッドで質問を書かせていただいたんですが、 多くの方から、意見をいただき、とても参考になりました。 今日、ゼミがあったので教授にその話を言うと、 自分で1から開発せずに、オープンソースを探し、 もし足りなければ、そこから、改良を加えるという形でOKがでました。 なので、今回はCもしくはC++言語で、 ソケット間通信を可能にするオープンソースを自分自身でも探してみますが、 お勧めのソケット間通信のオープンソースのサイトやURLを教えていただけないでしょうか? 【質問テンプレ】 [1] 授業単元: ゼミナール [2] 問題文(含コード&リンク): 「PC間でソケットの接続確立とデータを送信を行うプログラム」の オープンソースを探す。 [3] 環境 [3.1] OS: Windows XP [3.2] Micro Soft Visual C++ 2008 [3.3] 言語: C もしくは C++ 言語 [4] 期限: 2009年7月22日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 制限は特にありません。 みなさんのお勧めのインスタントメッセンジャーもしくはチャットを CもしくはC++言語で書かれたオープンソースを教えて下さい。 また、お勧めの C または C++ 言語のオープンソースが置いてあるサイトを紹介してください。 宜しくお願いします。
FreeBSD(オープンソース)にtalk/talkdというのがあります。
>>114 mixiであんたが消したトピに答えがあったんだが見てないのか?
>>96 すみませんでした。ありがとうございます。
118 :
デフォルトの名無しさん :2009/07/15(水) 18:32:28
>>119 #include<stdio.h>
#include<string.h>
#include<ctype.h>
int check(const char *mailaddress)
{
const char *p;
int at_count=0;
if(!isalpha(mailaddress[0])) return 0;
if(!isalpha(mailaddress[strlen(mailaddress)-1])) return 0;
for(p=mailaddress;*p;p++)
{
if(!isalnum(*p) && !strchr("@-_.", *p)) return 0;
if(*p=='@') at_count++;
}
return (at_count==1);
}
int main(void)
{
char str[21];
printf("メールアドレス =>");
scanf("%20s", str);
if(check(str)) printf("OK\n");
else printf("ERROR\n");
return 0;
}
121 :
obama ◆dXPOZaWDCk :2009/07/15(水) 19:13:28
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9755.txt 上のプログラムがなぜ図のような座標列を生成したのかを説明せよ
図;
http://g.pic.to/17jcdy ヒント1;関数draw_polygon()中のif(r>xxx)において、数値xxxをいろいろと変えること
数値xxxを大きくしていくと図が徐々に単純になっていく、単純な図から考えを進めること
ヒント2;自分がパソコンになったつもりでプログラムを順に追っていくこと。
その際呼び出した側のdraw_polygon()と呼び出された側のdraw_polygon()を区別して考えること
(前者と後者のローカル変数の区別をわすれないこと)
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: (C
[4] 期限: ([09年07月17日13:00まで]
[5] その他の制限:
122 :
obama ◆dXPOZaWDCk :2009/07/15(水) 19:14:55
123 :
デフォルトの名無しさん :2009/07/15(水) 19:29:56
[1] 授業単元:ゲームプログラミング入門 [2] 問題文(含コード&リンク): 以下のゲームの中からどれか二つを選んで作成せよ。 ・マインスイーパー ・七並べ ・ブラックジャック ・ポーカー カードゲームを作成する場合、同じカードが2枚存在してはならない。 ジョーカーは無いものとする。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: [2009年7月17日12:00まで] 出来れば7並べかマインスイーパーをお願いします。
[1] 授業単元:基礎c++ [2] 問題文(含コード&リンク): 一次元配列を用いて、Aをn次(nは100以下)の正方行列としたときの 対称行列の成分の添字番号、行成分を格納し表示せよ。 [3] 環境 [3.1] OS: linux [3.2] コンパイラ名とバージョン: visual c++ [3.3] 言語: c++ [4] 期限: 2009年07/17まで [5] その他の制限: 一次元配列で考える。 よろしくお願いします。
>>126 だめだ、10回読み直したけどわからん。
だれか分かりやすく読み下してくれ・・・
128 :
デフォルトの名無しさん :2009/07/15(水) 20:43:06
n次対称行列の格納に必要な配列の長さはn(n+1)/2 配列名をMとする時 i行j列成分は(i>=j)の時 M[ i*(i-1)/2+j-1 ] (i<j)の時 j,i成分と同じ 乱数で適当に格納した後表示する。 これでどーだ?
>>128 先に書かれたー。せっかくなので俺がいま書いた解釈も…
N次正方行列をあらわすには普通N*N個の要素を必要とするが
それが対称行列ならN*(N-1)/2個の要素ですむ
それでは、N次の対称行列をN*(N-1)/2個の要素を持つ一次元配列に
格納し、取り出すプログラムを作成せよ
>>128 ,129
ありがとうございます。
じっくり考えたいと思います。
131 :
72 :2009/07/15(水) 21:05:30
>>128-129 なるほど
「添字番号、行成分」なるなにものかを何とか数値化して配列に入れる方向で考えてた。頭堅いのは駄目だな
その方向で行くとして、出力は1次元配列の構造そのままがいいんだろうか、行列っぽくするべきだろうか
なんとなく後者かなと思ったが
>>121 図を右上から左下、左上から右下の二本の線でバツに区切ります。
すると4つの同じような図形の菱形になります。
その一つを見るとさらに同じように4つの菱形に区切れます。
部分が全体を含んでいます。
そのように繰り返し的に同じ図形が現れるのをフラクタル図形といいます。
プログラムは4つの点を描き、中心位置をずらして
大きさを小さくしながら再帰的に同じ形を描いていっています。
135 :
デフォルトの名無しさん :2009/07/15(水) 22:22:25
136 :
72 :2009/07/15(水) 22:40:50
うお、安価なかったので気づきませんでした
>>131 さんとそれを教えてくれた
>>134 さんありがとうございました
>>135 #include <stdio.h>
void func(int *max, int *min, int *num, double *ave)
{
int a, n;
FILE *fp = fopen("tensu.txt", "r");
if (fp == NULL) { fprintf(stderr, "file open error."); exit(1); }
if (fscanf(fp, "%d", &a) == EOF) { *num = 0; return; }
*max = *min = *ave = a;
*num = 1;
while (fscanf(fp, "%d", &a) != EOF) { if (*max < a) *max = a; if (*min > a) *min = a; *ave += a; (*num)++; }
*ave /= *num;
fclose(fp);
}
int main(void)
{
int max, min, num;
double ave;
func(&max, &min, &num, &ave);
printf("最大値 = %d, 最小値 = %d, データ個数 = %d, 平均値 = %f\n", max, min, num, ave);
return 0;
}
138 :
デフォルトの名無しさん :2009/07/15(水) 22:59:39
[1] 授業単元: Linux/C [2] 問題文(含コード&リンク): 標準入力からの入力を元に演算、結果を標準出力に出力するプログラムがあります。 --- #include <stdio.h> #include <stdlib.h> main(){ char c[BUFSIZ]; fputs("input:",stderr); fgets(c,BUFSIZ,stdin); for(int i=0;i<atoi(c);i++) fprintf(stdout, "%03d\n",i); } --- これを以下のように実行し、例えば100を入力しても、エコーバックが画面表示されません。 $ a.out | more input:000 ←入力内容はエコーバックされず、最初の出力結果が表示される 001 … 022 --More-- 入力内容をエコーバックするようにプログラムを修正、または作り直して下さい。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C/C++ [4] 期限: 無期限 [5] その他の制限:なし
a.out | more ↓ a.out にする あと、パスに.を入れるのはよくない
>>126 n次の対称行列 めんどうなのでC/C++
#include <stdio.h>
int A[100*101/2];
int main() {
int n, i, j, k, i1, j1;
printf("n?"); scanf("%d%*c", &n); if(n>100) return 1;
for(k=0, i=0; i<n; i++) { /* 成分の添字番号を表示 */
for(j=i; j<n; j++, k++) {
A[k] = k+1;
printf("N(%2d,%2d) = A(%2d)\n", i, j, k);
}
}
for(i=0; i<n; i++) { /* 行成分を表示 */
for(j=0; j<n; j++) {
if(i < j) i1=i, j1=j;
else i1=j, j1=i;
k = j1+i1*n-(i1*(i1+1)/2); // i
printf("A(%2d)=%2d", k, A[k]);
if(j < n-1) printf(", ");
}
puts("");
}
return 0;
}
/*
1 2 3 4
2 5 6 7
3 6 8 9
4 7 9 10
*/
>>112 与えられた方程式をソースに直接書くタイプなのです。
方程式や収束条件が先生の方からまだ発表されていなかったので、
大変申し訳ないですが、後日あらためて書き込みさせていただきます。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):@四則演算は用いずに, 0xabcdの下位8ビットを0にして表示するプログラムを作成せよ. A変数xのyビット目を1にする関数 int bit_set(int x,int y) を作成せよ. B変数xのyビット目を0にする関数 int bit_clear(int x,int y) を作成せよ. C変数xのyビット目の値を返す関数 int bit_test(int x,int y) を作成せよ. [3] 環境 [3.1] OS:Windows Vista SP1 [3.2] Visual studio 2008 [3.3] 言語:C [4] 期限:2009年7月16日8:30まで [5] その他の制限:基本的なもので
>>144 @
#include <stdio.h>
int main(){
printf("%d",0xabcd & 0xff00);
return 0;
}
A
int bit_set(int x, int y){
return x | (1<<(y-1));
}
B
int bit_clear(int x, int y){
return x & ~(1<<(y-1));
}
C
int bit_test(int x,int y){
return (x>>(y-1)) & 1;
}
どなたか
>>102 の(2)だけでよいのでよろしくお願いします
>>146 マインスイーパってやっぱりマウスでクリックするの?
>>148 どちらもCUIです。
説明が足りず申し訳ありません。
CUIでマインスイーパーって開ける箇所を座標指定とかでやるのか?
>>150 だと思います。特に方法は指定されていませんでした。
152 :
138 :2009/07/16(木) 11:17:32
>>140 レスありがとうございます。
その場合、スクロール、ページャ運用ができません。
是非プログラム内で解決したいと思っています。
宜しくお願い致します。
154 :
デフォルトの名無しさん :2009/07/16(木) 12:57:01
>>146 7並べは、コンピュータ対戦?
両方人間で、同じ画面見てたらゲームになんないよねぇ・・・
>>154 7並べサーバを作って、人間用クライアントが複数接続できるようにして、
足りないぶんはAIクライアントに担当させる・・・
AIはインタフェースだけ決めといて実装は自由、各自が自作の思考ルーチンの強さを競う
なんて妄想してると夢だけはひろがりんぐw
いまからマインスイーパをCで作ってみようと思う
>>157 下図に示すa,bに数値を設定したときに
--------------
この図はどこ
160 :
デフォルトの名無しさん :2009/07/17(金) 00:11:31
[1]プログラミング [2] 課題 言語: C もしくは C++ 言語 (1)以下のプログラムを作成しなさい(数当てゲーム) *画面上に「好きな数字を入力してください」と表示して、キーボードからの入力を待つ。 変数aを定義して、10までの乱数を発生させて変数aに代入する。 キーボードからの入力があれば、先に発生させた乱数と一致しているならば 「あたり!!」と表示する。 一致していなければ「残念乱数はxxです」と表示する(xxには変数aの中身を表示する) 宜しくお願い致します。
156だけど徹夜で用事入ったから17日昼までにマインスイーパ作れないと言っておく 一応windows.hを使ったインタフェースで作ってた。
>>160 #include <stdio.h>
#include <stdlib.h>
int main(void){
int a,input;
srand( (unsigned)time(NULL) );
printf("input : ");
scanf("%d",&input);
a = rand() % 10 + 1;
if( a == input ) printf("あたり!!\n");
else printf("残念乱数は%dです。\n",a);
return 0;
}
>>153 これから見てみます
ありがとうございました
165 :
デフォルトの名無しさん :2009/07/17(金) 09:44:19
コメントアウト? コメントじゃなくて?
167 :
新たな課題です :2009/07/17(金) 10:59:16
168 :
デフォルトの名無しさん :2009/07/17(金) 11:00:02
>>167 ショートカットファイルしかありませんでした
171 :
デフォルトの名無しさん :2009/07/17(金) 13:40:01
ゲームってグラフィック使わないとなるとかなり難しいけどなw
174 :
デフォルトの名無しさん :2009/07/17(金) 21:12:10
175 :
デフォルトの名無しさん :2009/07/17(金) 21:47:15
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 下に示すように,キーボードから二つの文字列を読み込み,どちらの文字列が何文字長いか を表示するプログラムを作成せよ.なお,二つの文字列が同じ長さならば,「二つの文字列は同 じ長さです.」と表示させること. 文字列A : Good 文字列B : Morning 文字列B の方が3 文字長いです. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年07月21日 [5] その他の制限:なし。
>>175 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char a[256], b[256];
int diff;
printf("文字列A : ");
scanf("%s", a);
printf("文字列B : ");
scanf("%s", b);
if(diff = strlen(a) - strlen(b))
printf("文字列%c の方が%d 文字長いです.\n", diff>0 ? 'A' : 'B', abs(diff));
else
puts("二つの文字列は同じ長さです.");
return 0;
}
>>171 WriteLine関数とReadLine関数の定義はどこ?
185 :
デフォルトの名無しさん :2009/07/18(土) 14:25:51
1] 授業単元:プログラミング論 [2] 問題文:データベースに対して線形探索を行うプログラムを作成するこのとき探し出す値の項目(キー)は、生徒の名前とする。なお、番兵法を用いて繰り返しの終了判定を少なくする。また、文字列を比較する場合、関数strcmp()を用いる [3] 環境 [3.1] OS:Windows Vista [3.2] コンパイラ名:CPad for Borland C++Compiler [3.3] 言語:C [4] 期限: 2009年7月20日
>>185 そのデータベースというのはSQLのことかい?
あ、番兵って言ってるからちがうか。
>>188 それ番兵の意味ないでしょ。ノード数Nのときに検索回数が1少なくなるだけで比較回数はN増えるし。
検索文字を番兵にしないと。
<擬似コード>
//リストの最後に番兵を置く
sentinel = new Node("search word");
nodes.addLast(sentinel);
//検索文字を探す(番兵がいるので絶対見つかる)
int i=0;
for(p = nodes.head;p.name != "search word";p=p.next,i++){}
//リストの長さよりも小さければ番兵以外のノードが見つかった
if(i < p.count-1) return p;
else return NULL;
>>189 それ、C++ですねぇ。
検索文字列を番兵にするのは予想外でした。確かに比較回数はへりますね。
でも、その擬似コードは末尾にpushとpopしないといけないので、サーチにやっぱり時間かかりませんか?
文字列比較よりも低コストという感じですか?
191 :
デフォルトの名無しさん :2009/07/18(土) 16:47:19
>>188 データベース(人の名前,tomなど9人,txtファイル)から
キーボードから入力したKEY(生徒の名前)を
検索するプログラムを作ってほしいんです><
>>190 リストの末尾へのポインタをあらかじめ保持しておけば番兵の追加と削除に検索はいらない。
もちろん構造体を作るコストはかかるけどね。どっちが早いかは環境やリストの長さによる。
Node* head;
Node* tail;
//番兵追加
Node sentinel = new Node("hoge");
tail.next = sentinel;
//
//検索処理
//
//番兵削除
delete(tail.next);
tail.next = NULL;
>>191 初めに書けよ
他に抜けてる条件は無いのか?
>>191 ちょ!おま。
情報の後出しは禁止だ!このやろー。
findfirstfileを自作しろってことか?
さらに、その上で全文検索しろってことか?
どの辺のことを言ってるのかよくわからん。
194 :
デフォルトの名無しさん :2009/07/18(土) 17:13:26
>>193 すみません;;
Tom 75 60
Jerry 85 90
Spike 45 30
Rachel 55 85
Monica 75 90
Phoebe 80 75
Chandler 70 65
Joey 85 75
Ross 90 85
こんな感じのtxtファイルを読み込んで
名前をKEYで検索して該当したデータを表示させるプログラムなんですけど
データベースからデータを検索するプログラムが作れなくて困ってたんです;;
>>192 tailの管理がちょっと厄介ですなぁ。tailをpopしたら再検索ですし。まぁ、用途によりけりか。
196 :
デフォルトの名無しさん :2009/07/18(土) 18:12:47
1] 授業単元:プログラミング論
[2] 問題文:入力ストリームから読み込んだ文字列を、データベースに格納する前に
スタックに一時的に格納するプログラムを作成する
このときデータをまとめたデータ文字列を一つずつスタックへプッシュしたり
ポップしたりする過程が分かるプログラムを作成する。
なおスタックを実現するライブラリはスタックのための別のヘッダにまとめる
[プログラムの例]
入力ストリームから読み込んだデータ文字列をスタックへプッシュしたり
ポップしたりするたびにデータベースに格納された全データを表示する。
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名:CPad for Borland C++Compiler
[3.3] 言語:C
[4] 期限: 2009年7月20日
参考プログラムを元に完成させてほしいです
[参考プログラム]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9784.txt
198 :
デフォルトの名無しさん :2009/07/18(土) 18:50:20
>>197 めちゃめちゃ高度ですが
すごい助かります
ありがとうございました^^
お疲れ様です;;
[1] 授業単元: C言語 [2] 問題文 2進数の指定した場所の0、1を逆転せよ たとえば 00110という2進数の3番目を反転としたら 2進数が00010となる。1番目の場合10110となる [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VisualC++ [3.3] 言語: C [4] 期限: 7月20日 [5] その他の制限:
203 :
デフォルトの名無しさん :2009/07/18(土) 23:37:58
#include<iostream> using namespace std; int main() { int value; cout << "整数値を入力値を入力してください\n"; cin >> value; if(10 <= value && value <= 99) { cout << "二桁の整数です\n"; } else if( value <= 9 || value >= 100){ cout << "一桁か三桁以上の整数です.\n"; } return 0; } このプログラムは負の数値に対して考慮していない。0未満の整数が入力された時、『負の整数が入力されました』と表示するプログラムを作成せよ &&と同じ処理を&&を使わず、else ifを使って表現せよ この2つ分かる方教えてくれませんか C++です
>>202 本当にありがとうございました。頑張ってみます
>>203 負の数に対応したやつ
#include<iostream>
using namespace std;
int main() {
int value;
cout << "整数値を入力値を入力してください\n";
cin >> value;
if(value < 0) {
cout << "負の整数が入力されました\n";
}
else if(10 <= value && value <= 99) {
cout << "二桁の整数です\n";
}
else if( value <= 9 || value >= 100){
cout << "一桁か三桁以上の整数です.\n";
}
return 0;
}
>>203 &&を使わずにelse ifでむりやり版
あとテンプレ使え
#include<iostream>
using namespace std;
int main() {
int value;
cout << "整数値を入力値を入力してください\n";
cin >> value;
if(10 <= value) {
if (!(value <= 99))
goto FOO;
else if(1)
cout << "二桁の整数です\n";
}
else if(value <= 9 || value >= 100){
FOO:
cout << "一桁か三桁以上の整数です.\n";
}
return 0;
}
#include<iostream> using namespace std; int main() { int value; cout << "整数値を入力値を入力してください\n"; cin >> value; if(value >= 0){ if(value >= 100) cout << "一桁か三桁以上の整数です.\n"; else if(value >= 10) cout << "二桁の整数です\n"; else if(1) cout << "一桁か三桁以上の整数です.\n"; }else if(1){ cout << "負の整数が入力されました\n"; } return 0; } 自分で言うのもなんだがなんだこのクソプログラムはw &&が使えなければドモルガンの法則使って||にすればいいじゃない、と思った
>>203 //このプログラムは負の数値に対して考慮していない。←仮定
//このプログラムは1000以上の数値に対して考慮していない。←仮定を追加
//&&と同じ処理を&&を使わず、else ifを使って表現せよ
#include<iostream>
using namespace std;
int main() {
int value;
cout << "整数値を入力値を入力してください\n";
cin >> value;
/*
if(value < 0) {
cout << "負の整数が入力されました.\n";
}
else
*/ if(value < 10) {
cout << "一桁か三桁以上の整数です.\n";
}
else if(value < 100) {
cout << "二桁の整数です\n";
}
else {
cout << "一桁か三桁以上の整数です.\n";
}
return 0;
}
//これじゃ駄目かね? 質問者も、どれ提出すればいいか困るか。
//ド・モルガン版
>>207 #include<iostream>
using namespace std;
int main() {
int value;
cout << "整数値を入力値を入力してください\n";
cin >> value;
if(value < 0) {
cout << "負の整数が入力されました.\n";
}
else if( value <= 9 || value >= 100) {
cout << "一桁か三桁以上の整数です.\n";
}
else {
cout << "二桁の整数です\n";
}
return 0;
}
>>167 C++ で提出すれば君はヒーローだ。(星形の座標列を生成する)
#include <fstream>
#include <iomanip>
#include <math.h>
#include <stdlib.h>
using namespace std;
#define PI 3.1415926535897932384
void draw_star(ofstream &fout, float x1, int y1) {
int i, dot;
dot = abs(y1) + 4;
for( i = 0; i <= dot; i++ ) {
fout<<setw(6)<< cos(2*PI/dot*i)/2+x1 <<','<<setw(7)<< sin(2*PI/dot*i)/2+y1 <<endl;
if( i < dot )
fout<<setw(6)<< cos(2*PI/dot*(i+0.5))/4+x1 <<','<<setw(7)<< sin(2*PI/dot*(i+0.5))/4+y1 <<endl;
}
fout<<endl;
}
int main() {
float x, xstep; int y;
ofstream fout("polygon_29.csv");
if(!fout) return 1;
fout<<fixed<<setprecision(3);
for( y = -10; y <= 10; y++ ) {
xstep = 2.0 + 0.3 * abs(y);
for( x=0.0; x<40.0; x += xstep ) {
draw_star(fout, x, y);
}
}
fout.close();
}
213 :
デフォルトの名無しさん :2009/07/19(日) 12:40:03
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 下に示すように,キーボードから文字列を読み込み,その文字列が回文(前から読んでも後 ろから読んでも同じ)かどうかを判定するプログラムを作成せよ.なお,入力する文字列は半 角の英数字および記号のみと仮定してよい. 文字列を入力してください: abcba 回文です. [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年07月21日 [5] その他の制限:なし。
#include <stdio.h> #include <string.h> int is_kaibun(char* buf,int len){ int i; for(i = 0;i<len/2;i++){ if(buf[i] != buf[len-i-1]) return 0; } return 1; } int main(){ char buf[256]; printf("文字を入力してください:"); fgets(buf,sizeof(buf),stdin); if(is_kaibun(buf,strlen(buf)-1)){ printf("回文アル"); }else{ printf("回文チガウアル"); } return 0; }
216 :
デフォルトの名無しさん :2009/07/19(日) 13:26:37
こんな事したいんですけどC言語のソース書いてください 100以下の整数を入力し80以上なら”優”、70以上80未満なら“良”、60以上70未満なら“可”、60未満なら“不可”と表示する。tenに格納された値が不なら終了する。 条件:scanfの前にprintf(”点数を入力してください”);を入れる。whileを使いマイナスの値が入力された場合終了し、100〜0の場合ループさせる。ifを使う
>>217 入門スレから誘導した
こっちで受けてやってくれw
#include <stdio.h> int main(){ int ten; printf("点数を入力してください"); scanf("%d", &ten); while( ten >= 0 ){ if( ten >= 80 ){ printf( "優\n" ); }else if( ten >= 70 && ten < 80 ){ printf( "良\n" ); }else if( ten >= 60 && ten < 70 ){ printf( "可\n" ); }else{ printf( "不可\n" ); } printf("点数を入力してください"); scanf("%d", &ten); } return 0; }
220 :
デフォルトの名無しさん :2009/07/19(日) 13:41:01
ありがとうございます。 よろしければあと3つほどお願いしたいです。 @ユークリッドの互除法で最大公約数を求める A自然対数の底eを求める 条件:実数で行う。eは1+1/1!+1/2!+1/3!+・・・1/n!+・・・ 無限級数の打ち切りは1/n!<0.0000001とする Bxの平方根を求める 条件:xには実数値を入れる。a=0、b=cとしてc=(a+b)/2を計算する cの二乗<xならa=c、そうでなければb=cとして計算を繰り返す b-aの値が0.0000001以下になったら計算を打ち切り、cの値を表示
>>220 常連さんになるなら
>>1 のテンプレに沿って書き直してくれ
とくにC/C++の違いとか、よく混乱がおきてんだ
222 :
デフォルトの名無しさん :2009/07/19(日) 13:53:47
223 :
デフォルトの名無しさん :2009/07/19(日) 13:59:26
224 :
デフォルトの名無しさん :2009/07/19(日) 14:15:54
[1] 授業単元:情報理論 [2] 問題文(含コード&リンク): 生起確率リストのファイルlist.txtの情報源に対するハフマン符号を求めなさい。 簡単なアルゴリズムも記載するように。 list.txtは手元に無いのですが、適当な小数が列挙されているモノです。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 09年07月20日 [5] その他の制限:特にありません。 宜しくお願いします。
授業の課題じゃないんですがよろしくお願いします。 [2] 5=1+1+1+1+1 5=1+1+1+2 5=1+1+2+1 5=1+2+1+1 5=2+1+1+1 5=1+1+3 5=1+3+1 5=3+1+1 5=1+4 5=4+1 5=3+2 5=2+3 というように入力された整数xをこのように分解して 表示するプログラムを作ってください。 ただし、 5=3+2 5=2+3 は別々のものとして扱ってください。 表示する順番は問いません。 [3] 環境 [3.1] OS: Windows Xp [3.2] CPad for Borland C++Compiler [3.3] C言語 [4] 期限: [無期限]
>>225 #include<stdio.h>
#include<stdlib.h>
int disp_whole_pattern(int pattern[], int pattern_num, int n){
int i, sum=0;
if(n<=0){
for(i=0;i<pattern_num;i++) sum+=pattern[i];
printf("%d=", sum);
for(i=0;i<pattern_num-1;i++) printf("%d+", pattern[i]);
printf("%d\n", pattern[i]);
return 0;
}
for(i=1;i<=n;i++){
pattern[pattern_num]=i;
disp_whole_pattern(pattern, pattern_num+1, n-i);
}
return 1;
}
int main(void){
int x=5, *pattern;
scanf("%d", &x);
pattern=malloc(sizeof(int)*x);
if(pattern==NULL) return 1;
disp_whole_pattern(pattern, 0, x);
free(pattern);
return 0;
}
#include <stdio.h> #include <stdlib.h> void foo(int *a, int n) { int i, j, *b; for(i = 0; i < n; ++i) printf("%d%c", a[i], i==n-1?'\n':'+'); for(i = 0; i < n-1; ++i) { b = malloc(sizeof(int)*n-1); for(j = 0; j < i; ++j) b[j] = a[j]; b[i] = a[i] + a[i+1]; for(j = i+1; j < n-1; ++j) b[j] = a[j+1]; foo(b, n-1); free(b); } } int main(void) { int a[5] = {1, 1, 1, 1, 1}; foo(a, 5); return 0; } 重複が消せない(;ω;)
228 :
デフォルトの名無しさん :2009/07/19(日) 16:56:03
>>224 小数って実数のことじゃなくて、「小さな整数」の意味でいいのかな
>>230 実数と考えて頂いて問題ないです
紛らわしくてごめんなさい
232 :
デフォルトの名無しさん :2009/07/19(日) 20:26:16
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): fopenと fclose ライブラリ関数を使って、 C言語でファイルをコピーするプログラムを作成せよ。 ただしカレントディレクトリを表示せよ [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 09年07月20日 [5] その他の制限:特にありません。
233 :
デフォルトの名無しさん :2009/07/19(日) 20:37:29
>>210 その解釈でも大丈夫だと思いますが、プログラムの例の部分から察するに
プッシュするごとに格納されたデータを表示するんじゃないでしょうか?
あと、
>>210 さんのプログラムは終了させた場合のみ全データをポップ&表示
していますが、多分プッシュと同様ポップもメニュー?に入れて、
ポップするごとに全データを表示して、プッシュポップの関係を
分かりやすくするというプログラムなんじゃないでしょうか?
長々とすみませんでした。
[1] 授業単元:情報工学実験(ヒューマンインタフェース)
[2] 問題文(含コード&リンク):
画面中央にウィンドウを重ねて2つ表示し、
前面をウィンドウ1、後面をウィンドウ2とする。
後ろ側のウィンドウ2を、頭部移動データに合わせて移動させ、
人間の頭の動きをウィンドウ2にトラッキングさせる。
実験環境は机の上にディスプレイが人間の正面に静置されている。
座標原点はディスプレイが置かれている机の、人間から見て右上の角とする。
そこからディスプレイ側をx軸正方向、被験者手前側をy軸正方向、地軸正方向(上向き)をz軸正方向とする。
頭部初期位置x1,y2,z3,は事前に与えられるので、移動距離はセンサデータから与えられる座標との差分によって求められる。
センサデータx,y,zは以下のように与えられる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9795.txt 上記に基づき、頭部初期位置のセンサデータがx1=67.11,y1=88.95,z1=24.64として
与えられた時、ウィンドウ2が頭部をトラッキングするようなプログラムを完成させよ。
ウィンドウ1は動かず、常にウィンドウ2の前面にあるものとする。
注:トラッキングはユーザー頭部の上下左右方向のみなので、トラッキングにy軸のセンサデータは用いない。
センサデータの単位はcmなのでichに変換する必要があり、
使用する17インチディスプレイの解像度は72dpiであることから
ウィンドウのディスプレイ上での移動ピクセル数を算出することができる。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:Visual Studio 2008
[3.3] 言語: C,Win32API
[4] 期限: 7月22日正午
[5] その他の制限:特にありません。
長文で申し訳ありません。よろしくお願い申し上げます。
235 :
デフォルトの名無しさん :2009/07/19(日) 21:03:00
[1] 授業単元:プログラミング論
[2] 問題文:入力ストリームから読み込んだデータ文字列を、
データベースに格納する前にキューに一時的に格納するプログラムを
作成する。このとき、データをまとめたデータ文字列を一つずつ、キューへ
エンキューしたり、デキューしたりする過程が分かるプログラムを作成する。
なお、キューを実現するライブラリは、キューのための別のヘッダにまとめる。
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名:CPad for Borland C++Compiler
[3.3] 言語:C
[4] 期限: 2009年7月21日
[そのほか]
・入力ストリームから読み込んだデータ文字列を、キューにエンキューしたり、
デキューしたりするたびにデータベースに格納された全データを表示する。
・構造体オブジェクトは動的な記憶域に生成する。
・生徒の名前、試験の点数を構造体オブジェクトに格納することとする。
・関数の処理にコメントをつけて、キューをどのように実現しているか、
そのプログラムの処理内容が分かるようにする。
[このプログラムの流れ]
(1)ファイルやキーボードなどの入力ストリームから
データをデータ文字列として読み込む
(2)このデータ文字列をキューに一時的に蓄える
(3)キューからデータ文字列を取り出す
(4)このデータ文字列からそれぞれデータを取り出して
文字列や数値データに変換する
(5)変換したデータをデータベース(構造体の配列など)に格納してまとめて管理する
(6)このデータベースからデータを参照し、ディスプレイに出力する
[生徒、点数データ]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9797.txt [参考プログラム]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9798.txt
>>171 のクライアントがハンドル名@マシン名をサーバに送って、そのメッセージを
サーバ側であるバッファに格納する部分はどう書けばいいんでしょうか?
クライアントのどの部分でサーバにWriteLineで送るのかと
サーバ側がいつ送られてきたメッセージを受信するのかが分かりません
デバッグエラーが出てしまいます。原因は何でしょうか。お願いします。ちなみに問題は以下です 配列を使って10個のデータを関数に渡します. 下記の平均を返す関数 ave1() を main 関数から呼び出し平均を求めなさい. なお,main 関数では 配列に10個の値を代入し,ave1() を呼び出し,その結果を表示します. #define NUM 10 double ave1( int dd[NUM] ){ int i, sum; for(sum=0, i=0;i<NUM;i++){ sum += dd[i]; } return (sum/(double)NUM); }
239 :
デフォルトの名無しさん :2009/07/19(日) 23:54:43
#include<iostream> using namespace std; int main(){ int i,j; for(i=1;i<=2;i++){ for(j=1;j<=3;j++){ cout << i << "X" << j << "は" << i * j<< "です\n"; } } } } 結果 1×1は1です 1×2は2です 1×3は3です 2×1は2です 2×2は4です 2×3は6です これを参考にして、完全な九九を表示するプログラムを作成せよ 上にあった書き方を参考にして、以下のように出力できるプログラムを作成せよ 5を書きました 6を書きました … 12を書きました 13を書きました 誰かこれ教えてくれませんか
配列の中身を0にしてその内容を表示する関数 void hairetsu_zero01(int x[10]) を作成しなさい. 関数の中で受け取った配列の中身をすべて 0 に書き換え,内容を表示して確認しなさい. main 関数での処理は次の通りです. まず,配列を宣言し 0〜9 を代入しなさい. 次に,内容の確認のため main 関数で配列の内容を表示しなさい. 最後に,hairetsu_zero() を呼び出し,実行後の配列の内容を表示しなさい. さらに余力があれば,別で配列 y[5] を作成し,1..5 で初期化し, hairetsu_zero(y) を実行しなさい.
241 :
239 :2009/07/19(日) 23:56:16
1問忘れてしまいました 100を書きました 99を書きました … 88を書きました 87を書きました 上にあった書き方を参考にして、以下のように出力できるプログラムを作成せよ
質問テンプレ使いやがれー
243 :
デフォルトの名無しさん :2009/07/20(月) 00:21:04
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):入力ファイルの各行を単方向連結リストの最後に順次追加し,そのリストの内容を先頭から順に標準出力に
出力するプログラム extra6 を作成せよ.ソースファイルの名前は extra6.c とし,単方向連結リストの最後に1行分の文字列データを
追加する関数を append_data,リストの内容を先頭から順に標準出力に出力する関数を print_list として,これら2つの関数を含む
こと.また,リストの各要素は,以下の構造体を用いて表現するものとする.
struct line {
char *data;
struct line *next;
};
なお,入力ファイル名はコマンドライン引数で指定するものとし,入力ファイルがオープンできなかった場合の処理も含めること.
また,プログラム自身を除く引数の数が0個,もしくは2個以上の場合は,何もせず適切なメッセージを出力して終了するものとする.
入力データ:
http://pai.no.land.to/up/src/dgz13030.txt [3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: VS2008
[3.3] 言語: C
[4] 期限:2009年7月21日10時まで
[5] その他の制限: 特になし
長文すいません。リストの最後に順次追加する部分が特にわかりません。
よろしくお願いしますm(_ _)m
244 :
234 :2009/07/20(月) 01:23:22
>>234 です
問題文そのままだけでは講義中の説明がないとわかりづらいと感じた部分の補足です
・センサーはユーザーの頭部についていて、原点(机の右上角)からの距離を取っています
・頭部初期位置とはユーザーが目の前のディスプレイの画面中心を静視したときの頭部の座標です。
・頭部をトラッキングという表現というよりは頭部の動きを実際にトレースする
と言い換えた方が題意がつかみやすいと言われました。
またその他の制限に描くべきだったと思うのですが、
ウィンドウでの実現が困難な場合、長方形の描画などで実現してもよい
との回答が教官からありました。
文意が伝わらない部分が多く大変失礼いたしました。
引き続きよろしくお願いいたします。
245 :
234 :2009/07/20(月) 01:28:31
>>244 ×・センサーはユーザーの頭部についていて、原点(机の右上角)からの距離を取っています
○・センサーはユーザーの頭部についていて、机の右上角を原点とした3次元座標を取っています
(ディスプレイ側をx軸正方向、被験者手前側をy軸正方向、地軸正方向(上向き)をz軸正方向)
正確にはこのようになります。度々本当に申し訳ございません。
>>239 >>241 礼はいらん、テンプレ
>>1 #include<iostream>
using namespace std;
int main(){
int i,j;
for(i=5;i<=13;i++){
cout << i << "を書きました\n";
}
cout<<endl;
for(i=100;i>=87;i--){
cout << i << "を書きました\n";
}
cout<<endl;
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
cout << i << "*" << j << "=" ;
cout.width(2);
cout <<i * j<< " ";
}
cout << "\n";
}
}
>>238 良く出来たプログラムだ。
/*
#include <iostream>
using namespace std;
*/
#include <stdio.h>
#define NUM 10
double ave1( int dd[NUM] ){
int i, sum;
for(sum=0, i=0; i<NUM; i++){
sum += dd[i];
}
return (sum/(double)NUM);
}
int main(void){
int a[NUM]={10,9,8,7,6,5,4,3,2,1};
// cout<<ave1(a);
printf("%g",ave1(a));
}
>>240 パラメータで、もうひとつ、要素の個数は渡さないのか?
#include <stdio.h>
#define NUM 10
void hairetsu_zero01(int x[NUM]) {
int i;
for(i=0; i<NUM; i++) x[i] = 0;
}
int main() {
int i;
int x[NUM] = { 9,8,7,6,5,4,3,2,1,0};
int y[5] = {4,3,2,1,0};
int z[5] = {4,3,2,1,0};
puts("x=");
for(i=0; i<NUM; i++) printf("%d ", x[i]); puts("");
hairetsu_zero01(x);
for(i=0; i<NUM; i++) printf("%d ", x[i]); puts("");
puts("z=");
for(i=0; i<5; i++) printf("%d ", y[i]); puts("");
puts("y=");
for(i=0; i<5; i++) printf("%d ", y[i]); puts("");
hairetsu_zero01(y);
for(i=0; i<5; i++) printf("%d ", y[i]); puts("");
puts("z=");
for(i=0; i<5; i++) printf("%d ", y[i]); puts("");
}
249 :
デフォルトの名無しさん :2009/07/20(月) 04:59:59
[1] 授業単元:計算機言語TA [2] 問題文(含コード&リンク) 台形の面積を求める関数を作成し、この関数を用いて台形の面積を求め画面に表示する。 ただし作成する関数は引数はないが戻り値がある関数であること。 なお上底、下底、高さはキーボードから入力する。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2009年07月21日AM1:00まで [5] その他の制限 特になし。出来ればわかりやすいもので。 お願いします。
>>249 #include <stdio.h>
double daikei(void){
double joutei,katei,takasa;
printf("input joutei : "); scanf("%lf",&joutei);
printf("input katei : "); scanf("%lf",&katei );
printf("input takasa : "); scanf("%lf",&takasa);
return (joutei+katei) * takasa * 0.5;
}
int main(void){
printf("ans : %lf\n",daikei());
return 0;
}
>>232 >ただしカレントディレクトリを表示せよ が分かりません。
カレントディレクトリのパスを表示するのか、ディレクトリ内容を一覧で表示するのか。
入力ファイル名と出力ファイル名はコマンドで指定するのか、プロンプトで入力するのか。
カレントディレクトリは先に表示するのか、後で表示するのか、何のために表示するのか。
253 :
デフォルトの名無しさん :2009/07/20(月) 11:13:39
[1] 授業単元 数値解析 [2] 問題文(含コード&リンク) 以下の非線形方程式の数値解を求めよ。 (P) 1/x=tan x ただし、(P)の数値解は次のように定義されるものである。 xが(P)の数値解 ⇒ |1/x-tan x|<1*10^-11 実際にC言語で数値解析を実行するプログラムを作成せよ。 実行結果は、求めた数値解および反復計算の過程がわかるように表示すること。 [3] 環境 [3.1] OS Windows Vista [3.2] コンパイラ名とバージョン Visual Studio 2008 [3.3] 言語 C++ [4] 期限 2009年07月25日まで [5] その他の制限 2分法、はさみうち法、NR法以外の解法も実践すること。 とりあえず2分法、はさみうち法、NR法のどれかを使用したものと それ以外の方法を使用したもの 両方を書いてくれるとありがたいです。 お願いします。
256 :
デフォルトの名無しさん :2009/07/20(月) 15:20:27
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
ファイルの1行目に2行目以降の各行に含まれる文字列の数が記述され,2行目以降はその数の不定長文字列が空白で区切られているような入力
ファイルを読み込み,各行を以下に示す構造体の単方向連結リストに保存するプログラムを作成せよ.ここでは,attributes が1行分のデータ
を保持する.
struct t_list {
char **attributes;
struct t_list *next;
};
またにはソースファイルには,生成した単方向連結リストの内容を標準出力に出力する関数 print_tlist を含むものとしprint_tlist により各行
に含まれる文字列を出力するものとする.動作確認には,以下のテキストを用いよ.なお,入力ファイル名はコマンドライン
引数で指定するものとし,入力ファイルがオープンできなかった場合の処理も含めること.また,プログラム自身を除く引数の数が0個,
もしくは2個以上の場合は,何もせず適切なメッセージを出力して終了するものとする.
入力ファイル:
http://www.uploda.tv/v/uptv0033032.txt [3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語: C
[4] 期限: 7/21
[5] その他の制限:問題文の指定された通りにお願いします
258 :
デフォルトの名無しさん :2009/07/20(月) 17:14:07
>>246 ありがとうございます。
100を書きました
99を書きました
…
88を書きました
87を書きました って問題と
5を書きました
6を書きました
…
12を書きました
13を書きましたって問題が別の問題なんですが、
>>246 で書いてみたいに一緒に書いてしまってはまずいですよね?
261 :
デフォルトの名無しさん :2009/07/20(月) 18:56:36
、
>>259 ごめんなさい。まだいますか。そうじゃなくて、問題がべつの問題だから分けないといけないかなと思って
>>239 // 問1
int i;
for(i=5;i<=13;i++){
cout << i << "を書きました\n";
}
// 問2
int i;
for(i=100;i>=87;i--){
cout << i << "を書きました\n";
}
// 問3
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
cout << i << "*" << j << "=" ;
cout.width(2);
cout <<i * j<< " ";
}
cout << "\n";
}
// C++共通テンプレート
#include <iostream>
using namespace std;
int main(void) {
// 問題の解答をここに流し込む。
return 0;
}
>>254 課題1
#include <stdio.h>
#include <string.h>
struct stationery {
char name[100];
int cost;
int price;
};
int main(void) {
struct stationery pencil = {"HB pencil", 25, 50};
struct stationery eraser;
struct stationery copy[2];
int i;
printf("消しゴムの名前?:");
scanf("%s", eraser.name);
strcpy(eraser.name, "Plastic-eraser");
printf("仕入価格 販売価格?:");
scanf("%d %d", &eraser.cost, &eraser.price);
putchar('\n');
strcpy(copy[0].name, pencil.name);
copy[0].cost = pencil.cost;
copy[0].price = pencil.price;
copy[1] = eraser;
for (i = 0; i < 2; i++) {
printf("コピー%dのデータ\n", i);
puts("商品名 仕入価格 販売価格");
printf("%-20s%10d%10d\n\n", copy[i].name, copy[i].cost, copy[i].price);
}
return 0;
}
>>254 課題2
#include <stdio.h>
struct stationery {
char name[100];
int cost;
int price;
};
int profit(struct stationery *a, int *b, int c) {
int i;
int sum = 0;
for (i = 0; i < c; i++) {
sum += ((a+i)->price - (a+i)->cost) * *(b+i);
}
return sum;
}
int main(void) {
struct stationery stat[3] = {
{"HB pencil", 25, 50},
{"Plastic Eraser", 30, 60},
{"A4 notebook", 50, 100}
};
int n[3] = {20, 30, 10};
printf("総利益 = %d円\n", profit(stat, n, 3));
return 0;
}
268 :
デフォルトの名無しさん :2009/07/20(月) 22:20:56
>>263 widchってwhichですか?
あと、問3が九九のやつのですよね?
269 :
デフォルトの名無しさん :2009/07/20(月) 22:40:32
>>263 すみません。
widchって何でしょうか
270 :
デフォルトの名無しさん :2009/07/20(月) 22:43:35
成績表示プログラムを作成せよ。処理する人数は40人であるとする。仕様は以下の通り 1番の成績を入力してください 85 1番は85点です 2番の点数を入力してください 100 2番は100点です … この問題は一部を以下にしめす for(i=『』; i <=『』;『』) { cout << i << "『』\n"; cin << n; cout << i << "『』" << n << "『』\n"; } ここでは、上のプログラムの一部を使い(更には『』に適当な文字を入れて)、上の仕様を満たすプログラムを作成せよ
ググレカス
272 :
270 :2009/07/20(月) 22:44:41
角度0〜90度、10度刻みのsin、cos、tan表を作成せよ。 #include<iostream> using namespace std; int main(){ int i,j; for(i=1;i<=2;i++){ for(j=1;j<=3;j++){ cout << i << "X" << j << "は" << i * j<< "です\n"; } } } } 上の例文を参考に これ分かる人いませんか?
最近質問者の質が悪すぎる
>>268 >>269 widchってなに?どこにそんな関数書いてあるよ?え?言ってみろ
問3が九九のやつかなんて実行すれば分かるだろ?え?面倒だ?視ね
>>270 >>272 お前同じ質問者か?
>>1 読んで市ね
1問100円、レポート3000円ぐらいで課題に答えるサービスやったら儲かるかな?
いいかげんC言語とC++を分けてくれ エスパー禁止にすべき 解答以外の発言は慎むようにしてね 質問者への質問はしても良い こういうのは掲示板を使って行うものではないと思っている
278 :
デフォルトの名無しさん :2009/07/21(火) 00:56:17
widchってなんですかワロタ
int main() じゃなくて int main(void) でも同じ。
>>270 #include <iostream>
using namespace std;
int main(void) {
int i, n;
for(i=1; i <=40; i++) {
// cout << i << "番の成績を入力してください\n";
// cin << n;
cout << i << "番の点数を入力してください\n";
cin >> n;
cout << i << "番は" << n << "点です\n";
}
}
>>272 #include <iostream>
#include <math.h>
using namespace std;
int main(void){
int i;
cout << fixed << " sin(0~90) cos(0~90) tan(0~90)\n";
for(i=0; i<=90; i+=10){
cout.width(2);
cout << i <<' '<< sin(M_PI*i/180) <<' '
<< cos(M_PI*i/180) <<' '<< tan(M_PI*i/180) <<'\n';
}
}
285 :
デフォルトの名無しさん :2009/07/21(火) 10:12:41
[1] ソフトウェア工学 [2] C++言語を使ってスタックを実現するクラスを定義し,その実行を確認するプログラム(main関数)を書く. クラス名はstackとする. 要素のデータの型はintとする. 格納できる要素の最大数は10とする. 公開されているインターフェースは下記のものとする. void push(int data); int pop(); 初期設定は,以下のいずれかにより行う. (1) クラスのコンストラクタ(constructor)の機能を用いる. (2) 初期設定用のインターフェース(init)を定義し,スタックを使用する前に,initを呼び出す. 機能確認のためのインターフェース(たとえばスタック内のデータを表示させる)を追加してもよい. 上記の仕様を満たさない(インターフェース名が上記と一致しない等)プログラムは評価の対象としない. #入出力はprintfを用いること. [3] 環境 [3.1] XP [3.2] Visual Studio 2008 [3.3] C++ [4] 7/22(明日です 期限ぎりぎりですいません。 [5]よくわからないので無しで。 よろしくお願いしますm(_ _"m)
286 :
デフォルトの名無しさん :2009/07/21(火) 10:18:11
[1] ソフトウェア工学
[2] (1) 継承
>>285 で作成したスタックを実現するクラスを継承し,スタックの先頭(最後にpushされたデータ)を返す操作(メンバ関数)を追加したクラスを定義せよ.新たに定義されたクラスの名称はstack2とする.
(2) 仮想クラスと多相性 cryという操作(メンバ関数)を持つクラスanimalを定義する.cryは仮想関数(virtual属性をもつ)とする.メンバ変数は不要.
以下のプログラムを用い,animalクラスを継承して,dogクラスとcatクラスを定義せよ.また実行させてその結果をみる.(報告は不要)
dogクラスで関数cryを実装し,文字列"bowwow"を表示させる.catクラスで関数cryを実装し,文字列"mew"を表示させる.
#include <stdio.h>
class animal{};
class cat {};
class dog {};
void main() {
animal *ap;
cat *cp;
dogs *dp;
cp = new cat();
dp = new dog;
ap = (animal *)cp;
ap->cry();
ap = (animal *)dp;
ap->cry();}
[3] 環境
[3.1] XP
[3.2] Visual Studio 2008
[3.3] C++
[4] 7/22(明日です
[5]よくわからないので無しで。
二個目です。これでラスです。
>>285 と繋がってます。よろしくお願いしますm(_ _"m)
287 :
デフォルトの名無しさん :2009/07/21(火) 10:26:49
C++ですが 入力した整数値の桁を数えるプログラムを作る 整数値を入力せよ 5659693 7桁です 問題を解くためのプログラムの一部を下に示す _____{ a=a/10; keta++; //またはketa=keta+1; }____ あと #include <iostream> using namespace std; return 0; の中に入れてください
>>287 礼はいらない
>>1 // 入力した整数値の桁を数える
#include <iostream>
using namespace std;
/**/
int main(void) {
int a, keta;
/**/
cout << "整数値を入力せよ\n"; cin >> a;
for(keta=0; a>0; )
/**/{
a = a/10;
keta++;
}
/**/
cout << keta << "桁です\n";
/**/
return 0;
}
>>286 動作は保障しない。
#include <stdio.h>
class animal{
public:
virtual void cry()=0;
};
class cat:public animal{
public:
void cry(){ printf("mew\n");}
};
class dog:public animal{
public:
void cry(){ printf("bowwow\n");}
};
void main() {
animal *ap;
cat *cp;
dog *dp;
cp = new cat();
dp = new dog;
ap = (animal *)cp;
ap->cry();
ap = (animal *)dp;
ap->cry();
delete cp;
delete dp;
}
291 :
デフォルトの名無しさん :2009/07/21(火) 11:39:18
[1] 授業単元:コンピュータリテラシー
[2] 問題文(含コード&リンク):問題文と参考は以下です
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9806.txt [3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:BCC Developer version 1.2.21
[3.3] 言語:C++
[4] 期限: 7月25日まで
[5] その他の制限: voidやcher?は使わないで下さい。主に平均の出し方が分からないのですが、/などだけを使って欲しいです。
今習っているのがif、for、while、関係演算子。義理演算子、配列付変数その中からお願いします。
お手数ですがよろしくお願い致しますor2
292 :
デフォルトの名無しさん :2009/07/21(火) 12:17:45
[1] 授業単元:プログラミングI [2] 問題文(含コード&リンク): typedef struct node *Tree; typedef struct node{ int data; Tree left_subtree; Tree right_subtree; }Node; 2分木の大きさ(節点の個数)を調べて返す関数 int size(Tree t)を定義せよ [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 7/22まで [5] その他の制限:とくになし よろしくお願いします
>>291 成績なら降順で、番号なら昇順ということは無いのか。
295 :
デフォルトの名無しさん :2009/07/21(火) 13:07:55
>>293 さんありがとうございます。ただ、自分のパソコンでは学校指定のプログラムが入っていないので、明日学校で確認します。
>>294 さん 特にないです。並び替えさえできればそれで大丈夫です。よろしくお願いします。
296 :
デフォルトの名無しさん :2009/07/21(火) 13:36:53
>>292 int size(Tree t){
if(t==NULL) return 0;
return size(t->left_subtree)+size(t->right_subtree)+1;
}
297 :
デフォルトの名無しさん :2009/07/21(火) 13:37:51
[1] 授業単元: 数値解析プログラミング [2] 問題文(含コード&リンク): ∫₀¹ 1/1+x²dx の積分を 方形公式、台形公式、シンプソン公式を 用いて数値計算するプログラムを作成せよ [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 7月24日(金)まで [5] その他の制限: 分割数を10の時と50の時のプログラムを作成する よろしくお願いします
298 :
デフォルトの名無しさん :2009/07/21(火) 13:48:29
299 :
デフォルトの名無しさん :2009/07/21(火) 14:33:29
300 :
デフォルトの名無しさん :2009/07/21(火) 16:21:15
[1] 授業単元:プログラミング基礎 [2] 繰り返しをwhileもしくはdo〜while文を使って作成しなさい。 任意の数字を入力し、その数字分まで1つずつ加算して表示する。 入力した数字までいったら逆に1になるまで表示する。 例 8 * ** *** **** ***** ****** ******* ******** ******* ****** ***** **** *** ** * [3] 環境 [3.1] WindowsXP [3.2] gcc [3.3] C [4] 期限:2009年7月23日(木)まで [5]数字は8でお願いします よろしくお願いしますm(_ _)m
302 :
167 :2009/07/21(火) 17:15:51
303 :
デフォルトの名無しさん :2009/07/21(火) 17:17:25
[1] 授業単元:
インタラクティブッコミュニケーション
[2] 問題文(含コード&リンク):
外部変数を使用せずに、main()から関数を呼び出し、円をドルとユーロに換算
し、main()内のprintf()で結果を出力するプログラムを作成せよ。
但し、1ドル = 118円, 1ユーロ = 160円とする。また、プログラムは負の値が入
力されるまで繰り返されるものとする。
ttp://www.ncc- 1701.jp/kakei/InteractiveComm/Class10/InteractiveComm_10.html
の一番下の演習。
最終的にはこの形に
ttp://www.ncc- 1701.jp/kakei/InteractiveComm/Class10/exercise10.gif
[3] 環境
[3.1] OS: Windows XP
[3.2] MicroSoft Visual Studio 2005
[3.3] 言語: C
[4] 期限: 2009年7月27日
[5] その他の制限:
問題文のページにもあるようにポインタとアドレスを使用してください。
締切日はまだ先ですが、出来るだけ早いほうが嬉しいです。
304 :
デフォルトの名無しさん :2009/07/21(火) 17:29:57
305 :
デフォルトの名無しさん :2009/07/21(火) 17:30:40
文字コードとかC言語とかよく分からないのでスレ違いかもしれませんが質問させて下さい 文の格納に必要なバイト数をJISコードの場合とシフトJISコードの場合のそれぞれで計算する問題なのですが、これはどうやって考えれば良いのですか? 漢字、カタカナ、英数字(半角)、記号で構成されている文です 曖昧な質問で申し訳ないのですが、ここでは課題の文を晒せないので、よろしくお願いします><
>>304 C言語ではブロック内の変数宣言は最初の実行文の前に置かないとエラーになる
つまり次のように入れ替える
isset[idx] = 1;
const double theta = M_PI / num;
↓
const double theta = M_PI / num;
isset[idx] = 1;
あとVC++の場合、
>>306 のようにM_PIが定義されてないといわれるかもしれない。
そのときはmath.hをインクルードする前に、次のマクロ定義を書いておく
#define _USE_MATH_DEFINES /* ←これを書く */
#include <math.h>
>>303 #include <stdio.h>
void conversion(float yen, float *doller, float *euro)
{
static const float MONEY_DOLLER = 109;
static const float MONEY_EURO = 139;
*doller = yen/MONEY_DOLLER;
*euro = yen/MONEY_EURO;
}
int main(int argc, char *argv[])
{
float yen, doller, euro;
yen = doller = euro = 0;
printf("プログラムを終了する場合は負の値(少数型)を入力してください\n");
while(1)
{
printf("換算金額を少数型で入力してください。");
scanf("%f", ¥);
if(yen < 0) break;
conversion(yen, &doller, &euro);
printf("%.2f円は\t%.2fドル\t%.2fユーロです。\n", yen, doller, euro);
}
}
>>302 ヒントのプログラムを修正
void main(void)
{
double x, y;
fp=fopen("star.csv","w");
//NULLの場合の処理省略
for (y = -10; y <= 10; y += 1.0) {
for (x = 0; x < 40; x += 2.0+0.3*abs(y)) {
draw_star(4+abs(y), 0.5, x, y);
}
}
fclose(fp);
}
311 :
デフォルトの名無しさん :2009/07/21(火) 18:08:35
>>309 おれには、「少数型」って書く勇気がなかった・・・
>>311 いいつっこみありがとう。
#include <stdio.h>
void conversion(float m_yen, float *m_doller, float *m_euro)
{
static const float MONEY_DOLLER = 109;
static const float MONEY_EURO = 139;
*m_doller = m_yen/MONEY_DOLLER;
*m_euro = m_yen/MONEY_EURO;
}
int main(int argc, char *argv[])
{
float m_yen, m_doller, m_euro;
m_yen = m_doller = m_euro = 0;
printf("プログラムを終了する場合は負の値(少数型)を入力してください\n");
while(1)
{
printf("換算金額を少数型で入力してください。");
scanf("%f", &m_yen);
if(m_yen < 0) break;
conversion(m_yen, &m_doller, &m_euro);
printf("%.2f円は\t%.2fドル\t%.2fユーロです。\n", m_yen, m_doller, m_euro);
}
}
>>307 間違った誘導するな。課題だと書いてあるのだからこのスレで処理しろよ。
309だが、scanfが変になってたな。すまぬ。
>>312 修正thx
315 :
234 :2009/07/21(火) 18:48:57
申し訳ありませんが、どなたか
>>234 をお願いします。
>>244 で補足させていただきました通り、
教官の話では、ウィンドウの移動でなくても
長方形を描画してデータのに合わせて移動させていく形でもよいそうです
また、ウィンドウ2の動きだけの実現でもよいそうなのでよろしくお願いします
[1] 授業単元:ゲーム製作1 [2] 問題文(含コード&リンク): ※ [3] 環境 [3.2] コンパイラ名とバージョン:MicroSoft Visual Studio 2005 [3.3] 言語:C++ [4] 期限:2009年7月24日 [5] その他の制限:※ ※バレが怖いのでメールにてやり取りさせていただけないでしょうか・・・。 もしそれでもいいという方がいらっしゃれば antispammailaddress49 @ yahoo.co.jpまでメール下さい、お願いします。 ゲーム製作ですが、単純な内容だと思います。
メールでやり取りしても公開されたら意味ないぞ。 通報もされるかも
まあ良心に任せるしかないっしょ 通報ってどこにだよw
319 :
デフォルトの名無しさん :2009/07/21(火) 22:05:37
別にばれても良いじゃん ちょっと変えてシラきったら証拠ないんだからむこうだって泣き寝入りだよ 教授にプロバイダにアクセスログ聞きだせる権限でもあるなら別だけどな
322 :
316 :2009/07/21(火) 23:10:13
頼んでいる身なので全く文句を言える立場ではありませんが なるべく秘密裏にしていただけると嬉しいです
>>321 プログラムの中身を解説することを求められたら‥‥‥。
[1] 授業単元:コンピュータ入門U [2] 問題文(含コード&リンク): 年月日を表現する構造体を作成し,この構造体を使って, 現在の年月日の前の日と次の日をセットする関数を作成せよ. ※この課題では struct tm は使わず、新たに構造体を作ること。また、閏年 等もきちんと判別させること。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 3.4のはず [3.3] 言語:c [4] 期限:[2009年07月28日23:59まで] [5] その他の制限:特にないです、どなたかよろしくお願いします。
327 :
sage :2009/07/21(火) 23:58:19
こういう穴抜きの課題って何の意味も無いよなw
329 :
デフォルトの名無しさん :2009/07/22(水) 00:06:29
>>321 シラを切れるほど変更できないでしょ。
鶏の唐揚げにレモン汁かけて「これは鶏の唐揚げじゃないですから!」って言い張ってるようなもんで
聞いてる先生の方が恥ずかしくなるレベルなんじゃないの?
331 :
デフォルトの名無しさん :2009/07/22(水) 00:40:21
>>330 何を今更って感じだけどなw
まあでもバレ気にするならメールはアリだと思うけど俺は
334 :
デフォルトの名無しさん :2009/07/22(水) 00:49:58
[1] 授業単元:プログラミング言語c
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9755.txt 上のプログラムがなぜ図のような座標列を生成したのかを説明せよ
図;
http://g.pic.to/17jcdy ヒント1;関数draw_polygon()中のif(r>xxx)において、数値xxxをいろいろと変えること
数値xxxを大きくしていくと図が徐々に単純になっていく、単純な図から考えを進めること
ヒント2;自分がパソコンになったつもりでプログラムを順に追っていくこと。
その際呼び出した側のdraw_polygon()と呼び出された側のdraw_polygon()を区別して考えること
(前者と後者のローカル変数の区別をわすれないこと)
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: (C
[4] 期限: ([09年07月22日11:30まで]
[5] その他の制限: 一つ一つのプログラムの意味を詳しく教えてください。
お願いします
俺だけじゃなかったか
遅レスですまそ
>>308 >>304 が載せたソース書いた
>>212 だけど、
関数化してたのをすっきりさせたときにコピペ順序ミスった
しかもgccで確認してたから気付かなかった。フォローthx
M_PI の定義については VC++ だけでバージョン示されてなかったから
M_PI が math.h インクルードで使えない6.0以前を無視して敢えてそんな風に書いてみた
>>212 で defineとか使ってごちゃごちゃ とか言ったのはそこらへんも書いてた
なんか糞レスでごめん
338 :
234 :2009/07/22(水) 01:42:49
>>326 様
ありがとうございます!
自宅に環境がないので、学校が開き次第動作確認して報告いたします。
プログラム提出後のレポートのため、
こちらはプログラムの締め切り期限後でも構いませんので、
関数MyRegisterClassEx、InitInstance、WINAPI _tWinMainの
役割と全体の流れを簡単に教えていただけないでしょうか。
お手数をお掛けして申し訳ございませんが、
何卒よろしくお願い申し上げます。
341 :
デフォルトの名無しさん :2009/07/22(水) 10:02:51
[1] 授業単元:プログラミング論
[2] 問題文:入力ストリームから読み込んだデータ文字列を、
データベースに格納する前にキューに一時的に格納するプログラムを
作成する。このとき、データをまとめたデータ文字列を一つずつ、キューへ
エンキューしたり、デキューしたりする過程が分かるプログラムを作成する。
なお、キューを実現するライブラリは、キューのための別のヘッダにまとめる。
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名:CPad for Borland C++Compiler
[3.3] 言語:C
[4] 期限: 2009年7月21日
[そのほか]
・入力ストリームから読み込んだデータ文字列を、キューにエンキューしたり、
デキューしたりするたびにデータベースに格納された全データを表示する。
・構造体オブジェクトは動的な記憶域に生成する。
・生徒の名前、試験の点数を構造体オブジェクトに格納することとする。
・関数の処理にコメントをつけて、キューをどのように実現しているか、
そのプログラムの処理内容が分かるようにする。
[このプログラムの流れ]
(1)ファイルやキーボードなどの入力ストリームから
データをデータ文字列として読み込む
(2)このデータ文字列をキューに一時的に蓄える
(3)キューからデータ文字列を取り出す
(4)このデータ文字列からそれぞれデータを取り出して
文字列や数値データに変換する
(5)変換したデータをデータベース(構造体の配列など)に格納してまとめて管理する
(6)このデータベースからデータを参照し、ディスプレイに出力する
[生徒、点数データ]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9797.txt [参考プログラム]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9798.txt お願いします
342 :
デフォルトの名無しさん :2009/07/22(水) 11:17:28
>>342 とりあえず2分法
#include <stdio.h>
#include <math.h>
#define E 1.0e-11
double f(double x) { return 1 / x - tan(x); }
int main(void)
{
double x0 = 0.5, x1 = 1.5, m;
int i = 0;
do {
printf("%4d: f(%f) = %f, f(%f) = %f\n", ++i, x0, f(x0), x1, f(x1));
m = (x0 + x1) / 2;
if (f(x0) * f(m) >= 0) x0 = m;
else if (f(x1) * f(m) >= 0) x1 = m;
} while (fabs(f(x0) - f(x1)) > E);
printf("ans: %20.16f\n", x0);
return 0;
}
344 :
316 :2009/07/22(水) 12:55:33
どなたか本当にお願いします、メールください
345 :
234 :2009/07/22(水) 13:19:28
>>326 様
VisualStudio2005で動作確認を行ったのですが、
エラーは出ないものの、実行の様子が確認できませんでした
どなたかVisualStudioで動作確認できた方いらっしゃいますでしょうか?
>>339 リンク先で関数の説明を読んでみます
誠にありがとうございました
メールだろうが掲示板だろうが、他人に聞いたら その段階でその情報は公開されたと考えて欲しい。 とまでは言わないが、いかに質問内容を工夫して 不要な(回答者や他人に迷惑をかけかねない)情報を 漏らさないように質問することも勉強のうちじゃない か? まぁ大抵は漏らしてもなんともない内容のものである ことが殆どなんだけどね。
>>344 ここにいる連中はお前の家庭教師でもなんでもねーんだよボケ
お前みたいな屑は単位落としたほうがいい
>>344 メールは出したいんだが、おまえさんが変なヤツかどうかわからんからな。
変なヤツにからまれるのはイヤだ
>>348 変な奴ってことは既に分かってるじゃないか
どの程度粘着でキチってるかだけが焦点
なんでそんな叩いてるのか分からんのだがw バレが怖いからメールでっていうのは前のスレから希望あったし、 別に考え方は普通じゃん、変な奴か? 文章もおかしくないし
あとこれな >気に入らない質問やその他や発言はスルーの方向で。
前からメール希望だの金払うだのあったけど
>>1 で禁止しといた方がいいかもな
トラブルのもとだし
だいたいバレ怖いなら自分でやるのが普通だろ
>>316 >※バレが怖いのでメールにてやり取りさせていただけないでしょうか・・・。
>もしそれでもいいという方がいらっしゃれば
単純に「それでもいい」という方がいないだけと思います。自分も含めて。
>>346 の言うようになにかしらの工夫をしたほうが円滑に進むと思いますよ。
>>316 ここで待つより、信頼できる友人か先輩に頼む方が現実的
355 :
デフォルトの名無しさん :2009/07/22(水) 16:01:58
>>301 さん
ありがとうございます!
そうですね、whileもしくはdo〜whileと指定されてますので><
お手数お掛けしましたm(_ _)m
>>316 動作が保障できないからいやです〜。
間違いや仕様変更があったらそのたびにゴネラレルとほんとにやってられんからねぇ。
メールだとごねられる、の意味がわからんのだがww あれか、やっぱ社交能力ないヒキコモリばっかりなのかwwww
>>121 >>334 1.最初に、原点(0,0)を中心に、幅2高さ2の菱形を描く。
2.次に、最初に描いた菱形の4個の点を中心として、幅1高さ1の菱形を4個描く。
3.次に、2.で描いた4個の菱形の16個の点を中心として、幅1/2高さ1/2の菱形を16個描く。
4.次に、3.で描いた16個の菱形の64個の点を中心として、幅1/4高さ1/4の菱形を64個描く。
5.次に、4.で描いた64個の菱形の256個の点を中心として、幅1/8高さ1/8の菱形を256個描く。
1.での菱形の大きさを1とすると、5.では1/16=0.0625<0.1なので、ここまでで止める。
1.で描いた菱形は、半径1の円のそれぞれ0°90°180°270°360°を各点で結んだ正方形である。
確かに、メールとここでのやり取りにオープンかそうでないか以外の違いがないのに メールだと動作が保障できないとかキチガイじみたクズがいるみたいだな。 スルーもできないみたいだしwwww
メール使用の是非はともかく とりあえず荒れるってのはよく分かった。
>>357 >>359 特にメールだから、動作が保障できないとは書いてないが。俺いつも言ってるよ?
それに、そんな人を中傷するであればあんたらが受ければ万事解決だ。がんばってね。
>特にメールだから、動作が保障できないとは書いてないが。俺いつも言ってるよ? これどういう意味?
メールでやり取りした後ここで公開すれば万事解決
そういう根暗に当たらないようにしないとね
>>364 俺、解答するときはその一文を常につけてる。動作は保障しない。って。
見たことないかい?
自信ないなら質問者の迷惑だからROMってろ雑魚
>>359 メールでのやり取りは1:1
だから返事が遅くなれば催促される。
内容にミスがあっても結局自分しか治せないので同様に催促される。
暇人じゃねえとメールでのやり取りなんてめんどくさくてやってられんだろww
俺が思う嫌というのと
>>356 の言ってることは違うけど
叩くぐらいなら
>>359 お前がメールしてやれよw
>>368 君みたいなやつさ。メールだと性格変わるやつがいるからねぇ〜。
それと、2chで何いってんのさ。珠玉混合。わすれてないかな?
宿題の答と、身バレからの安全、 2つを同時に求めてもうまくいくわけないよ、ほら一石二鳥っていうじゃん!
>>372 うおー。こういうミスがあるからプログラムは恐ろしい。いや関係ないか。。。
指摘さんきゅー。
375 :
デフォルトの名無しさん :2009/07/22(水) 17:23:36
それは単純に君が哀れ無知君なだけです
IMEは玉石混淆とおっしゃっておられる
じゃあ細かい動作や返事が遅くなること対して文句言わなきゃやってくれるん?
>>377 そこまでして手を抜きたいのかなぁ。
テンプレ書けば解いてくれるといういわばシステムなわけだ、
それを度外視してまでやってもらいたいことってなんだろう??
細かい動作に目をつぶるなら、自分で解いても良いようなきがするが。
意図が読めないなぁ。
依頼人はスレを読まずに、メールを待っているんじゃないかな
>>379 そうなら、これ以上はやめとく。荒らし気味になってごめんね。
ぎょくせきこんこう だよ
[1] 授業単元:ゼミ [2] 問題文(含コード&リンク):テキストボックスから文字列を取得して文字数に応じて処理を振り分ける [3] 環境 [3.1] OS: WindowsXP [3.2] VC 6.0 [3.3] 言語:C [4] 期限: 出来れば本日中にお願いします [5] その他の制限: 特にないです。 JAVAだと分かるんですがCだと書き方が難しいです。 どなたかよろしくお願いいたします。
Cでそれやるの?
と、つっこんだものの、その処理ってJavaとかわんなくね? Javaで書いてみてよ
>>382 ・問題文は、出題されたまま全文を書いてください。
//文字数を取得する int len = this.textBox1.get_SelectionLength(); if(len == "文字数"){ //処理 }else if(len == "文字数"){ //処理 } JAVAだとこういう感じになると思うんですがいかがでしょうか?
そこだけでいいのかよ
>>385 グループで1つのシステムを作成することになったんです。
自分の担当がそこの部分ということで作業を振られました。
なので問題文というのがないんです。申し訳ありません。
システムというのが、人材管理システムを作っております。
IDを手打ちかリーダーかバーコード?で読み込んで
テキストボックスに表示する。
そこでテキストボックスの文字数に応じて処理を振り分けるということです。
言葉足らずですいませんでした。
で、Cだとどれが難しいの? 文字列長はstrlenその他で取得できるよ。
>>387 処理の内容に関しては自力で考えます。
大枠で急ぎで作れと言われたので頼らせていただきました。
>>390 開発環境ほんとにC言語でいいのか?
Cだとオブジェクトも何も使えないよ?
VC++でMFC使うとかじゃないの
>>389 恥ずかしながら右も左も分からない状況なんです。
ぐぐりながら探してるんですがなかなかいいサンプルがなくて困っています。
>>391 開発環境は使ってるツールのことですか?
開発ツールはVisual C++ 6.0というのを使っています。
[1] 授業単元:プログラミング及び演習 [2] 問題文(含コード&リンク):次に表示 [3] 環境 [3.1] OS: Mac [3.2] コンパイラ名とバージョン:Xcode [3.3] 言語: C [4] 期限: 今日中 [5] その他の制限: 2次元配列(int score[100][3];)を用いる お願いします
char *str; //テキストボックスの文字列を取得する // 例1 str = 〜; // 例2 strcpy(str, 〜); //文字数を取得する int len = strlen(str); if(len == "文字数"){ //処理 }else if(len == "文字数"){ //処理 } こんなん。大して変わらんよ
395 :
393 :2009/07/22(水) 19:59:56
最大100人の学生(学籍番号 No.001〜No.100)の3教科(数学・理科・英語)の点数を 2次元配列(int score[100][3];)を用いて処理するプログラムを作成せよ. ただし,以下の仕様を満たすこと. 1) 各学生の3教科の合計点と平均点(「平均」は英語で "mean")を求める. 2) 教科別の平均点と最高点と最低点を求める. 3) 各学生の合計点についてその平均点と最高点と最低点を求める. 4) 数値例は5人以上で確認すること. 例えば,以下のように表示されれば OK です. Number of students?: 5 <enter> Input 3 scores for No. 001 Math, Sci and Eng: 85 72 90 <Enter> Input 3 scores for No. 002 Math, Sci and Eng: 60 65 54 <Enter> Input 3 scores for No. 003 Math, Sci and Eng: 81 85 95 <Enter> Input 3 scores for No. 004 Math, Sci and Eng: 55 60 72 <Enter> Input 3 scores for No. 005 Math, Sci and Eng: 92 83 75 <Enter> No Math Sci Eng Total Mean ------------------------------------ 001 85 72 90 247 82.3 002 60 65 54 179 59.7 003 81 85 95 261 87.0 004 55 60 72 187 62.3 005 92 83 75 250 83.3 ------------------------------------ Mean 74.6 73.0 77.2 224.8 Max 92 85 95 261 Min 55 60 54 179
>>394 ありがとうございます。
検索するとポインタとか出てきて頭がこんがらがって苦労してたんです。
本当にありがとうございました。
>>395 ありがとうございます。ひとつかしこくなりました。
整数と文字列を比較するのには違和感があるw
便宜上のダブルクォーテーションでしょう
400 :
デフォルトの名無しさん :2009/07/22(水) 20:22:18
>>402 >=だったのか。よく見てなかったわ。
0回だね
404 :
234 :2009/07/22(水) 20:45:41
>>326 様
環境の違いだと思うのですが、
作成していただいたプログラムでは動く方のウィンドウ2しか表示されませんでした、
テキストを読み、2つのウィンドウでウィンドウハンドルやウィンドウプロシージャを別々に
定義するようになおしたところ、きちんと2つ表示させることができました
タイマー部分やセンタリングする関数などはそのまま使用させていただきました
大変助かりました、ありがとうございました!
405 :
234 :2009/07/22(水) 20:53:41
>>326 様
書き忘れの追記なのですが
ディスプレイの幅を取得する関数や、その使い方なども
そのまま使用させていただきました
また追加での不躾な質問にも丁寧に答えて下さりありがとうございました
連書き失礼しました
407 :
406 :2009/07/22(水) 21:15:44
408 :
デフォルトの名無しさん :2009/07/22(水) 21:17:25
[1] 授業単元 数値解析 [2] 問題文(含コード&リンク) 以下の非線形方程式の数値解を2分法、はさみうち法、NR法以外の解法で求めよ。 (P) 1/x=tan x ただし、(P)の数値解は次のように定義されるものである。 xが(P)の数値解 ⇒ |1/x-tan x|<1*10^-11 実際にC言語で数値解析を実行するプログラムを作成せよ。 実行結果は、求めた数値解および反復計算の過程がわかるように表示すること。 [3] 環境 [3.1] OS Windows Vista [3.2] コンパイラ名とバージョン Visual Studio 2008 [3.3] 言語 C++ [4] 期限 2009年07月25日まで [5] その他の制限 特になし 以前にも書きこんだんですが 答えをもらえなかったんで。 よろしくお願いします。
ま、MFCなんですけどね。ってなりそうに思うわ
>>406 ありがとうございます。
今はまだプログラムを読む力がありませんが解析して自分なりに処理を理解しようと思います。
412 :
デフォルトの名無しさん :2009/07/22(水) 22:06:49
>>410 2分法、はさみうち法、NR法以外の方法でやったやつも欲しいんです・・・
も、じゃなくて、が、のいい間違いのような。
NR法ってニュートン・ラフソン法か 二分法、はさみうち法とこれ以外で精度の良い方法ってあったっけ?
415 :
デフォルトの名無しさん :2009/07/22(水) 22:34:47
>>291 です。
>>293 さんに教えてもらったのですが
int main() , if(i==50) break; , return 0; を習っていないので、一応自分のわかる範囲内でいじったのですがうまくいきません。
お手数ですが、void , char以外に上記を使わないでもう一度作っていただけますか?
よろしくお願いします。
まさかのmain()禁止令w
int main()→main() if(i==50) break;→消す return 0;→消す でおk
>>415 int main()→main()
return 0;→消去
if(i==50) break;→消去
でも行けるよ多分。
50個以上入力すると不思議なことが起こるかも知れんが。
419 :
デフォルトの名無しさん :2009/07/22(水) 22:44:23
int main() は大丈夫でないご様子。
421 :
デフォルトの名無しさん :2009/07/22(水) 22:47:02
>>408 x=0.86033358902
ソース
#include <stdio.h>
#include <math.h>
double f(double x){
return x*tan(x)-1.0;
}
int main(void){
double sol=0.0,step=1.0/16.0;
while( fabs(f(sol))>fabs(1.0E-11*sol)){
while( f(sol+step)<0.0 ) sol+=step;
step/=2.0;
}
printf("x=%12.11lf¥n",sol);
return 0;
}
>>408 ググったら「ブレント法」なるものがあったのでやってみた。
#include <stdio.h>
#include <math.h>
#define E 1.0e-11
double f(double x) { return 1 / x - tan(x); }
int main(void)
{
double x = 0.5, dx = 0.1, x1, zx;
int i;
do { zx = x; x = x + dx; } while (f(x) * f(zx) > 0);
i = 0;
do {
printf("%4d: x = %.16f, f(x) = %.16f\n", ++i, x, f(x));
x1 = x - f(x) / (f(x) - f(zx)) * (x - zx);
zx = x;
x = x1;
} while (fabs(f(x)) > E);
printf("ans: %20.16f\n", x);
return 0;
}
>>408 x=0.86033358902
ソース
#include <stdio.h>
#include <math.h>
double f(double x){
return x*tan(x)-1.0;
}
int main(void){
double sol=0.0,step=1.0/16.0;
while( fabs(f(sol))>fabs(1.0E-11*sol)){
while( f(sol+step)<0.0 ) sol+=step;
printf("途中経過:x=%12.11lf 1.0/x-tan(x)=%12.11lf¥n",sol, f(sol)/sol);
step/=2.0;
}
printf("x=%12.11lf¥n",sol);
return 0;
}
>>421 別におかしくないと思うが?
サンプリング周波数を信号周波数の20倍くらいにしないと
正弦波っぽく見えないけどね
427 :
デフォルトの名無しさん :2009/07/22(水) 23:46:41
429 :
デフォルトの名無しさん :2009/07/23(木) 00:03:19
>>428 ありがとうございます。とても助かりました。
>>421 値による
Input sin frequency(Hz): 1
Input sampling frequency(Hz): 10
play time(second): 2
431 :
デフォルトの名無しさん :2009/07/23(木) 01:22:41
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):下記 [3] 環境 [3.1] OS:WindowsVista SP1 [3.2] Visual stdio2008 [3.3] 言語:C [4] 期限:2009年7月23日午前7時まで [5] その他の制限:できるだけ簡単に 倍精度浮動小数点型変数で数値を入力し, 小数点以下を切り捨て・切り上げ・四捨五入するプログラムを作成せよ. ただし, 条件式は使用せず, 型変換を必ず使用すること.
>>431 #include <stdio.h>
int r(double x) { return ((int)(x * 10) % 10) / 5 + (int)x; }
int main(void)
{
double x;
printf("input >> ");
scanf("%lf", &x);
printf("x = %f\n", x);
printf("floor(x) = %d\n", r(x - 0.5));
printf("ciel(x) = %d\n", r(x + 0.5));
printf("r(x) = %d\n", r(x));
return 0;
}
433 :
デフォルトの名無しさん :2009/07/23(木) 02:15:11
[2]問題文 <入力ファイル> shinjuku hare|kumori yoyogi kumoei shibuya kumori yebisu hare|kumori oosaki ame 入力ファイルのスペースを区切り文字としてstrtokし、 1行に2つずつあるトークンを 以下に示す構造体の単方向連結リストに保存するプログラムを作成せよ ここでは,attributes が1行分のデータを保持する. struct t_list { char **attributes; struct t_list *next; }; また、生成した単方向連結リストの内容を標準出力に出力する 関数 print_tlist を含むものとする。 <実行例> shinjuku,hare|kumori yoyogi,kumoei shibuya,kumori yebisu,hare|kumori oosaki,ame 続きます。
434 :
433 :2009/07/23(木) 02:16:07
[3] 環境 [3.1] OS: vista [3.2] gcc [3.3] C [4] 期限:7月24日 まで(7月23日中にお願いします。) [5] その他の制限: 特にありません。 長くなってすいません。はっきりしない点があればお尋ね下さい。
ろだつかえ
436 :
433 :2009/07/23(木) 02:17:20
すいません、やり方がわかりませんでした。 書き直した方がいいですか?
いや、もう遅いからいいです。
>>428 宿題の仕様自体がヘン。ここでは4人だから、インデックス3とわかるが、
実務だとそうはいかない。237人目だったら、どうやってインデックス236を自覚するか?
441 :
デフォルトの名無しさん :2009/07/23(木) 03:43:35
>>425 >>430 ありがとう、double型で格納すれば確かに正弦波になるが実はshort型で格納しようとしたらまたもおかしなことになるんだが
どうなってるんでしょうか??
442 :
デフォルトの名無しさん :2009/07/23(木) 03:57:29
>>441 自己解決しました。
最初の宣言をshort型にして、格納するときもsizeof(short)にすれば出来ました。
ちなみに、最初の宣言をdoubleにしてて、格納するときにsizeof(short)でshort型に格納は何がだめなんでしょうか?
例えば
double sindouble;
short sinshort;
sindouble = am * sin(2*PI*fs*t/sample);
sinshort = sindouble;
fwrite(&sinshort,sizeof(short),1,fp);
簡素に書きましたが、上記のようにshort型の変数に一度格納すれば大丈夫なことは確認しましたが、double型を宣言を使わずにshortで格納することは出来ないものなのでしょうか?
443 :
デフォルトの名無しさん :2009/07/23(木) 04:03:32
>>442 何度も申し訳ない、最後の1文は、
最初にshort型の宣言を行わずにdouble型で格納することはできないのでしょうか?
という事です。
//sinshort = sindouble; この文章を消して
fwrite(&sindouble,sizeof(short),1,fp);
では何がいけないのか?という質問です。そういう仕様ですと言われればそうなのですが、では何故fwrite()関数の引数にsize指定があるのかという事です。
・double型でファイル出力する方法について fwrite(&sindouble, sizeof(double), 1, fp); ・なぜ引数でsizeを指定するのかについて はしょって書くと、構造体配列の各要素先頭数バイトをファイル出力したい場合に対応できるから
446 :
445 :2009/07/23(木) 04:31:48
そもそもfwriteの中でサイズを知ることができないから指定するほかない
447 :
デフォルトの名無しさん :2009/07/23(木) 05:15:23
<<443〜445 解りました、少し勘違いをしていたようです。fwriteは前から順にサイズ分で区切って書き込むだけで、double型のshortからあふれたバイト数を無視するということを、していないからということですね。 ありがとうございました。
[1] 授業単元:数値情報解析 [2] 問題文:ニュートン法により代数方程式を解くプログラムを作りなさい。 適当な初期値を自分で設定し、3つの真解すべてを求めなさい。 ただし、結果画面には(1)収束解(2)初期値(3)反復回数が表示されていること。 このとき、1回の実行で3つの真解すべてを求める必要はない。 初期値を与え直しながら実行した結果画面が3枚示されていればよいものとする。 ・ 解くべき代数方程式 : x^3 - 6x^2 + 7x +2 = 0 ・収束条件 : ε < 10^-10 ・微分は自分で計算した結果(3x^2 - 12x + 7 = 0)をソースファイルに 直接入力してよいものとする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:Visual Studio [3.3] 言語:C [4] 期限:2009年7月29日 [5]少しでも易しい表現にしていただくようよろしくお願い致します。 あと、ソースファイルに処理過程がわかり易いようにコメント文を加えて いただけるとありがたいです。
449 :
デフォルトの名無しさん :2009/07/23(木) 09:05:27
450 :
デフォルトの名無しさん :2009/07/23(木) 11:28:33
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 下に示す2 行3 列の行列a, b の差を求めて表示するプログラムを作成せよ. a = ( 6 3 4 5 1 2 ) b = ( 1 2 3 4 5 6 ) [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年07月27日 [5] その他の制限:
451 :
デフォルトの名無しさん :2009/07/23(木) 11:55:39
>>450 #include <stdio.h>
int main(){
int a[2][3]={{6,3,4},{5,1,2}};
int b[2][3]={{1,2,3},{4,5,6}};
printf("a-b=(\n");
printf("%2d %2d %2d\n",a[0][0]-b[0][0],a[0][1]-b[0][1],a[0][2]-b[0][2]);
printf("%2d %2d %2d\n",a[1][0]-b[1][0],a[1][1]-b[1][1],a[1][2]-b[1][2]);
printf(")\n");
return 0;
}
[1] 授業単元: プログラミングW [2] 問題文(含コード&リンク): オブジェクト指向を使ってなんでも良いのでプログラムを書け [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C++ [4] 期限: 7月24日まで [5] その他の制限: メソッドを5個以上使う 変数はpublicとprivateを使い分ける よろしくお願いします
>>452 なんでもいいってひでえなw
とりあえずプログラムのテーマつうか、なにかネタを言ってくれ
ワンとかニャーとか言う系のやつでいいんじゃないの?学生っぽくて
455 :
433 :2009/07/23(木) 15:33:35
[1] 授業単元 C++ [2] 問題文(含コード&リンク) テキストファイルの中のタブコードをそれぞれ、空白N個に置き換えて、 新たなファイルに書き出しなさい。ただし、N≧0とする。 コマンドパラメーター:入力ファイル名、出力ファイル名、N <解答例> Hello( )Bye←入力ファイル N=3の場合 Hello( )Bye←出力ファイル [3] 環境 [3.1] OS Windows Vista [3.2] コンパイラ名とバージョン Visual Studio 2008 [3.3] 言語 C++ [4] 期限 2009年07月24日午前10時まで [5] その他の制限 特になし 期限が迫ってますがよろしくお願いします。
課題ではないのですが、卒論でSnakeを利用しようと考えています。
そこで動作を確認するため下記のリンクのソースを動かそうとしたのですが、
>.\snake.cpp(21) : warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
1>.\snake.cpp(21) : warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
1>.\snake.cpp(21) : warning C4305: '初期化中' : 'double' から 'float' へ切り詰めます。
1>.\snake.cpp(63) : error C3861: 'snprintf': 識別子が見つかりませんでした。
となり、動かない現状です。よろしくお願いいたします。
opencvの設定に関しては、こちら(
http://imagingsolution.blog107.fc2.com/blog-entry-134.html )を
参照して行いました。
[1] 授業単元:
画像処理
[2] 問題文(含コード&リンク):
http://opencv.jp/sample/ 物体追跡(Object Tracking)
[3] 環境
[3.1] OS: Windows XP
[3.2] Micro Soft Visual C++ 2008
[3.3] 言語: C++ (おそらく)
[4] 期限: 2009年7月29日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
制限は特になし
>>458 snprintfを_snprintf辺りにしたらコンパイル通ると思う。
Parameter snake_param = { 0.45, 0.35, 0.2 }; /* cvSnakeImage のパラメータ */を Parameter snake_param = { 0.45f, 0.35f, 0.2f }; /* cvSnakeImage のパラメータ */にする snprintf (iter, 8, "%03d", ++j);を sprintf (iter, "%03d", ++j);にするか自分で同じようなものを作る snprintf()は、C99から入った標準関数であり、sprintf()では、バッファが溢れる可能性があるから採り入れられた
457です。 本当に申し訳ないですが、どなたかよろしくお願いいたします。
>>457 エラー処理省略
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *ifp = fopen(argv[1], "r");
FILE *ofp = fopen(argv[2], "w");
int N = atoi(argv[3]);
char buf;
while (fread(&buf, 1, 1, ifp) == 1) {
if (buf == '\t') {
int i;
buf = ' ';
for (i = 0; i < N; i++) {
fwrite(&buf, 1, 1, ofp);
}
} else {
fwrite(&buf, 1, 1, ofp);
}
}
return 0;
}
465 :
デフォルトの名無しさん :2009/07/23(木) 23:54:27
>>465 if(i>=9 && j>=6) { break;}
↓
if (3<=i && i<=6 && 3<=j && j<= 6) {
v[i][j] = 5.0;
break;
}
>>449 さん、ありがとうございます。
助かりました。
>>459 ,460
ありがとうございました。無事エラーが消えました。これで何とか卒論につなげられそうです。
またプログラムで行き詰ったらお世話になるかもしれません。
本当にありがとうございました。
// ■演習1
>>471 #include <stdio.h>
#define N 10
static int fibn(int n){
long r;
if (n <= 2) r = 1;
else r = fibn(n-1) + fibn(n-2);
return r;
}//end fibn
int main() {
for(int i = 1; i <= N; i++ ) {
printf( "fibonacci(%2d) = %7d\n", i, fibn(i));
}//end for
}//end main
// ■演習2
>>471 extern int fibn(int n); // fibn.hの内容
#include "fibn.h" // fibn.cppの内容
int fibn(int n){
long r;
if (n <= 2) r = 1;
else r = fibn(n-1) + fibn(n-2);
return r;
}//end fibn
#include <stdio.h> // main.cppの内容
#include "fibn.h"
#define N 10
int main() {
for(int i = 1; i <= N; i++ ) {
printf( "fibonacci(%2d) = %7d\n", i, fibn(i));
}//end for
}//end main
473 :
デフォルトの名無しさん :2009/07/24(金) 13:59:33
[1] 授業単元:プログラミング論
[2] 問題文:入力ストリームから読み込んだデータ文字列を、
データベースに格納する前にキューに一時的に格納するプログラムを
作成する。このとき、データをまとめたデータ文字列を一つずつ、キューへ
エンキューしたり、デキューしたりする過程が分かるプログラムを作成する。
なお、キューを実現するライブラリは、キューのための別のヘッダにまとめる。
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名:CPad for Borland C++Compiler
[3.3] 言語:C
[4] 期限: 2009年7月27日
[そのほか]
・入力ストリームから読み込んだデータ文字列を、キューにエンキューしたり、
デキューしたりするたびにデータベースに格納された全データを表示する。
・構造体オブジェクトは動的な記憶域に生成する。
・生徒の名前、試験の点数を構造体オブジェクトに格納することとする。
・関数の処理にコメントをつけて、キューをどのように実現しているか、
そのプログラムの処理内容が分かるようにする。
[このプログラムの流れ]
(1)ファイルやキーボードなどの入力ストリームから
データをデータ文字列として読み込む
(2)このデータ文字列をキューに一時的に蓄える
(3)キューからデータ文字列を取り出す
(4)このデータ文字列からそれぞれデータを取り出して
文字列や数値データに変換する
(5)変換したデータをデータベース(構造体の配列など)に格納してまとめて管理する
(6)このデータベースからデータを参照し、ディスプレイに出力する
[生徒、点数データ]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9797.txt [参考プログラム]
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9798.txt どなたかお願いします ;;
>>473 たぶん同じ授業の別の宿題で、スタックのとき(
>>196 )はスタック実装の参考コードがあったけど、
キューは参考コードないの?自力で作れってことかな
476 :
デフォルトの名無しさん :2009/07/24(金) 15:09:25
しゃくとり虫法
478 :
デフォルトの名無しさん :2009/07/24(金) 15:27:27
479 :
デフォルトの名無しさん :2009/07/24(金) 15:36:57
>>477 ググってみたらカマドウマ法と書いてありました
嘘は勘弁してください…
480 :
デフォルトの名無しさん :2009/07/24(金) 15:51:27
>>479 それも嘘ですよね?
真面目にお願いします…
481 :
デフォルトの名無しさん :2009/07/24(金) 16:07:18
バビロニアの平方根
何でも名前がついているとか、名前が付けられんだ、つけなきゃ ならないんだと思ってる奴のイタさときたら....
483 :
デフォルトの名無しさん :2009/07/24(金) 16:21:44
>>482 じゃあこれは何をもとに解いているんですか?
非線形方程式の数値解の条件を満たす x を探すのに
俺様が考えた方法。
おおすげー この考え方って良いよね と公知されると名前がついたり
論文でこういうやりかたどうよ? と予め呼び名を先に言ったりすることもあるが…
<アルゴリズムの命名
#
>>422 や
>>424 のは逐次探索法とでも呼べばよいのか?
485 :
デフォルトの名無しさん :2009/07/24(金) 16:32:02
バビロニアの平方根←これじゃぁ不満だったのか・・・ アルゴリズム的には、該当してるんだけども。
そんな架空の国家を出されても嘘にしか聞こえません。ふざけないでください。 みなさんみたいなニートと違うんです。
迫害法
>>327 穴埋め問題。ハッシュ 7月26日23:59
>>260 プロセス内で独自にメモリ管理を行うシステムを作りなさい。 7月27日
>>473 >>341 >>235 キューにエンキューしたり、デキューしたりする。 7月27日
>>232 C言語でファイルをコピーするプログラムを作成せよ。 7月20日
>>223 (Linux)セマフォを使った同期 −共有バッファを用いたプロセス間メッセージ通信。 7月22日
>>171 >>181 >>237 >>200 (9787,9788)
>>202 (Linux)チャットプログラム 7月21日12時10分
>>165 ソースプログラムにコメントを追加する。 7月17日12:30
>>109 (Linux)共有バッファを用いて、子プロセスでメッセージを書き込み、親プロセスで読み出す 7月17日
>>107 デジタル信号処理 。2つのテキストファイル(double型)を読み込み、畳み込み和を計算する。 7月16日
>>102 >>153 (9759) (Linux)2問。パイプによるプロセス間通信。共有バッファ。 7月16日
>>086 >>094 ウインドウ内でキャラモデルを自由に歩かせる 7月15日23:59
>>046 音声をマイクを使って入力し、リアルタイムでスピーカーから出力する 7月20日
489 :
デフォルトの名無しさん :2009/07/24(金) 20:14:24
これだから2ちゃんねるバカにされるんだろ!? 顔が見えないからってバカみたいに調子にのり過ぎ 初心者にはもっと優しく対応すべき
[1] 授業単元: 物理学実験 [2] 問題文(含コード&リンク): ダイオードの電流ー電圧特性 I=Is(exp{qV/nkT}-1) この電流ー電圧特性を実験値を用いて、最小二乗法をによりフィッティングして、n,Isをもとめよ。 という課題なのですが、 for(n=1;n=3;n=n+0.1){ for(Is=1e-5;n=1e-4;n=n+1e-5){ y=Is(exp{qV/nkT}-1)-I; sum=(実験値-y)*(実験値-y); if(min>sum) min=sum; のようにフィッティングパラメータ(n,Is)を変化させていき、sumが最小になるところのn,Isが求まる値としたのですが、 この非線形最小二乗法は何という方法なのでしょうか?(先生にこれは何法を使ったの?と聞かれて困っています) 例:直線探索法など。 [3] 環境 [3.1] OS: Windows XP [3.2] Micro Soft Visual C++ 2008 [3.3] 言語: C++ [4] 期限: 2009年7月25日
492 :
491 :2009/07/24(金) 20:57:39
>>491 です
投稿時のミスで期限が途中で切れてしまいましたが、7月25日(土)です。
連書き申し訳ございません。よろしくお願いします。
493 :
491 :2009/07/24(金) 21:12:05
>>491 本当に度々申し訳ございません、言語はC++の間違いでした。
後付けではないのですが、書き間違えてしまいました。
大変申し訳ございません。
494 :
デフォルトの名無しさん :2009/07/25(土) 00:58:57
[1] 授業単元:C言語
[2] 問題文:パズルゲームの作成
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語: C言語
[4] 期限: 8月5日23時まで
[5] その他の制限: ルールは以下の通りです
任意マスを選ぶ。
選んだマスから四方にマークがつく。
もしマークするマスにすでにマークがあるとマークが消える(反転する)
すべてのマークを消したら終了
実装例はこちらとなっています
http://up01.ayame.jp/up/download/1248441357.EXE 操作方法はカーソルキーでカーソル移動
Enterで確定
ESCでギブアップ
それでは宜しくお願いします
ENTER:swap [.]/[*]. UP,DOWN,LEFT,RIGHT:move cursor.
..*.*.*.
..*.*.*.
****.*.*
..O.*.*.
**.***.*
**.*.***
..*.*.*.
..*.*.*.
(2,3) times:0
>>495
最近C++じゃなくてC言語でWindowsアプリ書く宿題おおいな 回答でWin32APIバリバリのプログラムが見られて楽しいからいいけど
498 :
494 :2009/07/25(土) 01:45:53
これしかないんですがZIPにしたほうがよかったでしょうか? ってウイルスが怖いって意味ですよね
>>494 ここまでは実行した
------------------------------
Jul 21 2009 (01:55:40)
C言語1 課題3サンプル 渕野 哲彦
------------------------------
push Enter key
ノートンさんパニック状態 危険。DLするだけでも
502 :
494 :2009/07/25(土) 04:14:36
うわ、自分のPCだとコメント欄文字化けしててうっかりしてた…
503 :
494 :2009/07/25(土) 10:56:19
えーと、実装例はもう遅いですが消しまたしが
>>496 さんが書いてくれた図みたいにお願いします
マスも同じで8×8でお願いします
505 :
494 :2009/07/25(土) 11:24:28
>>504 一度落としたって事は解いてくれようとしていただいたのですね
解けます?
それと再うpとかはやめていただきたいのですが…
なんで再うpダメなんだよ ダメならうpすな
507 :
494 :2009/07/25(土) 11:29:21
>>506 それで解けるならいいですが再うpして解いてもらえないなら再うpはスレチだと思うのです
分かった、改めてPつける。 P=Parking
>>507 ゴチャゴチャ言うなら自分で解け
以上!
510 :
494 :2009/07/25(土) 12:15:07
>>509 わかりました
これ以上は何も言わないので解いてください
それって先生の名前なんかな。
再うpのおかげで挙動を見ることができそうだったが うまくうごかせなかった。
514 :
494 :2009/07/25(土) 15:00:22
>>512 ..*.*.*.
..*.*.*.
****.*.*
..O.*.*.
**.***.*
**.*.***
..*.*.*.
..*.*.*.
の絵で説明すると0が
>>494 でいう任意マスにあたります
ここからエンターキーを押すと四方、つまり上下左右の*と.が反対となって
..*...*.
....*.*.
**.*.*.*
**O*.*.*
******.*
****.***
....*.*.
....*.*.
となります。
>>494 のすべてのマークを消すとは.を*にすると終了という意味です
515 :
494 :2009/07/25(土) 15:03:26
任意マス(0)はカーソルキーを押すととなりの所に行き、たとえば→を押すと ..*...*. ....*.*. **.*.*.* ***0.*.* ******.* ****.*** ....*.*. ....*.*. というように1つ右に0が移動します
516 :
494 :2009/07/25(土) 15:12:27
少し脱字修正orz
>>514 最後の行は、
>>494 のすべてのマークを消すとはすべての.を*にすると終了という意味です
ESCでも終了となっており、
>>496 の(2,3) times:0とは(、)の数字が0の場所の様でtimesはエンターーキーを押す時に1づつカウントされていく仕様でした
ただし今回は
>>494 のルールが出来れば課題達成となるので0の場所とかまでは求めません
一応カウントとかつければ加点はされるそうなんですけどね
ともかく改めて宜しくお願いします
要するにライツアウト?
520 :
518 :2009/07/25(土) 19:04:05
カーソルの下を反転してたので、修正します。 [MouseView.cpp] //line_151: pDoc->m_pts[tmp.x][tmp.y] = mtmp; pDoc->m_pts[tmp.x][tmp.y] = ! mtmp;
521 :
518 :2009/07/25(土) 19:31:22
>>514 質問者が間違えてるよ。
..*.*.*.
..*.*.*.
****.*.*
..O.*.*.
**.***.*
**.*.***
..*.*.*.
..*.*.*.
ここからエンターキーを押すと四方、つまり上下左右の*と.が反対となって
....*.*.
....*.*.
**.*.*.*
**O*.*.*
******.*
****.***
....*.*.
....*.*.
すいませんどうやら選択マスも反転しないといけないみたいです
>>519 さんのはreverse()に何を追加すればいいんでしょうか…
>>522 reverse()の中の最後の方にある
times++;
の直前に
if (ban[posX][posY] == 0) {
ban[posX][posY] = 1;
remains--;
} else {
ban[posX][posY] = 0;
remains++;
}
を追加する。
Returnを押した直後は表示は変わらないが、移動した後で表示に反映する。
>>523 最後まで親切にしてもらってありがとうございました
ただ、名前の露呈が気がかりです…
とはいえスレを騒がしてしまって申し訳ありませんでした
考えていただいた人のすべての人に感謝しています
ちゃんと先生にごめんなさいって言えば大丈夫
とある大学の教授の部屋を若い女学生が訪れた。 「先生・・御願いです。今度の試験でどうか私を合格させてください」 「その為なら・・私・・なんでもします・・」 女学生は教授の前に跪き、長い髪をなで上げながら 彼の瞳を見つめ、さらにつづけた。 「あぁ・・なんでも・・ねぇ・・御願い・・」 教授も彼女の瞳を見つめる。 『何でも・・するのかい?』 「えぇ・・します・・」 彼女の耳元にそっと教授は囁いた。 『それじゃ・・・してくれるかな・・・勉強を』
527 :
518 :2009/07/25(土) 21:56:47
学校行ってコンパイルすれば、それはライツアウトで、
コイツはそれとは違って将棋の飛車、チェスのルークだけど。
>>517
そういや中学のころ普段駄目駄目なのに成績はいつも5のかわいい娘いたなぁ 今思うとあれって・・・
天は二物を与える。
531 :
デフォルトの名無しさん :2009/07/26(日) 01:30:22
[1]情報処理論 [2]問題文 サンプルプログラムに以下の関数を加えよ; ポインタ *n の指すノードの直後に新しいノードを追加し, 新しいノードの value に v を代入する関数 void insert_node( node_t *n, int v ). ポインタ *n の指すノードの次のノードを削除する関数 void remove_node( node_t *n ). main 文では上の関数を適当に実行し, 要求通り動作することを確認せよ (例 ノードの追加, 削除をいくつか繰り返した後 print_node を実行し, 結果を考察欄に書く). [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C言語 [4] 期限: 7月28日まで サンプルは分けて表示します。
532 :
デフォルトの名無しさん :2009/07/26(日) 01:32:18
531の続きです。 #include<stdio.h> typedef struct node_tag { int value; struct node_tag *next; } node_t; void print_node( node_t* ); int sum_node( node_t * ); int main (void) { node_t node1, node2, node3; node1.value = 11; node2.value = 12; node3.value = 13; node1.next = &node2; node2.next = &node3; node3.next = NULL;
533 :
デフォルトの名無しさん :2009/07/26(日) 01:34:46
532のつづきです。 print_node( &node1 ); int sum = sum_node( &node1) ; printf("\n合計:%d\n",sum); return 0; } void print_node( node_t *head ) { node_t *p = head; while ( p != NULL ){ printf("%d\n", p->value); p = p->next; } } int sum_node( node_t *head ) { int sum = 0; node_t *p = head; while ( p != NULL ){ sum += p->value; printf("%d\n", p->value); p = p->next; } return(sum); } お願いします。
534 :
494 :2009/07/26(日) 02:33:47
>>530 おー、本当にありがとうございます
ここまでしてもらえるとは思ってもみなかったです。
535 :
デフォルトの名無しさん :2009/07/26(日) 10:35:43
[1] C++ [2] 問題文(含コード&リンク): (1) 演算子+,-,*,/と整数と浮動小数点数からなる計算式の文字列から 計算木を作成せよ。計算木は次のようなc_tree構造体を使うとする。 struct c_tree { int type; union { int n_value; double d_value; }; c_tree *left, *right; }; typeは、'+', '-', '*', '/', 'n', 'd'のいずれか。 (2) 優先順位に注意してc_tree構造体からなる計算木から 計算式の文字列を作成せよ。 [3] 環境 [3.1] Linux [3.2] gcc-4.4.0 [3.3] C++ [4] 2009年8月10日まで
536 :
デフォルトの名無しさん :2009/07/26(日) 14:46:42
[1] 授業単元:数値解析 [2] 問題文(含コード&リンク): 式(1)の微分方程式を式(2)の初期条件のもとで、数値的に解くことを考えよ。 dx/dt = -x^2 …(1) x(0)=1 …(2) (a)式(1)を初期条件(2)のもとで解き、解析解を示せ。 (b)修正オイラー法によりを求める手順を示せ。 x(t) の値からx(t +1) を求める手順を示せ。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C言語 [4] 期限: 2009年7月27日8:59 [5] その他の制限: 特になし よろしくお願いします。 課題14 式(1)の微分方程式を式(2)の初期条件のもとで、数値的に解くことを考えよ。 dx/dt = -x^2 …(1) x(0)=1 …(2) (a)式(1)を初期条件(2)のもとで解き、解析解を示せ。 (b)修正オイラー法によりを求める手順を示せ。 x(t) の値からx(t +1) を求める手順を示せ。
538 :
デフォルトの名無しさん :2009/07/26(日) 21:32:08
すいませんサンプルプログラム間違えたのでもう一度書きます。 [1]情報処理 [2]問題文 サンプルプログラムに以下の関数を加えよ; ポインタ *n の指すノードの直後に新しいノードを追加し, 新しいノードの value に v を代入する関数 void insert_node( node_t *n, int v ). ポインタ *n の指すノードの次のノードを削除する関数 void remove_node( node_t *n ). main 文では上の関数を適当に実行し, 要求通り動作することを確認せよ (例 ノードの追加, 削除をいくつか繰り返した後 print_node を実行し, 結果を考察欄に書く). [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C言語 [4] 期限: 7月28日まで サンプルプログラムは次からです。
539 :
デフォルトの名無しさん :2009/07/26(日) 21:34:21
サンプルプログラムです。538の問題のです #include<stdio.h> // ノードを表す構造体を定義 typedef struct node_tag { int value; struct node_tag *next; } node_t; void print_node( node_t* ); int main (void) { // 3 つのノードを定義 node_t node1, node2, node3; // 各ノードの value に値を代入 node1.value = 11; node2.value = 12; node3.value = 13; // node1, node2, node3 の順番にリンク. node1.next = &node2; node2.next = &node3; node3.next = NULL; // node3 は最後のノードであることを表すために, //次に来るノードを NULL とする.
540 :
デフォルトの名無しさん :2009/07/26(日) 21:35:53
538の問題のサンプルの続きです。 print_node( &node1 ); return 0; } void print_node( node_t *head ) { node_t *p = head; while ( p != NULL ){ printf("%d\n", p->value); p = p->next; } }
541 :
デフォルトの名無しさん :2009/07/26(日) 21:45:27
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 下に示すように,2 つの行列の要素をキーボードから読み込み,それらの行列の和を表示す るプログラムを作成せよ. 行列A を入力して下さい 0 1 2 10 11 12 20 21 22 行列B を入力して下さい 100 200 300 200 300 400 300 400 500 0.00 1.00 2.00 100.00 200.00 300.00 100.00 201.00 302.00 10.00 11.00 12.00 200.00 300.00 400.00 210.00 311.00 412.00 20.00 21.00 22.00 300.00 400.00 500.00 320.00 421.00 522.00 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年07月28日 [5] その他の制限:なし。
>>541 #include <stdio.h>
int main(void){
int i;
double a[9],b[9];
printf("行列A を入力して下さい\n");
for(i=0;i<9;i++) scanf("%lf",&a[i]);
printf("行列B を入力して下さい\n");
for(i=0;i<9;i++) scanf("%lf",&b[i]);
for(i=0;i<9;i++){
printf("%6.2lf ",a[i]);
printf("%6.2lf ",b[i]);
printf("%6.2lf ",a[i]+b[i]);
if(i%3==2) putchar('\n');
}
return 0;
}
>>542 自己レス。
出力が頭おかしかった。
int j;
for(i=0;i<3;i++){
for(j=i*3;j<(i+1)*3;j++) printf("%6.2lf ",a[j]);
for(j=i*3;j<(i+1)*3;j++) printf("%6.2lf ",b[j]);
for(j=i*3;j<(i+1)*3;j++) printf("%6.2lf ",a[j]+b[j]);
putchar('\n');
}
544 :
デフォルトの名無しさん :2009/07/26(日) 23:44:32
547 :
デフォルトの名無しさん :2009/07/27(月) 03:47:06
[1] 授業単元: プログラミング [2]問題文:以下の2つの構造体を用い,sample_data2.txt を単方向連結リストに保存するプログラム extra8 を作成せよ.item_list 中の item は各行中の数値を保持し,t_list 中の itemset は1行分のデータを保持するものとする. struct item_list { int item; struct item_list *next; }; struct t_list { struct item_list itemset; struct t_list *next }; ソースファイルの名前は extra8.c とする.また,extra8.c には,生成した単方向連結リストの内容を標準出力に出力する関数 print_tlist を含むものとし,以下の実行例のように print_tlist により各行の内容を出力するものとする. なお,入力ファイル名はコマンドライン引数で指定するものとし,入力ファイルがオープンできなかった場合の処理も含めること.また,プログラム自身を除く引数の数が0個,もしくは2個以上の場合は,何もせず適切なメッセージを出力して終了するものとする. (実行例1) > .\extra8 sample_data2.txt Itemset: 1,3,9,13,23,25,34,36 Itemset: 2,3,9,14,23,26,34,36,39,40,52,55,59 Itemset: 2,4,9,15,23,27,34,36,39,41,93,99,108,115 Itemset: 1,3,10,15,23,25,34,36,38,41 Itemset: 2,3,9,16,24,28,34,37,39,40,53,54 Itemset: 2,3,10,14,23,26,34,36,39,41 Itemset: 2,4,9,15,23,26,34,36,39 Itemset: 2,4,10,15,23,27,34,36,39,41,52 Itemset: 1,3,10,15,23,25,34,36,38 [3]OS:WindowsXP コンパイラ:gcc 言語:C [4]期限:7/31 [5]制限なしです。お願いします。
>>547 sample_data2.txtはどこ?
549 :
デフォルトの名無しさん :2009/07/27(月) 04:13:41
sample_data2.txtです 1,3,9,13,23,25,34,36 2,3,9,14,23,26,34,36,39,40,52,55,59 2,4,9,15,23,27,34,36,39,41,93,99,108,115 1,3,10,15,23,25,34,36,38,41 2,3,9,16,24,28,34,37,39,40,53,54 2,3,10,14,23,26,34,36,39,41 2,4,9,15,23,26,34,36,39 2,4,10,15,23,27,34,36,39,41,52 1,3,10,15,23,25,34,36,38
>>549 これって一行読み込む毎に前のリストをクリアしちゃうの?
あ、ごめん print_tlist付けるの忘れた ちょっと待って
554 :
デフォルトの名無しさん :2009/07/27(月) 07:51:38
[1] 授業単元: [2] 問題文(含コード&リンク):0から255の数字を入力させ、それを2進数に変換するプログラム [3] 環境 [3.1] OS: (Windows/Linux/等々) XP [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) ボーランド [3.3] 言語: (C/C++/どちらでも可 のいずれか)C言語 [4] 期限: ([yyyy年mm月今日まで
>>535 すみません。教えてください。
typeの中にある'n'と'd'はなにを意味するのですか。
それから何という語の略なのか、も。
556 :
デフォルトの名無しさん :2009/07/27(月) 09:28:59
>>554 #include <stdio.h>
int main(){
int a,i,num=256;
printf("0から255の数字を入力:");
scanf("%d",&a);
while(num>1){
num = num >> 1;
if(num<=a){
if((num&a)>0) printf("1");
else printf("0");
}
}
return 0;
}
>
>>555 >演算子+,-,*,/と整数と浮動小数点数からなる計算式の文字列から
>計算木を作成せよ。計算木は次のようなc_tree構造体を使うとする。
ここから察するにnは整数、dは浮動小数点じゃないかな?
558 :
535 :2009/07/27(月) 11:02:22
559 :
デフォルトの名無しさん :2009/07/27(月) 11:11:38
561 :
デフォルトの名無しさん :2009/07/27(月) 11:43:19
562 :
561 :2009/07/27(月) 11:44:32
あっ、相関係数求めてないや・・・
563 :
560 :2009/07/27(月) 11:48:34
>>562 俺の相関係数を求める所を少し変えてもらえばOK
>>560 1/(N-1) でいいのか? 1/N では。
>>564 普通「相関係数」と言う時は1/Nみたいだね
「ピアソンの積率相関係数」とわざわざ呼びならわす時は1/(N-1)
プログラム中に「ピアソンの相関係数」とあるからそのまま提出してもいいかもね
使い分けは元のデータが正規分布する時はピアソンの相関係数を使う 正規分布しない時はスピアマンの相関係数を使う とあるから、1/Nにしといた方が無難かも
それ、これから見るけど、割る必要ない。 N/sqrt(N)/sqrt(N) = (N-1)/sqrt(N-1)/sqrt(N-1) = 1
同じか
570 :
559 :2009/07/27(月) 13:57:57
>>567 ありがとうございます。
書き直していただいた
後者のほうを使わせていただこうとおもいます
571 :
デフォルトの名無しさん :2009/07/27(月) 18:42:55
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 例のような3行4列の行列aと、4行3列の行列bの積を、3行3列の行列cに格納し、 その結果を表示するプログラムを作成せよ。 例 a = 6 3 4 2 5 1 2 1 2 4 3 3 b = 1 2 3 4 5 6 1 2 3 4 5 6 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年07月28日 [5] その他の制限: For{i= 0;〜〜〜}{ For{j=0;〜〜〜}{ For{k=0;〜〜〜}{ } } } このような形を使って、作っていただけるとありがたいです。 この形じゃなくてもOKです。 よろしくお願いします。
>>554 2進数に変換
#include <stdio.h>
int main(){
int a, i;
printf("0から255の数字を入力:");
scanf("%d", &a);
for(i=7;i>=0;i--)
printf("%d", (a>>i)&1);
return 0;
}
>>571 #include <stdio.h>
int main(void)
{
int i, j, k;
int a[3][4] = {{6, 3, 4, 2}, {5, 1, 2, 1}, {2, 4, 3, 3}};
int b[4][3] = {{1, 2, 3}, {4, 5, 6}, {1, 2, 3}, {4, 5, 6}};
int c[3][3];
printf ("c = \n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
c[i][j] = 0;
for (k = 0; k <4; k++) {
c[i][j] += a[i][k] * b[k][j];
}
printf("%d ", c[i][j]);
}
printf("\n");
}
return 0;
}
574 :
デフォルトの名無しさん :2009/07/27(月) 19:21:34
[1] 授業単元:プログラミング序論演習 [2] 問題文(含コード&リンク): CUI上で動くメーラーを作れ [3] 環境 [3.1] OS: Win XP [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C++ [4] 期限: 2009年7月28日 0:00まで [5] その他の制限: 多機能
めんどそうと思いながら
>>535 始めたらやっぱりめんどかった
>>574 序論でそれか。
socketとかならった?
577 :
デフォルトの名無しさん :2009/07/27(月) 22:46:03
[1] 授業単元:プログラミングT [2] 問題文(含コード&リンク):数列an={0,1,3,6...} (n=1,2,3,...,100)を求めて表示せよ [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: visual stdio 2008 [3.3] 言語: C [4] 期限:09/07/28 [5] その他の制限:1次元変数a[100]を使いなさいということだそうです。 #include<stdio.h>しかならっていません。
578 :
help :2009/07/27(月) 22:52:44
[1]情報処理論 [2]問題文 10進数から2進数へ変換し、その補数表現を書け [3.1] OS: XP [3.2] コンパイラ名とバージョン: Visual Studio 2008 [3.3] 言語: C言語 [4] 期限: 7月28日まで
>>577 #include <stdio.h>
int main(void)
{
int i;
int a[100];
a[0] = 0;
for (i = 1; i < 100; i++) {
a[i] = a[i-1] + i;
}
for (i = 0; i < 100; i++) {
printf("a(%d) = %d\n", i+1, a[i]);
}
return 0;
}
>>578 #include <stdio.h>
int main()
{
int num, i;
scanf("%d", &num);
for (i = sizeof(num) * 8 - 1; i >= 0; i--)
{
printf("%d", (num & 1 << i) ? 1 : 0);
}
printf("\n");
return 0;
}
581 :
help :2009/07/27(月) 23:31:26
>580 ありがとうございます。 そこから2進数の補数表現にするにはどうすればいいんでしょうか? あと、cじゃなく、c++でした・・・ すいません
584 :
help :2009/07/27(月) 23:46:34
>582 あっちとは、どこの事でしょう?
スレを勃てるまでもないC/C++の質問はここで 12
http://pc12.2ch.net/test/read.cgi/tech/1248010352/123-130 #include <iostream>
using namespace std;
int main(void){
int a, i;
cout<<"-32767から32767の数字を入力:";
cin>>a;
cout.width(1);
for(i=15;i>=0;i--){
cout<< ((a>>i)&1);
if(i==8) cout<<' ';
}
cout<<'\n';;
a = -a;
for(i=15;i>=0;i--){
cout<< ((a>>i)&1);
if(i==8) cout<<' ';
}
return 0;
}
きっと別人だろうけど、「助けて」って名前の人が同じような質問してて、C++の回答もらってるからそっちどうぞ
>>585 > そこから2進数の補数表現にするにはどうすればいいんでしょうか?
って言われるぜ
1の補数 → 全ビット反転 2の補数 → 1の補数を取った後、+1 簡単だニャー。
590 :
help :2009/07/28(火) 00:14:26
こうやってみるとコードを理解しないままにありがとうとホクホク顔で帰っていく生徒も悪くないもんだな
C++なら<bitset>使えば一発だよ。 例えば、10進数で-10を16bitの2進数に変換し1の補数表現とするなら、 bitset< 16 > b( ~10 ); 同じく2の補数表現とするなら、 bitset< 16 > b( ~10 + 1 ); こんだけ。画面に表示するときは cout << b.to_string() << endl; C++では線形リスト作れとかソートしろとかみたいな 基礎レベルの宿題はほとんどコード書く必要がない。
昔々、自分が出した宿題がここに出てきたので、ちょっと癖のある書き方で 解答を書き込んだところ、それがそのまま提出されてきました。 思わず笑って×を付けましたが、一応合っているのに×を付けられても 文句すら言ってこないんですよね。つまらん。
>>593 合ってるかどうかも分からないからでしょ
atoiを作れって課題でsscanfでケコーンしたのもいい思い出。
基本的なアルゴリズムとかデータ構造の問題だされてSTLで返すやつって目的見失ってるだろ
>596 車輪の再開発はどうのこうのって言われるとそりゃそんな中まで考えないよ 先人が悪い
STLを使うなという指定が無い限り自由じゃないか?
>>596 宿題出されて課題スレに投げる奴って目的見失ってるだろ。
業務アプリじゃねーしな 勉強しなきゃいけないときぐらい勉強しろ できないならまったく関係ない業界に就職してくれ
盛り上がってるところ申し訳ないんだけど
>>592 をみて
#include <bitset>
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
bitset<16> b(n);
cout << b.to_string() << endl;
return 0;
}
こんなのを書いてコンパイルしたら
error: no matching function for call to `std::bitset<16u>::to_string()'
こんなことを言われちゃった。なんで?
コンパイラはg++の3.4.4
化学かなんかのテストで教科書のどこどこを読んで代入すれば答えが求まる。計算は任せる 見たいな事を長々と書いて、単位もらったとかいう話を思い出した
604 :
デフォルトの名無しさん :2009/07/28(火) 01:03:52
>>596 C++の宿題を出しておいて
「STLを使わないこと」と指示しない教師の方がアホだ。
そして、STLを使っていいにもかかわらず
STLよりも効率の悪いコードを「発明」している生徒がいたら
そいつはもっとアホだ。
606 :
554 :2009/07/28(火) 01:14:41
STLで答えになるんなら講義もテストもいらないじゃん 相手の意図を察して常識的な対応できるようにならないと社会人失格ですよ
608 :
602 :2009/07/28(火) 01:18:48
#include <iostream> #include <string> #include <bitset> using namespace std; int main() { int n; cin >> n; bitset<16> b(n); string s; b._M_copy_to_string(s); cout << s << endl; return 0; } わけわからんからbitsetの中身を読んでこうしてやった。 自己解決しました。 解決はしてないけど
出題者の意図を察した答えを書けというのは ワインバーグ先生も確かに書いているが、 だがマヌケな教師に付き合う義理もない。 特に回答者は。
611 :
554 :2009/07/28(火) 01:24:06
612 :
デフォルトの名無しさん :2009/07/28(火) 01:28:06
整数型の2次元配列X[3][3]の初期値は先頭から順に以下とする。 160 200 225 100 160 200 20 100 160 配列160以上の数はそのままの値で、160未満は0として表示する。 お願いします!
宿題程度で社会人失格とか、どんなだ。w
>>612 #include <stdio.h>
int main(void)
{
int X[3][3] = {{160, 200, 225}, {100, 160, 200}, {20, 100, 160}};
int i, j;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
printf("%d ", X[i][j] < 160? 0: X[i][j]);
return 0;
}
>>610 ご丁寧にインデントに気を使ってるからでしょ
>>554 #include <stdio.h>
int main(void)
{
int b[8], n, i;
printf("input (0 - 255) >> ");
scanf("%d", &n);
for (i = 0; i < 8; i++) { b[i] = n % 2; n /= 2; }
for (i = 7; i >= 0; i--) printf("%d", b[i]);
printf("\n");
return 0;
}
619 :
デフォルトの名無しさん :2009/07/28(火) 11:46:08
ひょっとして全部やれとか・・・
一人で全部やれとは言わないけど、分担してやってもらって最終的に全部そろえたいです と、代弁してみたよ
こういう風に小分けにされると面倒なんだよね
624 :
デフォルトの名無しさん :2009/07/28(火) 15:23:30
>>612 を160 200 225
0 160 200
0 0 160
と表示するようにお願いします。
何回もすみません。
>>624 #include <stdio.h>
int main(void)
{
int X[3][3] = {{160, 200, 225}, {100, 160, 200}, {20, 100, 160}};
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++)
printf("%d ", X[i][j] < 160? 0: X[i][j]);
printf("\n");
}
return 0;
}
626 :
デフォルトの名無しさん :2009/07/28(火) 15:47:22
627 :
577 :2009/07/28(火) 15:48:38
>>579 ありがとうございます。
[1] 授業単元:プログラミングT
[2] 問題文(含コード&リンク):
1.scanfで正数nを入力させ、入力した正数nについてn!とn!/nを求めて表示するプログラム
2.scanfで数字nを入力させ、入力した数字nが0〜10未満なら"●"、10〜30未満で"○"、30〜60未満で"△"を表示させるプログラム
3.scanfでa,b,cを入力し、ax~2+bx+c=0の二つの解を求めて表示するプログラム
[3] 環境
[3.1] OS: Windows vista
[3.2] コンパイラ名とバージョン: visual stdio 2008
[3.3] 言語: C
[4] 期限:09/07/29
[5] その他の制限:1次元変数a[i]を使うらしいです。
#include<stdio.h>しかならっていません。
>>627 1.
#include <stdio.h>
int main(void)
{
int i, n;
double f = 1;
printf("input n: ");
scanf("%d", &n);
for (i = 1; i <= n; i++) f *= i;
printf("%d! = %.0f\n%d!/%d = %.0f\n", n, f, n, n, f / n);
return 0;
}
2.
#include <stdio.h>
int main(void)
{
int n;
printf("input n: ");
scanf("%d", &n);
if (0 <= n && n < 10) printf("●");
else if (10 <= n && n < 30) printf("○");
else if (30 <= n && n < 60) printf("△");
return 0;
}
>>627 3. sqrt()はつかっちゃいけないんだろうから
#include <stdio.h>
int main(void)
{
double a, b, c, D;
printf("input a: "); scanf("%lf", &a);
printf("input b: "); scanf("%lf", &b);
printf("input c: "); scanf("%lf", &c);
D = b * b - 4 * a * c;
printf("x = %f ± √%f\n", -b / 2 / a, D / 4 / a / a);
return 0;
}
>>628 そうなんですよめんどうなんですよ。
なので俺はそっとしまっておいた。
負の値と括弧ぐらいには対応したいし、と思うとやっぱりいろいろ。
ポーランド記法からふつうの形式に変換なら楽なのにね
632 :
604 :2009/07/28(火) 16:25:06
>>604 期限を明日まで延ばしてもらいました、、、
難しいとは思いますが、どなたかよろしくお願いします。m(__;)m
アイマス見てる暇があったらJavaしろよ
誤爆した
637 :
604 :2009/07/28(火) 18:02:47
面倒なプログラムなんですね、、、
>>627 問1のみ
勝手に再帰関数を求めてると解釈した
#include<stdio.h>
double fact(int n) {
if (n==0 || n== 1) return 1;
else return n*fact(n-1);
}
int main(void) {
int n;
printf("正の整数nを入力してください\n");
scanf("%d",&n);
if(n==0) printf("n=0では%d!/%dが定義できません\n",n,n);
else printf("%d!=%.0f\n%d!/%d=%.0f\n", n, fact(n),n,n,fact(n)/n);
return 0;
}
640 :
604 :2009/07/28(火) 19:52:57
>>639 ありがとうございます!!
面倒なプログラミングなのにありがとうございましたm(__;)m
ほんとに助かりました、、、
>>640 おかしいな。Cでの実装へのアンカーを貼ったはずなんだが。。。
アラヤダ。 これはすまんかった
今日は問題が少ないな
C言語で陽に解けない方程式(例えば y=a(b-exp(cx−y))-dx)を非線形最小二乗法を用いて パラメータa,b,c,dを求めたいのですが、何法を用いればいいのでしょうが? お願いします。
>>647 コンピュータの強さを10段階で選べるように
後出しじゃんけんのことか
652 :
デフォルトの名無しさん :2009/07/29(水) 12:29:35
654 :
627 :2009/07/29(水) 12:32:02
>>629 ありがとうございます。
>>630 出来ないのですが・・・
実行結果がすべて同じになってしまいます。
>>650 >>653 レスが遅れて済みません。
ありがとうございます!これで提出できそうですm(__)m
>>654 入力の値を変えても同じってことですか?
なら、検証に何通りか、その入力した値を書き出して。
657 :
627 :2009/07/29(水) 12:58:32
>>656 すみません。
もう一度やってみたら出来ました。
>>619 kadai6, kadai8
>>243 解答
>>255 (9801) 単方向連結リストの最後に順次追加し,そのリストの内容を先頭から順に標準出力に出力するプログラム extra6
>>547 解答
>>553 (9843) 2つの構造体を用い,方向連結リストに保存するプログラム extra8
659 :
デフォルトの名無しさん :2009/07/30(木) 00:40:51
[1] C言語 [2] 入力された英字文字列(a~z,A-Z)に、どの文字がいくつ入っているかを調べるプログラムcount_char.cを作成せよ。 実行例 String: cbbbAcAccZ A: ** Z: * b: *** c: **** % [3] 環境 [3.1] OS:Linux [3.2] gcc 3.4 [3.3] 言語: C [4] 期限: 2009年8月5日まで [5] その他の制限: (ポインタまで習っていますがポインタは最初のほうしか習っていません) よろしくお願いします
660 :
デフォルトの名無しさん :2009/07/30(木) 01:38:11
[1] C言語 [2] 2つのファイルを比較し,内容が異なっている最初の行の行番号と内容を 標準出力に表示するプログラムを作成せよ。 ファイル名はコマンドライン入力により受け取ることとする。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:gcc 3.4 [3.3] 言語:C [4] 期限:2009年7月31(金) [5] その他の制限:ポインタ履修済みです
>>659 #include<stdio.h>
void print_star(int num)
{
int i;
for (i = 0; i < num; i++) fputc('*', stdout);
}
int main()
{
char in_buf[BUFSIZ];
char *p = in_buf;
int count[52] = {0}; /* A-Z a-z */
int i;
fgets(in_buf, sizeof(in_buf), stdin);
while (*p!='\0')
{
if (*p >= 'A' && *p <= 'Z') count[*p - 'A']++;
if (*p >= 'a' && *p <= 'z') count[*p - 'a' + 26]++;
p++;
}
for (i = 0; i < sizeof(count) / sizeof(count[0]); i++)
{
if (count[i] == 0) continue;
printf("%c: ", ((i < 26) ? 'A' : 'a' - 26) + i);
print_star(count[i]);
fputc('\n', stdout);
}
return 0;
}
663 :
デフォルトの名無しさん :2009/07/30(木) 03:10:03
>>661 ありがたいのですがまだfputcなどを学んでいないのでちょっとわかりません…
参考にします
ありがとうございます
>>663 fputc('*', stdout);
↓
printf("*");
でもいいよ
>>662 迅速な解答、本当に感謝しております。
感動しました!
[1]C言語
[2]
>>662 のコードにあるアルゴリズム以前の致命的な問題を指摘し、
修正したコードを書け。
[3]
>>662 のコードが実行出来る処理系ならば何でも可
[4]本日中
どゆこと?
パラメータが多すぎるときのエラーメッセージがちょっと残念なこと、、、は別に致命的じゃないか
#endifを消すってことだろ
話を総合すると #if 0と#endifを削る? これはひどいシンタックスエラーですね
宿題スレのテンプレが書かれた状態では提出できないのでテンプレ部分を省いて欲しいということかと。
int main() 型だけど return が居ない? (全て exit で抜ける) (プリプロセッサで挟まれているとはいえ、漢字リテラルのがまずい?)
#if 0 〜 #endif は別に致命的でもないしな。 何か勘違いしてんじゃね?
もしかして BUFSIZ が未定義のマクロに見えたのか? (stdio.h に居る)
[1] 授業単元:アルゴリズムA演習
[2] 問題文(含コード&リンク):
以下のような図です.
http://imepita.jp/20090730/619100 そこでこの図の表現を変えてみるために以下のアルゴリズムを考えました.
表現すべき反復回数を5で割り余りを50倍する.
この値がもし255(グレイスケール8ビット最大値)を越えていたら255にする.
そしてこの値を2次元配列の対応する場所に代入する.そしてxvでプロットする.
以下がその結果です.これを作成してください.この時のプログラムと以下の図を併せて提出してください
http://imepita.jp/20090730/619740 [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:cc
[3.3] 言語:C
[4] 期限:8月3日
最初の図は途中まで与えられています。 #include <stdio.h> #include <math.h> #include "zcalc.h" #define NSIZE 500 #define XYLOW -1.5 #define XYHIGH 1.5 zcompl zentry(float a,float b) { zcompl c; c.x = a ; c.y = b ; return c ; } zcompl zadd(zcompl a,zcompl b) { zcompl c ; c.x=a.x+b.x; c.y=a.y+b.y; return c ; } zcompl zsub(zcompl a,zcompl b) { zcompl c ; c.x=a.x-b.x; c.y=a.y-b.y; return c ; } zcompl zneg(zcompl a) { zcompl c ; c.x=-a.x ; c.y=-a.y ; return c ; }
続き zcompl zmul(zcompl a,zcompl b) { zcompl c ; c.x=a.x*b.x-a.y*b.y ; c.y=a.x*b.y+a.y*b.x ; return c ; } zcompl zconjugate(zcompl a) { zcompl c ; c.x=a.x ; c.y=-a.y ; return c ; } zcompl zdiv(zcompl a,zcompl b) { zcompl bbbar,bconj,binv ; zcompl c ; bconj=zconjugate(b) ; bbbar=zmul(b,bconj) ; binv=zentry(bconj.x/bbbar.x,bconj.y/bbbar.x) ; c = zmul(a,binv) ; return c ; } float zabs(zcompl a) { } void zprint(zcompl a) { printf("%f%s%f(i)",a.x,(a.y>=0?"+":""),a.y) ; } void zprintn(zcompl a) { zprint(a) ; printf("\n") ; }
zandnit z3minus1(zcompl zinit) { zcompl zfunc,zdfunc,zz,zold,znew,zdiff ; zcompl zzero,zone,zthree ; zandnit zn ; float eps=1.0e-6 ; int niterat=0; niterat -= 1; zn.z=znew ; zn.niterat=niterat ; return zn ; } int main() { int nitxy[NSIZE][NSIZE] ; zcompl zinit,zanswer ; zandnit zend ; float x,y ; int niterat,nitmax ; int ix,iy ; float delta ; printf("P2 %d %d\n",NSIZE,NSIZE) ; delta=(XYHIGH-XYLOW)/NSIZE ; for(ix=0;ix<NSIZE;ix++) { // x-direction x=XYLOW+delta*ix ; for(iy=0;iy<NSIZE;iy++) { y=XYLOW+delta*iy ; zinit.x=x ; zinit.y=y ; zend=z3minus1(zinit) ; nitxy[ix][iy]=zend.niterat ; } }
nitmax=0; for(iy=0;iy<NSIZE;iy++) { for(ix=0;ix<NSIZE;ix++) if(nitxy[ix][iy]>nitmax) nitmax=nitxy[ix][iy] ; } printf("%d\n",nitmax) ; for(iy=0;iy<NSIZE;iy++) { for(ix=0;ix<NSIZE;ix++) printf("%d ",nitxy[ix][iy]) ; printf("\n") ; } }
インデント…
>>676 BUFSIZがstdio.hで公開されているのはある種のバグ
というか名前の付け方が安直過ぎ(今となっては,
>>662 の
ように無関係なところに流用し自分のプログラムで
決めるべきことをsetbuf関数作成者の決定にすり替えて
責任転嫁した上にsetbufの都合でBUFSIZを変更すること
すら許さないようなコードが多くなっており、修正はムリ
だが)
SETBUF_BUFSIZEとかにしておけば良かったし、恐らく
作成者はしたいだろうね、今でも。
684 :
デフォルトの名無しさん :2009/07/30(木) 21:35:39
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから実数を1つ入力し、double型の変数aに代入する。これを小数点以下第3位 で四捨五入した値をdouble型の変数bに代入し、さらに次の実行例のような出力をするプロ グラムを作成せよ。 実数aを入力してください: 0.5372 この数を小数点以下第3 位で四捨五入した数は0.54です。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年08月03日 [5] その他の制限:
>>685 ・・大掛かりなのにも関わらず解答して頂き、
心から感謝申し上げます。
精進します・・・
>>684 #include <stdio.h>
int main(void){
double a,b;
printf("実数aを入力してください: ");
scanf("%lf",&a);
b = (double)(int)(a*100+0.5) / 100;
printf("この数を小数点以下第3 位で四捨五入した数は%.2lfです。\n",b);
return 0;
}
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):本文が長すぎて書き込めないので下に 分けて書き込みます [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: borland c++ [3.3] 言語: C [4] 期限: 7月31日 15時 [5] その他の制限:なし 本気で困っています よろしくお願いします
689 :
688 :2009/07/31(金) 00:26:32
[2] 問題文(含コード&リンク): POSデータ解析システムを作ってみよう K氏は、3つのコンビニエンスストア(X店、Y店、Z店)をチェーン店に持つオーナーです。コンビ ニエンスストアの経営において、売れ筋商品と死に筋商品の的確な把握は死活問題に直結する重要な業務 です。そこでK氏は、チェーン店に、毎日どんな商品がどれくらい売れたのかといった販売情報を、CS Vファイルとして送るように指示していました。しかし、送られてくるデータファイルは膨大であり、そ れらを統合して、全店を通して最も売れた商品はどれで、何が売れていないかを把握することは困難でし た。つまり、送られてくるデータを適切に活用できないでいました。そこで、K氏はあなたに、こういっ たことを解決するシステム(POSデータ解析システム)を開発するように頼みました。K氏は、毎日送 られてくるX、Y、Z店の個別の販売情報を合計した一括データを入手したいそうです。
690 :
688 :2009/07/31(金) 00:28:56
<第1ステップ> まず、あなたは、各店舗から送ってもらうCSV ファイル名を以下のようにするよう、お願いしました。 X店=data-x.csv Y店=data-y.csv Z店=data-z.csv また、商品名(全100 品種)は必ず以下の形式で入力するように指示しました。 「 Item-00 」から「 Item-99 」までの半角7文字 −75− さらに、各店から送られてくるレコードのフィールドは、以下の項目にして、売上時刻順に並べてもら うよう、お願いしました。以下のようなCSV ファイルが送られてくることになります。 売上時刻 商品名 売上個数 0:12,Item-42,2 0:12,Item-03,1 0:49,Item-92,3 ・ ・ 23:38,Item-80,1 また、毎日送られてくるCSVファイルとは別に、単価情報が格納された tanka.csv ファイルを作りま した。このファイルのレコードのフィールドは、次のようになっていて、商品名順に並んでいます。 商品名 単価 Item-00,150 Item-01,120 ・ Item-99,230 最後に、K 氏に提供する統合ファイル(data-all.csv)のレコードの中身は以下のようにして、商品名 の小さい順にレコードを作りました。 商品名 単価 総売上個数 売上高 ここで、大事なことは、売上情報を統合することです。例えば、単価150 円のItem-23 という商品が、 X 店では15 個、Y 店では、25 個、Z 店では10 個売れたとすると、以下のようになっているということです。 Item-23,150,50,7500 また、全店舗を通して1 個も売れなかった商品情報は載せないことにしました。
691 :
688 :2009/07/31(金) 00:30:15
<第2ステップ> K氏から、data-all.csv のレコードの中身を以下のように変更し、レコードを並べる順番も、これまで の商品名順ではなく、売上順位の高い順にして欲しいと要望がありました。 売上順位 商品名 単価 総売上個数 売上高 全売上高にしめる割合(%) 全売上高とは、全商品の売上高の合計です。全売上高にしめる割合の有効数字は4 桁(10%未満の場合は 3 桁)にします。例えば、全売上高が100 万円で、該当商品の売上高が12,345 円だとすると、割合(%) は 1.23 となります。 売上順位は、同じ売上高の場合は同一順位とします。 −76− 例えば、data-all.csv ファイルは次のようになります。 1,Item-23,150,50,7500,10.71 2,Item-52,240,30,7200,10.28 2,Item-53,360,20,7200,10.28 4,Item-14,230,30,6900,9.85 ・ ・ 4レスも消費してすいませんでした よろしくお願いします
問題文の途中に出てくる−75−とか−76−はなんなの?
元の資料あるならそのまま貼った方がいいんでないの?
694 :
662 :2009/07/31(金) 01:04:35
>>683 勉強になりました。
とりあえず自分のコードでは1行の長さがBUFSIZを超えた場合にうまく動かないので、
もしよければ手直しを。。。
途中にある-75- -76-とかの数字はページの表記でした。気付かず投稿してしまいました。最初から資料貼ってれば良かったですねorz わかりにくくてすいませんm(__)m
宿題を自分でやらないというルールを守れないし、このスレのルールも守れないんですね。
>>694 >>683 は煩さ杉。公開ヘッダの定数値を流用することなんて
禁止する手段も意味も無いと思う。但しコードの可読性から
「流用した」とコメントを入れておいたほうがいいかも
そしてなるべく別の名称にエイリアスする。
↓こんな感じかな
#define BUFFER_SIZE BUFSIZ
/* BUFSIZはstdio.hで定義されている共通定数 */
698 :
デフォルトの名無しさん :2009/07/31(金) 02:10:54
いずれにしても、
>>667 は宿題の答えを授業で教わったら
それをここに書き込んでね。自分も含めて
どこが「致命的」なのかわからないから…。
>うまく動かないので BUFSIZが非常に小さい処理系(DOSとか古い組み込みOSの 一部の処理系じゃ32バイトとかそんな程度) ではうまく動かないというよりか、ヘンに正しく動作しなが らも思いっきり間違った答えを出して平然という 表現のほうがあってると思われ これを致命的だと表現出来るかどうかは感覚の問題だろけど まWindowsの上のGCCじゃ問題ないだろうが 例えばfgetsで行を読み込んだ時に終端が改行かどうかチェックし 改行じゃない場合は判定不能として処理を中断するコード が入ってることとかが模範解答としては求められているんぢゃ? (自分は求めてはいないけどw)
判定不能にはならないだろw
>>667 解答
2つのファイルが同じときは、どう表示するか、
[EOF]\nの文字が最初の違いとして現れたら、どう表示するかとか、
ファイル名は表示するのかとか、気づいたのはその3点。
while (1) {
if (fgets(line_1, sizeof(line_1), f_1) == NULL) {
if (fgets(line_2, sizeof(line_2), f_2) == NULL) {
break;
}
printf("%d + %s", line_2);
break;
}
if (fgets(line_2, sizeof(line_2), f_2) == NULL) {
printf("%d - %s", line_1);
break;
}
if (strcmp(line_1, line_2) != 0) {
printf("%d + %s", line_1);
printf("%d - %s", line_2);
break;
}
line_no++;
}
なんかのギャグ?
致命的な
706 :
687 :2009/07/31(金) 08:06:32
>>705 指摘ども。
>>684 修正お願いします。
b = (double)(int)(a*100+(a>=0?0.5:-0.5)) / 100;
708 :
707 :2009/07/31(金) 14:34:27
>>708 qsort の 比較関数戻り
引き算の結果 INT_MAX 超える(= uriage 差が INT_MAX 以上ある) と
ソート方向裏返らない?
面倒でも if なり 条件演算式なりにしたほうが無難じゃないかな?
>>709 どういう場合にINT_MAXを超えますか?
>>708 本当にありがとうございましたm(__)m嬉しくて泣きそうです!
>>710 ごめん 意味的には負数になることないんで超えないね…
>>709 >面倒でも if なり 条件演算式なりにしたほうが無難じゃないかな?
全面的に同意。俺707だけどw
>>711 わりい、
>>708 の修正版でランク付けする部分が完全にバグってた
まだ提出してなければ適当にデバッグしてくだされ
714 :
709 :2009/07/31(金) 17:45:01
日本語がおかしかったな。 ”引き算の結果は” どーなろうが INT_MAX 内だ 重要なのは、 item[id_b].uriage > item[id_a].uriage であるにもかかわらず item[id_b].uriage - item[id_a].uriage が負の値になる場合がある item[id_b].uriage → INT_MAX 、 item[id_a].uriage → -10 のように INT_MAX以上の隔たりがあるときにね
715 :
デフォルトの名無しさん :2009/08/01(土) 13:16:54
[1] 授業単元:プログラミング(C++) [2] 問題文(含コード&リンク): double型の変数dをcoutで出力すると 6.50877e+200 が出力される。 この値は、4.70322013 * 10^(87) と等しい。 87 を得られるプログラムを作成せよ。 [3] 環境 [3.1] Linux [3.2] gcc 4.3.3 [3.3] C++ [4] 期限: 出来れば本日(8/1)中 [5] その他の制限: よろしくお願いします。
[1]C言語初級 [2]現在割り当て可能なmallocメモリ領域バイト数を1バイト単位 で取得する unsigned int maxAvail() 関数を作成し、main関数の中で実行するサンプルプログラムを作成。 他のプログラムを立ち上げている状態で起動した場合に値がどのように 変化するか? maxAvail関数呼び出し自体によってmalloc領域が変化する可能性は 無視して良い。 4Gバイトより大きい領域が取得できる場合は(unsigned int) 0xFFFFFFFFを返すこと maxAvail関数の中で使用できる関数はmemset,malloc,freeのみとする。 割り当てた領域はすぐに解放するがその前にmeset関数で取得した 領域を0で埋めること。 [3] Linux/gcc 4.0/C言語 使用出来るライブラリ関数=printf malloc free memset [4]8/10 正午までにメール
>>715 問題の意味がわからないが、こういうことだろうか
#include <iostream>
#include <cmath>
using namespace std;
void main()
{
double x1 = 6.50877;
double e1 = 200.0;
cout << x1 << "*e^" << e1 << " == ";
double d = x1 * exp(e1);
double e2 = floor(log10(d));
double x2 = d / pow(10.0, e2);
cout << x2 << "*10^" << e2 << endl;
cout << "answer is " << e2 << endl;
}
int main() :6: error: `main' must return `int'
>>718 void main() → int main(void)
関数の最後にreturn 0;
exit(0);は保障されてる?
722 :
721 :2009/08/01(土) 16:34:57
>>715 入力を追加した。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double d, e = 6.50877e+200, x1, e1, x2, e2;
cout << "実数を入力して下さい:"; cin >> e;
cout << e << " :: ";
e1 = floor(log10(e));
x1 = e / pow(10.0, e1);
cout << x1 << "*e" << (e1<0?"":"+") << e1 << endl;
d = x1 * exp(e1);
e2 = floor(log10(d));
x2 = d / pow(10.0, e2);
cout << x2 << "e" << (e1<0?"":"+") << e2 << endl;
}
723 :
sage :2009/08/01(土) 17:53:19
[1] 授業単元: プログラミングI [2] 問題文(含コード&リンク): 体格判定プログラム(身長,体重からBMIなどを計算 し,「メタボ予備軍です」などのメッセージを出力する.) • 占いプログラム(日付などを入力すると、それらを用い た計算を行い,今日の運勢,ラッキーカラーなどを出力 する)など • 会話[3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 8月5日 [5] その他の制限:int以外の変数、配列、関数の使用
まさかの関数使用不可
>>724 int以外の
・変数
・配列
・関数
の使用
ではないかとエスパー。
printfってOSの違いで影響受けますか?
>>723 double使っちゃいけないって本当?
BMIは小数必要だからソースぐちゃぐちゃに。。
#include <stdio.h>
int main(void){
int height,weight;
printf("input height(cm) : "); scanf("%d",&height);
printf("input weight(kg) : "); scanf("%d",&weight);
printf("\nあなたのBMI指数は %4.1lf です。\n",(double)weight / (height/100.0) / (height/100.0));
if((double)weight / (height/100.0) / (height/100.0) < 18.5) printf("やせ気味です。\n");
else if((double)weight / (height/100.0) / (height/100.0) < 25) printf("標準体型です。\n");
else if((double)weight / (height/100.0) / (height/100.0) < 30) printf("メタボ予備軍です。\n");
else printf("太りすぎです。\n");
return 0;
}
逆にintを使っちゃいけないんじゃ?
>>723 訂正
int以外の変数をしている
scanf・for・配列・関数を使用
for文の中にforを使用
3つ以上のcaseを含むswitchを使用している
関数の再起呼び出し
>>723 ・後から問題に付け足しするのはコラー!!です。
付け足しは作業を無駄にしがちです。
#include <stdio.h>
#include <stdlib.h>
int main(void){
int month,day;
int luck,R,G,B;
printf("input month : "); scanf("%d",&month);
printf("input day : "); scanf("%d",&day);
srand(month*100+day);
luck = rand() % 4;
R = rand() % 256;
G = rand() % 256;
B = rand() % 256;
if(luck == 0) printf("\n何をしてもダメな日。無難に過ごそう。\n");
else if(luck == 1) printf("\n今日はアンラッキーデー。口は災いの元。\n");
else if(luck == 2) printf("\n今日はちょっといいことあるかも。\n");
else printf("\n今日は最高に良い日。何をしてもうまくいくよ!\n");
printf("\n今日のラッキーカラーは R%3d G%3d B%3d です。\n",R,G,B);
return 0;
}
>>723 #include<stdio.h>
int main(void){
int moji;
printf("今日はいい天気ですね\n>");
fflush(stdout);
while((moji=getc(stdin))!=EOF && moji!='\n');
printf("うっせーハゲ\n");
return 0;
}
>>729 ちゃんと分かるように書け
int以外の変数をしている といいのかいけないのかどっちだ?
scanf・for・配列・関数を使用 するとどうなんだ?
for文の中にforを使用 すると?
3つ以上のcaseを含むswitchを使用している ?
関数の再起呼び出し ?
BMIの計算方法は?「メタボ予備軍です」などのメッセージを出力するときの閾値とメッセージは?
占いプログラムのちゃんとした仕様は?
会話って何?
>>716 ってちょっとやってみたけど意外にムズいな
737 :
デフォルトの名無しさん :2009/08/01(土) 23:44:00
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): キーボードから整数をひとつ入力し,その数が素数であるかどうかを判定するプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年08月03日 [5] その他の制限:
>>737 #include<stdio.h>
int main(void){
int x,i;
int flag = 1;
printf("input x : "); scanf("%d",&x);
for(i=2;i*i<=x;i++){
if(x%i==0){
flag = 0;
break;
}
}
if(flag) printf("\n %d is prime number.\n",x);
else printf("\n %d is composite number.\n",x);
return 0;
}
仕様は分かるが要求に無理があるのではないか?
>>716 もついでに書いてみた。
コンパイルはしたけど実行はしてない。
#include <stdio.h>
#include <stdlib.h>
unsigned int maxAvail()
{
unsigned long n = 1;
char *p;
do {
p = malloc(n);
if (p != NULL) { memset(p, 0, n++); free(p); }
if (n > 4 * 1024 * 1024 * 1024) return 0xFFFFFFFF;
} while (p != NULL);
return --n;
}
int main(void)
{
printf("%d\n", maxAvail());
return 0;
}
743 :
デフォルトの名無しさん :2009/08/02(日) 00:59:03
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): 2つの整数をキーボードから入力し、それらの最大公約数を表示するプログラムを作成せよ。 最大公約数と、2つの数字を割り切る最大の整数のことである。 例えば12と18の最大公約数は6,24と48の最大公約数は24である。 [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン:Visual Studio 2008 [3.3] 言語: C [4] 期限: 09年08月03日 [5] その他の制限:特になし。
>>743 #include <stdio.h>
int gcd(int a, int b)
{
int c;
while (b) { c = a % b; a = b; b = c; }
return a;
}
int main(void)
{
int a, b;
printf("input number >> "); scanf("%d", &a);
printf("input number >> "); scanf("%d", &b);
printf("GCD(%d, %d) = %d\n", a, b, gcd(a, b));
return 0;
}
配列を使用して次のデータの合計を計算し、得点の高い人から並び替えその出力を求めよ。 入力データ↓ (学籍番号 国語 数学 理科 社会 英語) 10 65.0 55.0 74.0 63.0 67.0 20 45.0 63.0 67.0 58.0 73.0 30 72.0 62.0 56.0 77.0 54.0 40 58.0 71.0 77.0 67.0 43.0 50 66.0 58.0 81.0 82.0 55.0 出力のイメージは (ヘッダー、見出し) 学籍番号 国語 数学 理科 社会 英語 合計 XX XX.X XX.X XX.X XX.X XX.X XX.X(合計得点の1番) XX XX.X XX.X XX.X XX.X XX.X XX.X(合計得点の2番) XX XX.X XX.X XX.X XX.X XX.X XX.X(合計得点の3番) ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ですよろしくお願いします。
746 :
745 :2009/08/02(日) 01:53:04
すいません745です 上記の問題をよろしくお願いします。 [1] 授業単元:プログラミング [2]上記 [3] 環境 [3.1] OS: (Red Hat Linux) [3.2] コンパイラ名とバージョン: (xemacs) [3.3] 言語: (C) [4] 期限: ([2009年8月3日まで]) [5] その他の制限: (for文と配列でお願いします。)
747 :
デフォルトの名無しさん :2009/08/02(日) 06:36:01
751 :
745 :2009/08/02(日) 15:44:48
747さん本当にありがとうございます。ちなみに入力データを自分で入力して出力に反映させるには、scanfを使用すればいいのですか? 問題文に記載し忘れていて大変申し訳ないのですが、入力データは任意の値 なので、その場合どのような文になりますか?
>>731 変換指定子%〜がOSによっては文字化けすることがあるんです
>>754 printf("%5s%Akko$4s〜
で、%AkkoのAkkoが化けるときと化けないときがあります
>>755 %Aは十六進浮動小数点変換を意味する。%Aが使えない環境でも%を出力するという保証はない。
printf系で%を出力させるには書式文字列で%%を指定すればいい。
>>756 間違えました、すみません。Akkoのうち、Aが%Aと認識して
Aの部分だけ化けるときと化けないときがあるんです
OSで違いが出ているんです
>>758 すみません、%Aが使えない環境ってどういうのでしょうか?
>>760 % を出力したければ %% と書けばいい
それだけの話じゃないの?
>>761 ごめんなさい。%は不要なんです。Akkoと表示したいのに、Akkoの前の%が邪魔で
Aが化けるときがあるんです。
>>762 何を言いたいのかさっぱり分からない
邪魔なだけなら消せばいい
printf("%5s%%Akko$4s〜\n", "hoge");
↓
hoge%Akko$4s〜
printf("%5sAkko$4s〜\n", "hoge");
↓
hogeAkko$4s〜
%が邪魔なら%消せよアホか
ごめんなさい。%Aが有効になるのはどういうときか聞きたかったんです。
767 :
デフォルトの名無しさん :2009/08/02(日) 20:57:15
???
>(C99 にはあるが SUSv2 にはない) a 変換では、 OSによってprintfの挙動が違うとか言ってるけれど、処理系の実装に差があることが分かってないのが真相てことかね? だったらOSとコンパイラ晒せば解決だな
>>768 OSはAIXです。バージョンによって化けます
>>716 一応出来たが自分の環境だとsegmentation fault
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned int maxAvail(){
unsigned int l = 0,r = 0xFFFFFFFF,m;
char* mem;
mem = (char*)malloc(r);
if(mem != NULL){
memset(mem,0,r);
free(mem);
return r;
}else{
while(r<l){
m = (l+r)/2;
mem = (char*)malloc(m);
if(mem != NULL){
l = m;
memset(mem,0,m);
free(mem);
}else{
r = m;
}
}
}
return l;
}
int main(){
printf("%u",maxAvail());
return 0;
}
>>771 3ヶ所修正したら動いた。(VC++2005)
修正前 → 修正後
while(r<l) → while(l<r)
m = (l+r)/2; → m = (l+r)/2+1;
r = m; → r = m-1;
僕はこうやる。 max_size = 0; for (bit = 0x80000000; bit > 0; bit >>= 1) { mem = malloc(max_size | bit); if (mem != NULL) { free(mem); max_size |= bit; } }
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 任意の自然数aと実数bを受け取り,方程式 x^a=b の解を計算するプログラムを作成せよ(ここでx^aはxのa乗). ただし,累乗根の計算には,ニュートン法などの数値解法を用いること. また,解が無い場合はその旨を出力するよう例外処理をすること. [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc だと思います。 [3.3] 言語: C(C/C++/どちらでも可 のいずれか) [4] 期限: [2009年8月3日18:30まで] [5] その他の制限:特になし よろしくお願いします。
775 :
デフォルトの名無しさん :2009/08/03(月) 00:15:33
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 以下の機能を持った関数を含むプログラムを作成せよ. 1.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いて作成せよ. 2.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いないで作成せよ. [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ名とバージョン:gcc だと思います。 [3.3] 言語: C [4] 期限: [2009年8月3日18:30まで] [5] その他の制限:特になし よろしくお願いします。
>>770 printf("%debug")と書いたら化けました。なぜですか?(ちなみに%は出力したくないです)
と本質的に変わらんのはわかるよな?
779 :
デフォルトの名無しさん :2009/08/03(月) 04:10:43
>>776 1.
int nCr(int n, int r){ return n == r ? 1 : r == 1 ? n : nCr(n, r-1) * (n - r + 1) / r; }
int nCr(int n, int r){ return n == r ? 1 : r == 1 ? n : nCr(n-1 ,r) * n / (n - r); }
int nCr(int n, int r){ return n == r ? 1 : r == 1 ? n : nCr(n-1, r-1) * n / r; }
int nCr(int n, int r) { return n == r ? 1 : r == 1 ? n : nCr(n-1, r-1) + nCr(n-1, r); }
>>773 君は変数宣言を忘れてる。
#include <stdio.h>
#include <stdlib.h>
int main(){
int max_size, bit, *mem; // 追加
//<---->
return 0;
}
783 :
デフォルトの名無しさん :2009/08/03(月) 10:19:03
[1] 授業単元: プログラミング実習 [2] 問題文(含コード&リンク):台形公式により関数y=x^2とx軸によって挟まれる部分のx=0〜x=8までの範囲の面積を求めよ。 分割は4で計算せよ。 [3] 環境 [3.1] OS: ソラリス [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: (C) [4] 期限: ( [無期限]) [5] その他の制限: (無し) お願いします。
>>786 #include <stdio.h>
double func(double x) {return x*x;}
int main(void){
double x;
double sum = 0;
for(x=0.0;x<8.0;x+=2.0){
sum += ( func(x) + func(x+2.0) ) * 2.0 / 2;
}
printf("sum = %lf\n",sum);
return 0;
}
788 :
デフォルトの名無しさん :2009/08/03(月) 21:53:14
>>788 過去にもπを多桁出力させる宿題にはたくさん解答してきましたが、N進法ですか?これはこまった。もう狙い撃ちされてますねえ。
N進法はいいんですけどね マチンの公式でも使って多倍長計算するしかないか・・・
無限に出力ってのは普通の多倍長計算でいいのかね 上の桁から計算していかなきゃいけないような気がするんだが
東大の金田とかいう先生のライフワークに近いんじゃ?それって
真面目にやったらD論書けるレベルの問題ってことか
>>794 ・問題文は、出題されたまま全文を書いてください。
796 :
794 :2009/08/04(火) 08:27:00
>794 もうどうにでもなれ /* * getHashValue()がkey == NULLのときに0を返すのはよくない * こういう場合は、負値を返すべきである * * 命名規則も気にくわない * hashtable[]がNULL初期化されていないのでうまく動く確率は零ナインに近い */ int hashvalue; KeyAndData *kd = NULL; if ( key == NULL ) { return NULL; } hashvalue = getHashValue(key); for ( kd = hashtable[hashvalue]; kd != NULL; kd = kd->next ) { if ( strcmp(key, kd->key) == 0 ) { return kd; } } return NULL;
>>797 グローバル変数だから 0x00 で初期化されているから
多くの環境で NULL と等価な扱いになると思う
>>800 適当なエディタで編集すればいける。
エディタは使えるよな?
>>800 C:\>EDLIN.EXE AUTOEXEC.BAT
EDLIN は使えるよな?
もしくは、
C:\>NOTEPAD.EXE AUTOEXEC.BAT
>>804 役職名は「○○教授」だけでいいようで
区別はしなくてもかまわないみたいです。
806 :
デフォルトの名無しさん :2009/08/04(火) 17:12:12
[1] 授業単元:インタラクティブコミュニケーション
[2] 問題文(含コード&リンク):関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを
作成せよ。プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素
として含まれていれば加点。
[3] 環境
[3.1] OS: WindowsXP
[3.2] Visual Studio 2005
[3.3] 言語:C言語
[4] 期限: 8月17日(月)17:00(早いほうが望ましい)
[5] その他の制限: 習ったのは
ttp://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.htmlに載ってる事です 。
この範囲内で作って頂けると嬉しいです。
#include <windows.h>は使わないようにお願いします。
出来れば色んな方の作品があることが望ましいです。
>>806 #include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int i;
if (strlen(argv[0]) < 1) { puts(""); return 0; }
putchar(**argv);
argv[0]++;
main(argc, argv);
}
[1] 授業単元:プログラミング実習 [2] 問題文 シンプソンの公式のよりy=x^2とx軸によって挟まれる部分のx=0〜8までの範囲の面積を求めよ。分割数は4で計算せよ。 [3] 環境 [3.1] OS: ソラリス [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: (無期限) [5] その他の制限: なし お願いします。
>>802 ほー、XP にもedlin が入っていたなんて今の今までしらなかった。感動した。
811 :
デフォルトの名無しさん :2009/08/05(水) 00:54:58
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
入力として与えられた文字列のアナグラム(anagram)を出力するプログラムanagram.cを作成せよ。
% ./a.out
String: abc
abc acb bac bca cab cba
%
入力する文字数が増えると計算時間はどのように変化していくかを考えよ。プログラムの実行時間は、「time」コマンドを使用して計測せよ。timeコマンドの結果のうち、ユーザ時間がプログラムの実行時間になります。
% time ./a.out
String: abc
abc acb bac bca cab cba
real 0m0.002s
user 0m0.000s
sys 0m0.001s
%
http://mdl.media.gunma-u.ac.jp/moodle09/file.php/97/program/anagram-skel.html [3] 環境
[3.1] OS:ソラリス
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日中
[5] その他の制限: ポインタまで
812 :
デフォルトの名無しさん :2009/08/05(水) 01:01:44
続けて申し訳ありません [1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク): 引数に度(degree)をとるsin_degree関数を作成しなさい。math.hで宣言されているsin関数を使用せずに自作すること。 [3] 環境 [3.1] OS:ソラリス [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 本日中 [5] その他の制限: ポインタまで よろしくお願いします
>>812 double sin_degree(double degree)
{
double theta;
theta=(degree-90)*M_PI/180.0;
return cos(theta);
}
814 :
デフォルトの名無しさん :2009/08/05(水) 01:25:34
>>812 PCやITなら兎も角,他所の世界で通用するとは限らないぞw
誤爆った。スマソ
>>814 ありがとうございます
とても助かりました
818 :
デフォルトの名無しさん :2009/08/05(水) 09:46:46
>>812 >>813 確かに、sin関数は使ってないけどさ・・・
#include <stdio.h>
#include <math.h>
double sin_degree(double degree){
int i,j;
double sinx=0,temp,k=1.0;
//角度をラジアンに変換
double rad=degree/180*M_PI;
//マクローリン展開
for(i=1;i<20;i+=2){
temp=1;
for(j=i;j>0;j--){
temp=temp*rad/j;
}
sinx=sinx+temp*k;
k*=-1;
}
return sinx;
}
int main(){
printf("%lf\n",sin_degree(45));
return 0;
}
問題は出題者がどう判断するかだな。
>>819 double sin_degree(int degree)
{
double[360] table = {,/*エクセル辺りで作る*/,};
degree %= 360;
return table[degree];
}
テーブルサイズは90にしてもいい
間違えた double sin_degree(int degree) { double table[360] = {,/*エクセル辺りで作る*/,}; degree %= 360; return table[degree]; }
>>822 負の値用に while(degree < 0) degree+=360; も入れとこうぜ
#include <stdio.h> #include <math.h> double sin_degree(double a) { return sin(a*M_PI/180); } int main() { int i; for(i=0;i<=90;i+=10) printf("%2d %f %f\n", i, sin(M_PI/180.0*i), sin_degree(i)); }
825 :
デフォルトの名無しさん :2009/08/05(水) 12:47:24
>>824 math.hで宣言されているsin関数を使用せずに
他のと違って確実却下
その人の名はチャングム(韓国)
>>812 の問題文にはsin(degree)を返す関数をつくれとは書いてないよね。
指定されてるのは引数と関数名だけ。
void sin_degree(double degree) { }
で満点もらえてもおかしくない。
>>829 教官からVOIDと書かれて返されたりして
>>811 適当に改行いれて読みやすくして。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int next_perm(char a[], int size) {
int i, j;
char tmp;
if (size < 2) return 0;
for (i = size - 2; a[i] >= a[i+1]; --i) { if (i == 0) return 0; }
for (j = size - 1; a[i] >= a[j]; --j) { }
tmp = a[i]; a[i] = a[j]; a[j] = tmp;
for (++i, j = size - 1; i < j; ++i, --j) { tmp = a[i]; a[i] = a[j]; a[j] = tmp; }
return 1;
}
int cmp_char(const void *pa, const void *pb) { return *(char *)pa - *(char *)pb; }
int main() {
char a[100], *p;
int n;
printf("String: ");
fgets(a, sizeof(a), stdin);
if ((p = strchr(a, '\n')) != NULL) { *p = '\0'; }
n = strlen(a);
qsort(a, n, 1, cmp_char);
printf("%s", a);
while (next_perm(a, n)) { printf(" %s", a); }
printf("\n");
return 0;
}
833 :
デフォルトの名無しさん :2009/08/05(水) 16:15:04
>>806 を誰かお願いします。
>>807 これってどういったプログラムなんでしょうか?
よくわからない結果がでたんですが・・・
>>833 int main(int argc, char **argv) { puts(argv[0]); return 0; }
と一緒
文字列と一緒に??
>807は再帰呼出がわかっていないようだ、効率も悪い、規格準拠していない
>>838 > 再帰呼出がわかっていない
これだけ全く意味が分からない
>>841 mainを再帰で呼び出すソースは初めてみたなw
再帰の終端条件が色々と気持ち悪いな… argv[argc] == NULL だっけ? 鼻から悪魔アドレスだっけ?
>>842 コードゴルフスレへいけばポピュラーなんだけどね
>>845 あースマン
再帰でargvを総なめ巡回してるのと勘違いしたたたたた
>840 main()は最後に数値として何を返すかわからない if (strlen(argv[0]) < 1)はif (*argv[0] == '\0')で良い main()の再帰呼出、int main(int, char**)はintを返していない
行き違いがあった。 これならおk? int main(int argc, char **argv) { if (*argv[0] == '\0') { puts(""); return 0; } putchar(**argv); argv[0]++; return main(argc, argv); }
807を通報してみたらとるしま大学(Tolushima-Univ.)内からじゃないと使えないアドレスだと言われた。 なんかどっちもどっちなんでやっちゃっていんじゃないかと思った。俺はやらないが。
間違い。807じゃなくて806な。
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):データファイルからグラフの情報を読み、
隣接リストでグラフを記憶する。隣接リストから隣接行列と頂点の次数を表示させる問題。
問題の詳細、必要なファイルはzipに入れました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9884.zip [3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: Visual Studio 2008
[3.3] 言語: C
[4] 期限:8月6日 21:00
[5] その他の制限:ヒントを頼りに途中まで書いてみましたが、勉強不足のため
解らなくなってしまいました。急ですが、よろしくお願いしますm(__)m
855 :
854 :2009/08/06(木) 13:55:42
>>855 addListの前にfindListを入れて、!=NULLでcontinueしたらどうかな?
>>854-855 さんありがとうございます。それぞれの関数と動作を確認しました。
大変助かります!
>>856 さん 余裕があれば少し試してみます!
859 :
デフォルトの名無しさん :2009/08/06(木) 16:19:43
ちくるなとは書いてないし、特定可能っぽい回答ついたしってことで 暇つぶしにメール送ってみたんじゃない? そしたらとるしまとか言われたのでつい書き込みたくなったと。たぶん。
>>858 strcat(vs,".dem");
printf("%s",vs);
rename("pov.dem", vs);
864 :
851 :2009/08/07(金) 00:13:53
>>859 何がしたいか本心を言えば、通報したあとで806に真剣に取り組みたかった。
「出来れば色んな方の作品があることが望ましいです。」に挑発されたともいう。
あと夏休み関係ないっす。
学校に連絡をしないと真剣に取り組めない理由がよくわからん あとそんな言葉で挑発されるってのもどうかと思うぜ
夏休みだからね
_.。ャぁて丕刀フ7ゎ。._ ,.ィ炙ヲi≠┴⇒弍j込ス>。 . ,ィ升ヲナ'´ `゙'<弖心、 . ;夕フア´ \ホi心. んfiУ ▽ij∧ 从j'Y ∨iハ . 斤W kい |友カ }ソ川 . い叭 仄ガ . Wi从 从ノリ . ∀t△ ∧fリ/ ゙マじへ、 /リiУ \夊id、_ ,.イ!刋/ `マ才i「≧ェ。。.__。っ夭テ少'゚ `゚'' ミあらぶる鷹=‐'´
869 :
デフォルトの名無しさん :2009/08/07(金) 18:10:06
>>868 宿題がすべてできました。すごいパワーです。
まさかこんなに効果があるとは思わなかった まあ、夏休み遊びほうけてるだけだろうけど。
871 :
りん :2009/08/08(土) 10:25:59
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): あとから書きます>< [3] 環境 [3.1] OS:Windows [3.2] 今C++Dロードしました [3.3] 言語: C++ 多分。。。 [4] 期限:今日の11時半まで [5] その他の制限:なし どなたかよろしくお願いします><。
872 :
りん :2009/08/08(土) 10:27:20
#define _CRT_SECURE_NO_DEPRECATE 1 /* VisualC++2005 での警告抑制 */ #pragma warning ( disable: 4996 ) #include <stdio.h> //////////////////////////////////////////////////////////////////////// // // 月と日を入力させて、その星座を表示するプログラムを作成すること // // void main(void) { int month; int day; printf("誕生日を入力してください\n"); printf("月:"); // scanf() printf("日:"); // scanf() // 月日より星座を判定して、表示 // あなたの星座は、XX座です }
#include<stdio.h> main(){ int month,day,x; printf("誕生日を入力してください\n"); printf("月:"); scanf("%d",&month); printf("日:"); scanf("%d",&day); x=month*100+day; printf("あなたの星座は、"); if(x>1222||x<121)printf("やぎ"); else if(x<220)printf("みずがめ"); else if(x<321)printf("うお"); else if(x<421)printf("おひつじ"); else if(x<522)printf("おうし"); else if(x<622)printf("ふたご"); else if(x<723)printf("かに"); else if(x<822)printf("しし"); else if(x<923)printf("おとめ"); else if(x<1024)printf("てんびん"); else if(x<1123)printf("さそり"); else printf("いて"); printf("座です\n"); }
874 :
りん :2009/08/08(土) 11:26:05
>873ありがとうございます!!!!!!!!! #define _CRT_SECURE_NO_DEPRECATE 1 /* VisualC++2005 での警告抑制 */ #pragma warning ( disable: 4996 ) #include <stdio.h> 年月日を入力させ、日付の正当性をチェクし、 // 正しい場合は、「有効な日付です」と表示する // 年は、1970年から9999年の範囲とする // 月は、1月-12月とする // 日は、1日-XX日とする(XX日は、各月により異なる) // 閏年も考慮すること int isLeapYear(int year) { return (((year) % 4) == 0) && (((year) % 100) != 0) || (((year) % 400) == 0); } void main(void) { int year,month,day; int days_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; printf("年月日(yyyy mm dd)を入力してください。\n"); scanf("%d %d %d", &year,&month,&day); // 日付が正しければ、「有効な日付です」と表示する printf("有効な日付です"); } これはどうですか?><。
if(year>1969&&year<1e4&&month>0&&month<13&&day>0&&day<=days_month[month-1]+isLeapYear(year))printf("有効な日付です");
まともに動かないネタレスって醜いね
ネタじゃないよ 俺は本気で間違えたのであしからず!!
>>874 if (year < 1970) exit(1);
if (year > 9999) exit(1);
if (month < 1) exit(1);
if (month > 12) exit(1);
if (day < 1) exit(1);
if (day > days_month[month - 1]) {
if (month != 2) exit(1);
if (!isLeapYear(year)) exit(1);
if (day != days_month[month - 1] + 1) exit(1);
}
if (year < 1970) exit(1); if (year > 9999) exit(1); if (month < 1) exit(1); if (month > 12) exit(1); if (day < 1) exit(1); if (month == 2) days_month[month - 1]++; if (day > days_month[month - 1]) exit(1);
あ。 if (year < 1970) exit(1); if (year > 9999) exit(1); if (month < 1) exit(1); if (month > 12) exit(1); if (day < 1) exit(1); if (month == 2 && isLeapYear(year)) days_month[month - 1]++; if (day > days_month[month - 1]) exit(1); だね
お前らいつまでC言語なんてやってるの?麻呂は引退したでおじゃる
>>882 if (month == 2) days_month[month - 1] += isLeapYear(year);
の方が好きだな
if( year>=1970 && year<=9999 && month>=1 && month<=12 && day>=1 ) if( month != 2 && day <= days_month[month-1] || month == 2 && day <= days_month[month-1] + isLeapYear(year) ) printf("有効な日付です");
>>883 結局ものに出来なかったのですね。わかります。
887 :
デフォルトの名無しさん :2009/08/09(日) 16:41:16
[1] 授業単元:ic論 [2] 問題文 キーボードから入力した二つの単語を辞書的順序に表示するプログラムを作れ。 条件は ・関数の呼び出しを使う(main関数とstrcomp関数を使う) ・ポインタを使う ・配列を使う ・例は 「2つの単語を入力してください。 red,green 辞書順序で並び替えるとgreen、redの順になります。」 [3] 環境 [3.1] OS: (Windows vista) [3.2] visual C++ 2008 [3.3] 言語: C++ [4] 期限:2009/08/15 [5] その他の制限:かなりの初心者なのでできるだけ簡単な構造でお願いします。
>>887 見た目は簡素にしてみました。動作は保障しない。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int comp(const void* lhs,const void* rhs){
return strcmp((const char*)lhs,(const char*)rhs);
}
int main(){
static const int ArrayLen =128;
static const int Elements =2;
char str[Elements][ArrayLen]={"",""};
printf("2つの単語を入力してください。単語間は空白で区切ってください\n");
scanf("%s %s",str[0],str[1]);
qsort(str,Elements,ArrayLen,comp);
printf("辞書順序で並び替えると%s、%sの順になります。\n",str[0],str[1]);
return 0;
}
一番簡単だとおもう #include <iostream> #include <cstring> int main() { char word1[32], word2[32]; char * array[2]; std::cout << "2つの単語を入力してください。" << std::endl; std::cin >> word1; std::cin >> word2; if( strcmp( word1, word2 ) < 0 ){ array[0] = word1; array[1] = word2; }else{ array[0] = word2; array[1] = word1; } std::cout << "辞書順序で並び替えると"; for( int i = 0; i < 2; ++i ){ std::cout << " " << array[i]; } std::cout << " の順番になります。" << std::endl; }
890 :
888 :2009/08/09(日) 17:27:10
ちょっとミスってる。 qsort(str,Elements,ArrayLen,comp); ↓ qsort(str,Elements,sizeof(char)*ArrayLen,comp); あんま変わらんけど、だいじなことなので。
>>887 #include<string>
#include<iostream>
#include<set>
struct comp{
bool operator()(const std::string &a, const std::string &b)
{
return strcmp(a.c_str(), b.c_str())<0;
}
};
int main(void){
std::set<std::string, comp> words;
std::string word;
std::cout << "単語を入力してください。";
std::cin >> word;
words.insert(word);
std::cout << "単語を入力してください。";
std::cin >> word;
words.insert(word);
std::cout << "辞書順序で並び替えると";
for(std::set<std::string>::iterator it=words.begin();it!=words.end();++it){
std::cout << " " << *it;
}
std::cout << " の順になります。" << std::endl;
return 0;
}
>>887 例を見るかぎり、カンマ区切りを処理する必要があるとみた
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[100], b[100], *p, *q;
cout << "2つの単語を入力してください。" << endl;
cin.getline(a, sizeof(a), ',');
cin.getline(b, sizeof(b));
if (strcmp(a, b) < 0) { p = a; q = b; } else { p = b; q = a; }
cout << "辞書順序で並び替えると" << p << "、" << q << "の順になります。" << endl;
return 0;
}
893 :
デフォルトの名無しさん :2009/08/09(日) 18:08:35
887です ありがとうございました 参考にさせてもらいました
894 :
デフォルトの名無しさん :2009/08/09(日) 19:14:16
[1] 授業単元: [2] 問題文: 入園料は次のように定められている。ソースコードに続けて完成させなさい 1、5歳以下は無料 2、15歳以下は100円 3、15歳以上の場合、男性は200円、女性は150円 #include<stdio.h> #define MALE 1 #define FEMALE 2 int price( int age, int s); int main(){ [3] 環境 [3.1] OS: Windows vista [3.2] コンパイラ名とバージョン:visual c++ 2008 [3.3] 言語: C [4] 期限: 無期限 [5] その他の制限:ものすごく初心者です。 ifを使ったのですが料金が0になってしまいます。
>>894 15歳の以上と以下で条件被っとるやん
int price( int age, int s)
{
if(age<=5) return 0;
if(age<=15) return 100;
if(s==FEMALE) return 150;
return 200;
}
897 :
894 :2009/08/09(日) 19:56:01
>>すみません!!15歳未満でした!returnに入れると出来るんですね!ありがとうございます。 あの、自分で int main(){ int age, s; printf("年齢を入力してください:"); scanf("%d", &age ); printf("性別を入力してください(男性1、女性2):"); scanf("%d", &s); printf("入場料は%d円です\n", price(age, s)); return 0; } int price( int age, int s){ int result = 0; int price; if(age >= 15){ if(s == MALE){ price = 200; }else{ price = 150; } }else if(age < 15 && age >= 5){ price = 100; }else price = 0; return result; } と書いてみたのですが、どこがおかしいのでしょうか?何度もすみません!
>>897 return result=price;
でおk
899 :
894 :2009/08/09(日) 20:20:11
>>898 出来たー!!!!!うわ、すごいうれしい!!
ありがとうございます!
901 :
デフォルトの名無しさん :2009/08/09(日) 21:04:37
>>895 の作ってやってたんだが完成しかけで停電してデータがパーに…ワロスwww
903 :
807 :2009/08/10(月) 00:38:03
>>895 #include <stdio.h>
int main(int, char**);
int (*f[])(int, char**) = { main };
int main(int argc, char **argv)
{
puts("Hello, world.");
return --argc? (*f[0])(argc, argv): 0;
}
904 :
このプログラム作ってください!( >_ < ) :2009/08/11(火) 04:45:52
1. 以下のプログラムは、勝ち数と負け数を入力して勝率 (= 勝ち数 / ( 勝ち数 + 負け数) )を計算するプログラムである。 勝ち数、負け数に負の値が入力された場合は入力をやり直させ、 勝ち数+負け数が0 の場合は勝率計算が不能であることを表示する。 ただし、このプログラムはバグを含んでおり正しく動作しない。 デバックを行って正常動作するようにせよ。 修正したソースプログラムと実行結果を示すこと。
こっちに来るまでずいぶん時間かかったな 相変わらず以下のプログラムが秘密なままだしテンプレにも従ってないぜ
906 :
このプログラム作ってください!( >_ < ) :2009/08/11(火) 05:20:08
#include <stdio.h> int main(void){ int nwin, nlose; do printf("勝ち数を入力してください:"); scanf("%d",nwin); if (nwin<0) puts("負の値を入力しないでください!"); while(nwin<0); do printf("負け数を入力してください:"); scanf("%d",nlose); if (nwin<0) puts("負の値を入力しないでください!"); while(nlose<0) total = nwin + nlose; if (total = 0) puts("勝率を計算できません。"); else printf("勝率は%dです。\n",nwin/total ); return(0); }
907 :
このプログラム作ってください!( >_ < ) :2009/08/11(火) 05:21:13
2.半径(cm)と中心角(度)(いずれも整数値)を入力して扇形の面積を計算する プログラムを作成せよ。円周率の小数点以下桁数は任意に決めてもよい。 ただし、入力値に以下の処理を加えること。 ・半径に負の値が入力された場合、入力をやり直させる。 ・中心角の入力値は以下のように処理する。 i. 0〜359の場合はそのまま使う。 ii. 負の値の場合、0か正の数になるまで繰り返し360を 加えた値を中心角とする。 (例: -30 -> 330, -450 -> 270 ) iii.360以上の場合、360で割った剰余を中心角とする。 3.正の整数を繰り返し入力し、0 か負の数が入力されたらそこで入力を打ち切り、 そこまでの合計と平均を計算するプログラムを作成せよ。 最後に入力した負の数は計算に入れないようにせよ。 また、平均は小数点以下まで算出せよ。 すいません、明日までにお願いできますか?
テンプレートに従ってないのでダメです
909 :
このプログラム作ってください!( >_ < ) :2009/08/11(火) 05:27:55
↑ 【質問テンプレ】 [1] 授業単元: C言語課題 [2] 問題文(含コード&リンク): 上に記載(すいません、先にルール無視してました) [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語: C [4] 期限: 2009年8月12日15時まで。 [5] その他の制限:とくにないです
>>904 はマルチする気まんまんなんで相手にしないように。
>>907 2.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define BUFFSIZE 16
int r(void)
{
char b[BUFFSIZE]; int R;
printf("input radius >> "); R = atoi(fgets(b, BUFFSIZE, stdin));
return R < 0? r(): R;
}
int a(void)
{
char b[BUFFSIZE]; int A;
printf("input angle >> "); A = atoi(fgets(b, BUFFSIZE, stdin));
while (A < 0) A += 360;
return A % 360;
}
int main(void)
{
printf("%f\n", pow(r(), 2) * M_PI * a() / 360);
return 0;
}
>>907 3.
#include <stdio.h>
int main(void)
{
int a, n = 0, s = 0;
scanf("%d", &a);
while (a > 0) { s += a; n++; scanf("%d", &a); }
printf("go-ke-: %d, he-kin: %f\n", s, (double)s / n);
return 0;
}
>>904 #include <stdio.h>
#include <stdlib.h>
#define BUFFSIZE 16
int main(void)
{
int nwin, nlose, total;
char buff[BUFFSIZE];
do {
printf("勝ち数を入力してください:");
if ((nwin = atoi(fgets(buff, BUFFSIZE, stdin))) < 0)
puts("負の数を入力しないでください!");
} while (nwin < 0);
do {
printf("負け数を入力してください:");
if ((nlose = atoi(fgets(buff, BUFFSIZE, stdin))) < 0)
puts("負の数を入力しないでください!");
} while (nlose < 0);
if ((total = nwin + nlose) == 0)
puts("勝率を計算できません。");
else
printf("勝率は%fです。\n", (double)nwin / total);
return 0;
}
#include <stdio.h> int main(void){ int nwin, nlose, total; do { printf("勝ち数を入力してください:"); scanf("%d", &nwin); if (nwin<0) puts("負の値を入力しないでください!"); } while(nwin<0); do { printf("負け数を入力してください:"); scanf("%d", &nlose); if (nlose<0) puts("負の値を入力しないでください!"); } while(nlose<0); total = nwin + nlose; if (total == 0) puts("勝率を計算できません。"); else printf("勝率は%.2fです。\n",(float)nwin/total ); return(0); } C:\>a 勝ち数を入力してください:-3 負の値を入力しないでください! 勝ち数を入力してください:23 負け数を入力してください:-3 負の値を入力しないでください! 負け数を入力してください:34 勝率は0.40です。
915 :
デフォルトの名無しさん :2009/08/12(水) 22:02:16
やべえかな関数化しようか?
>>915 これqsort()を利用しちゃだめなのかな?
--------------------
#include <stdlib.h>
(略)
/*ソートする関数を使い、文字列を昇順にソート*/
qsort(string, 5, 10, strcmp);
(略)
--------------------
もし5とか10の数字を生で書くのがいやなら
qsort(string, sizeof(string)/sizeof(string[0]), sizeof(string[0]), strcmp);
>>919 qsort()の引数にstrcmp()をそのままってのはどうなのかね。
少なくとも俺の環境では無理なんだけど。
キャストでコンパイルはできるけど期待通りには動かない。
>>920 環境とソースコードを示すべきだ
気になって眠れないじゃないか
>>921 環境は cygwin + gcc3.4.4
キャストしなくてもコンパイルはできたわ。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *s[] = { "int", "main", "void", "char", "qsort", "strcmp" };
qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), strcmp);
{ int i; for (i = 0; i < sizeof(s) / sizeof(s[0]); i++) puts(s[i]); }
return 0;
}
実行結果
int
main
void
char
qsort
strcmp
ちなみにqsort()とstrcmp()を使うんならこうする #include <stdio.h> #include <stdlib.h> #include <string.h> int cmpstr(const void *a, const void *b) { return strcmp(*((char **)a), *((char **)b)); } int main(void) { char *s[] = { "int", "main", "void", "char", "qsort", "strcmp" }; /* qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), strcmp); */ qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), cmpstr); { int i; for (i = 0; i < sizeof(s) / sizeof(s[0]); i++) puts(s[i]); } return 0; } 実行結果 char int main qsort strcmp void
>>922 char *s[]
の部分を
char s[][10]
に変えてくれないか?
なんで正しい結果にならないんだろ? #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char *s[] = { "int", "main", "void", "char", "qsort", "strcmp" }; qsort(s, sizeof(s) / sizeof(s[0]), sizeof(s[0]), (int (*)(const void *, const void *))strcmp); { int i; for (i = 0; i < sizeof(s) / sizeof(s[0]); i++) puts(s[i]); } return 0; }
あっそうかポインタ配列を文字列とみなすのは間違ってるな
>>925 strcmp を使ってポインタの大小を比較しているからだと思うよ
そうだな よく考えると危ないな 文字列は'\0'でターミネートされる決まりになってるけど ポインタはそうでないから下手をすると暴走する危険もあるわけか
strcmpには実質的にchar**が渡ってることになるから正しく 動作しない
そう考えるとCは良くも悪くも何でも出来てしまうなあ
いやだからポインタ配列の中にあるアドレスを 文字列とみなして比較するって事でしょ?
**がボイン太のボイン太だと知ってのことか?
ポインタ配列は**だが、その要素をアクセスした時点で *は一個外れて*になってるよ
つーかポインタを表記する仕様を決めたやつでてこいよ
その通りだが、”文字列列”の順序とは無関係なものになる
例えばこういうことでしょう 80000102->"int" 80000106->"main" 8000010b->"void" とかになってて、この80000102とか80000106を文字列と 見なしてqsort掛けてるわけで 大抵のCコンパイラはコンパイルする時に文字列が出て来た 順番にアドレスをセットするから初めからソートされてる形に なってて、qsort()しても結果は変わらないという
正しくは(規格違反になってしまうが) char *s1=&"int"; //Cではリテラルは変更不能な初期化済ブロックとなる char *s2=&"main"; .......... として char *(s[])={s1,s2,....}; とすべき これではメンドイし貴重なな名前空間の浪費なので char *(s[])={"int","main",....}; という略記法が認容されるようになったと考えるのが自然
あーでもCPUだとリトルエンディアンの場合もあるから そう簡単にはいかないか どちらにしてもたまたま動いているだけで結果はおかしなものになる
qsortをクソートと言っているのは俺だけじゃないはず
クイックソートって読んでた…
中身はクイックソートなんだが、古いCは識別子が6文字までしか 認識しなかったので、quicksortにすると"quicks"と見なされてしまう それよりも"qsort"の方がいいと思ったんだろう これなんかはまだいい方でstring.h系の関数の名付け方は ひどいものがあると思う strstrとかstrcspnとか関数名を言われてパッと何をする関数なのか わからんし
その割にはstrcspnは6文字じゃないですね 名付けで一番気になるのはO_CREATだなあ
strcspsとかそういう名前の関数を意図的に作らないようにして 7文字でも実質的に6文字までしか認識しない処理系でも 問題ないようにしてたんだろう ANSI-Cになってからようやく32文字まで認識するようになった しかし古い標準関数の名前はそのままそっくり受け継いだ 俺が気になっているのは creat() だよな
>>919 以降で分からないところがあったんでK&Rを引いてみたら
charへのポインタの配列とcharの配列の配列の違いはp.139,
qsortにstrcmpを渡す例はp.145に載ってた
付録抜いたら230ページなのに論点のカバー率半端ないっす
>>946 まあ今回のqsort()の引数にstrcmp()を渡す話には
charへのポインタの配列とcharの配列の配列の違いは
関係ないけどね
>>947 え、そうなの?
char *s[] だとstrcmpがポインタの大小を比較してしまうのに対し
char s[][ELEM_SIZE] だと文字列の大小を比較することになるから
charへのポインタの配列とcharの配列の配列の違いが肝心だと思ったんだけど
>>948 >char *s[] だとstrcmpがポインタの大小を比較してしまうのに対し
>char s[][ELEM_SIZE] だと文字列の大小を比較することになるから
んなこたーない。どっちも文字列の大小を比較する。
問題になってるのはqsort()の引数。
int strcmp(const char *A, const char *B)
void qsort(void *base, size_t num, size_t size, int (*compare)(const void*, const void*))
>>923 これを見て分からなかったら要勉強。
952 :
950 :2009/08/13(木) 13:03:05
953 :
948 :2009/08/13(木) 13:08:59
>>949 >>925 の場合、strcmpに渡るのはchar **なので、strcmpはポインタを左から1バイトずつ比較
>>923 の場合、*((char **)a)、つまりchar *なので、strcmpは文字列を比較
strcmpにポインタの大小を比較する能力を求めてはいけない
char a[1]; &a==a; char *b; &b!=b; これだけの話
[1] 授業単元: C言語課題 [2] 問題文(含コード&リンク): 入力した値を n とし、階乗の逆数の和 1 + 1/1! + 1/2! + 1/3! + ...... + 1/n! と、 ネピア数(M_E)との比を計算し、小数点以下第 6 位 まで求めて表示しなさい。繰り返しは for 文を使わず while 文か do-while 文を利用して作成すること。 [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] 言語: C [4] 期限: 2009年8月14日。 [5] その他の制限:なし お願いします。
ここは俗に【丸投げスレ】と呼ばれるスレでして この話題は【とりあえず質問スレ】レベルの話題ではないかと。 もしかすると【ちょっと深い質問】スレの話題になるかも 知れないが「浅い!」と却下されるか。 【クィックヘルプ】スレじゃIDEのデバッガ使えとケンも ホロロだろうな
>>956 #include <stdio.h>
#include <math.h>
int main(void)
{
int i = 0, n;
double sum = 0, a = 1.0;
scanf("%d", &n);
do {
sum += a;
a /= ++i;
}while(i < n);
printf("%.6f", M_E / sum);
return 0;
}
あってね?
あってるな
959は一体958をなんだと思ったんだろうか
単に解説しただけとか
>>965 即レスありがとうございます!助かりました。
967 :
806 :2009/08/14(金) 01:38:43
>>902 さん
>>903 さんありがとうございます。
ですが
>>806 に条件追加されました。
[1] 授業単元:インタラクティブコミュニケーション
[2] 問題文(含コード&リンク):関数の呼び出し」、「配列」、「ポインタ」のすべてを使用したプログラムを
作成せよ。プログラミング力 + オリジナリティ、文字列、再帰が本質的な要素
として含まれていれば加点。
[3] 環境
[3.1] OS: WindowsXP
[3.2] Visual Studio 2005
[3.3] 言語:C言語
[4] 期限: 8月17日(月)17:00(早いほうが望ましい)
[5] その他の制限: 習ったのは
ttp://www.ncc-1701.jp/kakei/InteractiveComm/IM_top.htmlに載ってる事です 。
この範囲内で作って頂けると嬉しいです。
#include <windows.h>は使わないようにお願いします。
出来れば色んな方の作品があることが望ましいです。
(new)ソースコードには「何をしようとしている」プログラムなのか等がわかるように適宜コメントを付ける。
よろしくお願いします。
>>967 これ、専ブラ経由でリファラ拾われたらncc-1701の人にバレちゃうけど平気なの?
プログラムに何をさせたいんだその先生は。
>>968 大丈夫じゃね?
受講生のみの閲覧と制限してないんだし
972 :
デフォルトの名無しさん :2009/08/14(金) 09:12:18
#include <stdio.h> int main(void) { int a; int i; for (i=0;i<10;i++){ a[i]=9999; printf("%d\n",a); } fflush(stdin); getchar(); return 0; } 無効な間接参照って出るけどなんで??
aが配列になってないのになんで a[i]=9999; とかなってるの?
エラーメッセージとは関係ないけど fflush(stdin); はやめなされ 動作が標準で定義されていない VC特有の機能で入力バッファをクリアするのは知ってるけど
976 :
デフォルトの名無しさん :2009/08/14(金) 10:37:39
>>976 _getch()とかあるだろう
趣味でやってるならともかく、将来グラマになりたいのなら
悪い癖は今の内に取っておく事だな
それからここは宿題スレだ スレとしてC/C++の標準で定義されていない未定義の動作を する書き方は推奨されない
自分でコマンドプロンプトを開いてから実行すればいいと思う。
>>978 課題で出されたサンプルプログラムがふつうに
void main(void)
なんて書いてあったりするから困る
981 :
デフォルトの名無しさん :2009/08/14(金) 10:53:04
>>981 俺はデスクトップにcmd.exeを実行するショートカットを置いて
それを使っている
しかしIDE環境の中からでは役に立たないよね?
>>982 別に、はじめのうちはそれでいいと思うが。
最低限プログラムを理解するうえで関数宣言とかの部分の意味なんて
後から理解できればそれで問題がないと思うよ。
あれ?Winキー+R押してcmdってうつのって少数派?
キーボードで操作できるランチャーに登録してる
C言語で記述されていると、***貴方が***認めることが出来る 記述ではライブラリ関数の動作仕様まで規定することは出来ないし void main(void)を禁止することも出来ません。 特定のコンパイラが特定のライブラリ関数やエントリーポイントの 動作が標準と異なる場合はそれを標準Cコンパイラとみなさなければ いいだけの話です。(純粋な意味での標準Cコンパイラは存在しない でしょう。但しMSのC処理系はWindowsに合わせて相当に手が 加えられており標準Cの学習には向かないかも知れません)
>>986 >[3.3] 言語:C言語
これだけの条件しか出されていない時は標準で定義されていない
Cの機能は使うべきではない
>[3.2] Visual Studio 2005
とか書いてあったらいいかもしれないけど
[3.2] gcc4.4.0/Linux と書いてあったら諦めましょう
点プレに記載すべき事柄 ★コードは回答者によって十分なテストが行われており、そのまま提出 しても大丈夫な場合が多いですし回答者どうしで相互チェックもそれな りに行われているとも思いますが、それでも求められているもの と異なる場合があり得ます ★回答者は質問点プレで記載されている処理系上で動作するように 回答すれば良いのですが、他の処理系でコンパイル可能だが 著しく動作が異なるとか動作しない場合は処理系依存と明記した ほうがいいと思います。 (ライブラリが無く他の処理系ではコンパイル不能な場合はこの 限りではありません)
>>977 GCCでは、getch() は使えないのか?
mingw/conio.hとか有るけど、これは使えないのか?
もう次スレ立ってるって
>>990 回答処理系にMinGWを指定してくる出題者はほとんどいないだろう
大抵Linuxだ
993 :
デフォルトの名無しさん :2009/08/14(金) 15:31:43
getcharじゃだめなの?
994 :
デフォルトの名無しさん :2009/08/14(金) 15:32:46
>>993 scanf()を使った後なんかだとバッファに改行が残るので、getchar()で止まってくれないんだ
int n;
scanf("%d", &n);
getchar(); /* ここで入力待ちしたいが待ってくれない */
↓
int n;
scanf("%d", &n);
while (getchar() != '\n') {} /* 改行まで読み捨てる処理が必要 */
getchar();
996 :
デフォルトの名無しさん :2009/08/14(金) 16:38:55
>>995 それだけなら
scanf("%d", &n);
rewind(stdin);
getchar();
1000 :
デフォルトの名無しさん :2009/08/15(土) 12:27:00
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。