2 :
デフォルトの名無しさん :2006/12/13(水) 02:12:54
2げとずざ
3 :
デフォルトの名無しさん :2006/12/13(水) 02:26:16
4 :
ともやん :2006/12/13(水) 10:38:26
始めまして。 いきなりなんですが、どうしてもできないプログラムがあります。 「ある打撃点から目標に向かって的狙を行い、命中させるゲームプログラム。 打撃点から目標到達点までの距離、障害もでの距離、高さ、風速を初期設定条 件とし、ゲームを行う者には目標点もでの距離と風速のみ知らされる。打撃点 からの玉の発射角、初速を設定すると、玉到達距離を計算し、目標との差を表示する。」 というものです。 よろしくおねがいします。
6 :
ともやん :2006/12/13(水) 10:40:13
7 :
ともやん :2006/12/13(水) 10:41:56
↑の質問 [3] 環境 [3.1] OS: Windows [3.2] 言語: C++ [4] 期限: 2006年12月20日9:30まで
>>4 打撃点と目標の高さは同じなのか?
障害にぶつかった場合に跳ね返ることも考慮するのか?
跳ね返るとしたら反発係数は?
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 有効長 n の配列 arr[] の最大要素の位置を求める関数 int arr_max_pos(int arr[], int n) を再帰法で定義する。最大要素が複数ある場合は、前の方の位置を返す。 初期条件 n=1 のとき、最大要素は arr[0] であるから、位置 0 を返す。そうでないとき、有効長 n-1 で関数を適用した結果と、最後の配列要素 arr[n-1] とを比較して、大きい方の位置を返す。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン: bcc32 [3.3] 言語: C言語 [4] 期限:2006/12/13 18:00 [5] その他の制限:
>>9 int arr_max_pos(int arr[],int n){return n-1?(arr[arr_max_pos(arr,n-1)]>=arr[n-1]?arr_max_pos(arr,n-1):n-1):0;}
11 :
9 :2006/12/13(水) 11:34:12
その他のところで書くべきだったのですが。 //==================================================================== // 前処理 //==================================================================== //==================================================================== // 大域宣言 //==================================================================== //==================================================================== // メイン関数 //==================================================================== int main(void) { //---- 宣言 //---- 入力 //---- 計算 //---- 出力 //---- 終了 return 0; } //==================================================================== // ユーザ関数 //==================================================================== こういう形式で出力できるようにプログラムを書いていただけませんか;;
>>11 #includeや配列の宣言、最後のprintfくらい自分で書いてくれー
そしたら追加してやるから
>>11 それは少なくとも「C言語」ではない何かだなぁ。
//コメントはC++のものだ。
まぁbccでは通してくれるのかもしれないが。
Cといいつつそんな下らないフォーマットの指定と
誤ったコメントのつけ方を指定する教官はアフォだな。
15 :
デフォルトの名無しさん :2006/12/13(水) 11:49:54
[1] 授業単元:C言語 [2] 問題文:以下の通り関数を作成せよ。 文字列を格納した配列をポインタ引数で受け取りデコードする。 文字列中に%があれば、その後ろ二文字(数字です)を2桁の16進数とみなし、コードに変換する。 変換して出来た文字列は元の配列に上書きするものとする。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: (gcc 3.4 [3.3] 言語: どちらでも可 [4] 期限: 16日 宜しくお願いします
16 :
14 :2006/12/13(水) 11:50:53
と思ったけど、普通にC99という考え方もあるか。C99なら//もOKだな。 普段C99なんか使ってないから凝り固まってたyo。 カナブンよりもごめんなさい。
[1]関数
[2]
関数を用いて、200x200ピクセルの画像の中心に幅50、
高さ50の四角を書き、画像を平行移動させる関数を作成
して画像をx方向に30、y方向に60だけ平行移動するプロ
グラムを作成しましょう。
?? プロジェクト名:11move ファイル名:11move.c
?? 画像を移動する関数
関数名: move
引数:画像データ,x方向の移動量,y方向の移動量
戻り値:なし
/* 11move.c (2006/12/13) */
/* 学籍番号氏名*/
#include <stdio.h>
#include <stdlib.h>
#define MS 200
void move( unsigned char *, int, int );
main()
{
char fi[50];
int i, j;
FILE *fp;
unsigned short header[13] = {0x4d42, 54490, 1, 0, 0, 26, 0, 12, 0, 200, 200, 1, 24};
unsigned char *bmp;
の続きをお願いします。
詳しくは
http://mobiledatabank.jp/s/src/MDBS1087.pdfの練習問題です 。
よろしくお願いします。
[3]windowsXP
中心点Pからの角度AとBの比較ですが、 どちらが反時計回り方向にあるか比較したいのです。 単純にラジアンの大きさで比較すりゃいいじゃんと言われても 角度0を挟んだ場合、比較がおかしくなってしまいます。 C++だとどう書いたらいいでしょうか?
>>15 #include <ctype.h>
char *percent_decode(char *s)
{
#define ISHEX(c) (isdigit(c) || (c) >= 'A' && (c) <= 'F')
#define HEXDEC(c) (isdigit(c) ? (c) - '0' : (c) - 'A' + 10)
#define HEXCHAR(hi,lo) (((hi) << 4) + (lo))
char *p, *q;
for (p = q = s; p[0]; ) {
if (p[0] == '%' && ISHEX(p[1]) && ISHEX(p[2])) {
*q++ = HEXCHAR(HEXDEC(p[1]), HEXDEC(p[2]));
p += 3;
/*
} else if (p[0] == '+') {
*q++ = ' ';
++p;
*/
} else {
*q++ = *p++;
}
}
*q = '\0';
return s;
}
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 「m個の数字集合からn(0〜m)個の組み合わせを比較し、指定値X以上かつ最小の組み合わせを求める。」 例 インプット 数字集合:5,7,10,12,15 指定値:18 ↓数字集合の組み合わせで、『指定値』以上かつ最小の組み合わせを求める。 アウトプット 最小合計値の組み合わせ:7+12=19 [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: Visual C++6.0 [3.3] 言語: C [4] 期限:特になし よろしくおねがいします。
>>23 mが何個でも対応できるようにしたいのです。
もちろん、個数が多ければ計算時間が膨大になるので算出限界の個数(予想では20個ぐらい?)はあるのでしょうが。
>>24 じゃあ総当りでの算出限界(=待てる限界?)の個数以下で考えればいいの?
26 :
19 :2006/12/13(水) 13:09:32
[1] 授業単元:C++ [2] 問題文(含コード&リンク): 中心点P からの角度 A と B があります。 AとB、どちらが反時計回り方向にあるか判定したい。 中心 P は(X Y) の 2D 点、 角度 A、角度 B はラジアンで取得済み [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名: VC 6.0 [3.3] 言語: C++ [4] 期限: [2006年12月13日14:00まで [5] その他の制限: 特になし
30 :
前988 :2006/12/13(水) 13:29:06
BCDコードの質問をしたものです。989さん、解答有難うございます!!!
>>29 0〜m と書いてあるのは組み合わせの個数であって数字集合の範囲ではない
32 :
デフォルトの名無しさん :2006/12/13(水) 13:34:43
[1] 授業単元:Cプログラミング [2] 問題文: 次の値をバイトオーダ(BigEndian<->Little Endian)に変換するプログラムを 示しなさい。 short value = 0x1234; int value = 0x12345678; [3] 環境 [3.1] OS: (Windows) [3.2] bcc [3.3] C言語 [4] 期限: 無期限 [5] その他の制限: 宜しくお願い致します。
33 :
22 :2006/12/13(水) 13:36:25
>>32 #include <stdio.h>
#include <windows.h>
int main() {
short value = 0x1234;
int value2 = 0x12345678;
printf("0x%x->0x%x\n", value, htons(value));
printf("0x%x->0x%x\n", value2, htonl(value2));
return 0;
}
35 :
22 :2006/12/13(水) 13:45:03
>>25 最適アルゴリズムなら総当りアルゴリズムより計算時間が短縮されると思うので、
mの限界値も大きく取れてより良いのですが、不可能でしたら総当りでも構いません。
>>27 nは任意です。
詳しく言うと、最小合計値の組み合わせに使われた数字の個数がnです。
つーか入力されるものがわからねえ。 例では n は入力されてないようだが、0 〜 m すべてを走ると思ってよいのか?
>>36 例の通り、入力するのは実数です。
>>37 nが0 〜 m のどれになるかは分かりません。
例は7+12の組み合わせが解になり、nは2でしたが、
もし、5+7+10等の組み合わせが解になればnは3になります。
もし、0 〜 m すべてを走って比較した結果、求めるというのでしたらその認識であっています。
>>22 酷いソースだけど書けた
#include <stdio.h>
#define N 5
int a[N] = {5, 7, 10, 12, 15};
int x = 18;
int ansf[N];
int mini;
void search(int f[], int sum, int idx) {
if(sum >= x && sum < mini) {
int i;
mini = sum;
for(i=0;i<N;i++) ansf[i] = f[i];
return;
}
if(sum >= mini || idx == N)
return;
search(f, sum, idx+1);
f[idx] = 1;
search(f, sum+a[idx], idx+1);
f[idx] = 0;
}
int main() {
int i, f[N] = {0};
for(i=0;i<N;i++) mini += a[i];
mini++;
search(f, 0, 0);
for(i=0;i<N;i++) {
if(ansf[i]) printf("%d ", a[i]);
}
return 0;
}
>>38 いや、例は整数で、整数制約があるかどうかは大きく効いてくるんだが
41 :
22 :2006/12/13(水) 14:08:31
>>40 整数であることが前提です。
>>39 ありがとうございます。
試してみます!
#include <stdio.h> #define MAXSIZE 256 #define M 5 int xs[M] = {5, 7, 10, 12, 15}, X = 18; int main() { int i, j, sum = 0; int table[MAXSIZE], prev[MAXSIZE]; /* sum < MAXSIZE */ for (i = 0; i < M; ++i) sum += xs[i]; for (i = 0; i <= sum; ++i) table[i] = prev[i] = 0; table[0] = 1; for (i = 0; i < M; ++i) { for (j = sum; j >= 0; --j) { if (table[j]) { table[j + xs[i]] = 1; prev[j + xs[i]] = xs[i]; } } } for (j = X; j <= sum; ++j) if (table[j]) break; if (j > sum) { printf("no solution\n"); } else { for (i = j; i > 0; i -= prev[i]) printf("%d ", prev[i]); printf("-> %d\n", j); } }
[1] 授業単元:Cプログラミング [2] 問題文: 行単位で、3個以下の単語を入力する。単語の順序を逆にして出力する。 4個以上の入力には、無効メッセージを出す。単語の区切りは、空白である。 空行の入力で処理を終了する。 [3] 環境 [3.1] OS: (Windows) [3.2] bcc 32 [3.3] C言語 [4] 期限: 無期限 [5] その他の制限:入力処理は、関数 gets() と sscanf() で行い、入力数を調べる。 各単語を格納する変数を逆順に出力する。
nとmが固定なら簡単なんだけど、nとm入力させるとめんどくさくなるな。
45 :
42 :2006/12/13(水) 14:25:10
>>42 は整数制約のある場合の別解。
>>39 は O(2^m)、これは O(m S) (S は入力の合計) なので
どちらがよいかは m のサイズと S のサイズによる。
>>44 ならん。n はそもそも入力させないし、
m が入力になったところで十分大きなサイズの配列を
用意するだけでしょ。
47 :
22 :2006/12/13(水) 14:44:44
>>45 どうもありがとうございます。
>>39 の方がmを限界まで大きく出来るみたいです
mが27個までは10秒以内に算出できました。
48 :
45 :2006/12/13(水) 14:54:57
まあ
>>45 は入力総和大きかったらさっぱりだしな。
せっかくだから入力晒してくれ。
>>48 #define N 27
int a[N] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,900,619,630,630,940,945,999,1365,567,609,840,1470};
int x = 6999;
こんな感じでやってみました。
51 :
45 :2006/12/13(水) 15:24:49
>>51 うわ、凄いです。
mが100個超えても即座に出ますね。
総当りアルゴリズムでないんですね。
このアルゴリズムをソースから勉強します。
>>18 適当なんで、微調整必要ならして下さい.
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3179.c
55 :
32 :2006/12/13(水) 16:12:24
>26 p0, p1, p2 が反時計回りの時に正、時計回りの時に負の整数を返す関数である。一直線上に 3 点があれば 0 が返る。 int ccw(point_t p0, point_t p1, point_t p2) { int dx1, dx2, dy1, dy2; dx1 = p1.x - p0.x; dy1 = p1.y - p0.y; dx2 = p2.x - p0.x; dy2 = p2.y - p0.y; if (dx1*dy2 > dy1*dx2) { return +1; } if (dx1*dy2 < dy1*dx2) { return -1; } if ((dx1*dx2 < 0) || (dy1*dy2) < 0) return -2; if ((dx1*dx1+dy1*dy1) < (dx2*dx2+dy2*dy2)) return +2; return 0; }
57 :
デフォルトの名無しさん :2006/12/13(水) 16:17:18
[1] 授業単元:Cプログラミング [2] 問題文: 以下の構造を定義しなさい。 従業員のデータを管理するための構造。 ・氏名(最大8文字)、年齢、生年月日、性別('M':男性、'F':女性) ・入社日、社員番号(最大5桁)、所属事業部コード(最大5桁)、 所属事業部名称(最大20文字) ※typedefを使用して定義すること。 ※アラインメントは、8バイトバウンダリとすること。 [3] 環境 [3.1] OS: (Windows) [3.2] bcc [3.3] C言語 [4] 期限: 無期限 [5] その他の制限: 宜しくお願い致します。
>56 あ・・・座標じゃなく角度だったか。失敬
62 :
43 :2006/12/13(水) 16:50:28
>>52 のプログラムには入力個数に関して、書かれていないのですが、どのようにすれば
入力個数の確認についても触れていただきたいです。
入力個数はsscanfが値を返す。この場合、4個以上入力したら4が返ってくるから 文字列分割のところのifで判定してる。
>58 ありがとうございます。 座標を基に角度を算出していましたので、これでも全然OKです。 気になってCCWで検索かけたら、意味が判りました。 本当にありがとう御座いました。
65 :
43 :2006/12/13(水) 17:02:53
>>63 なるほど、ありがとうございました。
どうにか提出できそうです。
どうにかって何か不満でもありましたか・・・?
すみません。 for(i=0;i<50000;i++){ ntest=calc_n(psi); } みたいなループの中で関数calc_n(psi)を呼んで中で int calc_n(double *psi){ int x; int n; double rnd1,rnd2; rnd1=(double)rand()/RAND_MAX; //0から1までの乱数 x=(int)(rnd1*N); //0からN−1までの乱数 rnd2=(double)rand()/RAND_MAX; //0から1までの別の乱数 if(rnd2>psi[x]/psi[N/2]){ //rnd2がpsi[x]/psi[N/2]より多い場合 n=calc_n(psi); // 残念でした、またどうぞ } else{ // そうじゃなけりゃ return n; // nを返してね } } みたく、calc_nの中でcalc_n呼んでみたらエラーがでました。
68 :
デフォルトの名無しさん :2006/12/13(水) 19:09:53
ああ、で質問は、どうしたら良いでしょうか?という事です。 ついでに上げるのも忘れました
n?
>>67 psiの宣言はどうなってるの?
というか全部見せて
>67 何がしたい関数なのかさっぱりわからんが、returnが足りないのとnに値が入ってない。
73 :
67 :2006/12/13(水) 19:41:01
簡単に言うと、psi[n] (nは0からN-1まで)に比例した乱数をはじき出す 関数を作りたいのです。(はじき出したい場所は最初に書いたループ内) まず、0から(N-1)までの偏りのない乱数をだします(xがそれ)。その値 をpsi[n]に代入して、psi[N/2]で割ります。これはpsi[n]がN/2で最大値だと 過程してるからです。で、その分数は割合を示します。これを別に用意した 0から1までの乱数と比べて、その乱数が今言った割合より少ないときだけ、 xを・・・あれ???ごめん、間違った。nじゃ無くてxを返します。
>psi[n] (nは0からN-1まで)に比例した乱数をはじき出す すまんが意味がよくわからん。 具体的な動作で説明してくれ。
>>73 psiってのは double の配列ってことでいいのか?
>その値 をpsi[n]に代入して どこで?
>>67 まず
if(rnd2>psi[x]/psi[N/2]){
n=calc_n(psi);
return ・・・・・; ← ここの戻り値は何になる?
}
else{
return n; ← ここは x ってことだな
}
あと psi(整数もしくは実数として)の配列は初期値として何が入ってる?
0 だと if(rnd2>psi[x]/psi[N/2]) ここで 0 による除算でエラーになる
78 :
67 :2006/12/13(水) 20:08:33
はい。psi[n] てのをpsi 対 nでプロットしたら山型になてて丁度 真ん中が最高値となってます。(psi[N/2]が最高値ってのはその意味です) xてのは0からN-1まで、均等に乱数がでます。つまり、0が出る確率も N-1が出る確率も、N-3が出る確率もみんな、1/(N-1)ですよね。それを 真ん中らへん(N/2あたり)が出る確率を大きくして、端っこ(0とか N-1あたり)が出る確率を小さくしたいのです。つまり、確立も山型に したいのです。それで、xをpsi[n]に代入すればその乱数値xでのpsiが出され、 psi[n]の最大値、psi[N/2]で割ると割合がでます、その割合を均等に出た乱数値r2 と比べるとうまくいくんじゃ無いかなぁと。 例えばpsi[x]/psi[N/2]の割合が0.3だとします。山でいったらフモト近くですね。 つまり、そこのnが出る確率を少なくしたいのです。で、それを均等に出された 乱数と比べたら・・・0.3以下が出る確率は少ないですよね。だから、もしr2が これ以上の値を出したら却下したいのですわ。
>>67 1. 以下のような要素数N+1の配列sumpsiを作る.
sumpsi[0] = 0.0
sumpsi[1] = psi[0]
sumpsi[2] = psi[0]+psi[1]
sumpsi[3] = psi[0]+psi[1]+psi[2]
...
sumpsi[N] = psi[0]+psi[1]+psi[2]+...+psi[N-1]
2. 0以上sumpsi[N]未満の乱数rndをとる.
3. sumpsi[k] <= rnd < sumpsi[k+1]となるようなkを返す.(返り値は[0, N-1]の整数値)
こんなアルゴリズムでどう?
。。。確率的に止るプログラムはイカンと思う。。。
81 :
67 :2006/12/13(水) 20:21:32
>>75 その通りで。宣言は double psi[N]; となっています。
Nは #define N 100 としてます。
>>76 う〜ん、話せば長くなるけど、最終的にはpsi[n]を安定値にもってく
感じです。
>>77 最初のリターン使って、関数の最初に戻ろうかと。。。無理?
そう、後のリターン値はxです。
psiの初期値はこうなってます。
int n;
for(n=0;n<N/2;n++){
psi[n]=pow((2/L),1.5)*n*dx;
}
for(n=N/2;n<N;n++){
psi[n]=-pow((2/L),1.5)*n*dx+pow((2/L),1.5);
}
>>81 >関数の最初に
func(...)
{
…@
if(rnd2>psi[x]/psi[N/2]){
n=calc_n(psi); ←ここで代入される n はどこで使われる?
@に戻る
}
else{
return x;
}
ということか?
}
とはいえ確率によって無限ループになる可能性もあるわけだが
83 :
67 :2006/12/13(水) 20:38:36
誤解多くてごめん。自分がしたい事は @ if(rnd2<psi[x]/psi[N/2]){ return x; }else.... もしそうじゃなけりゃ、@に戻る。 つまり、if(rnd2<psi[x]/psi[N/2])の条件が出るまで 関数calc_n内でx,psi[x],rnd2を計算し続ける、という事です。
だったら再帰じゃなくてもよくない? っていうかその結果を破棄するのに再帰にする意味がわからん。
85 :
デフォルトの名無しさん :2006/12/13(水) 20:48:13
>>67 再帰じゃなくてこれでいいだろ
int calc_n(double *psi)
{
int x;
double rnd1, rnd2;
do{
rnd1 = (double)rand() / RAND_MAX;
x = (int)(rnd1 * N);
rnd2 = (double)rand() / RAND_MAX;
}while(rnd2 > psi[x] / psi[N/2]);
return x;
}
>>83 結構適当だけど、こんなのどう?
double sum_psi; // psi[]の和
double get_rand() {
int i;
double rnd=(double)rand()/RAND_MAX;
for(i=0;i<N;i++) {
if(rnd <= 0)
return i;
rnd -= psi[i]/sum_psi;
}
}
>>83 int calc_n(double *psi){
int x;
int n;
double rnd1,rnd2;
while(1)
{
rnd1=(double)rand()/RAND_MAX;
x=(int)(rnd1*N);
rnd2=(double)rand()/RAND_MAX;
if(rnd2>psi[x]/psi[N/2]){
return x;
}
}
こうか?
結論から言えばやはり 確率的に無限ループするコードはよろしくない
89 :
デフォルトの名無しさん :2006/12/13(水) 20:57:52
DOSプロンプトで一発でCの実行ファイルがあるところに行けるソフトの ソフトの作り方をおしえて。
>>89 Cの実行ファイルがあるところ
どうやって判断するんだ?
まぁ俺はカレントに cd 特定のパス ってbatファイル作ってある
>>89 explorerのフォルダをプロンプトにD&D
前スレの749で質問をして解答を頂いた者ですが、重要な 間違いをしていました。 「ソートにはバブルソートを用い」と書きましたが 「ソートには選択ソートを用い」でした。 前スレの796さんが下さった解答の ソートの関数の部分だけ訂正すれば良いと思うのですが 解りません。
93 :
デフォルトの名無しさん :2006/12/13(水) 22:20:51
>>90 場所は分かってるんですが、毎回c:\windowsとなるので煩わしいです。
batファイルってcd 特定のパスを書いてどうすればいいのでしょうか?
>>91 本当に大丈夫ですか?ネタっぽいんですが。
>>93 俺は
>>91 じゃないけど、あえて言わせてもらう。
なんでその程度のことすぐに試してみないんだ?
>>93 あ、説明悪かった
現在のドライブと行き先が同じドライブの場合
cd と打ってからD&D
ドライブが違う場合
ドライブ名: と打ってからEnter
それからcd + D&D
まぁ面倒だな
96 :
デフォルトの名無しさん :2006/12/13(水) 22:30:10
[1] 授業単元:Cプログラミング演習 [2] 問題文:50個の整数データを読み込み、それらを小さい順に出力する cプログラムを作成せよ。バブル整列法は使ってはいけない。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 2006年12月23日12:00まで よろしくお願いします マジで分からないです
>96 データはどっから読み込むの?
98 :
デフォルトの名無しさん :2006/12/13(水) 22:33:47
>>94 コマンド入力してないのが怖いです。ファイルが壊れたりしないですか?
>>96 http://pc8.2ch.net/test/read.cgi/tech/1165190320/913- 913 名前:デフォルトの名無しさん[] 投稿日:2006/12/12(火) 21:15:14
[1] 授業単元:Cプログラミング演習
[2] 問題文:50個の整数データを読み込み、それらを小さい順に出力する
cプログラムを作成せよ。バブル整列法は使ってはいけない。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限: 2006年12月23日12:00まで
よろしくお願いします。
914 名前:デフォルトの名無しさん[sage] 投稿日:2006/12/12(火) 21:19:39
>913
前スレにも書いた?
939 名前:デフォルトの名無しさん[] 投稿日:2006/12/13(水) 01:18:43
>>913 何個か書いていただいたのですが
コンパイルはできるものの題意を満たすように
実行できません 間違いとか分からないんで
教えてください
同じやつか?問題をもっと詳しく書かないと話がループするぞ。
>>96 読み込むデータの形式は?どのように記述された数値?
出力するのはプログラム実行中の画面?それとも並び替えたファイルを
最初読み込んだファイルと同じような形式でファイルに保存?
そこをはっきりしないと、誰もあんたが求めるものを書いてくれないよ。
すでにある手法の中からあんたが適切に選べば良いことなんだが。
並び替えた数値データを って書くべきだったか、訂正。
>>93 >DOSプロンプト
コマンドプロンプトのことだよな?
ショートカットのプロパティ開いて作業フォルダに 「場所」 を入れてやればいい
103 :
デフォルトの名無しさん :2006/12/13(水) 22:53:03
>>95 OKです!立ち上げ直すたびに憂鬱だったんですが払拭されました。
104 :
デフォルトの名無しさん :2006/12/13(水) 22:57:40
>>102 確認したら分かりました。確かに設定ありますね。
こっちの方が良さそうなんでこっちを採用させて頂きます。
またクソ質問しますのでよろしく!!
そういうのは宿題関係ないだろ 初心者質問スレでやれ
[1] Cプログラミング [2] 文字配列を使い100桁以上同士の数値にも対応させた 除算と乗算を行うプログラムを書け。 [3] 環境 [3.1] Fedora Linux [3.2] gcc4.0 [3.3] C [4] 2006/12/15まで
1] 授業単元:プログラム演習
[2] 問題文(含コード&リンク):最大カット問題を解くプログラムを作成せよ。
以下の図のグラフに対する最大カット問題の解を表示せよ。
最大カット数と、そのときのカット方法を表示するプログラムを表示するプログラムを作成せよ。
http://up.spawn.jp/file/up58326.jpg [3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語:C
[4] 期限: 年内
[5] その他の制限:標準ライブラリはなしで
>>108 データ形式を教えてくれ
勝手に作ったんでいいのか?
110 :
92 :2006/12/13(水) 23:55:42
ネットで選択ソートについて調べて同じ様にしたりしたのですが、 整数に関してじゃないためか、コンパイルが通らなかったり、 ちゃんと動作しなかったりして完成できません。 提出期限が明日の朝11時00分までなので 解答お願いできないでしょうか?
>>110 void sortArea(int iLine, char** ppArea )
{
int i, j, k;
for( i = 0; i < iLine-1; i++ ){
k = i;
for( j = i + 1; j < iLine; j++ )
if( strcmp( ppArea[k], ppArea[j] ) > 0 ) k = j;
swapPtr( ppArea + i, ppArea + k );
}
}
まったく動かしてないから保証は無しで
[1] 授業単元:プログラミングC [2] 問題文:ガウスの消去法を用いて、n次元連立1次方程式を作成せよ。 ただし、標準入力から次元数n(上限も決める)と係数行列の値を入力せよ。 また、ベクトルx,bとして1次元配列を,行列Aとして2次元配列を動的メモリ確保せよ。 [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年12月14日12:00まで [5]その他の制限:Cについての基本的なことは全て学びました、標準ライブラリはなしで。 どうかよろしくお願いします。
>>113 標準ライブラリなしとは高度な宿題ですね
>>113 scanfとかprintfもなしってことだよね?
116 :
デフォルトの名無しさん :2006/12/14(木) 01:20:26
113さんに便乗で、初心者から質問 printfとかscanfと同じ動作をする関数を、自分で作れるんですか? アセンブラとかで書く、特殊な関数だと思ってました。
117 :
113 :2006/12/14(木) 01:22:36
ごめんなさい、普通に間違えました。 標準ライブラリはもちろんありでお願いします。
じゃあ何が無しなんだよ!
最近難しい問題が増えたな
さいていすぎるらいしゅうよこく
122 :
デフォルトの名無しさん :2006/12/14(木) 02:24:53
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):
通常課題6-1の構造体に,身長,体重,肥満度のメンバ(いずれも浮動小数点数)を加えた構造体を新たに定義する.
また,あらかじめ5名分の学生番号と氏名のデータ(任意、実際の学生番号と一致する必要は全くない)で初期化しておく.
まず,この5名のデータにキーボードから身長[m],体重[kg]のデータ(任意)を入力する.
次に,個人ごとの構造体データへのポインタを受け取り,身長,体重から肥満度[%] を計算する関数を作成し,その関数を用いて各人の肥満度を表示するプログラムを作成しなさい.
ただし,肥満要注意の人(肥満度30%以上)には,任意の注意マークをつけること.
肥満度は次の式で計算され,0%のとき標準体重,正の値は肥満型,負の値は痩せ型を表わす(BMI (Body Mass Index)の計算式より).
肥満度[%] = {体重/(身長×身長×22)}×100−100
[3] 環境
[3.1] OS:XP SP2
[3.2] コンパイラ名とバージョン:VisualStudio2005
[3.3] 言語:C++
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3181.txt 前スレ236さんの作ですがabs,strcpy,memcpy,strncmp,strlenが識別子は、因数依存照合を使用しても見つかりません。と表示されます。
>>122 くだんねえ質問投げる前にヘッダ確認しろよカスこのカス
エラーでてる関数使おうと思えばどんなヘッダがいるんだよカスカスカス
>>122 まぁ無知を攻めるのもなんだから...
abs, strcpy 等のヘルプページを見れば必須 include ファイルと必須 lib ファイルが解るはず。
エラーが出てる関数に必須ライブラリは無いみたいだけどね。
大雑把に言って mem??? は <stdlib.h> を str??? は <string.h> を必要とする。
[1] 授業単元: [2] 問題文(含コード&リンク): 長さ n の実数列 a = [a_0, ..., a_n-1] と正の実数 h が 与えられたとき、|max - min| < h なる最長の区間 [a_i, ..., a_j] を 求める効率の良いプログラムを作成せよ。 [3] 環境 [3.1,3.2] OS、コンパイラ問わず [3.3] 言語: どちらでも可 [4] 期限: 2006年12月16日 [5] その他の制限: 特になし
127 :
デフォルトの名無しさん :2006/12/14(木) 10:03:04
>>127 >なるべく正方形に近いような形で、横の方が縦よりも長いものを推定結果としている
日本語でおk
129 :
92 :2006/12/14(木) 10:26:05
レスありがとうございます。 でも実行したらセグメントエラーとなるのですが… コンパイルは通りました。
130 :
129 :2006/12/14(木) 10:35:55
実行できました。 ただのタイプミスでした。 色々と本当にありがとうございました。
>>128 正方形になる場合には正方形に。
ならない場合は正方形にできるだけ近づける。ただし、w>hになるように。
とのことでは?
133 :
131 :2006/12/14(木) 10:58:39
>>131 上のほうにある c[VMAX][1 << VMAX] は消してくれ。
134 :
デフォルトの名無しさん :2006/12/14(木) 11:01:36
#include <stdio.h> int guess(int n,int*w,int *h){ //ここに追加 } int main(void){ int pixels; int gw,gh; printf("画素数:"); scanf("%d",&pixels); guess(pixels,,); printf("推定値 w:%d X h:%d\n",gw,gh); return 0; }
137 :
136 :2006/12/14(木) 12:04:29
↑
>>135 ね。
実行例 []の中はユーザーが入力した値
ハイフンは各処理結果の隔壁を表わす
--------------------------
画素数:[100]
w:10 X h:10
--------------------------
画素数:[600]
w:25 X h:24
--------------------------
画素数:[1000]
w:40 X h:25
--------------------------
つまり find (w,h) s.t. n = w*h, minimize |w-h|, w ≧ h ってことか。
>>136 を参考にした
int guess(int n,int*w,int *h){int i;for(i=sqrt(n);n%i;i++);*w=i;*h=n/i;}
>136 mainの中のguessに引数でgwとghのアドレスを渡さないと
>>126 問題のレベル高ぇ...本当に宿題なの?
なんか業務の匂いがするんだけど。
アルゴリズム系の定番っぽいけどな 書けないが
>>139 未完成プログラムに載っていないmath.hは使わないようにお願いします。
>>126 効率は良くないかも
#include <stdio.h>
#include <math.h>
const double eps = 1E-6;
int main()
{
double a[] = {5, 3, 12, 16, 13, 14, 20};
double h = 3.1;
int len = sizeof(a)/sizeof(double);
int s = 0, e = 0;
int i = 0, j;
for(j=1;j<len;j++) {
if(fabs(a[j]-a[i]) < h)
continue;
s = i;
e = j-1;
while(fabs(a[++i]-a[j]) - h >= -eps);
}
if(e == 0)
e = j-1;
printf("%d to %d", s, e);
return 0;
}
145 :
144 :2006/12/14(木) 12:52:26
ちょっとぼけてた 書き直す
147 :
144 :2006/12/14(木) 12:57:57
最長区間が複数の場合はiが小さい方を優先 #include <stdio.h> #include <math.h> const double eps = 1E-6; int main() { double a[] = {5, 3, 12, 16, 13, 14, 20, 21, 18}; double h = 3.1; int len = sizeof(a)/sizeof(double); int s = 0, e = 0; int i = 0, j; for(j=1;j<len;j++) { if(fabs(a[j]-a[i]) < h) continue; if(j-1-i > e-s) { s = i; e = j-1; } while(fabs(a[++i]-a[j]) - h >= -eps); } if(j-1-i > e-s) { s = i; e = j-1; } printf("%d to %d", s, e); return 0; }
>>147 反例。(1, 5)が正解だけどそのコードだと(1, 11)が返る。
6.05385 8.52025 15.8029 15.2049 10.5501 11.904 2.34999 10.0731 0.270519 4.03088 2.27745 13.3459
max_diff = 8.58708
>>148 指摘thx
途中の最大値最小値保存してなかった
ミスばっかりだ
というかiを初期化しただけで変更してないのはまずいのでは。
151 :
150 :2006/12/14(木) 13:11:33
ごめん。勘違い。
>>126 まだバグあるかも。自信はない。
#include <stdio.h>
#include <math.h>
const double eps = 1E-6;
int main() {
double a[] = {6.05385, 8.52025, 15.8029, 15.2049, 10.5501, 11.904, 2.34999, 10.0731, 0.270519, 4.03088, 2.27745, 13.3459};
double h = 8.58708;
int len = sizeof(a)/sizeof(double);
int s = 0, e = 0, i = 0, j, mx = 0, mn = 0;
for(j=1;j<len;j++) {
if(a[j] > a[mx]) mx = j;
if(a[j] < a[mn]) mn = j;
if(fabs(a[mx]-a[mn]) < h) continue;
if(j-1-i > e-s) {
s = i;
e = j-1;
}
mx = mn = j;
for(i=j-1;;i--) {
if(a[i] > a[mx]) mx = i;
if(a[i] < a[mn]) mn = i;
if(fabs(a[mx]-a[mn]) - h >= -eps) break;
}
i++;
}
if(j-1-i > e-s) {
s = i;
e = j-1;
}
printf("%d to %d", s, e);
return 0;
}
153 :
デフォルトの名無しさん :2006/12/14(木) 13:45:09
>>127 int guess(int n,int*w,int *h){
int width, height;
for( height=1; height<=n; height++ ) {
width = n / height;
if( width < height ) break;
if( n > width*height ) continue;
*w = width;
*h = height;
}
return 0;
}
int main(void){
int pixels;
int gw,gh;
printf("画素数:");
scanf("%d",&pixels);
guess(pixels,&gw,&gh);
printf("推定値 w:%d X h:%d\n",gw,gh);
return 0;
}
>>152 そのプログラムで毎回最大値最小値をとっているところをヒープまたは二分木で
管理してやれば O(n log n) になる.これは
>>146 のコードと本質的には同じ.
#include <iostream>
#include <set>
using namespace std;
int main() {
const double a[] = {6.05385, 8.52025, 15.8029, 15.2049, 10.5501,
11.904, 2.34999, 10.0731, 0.270519, 4.03088, 2.27745, 13.3459};
const int n = sizeof(a)/sizeof(a[0]);
const double h = 8.58708;
int I = 0, J = 0;
multiset< double, greater<double> > gS;
multiset< double, less<double> > lS;
for (int i = 0, j = 0; i < n; ++i) {
gS.insert(a[i]);
lS.insert(a[i]);
for (; *gS.begin() - *lS.begin() > h; ++j) {
gS.erase(gS.find(a[j]));
lS.erase(lS.find(a[j]));
}
if (i - j > I - J) {
I = i;
J = j;
}
}
cout << J << "," << I << endl;
}
156 :
デフォルトの名無しさん :2006/12/14(木) 16:01:32
宿題スレの宿題が、まるで解ける気がしなくなってきた…
>>155 凄いな。
見通しを持って理解してる人間の手にかかればここまで簡潔になるのか。
159 :
デフォルトの名無しさん :2006/12/14(木) 16:50:53
[1] 授業単元: プログラミング言語 [3] 環境 [3.1] OS: Unix [3.2] コンパイラ名とバージョン: gccと打ってコンパイラしてます [3.3] 言語: C [2] 問題文: 1字ずつ入力を読み込んで、アルファベットの場合 小文字なら大文字に大文字なら小文字にして出力するプログラム。(数字や記号はそのまま出力) おそらく大体はできていると思うのですが、どこが悪いのでしょうか? 今のままだと入力aの出力がAでなくそのままaと出てしまいますorz #include <stdio.h> #include <ctype.h> void char_encoder(int a){ if (a >= 'a' && a <= 'z') toupper(a); else tolower(a); putchar(a); } int main(void) { int a; while((a = getchar()) != EOF){ char_encoder(a); } return(0); }
>>159 toupperとtolowerの使い方が間違ってる
161 :
159 :2006/12/14(木) 16:58:09
ほんとだ…ググってみたところ変換した値を返す関数ってなってますね。 a = toupper(a);でしたか。ありがとうございました。
162 :
159 :2006/12/14(木) 17:09:07
というか変な値が入ってるならまだしも 値を投げっぱなしの159の状態でもコンパイラって通ってしまうんですねorz
>>157 いや…ここの宿題を演習問題代わりにしてたんだけど、最近のはエロイ人が答え見ても
>>157 いや、そうなんだけどね。
俺、ここの宿題を演習問題代わりにしてたんだけど、最近のはエロイ人が出した答え見ても、数時間頭抱えてるような状態なんだよね。
センス無いみたい。
>>162 関数の返値を何かに代入とかしないといけないわけじゃないからね。
例えばprintfとかの返値は普段使ってないでしょ?
宿題スレで、連呼で弱音吐いてる俺キモス 激しく吊ってくる…
>>155 シンプルで綺麗なソースですね
setの使い方なども参考になります
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
ファイル「kyotocity.txt」には、
京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されている。
これらの情報を格納する構造体 struct division を宣言しなさい。
struct division {
char name[20];
int population;
double area;
}
struct division型の配列 kyoto[11]を用意し、
ファイルからデータを読んで、配列に入力しなさい。
入力した構造体の配列を調べて、以下の情報を出力しなさい。
人口が最大の区と最小の区の、名前と人口。
面積が最大の区と最小の区の、名前と面積。
人口密度が最大の区と最小の区の、名前と人口密度。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3192.txt 京都データ
[3] 環
[3.1] OS: XP
[3.2] visual studio2003
[3.3] 言語: C
[4] 期限: あさって
[5] その他の制限: 特になし
>169 昔みたな
171 :
デフォルトの名無しさん :2006/12/14(木) 18:55:35
>>96 読み込む実数値は自分で入力します
結果はプログラム実行中の画面に出力って意味です
言葉が足りなくてすみません
50個を自分で入力か 頑張れ
>96 #include <stdio.h> #include <stdlib.h> int comp(const void*a,const void*b){ return *(int*)a<=*(int*)b; } int main(void){ int i,a[5]; for(i=0;i<5;i++){ scanf("%d",a+i); } qsort(a,5,sizeof(int),comp); for(i=0;i<5;i++){ printf("%d ",a[i]); } return 0; }
175 :
デフォルトの名無しさん :2006/12/14(木) 19:15:38
>>176 何回もすみません。。
整数です 正負は問いません
あと、50個自分で入力って自分もびっくりしてます
>175 5のところは50に変えてね
>>174 qsort に渡す関数って 負数 ゼロ 正数 の三種を返すべきでは?
>177 そうみたいだね。普段使わないから知らなかった。 ぶっちゃけネタ回答だし…qsortは反則でしょ
>>178 禁止されているのはバブル整列法だけだから良いんじゃね?
とんち問答なら正解だが、 講師も人間であることを 考慮すると、qsortはは なはだ疑問である。
#include<stdio.h> #define N 50 void q_sort(int numbers[], int left, int right){ int l_hold = left, r_hold = right, pivot = numbers[left]; while (left < right){ while ((numbers[right] >= pivot) && (left < right)) right--; if (left != right){ numbers[left] = numbers[right]; left++;} while ((numbers[left] <= pivot) && (left < right)) left++; if (left != right){ numbers[right] = numbers[left]; right--;}} numbers[left] = pivot; pivot = left; left = l_hold; right = r_hold; if (left < pivot) q_sort(numbers, left, pivot-1); if (right > pivot) q_sort(numbers, pivot+1, right);} int main(void){ int i,a[N]; for(i=0;i<N;i++) scanf("%d",a+i); q_sort(a,0,N-1); for(i=0;i<N;i++) printf("%d ",a[i]); return 0;} 宿題の解答ならこんな感じか
182 :
デフォルトの名無しさん :2006/12/14(木) 21:02:34
>>176-181 いろいろありがとうございます
明日やってみます
ちなみにq_sortってのは私はじめて見るんで
それ使わなくてもできるやり方はあるみたいです
暇でしたら参考に書いてください
184 :
デフォルトの名無しさん :2006/12/14(木) 21:22:31
CorC++で質問です。 malloc or newで確保した3次元配列を指すポインタ ***prt を関数の引数に取るにはどうすればよいのでしょうか。 単に func(***ptr)では駄目らしいですが。
いつからここは質問スレになったんだ?
一次元配列のポインタ *ptr 二次元配列のポインタ *ptr 三次元配列のポインタ *ptr
駄目な意味が分からない
普通にいけると思うけど
どうしても無理なら
>>186 でおk
>>184 質問が不明瞭だけど func( ***ptr ) って受け側?呼び側?
受け側なら func( 型*** ptr ) でOK。
呼び側なら func( ptr )
190 :
デフォルトの名無しさん :2006/12/15(金) 00:05:29
[1] 情報論 [2] 1) N×Nマス目のフロアを前後左右に移動することができるロボットがある。 スタート地点は常に左上(x,y)=(0,0)であり、全マス目を一度だけ通り、通った順序を表示するプログラムを作りなさい。 フロアには障害物を置けるようにし、障害物は##で表せ。 2) 一筆書きで通れないものは2回目に通るマス目をできるだけ少なくし、 全マス目を少なくとも緯度は必ず通る探索経路を表示するプログラムを作成せよ。(2回通ったマスには2回目の探索順序を記載する) [3] 環境 [3.1] Linux [3.2] gcc 4.0 [3.3] 言語:C [4] 期限: 一週間後 [5] その他の制限: 特になし。 どうかお願いします
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 4 int main(){ int Number[N],In[N]; int i,j,hit,blow; srandom((unsigned) time(0)); for(i=0;i<N;i++){Number[i]=random()%10;In[i]=0;} do{ printf("%d桁の数を入力!:",N); for(i=0;i<N;i++){if((In[i]=getchar()) ==EOF) break; // この部分 // In[i]-='0';} fflush(stdin);hit=0,blow=0; for(i=0;i<N;i++){if(Number[i]==In[i]) hit++;} for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number[i]==In[j]) { blow++; break; }}} for(i=0;i<N;i++) printf("%d-",In[i]); printf("(%dHit,%dBlow)\n",hit,blow-hit); }while(hit!=N); for(i=0;i<N;i++)printf("%d",Number[i]); puts("\nComplete!!"); }
193 :
192 :2006/12/15(金) 00:18:53
[1] 授業単元:計算機演習2 [2] 問題文(含コード&リンク):上記のfor文で数を読み取る部分をscanfの型に直す。 今のままだと、getcharで取り込んだ数が不具合を起こして、入力した数が正常に表示されません。 このプログラムでは一回試行する毎にランダムの数が書き変わってしまいます。 数を言い当ててComplete!が表示されるまで、設定された数が書き変わらないようにしてください。 四つの数は全て異なっていなければなりません。 [3] 環境 [3.1] OS: Linux [3.2] gcc -o [3.3] 言語: C [4] 期限: 2006.12.16 よろしくお願いします。
>>190 >2回目に通るマス目をできるだけ少なくし
と2回目に限定してるけど、
2回通るマス目が2つあるのと、4回通るマス目が1つあるのでは、
どちらを優先すればよいのだろう?
マス目の数にこだわれば後者だし、無駄な回数にこだわれば前者だよね
>>194 すいません。通れるのは最大2回までとなってます。
>>195 2回じゃ全マス通れない場合は?
□□□##
##□##
□□□□□
##□##
##□##
197 :
デフォルトの名無しさん :2006/12/15(金) 00:43:49
200 :
122 :2006/12/15(金) 00:51:19
>>124 stdlib.hとstring.h加えたけどエラー数が悪化したorz
もうだめかもしれない・・・
>>200 >[構成プロパティ]-[全般]-[文字セット]を 「マルチバイト文字セットを使用する」
この辺はやってる?
>>189 入力列がランダムのとき,O(n) で動くアルゴリズムだね.
これまでに同じアルゴリズムは出ていないけれど,
152,155 で最小値・最大値を更新するタイミングを最小値・最大値が
抜けたときだけにするものと本質的に同じものになる
(これが O(n) になるのは適度な演習問題).
しかし,最悪計算量の意味ではやはり O(n^2) であって,
例えば単調増加する n = 100000 くらいの列を食わせると終わらない.
155 とどちらがよいかは,状況によるところだと思う。
204 :
デフォルトの名無しさん :2006/12/15(金) 02:31:26
205 :
デフォルトの名無しさん :2006/12/15(金) 02:45:19
206 :
189 :2006/12/15(金) 02:55:00
>>203 0(n) にまで減らないとは思うけどパッと考えたのはアレくらい。
単調増加/減少の場合、調査起点のスキップができないからなぁ。
うーん無理。
207 :
184 :2006/12/15(金) 04:01:47
質問の意図が不明瞭ですみませんでした。 2次元配列の例で説明しますと,例えば int array1 = [N][M]; と配列で宣言した場合,これを引数に取る関数funcでarrayの要素を使うためには, func (int i, int j, int array[][M]) { array[i][j] } と,あらかじめMを決めておかなければいけませんよね。 それに対して, int **array2 = (int **)malloc(nrows * sizeof(int *)); for(i = 0; i < nrows; i++) { array1[i] = (int *)malloc(ncolumns * sizeof(int)); } とポインタのポインタで確保した場合, func (int i, int j, int **array2]) { array2[i][j] } と書いておけば,各要素[i][j]に正しくアクセスできるかどうか知りたいのです。
>>207 なぜここでそんな話をしてるんだ
ここが宿題を片付けるスレだと分かってないのか?
>>206 入力がランダムな場合,平均又はならし計算量の意味で O(n) になってるよ.
略証:nextP がどこまでいくかを評価する.入力はランダムと仮定する.
func で伸ばした区間の長さを m としたとき,nextP が区間の左から k 番目
である確率は 1/m.よって nextP の期待値は Σk/m 〜 O(m).
したがって毎回 func で伸ばした長さ分程度消費するので全体で O(n).
211 :
sage :2006/12/15(金) 07:40:04
ぬつりw
10時までだからって焦りすぎw
誤字多すぎですねorz 数学の得点と物理の得点です
>211 10時過ぎたけど int main(void) { int i, j, sum, ave[3] = {0}; int a[5][3] ={{70, 60, 80},{50, 60, 50},{70, 90, 100},{90, 100, 50},{40, 70, 80}}; printf(" ____________________________________________\n"); printf("|学籍番号| 英語 | 数学 | 物理 | 合計 |\n"); printf("| ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄| ̄ ̄ ̄ ̄|\n"); for(i=0; i<5; i++) { printf("| %d ", i+1); for(j=0, sum=0; j<3; j++) { printf("| %3d ", a[i][j]); sum += a[i][j]; ave[j] += a[i][j]; } printf("| %3d |\n", sum); printf("|________|________|________|________|________|\n"); printf("| | | | | |\n"); } printf("| 平均 "); for(i=0; i<3; i++) printf("| %3d ",ave[i]/5); printf("| |\n|________|________|________|________|________|\n"); return 0; }
>>216 まにあいそうです!
超感謝です。ありがとうございました
218 :
デフォルトの名無しさん :2006/12/15(金) 11:01:38
[1]授業単元:プログラミング演習 [2] 問題文(含コード&リンク) 1)直線回帰の式を導出せよ。 2)決定係数の式を導出せよ。 3)1)の式を用いて「汎用性の高い直線回帰を行うプログラム」を開発せよ。 4)3)で開発したプログラムに2)の決定係数を算出する式を加えよ。 [3.1] OS: XP [3.2] コンパイラ名とバージョン: gcc3.4 [3.3] 言語:C [4] 期限: 2006.12.18 [5] その他の制限: とくになし お手数かもしれませんが、よろしくお願いします・・・!
マルチポストかよ
[1]授業単元:プログラミング [2] 問題文 前スレで出した宿題なんですが。 コード&乱数生成の標準ライブラリ関数を利用し、150以上200以下の整数を10個生成して画面に出力しなさい。 という問題で下のプログラムを組んでもらったのですが、現在のコードでは150から200までの値を等しい確率で生成できません。 スライドを参考に作り直しましょう。 と、言われまして、修正お願いします。 #include <stdio.h> #include <stdlib.h> int main(void) { int i, air; /* scanf("%d", &air); srand(air); */ printf("150?ȏ㲰0?ȉ??̗???\n"); for(i = 0; i < 10; i++){ printf("%d\n", 150+rand()%51); } return 0; } [3.1] OS: XP [3.2] コンパイラ名とバージョン: visual studio2003 [3.3] 言語:C [4] 期限: 2006.12.17 [5] その他の制限: とくになし
すみません文字化けしてました
>>220 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, air;
/*
scanf("%d", &air);
srand(air);
*/
printf("150以上200以下の乱数\n");
for(i = 0; i < 10; i++){
printf("%d\n", 150+rand()%51);
}
return 0;
}
>220 スライドは?
>>220 常に同じ乱数が出力されるのを変更したいって事?
それとも rand() 以外の擬似乱数を実装しろって事?
>>220 rand() % 10 とかで 0 〜 9 の乱数を生じると結構偏りが多いらしいから同じ理由かな。
150 + rand() % 51
の所を
150 + (int)( (double)rand() / (double)RAND_MAX * 51.0 )
に変えて試してみて。
>224 それだと201までにならない?
>>225 けど、* 50.0 にしちゃうと 200 の出現確立が極端に低くなるよね。
つまり
150 + (int)( (double)rand() / (double)( RAND_MAX + 1 ) * 51.0 )
が正解か。
227 :
220 :2006/12/15(金) 14:00:38
問題文はその文面ですべてです。 プログラムは前スレで作ってもらったものです 150-200の数値を乱数で完全ランダムで10個出力するみたいです。
228 :
220 :2006/12/15(金) 14:28:13
なぜか乱数で%よく使われるよなw FF4も確か0〜255までを返す乱数に対して%100して パーセンテージを計算するというとんでもないことをやっていた
>>220 スライド見たよ。
>>226 で良かったみたいだね。
ちゅかあのスライド見れば解るだろうに...
重要なのは rand() がバラつきを保障するのは 0 〜 RAND_MAX での位置で有って、
下一桁とか二桁に着目したときのバラつきを保障してないって事だね。
特に rand() の下一桁はひどい偏りが有るらしい。
>>229 ちゅことは 0〜55がそれ以外の5割り増しで出るわけか。
クリティカルヒットの確立が有利だと気分は良いかも知れない。
233 :
デフォルトの名無しさん :2006/12/15(金) 18:00:33
#include <stdio.h> #include <string.h> #define COLSIZE 80 #define NAMSIZE 20 int main(int argc, char *argv[]) { char buffer[COLSIZE + 1]; char fname_in[NAMSIZE + 1]; FILE *fp; fgets(fname_in, COLSIZE + 1, stdin); fname_in[strlen(fname_in-1)] = '\0'; fp = fopen(fname_in, "r"); while(fgets(buffer, COLSIZE + 1, fp) != NULL){ printf("%s", buffer); } fclose(fp); return 0; } これどこがへんですか教えてください
>>233 fname_in[strlen(fname_in-1)] = '\0';
- fname_in[strlen(fname_in-1)] = '\0'; + fname_in[strlen(fname_in)-1] = '\0';
下一桁は規則的で、0と1が交互に出てくる。 下位の数ビットはシフトして捨てるといい。
237 :
デフォルトの名無しさん :2006/12/15(金) 18:08:15
解決しましたありがとうございました 2スレまえで同じような問題の質問があったけど絶対同じ学校のやつですね
>>233 × fgets(fname_in, COLSIZE + 1, stdin);
○ fgets(fname_in, NAMSIZE + 1, stdin);
fgets() は最大 (size-1) のデータを読み込み終端に '\0' を追加するので、
fname_in[strlen(fname_in-1)] = '\0'; は無駄。
C++の宿題やりたい
241 :
デフォルトの名無しさん :2006/12/15(金) 18:43:17
242 :
238 :2006/12/15(金) 18:54:38
>242 あっても問題ない行とあるとおかしい行の区別はつけような
244 :
デフォルトの名無しさん :2006/12/15(金) 19:00:33
明らかにおかしな値になることへの駄目出しと、冗長な手順に対する駄目出し(結果として致命的なミスしてる式が消える)。
丸投げスレ的には、
>>238 で十分だけど、致命的な間違いをしてる式を教えてあげておいたほうが親切だとオモ。
ってか、丸投げスレより、質問スレ向けなネタだね。
245 :
デフォルトの名無しさん :2006/12/15(金) 19:12:18
246 :
238 :2006/12/15(金) 19:30:17
まぁ解ってるとは思うけど念の為。 fgets(fname_in, COLSIZE + 1, stdin); これは致命的問題。 スタックが下から上に積まれる環境において、NAMSIZE + 4 以上の文字数が入力された場合、 fgets() からのリターンアドレスを失い暴走する可能性がある。 バッファオーバーランを起こすとあらぬ場所で落ちる(様に見える)から追うのが面倒なんだよなぁ。
>>246 同意
fgets(fname_in, sizeof(fname_in), stdin)
にしてくれると安心だ;
>>244 >冗長な手順に対する駄目出し(結果として致命的なミスしてる式が消える)。
違うだろ。
>>235 をよく読んで[ ]の中の値が何になるか少ない脳みそで考えてみ。
249 :
デフォルトの名無しさん :2006/12/15(金) 20:18:26
[1] 授業単元: C基礎 [2] 問題文(含コード&リンク): 入力された2つの整数(負数も可)の差の絶対値を求める。 最大8桁、−の場合は−を含め9桁まで有効としそれ以降は無視する。 また次のプロトタイプ宣言を持ち、絶対値を戻す関数を使用すること。 int absolute( int n1, int n2); <エラー仕様> 整数以外の入力 "整数以外の入力" '-'のみまたは改行のみ "改行のみまたは'-'のみの入力" [3] 環境 [3.1] OS: Windows XP Home Edition [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: Cのみ [4] 期限: 2006年12月22日 [5] その他の制限: ポインタはまだ習ってないです。
>>248 何がどう違うのかはっきり説明しないと、ここでは相手にされないぞ。
>250 さすがにそれがわからないのはまずくないか?
>>1 すら読まないような奴はまともに相手にされなくて当然では?
配列サイズ以下の入力だったときに改行文字を\0に変換してんだろ? サイズ一杯に入ったときと場合わけしてないからおかしいことになってるけどな。
>>256 どっちみちサイズ以上のときも後ろが無視されるわけだから
ぴったりに入った時1文字削られてもいいんじゃない?
>>257 改行文字を含むファイル名は作れない
↓
常に fopen が失敗する
アンカーが違ったorz
>257 例えばfgets(fname_in, 10, stdin)で一杯に入るとstrlen(fname_in)は9。 このときfname_in[8]は\0じゃないけど\0にすることになってまずいだろ。
整理します
発端は
>>238 の fname_in[strlen(fname_in-1)] = '\0'; は無駄 という発言 …@
>>240 が
>>238 の指摘は細かいと発言
>>238 それなら
>>235 の方が細かいだろと発言
ここで問題発生
>>238 的には「そもそもいらない処理に指摘するなんて」と思う(この時点でこの処理@の不正さに気づいていたかは不明)
>>243 としてはこの処理があった場合、strlen(fname_in-1)とstrlen(fname_in)-1の違いによって文字数の計算に支障をきたすからよくないと思う
>>244 はアンカーが無いため誰に対する発言かがあいまい
明らかにおかしな値になることへの駄目出しと(235のことだろう)…A
冗長な手順に対する駄目出し(結果として致命的なミスしてる式が消える)(238のことだろう・244はこのコードの不正さに気づいている)…B
それに対して
>>248 (243側の人)が244の本来238に対しての発言Bを235への発言としてとってしまった
で、よろしいでしょうか(アンカーが多すぎるって怒られたので一部消しています)
違うなら・・・・・・ゴメンナサイ
262 :
257 :2006/12/15(金) 21:47:39
>>260 いや、だからさー
その場合でも標準入力に10文字を指定すると1文字は読み取られずに残っちゃうでしょ
つまりifで分岐してもファイル名は9文字までって制約がついちゃうなら
無条件に'\0'を代入してファイル名は8文字までって制約でも
いいんじゃないかというはなし
ああ、スマン fname_in[strlen(fname_in-1)] = '\0';が無駄とか言ってる阿呆と勘違いした。
うわコピペするとこ間違えた。 fname_in[strlen(fname_in)-1] = '\0';な。
結局
>>233 のおかしいところは
fgets(fname_in, COLSIZE + 1, stdin);
fname_in[strlen(fname_in-1)] = '\0';
↓
fgets(fname_in, sizeof(fname_in), stdin);
if(fname_in[strlen(fname_in)-1] == '\n') fname_in[strlen(fname_in)-1] = '\0';
fp = fopen(fname_in, "r");
↓
fp = fopen(fname_in, "r");
if(fp==NULL) return 1;
ってことでおk?
>>265 ついでに FILENAME_MAX を使って欲しいくらいかな
267 :
238 :2006/12/15(金) 23:41:23
ちょっとガンプラ作ってたんでレスがおくれますた。
いやーなんか恥ずかしいな。
確かに \n を \0 にする意図が読めんかったんで的外れな事を書いちゃったみたいだね。
言い訳させてもらうと
>>240 の指摘は意味不明なので無視すべきだね。
>>243 の指摘は正しいけどもう少し説明してくれる方が親切だと思う。
で、
>>258 が有効な説明をくれたという事でこの話終わって良い?
ここで又ネタを振るようで悪いんだけど、
fname_in[strlen(fname_in)-1] = '\0';
これは
char* ptr;
ptr = strchr( fname_in, '\n' );
if( ptr ) *ptr = '\0'
にすべきではないかなぁ。
良いコードはコメントが無くても意図が読める物だと思う...多くは語らないけど。
まぁ意図が読めなかったバカの独り言ですけどね。
[1] 授業単元: オートマトン [2] 問題文(含コード&リンク): 任意の決定性有限オートマトン(DFA,弱い決定性も含む)を模倣するプログラムをかけ。 外部のファイルで定義されたDFAを読み込むことにより、任意のDFAを模倣するものとする。 *注意 入力アルファベットは少なくとも英数字までは対応可にする。 状態数は少なくとも100個までは対応できるようにする。 [3] 環境 [3.1] OS: Mac [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 月曜までによろしくおねがいします。 [5] その他の制限:
270 :
デフォルトの名無しさん :2006/12/16(土) 00:25:40
>>192 数値を入れてしばらくすると
「セグメンテーション違反です」って
表示されて中止されます。どうしたらいいのですか?
271 :
268 :2006/12/16(土) 00:29:08
>>269 定義ファイル
ファイルのフォーマットは何でも可。
初期状態
最終状態の集合
状態遷移関数((状態、記号、次の状態)の3項組みで与える
例
-----begin DFA def----
0
12
0a1
0b1
1a2
1b1
2a0
----end DFA def------
「simulate DFA def」で起動後、例えば、aaaaを与えれば「受理しました」を、aabを与えれば「受理できませんでした」を出力。
>>270 まずポインタや配列の添え字あたりをチェック
273 :
デフォルトの名無しさん :2006/12/16(土) 00:32:19
>>272 早速ありがとうございます
スレ違いかもしれませんが関連して一つ、
セグメンテーション違反ってなんですか?
メモリ上でアクセスしちゃいけないとこにアクセスしようとしたってこと。
276 :
デフォルトの名無しさん :2006/12/16(土) 00:40:26
なるほど ありがとうございます
あと、セグメンテーション違反が出たのは
>>182 のことです
間違えてすみません
277 :
デフォルトの名無しさん :2006/12/16(土) 00:41:14
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 前スレでプログラムを作ってもらったのですが、つき返されました。 配列に格納されたデータをソートするプログラムを作成するにあたり、以下の機能を持つ関数を作成しなさい。 乱数を生成し配列要素に格納する init_array(int *pa, int n) 配列要素を1行で画面に出力する output_array(int *pa, int n) 指定された2つアドレスのデータを交換する swap(int *x, int *y) ↓前スレで作っていただいたプログラム void init_array(int *pa, int n){ for(n--;n>=0;n--) pa[n]=rand(); } void output_array(int *pa, int n){ for(n--;n>=0;n--) printf("%d ",pa[n]); } void swap(int *x, int *y){ *x^=*y^*x^=*y; } つき返されたコメント:乱数の生成手順を守りましょう。 for文も正しくないと言ってよいレベルです。ごく普通に、0からn-1まで処理しましょう。 [3] 環境 [3.1] OS: windows xp [3.2] コンパイラ名とバージョン: visualstudio2003 [3.3] 言語: C言語 [4] 期限:2006/12/16 18:00 [5] その他の制限:なし よろしくお願いします。
>>278 なぜこうしたのか聞かれなかった?
質問に答えられた?
つーか自分でやらなかったのがバレてんじゃねーの?
>>278 >乱数の生成手順
って学校で指定でもされたものがあんの?
条件がはっきりしない。
>ごく普通に、0からn-1まで処理
先頭から順に配列に入れていけという指示でもあったん?
乱数の生成手順ってsrand()使うのかな?
乱数の発生手順って、そもそもrand();だけじゃ毎回同じパターンの 乱数でしかなかった気がするが、それが指摘されたとか? srand(time(NULL));と<time.h>を追加するとか?
>for文も正しくないと言ってよいレベル どこがどう正しくないのか質問してみたら?
逆順に印字してるからだろ
288 :
デフォルトの名無しさん :2006/12/16(土) 01:55:58
swapもだけど、嫌がらせのように他人に丸投げしたのがバレバレなコードだなw 嫌みなんだろうけど、スレ的も問題的にも、何ら問題は無いんだよね。 突き返された本当の理由は、明らかに他人の手を借りてるのがバレバレだから自分でやれってこと。 for文の中身の意味はわかる?あれを逆順にして、初期化を0にして、nにならないようにしてやれば良い(n-1まではインクリメントして、その後止まるように)。
>>278 void init_array(int *pa, int n){
srand(time(NULL));
for(int i=0;i<=n-1;++i)pa[i]=rand();
}
void output_array(int *pa, int n){
for(int i=0;i<=n-1;++i)printf("%d ",pa[i]);
}
290 :
1 :2006/12/16(土) 02:32:18
[1] 授業単元: コンピュータ実習 [2] 問題文(含コード&リンク): /home/staff/public/yokoyama/sample/ にある data.txt, data2.txt, data3.txt をソートするプログラムを作成する。以下の雛形を用いてもよい。 ソートした結果の上位10個の要素を表示するようにしなさい。 ---------------------雛形( kadai19_file_malloc_org.c)----------- #include <stdio.h> int *data; int main(int argc, char *argv[]) { int n; int num; char inFileName[64]; if (argc > 1) strcpy (inFileName, argv[1]); else { printf("File name ? : "); scanf("%s", inFileName); } num = read_data_file( inFileName );
でも、srandはinit_arrayに入れちゃだめだとおもうんだよなー こんなコード書いたら同じ値が出る可能性高いし int main(){ int i,d[5]; for(i=0;i<10;i++){ init_array(d,5); output_array(d,5); printf("\n"); } return 0; }
292 :
2 :2006/12/16(土) 02:32:58
// sort_func ( data, num); for (n=0; n<10; n++) printf("%3d %d\n",n+1, data[n]); free( (int *)data); } int read_data_file( char inFileName[]) { char str[256]; FILE *fp; int n, num; if ( ( fp=fopen(inFileName, "r") )== NULL) { perror("fopen"); exit(1); } num = 0; while( fgets(str,256,fp) ) num++; if ( (data = *************************) { perror("malloc"); exit(1); } rewind(fp); n = 0; while( fgets(str, 256, fp) ) { data[n++] = atoi(str); [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: 12月20日 [5] その他の制限: mallocを必ず使用する
>>290 data.txt, data2.txt, data3.txt は?
>>290 おざなりなmalloc
#include<stdio.h>
#include<stdlib.h>
#define PRINTNUM 10
void maxinsertionsort(int data[],size_t count,int number){
int i;
for(i=0;i<count;i++){
if(data[i]<number)break;
}
if(i==count)return;
for(;i<count;i++){
int tmp=data[i];
data[i]=number;
number=tmp;
}
}
int main(int argc,char *argv[]){
char buf[32];
int i,*data=malloc(PRINTNUM*sizeof(int));
if(!data) perror("malloc"),exit(1);
memset(data,0,PRINTNUM*sizeof(int));
for(i=1;i<argc;i++){
FILE *fp=fopen(argv[i],"r");
if(!fp)continue;
while(fgets(buf,sizeof(buf),fp)) maxinsertionsort(data,PRINTNUM,atoi(buf));
fclose(fp);
}
for(i=0;i<PRINTNUM;i++) printf("%d\n",data[i]);
free(data);
return 0;
}
>>291 初期化済みフラグを static で持つとか?
296 :
246 :2006/12/16(土) 08:30:18
なんかこのスレ面白くないな。 NAMESIZE+4 に食いてく奴を期待してたんだけど.... がっかりだよ。
宿題丸投げスレでスタックフレームを意識しても
298 :
57 :2006/12/16(土) 11:32:06
面目ない、ゆえあってスレから離れていました。 いちどきに多数の質問、ソーリー。 そして答えてくれた方々ベリーサンキューありがとお!!!
299 :
◆23iJ.6jzS6 :2006/12/16(土) 12:17:46
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):辺の長さを入力(2〜9) その長さに対応したひし 形と六角形を*で表示 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: VC6.0 [3.3] 言語: どちらでも可 [4] 期限:17日10時
300 :
デフォルトの名無しさん :2006/12/16(土) 12:52:53
よろしくおねがいします。 [1] 授業単元: C言語 [2] 問題文(含コード&リンク): nの値を入力して、rが1〜9のときのnCrを表示せよ。ただし、com(m,q)、fact(m)を定義すること。 [3] 環境 [3.1] OS: Mac [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 12/22迄 [5] その他の制限: 口頭において、「n=10,20を入力。n=20はn=10を修正して。」と言っていました。
301 :
192 :2006/12/16(土) 15:24:47
>>270 わたしもよく分かりません。
このプログラムはランダムで精製された四桁の数(数は全て異なっていなければならない)を当てる数当てゲーム。
四桁の整数を入力して、場所と数の両方で合っているのならhit、そうでなければblowを表示して、最終的に全ての数を当てたらcompleteで終了する。
一連の動作中にcompleteが表示されるまで最初にランダムで設定された数は書き換わらないという物なのですが・・・。
皆さんでも分かりませんか・・・?
>301 for(i=0;i<N;i++){if((In[i]=getchar()) ==EOF) break; // この部分 // In[i]-='0';} ここがおかしい
[1] C++ プログラミング [2] 問題 int t=read(fail_name.c_str());で関数内へ持って行きデータを読み込む関数を作る ↓自分が作成したもの int read(string fname) { ifstream fin(fname.c_str()); } [3] 環境 [3.1] OS: Windows [3.2] VC++2005ExpressEdition [3.3] C++ [4] 12/16 [5] 「1番目の引数に対して既定の引数がありません。」と表示されてしまいます。 コンパイルエラーの原因がなんだか分らなくて困っています・・・ ifstreamの後はこのような感じでいいんでしょうか・・・・
[1] 授業単元:プログラミング演習 [2] 問題文(含コード&リンク):次に示すデータに関して以下の計算を行え 一次式に当てはめてその式を示す。同時に2乗累積誤差Eを求める。 二次式に当てはめ上と同じことを行う。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:どちらでも可 [4] 期限:[2006年12月22日12:00まで] [5] その他の制限:ガウスジョルダン法にデータを引き渡して計算する。 x -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6 y 13.4, 7.2, 2.7, 1.2, 0.6, 3.1, 6.9, 12.5, 20.8, 31.7, 44.0 助けてください。
コンパイラはbccでした。 すみません。
307 :
デフォルトの名無しさん :2006/12/16(土) 17:16:05
308 :
デフォルトの名無しさん :2006/12/16(土) 17:53:51
[1] 授業単元:計算機演習 [2] 問題文(含コード&リンク):乱数のプログラムのアルゴリズムを答えよ [3] 環境[3.1] OS:Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: [2006年12月19日12:00まで][5] その他の制限:無し
309 :
デフォルトの名無しさん :2006/12/16(土) 18:21:10
308 こちらがプログラムです #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 4 int main(){ int Number[N],In[N]; //関数の宣言 int i,j,hit,blow,flag; srand(time(NULL)); //実行のたびに同じ擬似乱数を発生させる for(i=0;i<N;i++) { Number[i]=rand()%10; //Number[i]が重ならないように乱数にする flag=1; while(flag) { //繰り返す flag=0; for(j=0;j<i;j++) { while(Number[i]==Number[j]) { Number[i]=rand()%10; //乱数を繰り返す flag=1; } //printf("交換 %d\n",Number[i]); }}}
310 :
308 :2006/12/16(土) 18:22:14
309の続き } } } printf("%d,%d,%d,%d\n", Number[0],Number[1],Number[2],Number[3]); do{ printf("%d桁の数を入力!:",N); scanf("%d,%d,%d,%d",&In[0],&In[1],&In[2],&In[3]); //数字を表示させる hit=0,blow=0; //数字の初期化 for(i=0;i<N;i++){if(Number[i]==In[i]) hit++;} //Number[i]とIn[i]が同じ値のとき 関数を繰り返す for(i=0;i<N;i++){for(j=0;j<N;j++){if(Number[i]==In[j]) { //Number[i]とIn[j]同じ値のとき blow++; 関数を繰り返す break; }}} printf("%dHit,%dBlow\n",hit,blow-hit); //hitとblowを表示 }while(hit!=N); //hitを繰り返す for(i=0;i<N;i++) printf("%d",Number[i]); puts("\nComplete!!"); }
とりあえず関数について勉強してきた方がいいと思う
>>300 次のサイトに貼り付けて解凍すること:
http://www.geocities.jp/c_cpp_cs/code/code.html n=10の場合。
VY7BDoIwEETPkPAPEwxJK6hwhnrxN7wQCrEJbaWAF+O/uxXQeNrtTN/s7JRp+lm2qMZJKnu8naMwCpW
Z0NXNxPyiOZ5RGKgOTEMI5ByunWZnUJSkt/3YboLGfuE0Dig42a8trrF6Scvgx7CErtzCcJx+9PB9DX
85ulaGPaySayuSDASKPIPzdTrrwJxXSjhUZNBMU05WcHf0vWNxIi+JFIm8mjiDITD71PMb98e2Wrk//
AY=
n=20の場合。
VY7BDoIwEETPkvAPEwxJK1WpV6gXf8MLoRCb0CIFvBj/3daCxtPuzu6bna0ydTfLBuU4SdUfbuc4iiN
lJrRVPRHfaIpnHG1UC6IhBHIK20yzNeCF05tubFZBYxc4jT04devXalf3Orgx+DIE04ULDMXxRw/faf
jz0ZUy5NEruaRykoHAKWewPk7bWxDrFF7AogTPXc0y6labu3XnLUlSeUmlSOXVJAzGgewTz3fUP1tj5
f7xGw==
314 :
308 :2006/12/16(土) 18:39:26
申し訳ないですが両方お願いします・・・
>>303 どう考えても
int read(char* fname)
{
ifstream fin(fname);
だわな
317 :
308 :2006/12/16(土) 19:09:40
320 :
◆23iJ.6jzS6 :2006/12/16(土) 21:13:43
321 :
デフォルトの名無しさん :2006/12/16(土) 21:33:43
>>320 無理。
辺の長さだけではひし形を決定できない。
日曜に提出ってへんな学校。
>>321 俺の目が節穴でなければ,181におかしいところはない.
>>299 #include <stdio.h>
void drawdiamond(int l){ int i,j;
for (i=0; i<l; i++){
for (j=0; j<l; j++) putchar(i+j==l-1? '*' : ' ');
for (j=1; j<l; j++) putchar(i==j? '*' : ' ');
putchar('\n'); }
for (i=1; i<l; i++){
for (j=0; j<l; j++) putchar(i==j? '*': ' ');
for (j=1; j<l; j++) putchar(i+j==l-1? '*' : ' ');
putchar('\n'); }}
void drawhexagon(int l){ int i,j;
for (i=0; i<l; i++){
for (j=0; j<l; j++) putchar(i+j==l-1? '*' : ' ');
for (j=1; j<l; j++) putchar(i==0? '*' : ' ');
for (j=1; j<l; j++) putchar(i==j? '*' : ' ');
putchar('\n'); }
for (i=1; i<l; i++){
for (j=0; j<l; j++) putchar(i==j? '*' : ' ');
for (j=1; j<l; j++) putchar(i==l-1? '*' : ' ');
for (j=1; j<l; j++) putchar(i+j==l-1? '*' : ' ');
putchar('\n'); }}
int main(){ int l;
printf("input l (2-9): "); scanf("%d", &l);
if (l<2 || l>9) { printf("out of range\n"); return 0; }
drawdiamond(l); putchar('\n'); drawhexagon(l); }
325 :
デフォルトの名無しさん :2006/12/16(土) 21:53:30
326 :
796 :2006/12/16(土) 22:07:06
[1] 授業単元:プログラミング演習 [2] 問題文 品物の大きさ, 価値, 品数, そしてナップサックの大きさを引数として, 最適解(価値の合計)を 返す関数knapsackとmain関数を作成せよ. ここでの各品物が取りうる数は, 0または1とする(つまり0,1整数 変数とする). 必要ならば関数knapsackに新たな引数を追加してもよい. int knapsak(int size[], int price[], int n, int knapsize); TEST_DATA ナップサック容量 : 8 品数 : 5 品物 大きさ 価値 0 4 45 1 5 55 2 2 20 3 1 10 4 6 60 [3] 環境[3.1] OS:Linux[3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C言語 [4] 期限: [2006年12月17日まで]
>>320 ひし形? main() とかは自分で書いてね。
static void drawDia( int n )
{
int i, j;
for( i = n - 1; i > 0; i-- ) {
for( j = 0; j < i; j++ ) putchar( ' ' );
for( j = 0; j < ( n - i ) * 2 - 1; j++ ) putchar( '*' );
printf( "\n" );
}
for( j = 0; j < n * 2 - 1; j++ ) putchar( '*' );
printf( "\n" );
for( i = 1; i <= n - 1; i++ ) {
for( j = 0; j < i; j++ ) putchar( ' ' );
for( j = 0; j < ( n - i ) * 2 - 1; j++ ) putchar( '*' );
printf( "\n" );
}
}
>>320 六角?
static void drawHex( int n )
{
int i, j;
for( i = n - 1; i > 0; i-- ) {
for( j = 0; j < i; j++ ) putchar( ' ' );
for( j = 0; j < ( n - i - 1 ) * 2 + n; j++ ) putchar( '*' );
printf( "\n" );
}
for( j = 0; j < ( n - 1 ) * 2 + n; j++ ) putchar( '*' );
printf( "\n" );
for( i = 1; i <= n - 1; i++ ) {
for( j = 0; j < i; j++ ) putchar( ' ' );
for( j = 0; j < ( n - i - 1 ) * 2 + n; j++ ) putchar( '*' );
printf( "\n" );
}
}
>>325 出なかったよ…
ソースはコピペした?見て自分で書いた?
331 :
デフォルトの名無しさん :2006/12/16(土) 23:33:08
>>329 見て書きました
明日もう一度確認してきます
>>331 ならたぶんソースの写し間違い
コピペするよろし
333 :
デフォルトの名無しさん :2006/12/16(土) 23:52:04
>>333 1) の場合と 2) の場合の2つ作れということね
>フロアには障害物を置けるようにし、障害物は##で表せ
任意に置けるってことだよね
経路が存在しない場合、または以下の状態になるときは解なしでいいね
1) 2回以上通らなければいけない道が存在する
1回も通らない場所が存在する
2) 3回以上通らなければいけない道が存在する
1回も通らない場所が存在する
暇つぶしにやるつもりなので回答できないかもしれない
>>334 >2) 3回以上通らなければいけない道が存在する
繋がってさえいれば必ず2回で十分。
全ての道を二本に分裂させると考えれば、全ての頂点から出る
辺の数が偶数になるので、一筆書き可能。
337 :
L ◆FTiifLi0KU :2006/12/17(日) 00:21:21
[1] 授業単元: プログラミング演習
[2] 問題文
キーボードから元金、返済回数、利率を入力し、支払い額、利息、残高を表示する。
http://ranobe.com/up/src/up158197.jpg のように表示をしろとのことです。
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: visual studio2003
[3.3] 言語:C++
[4] 期限: 12月18日
[5] その他の制限:制限というかコンソールアプリケーションまでしか習ってません。
経営学部の人間なのですが、お手上げ状態ですのでなにとぞお願いします。
338 :
デフォルトの名無しさん :2006/12/17(日) 00:23:02
はい、聞いたことないです。
>>339 キーボードの右上のほうにPrintScreenってないか?
コマンドプロンプトをアクティブにした状態で
Alt + PrintScreen
と押せ
押しても何も起こりませんっ!ってレス予想
342 :
デフォルトの名無しさん :2006/12/17(日) 00:30:36
すまん、あげちまった
あ〜少しヒヨってました。結果の表示が見づらいってことでしょうか? これは授業中に教授のを撮ったヤツなのでスクリーンショットを撮っても今は無いんです。 写メでうつってる結果表示は 元金? 支払い回数? 利率(%)? 回数 支払額 利息 残高 □ □□□ □□ □□ な感じになってます。 色々とすみません。
PrintScreenのキーはPrtScなどと略されてる場合もある。 それを押したらペイントを起動して貼り付けて保存。
>>337 支払額の算出ルールが解らんなぁ。
普通に考えると
1)最終回以外は均一
2)支払い総額最低
だと思うんだけど、写真では毎回支払い金額が異なるしなぁ。
なんか条件無いの?
何も聞かされてません。 問題文と画像を見せられて作ってきて、って言われただけでした。 多分、そこら辺は適当でよいのかもしれません。 楽なプログラムの方で構いませんのでよろしくお願いしますm(__)m
>>337 #include<stdio.h>
int main(void){
long gankin, zandaka, risoku, siharai,risoku_total=0L, siharai_total=0L;
int i, kaisuu, nokori_kaisuu;
double riritu;
printf("元金?");
scanf("%ld", &gankin);
printf("支払回数?");
scanf("%d", &kaisuu);
printf("利率(%)?");
scanf("%lf", &riritu);
riritu/=100.0;
zandaka=gankin;
printf("%4s %8s %8s %10s\n", "回数", "支払額", "利息", "残高");
for(i=1;i<=kaisuu;i++){
nokori_kaisuu=kaisuu+1-i;
risoku=zandaka*riritu;
siharai=zandaka/nokori_kaisuu+risoku;
zandaka+=risoku;
zandaka-=siharai;
printf("%4d %8ld %8ld %10ld\n", i, siharai, risoku, zandaka);
risoku_total+=risoku;
siharai_total+=siharai;
}
printf("%4s %8ld %8ld\n", "計", siharai_total, risoku_total);
return 0;
}
自分を除く
>>338 〜348の方々
速急な対応ありがとうございました。
お陰で単位を落とさずに済みそうです。
謝謝ですm(__)m
写真の元金が3(2?)5万って書いてあるっぽいんので多分大丈夫かと・・・
もし必要ならこれを追加すればおk riritu=pow(riritu+1.0, 1./12)-1.0;
利率を12で割ればいい感じになるっぽい
本当だ。複利じゃなくて単利みたいだね。
SSと数値が 1 違うみたい 計算過程で切り捨てられちゃったかな? SSの方が正解だけどね
計算途中に 1.0/3*3 相当の部分があるからそこで切り捨てられてると思われ
358 :
350 :2006/12/17(日) 01:32:06
360 :
デフォルトの名無しさん :2006/12/17(日) 04:11:36
>>360 #include <stdio.h>
int main(void){
unsigned char filepath[256];
unsigned int numchar,i;
FILE *fp;
printf("Please input the file name ... ");scanf("%s",filepath);
printf("Please input the number of characters ... ");scanf("%u",&numchar);
fp=fopen(filepath,"rb");
if(fp==NULL) return 1;
for(i=0;;){
int c=fgetc(fp);
if(feof(fp)) break;
if(!(c=='\n'||c=='\r'||c==' '||c=='\t')){fputc(c,stdout);if(++i%numchar==0){i=0;fputc('\n',stdout);}}
}
fclose(fp);
return 0;
}
>>358 処理できない場合が多いみたい
回数を24回から23回に変更したときとか
364 :
358 :2006/12/17(日) 10:39:14
>>363 7行目がバグってた。
正しくは
start = (int)( ( (double)rent * rate * time ) + (double)rent ) / time + 1;
借入金額が極端に少ない場合も処理できないけど、これは仕様。
明らかに使い物にならないソフトでも、仕様と言えば通ると思ってる やつを量産した MS の罪は重いな。
366 :
358 :2006/12/17(日) 10:57:10
>>365 まぁ500円を24回払いで年利2.9% とか言われたら計算できないよ。
600円なら計算できたけど...まぁガキの貸し借りには使えないソフトだな。
ちなみに回数を36回で年利120%にするとトイチの計算になるが、元金の2.5倍以上の金利が
かかるのな。儲かるわけだわ。
>>348 ケインズの乗数定理を使えばもっと簡潔にできるんではあるまいか
369 :
326 :2006/12/17(日) 13:04:19
自分のプログラムもぜひお願いします
370 :
268 :2006/12/17(日) 13:38:41
私のもおねがいします!
>>326 >ここでの各品物が取りうる数は, 0または1とする(つまり0,1整数変数とする).
とあるけど各品物は1つしか入れられないって事?
だったら簡単そうだけど。
372 :
326 :2006/12/17(日) 14:01:49
たぶんそうだと思います
>>372 #include <stdio.h>
#define MAXSIZE 100
#define INF 99999999
int knapsak(int size[], int price[], int n, int knapsize) {
int i, x, ret;
int table[MAXSIZE];
for (i = 0; i <= knapsize; ++i)
table[i] = -INF;
table[0] = 0;
for (i = 0; i < n; ++i)
for (x = knapsize - size[i]; x >= 0; --x)
if (table[x + size[i]] < table[x] + price[i])
table[x + size[i]] = table[x] + price[i];
ret = 0;
for (x = 0; x <= knapsize; ++x)
if (ret < table[x]) ret = table[x];
return ret;
}
int main() {
int knapsize = 8;
int n = 5;
int size[] = {4,5,2,1,6};
int price[] = {45,55,20,10,60};
printf("%d\n", knapsak(size, price, n, knapsize));
}
374 :
326 :2006/12/17(日) 14:05:23
>>371 何個でも使ってよい場合は 373 で次のように書き換えるだけ。
before: for (x = knapsize - size[i]; x >= 0; --x)
after: for (x = 0; x <= knapsize - size[i]; ++x)
>>372 もう1つ質問。
品物の種類数 n の最大値を 32 にして良い?
そうじゃないと非常に難しい。
組み合わせ数が 2^32 以上になると unsigned int でループを回せなくなるので。
377 :
372 :2006/12/17(日) 14:11:38
大丈夫だと思います
>>373 の回答がエレガントなので書くの止めます。
いまいち理解できてないけど。
380 :
360 :2006/12/17(日) 14:45:17
<<361遅くなってすみません、ありがとうございました。
381 :
デフォルトの名無しさん :2006/12/17(日) 14:47:37
382 :
245 :2006/12/17(日) 15:12:07
どなたかお願いします
383 :
デフォルトの名無しさん :2006/12/17(日) 15:45:52
タイマー等の実行中のプログラムにスタート、ストップ機能をつけるという宿題が出たのですが 割り込みはどうすればよいのでしょうか?
>>383 ここの決まり事くらい守ってもらおうか?
[1] 授業単元:情報工学 [2] 問題文:以下に示したプログラムを改良して、前にある配列よりも小さい値を羅列せよ。 (最小値を求める問題ではない) 動作はこんな感じだと思います。 入力するランダム配列:50 30 50 10 80 20 出力される配列:30 10 [3] 環境 [3.1] OS:WindowsXP [3.2] gcc [3.3] 言語:C言語 [4]特になし #include <time.h> #include <stdio.h> #include <stdlib.h> /*--- 要素数nの配列aの要素の最小値を求める ---*/ int minof(const int a[], int n) { int i; int min = a[0];/* 最小値 */ for (i = 0; i < n; i++) if (a[i] < min) min = a[i]; return (min); }
>386 20は出力されないの?
20 ≧ 10 ってことでしょ
>386 void f(int a[], int n) { int i, min = a[0]; for(i=0; i<n; i++) { if(a[i]<min) { printf("%d ", a[i]); min = a[i]; } } }
>>390 を参考にしたところうまく実行できました
ありがとうございます
環境:windows xp、c、gcc (1) 3 桁の整数で,各桁の数字の3 乗和がもとの数と等しくなるものをすべて求めなさい。 (2) 整数nを読み込み素因数分解、すなわちnを素数の積に分解しなさい。 簡単な関数のみでおねがいします。 全然わかりません。
>392 (1) #include<stdio.h> #include <math.h> int f(int n){ int sum = 0; while(n) { sum += pow(n%10, 3); n /= 10;} return sum;} int main(void){ int i; for(i=100; i<1000; i++) if(i==f(i)) printf("%d\n",i); return 0;}
>>392 (2)
#include <stdio.h>
int main() {
int p, n;
scanf("%d", &n);
for (p = 2; p*p < n; ++p)
for (; n % p == 0; n /= p)
printf("%d ", p);
if (n > 1) printf("%d", n);
}
× for (p = 2; p*p < n; ++p) ○ for (p = 2; p*p <= n; ++p)
>>395 何故かMS-Windowsのビットマップはデータの上下が反転しているので
こうじゃあるまいか?
tmp[w*3 + (HEIGHT-1-h)*WIDTH*3] = (bitmap[w+h*WIDTH] &255 );
tmp[w*3+1 + (HEIGHT-1-h)*WIDTH*3] = ((bitmap[w+h*WIDTH] &65280) /256 );
tmp[w*3+2 + (HEIGHT-1-h)*WIDTH*3] = ((bitmap[w+h*WIDTH] &16711680) /(256*256));
>>398 「なんか変です」 じゃなくて何を入力したら何が出たかをきちんと書こうな。
$ ./a.exe 88 22211 となってます
402 :
395 :2006/12/17(日) 21:38:31
>>397 ああ 全部塗りつぶしで試したから気づかなかった
404 :
デフォルトの名無しさん :2006/12/17(日) 21:51:23
ある数値を渡されると、その数値の 2 乗を求め、 その値を return する関数 pow を作る。 main 関数において、1 から 10 までの数値の 2 乗を pow 関数を呼び出して求め、それぞれの値とその合計を表示する。 このソースコードをおしえてください。
#include <iostream> using namespace std; int pow(int x){ return x * x; } int main(){ int sum = 0; for(int i = 1;i <= 10;i++){ int p = pow(i); cout << p << endl; sum += p; } cout << sum << endl; return 0; }
406 :
デフォルトの名無しさん :2006/12/17(日) 22:07:28
>>406 コンパイルできなかったからゼロからやりなおせって?
コンパイルできない原因をつきとめろよ。
>>406 >うまくコンパイルできなかったので
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
409 :
デフォルトの名無しさん :2006/12/17(日) 22:28:09
>>409 見たまんまじゃないかwwwwwwww
reinterpret_cast<const char *>(buf)
とか
(const char*)
とか付けて明示的にキャストして渡せばおk
でもunsigned charな時点でちょっと痛い
412 :
367 :2006/12/18(月) 00:09:29
私のもぜひお願いいたします。
rarが怖くて開けない漏れはヘタレ
じゃあ俺もヘタレ
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):最大カット問題を解くプログラムを作成せよ。 以下の図(ノードとエッジの数はあらかじめ入力されている)のグラフに対する最大カット問題の解を表示せよ。 最大カット数と、そのときのカット方法を表示するプログラムを表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限: 年内
416 :
367 :2006/12/18(月) 01:09:28
C言語怖いガクガク(((( ;゚Д゚))))ブルブル
.cも怖い
>>416 俺の勉強不足なのかもしれんが・・・
ARQリクエストってナニ?
>>393 どなたか
int f(int n){
int sum = 0;
while(n) {
sum += pow(n%10, 3);
n /= 10;}
return sum;}
int main(void){
int i;
for(i=100; i<1000; i++) if(i==f(i)) printf("%d\n",i);
return 0;}
この意味を説明してください
難しくてわかりません、、
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ラプラシアンフィルターを実現させる関数laplacianを作成せよ void laplacian (int data[][Y_SIZE][3],int width,int height); また、3点を与えると三角形を描く関数riangleを作成せよ。y1<y2<y3と仮定してよい void triangle(int data[][Y_SIZE][3],int x1,int y1,int x2,int y2,int x3,int y3); main関数を以下のようにせよ void main{ int image [X_SIZE][Y_SIZE][3]; init_image(image,X_SIZE,Y_SIZE); triangle(int image[][Y_SIZE][3],64,5,120,30,20,100); save_bmp("temp1.bmp",image,X_SIZE,Y_SIZE); laplacian(image,X_SIZE,Y_SIZE); save_bmp("test2.bmp",image,X_SIZE,Y_SIZE); } [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:12月22日
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ソースを(表示方法)参考にして2次元ライフゲームを作成せよ。 ルール:2次元に並んだセルに対し以下のルールでセルの生死を決定する。ただし、セルの周囲とは上下左右に加え斜めも含んだ8個のセルのこと 1. 死んでいるセルの周囲に3つのセルが生きているセルがあれば次の世代は生きる。2.生きているセルの周囲に2つか3つの生きているセルがあれば次の世代でも生きる。3.1,2以外の場合なら次の世代で死ぬ #include<stdio.> #include<stdlib.h> #include<time.h> #include<windows.> #define X_size 75 #define Y_size20 void cell_dispO(); int data[X_size][Y_size]; void main{ int i,j; srand(time(0)); while(1){for(j=0;J<Y_size;j++) for(i=0;i<X_size;i++) if(rand()%10==0) data[i][j]=1; else data[i][j]=0; cell_disp(); Sleep(300); } } void cell_disp(){ int i,j; printf("\r"); for(j=0;J<Y_size;j++){for(i=0;i<X_size;i++) if(data[i][j]==1) printf("*"); else printf(" "); printf("\n"); } } [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:12月22日
>>421 プログラムするなら脳内デバッガは必須だぞ。
まぁそれが出来ないから丸投げしてるんだろうが…
少しでも自分で考えた結果を見せたほうがいいぞ。
ここはそんなスレじゃありません
>まぁそれが出来ないから丸投げしてるんだろうが… 全てはこの一語に尽きる。 カスに何を言っても無駄・・。
>>421 いつもならググれというトコロだけど、明日休みだから暇つぶしがてら・・・
int f(int n){
int sum = 0;
while(n) { // nがゼロでない間ループ
sum += pow(n%10, 3); // これまでの sum に、 nを10で割ったあまりを3乗したものを足し合わせて、sumに代入
n /= 10;}
return sum;} // 結果としてsumを返す
int main(void){
int i;
for(i=100; i<1000; i++) if(i==f(i)) printf("%d\n",i); // ループ中にiの値とf(i)の値が等しくなったら、iの値を表示
return 0;}
ってトコだわね。あとは自分で考えて。
>>424 上2行は調べました^^;
ちなみにわからないところが
whileの意味以外ほとんどなので丸投げさせてください、、
>421 一の位は元の数を10で割った余り 十の位は元の数を10で割ったときの商をさらに10で割った余り 百の位は元の数を10で割ったときの商をさらに10で割ったときの商を10で割った余り
>>426 プログラム知らなきゃ誰でも最初はカスだと思うんだが…。
真にカスなのは思考の片鱗すら見せず問題を丸投げする馬鹿。
>>428 >上2行は調べました^^;
これ最初に書いてた方が印象も大分変わると思うよ。
+=は加算代入演算子。その名の通り右辺値を左辺値に足し合わせる。
a+=b;はa = a+b;と等価。/=も除算代入演算子で説明は+=と殆ど一緒。
forはwhileに似たループ式。
for(a;b;c){
}
とあったらまずaを1度だけ実行して(初期化式)bを評価する(条件式)。
評価した結果が真なら(0以外なら){ }ブロックを1回実行。
実行が終わったらcを1回実行。んでまたbを評価して
真なら{ }を1回実行、んでcを1回実行してbを評価して…
これを延々続ける。
for(i=A;i<B;i++)ていうforループはiをAからB-1まで動かしながら
(B-A)回ループを行うっていうある種のセオリー。
for(i=100; i<1000; i++)なら100〜999まで動かすループを900回、ね。
432 :
426 :2006/12/18(月) 03:07:23
>>431 >プログラム知らなきゃ誰でも最初はカスだと思うんだが…。
尤も。
>真にカスなのは思考の片鱗すら見せず問題を丸投げする馬鹿。
最近そう思える奴が多くてイライラしてた。すまん。
[1] 授業単元:情報工学実験 [2] 問題文: 4つのデータ列(3,8,11,19,24,30,37,43)、(5,13,24,31),(1,6,4),(,6,7)を 2つずつマージするプログラムを作成せよ。 また、データ列が増えた場合にも対応できること。 (番兵法、ポインタを使用すること) [3] 環境 [3.1] OS:WindowsXP [3.2] gcc [3.3] 言語:C言語 [4]今日のPM6:00まで すべてのデータ列を1つのリストとみなして、()内の最初の値と最後の値にポインタを割り振ったり、 ()をスタックポインタとして、隣のスタックポインタの先頭要素を取り出してマージしたりと、 考えてみるものの、ポインタや構造体について深く学んでいないためプログラムが書けません・・・ どなたか、ご教授お願いします。
>>434 よく見たら問題分の配列間違ってました
訂正、及び動作を以下に示します
(3,8,11,19,24,30,37,43)、(5,13,24,31),(1,4.6),(,6,7)
↓ ↓ ↓ ↓
(3.5.8.11.13.24.24.30.31.37.43) (1.4.6.6.7)
↓ ↓
( 整列済みデータ列 )
>>434 alloc系使って良いかどうかわからなかったんで、こんなんでどうよ?
void merge( int *dest, int *src1, int *src2 )
{
while ( *src1 && *src2 ) *dest++ = ( *src1 <= *src2 ) ? *src1++ : *src2++;
while ( *src1 ) *dest++ = *src1++;
while ( *src2 ) *dest++ = *src2++;
}
void datprint( int *src )
{
while ( *src ) printf( "%d, ", *src++ );
printf( "\n" );
}
void main( void )
{
int dat[ 7 ][ 20 ] = { { 3, 8, 11, 19, 24, 30, 37, 43 }, { 5, 13, 24, 31 }, { 1, 4, 6 }, { 6, 7 } };
merge( dat[ 4 ], dat[ 0 ], dat[ 1 ] );
merge( dat[ 5 ], dat[ 2 ], dat[ 3 ] );
merge( dat[ 6 ], dat[ 4 ], dat[ 5 ] );
datprint( dat[ 6 ] );
}
>>437 とりあえずな、エラー文読め。
for が fo になっている点が1つ、{ と } が合ってない点が2つある。
439 :
デフォルトの名無しさん :2006/12/18(月) 10:39:15
>>432 カリカリしちゃうなら、俺に聞けスレに行くと良いよ
あちらは質問スレだからね
こっちはただ宿題を片付けるスレ
そういうこと。ここはカスを隔離してまとめて掃除するためのスレ。
カスをまとめるだけまとめて掃除しないスレだろ
まあ、まとまってさえいれば掃除してなくても大きな問題はない。
[1] C言語 [2] キーボードから入力された文字列に指定した文字が 何個含まれているか表示するプログラムを作りなさい。 動作例: キーから文字を数文字入力してください=alpha-dog 調べる文字を入力してください= a 入力された文字列の中に a は 2 個ありました。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ:Visual C++ [3.3] 言語: C++ [4] 期限: 12/18 17:00 [5] その他の制限:動作例に合うようにお願いします。
444 :
デフォルトの名無しさん :2006/12/18(月) 13:22:47
[1] 授業単元:プログラム理論 [2] 問題文(含コード&リンク):√xの定積分(積分範囲0〜1)をモンテカルロ法を用いて計算せよ 生成点数は10万点と1千万点とする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc 2.96 [3.3] 言語: C [4] 期限: 2006年12月19日12:00まで [5] その他の制限:
445 :
デフォルトの名無しさん :2006/12/18(月) 13:41:16
名前: デフォルトの名無しさん E-mail: 内容: [1] 授業単元:コンピュータ概論 [2] 問題文:30個の整数を入力データファイルに用意して、 その中から2番目に大きい整数を求めるプログラムを作成せよ 入力データは最大値を求める30個の整数の最大値を求めるプログラムと同じものを使用する 表示メッセージは全て独自のものに書き換える 入力リダイレクトで実行する 出力結果は出力リダイレクトで保存する [3] 環境 [3.1] OS:XP [3.2] コンパイラ名とバージョン:?? [3.3] 言語: C [4] 期限: 2006年12月18日17:00まで [5] その他の制限: 最大値を求めるプログラム↓ #include<stdio.h> main(void){ int i, m, x[30]; printf("最大から二番目の数字を求めます\n"); for (i = 0; i < 30; i++){ printf("%d番目の数=", i + 1); scanf("%d", &(x[i])); } m = 0; for (i = 1; i < 30; i++){ if (x[i] > x[m]) m = i; } printf("%d番目の数が最大値%d\n", m + 1, x[m]); }
>>443 #include <iostream>
#include <vector>
#include <algorithm>
#include <string>
int main(){
std::cout<<"キーから文字を数文字入力してください=";
std::string s;std::cin>>s;
std::cout<<"調べる文字を入力してください=";
char c;std::cin>>c;
std::cout<<"入力された文字列の中に"<<c<<"は"<<std::count(s.c_str(),s.c_str()+s.size(),c)<<"個ありました。";
return 0;
}
最近宿題投稿増えてねぇ?
448 :
デフォルトの名無しさん :2006/12/18(月) 13:45:32
入力データ↓ 5 49 -9 1 38 -56 2 6 23 -97 12 47 6 10 -28 37 47 1 -45 -9 -2 3 12 7 21 -33 0 61 -4 6 上のプログラムを元にしてやるのですが, 最大から二番目の数がどうしてもできません。 よろしくお願いします。
上って?
450 :
デフォルトの名無しさん :2006/12/18(月) 14:01:49
>448 二番目に多い数の添え字sを用意する。 x[0]とx[1]で大きい方の添え字をm、小さい方の添え字をsに代入する。 i=2からループを回してx[i]とx[s]を比較する x[i]がx[s]より大きかったらさらにx[i]とx[m]を比較する。 x[i]がx[m]より大きければ、sにmをmにiを代入する。 そうでなければsにiを代入する ループが終了したらsとx[s]を表示する
>>444 #include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main(i,v){
int*cnt=(int*)v;
*cnt=0;
srand(time(NULL));
for(i=0;i<100000;i++){
double x=(double)rand()/RAND_MAX,y=(double)rand()/RAND_MAX;
if(y<=sqrt(x))(*cnt)++;
}
printf("%lf\n",*cnt/100000.0);
*cnt=0;
for(i=0;i<10000000;i++){
double x=(double)rand()/RAND_MAX,y=(double)rand()/RAND_MAX;
if(y<=sqrt(x))(*cnt)++;
}
printf("%lf\n",*cnt/10000000.0);
return 0;
}
453 :
デフォルトの名無しさん :2006/12/18(月) 14:45:46
455 :
デフォルトの名無しさん :2006/12/18(月) 14:56:31
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 宝くじの抽選番号のあたり調べをし結果を表示するプログラムを作成 最初に当選番号を入力し、買った宝くじの番号を入力しあたりかはずれか表示する [3] 環境 [3.1] OS: Windows [3.3] 言語: C [4] 期限: 今週の水曜日 [5] その他の制限: ・バラ・連番より選択可にする ・連番の場合先頭の番号を入力するだけにする ・枚数チェック、文字チェックを行う。数字以外は入力できないようにする ・上位の等が当たったら下位の等は当たらない ・繰り返し入力できるように何かキーを入力したら終了できるようにする ・買った宝くじは何度でも入力できるようにする ・1等は6桁、2等5桁、3等4桁、4等3桁、5等2桁、6等1桁です
458 :
デフォルトの名無しさん :2006/12/18(月) 16:29:23
はい。そうです。
459 :
デフォルトの名無しさん :2006/12/18(月) 16:57:27
関数へのポインタってどう使うのか分かりません。 int gf[4]={0,1,2,3},count; int f1(int x,int y){ int f; f=gf[mlt(x,y)]^gf[x]^1; if(f==0) count++; return count; } int f2(int x,y){...} int f3(int x,y){...} ... int f100000(x,y){...} main(){ int x,y; for(x=0;x<4;x++){for(y=0;y<4;y++)f1(x,y)} print("%d\n",count); count=0; for(...){ for(...) f2(...) } print("%d\n",count); } ....... for....{ f100000 } print(...); } こんな書き方してますが、これを関数を要素にもつ配列と定義できないでしょうか? またこのとき関数に値を渡す方法が分からないのですがどなたか教えてくださいませ。
http://pc8.2ch.net/test/read.cgi/tech/1165022193/611 書いてみたけどどうだろう…?
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int no, answer;
srand(time(NULL));
do {
answer = rand() % 10;
printf("数字を入力して下さい:");
scanf("%d", &no);
if ( answer == no )
puts("正解です。");
else if ( answer > no )
puts("大きいです。");
else
puts("小さいです。");
} while ( answer != no );
return 0;
}
>>461 一つの答えに対して答えるチャンスは一回きり?
(どちらに対してどちらが大きいのか分かりにくいかも)
463 :
461 :2006/12/18(月) 18:02:11
>>462 確かに自分で見直して勘違いしてしまいました;;
アドバイスありがとうございます。
int main(void)
{
int no, answer;
srand(time(NULL));
answer = rand() % 10;
do {
printf("数字を入力して下さい:");
scanf("%d", &no);
if ( answer == no )
puts("正解です。");
else if ( answer > no )
puts("小さいです。");
else
puts("大きいです。");
} while ( answer != no );
return 0;
}
言葉からソースにするのって難しいですね;;
[1] 授業単元: 二分探索木の追加削除
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3218.txt [3] 環境
[3.1] OS: UNIX
[3.3] 言語: C
[4] 期限: 2006年12月19日12時40分
[5] その他の制限
ノードのアドレス表示をしないといけないのですが、そもそもこれが何をやっているのかがまったくわかりません。
一応自分でやってみたのですが、中身がわからないので解説を求められると答えることができません。
どなたか各箇所にコメント分で説明をつけてもらえないでしょうか。
よろしくお願いします。ノードのアドレス表示も問題あったら教えていただけると幸いです
×一応自分でやってみたのですが、中身がわからないので ○一応他人にやってもらったのですが、
× ×一応自分でやってみたのですが、中身がわからないので × ○一応他人にやってもらったのですが ○ ○一応他人にやってもらったのですが、中身がわからないので
>>467 一応自分でやってみた=一応自分で実行させてみた の意と思われ
ここは日本語教室か
471 :
466 :2006/12/18(月) 21:37:17
>>467 ~
>>469 はい、実行させてみたってことです。変な言い方してしまってすみません。
プログラム自体は自分で作れてないです。まったくわからないです。
>>464 セキュ板行けよ。
宿題どころかCすら関係ねーじゃねーかw
[2] 問題文(含コード&リンク):キーボードより0〜9の数値文字を10回入力し、 その出現回数を表示せよ。 ナオ、出現回数はint型の配列要素b[0]〜b[9]に カウントするものとする。 [3] 環境 [3.1] OS: Windows [3.3] 言語: C 期限は明日までです。 よろしくお願いします。
474 :
デフォルトの名無しさん :2006/12/18(月) 23:05:40
>>473 #include<stdio.h>
int main(){
int i,n,b[10];
for(i=0;i<10;i++)b[i]=0;
for(i=0;i<10;i++){
scanf("%d",&n);
b[n]++;
}
for(i=0;i<10;i++)printf("%d %d回\n",i,b[i]);
return 0;
}
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): べき乗を求める関数を製作し、それを利用してべき乗を求めるプログラムを製作せよ。 関数は下記の通りとする。なお、オーバーフローは考慮せずともよい。 int beki(int in,int exp) in 入力値 exp 指数値(入力値をexp乗する) 戻り値 計算結果 入力に関して キーボードから、入力値と指数値をスペース1つ開けて1行で入力する 出力に関して 結果+改行のみ出力 [3] 環境 [3.1] OS: Windows [3.3] 言語: 言語:C [4] 期限: 2006/12/19 お願いします>、<
477 :
デフォルトの名無しさん :2006/12/18(月) 23:36:38
[1] 授業単元:コンピューター演習4 [2] 問題文(含コード&リンク):数字を入力する画面1つと+、=ボタンで3つの数字の足し算を可能にしなさい。 [3] 環境 [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: [3.3] 言語: C++ [4] 期限: 今週木曜
>>476 #include<stdio.h>
int beki(int in,int exp){
if(exp<2) return in;
return in * beki(in,exp-1);
}
int main(){
int in,exp;
scanf("%d %d",&in,&exp);
printf("%d\n",beki(in,exp));
return 0;
}
0とか-とかは考えるの忘れてた
479 :
デフォルトの名無しさん :2006/12/18(月) 23:41:17
>>476 #include <stdio.h>
int beki(int in,int exp)
{
int i=1;
for(;exp>0;exp--)
i*=in;
return i;
}
int main(void)
{
int in,exp;
scanf("%d %d",&in,&exp);
printf("%d\n",beki(in,exp));
return 0;
}
480 :
デフォルトの名無しさん :2006/12/18(月) 23:44:11
うへ 遅かった上に、exp<2の時考えてなかった。
>>478 のbeki(int in,int exp)のすぐ後ろに
if(exp==0) return 1;
をつければ、0には対応できるぞ
-は見なかったことにした。intだし。
482 :
sage :2006/12/18(月) 23:57:38
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):20個の整数データを読み込んで 直接挿入法を用いて小さい順に整数を並べて出力するCプログラム を作成せよ。 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 2006年12月20日13:00まで] [5] その他の制限: 実際に読み込む、20個の整数データは適当な整数データを catコマンドを使って作成して、実際に実行するときに標準入力のリダイレクション 機能を使って入力する。よって整列化のプログラムを作ることになる。 q_sortやsort関数は使用不可、バブル整列化とは違うことをふまえて考えてください。 さっぱりです。皆さんの力を貸してください
>>482 10^-5|x|って10^(-5*|x|)か?それとも(10^-5)*|x|なのか?
>>483 #include<stdio.h>
#define N 5
int main(){
int i, j, temp, ptr[N];
for(i=0;i<N;++i)scanf("%d",&ptr[i]);
for(i=1;i<N;++i)for(j=i;j>0&&ptr[j-1]>ptr[j];--j){
temp = ptr[j];
ptr[j] = ptr[j-1];
ptr[j-1] = temp;}
for(i=0;i<N;++i)printf("%d ",ptr[i]);
return 0;}
486 :
◆GJenck4cmw :2006/12/19(火) 00:20:59
[1] 授業単元: 情報処理T [2] 問題文:[x=b^2-4ac]の式より解の数を戻り値として返却する関数を 作成し、解の個数を表示せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:Borland C++Compiler 5.5 [3.3] 言語: C++ [4] 期限:2006年12月19日 AM 8:00 まで [5] その他の制限:C言語を習い始めて3ヶ月と19日です。 構造化プログラミングを習っているところなので 構造化プログラミングを使用した形で よろしくお願いします。
>>485 #define N 5 は20に変更してくれ 忘れてた
488 :
デフォルトの名無しさん :2006/12/19(火) 01:01:11
きっと
>>190 が最も難題だと思います。やってみてください
>>488 難題だから土曜日にならないと解けないわ
490 :
デフォルトの名無しさん :2006/12/19(火) 01:04:59
>>485 ごめんなさい、(10^-5)*|x|です。
492 :
デフォルトの名無しさん :2006/12/19(火) 02:16:51
493 :
デフォルトの名無しさん :2006/12/19(火) 04:27:46
丸投げじゃないんですけど、vector型の一番最後に入っている要素を取り出したいんですがどう書けばよいのでしょう? end = vec[vec.size()-1]じゃエラーなんですよね・・・。 助けてください><
>>493 おっとすいません!これでできるっぽいです。エラーは他のとこででてました><
496 :
デフォルトの名無しさん :2006/12/19(火) 07:00:55
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン:VC2005 C++ [3.3] 言語: (C++ [4] 期限: 火曜日以内 [5] その他の制限: 3つの要素x、y、zを持つ標準テンプレート vector をzの要素だけを見て小さい順にソートしてください。 3つの要素をもつクラスは class XYZ{ public: int x,y,z; IJFlag(int a, int b, int c) {x=a; y=b; z=c; } }; と定義しておきました。 ポインタを使ったサブ関数を作っていただきたいので void XYZsort(vector<XYZ>& xyz) { このカッコの中をお願いします、先生方!! }
[1] 授業単元:ソフトウェア工学U [2] 問題文 挿入法のアルゴリズムで,100個の数値データを昇順にソート(整列)する プログラムをC言語で作成 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:Visual C++ 6.0 [3.3] 言語:C [4] 期限:[2006年12月20日23:00まで] お願いします
498 :
466 :2006/12/19(火) 07:38:51
やはり「コメントつけて解説してくれ」っていうのはスレ違いだったんでしょうか・・・?
>>498 わからないときはどこがわからないのかを書け
includeやmainからなんて解説してらんない
501 :
女子大1年生 :2006/12/19(火) 08:46:12
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):2つの文字列の大小を比較する関数strcmp()のプログラムを作成しなさい。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:bcc32 [3.3] 言語:C [4] 期限: [2006年12月19日18:00まで] ここにいる先生方にとっては簡単なことかもしれませんが、 アフォな私には難しいんです。どなたか助けてください。
>>486 void input( double *a, double *b, double *c )
{
printf( "a * x * x + b * x + c = 0\n" );
printf( "a = " ); scanf( "%lf", a );
printf( "b = " ); scanf( "%lf", b );
printf( "c = " ); scanf( "%lf", c );
}
double truth( double a, double b, double c )
{
return ( b * b - 4 * a * c );
}
void equation( double a, double b, double c )
{
int t = truth( a, b, c );
if ( t > 0 ) {
printf( "実数解で、解は2つです.\n" );
} else if ( t < 0 ) {
printf( "虚数解で、解は2つです.\n" );
} else {
printf( "実数解で、解は1つです.\n" );
}
}
void main( void )
{
double a, b, c;
input( &a, &b, &c );
equation( a, b, c );
}
このままだと留年するかも・・・ 助けてください・・・ 1] 授業単元:C言語プログラミング [2] 問題文(含コード&リンク):年賀葉書の抽選番号の当たり調べをして結果を表示するプログラムを作成せよ [3] 環境 [3.1] OS: Windows [3.3] 言語:C [4] 期限: [2006年12月20日16:00まで] [5] 備考: 桁数チェックと文字チェックを行う数字以外は入力を受付けないようにする 1等6桁、2等下5桁、3等下4桁、4等下2桁 何度でも自分の葉書の抽選番号が入力できるようにして何かキーを入力したら終了できるようにする 助けてくださいOTL
よろしくお願いします [1]数値計算学 [2]以下の計算問題と解くプログラムを作成せよ 1-2 正方形の領域0≦x≦1、0≦x≦1においてラプラス方程式 冰=-1、境界条件:u(x,1)=0, u(x,0)=0, u(0,y)=0, u(1,y)=0 を ガウスーザイデル法及びSOR法を用いて解け 1-3 問1-2の結果を0から1まで0.01おきに等高線に描け ただしx、y方向の格子間隔hはともに1/20 また解の収束条件は|u(k+1) - u(k)| < 10^(-10) 11,11 11,11 [3]C言語、OSはLinux、Winどちらでも [4]12月21日12:00まで [5]構造体やポインタなどといった基本事項は一通り学んでいます
>>505 ラプラス方程式、ガウスーザイデル法及びSOR法、格子間隔h、解の収束条件とか
正直ワカンネ
はは 俺も数値計算法の講義は取らなかったからなぁ
wiki読んでも∂の意味すら分らない俺 ノ⌒匙
511 :
初心 :2006/12/19(火) 12:58:14
ある数値を渡されると、その数値の 2 乗を求め、 その値を return する関数 pow を作る。 main 関数において、1 から 10 までの数値の 2 乗を pow 関数を呼び出して求め、それぞれの値とその合計を表示する。 このソースコードをおしえてください。 これをC言語でお願いします。
512 :
デフォルトの名無しさん :2006/12/19(火) 12:59:23
[1] 授業単元:計算機演習 [2] 問題文(含コード&リンク):数独(ナンバープレース)を解くプログラムを作りなさい 4×4のますめの数字をファイルから入力。 1〜4の数字を配置。 各行、各列、2×2の小領域で各数字は1つだけ使用。 例: 1000 0200 3001 0004 (数字の無いところは0) ↓ 1342 4213 3421 2134 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語: C [4] 期限: ([2007年1月16日12:00まで] [5] その他の制限:特に無し 宜しくお願いします。
513 :
デフォルトの名無しさん :2006/12/19(火) 13:19:34
[1] 授業単元:計算機演習2 [2] 問題文(含コード&リンク):4×4のマス目の数字をファイルから入力 1〜4の数字を配置 各行、各列、2×2の小領域で各数字はちょうど1個 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C言語 [4] 期限: ([2007年1月23日12:00まで] [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) カンニングとみなされるので、512とは違う方法のプログラムでお願いします。
カンニングったって、実際にすることになるじゃん・・・素直に認めて他人任せは すべてカンニング竹山とみなすw
516 :
513 :2006/12/19(火) 13:21:56
補足… 実行例: 1000 0200 3001 0004 (数字の無いところは0) ↓ 1342 4213 3421 2134 となるようにおねがいします
先生にバレてもいい覚悟の奴だけ丸投げするべきだろ 実際見てる先生もいるみたいだしな
519 :
497 :2006/12/19(火) 14:01:16
520 :
デフォルトの名無しさん :2006/12/19(火) 14:06:37
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):2 次方程式 x2 + ax + b = 0 の実数解を求め,画面表示するプログラムを作成しなさい.ただし, 以下に示した条件を満たすこと. 係数a,b の条件: 実数型とし,キーボードから入力させること. 関数の条件: プロトタイプ: int solve( float, float, float *, float * ) 第1 引数: x の係数 第2 引数: 定数項 第3 引数: 第1 解へのポインタ 第4 引数: 第2 解へのポインタ 返り値: 解の個数 画面表示の条件: 関数からの返り値を利用し,画面表示を適切に変化させること. 平方根を計算するためには,関数「double sqrt(double)」を使用することができる.ただし,プログラ ムの冒頭に「#include math.h」と記述し,コンパイルオプションとして「-lm」を指定すること. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C よろしくお願いします。
521 :
デフォルトの名無しさん :2006/12/19(火) 14:07:09
>>514 やりすぎw
二乗を返すだけだから、引数は一つで 引数*引数返すだけ。
>>521 そういう主観は一切要らない、そう思うなら自分のやり方でレスすりゃ良いだろ。
汎用性を考えたやり方が気に入らないならそうと言え、お前のレベルはその程度だ
で一蹴されるよ。
524 :
512 :2006/12/19(火) 14:22:36
>>522 様
素早い対応ありがとうございます。
私の表記に少し説明不足がありましたので追記致します。
1000
0200
3001
0004
等のかかれたtxtファイルを読み取り、そのtxtの問題を解くプログラムを
作って頂けないでしょうか?
たびたび申し訳ありません。
525 :
504 :2006/12/19(火) 14:23:39
>>504 です。
少しだけでいいので教えてください・・・
>>524 >>1 ・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
527 :
デフォルトの名無しさん :2006/12/19(火) 14:34:50
>>523 汎用性高いし、良いコードだと思うよ。
気に触ったならごめん。
>>525 それじゃ少しだけ
forとifと配列使えばできるよ
530 :
45 :2006/12/19(火) 14:40:04
シェーカーソートで昇順に並べるプログラムを教えてください。あと移動回数もわかるやつでおねがいします。
>>523 ある数値を渡すと、二乗(固定)を返す関数を作れと言われて、
数値の他に指数も渡さなきゃいけない関数作るのは、どうかと…
勝手に仕様変えるのイクナイ
533 :
デフォルトの名無しさん :2006/12/19(火) 14:51:50
535 :
ピンチ :2006/12/19(火) 15:07:30
[1] 授業単元: 分散処理 [2] 問題文(含コード&リンク):親プロセスは 1+2+・・・+20の計算と印字、子プロセスは、1+2+・・・+60の計算と印字、孫プロセスは1+2+・・・+120の計算と印字を行うプログラムを作りなさい 尚大切と考えられる部分と説明も述べよ [3.1] OS: WindowsXP [3.2] コンパイラ名とバージョン: Visual Studio 2003 [3.3] 言語: C [4] 期限: 限りなく早くに [5]特になし
限りなく早くに という選択肢はありません 質問を却下します
537 :
デフォルトの名無しさん :2006/12/19(火) 15:30:06
ファイル入出力でstring型の文字列は使えますか
539 :
デフォルトの名無しさん :2006/12/19(火) 15:36:53
〜.open("file.txt");の"file.txt"の代わりに string型の変数を入れても大丈夫でしょうか
>>539 いちいち人に聞かないとなにもできないのか?
543 :
デフォルトの名無しさん :2006/12/19(火) 16:22:57
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク):まず1 次元整数型配列(配列名data,要素数は任意)を準備する.キーボードから任意個の整数デ ータを入力させ,入力されたデータの @最大値,A最小値,B平均,C標準偏差 を求めて画面表 示するプログラムを作成しなさい.ただし,上記の4 つの処理について,それぞれ下記の条件を満た す関数を作成すること. @ 最大値: int max( int *, int ) 第1 引数: 配列アドレス 第2 引数: データ数 返り値: 最大値 A 最小値: int min( int *, int ) 第1 引数: 配列アドレス 第2 引数: データ数 返り値: 最小値 B 平均: float average( int *, int ) 第1 引数: 配列アドレス 第2 引数: データ数 返り値: 平均値 C 標準偏差: float std_dev( int *, int ) 第1 引数: 配列アドレス 第2 引数: データ数 返り値: 標準偏差 [3] 環境 [3.1] OS: (Linux) [3.2] コンパイラ名とバージョン: (gcc 3.4) [3.3] 言語: (C) 分かる方、お願いします。
544 :
デフォルトの名無しさん :2006/12/19(火) 16:31:42
.open,.closeとfopen,fcloseって何が違うんでしょうか?
名前
[1] 授業単元: C言語 [2] 問題文(含コード&リンク):2つのint型配列a,bと、その大きさを受け取り、全要素を入れ替える関数 void swap(int *a, int *b, int n)を作成しなさい。 swap関数実行前 a[0] = 0 b[0] = 3 a[1] = 1 b[1] = 4 a[2] = 2 b[2] = 5 swap関数実行後 a[0] = 3 b[0] = 0 a[1] = 4 b[1] = 1 a[2] = 5 b[2] = 2 [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 金曜 [5] その他の制限:main()関数側で結果を表示すること。配列a,bの要素数は同じとする。 作ったけど入れ替えしてくれません お願いします
void swap( int *a, int *b, int n ) { int i; for ( i = 0; i < n; i++ ) a[ i ] ^= b[ i ] ^= a[ i ] ^= b[ i ]; }
548 :
504 :2006/12/19(火) 16:52:44
>>504 とりあえず1等から4等の当たり番号を教えれば良いと思うよ。
550 :
初心者修行中 :2006/12/19(火) 17:36:34
>>550 Cってforの中で変数宣言できたっけ?
>>550 間違ってはいないが,標準偏差の計算が非効率.
average(arr,num) が合計 num 回呼ばれるので,
計算量が O(num^2) になっている.
あらかじめ変数にでもキャッシュしておけば
O(num) になってハッピー.
553 :
初心者修行中 :2006/12/19(火) 18:11:23
>>547 このアホなトリックを使うやつ後を絶たんが、
実行結果が未定義であることを理解してるのかね
代入演算子の左右の評価順が不定、ってやつな。 オプチマイズかけたら消されそうだし。
556 :
デフォルトの名無しさん :2006/12/19(火) 18:50:37
[1] 授業単元:c言語 [2] 問題文(含コード&リンク):音声再生コマンドを含んだ情報を(メール)送信し、 クライアント側で自動的に再生させるプログラムを作成 せよ。 [3] 環境 vc++(win32コンソールアプリケーション) [3.1] OS:windows [3.2] コンパイラ名とバージョン:vc 6.0 [3.3] 言語: c++ [4] 期限:2006年12月28日 [5] その他の制限:特になし
>>556 10万くらいくれるならやってあげてもいいかなってレベルだな
Cでメーラーから作成か。
559 :
◆GJenck4cmw :2006/12/19(火) 19:11:37
>>503 ありがとうございます。
期限過ぎてますが、がんばってみます。
562 :
デフォルトの名無しさん :2006/12/19(火) 20:03:56
すまん、教えてくれ LINUX gcc だが次のように int func(int inum) { char cDtata[inum]; : : : } のように auto変数の配列サイズを 引数で動的に 指定するのは OK?
俺の知る限り無理 C99とかだったらできるのかもしれない・・・・しらんけど
>>562 スレ違い
OKかOKじゃないかはやってみればすぐわかることだろ
565 :
562 :2006/12/19(火) 20:15:53
すまん、すまん、すまん、 core 解析してたら、この記述にぶちあたってしまた、 俺も、こんな記述したことないから C++ の拡張 にでもあるかな? とオモって、調べたがわからなかった。。。 たぶん、core の 最初のトリガは int func( int im char * cp) { char cData[i]; で、 cData に 文字 iバイト転送 & ヌルバイト を書いて その NULLバイト が cData[i+1] を壊し、それが めぐりめぐって core となったようなかんじなのだが そもそも auto 変数のサイズを 動的に 変数で指定OK?????????
いやだからスレ違いだって 宿題ですらないだろ?
>>562 だからすれ違いだと。
それはC99にある。
568 :
562 :2006/12/19(火) 20:23:26
すまん、 ちょっとあせってる、「俺に聞け」でいいのかな? thnks bye
569 :
デフォルトの名無しさん :2006/12/19(火) 20:38:22
いや、おそらく
>>562 は、C99を知らないのではないのか?
うるせえボケ
>>531 お前さぁ、いい加減自分基準での他人への意見がうざい
言いたいことがあるとしても、自分で答えたソースを提出すりゃ良いだろ
何もお前の発言権を妨害しているわけじゃないんだから
お前は他人への批判しかしていないってことに気づけ
それから、
>>511 を良く読み直してから出直せ。
ぶっちゃけ、math.h に定義されている pow ライブラリを知っていれば
自分で実装なんてしなくても済むんだが、それに似たものを作れって課題だろ。
ttp://www.bohyoh.com/CandCPP/C/Library/pow.html 本来の pow を使うんだったら double 型で使うようになるが
初心者じゃそこまで頭が回らんだろうけど。
>>571 蒸し返す方がうざい
スルーできないのかと
>汎用性を考えたやり方が気に入らないならそうと言え、お前のレベルはその程度だ
> で一蹴されるよ。
十分あんたも自分基準だ
他のヤツらがスルーしてるにもかかわらず
574 :
デフォルトの名無しさん :2006/12/19(火) 22:17:47
>>572 はぁ?どこが?自分基準で何が悪い?問題はそれで他人を否定することだろ?
んじゃお前の書いたソースはお前の基準で書いてないのかよ?w
悪いがもっとうえの世界基準ってのを知れば、自ずと幅広い基準に従うようになっちゃうんだよw
だから固有の環境でしか通用しないものが低レベルと思われるし
その程度の考えでより優れたものを批判するから馬鹿にされるw
お前も黙ってろ、カス
575 :
デフォルトの名無しさん :2006/12/19(火) 22:19:57
>>531 531 名前:デフォルトの名無しさん 投稿日:2006/12/19(火) 14:42:24
>>523 ある数値を渡すと、二乗(固定)を返す関数を作れと言われて、
数値の他に指数も渡さなきゃいけない関数作るのは、どうかと…
勝手に仕様変えるのイクナイ
数値の他に指数も渡さなきゃいけない関数作るのは、どうかと…
数値の他に指数も渡さなきゃいけない関数作るのは、どうかと…
勝手に仕様変えるのイクナイ
勝手に仕様変えるのイクナイ
いつ誰が何の仕様を変えたんだよwwww
質問者が引数の数を指定していないにもかかわらずwwww
>>531 が頭が悪いのはヨーク分かった、お前基準は低レベルだから黙ってろよ、な?
低学歴必死だなw
>二乗(固定)を返す関数 >二乗(固定)二乗(固定)二乗(固定)二乗(固定)二乗(固定)二乗(固定)二乗(固定) だから#defineで固定してあんじゃんw 汎用性の意味も理解していないなら、自分で作って自分の答えをレスしてやりゃ良いだろ。 誰もお前の単に引き継いだ値同士を掛けるだけのライブラリを否定してないってw
[1] 授業単元:C言語基礎 [2] 問題文 各行の最初の要素が数値、二番目の要素がその2乗値、3番目の要素が3乗値になる5×3の配列を初期化する。 次にこれらの数値をタブ区切りで画面に表示させる。 [3] 環境 [3.1] OS:linux [3.2] 分かりません・・ [3.3] 言語: c [4] 期限:今日中 [5] その他の制限:特になし ここまで作ったんですが、初期値の出力の方法がどうしてもうまくいきません、教えてください(_ _) くだらない問題だったらすみません #include <stdio.h> int main(void) { int cube[][3] = { {1, 1, 1}, {2, 4, 8}, {3, 9, 27}, {4, 16, 64}, {5, 25, 125} }; たぶんこのへんに初期値の出力 return 0; }
>>577 p行q列目はprintf("%d",cube[p][q]);で出力できるよ
579 :
デフォルトの名無しさん :2006/12/19(火) 22:31:17
>>576 マクロ使っても、パラメータ一つ渡すはずの仕様からは外れてんだろ。
カリカリすんな。
>577 int i; for(i=0; i<5; i++) printf("%d\t%d\t%d\n", cube[i][0], cube[i][1], cube[i][2]);
581 :
デフォルトの名無しさん :2006/12/19(火) 22:37:16
582 :
577 :2006/12/19(火) 22:38:47
できました、ありがとうございました!! もっと早く聞いていればよかった。悩んでた数時間がもったいなかったですorg
>>579 >パラメータ一つ渡すはずの仕様
どこにその1つしか渡さないという指定があるの?
質問者のレスをよーーーーく読み返してから自分で作ったものを提出しろや。
批判しかしない無能な野党と同じだぞお前?w
たかが同じ値を掛けるだけのものをいちいち関数にして渡して戻してなんて
やっていること自体無駄だと思うけどなw
>>511 には ある数値を渡されると と書かれているが
ある数値が1つであるとは書かれていないのに気づけ。
>581 前にも書かなかった?
>>587 お前が質問を1万回読み直せよ、文盲w
あっ、お前日本語も理解できない在日朝鮮人か?
頼むから祖国に帰って核実験失敗に巻き込まれて消滅してくださいね♠
なんだよ
>>577 簡単そうだからやったらレスついてたよ。
でも、カキコしてあげチャオ
#include <stdio.h>
int main()
{
int num[5][3] = {0};
int temp[5] = {0};
int temp2[5] ={0};
for(int i = 0; i < 5; i++){
num[i][0] = i + 2;
temp[i] = num[i][0];
temp2[i] = temp[i];
}
for(int j = 0; j < 5; j++){
for(int i = 1; i < 3; i++){
temp[j] *= temp2[j];
num[j][i] = temp[j];
}
}
for(int j = 0; j < 5; j++){
for(int i = 0; i < 3; i++){
printf("%d ",num[j][i]);
}
putchar('\n');
}
putchar('\n');
return 0;
}
>589 >これらの数値をタブ区切りで画面に表示させる
591 :
589 :2006/12/19(火) 23:17:17
はいすいません printf("%d\t",num[j][i]); ですね。 ずびませんでじだ!!
>>581 とりあえず簡単なところから.
最小公倍数を返す関数名の指定がgcd(int, int)なのは嫌がらせですか?
/* 最小公倍数 */
#include <stdio.h>
int gcd(int m, int n) {
int q = m, r = n, w;
while(r){w=q%r; q=r; r=w;}
return m*n/q; }
int main() {
int m, n;
printf("input m: "); scanf("%d", &m);
printf("input n: "); scanf("%d", &n);
printf("lcm: %d\n", gcd(m, n)); }
593 :
デフォルトの名無しさん :2006/12/19(火) 23:29:16
お忙しいかとは思いますが、 482をよろしくお願いします。 問題文の10^-5|x|は(10^-5)*|x|です。
595 :
デフォルトの名無しさん :2006/12/19(火) 23:43:32
[1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 構造体を用いて以下のプログラムを作成せよ 1 3人分の学籍番号、氏名(ローマ字)をそれぞれ構造体に格納する。 2 画面に以下のメッセージを表示し、キーボードからの入力を待つ。 (1)学籍番号を入力して下さい (2)終了する 3 選択した学籍番号に応じた氏名を画面に表示する。 4 2に戻り(2)を選択するまで処理を繰り返す。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: cygwin [3.3] 言語: C [4] 期限: 12月21日 [5] その他の制限: 学籍番号と氏名は 015:tanaka 037:sato 054:suzukiでお願いします。
596 :
デフォルトの名無しさん :2006/12/19(火) 23:43:51
>>594 うっとうしい、宿題に答える気がないなら失せろ
お前なりのソースを書いてから意見しろ、無能クズニート
言い争ってる暇があったら未回答の片付けろ
598 :
デフォルトの名無しさん :2006/12/20(水) 00:00:08
>>556 できあがったプログラム見てみたいなぁ
あ、おれ556じゃないからw
何この高度な宿題と、低度なレスw ワロタ
600 :
デフォルトの名無しさん :2006/12/20(水) 00:19:08
そんなに難しいの?
>>595 #define MAX_NUMBER 3
#include <stdio.h>
#include <string.h>
int main()
{
char buf[4];
int i;
struct meibo
{
char key[4];
char name[7];
} ;
struct meibo gakuseki_list[MAX_NUMBER] = { "015", "tanaka", "037", "sato", "054", "suzuki" };
while (printf("(1)学籍番号を入力して下さい\n(2)終了する\n"), strcmp(gets(buf), "2"))
{
for (i=0 ; i<MAX_NUMBER ; i++)
if (!strcmp(gakuseki_list[i].key, buf))
printf("%s\n", gakuseki_list[i].name);
}
return 0;
}
603 :
デフォルトの名無しさん :2006/12/20(水) 00:46:19
[1] 授業単元:プログラミング(C言語) [2] 問題文:英語の文章のtxtファイルを読み込み、次のように分析するようなプログラムを作りなさい。 @単語の総数を調べるA一番つづりが長い単語を表示するB単語の頭のアルファベットの中で一番多いものを表示する。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C [4] 期限: 今年中 [5] その他の制限: #include <stdio.h> int main(void) { int c; FILE *fp; fp=fopen("test.txt","r"); if (fp==NULL) { printf("ファイルが見つかりません。\n"); return 0; } while ((c=fgetc(fp))!=EOF) { ............................... } fclose(fp); return 0; } このような感じでお願いします。本当にお願いします。
606 :
デフォルトの名無しさん :2006/12/20(水) 00:55:02
>>606 >>596 が、エレガントで可搬性が高く、様々なパラメータでオプションを指定できる形で実装してくれるから、それを待て。
>546 void swap(int *a, int *b, int n){ int t; while(n) { t = a[--n]; a[n] = b[n]; b[n] = t; }
609 :
デフォルトの名無しさん :2006/12/20(水) 01:17:16
>>593 (1)をやってみたけど問題文の値と結果が全然異なるから違ってたらスマン
あとぼるじょあをよろしく
#include <iostream>
#include <cmath>
#define sgn(a)((a) == 0.0 ? 0.0 : (a) < 0.0 ? -1.0 : 1.0)
//f(x) = (x^2-x+1)^2 - x^2(2x+log x)
double func(double x)
{
return pow((x*x - x + 1.0), 2) - x*x * (2*x + log(x));
}
//f'(x) ≒ f(x+ε)-f(x-ε) / 2ε
double func2(double x)
{
double eps = pow(10.0, -5) * sgn(x)*x;
return func(x + eps) - func(x - eps) / 2*eps;
}
int main()
{
using namespace std;
cout << " x f'(x) true f'(x)" << endl;
for (double x = 0.1; x < 4.1; x += 0.1) {
printf("%.1f %10.5f %10.5f¥n", x, func(x), func2(x));
}
return 0;
}
610 :
デフォルトの名無しさん :2006/12/20(水) 01:30:08
611 :
デフォルトの名無しさん :2006/12/20(水) 01:40:19
>>596 571 :デフォルトの名無しさん :2006/12/19(火) 21:56:33
>>531 お前さぁ、いい加減自分基準での他人への意見がうざい
言いたいことがあるとしても、自分で答えたソースを提出すりゃ良いだろ
何もお前の発言権を妨害しているわけじゃないんだから
お前は他人への批判しかしていないってことに気づけ
それから、
>>511 を良く読み直してから出直せ。
ぶっちゃけ、math.h に定義されている pow ライブラリを知っていれば
自分で実装なんてしなくても済むんだが、それに似たものを作れって課題だろ。
ttp://www.bohyoh.com/CandCPP/C/Library/pow.html 本来の pow を使うんだったら double 型で使うようになるが
初心者じゃそこまで頭が回らんだろうけど。
583 :デフォルトの名無しさん :2006/12/19(火) 22:40:25
>>579 >パラメータ一つ渡すはずの仕様
どこにその1つしか渡さないという指定があるの?
質問者のレスをよーーーーく読み返してから自分で作ったものを提出しろや。
批判しかしない無能な野党と同じだぞお前?w
たかが同じ値を掛けるだけのものをいちいち関数にして渡して戻してなんて
やっていること自体無駄だと思うけどなw
お前このスレに向いてないよ。
無駄だろうがなんだろが、出題者は、言語への理解を深めるための課題を出してるだけだろう。
ここは実務の場所じゃなく、課題出された者への回答を与える場だ。
無駄とかいうなら、このスレ自体も、人の営みも、壮大な無駄だ。
エントロピーは増大し、全ては壊れていく世界で、意味のあることなんて無い。
意味は、意味を見出すものが与えるだけ。
無駄とか無駄じゃないとかは、主観的な意見だ。
自作自演?二重人格?
>自作自演?二重人格? 違うだろ
本人はわからないらしいからね。
>>546 #define ARRAY_SIZE 3
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
void swap(int *a, int *b, int n)
{
int *c;
c = (int*)malloc(n);
memcpy(c, a, n * sizeof(int));
memcpy(a, b, n * sizeof(int));
memcpy(b, c, n * sizeof(int));
}
int main()
{
int a[ARRAY_SIZE], b[ARRAY_SIZE], i;
a[0] = 0; b[0] = 3;
a[1] = 1; b[1] = 4;
a[2] = 2; b[2] = 5;
swap(a, b, ARRAY_SIZE);
for (i=0 ; i<3 ; i++)
printf("a[%d] = %d : b[%d] = %d\n", i, a[i], i, b[i]);
return 0;
}
>615 >c = (int*)malloc(n);
>>609 f'(x)のところで,(f(x+e)-f(x-e))/2e が f(x+e)-f(x-e)/2e になってるからまずい.
>>482 (2)
#include <iostream>
#include <cmath>
using namespace std;
#define EPSILON 1.0E-5
#define LOOPMAX 50
double f(double x)
{ return (x*x-x+1)*(x*x-x+1) - x*x*(2*x+log(x)); }
double approx_df(double x)
{ return (f(x+EPSILON*fabs(x))-f(x-EPSILON*fabs(x)))/(2*EPSILON*fabs(x)); }
double next_x(double x)
{ return x - (f(x)/approx_df(x)); }
int main(){
int i, loop;
double x0, x1;
for (i=1; i<=40; i++) {
loop = 0; x0 = 0.1*i; cout << "start x=" << x0 << "\t";
while(1){
x1 = next_x(x0);
if (fabs(x0-x1)<EPSILON){
cout << "converged: x=" << x1 << endl; break;
}else if (x1 <= 0.0){
cout << "x goes negative\n"; break;
}else if (++loop == LOOPMAX){
cout << "not converged\n"; break; }
x0 = x1; } } }
>>615 すいません、a[0]=0〜〜ってのは例です
中身は自分で入力です
あと↓のは習ってません
#include <stdlib.h>
#include <memory.h>
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
本当にごめんなさい #include<stdio.h>しか知らないもんで
>608はスルーですか?
622 :
デフォルトの名無しさん :2006/12/20(水) 02:19:20
>>611 >お前このスレに向いてないよ。
それお前にそっくりそのまま返すよ。お前が答えたソースすら示してないじゃん。
このスレの
>>1 と趣旨を理解して、二度と来るな、失せろバカ低学歴
悔しかったらお前の書いたソースを提示して何も言うなw
↓以下、ただの屁理屈バカのレス
579 名前:デフォルトの名無しさん 投稿日:2006/12/19(火) 22:31:17
>>576 マクロ使っても、パラメータ一つ渡すはずの仕様からは外れてんだろ。
531 名前:デフォルトの名無しさん 投稿日:2006/12/19(火) 14:42:24
>>523 ある数値を渡すと、二乗(固定)を返す関数を作れと言われて、
数値の他に指数も渡さなきゃいけない関数作るのは、どうかと…
勝手に仕様変えるのイクナイ
521 名前:デフォルトの名無しさん 投稿日:2006/12/19(火) 14:07:09
>>514 やりすぎw
二乗を返すだけだから、引数は一つで 引数*引数返すだけ。
>>621 mainの方がうまくいってないんで今やってるところです
625 :
デフォルトの名無しさん :2006/12/20(水) 02:21:02
>>611 >課題出された者への回答を与える場だ。
だったらなおさらお前のぐちゃぐちゃうぜぇレスこそいらねーよな?
いい加減、専門学校程度のクズがうぜぇ〜んだよ、失せろやバカ
>無駄とかいうなら、このスレ自体も、人の営みも、壮大な無駄だ。
>エントロピーは増大し、全ては壊れていく世界で、意味のあることなんて無い。
>意味は、意味を見出すものが与えるだけ。
>無駄とか無駄じゃないとかは、主観的な意見だ。
もう言っていることがわけわからんね〜〜^wwwバカじゃねこいつ?何が言いたいんだ?
良いか、もうこれ以上お前みたいな馬鹿には付き合わないから、これだけは理解しろ。
お前の答えたソースを提示しろ、でなきゃお前はただのバカ
626 :
デフォルトの名無しさん :2006/12/20(水) 02:22:50
さっ、答えもしていないで他人のソースを批判するだけの
性帝トーマス並のバカは
>>511 をちゃんと読んで
自分なりのソースを書いて示しましょうねぇ〜〜〜
出来なきゃお前を今後晒し続ける
627 :
デフォルトの名無しさん :2006/12/20(水) 02:30:29
>>622 おいっ、どうした?答えろよ?どうせ
int pow(int n) { return n*n; } を書くだけだろ?w
そんなの分かってて、敢えてそれ以上のべき乗に対応させたものに
いちいちいちゃもんつけて自分のソースは提出せずか?
宿題を答える気がないなら、チキン野郎は二度とこのスレに来るなよw
628 :
デフォルトの名無しさん :2006/12/20(水) 02:37:06
なんだなんだ?トーマスは自分のソースを提示してちゃんと意見したぞ?w いちいち自分が気に食わないやり方をしている奴を批判して 「そんなこと気にする”必要”があるのかよ?」とか 「お前はバカだ」とか言ってきたぞ?w
お前ら邪魔
ふぁびょってるのが居るが… こいつ、もしかして自分にレスしてる奴は一人だけだとか思ってんのか? すげぇなw この板で初めてふぁびょってる奴見たよ
633 :
デフォルトの名無しさん :2006/12/20(水) 03:00:38
>>633 何のソースだよw
ふぁびょってる奴へのレスにソースも何もneeeeeeee
635 :
デフォルトの名無しさん :2006/12/20(水) 03:06:28
>>634 けけけけけ、お前も宿題に答える気がないくせにこのスレに来ているのか?
失せろ、答えもしないで批判だけする奴は
637 :
デフォルトの名無しさん :2006/12/20(水) 03:14:34
638 :
デフォルトの名無しさん :2006/12/20(水) 03:15:35
みなさん、
>>603 をお願いします。
本当にまずいので・・・・・・
>>639 ここはホストクラブとかキャバクラや教習所じゃねーんだから、指名なんてねーよw
>638 単語数や単語の文字数に制限はないの?
644 :
デフォルトの名無しさん :2006/12/20(水) 03:31:09
>643 それほど長い文章ではないです。だいたいtxtで5行〜7行ぐらいです。
同一単語のチェックはしなくていいの?
[1] 授業単元:数値計算 [2] 問題文(含コード&リンク):πの近似解を、台形公式、シンプソン公式を用いて算出せよ。 ただし、別々のプログラムに分けてはならず、プログラム実行後にtを入力すれば台形公式 sを入力すればシンプソン公式が選択されるようにする。分割数は100とする。 [3] 環境 [3.1] OS: WINXP [3.2] コンパイラ名とバージョン: Visual C++ 2005 [3.3] 言語: どちらも可 [4] 期限: 無期限 [5] その他の制限: 特に無し 問題分の説明が下手なのとこんな流れの中ですがお願いします
647 :
デフォルトの名無しさん :2006/12/20(水) 03:36:57
>645 同一単語のチェックとは? 単語の出現回数のことでしたら必要ありません。
>>640 >失せろ、答えもしないで批判だけする奴は
お前のことだな
自分で言ってりゃ世話無いな
よそでやれ
>647 同じ単語が2回出てきたら2個として数えるってわけね。
>>648 はぁ?俺は昨日答えたけど?すべてに着手してもらえると思うなよw
652 :
デフォルトの名無しさん :2006/12/20(水) 03:48:00
>650 @の単語の総数のことですね。その通りです。
>>648 いちいちうぜーんだよ、だったらお前が答えれば良いだろ?アホじゃね?
氏ねよカス、っつーかこのスレに来るなって。何他人を煽るだけにここへ来てんだよ?
悔しかったらお前のソースを提出しろや無能池沼w
>>648 はいっ?答えたし批判もしてないけど?ちゃんとべき乗のソースを出しただろ?
俺のソースにいちゃもんしかつけないバカは結局自分のソースを出さずに
ごちゃごちゃと自分の判断基準でしかそれは必要がないとしか言ってないじゃんw
>>648 宿題を答えたほかの人への批判をした覚えはありませんが何か?
>603 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int main(void){ char ch, temp[32], longest[32]; int alpha[26] = {0}, i =0, max, on = 0, count = 0; FILE *fp; fp = fopen("test.txt", "r"); if((fp=fopen("test.txt", "r"))==NULL) exit(1); while((ch=fgetc(fp))!=EOF) { if(isspace(ch) || ispunct(ch)) { if(on) { temp[i] = '\0'; count++; on = 0; if(strlen(temp)>strlen(longest)) strcpy(longest, temp); i = 0;}} else { if(!on) { alpha[tolower(ch)-'a']++; on = 1; temp[i] = ch; } else temp[i] = ch; i++;}} if(on) count++; fclose(fp); for(i=1; i<26; i++) if(alpha[i]>alpha[max]) max = i; printf("単語数:%d最長単語:%s最多アルファベット:%c\n", count, longest, max+'a'); return 0;}
657 :
デフォルトの名無しさん :2006/12/20(水) 04:48:44
>656 ありがとうございます。なんとかがんばってみますが、できれば#include <stdio.h>だけでプログラムは組めませんかね? なんどもすいません。
exitをretrunにすれば<stdlib.h>はいらない。 if(isspace(ch)||ispunct(ch))をif(ch==' '||ch=='\t'||ch=='\n'||....||ch=='区切り文字')にして アルファベットが小文字のみならalpha[tolower(ch)-'a']をalpha[ch-'a']にして<ctype.h>はいらない。 maxを0で初期化してif(strlen(temp)>strlen(longest)) strcpy(longest, temp)を if(i>max) { max = i; for(i=0; i<max+1; i++) longest[i] = temp[i]; } にすれば<string.h>もいらない
659 :
デフォルトの名無しさん :2006/12/20(水) 05:17:33
>658 なるほど。一応組みなおしてみます。 理解できました。本当にありがとうございました!!
660 :
デフォルトの名無しさん :2006/12/20(水) 05:19:04
>658 でも一応組みなおしていただけませんか? 正直知識が不足で不安なので・・・すいません。
組みなおすも何も指定の部分を入れ替えるだけなんだが。 #include <stdio.h> int main(void){ char ch, temp[32], longest[32]; int alpha[26] = {0}, i =0, max = 0, on = 0, count = 0; FILE *fp; if((fp=fopen("test.txt", "r"))==NULL) return 1; while((ch=fgetc(fp))!=EOF) { if(ch==' '||ch=='\n'||ch=='\t'||ch==','||ch=='.') { if(on) { temp[i] = '\0'; count++; on = 0; if(i>max) { max = i; for(i=0; i<max+1; i++) longest[i] = temp[i]; } i = 0;}} else { if(!on) { alpha[ch-'a']++; on = 1; temp[i] = ch; } else temp[i] = ch; i++;}} if(on) count++; fclose(fp); for(i=1; i<26; i++) if(alpha[i]>alpha[max]) max = i; printf("単語数:%d最長単語:%s最多アルファベット:%c\n", count, longest, max+'a'); return 0;} よく見たら処理が不十分だな どこが不十分かは自分で考えるように
for(i=1; i<26; i++) → for(i=1,max=0; i<26; i++) に修正
663 :
デフォルトの名無しさん :2006/12/20(水) 05:36:59
>661 何度もありがとうございました。本当に助かりました。
うpロダ使おうぜ?
さて、まだ解かれてない問題はどれかな?
670 :
繭 :2006/12/20(水) 10:12:16
今はC言語でキッチンタイマー作っています。 ストップ機能の部分はどうすれば良いか教えて下さい… すいません
671 :
デフォルトの名無しさん :2006/12/20(水) 10:13:10
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ラプラシアンフィルターを実現させる関数laplacianを作成せよ void laplacian (int data[][Y_SIZE][3],int width,int height); また、3点を与えると三角形を描く関数riangleを作成せよ。y1<y2<y3と仮定してよい void triangle(int data[][Y_SIZE][3],int x1,int y1,int x2,int y2,int x3,int y3); main関数を以下のようにせよ void main{ int image [X_SIZE][Y_SIZE][3]; init_image(image,X_SIZE,Y_SIZE); triangle(int image[][Y_SIZE][3],64,5,120,30,20,100); save_bmp("temp1.bmp",image,X_SIZE,Y_SIZE); laplacian(image,X_SIZE,Y_SIZE); save_bmp("test2.bmp",image,X_SIZE,Y_SIZE); } [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:12月24日
673 :
t_n :2006/12/20(水) 10:17:45
>>4の問題をお願いします。 打撃点と目標の高さは同じです。 障害にぶつかった場合に跳ね返ることは考慮しないです。 お願いします。
>>673 >>1 読んで書き直し。
後で付け足しをすることないようにしっかり書いてくれ
676 :
t_n :2006/12/20(水) 10:25:35
>>675 すみませんでした。
[1] 授業単元: プログラミング
[2] 問題文:ある打撃点から目標に向かって的狙いを行い、命中させるゲームプログラムを作成せよ。
打撃点から目標までの距離、障害までの距離、障害の幅と高さ、および風速を初期設定条
件とし、ゲームを行う者には、目標までの距離と風速のみが知らされる。打撃点からの玉
の発射角、初速を設定すると、玉到達距離を計算し、目標点との差を表示する。
到達距離は
x=(Vocosθ+W)t=Vxt
y=Votsinθ -gtA/2=Vgt-4.9tA
A=二乗の事です。
障害を越えること、そして、障害を越えたときの打撃距離を計算し、目標との差を表示する
ようにする。障害を越えなければ、障害激突などと表示するようにする。
です。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語:C++
[4] 期限:できるだけ早めでお願いします。
[5] その他の制限:ありません。
>>671 int width,int heightは何?
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 配列に格納されたデータをソートするプログラムを作成するにあたり、 以下の機能を持つ関数を作成しプログラムを完成させなさい。 乱数を生成し配列要素に格納する init_array(int *pa, int n) 配列要素を1行で画面に出力する output_array(int *pa, int n) 指定された2つアドレスのデータを交換する swap(int *x, int *y) [3] 環境 [3.1] OS: windowsXP [3.2] コンパイラ名とバージョン: visual studio2003 [3.3] 言語: C [4] 期限:今日のお昼12時前までにお願いします [5] その他の制限: 特になし 一時間程度しかないのですが、どうかお願いします
>>676 全然駄目。
ゲームというが、そもそも CUI か GUI かもわからん。
数式があるが、各記号の意味が定義されていない。
障害物も、x 方向に幅のない障害物でよいのか
きちんと形状を考えないといけないかとかもわからん。
>>678 >>278 のプログラム。278 は付き返されたようだが、
プログラムはその仕様を満たしている。
681 :
デフォルトの名無しさん :2006/12/20(水) 10:41:55
>>674 save_bmpはこんなかんじです
save_bmp(char *bmpName,int data[][Y_SIZE][3],int width,int height)
{
FILE *fp;
int i,j,k;
bmpHeader[2]=sizeof(bmpHeader)+3*width*height;
bmpHeader[34]=3*width*height;
bmpHeader[18]=width;
bmpHeader[22]=height;
fp=fopen(bmpName,"wb");
for(i=0;i<sizeof(bmpHeader);i++)
{
fputc(bmpHeader[i],fp);
}
for(i=0;i<Y_SIZE;i++)
for(j=0;j<X_SIZE;j++)
for(k=0;k<3;k++)
fputc(data[i][j][k],fp);
fclose(fp);
}
>>671 bmpHeader って何よ。
なんかいろいろ足りてないものがありそうなので、
与えられたものを全部まとめてアップローダ池。
他にも、講義ノートをとっていれば該当部をアップしたほうが
無駄なやり取りがなくなってスムースに答えが出ぞ。
>>680 そのまま提出するわけにはいかなかったんで、完成したプログラムにしていたただけませんでしょうか。
11時半ってもしかして授業中か?
686 :
デフォルトの名無しさん :2006/12/20(水) 11:05:29
あと25分強しかない
688 :
デフォルトの名無しさん :2006/12/20(水) 11:28:48
>>677 int widthはビットマップの幅,int heightはビットマップの高さです
690 :
デフォルトの名無しさん :2006/12/20(水) 11:30:41
[1]関数
[2]関数を用いて、200x200ピクセルの画像に背景が青色、半径40の
円を1つは中心の座標(-50, 0)で赤色、もう1つは中心の座標(50,
0)で緑色の画像を作成しよう。
?? プロジェクト名:12add ファイル名:12add.c
?? 四角を作成する関数
void rect(unsigned char *bmp, int x0, int y0, int w, int h, int r, int g, int b)
引数:画像データ,左上のx座標,左上のy座標,幅,高さ,色(赤,緑,青)
?? 円を作成する関数
void circle(unsigned char *bmp, int x0, int y0, int r0, int r, int g, int b)
引数:画像データ,中心のx座標,中心のy座標,半径,色(赤,緑,青)
?? 画像を保存する関数
int save(unsigned char *bmp)
引数:画像データ
戻り値:オープンに成功(0),失敗(1)
詳しくは
http://mobiledatabank.jp/s/src/MDBS1108.pdfの練習問題 [3]XP
[4]特になし
[5]特になし
よろしくお願いします。
12時が提出締め切りです
[1] 授業単元: [2] 問題文(含コード&リンク): 長さ n の実数列 [a_0, ..., a_n-1] が与えられる。 各 i について、a_i が [a_0, ..., a_i] の中で何番目に 小さいかを求める効率のよいプログラムを作成せよ。 なお、同じ値が複数ある場合は最も小さい順位を表示すること。 例: a = [3,1,4,1,5] → output = [1,1,3,1,5] (3 は [3] の中で 1 位、1 は [3,1] の中で 1 位 4 は [3,1,4] の中で 3 位、…。) [3] 環境 [3.1,3.2] OS、コンパイラ問わず [3.3] 言語: どちらでも可 [4] 期限: 2006年12月23日 [5] その他の制限: 特になし
>581 (3) ア = (n-r+1)/r long combi(int n, int r) { return r==0 ? 1 : combi(n,r-1) * (n-r+1) / r ; }
695 :
デフォルトの名無しさん :2006/12/20(水) 12:12:21
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):2 次方程式 x2 + ax + b = 0 の実数解を求め,画面表示するプログラムを作成しなさい.ただし, 以下に示した条件を満たすこと. 係数a,b の条件: 実数型とし,キーボードから入力させること. 関数の条件: プロトタイプ: int solve( float, float, float *, float * ) 第1 引数: x の係数 第2 引数: 定数項 第3 引数: 第1 解へのポインタ 第4 引数: 第2 解へのポインタ 返り値: 解の個数 画面表示の条件: 関数からの返り値を利用し,画面表示を適切に変化させること. 平方根を計算するためには,関数「double sqrt(double)」を使用することができる.ただし,プログラ ムの冒頭に「#include math.h」と記述し,コンパイルオプションとして「-lm」を指定すること. [3] 環境 [3.1] OS: Linux [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C よろしくお願いします。
>>689 いえ、実習とは別で宿題がだされてたんで
>>697 それは特に効率が良いわけではないような
>695 int solve(float a, float b, float *x, float *y){ float d; d = a * a - 4 * b; if(d<0) return 0; else if(d==0) { *x = -a/2; return 1; }else { *x = sqrt(d)/2 - a/2; *y = -sqrt(d)/2 - a/2; return 2;}}
703 :
デフォルトの名無しさん :2006/12/20(水) 13:14:14
>>682 #include<stdlib.h>
#include<stdio.h>
#define X_SIZE 128
#define Y_SIZE 128
Char bmpHeader[54]={ ‘B’,’M’ /*[0]ファイルタイプ*/ 0,0,0,0, /*[2]ファイルサイズ*/ 0,0,0,0, /*[6]予約*/
0x36,0,0,0, /*[10]ビートマップデータのシーク数*/ 0x28,0,0,0, /*[14]ここから始まるヘッダの長さ*/ 0,0,0,0, /*[18]ビートマップの幅*/
0,0,0,0, /*[22]ビートマップの高さ*/ 0x01,0, /*[26]プレーン数*/
0x18,0, /*[28]1ピクセルあたりのビット数(1,4,8,24)*/ 0,0,0,0, /*[30]a圧縮タイプ(0=非圧縮)*/
0,0,0,0, /*[34]ビートマップの長さ*/ 0x20,0x2e,0,0, /*[38]水平解像度*/
0x20,0x2e,0,0, /*[42]垂直解像度*/ 0,0,0,0, /*[46]カラーインデックス数*/
0,0,0,0, /*[50]重要なカラーインデックス数*/ };
void init_image(int data[][Y_SIZE][3],int width,int height);
void save_bmp(char *bmpName,int data[][Y_SIZE][3],int width,int height);
void main() { int i,j,k; int image[X_SIZE][Y_SIZE][3];
init_image(image,X_SIZE,Y_SIZE); save_bmp(“test.bmp”,image,X_SIZE,Y_SIZE); }
void init_image(int data[][Y_SIZE][3],int width,int height) { int i,j,k;
for(i=0;i<Y_SIZE;i++)
for(j=0;j< X_SIZE;j++)
for(k=0;k<3;k++)
data[i][j][k]=255; }
save_bmp(char *bmpName,int data[][Y_SIZE][3],int width,int height) /*ファイル名bmpNameとしてwidth,heightのビットマップ画像を作成する*/ { FILE *fp; int i,j,k;
/*BMPファイルのヘッダを作る*/
bmpHeader[2]=sizeof(bmpHeader)+3*width*height; bmpHeader[34]=3*width*height;
bmpHeader[18]=width; bmpHeader[22]=height;
fp=fopen(bmpName,"wb"); /*BMPファイルを作る*/
for(i=0;i<sizeof(bmpHeader);i++) /*BMPファイルのヘッダを出力する*/ {
fputc(bmpHeader[i],fp); }
for(i=0;i<Y_SIZE;i++) /*ビットマップデータを出力する*/
for(j=0;j<X_SIZE;j++)
for(k=0;k<3;k++)
fputc(data[i][j][k],fp); fclose(fp); }
704 :
デフォルトの名無しさん :2006/12/20(水) 13:19:15
>>682 講義で使ったものです。これでわかると思います。(間違いがあってので訂正したものを載せました)
#include<stdlib.h>
#include<stdio.h>
#define X_SIZE 128
#define Y_SIZE 128
Char bmpHeader[54]={ ‘B’,’M’ /*[0]ファイルタイプ*/ 0,0,0,0, /*[2]ファイルサイズ*/ 0,0,0,0, /*[6]予約*/
0x36,0,0,0, /*[10]ビートマップデータのシーク数*/ 0x28,0,0,0, /*[14]ここから始まるヘッダの長さ*/ 0,0,0,0, /*[18]ビートマップの幅*/
0,0,0,0, /*[22]ビートマップの高さ*/ 0x01,0, /*[26]プレーン数*/
0x18,0, /*[28]1ピクセルあたりのビット数(1,4,8,24)*/ 0,0,0,0, /*[30]圧縮タイプ(0=非圧縮)*/
0,0,0,0, /*[34]ビートマップの長さ*/ 0x20,0x2e,0,0, /*[38]水平解像度*/ 0x20,0x2e,0,0, /*[42]垂直解像度*/
0,0,0,0, /*[46]カラーインデックス数*/ 0,0,0,0, /*[50]重要なカラーインデックス数*/ };
void init_image(int data[][Y_SIZE][3],int width,int height);
void save_bmp(char *bmpName,int data[][Y_SIZE][3],int width,int height);
void main() { int i,j,k; int image[X_SIZE][Y_SIZE][3];
init_image(image,X_SIZE,Y_SIZE); save_bmp(“test.bmp”,image,X_SIZE,Y_SIZE); }
void init_image(int data[][Y_SIZE][3],int width,int height) { int i,j,k;
for(i=0;i<Y_SIZE;i++)
for(j=0;j< X_SIZE;j++)
for(k=0;k<3;k++)
data[i][j][k]=255; }
save_bmp(char *bmpName,int data[][Y_SIZE][3],int width,int height) /*ファイル名bmpNameとしてwidth,heightのビットマップ画像を作成する*/ { FILE *fp; int i,j,k;
/*BMPファイルのヘッダを作る*/
bmpHeader[2]=sizeof(bmpHeader)+3*width*height; bmpHeader[34]=3*width*height;
bmpHeader[18]=width; bmpHeader[22]=height;
fp=fopen(bmpName,"wb"); /*BMPファイルを作る*/
for(i=0;i<sizeof(bmpHeader);i++) /*BMPファイルのヘッダを出力する*/ {
fputc(bmpHeader[i],fp); }
for(i=0;i<Y_SIZE;i++) /*ビットマップデータを出力する*/
for(j=0;j<X_SIZE;j++)
for(k=0;k<3;k++)
fputc(data[i][j][k],fp); fclose(fp); }
実数は小数も含む
707 :
697 :2006/12/20(水) 13:59:08
おーすまん。実数だったのね。 全部のintをdoubleにして、%dを%fにすれば大丈夫だと思うよ。 それより「効率の良い」のほうを誰か提案してくれ。
>>693 初心者なんで、効率いいかは分かりませんが
#include<stdio.h>
#define N 10
int main(){
int i,j,rank[N];
double min,a[N]={3.2,1.1,5.4,5.7,1.6,5.4,3.2,1.1,5.7,6.2};
min = a[0];
printf("[");for(i=0;i<N;i++){printf(" %.1lf ",a[i]);rank[i]=1;}printf("]\n");
printf("[ %03d ",rank[0]);for(i=1;i<N;i++){
if(min>=a[i]) min = a[i];
else{ for(j=i-1;j>=0;j--) if(a[j]<a[i]) rank[i]++;}
printf(" %03d ",rank[i]);
}printf("]\n");
return 0;
}
710 :
デフォルトの名無しさん :2006/12/20(水) 15:30:47
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ラプラシアンフィルターを実現させる関数laplacianを作成せよ void laplacian (int data[][Y_SIZE][3],int width,int height); また、3点を与えると三角形を描く関数riangleを作成せよ。y1<y2<y3と仮定してよい void triangle(int data[][Y_SIZE][3],int x1,int y1,int x2,int y2,int x3,int y3); main関数を以下のようにせよ void main{ int image [X_SIZE][Y_SIZE][3]; init_image(image,X_SIZE,Y_SIZE); triangle(int image[][Y_SIZE][3],64,5,120,30,20,100); save_bmp("temp1.bmp",image,X_SIZE,Y_SIZE); laplacian(image,X_SIZE,Y_SIZE); save_bmp("test2.bmp",image,X_SIZE,Y_SIZE); } [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:12月24日
713 :
デフォルトの名無しさん :2006/12/20(水) 15:43:42
期限が違う以外にはまったく同じに見えるけどマルチじゃないのかな・・・
>>715 のスレをもうちょっと先まで読むのもいいかも。
717 :
709 :2006/12/20(水) 16:36:05
すげーな、AVL木ってこんな短く書けるのか。
719 :
デフォルトの名無しさん :2006/12/20(水) 17:35:22
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):3点を与えると三角形を描く関数riangleを作成せよ。y1<y2<y3と仮定してよい void triangle(int data[][Y_SIZE][3],int x1,int y1,int x2,int y2,int x3,int y3); main関数を以下のようにせよ void main{ int image [X_SIZE][Y_SIZE][3]; init_image(image,X_SIZE,Y_SIZE); triangle(int image[][Y_SIZE][3],64,5,120,30,20,100); save_bmp("test1.bmp",image,X_SIZE,Y_SIZE); [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:12月24日
720 :
デフォルトの名無しさん :2006/12/20(水) 17:37:06
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ラプラシアンフィルターを実現させる関数laplacianを作成せよ void laplacian (int data[][Y_SIZE][3],int width,int height); また、3点を与えると三角形を描く関数riangleを作成せよ。y1<y2<y3と仮定してよい void triangle(int data[][Y_SIZE][3],int x1,int y1,int x2,int y2,int x3,int y3); main関数を以下のようにせよ void main{ int image [X_SIZE][Y_SIZE][3]; init_image(image,X_SIZE,Y_SIZE); triangle(int image[][Y_SIZE][3],64,5,120,30,20,100); save_bmp("test1.bmp",image,X_SIZE,Y_SIZE); laplacian(image,X_SIZE,Y_SIZE); save_bmp("test2.bmp",image,X_SIZE,Y_SIZE); } [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:今週中
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): n本の線分の交差を列挙するプログラム。 1.線分は上端点のx、yと下端点のx、yで与えられる。 2.ヒープと二分探索木を利用した走査線計画。 3.交差は三角形符号つき面積で判断。 [3] 環境 [3.1] OS:Windows [3.2] gcc 3.4 [3.3] 言語:C [4] 期限:12月24日 クラス中がお手上あげ状態。よろしくおねがいます。
722 :
デフォルトの名無しさん :2006/12/20(水) 17:38:20
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ラプラシアンフィルターを実現させる関数laplacianを作成せよ void laplacian (int data[][Y_SIZE][3],int width,int height); また、3点を与えると三角形を描く関数riangleを作成せよ。y1<y2<y3と仮定してよい void triangle(int data[][Y_SIZE][3],int x1,int y1,int x2,int y2,int x3,int y3); [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:12月24日
ラプラシアンUZEEEE
うざいね。 俺はもう絶対解かない事に決めてる。
わかんないだけ
>>721 データは決まっているの?
適当でおk?
727 :
721 :2006/12/20(水) 18:00:14
>>726 線分のデータでしょうか?
それならてきとうでもOKです。
配列に「HelloWorld!」と表示されるプログラムをマシン語で格納し、 その配列に格納されたプログラムを呼び出すことによって「HelloWorld!」と 表示させるプログラムを書け。 って言われたんですけど。配列はどう定義すればいいですか? 後呼び出しはどうすればよいですか?
回答と解答の違いを教えてl下さいお願いします!
"回答" == { 0x89F1, 0x939A } "解答" == { 0x89F0, 0x939A }
734 :
デフォルトの名無しさん :2006/12/20(水) 22:26:08
735 :
デフォルトの名無しさん :2006/12/20(水) 23:00:20
>>617 助かりました。
どうもありがとうございました。
>>734 バブルソートは
for(i=1;i<=N-1;++i)
for(j=0;j<N-i;++j)
if(ptr[j]>ptr[j+1]){
temp=ptr[j];
ptr[j]=ptr[j+1];
ptr[j+1]=temp;}
だ
737 :
デフォルトの名無しさん :2006/12/21(木) 00:49:37
>>737 バブルソートと挿入ソートはインプレースで書くと違いが
わかりづらいけど、非インプレースで書くとわかる。
>>458 がどっちかは悩むところだけど、for の操作が必ず
手前で閉じているあたりで挿入ソートと判断する。
bubbleSort(a) {
while (満足するまで) {
a を改良
}
return a
}
insertSort(a) {
b = [];
for (i = 0; i < n; ++i)
b に a[i] を挿入
return b;
}
740 :
デフォルトの名無しさん :2006/12/21(木) 01:06:01
741 :
485 :2006/12/21(木) 01:09:30
>742 問題1 #include <stdio.h> int main(void){ int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *p, i, sum = 0; p = a; for(i=0; i<10; i++, p++) sum += *p; printf("合計:%d\n", sum); return 0;} 問題2 #include <stdio.h> int main(void){ int a[5], *p; int i, min, max, sum = 0; for(i=0; i<5; i++) scanf("%d", &a[i]); p = a; min = max = *p; for(i=0; i<5; i++,p++) { if(*p<min) min = *p; if(*p>max) max = *p; sum += *p;} printf("最小:%d 最大:%d 平均:%f\n", min, max, (double)sum/5); return 0;}
745 :
デフォルトの名無しさん :2006/12/21(木) 03:15:50
内容: [1] 授業単元:プログラミング [2] 問題文(含コード&リンク): スタックを使ってグラフの経路を全て出力するプログラムを作りなさい グラフのつながりは A->B A->C B->D B->E C->F C->G C->H D->I E->J E->K G->L H->M H->N K->O M->O となっています [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc ? [3.3] 言語: C [4] 期限:今日中 [5] その他の制限: 出力は A-B-D-I の形にする 経路が出力される順番は問わない XからYへ辿れるという情報からYからZへ辿れるという情報を検索できれば良い スタックを使って先に来たデータを後回しで処理(AからはBへもCへも行けるが、 Cを後回しにしてBヘ行く経路を処理する等) お願いします
747 :
デフォルトの名無しさん :2006/12/21(木) 11:40:20
実行したファイル名を除いたコマンド ライン引数に、複数個指定したすべてのファイルの内容を 標準出力に表示するプログラムを記述してください。 これわかりますか??
748 :
デフォルトの名無しさん :2006/12/21(木) 11:42:32
UNIX の grep コマンドと同様に、1 つめの引数に示された文字列を持つ行を、 2 つめの引数で示されたファイル内から抜き出して表示するプログラムを作ってください。 strlength 関数と strinclude 関数に関しては宣言だけよし。
>>1 も読めない馬鹿にソース書いても解答として気がつくかどうか。
751 :
デフォルトの名無しさん :2006/12/21(木) 11:54:36
携帯だとめんどくせーんだよ
752 :
デフォルトの名無しさん :2006/12/21(木) 12:02:16
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): UNIX の grep コマンドと同様に、1 つめの引数に示された文字列を持つ行を、 2 つめの引数で示されたファイル内から抜き出して表示するプログラムを作ってください。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:今日中 [5] その他の制限: strlength 関数と strinclude 関数に関しては宣言だけよし。
>>752 >strlength 関数と strinclude 関数
なんですか、その関数?
>>749 お前みたいな答えられない、答える気がないのにこのスレに来て
他人のソースにいちゃもんをつけるだけの馬鹿がバカって言うなよ?
良いから気に入らない奴をどうこう言うくらいならお前がここへ来るなよ、な?
分かったら回線切って首も(ry
>>754 まともな質問にはちゃんと答えてますよ?
>>754 答えられない、答える気がないのにこのスレに来るな
>>756 そういうレスをいちいちするなよ?答えもしない低レベルなガキがw
黙ってろよ?これ以上レスしてもお前みたいな馬鹿は相手にせぬ
こういう症状を火病って言うのだろうな
>>757 (^ω^) フヒヒwwバカだぉwwバカだぉwwwwwwうぇwwww
760 :
デフォルトの名無しさん :2006/12/21(木) 12:32:38
こないだ夜中にふぁびょってた奴だろ 自分がグダグタほざいてるくせに、他人が同じことすると消えろとか、首も(ry とか
何このスレ…
さっさと答えろ いつまで待たせやがるんだ 煽り合いは電話でやれ
763 :
デフォルトの名無しさん :2006/12/21(木) 12:39:31
質問なんですが、2008年の5月6日は祝日になるんですか? 祝日法の定義でいけば6日は平日のはずなんですが・・・
うん。
>>765 おいおい、在日朝鮮人がきいたら怒るぞ。
767 :
デフォルトの名無しさん :2006/12/21(木) 12:48:39
でもでも、カレンダー上は5月6日は火曜日なんすよ。 で、5月4日は日曜なんすよ。 4日は祝日ではなく休日扱いのはずなんすよ。 休日が日曜日になってもその振り替えは発生しないと思うんすよ。 と思ったら来年法改正があるじゃねーかーーー!!! なるほど。5月4日は祝日になるのか。。。 知りませんでした・・・・
>>765 自分を批判する人間は一人しか居ないと思い込めるのですね
幸せな人だ
振り替えになるかってことか?
在日って日本語ぺらぺらの人しか知らない。
>>767 何でここで聞くんだ
スレタイも読めないのかお前は
そんなことはどうでもいいから問題消化しようぜ。
>>768 ものすごく鬱陶しいよ?スルーできないお前も同罪、まとめて失せろ
っつーかこんなスレに来るな
公園にダンボールで小屋作って、俺の家を壊すな!帰れ!って叫んでる乞食のようだ。
>747 for(i=1; i<argc;i++) { fp=fopen(argv[i],"r"); while((ch=fgetc(fp))!=NULL) putchar(ch); fclose(fp);}
間違えた while((ch=fgetc(fp))!=NULL) → while((ch=fgetc(fp))!=EOF)
>>774 いや、だからいい加減にしろって。お前批判する人間は一人しか居ないと思い込めるのですね
幸せな人だ
まさにかおす
780 :
迷えるアヒル :2006/12/21(木) 13:41:11
内容: [1] 授業単元:Cプログラミング演習 [2] 問題文(含コード&リンク): 2次元配列 city[4][7]={"TOKYO","OSAKA","KOBE","KYOTO"}の 各文字列要素を文字列ごとに出力する。 1.char型配列a[][7]に格納された文字列をmax個の文字列分だけ出力する void型関数 hyoji(char a[][7],int max)を作成する 2.main()関数内で関数hyoji()を用いてcity[4][7]の各文字列要素を文字列ごとに出力する [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン: visualvasic (?) [3.3] 言語: C [4] 期限:今日中 [5] その他の制限: ポインタは使わない
>>780 VisualBasicの事かああああああ!!
>780 #include <stdio.h> void hyoji(char p[][7], int max) { int i; for(i=0; i<max; i++) puts(p[i]); } int main(void) { char city[4][7]={"TOKYO","OSAKA","KOBE","KYOTO"}; hyoji(city,4); return 0; }
784 :
迷えるアヒル :2006/12/21(木) 13:58:02
ありがとうございます!うまく出力できました+。:.゚ヽ(*´∀)ノ゚.:。+゚ まだまだ初心者で問題の意味から考えてた始末でしたorz
785 :
困ってます。 :2006/12/21(木) 14:55:01
次のような課題が出たのですが、どうしても解けません。。よろしくお願いします。 数n を入力し、幅 n で高さ n の以下のような直角三角形を2つ並べて画面に表示するプログラムを書け。 これは n が3の場合の例。 (*は半角のスペースである。) **S *SS SSS **S *SS SSS
>785 #include <stdio.h> int main(void) { int i, j, k, n; scanf("%d", &n); for(i=0; i<2; i++) { for(j=0; j<n; j++) { for(k=0; k<n-j-1; k++) putchar(' '); for(k=0; k<=j; k++) putchar('*'); putchar('\n'); } } return 0; }
難しいのでわかりません
792 :
迷える子羊 :2006/12/21(木) 15:20:27
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): UNIX の grep コマンドと同様に、1 つめの引数に示された文字列を持つ行を、 2 つめの引数で示されたファイル内から抜き出して表示するプログラムを作ってください。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限:今日中 [5] その他の制限:
>>785 int main(void)
{
int n,count,i;
scanf("%d",&n);
for(count=1;count<=n;count++) {
for(i=0;i<(n-count);i++)
printf(' ');
for(i=0;i<count;i++)
printf('S');
printf('\n');
}
return 0;
}
794 :
793 :2006/12/21(木) 15:37:00
>>785 >>793 は見なかったことにしてくださいorz
二回繰り返すの忘れてたし、激しく遅レスだった。
>>790 mainの中の40を小さい数字にすれば分かると思うよ
#include <stdio.h> #include <string.h> #define PRINT(i,sbuf) {int k=(i);memset((sbuf),' ',k);(sbuf)[k]=0;for(;k>0;sbuf[--k]='*',printf("%s\n",sbuf));} int main(void){ unsigned int i; char *sbuf; printf("input i:");scanf("%u",&i); if(i>0 && (sbuf=malloc(sizeof(char)*i+1))!=NULL){ PRINT(i,sbuf) PRINT(i,sbuf) } } 汚くしてみた
>>795 ありがとうございます、やってみます
ちなみに数学的な意味で間違いないでしょうか?
例えば「円の面積を求めるプログラム」という風に具体的に書けますか?
ぶっきらぼうにコレやってこいって渡されたので
課題プログラム間違ってんじゃないかと
オロオロしてまして・・・・
年末でその方には提出日まで会えませんし
>>796 こっちだな
#include <stdio.h>
#include <string.h>
#define PRINT(i,sbuf) do{int k=(i);memset((sbuf),' ',k);(sbuf)[k]=0;for(;k>0;sbuf[--k]='*',printf("%s\n",sbuf));}while(0)
int main(void){
int i; char *sbuf;
printf("input i:");scanf("%d",&i);
if(i>0 && (sbuf=malloc(sizeof(char)*i+1))!=NULL){ PRINT(i,sbuf); PRINT(i,sbuf); }
}
>>797 ぶっちゃけるとプログラミング言語に日本語のような高度な説明力はない
最悪「〜を○回繰り返した値を×に一度記憶して…」みたいなベタな説明でも"説明"になる
「プログラムは思ったとおりに動かない、書いたとおりに動く」ならその一番gdgdな説明でも事足りるんだよ
>>797 何をするプログラムなのかは一言で言える
どれくらいの説明を求められているかはわからないが、
tとcの関数の意図とmain関数の4つのforループで何をしているかを書ければ問題ないだろう
もうどうみても階乗ds
802 :
迷える子羊 :2006/12/21(木) 17:03:22
792教えてください・・・
>>792 手抜き検索
#include "stdio.h"
int main(int argc, char *argv[]) {
if (argc < 2) { printf("few arguments\n"); return 1; }
FILE *head = fopen(argv[2], "r");
FILE *tail = fopen(argv[2], "r");
if (!head || !tail) { printf("file opening error\n"); return 1; }
int found, i, rc=0;
while (rc != EOF){
found = 0; i = 0;
while ((rc = fgetc(head)) != EOF){
if (argv[1][i] == '\0') { found = 1; i = 0; }
if (rc == '\n') break;
if (argv[1][i] == rc) i++; else i = 0; }
while ((rc = fgetc(tail)) != EOF){
if (found) putchar(rc); if (rc == '\n') break; } }
putchar('\n'); }
804 :
803 :2006/12/21(木) 17:25:33
↑ ゴメン,やっぱダメだ "abc"の検索時に"ababcd"を見逃す.
>>799-800 ありがとうございます
具体的に明記しなさいという事なので再度質問させて貰いました
40を任意定数としたら
1*2*3*4*5*・・・n!とわかりました
>>801 答えありましたね;
どうもです
>>792 これで大丈夫かな.まだ問題あるかも
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc < 2) { printf("few arguments\n"); return 1; }
FILE *head = fopen(argv[2], "r");
FILE *tail = fopen(argv[2], "r");
if (!head || !tail) { printf("file opening error\n"); return 1; }
int i, j, len = strlen(argv[1]), found, rc;
int *jump = malloc(len*sizeof(int));
if (!jump) { printf("memory error\n"); return 1; }
for (i=0; i<len; i++) jump[i] = 0;
for (i=1; i<len; i++) for (j=i; j<len-i; j++)
if (strncmp(argv[1], argv[1]+j, i)==0) jump[i+j] = i;
while (rc != EOF){
found = 0; i = 0;
while ((rc = fgetc(head)) != EOF){
if (argv[1][i] == '\0') { found = 1; i = 0; }
if (rc == '\n') break;
while (i && argv[1][i] != rc) i = jump[i];
if (argv[1][i] == rc) i++; }
while ((rc = fgetc(tail)) != EOF){
if (found) putchar(rc); if (rc == '\n') break; } }
putchar('\n'); }
807 :
デフォルトの名無しさん :2006/12/21(木) 18:13:12
1] 授業単元:プログラム演習 [2] 問題文(含コード&リンク):ラプラシアンフィルターを実現させる関数laplacianを作成せよ void laplacian (int data[][Y_SIZE][3],int width,int height); また、3点を与えると三角形を描く関数riangleを作成せよ。y1<y2<y3と仮定してよい void triangle(int data[][Y_SIZE][3],int x1,int y1,int x2,int y2,int x3,int y3); main関数を以下のようにせよ void main{ int image [X_SIZE][Y_SIZE][3]; init_image(image,X_SIZE,Y_SIZE); triangle(int image[][Y_SIZE][3],64,5,120,30,20,100); save_bmp("test1.bmp",image,X_SIZE,Y_SIZE); laplacian(image,X_SIZE,Y_SIZE); save_bmp("test2.bmp",image,X_SIZE,Y_SIZE); } [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ名とバージョン:VC [3.3] 言語:C++ [4] 期限:12月24日
>>807 その根気強さと粘りと執念深さがあれば今からプログラミング覚えても間に合う
810 :
デフォルトの名無しさん :2006/12/21(木) 20:03:22
喪前ら......もちつけ (^ω^) フヒヒwwクリスマスだぉww正月だぉwwwうぇwwwwもちつきだぉ
811 :
デフォルトの名無しさん :2006/12/21(木) 20:04:44
すまん、誤爆したorz
なにやってんだよw
814 :
デフォルトの名無しさん :2006/12/21(木) 20:52:13
int型のa=3とb=2があって、 a/bの結果が1.500000となるにはどのような式を書けばいいのでしょうか? fortranだとDBLE(a)/DBLE(b)という感じになるのですが。
(double)a/(double)b
816 :
814 :2006/12/21(木) 20:55:25
(double)a/b
1.*a/b
a/1./b
お初です。お力をお貸しください。 [1] 授業単元:Cプログラミング演習 [2] 問題文(含コード&リンク): Edit Box に一辺の長さを入力してその値を atof関数 を使用して実数に変換。 そして正三角形を描画するものです。 visual c++ 6.0でダイアログベースで作成してます。 仕様: 1)入力する一辺の長さの範囲を0から1の間の実数とする。 2)入力された辺の長さによって、ピクチャーボックスに描画される図形の サイズも変化させる。(1が入力された場合には枠一杯に描画する) 3)描画領域および EditBox 全てをクリアするボタンをつける。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] コンパイラ名とバージョン: (VC 6.0++) [3.3] 言語: (どちらでも可) [4] 期限: (2006年12月26日まで) [5] その他の制限:
821 :
デフォルトの名無しさん :2006/12/21(木) 23:24:09
自然対数ってどうやって表せば良いのでしょうか? log2.71828(x) とか log2.719(x) っていう風にすれば良いのでしょうか?
スレチだったので質問スレに書き込むことにします。すいません
>>721 1. 二分探索木は平衡する必要はある?
2. 具体的な交点を求める必要はある?(あるなら符号付面積は二度手間だが?)
3. 計算量は項点数を k として O( (n+k) log n ) でないと駄目?
4. どれくらい縮退に対して対応する必要がある?
4 を十分対処して 3 を満たさないプログラムは比較的簡単にできる.
3 を満たさせるためには,俺には 4 を相当捨てないと無理.
825 :
デフォルトの名無しさん :2006/12/22(金) 10:49:32
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): キーボードから入力されるすべての文字をカウントし、入力が終了したら、 以下の内容を表示してください。 - すべての文字の文字数 - 小文字のアルファベットの文字数 - 大文字のアルファベットの文字数 - 行数 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限:今日中 [5] その他の制限:
二重積分ってどうかんがえればいいの? 簡単なヒントください><
y=sekibunn(sekibunn(x));
すれ違いだからでしょうか。>827は質問スレの方でします。失礼しました。
>>829 もういないかもしれないがスレ違いとか気にする前に
>>1 を読め
どこのスレでも同じだ
【質問テンプレ】 [1] 基礎情報工学T: [2] 問題文(含コード&リンク): 被積分関数xyについて積分区間を各々0〜1として 面積を求めよ。共に実数である。 つまりxy座標平面上において原点を頂点の一つとする、一辺が1の正方形の面積を求めるプログラムを 作りたいのです。解析的な答えは「1」となります。 座標変換を用いて1重積分に落とすことは出来ますが、それはしてはいけないことになっています。 自分で考えた限りではforの中にforを作ればいいと思ったのですが、関数名の取り扱いでこんがらがってしまって さっぱりわかりません。 どうかよろしくお願いします。 [3] 環境 [3.1] OS: (WindowsXP) [3.2] コンパイラ名とバージョン: visual studio2003 [3.3] 言語: (C++) [4] 期限: (23日日曜日まで) [5] その他の制限: (2週間ぐらい前に始めて1重積分はできました。)
832 :
デフォルトの名無しさん :2006/12/22(金) 14:10:06
826>>EOFです。
833 :
デフォルトの名無しさん :2006/12/22(金) 14:13:48
834 :
721 :2006/12/22(金) 14:50:18
>>823 1. 二分探索木は平衡する必要はある?
:ないです。
2. 具体的な交点を求める必要はある?(あるなら符号付面積は二度手間だが?)
:最終的には交点の数だけほしいです。(交点を求めないのなら走査線が止まるイベントポイントが得られないかも?)
3. 計算量は項点数を k として O( (n+k) log n ) でないと駄目?
:O( (n+k) log n )ですね。
4. どれくらい縮退に対して対応する必要がある?
:3を満たさせるなら4はお任せします。
お手数おかけします
835 :
デフォルトの名無しさん :2006/12/22(金) 14:56:08
1] 授業単元: C言語 [2] 問題文(含コード&リンク): 実行したファイル名を除いたコマンド ライン引数に、 複数個指定したすべてのファイルの内容を標準出力に 表示するプログラムを記述してください。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: C [4] 期限: 今日中
>>835 #include<stdio.h>
int main(int argc, char *argv[]){
while(argc>1){
argc--;
printf("%s\n",argv[argc]);}
return 0;}
837 :
836 :2006/12/22(金) 15:51:22
というかだいぶ問題勘違いしてた ごめん吊ってくる
838 :
デフォルトの名無しさん :2006/12/22(金) 16:05:41
[1] 宿題ではないのですが [2] a[1],a[2],…,a[100]に実数が入っていて、csvファイルに下記のように 記録するにはどのようにすればいいのでしょうか。 a[1],a[2],…,a[20] a[21],a[22],…,a[40] ・・・ a[81],a[82],…,a[100] [3] 環境 [3.1] Windows&Linux [3.2] gcc VC++ 6.0 (コンパイラに依存しないプログラムが欲しいです) [3.3] C [4] 期限: [無期限] ですが可能であれば数日以内にはお願いします。 [5] その他の制限:
>>835 int main(int argc,char *argv[]){
FILE *fp;
int c;
while(argc>1){
if((fp=fopen(argv[--argc],"r"))==NULL)exit(1);
while((c=fgetc(fp))!=EOF)putchar(c);
fclose(fp);}
return 0;}
こんな感じか?まだ勘違いしてるかも orz
>>838 宿題じゃないけど期限あるってどんな状況?
あと、配列はa[0]〜a[99]じゃないのか?
for(i=0;i<5;i++){
for(j=0;j<20;j++)printf("%lf,",a[i*20+j]);
printf("\n");
}
841 :
838 :2006/12/22(金) 16:28:44
>>840 ありがとうございます。
配列はa[0]〜a[99]の間違いでした。
プログラムそのものには期限はないのですが卒論の期限がありまして
早めに回答していただけたら・・・という状況です。
>>840 2回もforする必要なくね?
for(i=0;i<100;i++){
fprintf(fp,"%lf",a[i]);
if(!((i+1)%20))fprintf(fp,"\n");
}
843 :
デフォルトの名無しさん :2006/12/22(金) 16:36:36
[1] 授業単元:プログラミング [2] 問題文: 文字列を入力し、その文字数を調べて表示するプログラムを作成せよ。 ただし、文字列ライブラリ関数strlen()などは使用せず、ループを使って文字数 を調べる関数str_len()を自作すること。 --------------------------- int str_len(char *p); 返却値:文字数 引数 :文字列へのポインタ --------------------------- 入力文字列に対する妥当性チェックはしなくてよい。 例 Enter String : ABCDE Length of ABCDE = 5 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ名とバージョン:gcc 3.4 [3.3] 言語:C [4] 期限:2006年12月24日 [5] その他の制限:問題文にもありますが、文字列ライブラリ関数strlen()などは使わず、ループを使うそうです。
#include <stdio.h> int str_len(char *p){ int i; for(i=0; *p; i++,p++); return i;} int main(void){ char a[256]; printf("Enter String:"); scanf("%s", a); printf("Length of %s = %d\n", a, str_len(a)); return 0;}
845 :
デフォルトの名無しさん :2006/12/22(金) 16:51:03
>>843 int str_len(char *p)
{
int count=0;
while(*p) {
p++;
count++;
}
return count;
}
846 :
デフォルトの名無しさん :2006/12/22(金) 17:00:53
>>844 ,
>>845 ありがとうございます!
ループはforかwhileか、効率的な方法を考えてみます。
847 :
デフォルトの名無しさん :2006/12/22(金) 17:29:28
国語が 60 点以上でかつ、数学と理科のどちらか一方でも 60 点以上なら合格. cでお願いします
>831 y=sekibunn(sekibunn(x));
>>847 inline bool hantei(int kokugo, int suugaku, int rika)
{ return kokugo >= 60 && (suugaku >= 60 || rika >= 60); }
C99でコンパイルすること!
851 :
838 :2006/12/22(金) 17:58:06
>>842 ありがとうございます。
こちらのプログラムでもうまくいきました。
ここってPAD書けって宿題も受付てますか?
>>852 CかC++限定のスレだから受け付けてない
>>853 Cで書かれててこれのPAD書けってヤツなんだけど
>>854 ここはC/C++で書くことが前提のスレだから、残念ながら他を当たってくれ。
>>854 PADで書かれてて、Cで書けって宿題なら大歓迎だ
>>851 >>840 だと行の最後に不要な , が入らないか?
>>842 は数字の間に , 入らないし
面倒なので
>>842 使って改良
for(i=0;i<100;i++){
if(!((i+1)%20))fprintf(fp,"%lf\n",a[i]);
else fprintf(fp,"%lf,",a[i]);
}
こう一回ごとにifで判定するのとループを二重に回すのってどっちが効率いいの?
>>842 せっかくだから出番の少ない%cに愛の手を
for(i=0;i<100;i++){
fprintf(fp,"%lf%c",a[i],(i+1)%20?',':'\n');
}
>>858 どっちも比較は2回してるからそう大して違わないんじゃないかと
861 :
デフォルトの名無しさん :2006/12/23(土) 00:04:18
862 :
860 :2006/12/23(土) 00:04:25
>>858 違った
ループ2重は101回の比較か
ifだと201回の比較だな
863 :
859 :2006/12/23(土) 00:04:34
864 :
860 :2006/12/23(土) 00:13:11
>ループ2重は101回の比較 これも違った ループ2重は106回の比較だった
>>865 最初のループの5回分足すの忘れてた
もう寝るわorz
>>861 クラメルって何?クラメルの公式の事?
掃き出し法とかガウスの消去法は使っちゃだめって事?
>>834 二分木を平衡させないと O( (n+k) log n ) は達成できないような
869 :
861 :2006/12/23(土) 01:12:12
>>867 すいませんそうです。(A12) 、(A13)から行列に直してクラメルの公式でってことです
2行2列で簡単なのでクラメルの公式を用いるとのことです
メールが届いてたみたいで課題の指示がありました
(受信メールです)
--------------------------------------------------------------------------
余裕のある人は
。数値計算により初期値を見出す方法を実装する。
。ガウス関数群(Lorenz関数群でも可)が重畳している曲線を非線形最小自乗法
で分離する。数値計算により測定データをつくってから、手で誤差を与え、 それを実測データとみなす。
というチャレンジテーマがありえます。その他を自分で考えてください。
---------------------------------------------------------------------------
とあるので ガウス関数群というのがガウスの消去法のことであればそちらで解いていただいてもかまいませんが
掃き出しを使うならクラメルの公式でって指示がありました
もし高等な解法に慣れていて クラメルに不慣れであれば2元連立1次については↓
http://www.ee.fit.ac.jp/~kudou/1mathA/01/01-2.html がすごくわかりやすかったです
>>869 ガウス関数群はガウス消去法とは全然別物。
exp(-x^2) の仲間をガウス関数、1/(1 + x^2) の仲間をローレンツ関数という。
上から二つ目の課題は、こいつらの足し合わせで書かれる曲線について
どういうふうに足しあわされてるかを最小自乗で特定せよ、という意味。
>>869 わかったよー
俺も線形代数の本持ってるから、クラメルの公式については既知。
872 :
861 :2006/12/23(土) 01:36:35
>>870 ググってきました。
クラメルと両方あれば勉強になってありがたいですが
チャレンジ課題は面倒なことを依頼することになりそうなので お任せ致します!
>>871 超感謝です! よろしくです
873 :
861 :2006/12/23(土) 01:59:04
すいません訂正です・・・ 解析値(手計算)では α1 = 0.02114 α2 = 5.612 でした
874 :
721 :2006/12/23(土) 02:20:58
>>868 バカですみません_| ̄|○
二分木を平衡させないと O( (n+k) log n ) は達成できないのなら、平衡でお願いします。
う・・・・C++のみか。どうすっかな。そんなに変わらないんだけど #include <cstdio> #include <cmath> using namespace std; int main() { とすれば最小限の変更でC++になるかな。
「暇な人はセミコロンを1つしか書かずに、char配列の文字列が一致するかどうかを見る関数を作ってみてください」 と言われました。どうでも良いですが教えてください。
int comp(char *a, char *b) { return !strcmp(a, b); }
for文で既にセミコロンを最低2つ使うしな。 標準ライブラリを使うなという事になると結構難問だ。
int hoge(char *a. char *b){ return (*a==*b) ? ((*a==0 || *b==0) && hoge(a+1,b+1)): 0; } こんなん? (酒入ってだめぽ)
いや、こうだな int hoge(char *a, char *b){ return (*a==*b) ? ((*a==0 || *b==0) || hoge(a+1,b+1)): 0;}
*a>=0x80 *b>=0x80 のときは考慮しないことにして char が signed char のとき限定 int hoge(char *a, char *b){return (*a=='\0' || *b=='\0')?(*b-*a):hoge(a+1, b+1);}
883 :
861 :2006/12/23(土) 13:51:44
またメールが届いてたのですが 提出者が1人もおらず標準ライブラリを使わずにという条件だと難易度が余計にあがってしまうということで
その条件は解除されました!
>>875 ありがとうございます! ありがたくいただきますね
途中まで標準ライブラリを使わずにやってみたんですが どうもP'iの値が違っててわからないですね・・・
884 :
デフォルトの名無しさん :2006/12/23(土) 14:52:37
[1] 授業単元:Cプログラミング [2] 【問題】:入出力ライブラリ関数「fgets()」を使用して文字列を入力し、その文字列をそのまま printf()で表示するプログラムを作成せよ。 10文字を超える入力があった場合には、11文字以降を切り捨てるようにfgets()を使う こと。 この時、10文字以上の入力を行った場合と、10文字未満の入力を行った場合で、各々 入力文字列格納先にはどのような文字が格納されるのかをレポートせよ。 ※この課題では、表示結果は必ずしも実行例と同じでなくてよい。 ただし、fgets()での入力により、文字数に依存して配列にどのような文字が格納 されるかをレポートすること 【実行例】 Enter : abc lmn xyz ←空白も入力可能 You entered abc lmn xy. ←意図的に末尾にピリオドを表示させています [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: gcc 3.4 [3.3] 言語: C [4] 期限: 2006/12/25
>>884 #include<stdio.h>
int main(){
char c[11];
printf("Enter : ");
fgets(c,11,stdin);
printf("You entered %s.",c);
return 0;}
レポートは自分でやれ
内容: [1] 授業単元:Cプログラミング演習 [2] 問題文:学籍番号(5桁の英数文字列)、英、数、国の得点(各100点満点)を 次々に読み込んで、各人の総得点を計算の上、@読み込んだ順に 各人のデータを、A各人の平均と標準偏差を次の形に出力する cプログラムを作成せよ。 但し、プログラム作成においては ・学生の人数は100人以下で不定とする。(100人以下なら何人でも、 プログラムを修正せずにうまく対処しなければならない) ・学生一人のデータは構造体としてまとめて、それにStudentという データ型名をつけること。 ・Student型を要素とする配列を用意してプログラムを組むこと。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン: gcc [3.3] 言語: Cのみ [4] 期限: 2007年1月10日12:00まで その他:得点データはファイルから読み込みます。./a.out<ファイル名 といった風に よろしくお願いします
>>886 以下のような形で出力してください
Id-No Eng Math Jap Total
----- --- ---- --- -----
G0342 44 65 51 160
G0343 83 100 84 267
G0344 58 30 57 145
.
.
.
G3621 85 80 90 255
G3622 74 100 65 239
------------------------------
Ave 72.5 75.8 68.1 216.4
Dev 15.3 19.6 12.4 33.3
>>887 少しずれてますが好意的に解釈して
ください。。すみません
簡単すぎてやる気が起きない(´・ω・`)
標準偏差の求め方を調べる気が起きない(´・ω・`)
>>883 済まん。元々標準ライブラリの使用もできないという制限があった
ようですね。
しかしpow関数を使えないとなると、log関数を使いたくなるけどそれも
だめで、テーラー展開しかなくなりますが1e-7の誤差に収めるとなると
相当高い次数まで展開しなければいけなくなるし。
本来の計算の意義が失われてしまうかも、ですね。条件が解けて
よかったですね。
892 :
デフォルトの名無しさん :2006/12/23(土) 17:02:36
895 :
デフォルトの名無しさん :2006/12/23(土) 20:08:09
質問です。圧力の単位の換算表をしらべてもあてはまらないのがあります。 pa(=N/m2) kgf/cm3 atm Torr(=mmhg) H2O(m)at15℃水柱(Aq) 1 1.0197*10-5 7.5006*10-3 1.0206*10-4 98066.5の時のatm H2O 101325のときのkgf/cm2 Torrがわかりません。おねがいします
すれ違い
>>886 得点データX0 X1 X2 X3....XN-1の標準偏差ρは
ρ=√(1/NΣXi^2-μ^2) μは得点の平均です
Σの上はN-1、下はi=0です。
>>897 合ってる?
ρ=√(1/NΣ(Xi-μ)^2)
ρ=√(1/NΣ(Xi^2-μ^2)) ってことです。。
ごく普通の標準偏差だろ。分散の平方根。
オーケイです よろしくお願いします
>>897 の定義で進めて、
実装を丸投げするにも
設計の段階で混入したバグは勝手に排除されないということを
学んでもらおうではないか?
前スレの
>>962 のプログラムでmapを使わないでやる方法ってあるんでしょうか?
>>897 を次のように解釈すればおk
ρ=√((1/NΣ(Xi^2))-(μ^2)) μは得点の平均
括弧をどういうふうにつけるかによるね
>>905 質問するときは、どうして使わない方法があるかを知りたいのか理由も書き添えるといいと思うよ
普通にあると思うけど。
909 :
886 :2006/12/23(土) 23:35:40
標準偏差だけでこんなに難しいんですね 標準偏差を確実に定義しないとプログラミングは不可ですか?
>>909 当たり前だろ。
何を作って欲しいのか分からずに出来てくるとでも?
>>908 さん、ありがとうございます
mapを講義で使ってなかったので
使ってはいけないようです
よろしければ、使わない方向でどなたか教えていただけませんか?
>>910 そんなことないです
改めて実感したってコトです
918 :
デフォルトの名無しさん :2006/12/24(日) 05:43:00
どなたかこの問題といてください、5時間かかっても解けない。おねがいします。 struct final{ int max; int min; int strat; int end; } vector<fianal>final_data; vector<double>time; vector<int>data; の時、今現在timeとdataに値が入っていてその配列数はおなじである。 timeを時間としてある特定の時間から特定の時間まで(0〜1000や500〜700など)を、 100おき、または300おきと特定の範囲で区切り その特定の範囲で一番初めをstrat最後をend最大をmax最小をminとしてfinal_dataを完成するさせるには? ただし100おきとした場合でもtimeは途中がない場合や初めがない場合もある この場合max等はすべて0を入れること
テンプレ
920 :
918 :2006/12/24(日) 06:47:46
【質問テンプレ】
[1] 職場での出題
[2]
>>918 の通り
[3] 環境
[3.1] OS:Windows
[3.2] VC2005
[3.3] 言語:STL MFCいずれも可能
[4] 期限: 今年中
です。よろしくお願いします
今現在してるのは
vector<double>time;
vector<int>data;
を昇順で並び替えてあります。
>>920 問題の概要が掴みきらない。
time.at(i) と data.at(i) は対応してるのか?
time は double だけど strat, end は int。 さて、どう格納する?いや、それ以前にstrat→startだろ。
min と max は、指定時間範囲における data の値?
「timeは途中がない場合や初めがない場合」後者はワカランでもないが、前者はワケワカラン。1個でもデータがあれば max = min = そのデータ じゃないの?
922 :
918 :2006/12/24(日) 08:39:30
>time.at(i) と data.at(i) は対応してるのか? そうです それなら初めから構造体にすればいいというのは、なしで。 この状態から少ない処理(早いスピード)でするのが目的なので そしてfinalに入るのはすべてdataのほうです。 例として time data 100 110 110 105 130 5 範囲時間10〜100で区切り10の場合 fianl[0]から[7]max等すべて0で [8]はすべて110 範囲時間110〜130で区切り10の場合 final[0]すべて105で [1]すべて0で [2]はすべて5となります
>>922 それだと [min,max) じゃなくて [min,max] ってことになるけどいいの?
924 :
923 :2006/12/24(日) 10:52:24
s/min/start/g s/max/end/g だったorz
閉じカッコの違いで別の意味があるのかとw
開区間、閉区間でググってちょ
>>925 数学的に細かい話は抜きにして
[...)だと以上〜未満の区間
[...]だと以上〜以下の区間
()は範囲に含まないけど[]は範囲に含む
釣りじゃないのか… 中学校で習うレベルだと思ったが
このまま、以上、以下、未満の区別が・・・ とか言い出しそうな勢いだな。
プログラム組んでたら <= と < の違いに反応してしまうようになってしもた
高校の数学でさんざんやったろうに・・・
ゆとり世代はそんなのやらないんです><
40年前の中学でも高校でもやらなかったなあ
開区間、閉区間なんか大学で初めてやったぞ
幼稚園の数学でさんざんやったろうに・・・
もう覚えてねーよ
おままごとかYO!>幼稚園
938 :
お願いします :2006/12/24(日) 13:25:39
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): キーボードから入力されるすべての文字をカウントし、入力が終了したら、 以下の内容を表示してください。 - すべての文字の文字数 - 小文字のアルファベットの文字数 - 大文字のアルファベットの文字数 - 行数 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C) [4] 期限: 今日中 [5] その他の制限: 入力終了を示すEOFは先頭で入力する。このEOFのみの行は行数に含めません。
939 :
デフォルトの名無しさん :2006/12/24(日) 13:48:52
>入力終了を示すEOFは先頭で入力する。 これの意味がわからない。
940 :
お願いします :2006/12/24(日) 13:53:42
入力終了を示すEOFは先頭で入力する。は間違いでした。 すいません。
>>938 #include<stdio.h>
int main(){
int c,i=0,j=0,k=0,l=0,n=0;
while(1){c=getchar();if(c=='\n'){if(n){
printf("すべての文字の文字数 %d\n",i);
printf("小文字のアルファベットの文字数 %d\n",j);
printf("大文字のアルファベットの文字数 %d\n",k);
printf("行数 %d\n",l);return 0;}
n=1;l++;}else{n=0;i++;
if('a'<=c&&c<='z')j++;
if('A'<=c&&c<='Z')k++;}}}
よくわかんなかったから、先頭で改行した場合入力終了にしてみた
>>941 初期値はn=1に変更して 何も入力せず改行したとき変な動作に orz
943 :
お願いします :2006/12/24(日) 14:24:30
941をconvert 関数ではできませんか??
convert関数って何する関数?
EOFに対応するようにや、スペースは文字じゃないだろーってことで除外するようにしたり 全角が入力された場合はどうすればいいんだとか悩んでる所なんだけど convert 関数ってなに?
946 :
861 :2006/12/24(日) 14:42:37
誰か
>>816 の課題3お願いします
課題4は
>>875 さんが解いていただいたのを使わせていただきます
恐縮ですが流れてるみたいなのでもう一度お知らせしました
よろしくです
そもそも宿題は自分でやるものだ だれもやってくれなかったからといって文句言うな! お前は最低だ! で、816の3ってなに?
なんで複数の回答が必要なんだろうか
950 :
デフォルトの名無しさん :2006/12/24(日) 15:02:37
952 :
デフォルトの名無しさん :2006/12/24(日) 15:33:18
>>952 >>951 の
/* 係数と実際のpとの差を調べる */
って所で、入力値とフィッティング値の差も出力していますので、これと
pとフィッティング値と差をプロットすれば(3)の課題は解けた事になるはず。
回答たくさんあるといろいろ 学べるとか
955 :
デフォルトの名無しさん :2006/12/24(日) 15:53:25
>>953 詳しく説明までしていただいてありがとうございます!
>>955 この部分は以前にうpしたソースには無かったと思うよ。
さっき付け加えたんだから。
957 :
721 :2006/12/24(日) 21:06:03
>>721 提出が迫ってきました。
どうかよろしくおねがいします。
クラス中がお手上げの中お前ができてたら・・・
>>957 すまん。三日くらいやってみたが、どうにも縮退に対処しきれなかった。
>>958 えっへん
どうだぼくってすごいだろ
けらいになるならうつさせてやってもいいよ
961 :
721 :2006/12/24(日) 22:02:34
>>959 いえ、ありがとうございました。
よければでいいのですが、未完のもアップしていただけないでしょうか?
今夜いっぱい頑張ってみたいので。
962 :
デフォルトの名無しさん :2006/12/24(日) 22:51:50
[1] 授業単元:C言語 [2] 問題文(含コード&リンク):整数型の配列 a[10] に,キーボードから10個のデータを入力し,その10個のデータの偶数と奇数の個数を調べるプログラムを作成し提出しなさい. なお,10個のデータをすべて入力し終わってから,偶数と奇数の個数を調べること. [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc [3.3] 言語:C [4] 期限:2006年12月28日21:00まで [5] その他の制限:配列まで習いました。 未熟者ですがどうか救いの手を差し伸べてください。
>>962 #include <stdio.h>
int main() {
int i, even, odd;
int a[10];
for (i = 0; i < 10; ++i) {
scanf("%d", &a[i]);
}
even = odd = 0;
for (i = 0; i < 10; ++i) {
if (a[i] % 2 == 0) ++even;
else ++odd;
}
printf("even: %d, odd %d\n", even, odd);
return 0;
}
968 :
962 :2006/12/25(月) 00:02:06
>>967 ありがとうございます。おかげで助かりました。
>>969 訂正
>xを100で割った値をxに代入
割った余りを書き忘れてた
971 :
721 :2006/12/25(月) 07:05:36
>>964 お礼を言うのが遅くなってすみません。
ありがとうございました。
>>922 問題を次のように読解したんだけど正しい?
time[i] のときの値を data[i] とする。
時間の範囲 [a,b] と時間区切り T を与えたとき、
各細区間 [ a + k T, a + (k+1) T ] において
最初に定義されている time[x], 最後に定義されている time[y],
その区間内の min data[z], max data[w] を計算せよ。
973 :
デフォルトの名無しさん :2006/12/25(月) 10:24:27
[1] 授業単元:c言語 [2] 問題文(含コード&リンク): コマンド ライン引数に指定されたファイルすべてに対して、 改行文字以外の各行を、逆さまにして表示するプログラムを書いてください。 なお、対象のファイルには英数字などの半角文字のデータのみが入っている ものとし、漢字などの全角文字は含まれていないものとします。 [3] 環境 [3.1] OS: (Windows) [3.2] コンパイラ名とバージョン: (gcc ) [3.3] 言語: (C/) [4] 期限: 今日中 [5] その他の制限: このプログラムを a.out とすると実行結果としては、以下のようになります % cat text text1 text2 text3 % ./a.out text 1txet 2txet 3txet
新言語シースラッシュ
975 :
デフォルトの名無しさん :2006/12/25(月) 10:53:25
ew
976 :
デフォルトの名無しさん :2006/12/25(月) 11:06:28
すいません。言語がCです。974
977 :
デフォルトの名無しさん :2006/12/25(月) 11:51:41
>>916 ありがとうございます。
実行してみたのですが、include ファイルを開けません。'test.h': No such file or directory
と出ました。どこを修正したらよいでしょうか?何度もすみません。
>>977 3268.txt を test.h として保存したか?
>>969 ありがとうございます
stdlib.hは習ってないし問題文にもありませんでした
>>980 でも問題文に無いものを追加するのはまずいんじゃないか?
>>981 問題文が間違ってる場合はいいんじゃね?
>>979 stdlib.hを入れなきゃsrand()入れてるとエラーメッセージが出るはずだが・・・
ちゃんとコンパイルできたん?
985 :
デフォルトの名無しさん :2006/12/25(月) 15:18:33
お願いします! [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 二つの複素数を読み込み、その和、差、積、商を計算して表示するプログラムを作れ。 複素数には構造体を自分で定義して用いること。 [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:cygwin [3.3] 言語: C
>973 #include <stdio.h> #include <string.h> int main(int argc, char **argv) { int i, j; char buf[1024]; FILE *fp; for(i=1; i<argc; i++) { fp=fopen(argv[1], "r"); while((fgets(buf, sizeof buf, fp))!=NULL) { for(j=strlen(buf)-2; j>=0; j--) putchar(buf[j]); putchar('\n');} fclose(fp);} return 0;}
>>983 Cなら無くてもコンパイルできるはずだが。
>988 計算結果をポインタで渡してるのにtempって必要なの?
要らんねぇ。ついでに言えば、引き算がDecになっている。 #subtractionかdifferなら判るが。
>>988 そのまま提出して、もし教官ここチェックしてたらあぼーん
という高度な釣りですね
どうして動かないのか見てもらいたいんだけど、それってここでいいのですか?
問題文とエラー文、書きかけのコード含めてテンプレに沿ってあげたら いいんじゃないか
[1] 授業単元:基礎情報工学 [2] 問題文(含コード&リンク): 2数の差を求めて、それが1以下なら判定に用いた数字各々を並列出力する。 [3] 環境 [3.1] OS: Windows XP [3.2] コンパイラ名とバージョン: 2003.net [3.3] 言語: C++ [4] 期限: 明日 [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) まずは足がかりとして自分でここまで書きました。 ところがいきなりつまずいてしまいました。将来的にはf(n)やg(i)といった変数関数を用いるのですが、とりあえず今は 自然数で考えてみようと思ったのです。 結果としては 1 1 2 2 3 3 ... 10 10 となってほしいのですが、1 1でとまってしまいます。どうかよろしくお願い致します。 for(int n=1; n<=10; n++){ for(int i=1; i<=10; i++){ if (abs(n - i) < 1){ break;} else{ i = -1;} } cout << n <<" "<< i << endl; }
i = -1
>>どこまで習っているか 知るかボケ >>標準ライブラリは使ってはいけない オマエが使ってるのは何なんかと
>996 テンプレのコピペに切れるのは斬新だな
998 :
デフォルトの名無しさん :2006/12/25(月) 21:04:35
for(int n=1; n<=10; n++){ for(int i=1; i<=10; i++){ if (abs(n - i) < 1){ cout << n <<" "<< a << endl; } } }
999 :
デフォルトの名無しさん :2006/12/25(月) 21:07:40
cなんて使ってらんないよ。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。