1 :
デフォルトの名無しさん :
2005/06/23(木) 17:11:14 ――【注意点】―――――――――――――――――――――――――
・質問は必ず【質問テンプレ】に従ってください。
・問題文は、解いてもらう方にわかりやすいように全文を書きましょう。
・計算問題は必ず数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。解いてもらっている方に失礼です。
・複雑なAAはスレが荒れたり問題が埋もれる原因になりますので使用を控えてください。
―――――――――――――――――――――――――――――――
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS:Windows/Linux/等々
[3.2] コンパイラ(バージョン):
[3.3] 言語:C/C++/どちらでも可 のいずれか
[4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか
[5] その他の制限:どこまで習っているか、等々
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm 【前スレ】
C/C++の宿題を片付けます 45代目
http://pc8.2ch.net/test/read.cgi/tech/1118165596/ 【歴代スレは
>>2-13 】
2
3 :
デフォルトの名無しさん :2005/06/23(木) 17:12:12
[1] 授業単元:情報基礎 [2] 問題文(含コード&リンク):戻り値をvoidとし、char型のポインタを一つ進める 関数を作れ。但し、関数の引数は一つにしなさい。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC++ 6.0 [3.3] 言語:C [4] 期限:なるべく早く [5] その他の制限:関数の引数が複数とか、戻り値がvoidじゃなければ それらしいものは出来るのですが、引数一つで戻り値がvoidだとよく分からないです。 void func(char* s)みたいな形になると思うのですが.
>>7 void charnext(char **ps) { ++*ps; }
9 :
デフォルトの名無しさん :2005/06/23(木) 18:07:58
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 入試 センター試験で、入力データが 受験番号 受験科目数 第1科目得点 第2科目得点 第3科目得点 1111111 3 58 78 46 1111342 2 60 35 のように、受験科目数によって入力データの個数が異なる場合の 平均点を計算して出力するフローチャートおよびプログラムを 作成せよ。ただし、データは別のファイルにあらかじめキーイン されており、明細印刷も同時に行う。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年06月24日まで [5] その他の制限:whileまで習っています なにとぞよろしくお願いいたします
>>9 >[5] その他の制限:whileまで習っています
関数ポインタからwhileまで習っているのか…
>>9 えーっと印刷ってstdprnだっけ?
それともAPIたたくんだっけ?
13 :
デフォルトの名無しさん :2005/06/23(木) 18:31:26
>>11 授業では.datファイルを使ってます。
>>9 stdprnもAPIも初めて聞きます、、、m(_ _)m
14 :
前スレ972 :2005/06/23(木) 18:32:14
前
>>980 さん
>>997 さん
返信ありがとうございます!
>>980 さん
一応追加分を書き直してコンパイルしたところ、
kadai04C-1.c: In function `main':
kadai04C-1.c:152: warning: assignment makes pointer from integer without a cast
と表示されました。ちなみに引っ掛かったところは
if (p = strchr(buff, '\n'))の部分です。
>>997 さん
こんぱいるしたところ
/tmp/ccDNxE6c.o: In function `node_add':
/tmp/ccDNxE6c.o(.text+0x42): undefined reference to `_msize'
collect2: ld returned 1 exit status
と表示されてしまいました...
>>14 >>980 のぶんのウォーニングはif文の条件式の中で代入式を使っていることに対する警告だが、
コードはあれで正しいので無視してもかまわない
>>13 おれが悪かった。
dat形式の内部仕様はどうなっているんだい?(データはどういう風にならんでるの?
印刷はプログラム本体でやるのあきらめてリダイレクトすればいいとおもうんだがどうだろう。
Linuxにはそういう機構があるらしいが・・・。(lprとかいうものかな?
>>9 #include <stdio.h>
int main()
{
char id[128];
int i, nsubjects, tmp, score;
FILE *fp;
if ((fp = popen("lpr", "w")) == NULL) {
perror("lpr");
return 2;
}
while (scanf("%s %d", id, &nsubjects) == 2) {
i = score = 0;
while (i < nsubjects) {
if (scanf(" %d", &tmp) != 1)
break;
score += tmp;
++i;
}
printf("%s %g\n", id, (double)score/nsubjects);
fprintf(fp, "%s, %g\n", id, (double)score/nsubjects);
}
pclose(fp);
return 0;
}
18 :
16 :2005/06/23(木) 18:41:44
>>17 が、がんばってくれそうなので作るのやめた。
19 :
デフォルトの名無しさん :2005/06/23(木) 18:42:09
>>16 ファイルの中身は
1111111 3 58 78 46
1111342 2 60 35
というようにスペースで区切るだけです。
印刷はlprでやっています
20 :
デフォルトの名無しさん :2005/06/23(木) 18:42:40
21 :
17 :2005/06/23(木) 18:44:43
>>20 あー、入力はリダイレクトで食わせてくれ。
それと、さすがにフローチャートを書く気はないからな。
22 :
デフォルトの名無しさん :2005/06/23(木) 18:53:50
>>20 うまくできていました。
フローチャートは自分で何とかします。
どうもありがとうございました
23 :
デフォルトの名無しさん :2005/06/23(木) 19:12:46
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 任意の長さの文字列とルートノードを引数として与えられたときに、動的に増えていく 二分木の名前表を作る関数を書け。 ただし、二分木のノードには名前の文字列を持ち、左右の枝は実態がある場合もない場合もある。 深さ優先で左からたどると、辞書式の順に、 左枝の文字列<中央の文字列<右枝の文字列となるようにせよ。 ヒント: 再起呼び出しを用いて、深さ優先に探索して、子のないノードに追加していけばよい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:6月24日12:00 [5] その他の制限:とくになし どなたかお願いいたします。
25 :
デフォルトの名無しさん :2005/06/23(木) 19:21:42
【質問テンプレ】 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 支店コードとつきと売上の対前月比からなるレコードが多数入力されるとき (同一視店コードが複数月分連続する)、支店コードと最終月の対前月比だけを出力する。 入力例 101 1 1.25 101 2 0.96 103 1 0.82 103 2 0.92 103 3 1.53 0 0 出力例 101 0.96 103 1.53 [3] 環境 [3.1] OS:Windows98 [3.2] コンパイラ(バージョン):MS−DOSプロンプト [3.3] 言語:C [4] 期限:明日の朝まで(単位落とすかどうかの瀬戸際なんです) よろしくお願いします
どうでもいいが、MS−DOSプロンプトはコンパイラじゃないぞ。 それが分からないようなら、単位落としたほうがいいかもしれん。
入力はファイルからなのかな
うるさいな
全角だから面倒そうだ。
全角数字か、たいへんだな
31 :
デフォルトの名無しさん :2005/06/23(木) 20:14:49
>>25 この問題は別に全角だろうが半角だろうが関係ない、気にするな
#include <stdio.h>
#include <string.h>
struct rec {
char code[32];
int month;
double ratio;
};
main()
{
struct rec cur, prev;
memset(&prev, 0, sizeof prev);
while (scanf("%s %d %lf", cur.code, &cur.month, &cur.ratio) == 3) {
if (*prev.code && strcmp(cur.code, prev.code))
printf("%s %d %f\n", prev.code, prev.month, prev.ratio);
prev = cur;
}
}
33 :
デフォルトの名無しさん :2005/06/23(木) 20:19:21
>>32 やっぱり全角だと全然ダメということに気づいた....OTL
monthとratioもchar[]型にしておけばまあ問題ないやね
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): N行、M行の表に整数データを読み込み横計縦計および 総和を計算し表形式で出力するプログラムを書け。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年6月24日 [5] その他の制限: 宜しくお願いします
>>34 半角だそうなので問題ないが、全角の場合はそう簡単な話じゃない。
全角スペースはscanfで分けれないから問題有りだ。
全角になるだけでかなりめんどい。
>>36 そんな馬鹿なと思ったら、確かにデリミタまで全角空白だな
こりゃウザいわ
42 :
デフォルトの名無しさん :2005/06/23(木) 21:58:16
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 任意の長さの文字列とハッシュ表の大きさを引数として与えられたときに、 ハッシュ値を返す関数を書け。 −文字列を数値化(文字コードを用いて)し、ハッシュ表の大きさで剰余をとればよい。 ハッシュ表の大きさに近い素数を見つけ、これを用いて剰余を計算したり、衝突した場合は、 ハッシュ値に+1や+2を加えて剰余を計算するなど、拡張できる。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:6月24日13:00まで [5] その他の制限:特にありません。 お願いいたします。
[2] 問題文(含コード&リンク): 1)二つの文字列を入力し、比較して同じ文字列だったら「一致しました」と表示する。 ただし同じ文字数で位置しない場合はコードの小さいほうを多きほうにコピーし表示する。 また文字列の長さが違う場合は短いほうを長いほうにコピーし表示する。 strcmp(),strlen(),strcpyを使用すること 2)1文字入力し、アルファベットか数字だったら「ALPHANUMERIC」、スペースだったら「SPACE」、違う場合は「OTHER」と表示する。 改行コードが入力されるまで繰り返す。 3)2)を再起呼び出しを使い修正 3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC++ 5.0 [3.3] 言語:C [4] 期限:今日中 [5] その他の制限:文字列操作、分類、変換関数を使う
44 :
デフォルトの名無しさん :2005/06/23(木) 22:08:28
明日とか今日中とか、みんな図々しすぎww きちんと3日前くらいに依頼しよ(はぁと
問題作る方もさ、もっと魅力的な問題にしてほしいな(はぁと なんか問題文みてもやる気しないし。 ま、だからここに投げてんだろうが。
外野が五月蝿いな
これPrograming pearlsに載ってたのそのままだろ って問題もちらほらあるな
[1] 授業単元: C言語 [2] 問題文(含コード&リンク) 整数の配列に規則正しく数値を格納して、その値を出力するプログラムを書け。 配列内容 0 1 2 3 4 5 6 7 8 9 boxA 11、20、13、18、15、16、17、18、19、20 boxB 30、 6、24、12、18、18、12、24、6、30 boxC 1、 2、 3、 4、5、10、 9、 8、7、6 boxD 4、 7 、10、13、16、20、16、12、8、4 boxE 9、 7、 5、 3、1 、2、 4、6 、8 10 boxF 10、11、28、23、46、35 、64、47、88、59 ※繰り返しの制御変数の値は初期値0、最大9まで。5回繰り返し。 出力フォーマット(配列内容は三桁) (例)boxA = 111 111 111 111 111 111 111 111 111 111 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 期限:明日 [5] その他の制限:while よろしくお願いします。
>>49 #include <stdio.h>
の直下の
int n, count, a[];
が要らない
52 :
デフォルトの名無しさん :2005/06/23(木) 23:12:04
[1] 授業単元:情報科学
[2] 問題文(含コード&リンク)
http://www.i.h.kyoto-u.ac.jp/~tsuiki/lecture/jouka/3.html 上記のアプレットを用いて、次のプログラムを作成せよ。
1. data[0] (データ用メモリの 0 番地) に置かれた値の階乗を計算して出力す
るプログラム。
プログラムは、上記のアプレットのページで実行しているところを、プリント
アウトせよ。1. の場合、10 の階乗を計算しているところをプリントアウト
すること。それに、説明(どのメモリアドレスが何に用いられているかなど)
を書き加えること。
[3] 環境
[3.1] OS:windows
[3.2] コンパイラ(バージョン):上記
[3.3] 言語:上記参照
[4] 期限:明日 (延期になった)
他学部で、data[0] に10、data[1]に1を入れてからmulすればいいのは分かりますが、
その後、(storeの仕方)がまったく分かりません。
よろしくお願いします。
[1] 授業単元: [2] 問題文(含コード&リンク):ベクトル3D型に対して正規化を 行う関数vecNormalizeを作成する。引数は以下のような構成とする。 ただし引数に0ベクトルが与えられた場合は何もしないものとする。 void vecNormalize(struct Vector3D *v) [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 期限:明日の午前中頃までです [5] その他の制限:構造体、ポインタ辺りまで習いました 自分でも書いてみましたが混乱してしまってるので ご指導お願いします。
以下が自分で書いてみたものです。 #include <stdio.h> #include <math.h> struct Vector3D{ double x; double y; double z; }; void vecNormalize(struct Vector3D *v){ double len; len = sqrt(v->x * v->x + v->y*v->y + v->z*v->z); len = *v; return; } int main(){ struct Vector3D *v; double Len; double a,b,c,i; v->x = a; v->y = b; v->z = c; scanf("%lf",&a); scanf("%lf",&b); scanf("%lf",&c); Len = vecNormalize(&i); printf("%lf\n", Len); return 0; }
55 :
デフォルトの名無しさん :2005/06/23(木) 23:36:03
[1] 授業単元: C言語 [2] 問題文:(1)以下のプログラム(aを1〜10まで入れ、最大値を表示する)の時、配列aの最後尾の配列要素に配列の最大値を入れ、最大値が入っていた要素位置に配列の最後尾にあった値を入れる関数koukan(a, n)を作成せよ。 (2)さらに、関数koukanを使って、配列aおよびそのサイズnが与えられるとき、昇順する関数A_order(a, n)を作成せよ。 両問とも、正しく動作するかチェックのためのメインも作成の事。 #include <stdio.h> int main(void){ int i ,a[10], n = 10, max; for(i = 0;i < n;i++){ printf("input a[%d]= ", i + 1); scanf("%d", &a[i]); max = a[0]; } for(i = 0;i < n; i++){ if(max < a[i]) { max = a[i]; } } printf("最大値=%d\n",max); return 0; } [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:明日 [5] その他の制限:よろしくお願いします。
交歓
58 :
49 :2005/06/24(金) 00:08:56
>>50 ありがとうございます、本当に申し訳ないのですが
問題の条件にn,count,配列aの大域変数を付加することが
条件となっているのですが大域変数を残したまま
エラーをなくすことはできないのですか?
>>54 × len = *v;
○ v->x /= len; v->y /= len; v->z /= len;
lenが0なら割らない
メンバは整数でいいんじゃね?
60 :
52 :2005/06/24(金) 00:14:55
>>57 ほんとだ。でもそれは私と別人です。
大学生活版にも同じ質問があったのでその人かと。
>>53 ,54
なんとなく、おしいんだよね。
ポインタの部分の復習とかしてみるといいかも。
ポインタにはかならず実体(指す(ポイントする)もの)があるから、それを忘れずに。
一度ね、ポインタを使ってる例を幾つか、コピペじゃなくてキーボードで入力してみるといいよ。
62 :
デフォルトの名無しさん :2005/06/24(金) 00:19:08
>>52 すれ違い。
メアドさらせ。送ってやるから。
63 :
52 :2005/06/24(金) 00:27:55
>>62 どうやらそうみたいですね。ではかなり切羽詰っているので危険を承知して。
宜しくお願いします。
>>53-54 #include <stdio.h>
#include <math.h>
#define Normal(v) sqrt((v)->x * (v)->x + (v)->y * (v)->y + (v)->z * (v)->z)
struct Vector3D{
double x;
double y;
double z;
};
void vecNormalize(struct Vector3D *v)
{
double len;
/* NULLポインタ、0ベクトルなら何もしない */
if(!v || (v->x == 0 && v->y == 0 && v->z == 0)){return;}
len = Normal(v); /* マクロにしちゃったけどやってることは同じ */
/* 長さを求めたら、それで割らないと */
v->x /= len;
v->y /= len;
v->z /= len;
/* doubleにstruct Vector3Dは入らないでしょう
len = *v;
*/
return;
}
int main() { struct Vector3D v; /* ポインタでもいいけど、それなら確保しないと */ double Len; double a,b,c; /* scanfで値を受け取ってからベクトルに代入しないと */ scanf("%lf",&a); scanf("%lf",&b); scanf("%lf",&c); v.x = a; v.y = b; v.z = c; Len = Normal(&v); printf("%lf\n", Len); vecNormalize(&v); /* iは初期化されてないし渡すのdoubleじゃないし、戻り値voidだし */ Len = Normal(&v); printf("%lf\n", Len); return 0; }
66 :
53 :2005/06/24(金) 00:39:50
>>59 ,61,64さま
ご指導感謝致します
ありがとうございました
>>61 あえて要点を外してるようにもみえなくもないなー。
68 :
64 :2005/06/24(金) 00:53:40
ゴメン なんだNormal(v)って。Vector3DLen(v)とか適当に読み替えておくれ。
69 :
61 :2005/06/24(金) 00:56:46
要点って何だ・・・正規化のこと? 問題はポインタの使い方とかに慣れてないことだと思ったんだが。
70 :
53 :2005/06/24(金) 01:03:34
すみません、コンパイルしたところ error: stray '\201' in program error: parse error before `@' token とエラーメッセージがずらーっと出てきたのですが これは一体なんなんでしょうか・・・
71 :
デフォルトの名無しさん :2005/06/24(金) 01:06:34
>>70 全角空白か何かがしこたま入りこんでましたとさ
73 :
52 :2005/06/24(金) 01:08:04
>>62 できました!!ほんとに助かりました。ありがとうございます!!!
あなたは神です!!
メールで返してやれよw
77 :
デフォルトの名無しさん :2005/06/24(金) 01:23:50
78 :
53 :2005/06/24(金) 01:31:46
できました お手数おかけしました ありがとうございます
79 :
デフォルトの名無しさん :2005/06/24(金) 10:16:12
1] 授業単元:情報処理 [2] 問題文↓ 文字型1次元配列に空白を含む文字列を入力し、空白で区切られた文字列 をwordとして読み分ける。読み分けたwordを文字型2次元配列に格納する。 ただし、配列にwordの文字列を格納する際、最後に'\0'を追加すること。 読み取ったwordを一つづつ改行しながら出力してください。 [3] 環境 [3.1] OS:Windows2000 [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年6月25日12:00まで [5] その他の制限:2次元配列まで習いました よろしくお願いします。
[1] 授業単元:Data structure [2] 問題文(含コード&リンク): 下記3つのテンプレート関数をもつプログラムを作成しなさい。 1.バブルソートを利用し、dequeのオブジェクトを検索 2.セレクションソートを利用し、vectorのオブジェクトを検索 3.挿入ソートを利用し、リストを検索 [3] 環境 [3.1] OS:Windows2000/xp [3.2] コンパイラ(バージョン):Visual C++ .NET (コンソール) [3.3] 言語:C++ [4] 期限:2005年05月30日まで [5] その他の制限:STLの概要、利用方法
すいません。 >80 です。期限、6月30日の間違えでした。
82 :
ktc :2005/06/24(金) 12:06:00
問2. 入力された文字列を連続して表示するプログラムを関数を使って作成せよ。 問3. 入力された文字列の文字を逆から表示するプログラムを関数を使って作成せよ。
マルチだしね。無視しよう。
マルチかよ
マルチな上に態度大きいは好かれませんね
またまたすいません。
>>80 です。一度に複数の質問をしてしまってすいませんでした。1.のバブルソートに関する質問だけでもお力をお貸しいただければ大変助かります。どうかよろしくお願いします。
88 :
14 :2005/06/24(金) 12:25:11
前スレ
>>980 さんのプログラムをチェックしてもらったところ、
出力の結果は木を記号を利用した図で表すか
深さ優先探索でなぞった結果を表示する
(例の場合は前順だとa b c d e f g h iと表示するんだと思います)
ようにしないといけないと言われました。
結果的にプログラムの変更をお願いしてしまい大変申し訳ありません。
お手数だとは思いますが宜しくお願いします。
【質問テンプレ】 [1] 授業単元:情報処理 [2] 問題文(含コード&リンク): 次のアルゴリズムを作る (1)2次方程式の解を求める.つまり,a,b,cが与えられたとき, a*x*x + b*x + c = 0 という条件を満たす x の値を出すアルゴリズム. (2)自然数(0ないし正の整数)が与えられたとき,その階乗 n! を出すアルゴリズム.桁あふれなどの物理的問題は無視してよい. [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): Visual C++ .NET [3.3] 言語:C [4] 期限:2005年7月1日まで [5] その他の制限:ポインタ、構造体 どうかおねがいします
91 :
デフォルトの名無しさん :2005/06/24(金) 12:35:50
>>82 コレやるからもう来るなよ
#include<stdio.h> main(){printf("文字列を入力してください\n");printf("マルチ\n");printf(”反転した文字列は「チルマ」です\n”);return 0;}
92 :
24 :2005/06/24(金) 12:35:54
>>89 (1)過去ログ参照。
(2)過去ログ参照。
>>80 こういうことを聞いているのか?
template<class T>
void swapTemplate(T& ref1,T& ref2){
Tt = ref1;
ref1 = ref2;
ref2 = t;
}
template<class T>
void bubbleSort_forDeque(std::deque<T>& io_deq){
size_ti,k;
const size_tsize = io_deq.size();
if(size == 0) return;
for(i=0;i<size-1;i++){
for(k=i+1;k<size;k++){
if(io_deq[k] > io_deq[i]){
swapTemplate(io_deq[k],io_deq[i]);
}
}
}
}
>> 94 さま まさしくその通りだと思います!といっても当方STLについてまだ習い始めたばかりなので、定かではありません。これから94さまのプログラムをよく読ませていただいた上、続きの問題を考えさせていただきます。本当にありがとうございました。
iとkの定義位置がなぁ…… せめてreturn分岐の後にして欲しい。
97 :
デフォルトの名無しさん :2005/06/24(金) 15:29:23
[1]Linux Red Hat [2]コンパイラ gcc [3]C言語 [4]期限 6月29日 問題文 (1)80字以内の英文をgets()を用いて入力し、putchar()を用いて出力する。また、文字の並びを逆向きにputchar()で出力する。 (2)80字以内の英文をgetchar()を用いて入力し、puts()を用いて出力する。 ただし、( strcpy(),streat(),strlen()等)は使用しないこと。また(1),(2)に対 しては、それぞれ文字列へのポインタを仮引数とする関数(例えば、process1 (char *p),process2(char *p))を各自定義し、それらの内部で処理させること、 処理の流れは以下に示す仕様に従ってください。 <仕様> 1、メニューを表示し、上記処理(1)か処理(2)のどちらを実行させるか選ばせる。これは「1」または「2」の入力によって選択させる。 2、上記ステップにおいて、「1」、「2」以外の不適切な入力がなされたときには再度メニューを表示し、正しい選択を求める。 3、「1」または「2」の適切な入力がなされたときには、それによって指示される関数が文字列を処理する。 <入出力例> MENU: 1.Input characters by maens of gets(),output them by means of putchar(). 2.Input characters by maens of getchar(),output them by means of puts(). Please choose 1 or 2:5 Try again! MENU: 1.Input characters by maens of gets(),output them by means of putchar(). 2.Input characters by maens of getchar(),output them by means of puts(). Please choose 1 or 2:1 Please input characters:Taro Yamada You inputted the following:Taro Yamada The reversed characters is as follows:adamaY oraT 以上です製作どうかお願い致します
.┌━┐ ┌━┐ ┃┌╋──╋┐┃ └╋┘ └╋┘ ┃ ・ ・ ┃ ┌━━┐ ●━╋┐ ┌╂━━━━╂┐ ┃ └━┷┴━━╂┘ └╋━┘ 同じスレにはコピペ ┌╋┐ ┌╋┐ できるけど、違う ┃└╋╋━━╋╋┘┃ スレにはコピペでき ┃ ┃┃ ┃┃ ┃ ない不思議コピペ ┃ ┃┃ ┃┃ ┃ └━┘┘ └└━┘
100 :
デフォルトの名無しさん :2005/06/24(金) 17:26:43
>>100 前にもこのスレでソケットの問題質問してた人のようだな(w
TCP/IPはストリーム型だから、データは区切りのないバイトストリームに過ぎない。ゆえに、
read(sockfd, buff, 1024);
のように読み取れば、1〜1024byteまで読み取る可能性があるのであって、それは
1行分のデータであるとは全然限らない。
今のようにメッセージが行志向のプロトコルの場合、
サーバならaccept()後、クライアントならconnect()後にfdopen()して、後は
stdioを使って送受信するのが一番ラクだろう。
FILE *reader, *writer;
connect(....);
reader = fdopen(sockfd, "r");
writer = fdopen(sockfd, "w");
fgets(buff, sizeof buff, reader); // メッセージの行読み
fprintf(writer, "%s\n", ....); // メッセージ送信
こんな感じだな。
102 :
デフォルトの名無しさん :2005/06/24(金) 18:10:01
次のコードはfortranのコードです。 GOTO文を使わないcのコードに直すとどのようになるか教えてください。 DO 521 I = 2,N JE = I - 1 DO 520 J = 1,JE IF (EIGV(I).GT.EIGV(J)) GOTO 520 KS = J KE = I AA = EIGV(I) IA = I DO 517 K = KS,KE BB = EIGV(K) IB = IND(K) EIGV(K) = AA IND(K) = IA AA = BB IA = IB 517 CONTINUE GOTO 521 520 CONTINUE 521 CONTINUE
103 :
100 :2005/06/24(金) 18:30:55
ご指摘の通りだとは思いますが、講師はread()とwrite()の掛け合いをしてほしいようなので、 とりあえずこのままやってみます。 一行削除したらできるようになりました! レスありがとうございました。
104 :
デフォルトの名無しさん :2005/06/24(金) 18:36:39
>>102 FORTRAN 知らないんだけど、これって多分ソートだよね?
for ( I = 1; I < N; I++ ) {
for ( J = 0; J < I; J++ ) {
if ( EIGV[ I ] < EIGV[ J ] ) {
AA = EIGV[ I ];
IA = I;
for ( K = J; K <= I; K++ ) {
BB = EIGV[ K ];
IB = IND[ K ];
EIGV[ K ] = AA;
IND[ K ] = IA;
AA = BB;
IA = IB;
}
break;
}
}
}
FORTRANの配列は 1〜 なのかな?C言語 0〜 で、宣言方法が違うので注意。
f2cなんてのもあるよ それはともかく、 変数が全て大文字というだけで Cのコードに見えないのだから不思議なものだな
>>103 レベルの低い講師の想定にあわせなきゃいかんとは学生さんも大変だな
108 :
デフォルトの名無しさん :2005/06/24(金) 20:12:01
[1] 授業単元:Apro [2] 問題文(含コード&リンク): N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。 この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。 ただし, i 番目の人と j 番目の人とが 知り合いであるときa[i][j] == a[j][i] == 1 であり, 知り合いでないとき a[i][j] == a[j][i] == 0 である。 このとき, x 番目の人から,知り合いの知り合いの知り合い.... という 繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという 関係が必要か, を返す関数 int acquaintDistance(int a[N][N], int x, int y) を作れ。 なお,x 番目の人から y 番目の人に辿り着けない場合には, acquaintDistance は -1 を返すこととする。 関数名の acquaint は知り合いにさせる, distance は距離という意味である。 ヒント:待ち行列を利用する。最初に x を待ち行列に入れ, 後は,「待ち行列から一つ dequeue して,その人の知り合いを 待ち行列に enqueue する」ということを繰り返す。 ただし,一度 enqueue した人は二度と enqueue しないようにし, y を enqueue する時点あるいは enqueue する一がいなくなった時点で, 終了する。x から各人までの知り合い距離を入れる配列も用意しておき, 新しい人を enqueue する度に,その人までの距離をその配列に入れる。 [3] 環境 [3.1] OS:VineLinux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年6月25日10:00まで よろしくおねがいします。
>>108 queueよりstackのほうが作りやすいと思うなー。
[1] 授業単元:プログラミング [2] 問題文:任意の画像を読み込み、任意の点を中心としたラインプロファイルを180度分とるプログラムを書け。 つまり、任意の点を通る直線を画像に水平を0度として作成しその直線上の濃度を取得、 1度ずつ回転し直線を作成してまた直線上の濃度を取得する。という感じです。 始点と終点さえ分かれば出来そうですがその求め方が分かりません。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):C++ Builder6 [3.3] 言語:C++ [4] 期限:来週中 [5] その他の制限:特になし
114 :
デフォルトの名無しさん :2005/06/24(金) 21:12:05
>>113 濃度って何。 Σ(線分が通るピクセル値)?
任意の画像はどう読み込むの。
むしろ、来週中までの問題を今投げるってことは、
最初から割り切ってここにカキコんでんのか。
少しは自分で実装試みてたら?
116 :
113 :2005/06/24(金) 21:29:47
>>115 グレースケールの画像を読み込みます。濃度というより輝度値ですね。直線が通るピクセルの輝度値を取得します。
画像自体はBMPやTIFFをOpenDialogで読み込み、Image1に出力するという感じです。
int theFile = FileOpen(OpenDialog1->FileName, fmOpenRead);
・・・
Image1->Picture->Assign(theBitmap);
任意の点はマウスクリックしてEdit1,Edit2にX,Y座標が出力されておりこれを基にしてます。
所詮言い訳ですけど、課題が出たのは先々週あたりです、
課題自体は複数の問題があり、
1.画像に対する水平線を引きその濃度プロファイルを出力
2.画像に対する垂直線を引きその濃度プロファイルを出力
3.上記の課題
水平と垂直はすぐ出来たんですがこの課題で始点と終点の指定が出来ずに時で完全に詰まってます。
プログラム作成の方針だけでもかまわないので教えてもらえないでしょうか?
>>116 Borland C++触ったことねーからOpenDialog()だのFileOpen()だの
ナンノコッチャだけど
イメージの座標が(0,0) 〜 (X,Y)
で、マウスクリックされた「始点」が(x,y)であるとすると、終点は
(X, y * tan(θ) * (X-x)): θが0から1/2πまで
(x, Y): θが1/2π
(0, y * tan(θ) * (x)): θが1/2πからπまで
とかそんな感じだろ?
ただの高校数学の問題だとおもうが
任意座標(x1,y1)が分かり、直線の角度Cが分かるのならば、(0,Y)を求める(a)。 もし、Y<0ならば、(X,0)を求める(b) (a)はX=0との交点、(b)はY=0との交点を求めることになる。 実際に紙に書いて試してみてください。分かったら、反対側も同様に。
119 :
117 :2005/06/24(金) 21:56:51
あ、式間違ってた y + tan(theta) * (X-x) y + tan(theta) * x だな
あと、Bresenhamのalgorithmを使うといいかも。
121 :
デフォルトの名無しさん :2005/06/24(金) 22:23:17
1、プログラミング 2、コンパイラ gcc 指定された正の実数 a の n 乗根の計算 Newton法を用いて指定された正の実数 a の n乗根を求められるように ただし、 nは自然数であり a も n も main() で与えることとします。 また fx(), dfx() には 元の引数だけでなく n も渡せるようにし、 fx(), dfx() の中で使われる x の べき乗の計算 ( xn) には for ループを用いなさい。 3、os LUNIX c言語 4、明後日までです。
122 :
デフォルトの名無しさん :2005/06/24(金) 22:27:04
正の実数 a の n 乗根を求めます。 a, n を入力して下さい: 2.0 2 x fx dfx 1.500000 2.000000 4.000000 1.416667 0.250000 3.000000 1.414216 0.006944 2.833333 1.414214 0.000006 2.828431 2.000000 の 2 乗根は 1.414214 例(2) % ./a.out 正の実数 a の n 乗根を求めます。 a, n を入力して下さい: 16.0 4 x fx dfx 12.000977 65520.000000 16384.000000 9.003047 20726.750000 6913.687500 6.757767 6553.889648 2918.962646 5.081286 2069.512451 1234.438843 3.841454 650.645142 524.784546 2.951653 201.762115 226.749710 2.369287 59.903343 102.862167 2.077716 15.511642 53.200199 2.004253 2.635670 35.877216 2.000014 0.136520 32.204563 2.000000 0.000435 32.000652 16.000000 の 4 乗根は 2.000000
123 :
デフォルトの名無しさん :2005/06/24(金) 22:30:02
たびたび、121と122は、くっつかってますから、ここに来るのは、初心者なもんで すみません。122が実行例です。
> LUNIX どこの国のOSだよ
[1] 授業単元: プログラミング [2] 問題文: binaryファイルを読み込んで1バイト単位で16進数表示するためのプログラムを作成せよ ただし256バイトごとに一時停止し継続、中断をできるようにすること 出力例 ./a.out 00 01 02 03 ・・・・・0e 0f address ----------------------- 00000000 30 31 32 33・・・・・45 46 00000010 00 01 02 03・・・・・0e 0f 中略 000000f0 41 42 43 44・・・・・4f 50 ([ret]:continue, [q]:quit)? [3] 環境 [3.1] OS:mac [3.2] コンパイラ:gcc [3.3] 言語:C [4]日曜まで よろしくお願いします
126 :
デフォルトの名無しさん :2005/06/24(金) 22:38:28
{1}情報処理 {2}階乗関数kaijo() の作成 自然数 n の階乗 (n!= n * (n-1)* ... * 3 * 2 * 1) を計算する関数 kaijo() を定義して、 n を入力すると n!を出力するプログラムを作りなさい。 n の入力と n! の値の出力は、実行例を参考にして main() で行ってください。 実行例 % ./a.out nを入力してください> 5 5! ---> 120 {3、1}OS : LUNIX {3,2} gcc {3,3} C言語 {4}来週の月曜日までです。 ('−'*)ヨロシク 御願いします。
int kaijo(int s){ int r; for(r=1;s>=1;r*=s--); return r; }
>>126 #include <stdio.h>
#include <stdlib.h>
int kaijo(int n)
{
if (n < 1)
return 1;
else
return n * kaijo(n - 1);
}
int main(void)
{
char buf[64];
printf(nを入力してください> ");
if (fgets(buf, sizeof buf, stdin))
{
int n = atoi(buf);
printf("%d! ---> %d\n", n, kaijo(n));
return 0;
}
return 1;
}
LUNIXがブームなのか...
らにっくす
131 :
デフォルトの名無しさん :2005/06/24(金) 22:52:03
>>128様 アリガト!(´▽`)ございます。一様、学校にいってやってみます。
>>131 nを入力してください"の前にダブルクォーテーションつけてくれ。
133 :
デフォルトの名無しさん :2005/06/24(金) 22:55:42
>>132 (>Д<)ゝ”イエッサ!!
134 :
デフォルトの名無しさん :2005/06/24(金) 23:08:34
[1]情報処理 [2]n の階乗を求める関数 kaijo() を 用いて自然対数の底 e を求めるプログラムを作りなさい。 ただし、結果は級数の第10項(1/9!)までループを使用して計算することとし、 項数についてはマクロを用いて定義することとします。 また、e の計算結果の出力は例を参考にして、 main()で行うこととします。 [3.1]OS LUNIX [3.2]gcc [3.3]c言語 [4] 来週の火曜日までです。 よろしく御願いします。((((((^_^;)
135 :
108 :2005/06/24(金) 23:09:16
みなさん早いレスポンスありがとうございます。 参考にもなり助かりました。ありがとうございました。
136 :
113 :2005/06/24(金) 23:27:06
>>117-120 わかりました。
これらのことを参考にいろいろやってみます。
ありがとうございました。
>>134 #include <stdio.h>
#define N 10
double kaijo(int n) {
return n < 1 ? 1.0 : n * kaijo(n - 1);
}
double e() {
int i;
double r = 0;
for (i = 0; i < N; i++)
r += 1.0 / kaijo(i);
return r;
}
int main() {
printf("%f\n", e());
return 0;
}
[1] 授業単元: 知能情報処理
[2] 問題文(含コード&リンク): 遺伝的アルゴリズムを用いて関数の最適解を求める
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ(バージョン): Borland C++ 5.5.1
[3.3] 言語:C
[4] 期限今週の水曜
[5] その他の制限:ポインタ 配列 ファイル操作(fopenとか)の序盤 までは習っています
一応自分なりに完成させたのですが望んだ解が得られません
value=(-1)*c1*exp((-1)*c2*sqrt(1/2 * (pow(x1,2) + pow(x2,2)))) + exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E;
↑はソースの一部なのですがc1,c2,c3には定数が入ります
x1,x2にはランダムな数を入れ、遺伝的アルゴリズムによって最適な解(valueが最大になるx1,x2の組み合わせ)
を探そう、ということなのですが
x1,x2にどのような値を放り込んでもvalueの値が3.718282(double)になってしまいます
x1とx2には指定された範囲で次々にランダムな数が放り込まれているのは確認しています
上にコピペした関数が私のミスでx1,x2によらず3.718282を返してしまうので修正していただけないでしょうか
http://www.geatbx.com/docu/fcnfun10.html この関数を表現しようとしてますです
140 :
125 :2005/06/25(土) 00:33:53
141 :
デフォルトの名無しさん :2005/06/25(土) 00:33:56
[1] 授業単元:PROC [2] 問題文(含コード&リンク): catコマンドとegrepコマンドとwcコマンドをパイプでつないで起動することで、 テキストファイルから空行を除いた上で行数・単語数・バイト数を数えるプロ グラムを書け。 複数のファイルが指定されたときは、合計のみを表示するよ うにすること。 [3] 環境 [3.1] OS:vineLinux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年6月25日12:00まで おねがいいたします。。
>>139 取りあえず、
+ exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E;
↓
- exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E;
定数とか、型宣言見ないと、なんとも言えん。
143 :
デフォルトの名無しさん :2005/06/25(土) 00:55:45
do-while文を用いてキーボードから入力された値が素数であるかどうかを判別するプログラム を作成せよ。入力された値が素数の場合は素数と出力し素数で無い場合は最小の因数を出力せよ と言う問題なんですがぜんぜんわかりません
144 :
139 :2005/06/25(土) 01:06:19
>>142 double calcval(int p[N])
{
int i;
double value,x1,x2,m1,m2;
double c1=20.0 ,c2=0.2, c3=2.0*M_PI;
m1=0;
for(i=0; i<16; i++)
{
m1=(m1+p[i]*pow(2,i));
}
m1=m1-32768;
x1=(double)m1/32768*5;
m2=0;
for(i=16; i<N; i++)
{
m2=(m2+p[i]*pow(2,i));
}
m2=m2-32768;
x2=(double)m2/32768*5;
value=(-1)*c1*exp((-1)*c2*sqrt(1/2 * (pow(x1,2) + pow(x2,2)))) + exp(1/2 *((cos(c3 * x1) + cos(c3 * x2)))) + c1 + M_E;
return value;
}
これが関数全体です
p[N]はp[32]={ランダムに0か1}
>>143 #include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char buf[256];
int i, n, last;
n = atoi(fgets(buf,sizeof(buf),stdin));
if( n < 2 ) { fprintf(stderr, "input error\n"); return 0; }
last = sqrt(n);
i = 2;
do { }while(++i <= last && n % i);
if( i > last ) printf("%d は 素数\n", n);
else printf("%d は 合成数 [ 最小因数 %d ]\n", n, i);
return 0;
}
>>144 x1, x2の算出はそれでいいのか?
-32.768<=x(i)<=32.768の条件を満たさないぞ
詳しいことは知らんが 1/2→0 で演算される(∵1も2もintだから)からそれに何を掛けようが0。 後は無駄な演算を最初からやめるべき。GAなら時間かかる実験をやるわけだろ? 1/2→0.5 pow(x1,2)→x1*x1 (-1)*→-
148 :
デフォルトの名無しさん :2005/06/25(土) 01:57:44
>>143 テンプレくらい嫁
#include <stdio.h>
int is_sosuu( int val )
{
int num = 2;
do{
if( 0 == val % num ) return num;
num ++;
}while( num<val );
return 0;
}
int main( void )
{
int val;
scanf( "%d", &val );
val = is_sosuu( val );
if( 0 == val ) printf( "素数\n" );
else printf( "最小の因数 %d\n", val );
return 0;
}
149 :
デフォルトの名無しさん :2005/06/25(土) 02:03:17
151 :
デフォルトの名無しさん :2005/06/25(土) 02:38:01
[1]プログラム [2]文字ピラミッドの作成 実行例に示すように文字 + を使って指定された高さの文字ピラミッドを書くプログラムを考える。 1行の幅を41文字とし、高さが1の時はその中央21文字目に + を書き、 高さが2の時はさらに中央21文字目を中心に幅3だけ + を書くことにします。 サンプルプログラムの関数 line_display()内を補って、完成させなさい。 [3・1]OS:Linux [3・2]gcc [3・3]c言語 [4]来週の水曜日 です
>>149 #include <stdio.h>
#include <string.h>
#define N30
int main(void)
{
int a[N];
int i, s, e, pos, height;
memset(a, 0, sizeof(a));
while (scanf("%d %d %d", &s, &height, &e) == 3) {
for (i = s; i < e; i++) {
if (height > a[i]) {
a[i] = height;
}
}
}
height = 0;
for (i = 0; i < N; i++) {
if (height != a[i]) {
printf("%d %d ", i, a[i]);
height = a[i];
}
}
printf("\n");
return 0;
}
153 :
デフォルトの名無しさん :2005/06/25(土) 04:14:25
>>151 #include <stdio.h>
void line_display(int h)
{
char line[42];
int i, j;
for (i = 0; i < 41; i++) {
line[i] = ' ';
}
line[i] = '\0';
for (i = 0; i < h; i++) {
line[21 - i] = line[21 + i] = '+';
printf("%s\n", line);
}
}
int main()
{
int x;
printf("takasa?: ");
scanf("%d", &x);
line_display(x);
return 0;
}
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 多項間の四則演算及び累乗(^で表現する)に対応し、多重括弧に対応する電卓を作れ。 演算子「+」「-」「*」「/」「^」間の優先順位も正しく扱えること。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C [4] 期限:日曜PM6:00まで [5] その他の制限:配列に数式を読み込んで、計算結果を出力させます。 ご指導をお願いします。
155 :
デフォルトの名無しさん :2005/06/25(土) 11:03:43
[1]プログラム [2]squeeze?の作成 getlineを使って文字列s2の文字と等しい文字を区切られた文字列s1(ただし「、」で区切られている)から除去されるようなプログラムをかく。 [3・1]OS:Linux [3・2]gcc [3・3]c言語 [4]来週の火曜日 です 今独学で勉強しています。「プログラミング言語C第2版」のP59.演習2−4の変則問題です。答えの本:アンサーブックをみたのですが、 void squeeze(char s1[], char s2[]) { int i, j, k; for (i = k = 0; s1[i] != '\0'; i++){ for (j = 0; s2[j] != '\0' && s2[j] != s1[i]; j++) ; if (s2[j] == '\0') s1[k++] = s1[i]; } s1[k] = '\0'; } そこしかのっていませんでした。ほかの部分がわからないので教えてください。お願いします。
156 :
デフォルトの名無しさん :2005/06/25(土) 11:15:16
[1] 授業単元:プログラミング実習 [2] 問題文(含コード&リンク): 引数で与えられた数だけ画面に * を表示する関数を作成する。それを用いて20以下の乱数で求まった長さの*線を10本引いて終了する。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):visual C++6.0 [3.3] 言語:C++ [4] 期限:なるだけ早くお願いします [5] その他の制限:関数の作成 どなたか助けて下さい
157 :
156 :2005/06/25(土) 12:14:44
なんとか出来ましたので、↑は無視してください
159 :
デフォルトの名無しさん :2005/06/25(土) 12:54:15
sin(x)のテイラー展開の近似がわからないんです。 教えてくれませんか?
テイラーに聞けよ
>>158 #include <stdio.h>
int main( int argc, char *argv[] )
{
int i, j, line_length;
if( argc < 2 ) return -1;
sscanf( argv[1], "%d", &line_length );
if( line_length > 0 )
for( i=0; i<10; i++ ){
for( j=0; j<line_length; j++ ) putchar('*');
putchar('\n');
}
return 0;
}
[1] 授業単元: C言語 [2] 問題文(含コード&リンク): 実空間サイズが200×200の2次元平面で、原点座標を実空間の中央(100.100)と考えた仮想空間があります。 その仮想空間で、座標値を入力し、原点からの入力座標の角度を求め、表示せよ。 ※求める角度は整数値とする。 ※X軸のプラス方向を0度とする。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):Visual C++ [3.3] 言語:C++ [4] 期限:6月30日 [5] その他の制限: atan(?)は使わなくて出来るとかおっしゃってました。 よろしくお願いします(_ _(--;
>>159 f(x)=a0+a1*x+a2*x^2+a3*x^3+a4*x^4+…
と置く。(式1)(こういう形の式になってくれるとうれしいと願う気持ち)
f'(x)=a1+2*a2*x+3*a3*x^2+4*a4*x^3+…
f''(x)=2*a2+6*a3*x+12*a4*x^2+…
f'''(x)=6*a3+24*a4*x+…
f''''(x)=24*a4+…
…
だから、
f(0)=a0, f'(0)=a1, f''(0)=2*a2, f'''(0)=6*a3, f''''(0)=24*a4, …
これがどんな数列になっているのかと考えてみると、
f^(k)(0)=k!*ak (k=0,1,2,3,4,…)
<=> ak=f^(k)/k!
となる。(式2)(こうなる証明は省略)
さて、
f(x)=sin(x)だから、f'(x)=cos(x), f''(x)=-sin(x), f'''(x)=-cos(x), f''''(x)=sin(x), …
f(0)=0, f'(0)=1, f''(0)=0, f'''(0)=-1, f''''(0)=0, f'''''(0)=1…
これを式2に代入すると、
a0=0, a1=1, a2=0, a3=-1/3!, a4=0, a5=1/5!…
式1に代入すると、
f(x)=sin(x)=x-x^3/3!+x^5/5!+…
166 :
デフォルトの名無しさん :2005/06/25(土) 16:04:24
載せてみようかな?
>>164 atan2使えば楽なのに何故敢えて使わない?
168 :
159 :2005/06/25(土) 20:46:17
[1] 授業単元:C言語 [2] 問題文(含コード&リンク): 「sin(x)=x-x^3/3!+x^5/5!+…∞を近似、計算し、数学関数の値を比較する」 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): わかりません [3.3] 言語:C [4] 期限:6月29日まで [5] その他の制限:まだ初心者でほとんどわかりません ホントわからないんでお願いします!
>>168 #include <stdio.h>
#include <math.h>
#define factorial(x) gamma((double)(x)+1.0)
#ifndef M_PI
#define M_PI 3.14159265
#endif
#define X (M_PI/6) /* 30 degree */
int main( void ){
double answer=0.0, work=-1.0;
int i=1;
while( work != answer ){
work = answer;
answer += (double)((i%4==3) ? -1 : 1)*pow(X, (double)i)/factorial(i);
i+=2;
};
printf("x = %f\n", X);
printf("sin(x) = %f\n", sin(X));
printf("Maclaurin expansion -> %f\n", answer);
printf("error = %f\n", sin(X) - answer);
return 0;
}
>>167 アークタンジェント(実は数学全然理解していない自分…orz)をつかえば一発ででるけど
別のやり方でできる、と言われました。
まぁ、使っては駄目とは言われてないので、atan(?)を使ってプログラム書いてもいいのかもしれませんが……。
つ complex<double>
「nとxを入力し、n^xを出力するプログラムを書け」 って課題が出たけど、pow関数使ったやつは作り直しになってた。 まあテーマが「アルゴリズム」だったからだろうけど
>173 もしかして 文字'n'をval1、'x'をval2に入力させて printf("%c^%c\n", val1, val2);
>>173 自然数オンリーなら
int mypow(int x, int y)
{
int r = 1;
int mask = 0x40000000;
for( ; mask ; mask >>= 1) {
r *= r;
if(mask & y) r *= x;
}
return r;
}
多分まともに動く。
177 :
デフォルトの名無しさん :2005/06/25(土) 23:41:01
[1] 授業単元:情報処理C繰り返し [2] 問題:数値を入力し、最大値、最小値、平均値を出力せよ。 ※-999が入力されたら入力を終了し、最大値、最小値、平均値を表示する。 平均の値は小数6桁まで表示 ↓↓↓実行結果↓↓↓ 1 4 5 -999 平均3.333333 最大5 最小1 [3] 環境 [3.1] OS:Windows [3.2] BCC++: [3.3] 言語:C [4] 期限:2005年06月26日1:00まで [5] その他の制限:とくになし。
178 :
デフォルトの名無しさん :2005/06/25(土) 23:41:21
[1] 授業単元:情報処理C繰り返し [2] 問題:数値を入力し、最大値、最小値、平均値を出力せよ。 ※-999が入力されたら入力を終了し、最大値、最小値、平均値を表示する。 平均の値は小数6桁まで表示 ↓↓↓実行結果↓↓↓ 1 4 5 -999 平均3.333333 最大5 最小1 [3] 環境 [3.1] OS:Windows [3.2] BCC++: [3.3] 言語:C [4] 期限:2005年06月26日1:00まで [5] その他の制限:とくになし。
179 :
173 :2005/06/25(土) 23:51:41
>>176 三ヶ月前の話ですので一応できました。
ちなみにx,n共に符号付対応です。
今見ると拙い出来だったので今から作り直して見ます
>>177 #include <stdio.h>
#include <limits.h>
int main(void) {
int n, max = INT_MIN, min = INT_MAX, num = 0, sum = 0;
while (1) {
scanf("%d", &n);
if (n == -999) break;
++num; sum += n;
if (max < n) max = n;
if (n < min) min = n;
}
printf("平均%.6f\n最大%d\n最小%d", (double)sum / num, max, min);
return 0;
}
>>178 #include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *pArray = 0;
int Max = 0, Min = INT_MAX, Total = 0;
int i, n;
for (i = 0; ; i++) {
int n;
pArray = (int *)realloc(pArray, (i + 1) * sizeof (int));
if (!pArray)
return 1;
else if (scanf("%d%*[^\n]%*c", &n) == 0)
return 1;
else if (n == -999)
break;
else if (Max < n)
Max = n;
if (Min < n)
Min = n;
Total += n;
pArray[i] = n;
}
n = i;
for (i = 0; i < n; i++)
printf("%d\n", pArray[i]);
printf("平均 %f\n最大%d\n最小%d\n", (double)Total / n, Max, Min);
free(pArray);
return 0;
}
>最大値、最小値、平均値 >-999が入力されたら入力を終了 入力値の条件が足りてないだろ? マイナスを許可してるのか?(でも-999は別扱い...) 32bitなのか?
184 :
デフォルトの名無しさん :2005/06/26(日) 03:51:14
[1] 授業単元: CG [2] 問題文(含コード&リンク): static GLfloat vertex[][3]={ {0.0,0.0,0.0}, {1.0,0.0,0.0}, {1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}, {1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}}; この頂点座標から法線ベクトルを計算するプログラムを作成し、結果をnormalに格納せよ [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): Borland C++ 5.5 [3.3] 言語:C [4] 期限:26日午後1時まで [5] その他の制限:特になし すいません、アホで全く分からず(汗 よろしくお願いします
>法線ベクトル とは? >normal 型と宣言は?
>>184 main(){
normal[0][0] = 0; normal[0][1] = 0; normal[0][2] = -1;
normal[1][0] = 0; normal[1][1] = 0; normal[1][2] = 1;
}
187 :
デフォルトの名無しさん :2005/06/26(日) 09:29:15
よろしくお願いします。 [1] 授業単元:LINUXプログラミング [2] 問題文:システムコールのforkとexecvを用いて、 コマンドインタープリタ(myshという名称とする)を作成せよ。 ただし以下の機能をサポートすること。 ・設定ファイル(.path)にコマンドサーチパスを指定できること。 なお、ファイル内のパスの指定方法は、各自で考えて定義すること。 ・パイプを利用して複数のコマンドの入出力を結合できること。 ・ヒストリの機能をサポートすること。 "history"コマンドは、引数なしで実行すると過去のコマンド実行のヒストリを表示し、 引数を指定するとその引数に相当するヒストリ内のコマンドを実行するものである。 ・コマンドの実行中にCtrl-Cを入力すると、現在のコマンドの実行を中断できること。 ・exitの入力により、myshを終了できること。 [3.1] OS:Linux [3.2] コンパイラ:gcc [3.3] 言語:C [4] 期限:2005年6月28日23:59まで よろしくお願いします。
>・設定ファイル(.path)にコマンドサーチパスを指定できること。 > なお、ファイル内のパスの指定方法は、各自で考えて定義すること。 ここくらいは自分で定義しようよ
193 :
デフォルトの名無しさん :2005/06/26(日) 16:12:17
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): W杯予選対戦成績を入力して予選グループ内の順位表を表示するプログラムを作成しよう。 順位表 Team MP W D L GF GA Pts Iran 5 4 1 0 6 1 13 Japan 5 4 0 1 7 3 12 Bahrain 5 1 1 3 2 4 4 Korea DPR 5 0 0 5 2 9 0 略記和表記意味 MP 試合数現時点までの試合数 W 勝数 現時点までの勝った試合数 D 引分数 現時点までの引き分けた試合数 L 負数 現時点までの負けた試合数 GF 得点 現時点までの得点合計 GA 失点 現時点までの失点合計 Pts 勝点1試合での勝ちは3 点, 引き分けは1 点、負けは0点。現時点までの合計
194 :
584 :2005/06/26(日) 16:12:29
195 :
↑続き :2005/06/26(日) 16:15:30
実現例 > a.exe Type ’I’ or ’E’ [Input score:I/End:E] > I <- 予選1戦を入力するので,’I’ <<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>> Type the code of home team > 2 <- ホームチームはバーレーン Goals of Bahrain> 0 <- バーレーンの得点は0 Type the code of away team > 0 <- アウェイチームはイラン Goals of Iran> 0 <- イランの得点は0 Bahrain(BHN)- Iran(IRN)[0 - 0 ] : OK ?[Y/N] >Y <- 確認 OK なので’Y’ Type ’I’ or ’E’ [Input score:I/End:E] > 3 <- 入力ミス Type ’I’ or ’E’ [Input score:I/End:E] > I <- 訂正 <<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>> Type the code of home team > 1 Goals of Japan>2 Type the code of away team > 3 Goals of Korea DPR>1 Japan(JPN)- Korea DPR(PRK)[2 - 1 ] : OK ?[Y/N] >Y
196 :
↑さらに続き :2005/06/26(日) 16:19:26
Type ’I’ or ’E’ [Input score:I/End:E] > I <<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>> Type the code of home team > 3 Goals of Korea DPR>1 Type the code of away team > 2 Goals of Bahrain>2 Korea DPR(PRK)- Bahrain(BHN)[1 - 2 ] : OK ?[Y/N] >Y Type ’I’ or ’E’ [Input score:I/End:E] > I <<Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3>> Type the code of home team > 1 Goals of Japan> 10 Type the code of away team > 0 Goals of Iran> 0 Japan(JPN)- Iran(IRN)[10 - 0 ] : OK ?[Y/N] >N <- 入力ミスなので’N’ Type the code of home team > 0 Goals of Iran> 2 Type the code of away team > 1 Goals of Japan> 1 Iran(IRN)- Japan(JPN)[2 - 1 ] : OK ?[Y/N] >Y Type ’I’ or ’E’ [Input score:I/End:E] > I
197 :
↑さらに続き :2005/06/26(日) 16:20:48
Type ’I’ or ’E’ [Input score:I/End:E] > E ============================= Iran 3 2 1 0 4 1 7 Japan 2 1 0 1 3 3 3 Bahrain 2 1 1 0 2 1 4 Korea DPR 3 0 0 3 2 6 0 ============================= [3] 環境 [3.1] OS:Linuxエミュレータ [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年6月27日 [5] その他の制限:ポインタ までやりました 長文失礼しました。【アップローダー==ラウンジ】が落ちているのかつながらなかったため、このような形式ですみません。 最終的に最後の表を出力させるのが目的です。 どうかよろしくお願いします。
[1] 授業単元:プログラミングC [2] 問題文(含コード&リンク): 2〜1000までの表をつくり、 エラトステネスのふるいを用いて、素数を求め、素数には○、素数以外には×をつけよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Visual C++ [3.3] 言語:C [4] 期限:6/30まで [5] その他の制限:if,whlie,for,配列までしかやってないんでその範囲でお願いします
>>198 どういう表が必要かがわからない。
#include <stdio.h>
#define N 1000
int main(void) {
int i, sieve[N + 1], notprime;
char marubatsu[2][3] = {"○", "×"};
for (i = 2; i <= N; i++) sieve[i] = 1;
sieve[0] = sieve[1] = 0;
for (i = 2; i <= N / 2; i++) {
notprime = i;
while ((notprime += i) <= N) sieve[notprime] = 0;
}
for (i = 2; i <= N; i++)
if (sieve[i]) printf("%s%d\t", marubatsu[0], i);
else printf("%s%d\t", marubatsu[1], i);
return 0;
}
>>199 問題分には表については詳しく書いてなかったんで、こんな感じでいいんだと思います
ただ、そのプログラムだとやってないとこ使いまくりなんでちょっと心配w(まだ文字列もreturnすらもやってません)
ありがとうございました。これを参考になんとかバレないように改良します
>>200 returnは決まり文句だと思っておいて気にするな。
202 :
199 :2005/06/26(日) 17:28:36
char[]いらんかった。(言い訳:最初3項演算子で書いてた) これでprintfの中の文字列のspecifier使わなくてすむ。 #include <stdio.h> #define N 1000 int main(void) { int i, sieve[N + 1], notprime; for (i = 2; i <= N; i++) sieve[i] = 1; sieve[0] = sieve[1] = 0; for (i = 2; i <= N / 2; i++) { notprime = i; while ((notprime += i) <= N) sieve[notprime] = 0; } for (i = 2; i <= N; i++) if (sieve[i]) printf("○%d\t", i); else printf("×%d\t", i); return 0; }
203 :
デフォルトの名無しさん :2005/06/26(日) 19:13:04
,.,.,.,.,.,.,.,.,__ ,;f::::::::::::::::::::::::::ヽ i/'" ̄ ̄ヾ:::::::::::i |,,,,_ ,,,,,,_ |::::::::| (三);(三)==r─、| 見よ!この肉体美!! { (__..:: / ノ′ . ', ==一 ノ !___/_>、,,..- 、 ィ'''フ''''=、r'"~ ヽ、-=- /i,, `ヽr''"`ヽ、ヽ、 ,r'"´ ノ" )=、.,_ゝニノ,,..ィ'"´i ヽ、 ( ノ ´ ̄ `Y"´ i ) __,,.. レ _,,,,、 j、、 , ' ヽィ'''i" J ,,.ィ'"~ `'ヲ'''ー-、ノ、ヽ .{ _.ト、 Y人 ,,l、 ノt' イノ.ノ '、 >.ト '/ `ゝ、 人 ,,イ jt、 __...-' ' .,,_ _ ノ、 `ー--;::-ニ"_,ゝ=---‐''" ノ ヽ、 r 、 f" `i´ ̄` Y `ヽ / . ヽj ミi ! j' | / `i 、〉、.__,人,___,..イ、,i" j'' i ヽf Y ,j,. ,/ l ヽ、 .| ノ ,. / l 、j`ー‐‐'`ー="レ' j' l ヽ -ニ- ノ l l `i / ,l 人 ヽ / ノヽ / ヽ、 / ヽ
204 :
デフォルトの名無しさん :2005/06/26(日) 19:27:55
>>188 同じ学科だけどそれぐらい自分でガンバレ
205 :
デフォルトの名無しさん :2005/06/26(日) 22:13:30
[1] 授業単元:配列、度数分布 [2] 問題文(含コード&リンク): 試験結果を用い、3科目の合計点の得点分布(度数分布)と平均、分散を求める。 ただし、合計点は、0〜29、30〜59、…270〜299、300と30点間隔にする。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): [3.3] 言語:Visual C++ [4] 期限:6月27日15時まで [5] その他の制限:↓に試験結果
206 :
デフォルトの名無しさん :2005/06/26(日) 22:13:51
番号英語数学国語 1174330 2383955 31008658 4958863 5235272 6624958 7778084 8452562 9697348 10817795 11836455 12514747 13426285 14365064 15607638
う、すいません。1から15番です
区切りもじってないの? 100点取ったやつがいたり一桁台取ったやつがいた場合どうすんの?
半角スペースがつぶれてるんだろ。
すみません、書き直します とりあえず、3番の英語が100点です。 あとは、100点も一桁もいません
番号 英語 数学 国語 1 17 43 30 2 38 39 55 3 100 86 58 4 95 88 63 5 23 52 72 6 62 49 58 7 77 80 84 8 45 25 62 9 69 73 48 10 81 77 95 11 83 64 55 12 51 47 47 13 42 62 85 14 36 50 64 15 60 76 38
>>205 試験結果はユーザに直接入力させるの?それともコードに配列を直書き?
それともファイルから読み込み?
配列をつかって、書きます
, -'"´  ̄`丶、_ ,.∩ `ヽ 〃∪'´ ̄`二二人\ ヽ | ツ´ ̄ ̄ ̄ ̄´ ヾ ヽ. ', |ハ ,ニ、 ,. - 、 | | | l | | ハ ィハ ,二ヽ. | | | | | 同じ板にコピペするとそのままだけど、 | | | じ' |トJ〉 /)} l | 違う板にコピペすると鬼のような怖い顔 | ハ 、'_,  ̄,, 厶イ川| に変わる摩訶不思議な佳子様コピペ。 l l /\ .. イV\川 | ,' l l ,イ `l ̄´ / /ヽl l l | l ハ `メ、 〃 ヽヽ、__ノ l ∨ └‐イ「ト--ァ'´ ハヽ__ノ ヽ/ } l」」 / / }`ー 〈_n| 八 / / /ノ 〈二二人 c /\/ / , イ / /厂 /\__>< {_
>>205 雑だが。
#include <stdio.h>
#define N 15
int main(void) {
int score[N][3] = {
{ 17, 43, 30}, { 38, 39, 55}, {100, 86, 58}, { 95, 88, 63}, { 23, 52, 72},
{ 62, 49, 58}, { 77, 80, 84}, { 45, 25, 62}, { 69, 73, 48}, { 81, 77, 95},
{ 83, 64, 55}, { 51, 47, 47}, { 42, 62, 85}, { 36, 50, 64}, { 60, 76, 38}
}, total[N];
int i, dist[11] = {0}, sum = 0;
double variance = 0.;
for (i = 0; i < N; i++) {
sum += total[i] = score[i][0] + score[i][1] + score[i][2];
++dist[total[i] / 30];
}
for (i = 0; i < N; i++)
variance += (total[i] - (double)sum / N) * (total[i] - (double)sum / N);
printf("得点分布\n");
for (i = 0; i < 10; i++) printf("%3d〜%3d:%3d\n", i * 30, i * 30 + 29, dist[i]);
printf("300 :%3d\n", dist[i]);
printf("平均:%f\n", (double)sum / N);
printf("分散:%f", variance / N);
return 0;
}
ありがとうございました
[1] 授業単元: 関数 [2] 問題文(含コード&リンク): main関数内で0〜10までの5個ののランダムなint型整数値を一元配列data1に格納するものとする。 また、0〜10までの10個のランダムなdouble型実数値を一元配列data2に格納する。 この時、int型のデータ数nとint型の一元配列dataを引数として、 データのdouble型平均値を返す関数averageを作成し、この関数を多重定義することにより、 double型一元配列の平均値も算出できるようにせよ。 最後に、main関数でdata1とdata2の平均値を出力するようなプログラムを トップダウン方式で作成せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 期限:2005年6月27日まで [5] その他の制限:関数辺りまで習ってます。
>>217 「トップダウン方式」って、main()が最初に来るってコト?
>>219 そうです。つまりは関数が下。
main()の上に関数プロトタイプ宣言っていうのが必要みたいですけど。
酷い誤用だ
>>217 適当だけど、こんなん?
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
double average(int, int*);
double average(int, double*);
int main(){
int data1[5];
double data2[10];
srand(time(NULL));
for(int i = 0; i < 5; i++)
data1[i] = rand() % 11;
cout << "data1: ave = " << average(5, data1) << endl;
for(int i = 0; i < 10; i++)
data2[i] = rand() * 10 / (double)RAND_MAX;
cout << "data2: ave = " << average(10, data2) << endl;
}
続き double average(int n, int *data){ double ave = 0; for(int i = 0; i < n; i++) ave += data[i]; return ave / (double)n; } double average(int n, double *data){ double ave = 0; for(int i = 0; i < n; i++) ave += data[i]; return ave / (double)n; }
>>217 こんなんで…いいわけないか。
#include <numeric>
#include <iostream>
#include <cstdlib>
#include <ctime>
double average(int, int*);
double average(int, double*);
int main() {
int data1[5]; double data2[10];
std::srand((unsigned)std::time(0));
for (int i = 0; i < sizeof(data1) / sizeof(data1[0]); i++)
data1[i] = (int)(std::rand() / (1. + RAND_MAX) * 11.);
for (int i = 0; i < sizeof(data2) / sizeof(data2[0]); i++)
data2[i] = (double)std::rand() / RAND_MAX * 10.;
std::cout << average(5, data1) << '\n' << average(10, data2) << std::endl;
}
double average(int n, int* data) {
return std::accumulate(data, data + n, 0.) / n;
}
double average(int n, double* data) {
return std::accumulate(data, data + n, 0.) / n;
}
>>224 ありがとうございますっ!
同じ結果出すのにしても色々記述方法があるんですね・・。
>193も助けて・・・
229 :
218 :2005/06/27(月) 02:18:53
Iran(IRN):0 Japan(JPN):1 Bahrain(BHN):2 Korea DPR(PRK):3 の順なのか... Ptsの順ではなく あと、PKで決まった場合の入力はどうすんだろ?
>228 ぐは >230 PKは考えなくていいみたいです 最終的に並び替えるときはPts順みたいでした。申し訳ないです。 これの最後に書いた表は並び替えの処理をしなかった場合の例だったようです
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):関数を利用してx*x+y*y+z*zの計算を求めなさい。この際、2種類のタイプ (1)void型(2)return をそれぞれ利用したプログラムを作りなさい。x、y、zは任意の値である。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:6月28日まで [5] その他の制限:if,for,while、配列までやりました
#include <stdio.h> void kansuu1(double x, double y, double z, double * kekka) { * kekka = x * x + y * y + z * z; } double kansuu2(double x, double y, double z) { return x * x + y * y + z * z; } int main() { double z; kansuu1(1, 2, 3, &z); printf("%f\n", z); z = kansuu2(1, 2, 3); printf("%f\n", z); return 0; }
>>233 遅かったけど、折角つくったからAGE。
#include <stdio.h>
void XYZ01(double *Val,double x,double y,double z){
*Val=x*x+y*y+z*z;
}
double XYZ02(double x,double y,double z){
return x*x+y*y+z*z;
}
int main(){
double x,y,z,a1,a2;
puts("input X");
scanf("%lf",&x);
puts("input Y");
scanf("%lf",&y);
puts("input Z");
scanf("%lf",&z);
XYZ01(&a1,x,y,z);
a2=XYZ02(x,y,z);
printf("Type[Void:%lf]\nType[Return:%lf]\n",a1,a2);
}
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク):一般項が(2nー1)である数列の和を求めるプログラミングを書け。 次に和を求める部分を関数として分離した形にせよ。n=1.2.3.4....に対して出力を工夫し 結果が人目でわかるような出力の関数を作れ。 [3] [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年6月28日 [5] その他の制限: 宜しくお願いします
#include <stdio.h> //1 + 3 +・・・+ 2(N-1)-1 + 2N-1の和 //N(1<=N<=65535) unsigned int Sn(unsigned int n){ n *= n; return n; } int main(int argc, char* argv[]){ unsigned int n; do{ printf("Sn = 1 + 3 + ・・・ + 2(N-1)-1 + 2N-1 を求める\nN(1<=N<=65535)を入力しる!:"); scanf("%ud",&n); }while(n < 1 || n > 65535); printf("Sn(n = %d) = %d\n",n,Sn(n)); return 0; }
240 :
239 :2005/06/27(月) 10:57:55
訂正 printf("Sn(n = %d) = %d\n",n,Sn(n)); ↓ printf("Sn(n = %d) = %u\n",n,Sn(n));
241 :
デフォルトの名無しさん :2005/06/27(月) 11:38:49
[1]単元「演習」C言語 問題文 「以下は、ポインタの1次元配列を使った国名と首都名を結び付ける文字列テーブルである。 char *na[]={"Japan Tokyo", "USA Washington", "UK London", "France Paris", "China Beijing", "Russia Moscow", "Germany Berlin", "India New Delhi", "Brazil Brasilia",""} これを用いて、国名を入力すると、その首都名を表示するプログラムを作成し、実行しなさい。」 というものに対して以下のプログラムを組んでみました。ですが完全でないらしくこれ以上どこをいじっていいのかわかりません、プログラマーのみなさん、些細な点から大きなところまで突っ込みを頂けるとありがたいです、おねがいします プログラム #include <stdio.h> #include <stdlib.h> int seek_len(char *object); int match_nat(char *object, char *target); char *na[]={ "Japan Tokyo", "USA Washington", "UK London", "France Paris", "China Beijing", "Russia Moscow", "Germany Berlin", "India New Delhi", "Brazil Brasilia", "" };
243 :
デフォルトの名無しさん :2005/06/27(月) 11:43:46
int main(int argc, char *argv[]) { int i; if (argc!=2) { printf("Usage: <Name of Program> <Name ofNation>\n"); printf("Try again!\n"); exit(1); } for (i=0; *na[i]; i++) { if (!match_nat(argv[1], na[i])) continue; else exit(0); } printf("The capital of %s is not found.\n", argv[1]); return 0; }
244 :
デフォルトの名無しさん :2005/06/27(月) 11:44:39
int match_nat(char *object, char *target) { int length=seek_len(object); if (*(target+length)!=' ') return 0; while (*object) { if (*object!=*target) return 0; else { object++; target++; } } printf("The capital of %s is %s.\n", object-length, target+1); return 1; } int seek_len(char *object) { int i; for (i=0; *(object+i); i++); return i; }
245 :
デフォルトの名無しさん :2005/06/27(月) 11:45:17
実行結果 <適切な入力時> % ./a.out Japan The capital of Japan is Tokyo. <不適切な入力時1> % ./a.out Russia India Usage: <Name of Program> <Name of Nation> Try again! <不適切な入力時2> % ./a.out Greece The capital of Greece is not found. 多数ログうめてごめんなさい
>>246 同じ学校やらクラスの生徒で
「2Chで宿題教えてもらった」
と噂になる。
短期間で同じ問題がどっと押し寄せる。
ということなんだろう。
>>246 そうか。じゃぁ突っ込みいれるまでもないね。
いいじゃん馬鹿量産してやればwww
251 :
241 :2005/06/27(月) 18:07:05
すみません。自己解決しました。 返事してくれたみなさんに感謝。
252 :
デフォルトの名無しさん :2005/06/27(月) 18:44:05
[1] 授業単元: C言語A [2] 問題文(含コード&リンク) int a[8] と宣言された配列 a があり, その要素の値は 0, 1, 2 のいずれかとする。 また,p を 0 <= p < 8 であるような整数とする。 a[p+1], a[p+2], ... と調査したとき,0を挟まず2が1個以上続いて, その直後に 1 があるとき,その続いた2の個数を返し, そうでないとき 0 を返す関数 int check(int a[8], int p)を作れ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:6月28日 am7:00まで [5] その他の制限:特にありません。 すいませんが、お願いいたします。
int check( int a[8], int p ) { int i; for( i = 0, p++; p < 8; p++ ) switch ( a[ p ] ) { case 0 : i = 0; break; case 1 : if ( i ) return i; break; case 2 : i++; break; } return 0; }
254 :
デフォルトの名無しさん :2005/06/27(月) 19:21:21
#include<stdio.h> #include<stdlib.h> #define V 2000 main() {int i,j; char data[V]; int data2[V]; FILE *fp; fp = fopen("583904.txt","r"); for(i=0;i<V;i++){ data[i]=fgetc(fp); } fclose(fp); for(i=0;i<V;i++){ data2[i]= atoi(data[i]); } return 0; } 583904.txtには576786584684という感じにずーとデータが入っています。 文字列型で取り出したのを整数型で使いたいのでatoiという関数を使い ましたが、”1 番目の引数を 'char' から 'const char *' に変換でき ません。”というエラーが出ます。どうしたらいいんでしょうか?
質問の内容だけに答えるなら、 data2[i]= atoi(data[i]); -> data2[i]= atoi(data);
256 :
デフォルトの名無しさん :2005/06/27(月) 19:30:21
[1] 授業単元: 画像処理 [2] 問題文(含コード&リンク): Hough変換アルゴリズムを用いて、円 r=(x-a)^2 + (y-b)^2 を検出するプログラムを作成せよ。 (a)原画像を二種類以上用いよ。 (b)処理後のabrパラメータ空間をGnuplotを用いて表示せよ。 1:1点のエッジに対する軌跡(円錐)を表示せよ。 2:2点以上のエッジに対する軌跡(円錐)を表示せよ。 (c)3種類以上にし閾値を変化させた実験結果を逆変換し、その結果を原画像に投影した画像を表示せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年6月30日まで [5] その他の制限:特になし ほとんど分かりません。よろしくお願いします。
257 :
デフォルトの名無しさん :2005/06/27(月) 21:51:43
[1] 授業単元: 信号処理 [2] 問題文(含コード&リンク): date.csvファイルに入っているデータ(Excelのファイルで1列目に少数のデータ[例、-1.543579] が多数入っている)のを読み込んで、 それぞれをA[i]という配列にしまう。iはデータの個数。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ(バージョン):Visual C++ 6.0 [3.3] 言語:C [4] 期限:2005/06/28 [5] その他の制限:特になし お手数おかけいたしますが、どうかよろしくお願いいたします。
258 :
257 :2005/06/27(月) 22:25:03
↑分かりづらいかと思いますので補足させていただきます。 date.csvファイルには、1行1列目(1A)から1000行1列目(1000A)までデータが入っており、それらをそれぞれXという配列に読み込みます。 例えば1行1列目はX[0]に、2行1列目はX[1]にという具合です。 申し訳ございませんが、どうぞ宜しくお願いします。
>>257 #include <stdio.h>
#define DATA_MAX 65535
int main( void )
{
double X[DATA_MAX]; unsigned int i=0; char ch='\0';
do scanf( "%lf ", X+i++); while( scanf( "%c ", &ch ) > 0 && (ch == ',') );
return 0;
}
260 :
デフォルトの名無しさん :2005/06/27(月) 22:58:46
[1] 授業単元: C言語 [2] 問題文:整数配列 x とその大きさ s が引数とされているとき、配列中の最大値の配列要素の位置を返却する関数 saidai を作成してください。 さらに、配列 x の最後尾の配列要素に配列 x の最大値を入れ、最大値が入っていた要素位置に配列の最後尾にあった値を入れる関数 change を作成してください。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:明日 [5] その他の制限:どうかお願いします。
>>260 #define swap_int(a,b) {int tmp = (a); a = (b); b = tmp;}
int saidai( int x[], int s )
{
int i, max = x[0], pos_max = 0;
for( i=0; i<s; i++ )
if( x[i] > max ){
max = x[i];
pos_max = i;
}
return pos_max;
}
void change( int x[], int s )
{
swap_int( x[s-1], x[saidai(x,s)] );
}
263 :
デフォルトの名無しさん :2005/06/27(月) 23:20:04
264 :
257 :2005/06/27(月) 23:20:14
>>259 早速わざわざありがとうございます!!
こちらのプログラムでは、date.csvファイルの宣言する必要はなしで良いんですかな?
[1] 授業単元:ポインタ [2] 問題文(含コード&リンク): 現存ファイルに任意の数の数値が入っている。 そのファイルを呼び出し、データ最大値・最小値・平均値・標準偏差値を 取り出すプログラムを関数へのポインタ変数の受け渡しを利用して作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年6月29日 [5] その他の制限: 「任意の数の」なんでwhileを使え、ということらしいです。 現存ファイルの名前はseiseki.txtです。 内容は↓ 列ごとに別の教科の点数、ってことみたいです。 70 56 66 45 88 66 85 68 55 73 55 65 53 67 55 85 72 76 58 65 92 70 45 73 55 56 57 52 62 82 72 62 33 85 95 46 95 48 72 34 83 42 88 92 56 68 65 91 82 66
>>264 じゃあこうしてみるとか
#include <stdio.h>
#define DATA_MAX 65535
int main( void )
{
double X[DATA_MAX]; unsigned int i=0; char ch;
FILE *fp = fopen("data.csv","r");
if( !fp ) return -1;
do fscanf( fp, "%lf ", &X[i++] );
while( fscanf( fp, "%c ", &ch ) > 0 && (ch == ',') && (i < DATA_MAX) );
fclose( fp );
return 0;
}
268 :
デフォルトの名無しさん :2005/06/28(火) 00:04:20
[1] 授業単元: windows プログラミング [2] 問題文(含コード&リンク): 簡単なオセロのような物を作ります。以下条件です。 ※マウスの左が押されたら白、右ボタンを押されたら黒を置く。 ※8×8の升目を2次元配列で実現。 ※2次元配列のデータは 0→何も置かれていない 1→白が置かれている 2→黒が置かれている [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):Visual C++ [3.3] 言語:C [4] 期限:6月28日PM.1:00まで [5] その他の制限:一応↑のような状態まで自分でやりました。 手元にソースがないので、今テキストに書きました。(間違えているかも知れません・・・) あとは、反転処理だとは思うのですが、よくわかりません……。 forやifでできるとは思うのですが……。 よろしくお願いします。
>>268 WindowsのGUIか…面倒くさいな。フルスクラッチ?
271 :
デフォルトの名無しさん :2005/06/28(火) 00:10:08
[1]プログラム [2]squeezeの作成 getlineを使って文字列s2の文字と等しい文字を区切られた文字列s1(ただし「、」で区切られている)から除去されるようなプログラムをかく。 [3・1]OS:Linux [3・2]gcc [3・3]c言語 [4]水曜日 です
>>270 初歩的なことですいません。フルスクラッチとはどういうことでしょうか?(´・ω・`)
とりあえず、挟んだ所をオセロのように反転させる処理ができればOKぽいです……。
>>268 漏れまだそこまでいってない。
みんな進むの早いよ・・・
[1] 授業単元: c言語 [2] 問題文(含コード&リンク): 行列A,Bの掛け算をするプログラム。A,Bのサイズと各要素は標準入力から入力し、 掛け算が可能かもチェックできるようにせよ。 [3] 環境 [3.1] OS:Windows/Linux/等々 Windous [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C/C++/どちらでも可 のいずれか c言語 [4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 今月30日まで [5] その他の制限:どこまで習っているか、等々 ポインター、構造体くらいまで習ってますがまだイマイチ理解が足りません 以下に未完成のプログラムを貼ります。int A[l][m],B[n][o],C[l][o]; って感じのことが出来たら完成すると思うんですが… よろしくお願いします
276 :
275 :2005/06/28(火) 01:13:00
#include <stdio.h> #include<stdlib.h> main() { int l,n,m,o,i,j,k; printf("行列A(行数l,列数m),行列B(行数n,列数o)の積を求めます。\n"); printf("lを入力してください。\n"); printf("l="); scanf("%d",&l); printf("mを入力してください。\n"); printf("m="); scanf("%d",&m); printf("nを入力してください。\n"); printf("n="); scanf("%d",&n); printf("oを入力してください。\n"); printf("o="); scanf("%d",&o); printf("行列Aは%d×%d行列、行列Bは%d×%d行列です。\n",l,m,n,o); if(m!=n){ printf("指定された行列のサイズでは演算不可能です。\n"); } else{ printf("A×Bは演算可能です。\n");
for(i=0;i<l;i++){ for(j=0;j<m;j++){ printf("行列Aの%d行%d列の成分は?・・・",i+1,j+1); scanf("%lf",&A[i][j]); printf("行列Aの%d行%d列の成分は%lfです。\n",i+1,j+1,A[i][j]); } } for(i=0;i<n;i++){ for(j=0;j<o;j++){ printf("行列Bの%d行%d列の成分は?・・・",i+1,j+1); scanf("%lf",&B[i][j]); printf("行列Bの%d行%d列の成分は%lfです。\n",i+1,j+1,B[i][j]); } } for(i=0;i<l;i++){ for(j=0;j<o;j++){ for(k=0;k<m;k++){ C[i][j] += A[i][k]*B[k][j]; } } } for(i=0;i<l;i++){ for(j=0;j<o;j++){ printf("ABの[%d]行[%d]列成分 = %lf\n", i+1,j+1,C[i][j]); } } } }
278 :
デフォルトの名無しさん :2005/06/28(火) 01:38:12
1 abc 2 defg 3 hijk -1 **** 0 1 10 0 2 34 1 2 55 2 1 28 -1 -1 0 1 上のようなデータが書かれたdatファイルがあり、これをプログラムで読み込んで、 char型 x[****より上の要素の数(この場合3)][10] / ヽ. | a b c | x | d e f g | | h i j k .| ヽ. / int型 y[****より上の要素の数][****より上の要素の数] / ヽ. | 0 10 34 .| y .| 0 0 55 | | 0 28 0 | ヽ. / n = 1 (←一番下にあるデータ) のように配列に格納するソースファイルを作ってもらえないでしょうか? よろしくお願いしますm(__)m
279 :
278 :2005/06/28(火) 01:39:44
[1] 授業単元: C言語 [3] 環境 [3.1] OS:Windows/Linux/等々 WindowsXP [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C/C++/どちらでも可 のいずれか C言語 こちらを張り忘れました・・・(汗
>>274 このスレの人らって同じ専門高校(大学?)の生徒なの?
281 :
257&264 :2005/06/28(火) 02:12:09
#include <stdio.h> #define DATA_MAX 65535 main() { FILE *fp; double X[DATA_MAX]; int i(0); unsigned int k(0); char ch; fp=fopen("date.csv","r"); if( !fp ) return -1; do fscanf(fp,"%lf",&X[k++]); while (fscanf(fp,"%c",&ch) > 0 && (ch == ',') && (k < DATA_MAX) ); fclose(fp); return 0; for(i=0 ; i<=DATA_MAX ; i++) { printf("%d\n",X[i]); } } コレなんですが、エラーは無くとも出力が何も出てきません。 どうしてでしょうか? 何度もすみません。
283 :
257&264 :2005/06/28(火) 02:30:24
282>> 一応、エラー、警告共に0ですが、実行しても何もでないです。 どうしてでしょう・・。
C++かな。どうでもいいけど。 配列Xをmain()の外に出してみたらどうよ。
285 :
282 :2005/06/28(火) 02:40:12
(´・∀・`)ヘー そうなんだ。じゃ return 0; 取れ
286 :
257&264 :2005/06/28(火) 02:41:27
>>284 何も出ないっす(;_;)
お手数かけて本当にすみません。
287 :
K :2005/06/28(火) 02:43:20
pascalのこと詳しい人いますか?
289 :
257&264 :2005/06/28(火) 03:15:52
何度も何度も申し訳ないですm(_ _)m やはりどうしても出力がなされません。 return 0;もなくしてみました。 何か解決法がございましたら、ご教授お願いいたします。
290 :
デフォルトの名無しさん :2005/06/28(火) 03:26:52
【質問テンプレ】 [1] 授業単元: C言語 [2] 問題文(含コード&リンク): SJISの文字列を入力して、8バイト、 もしくは2バイト文字で重なっている場合は7バイトずつに文字列に 改行を挿入する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Borland C++ Compiler 5.5.1 [3.3] 言語:C [4] 期限:金曜まで [5] その他の制限:どうかお願いします。 改行で区切るtokという関数を作ったのですが、うまく行きません。 例えば、"2あいうえおかきくけこ"だとうまく行きますが、 "ふぃdjそいfjs"とかだとうまく行きません。どこを変えたら いいですか? 下に書きます。
291 :
デフォルトの名無しさん :2005/06/28(火) 03:27:07
#include<stdio.h> #include<string.h> void tok(unsigned char str[8192],int tok); void main(){ unsigned char str[8192]; fgets(str,8192,stdin); tok(str,8); printf("%s",str); } void tok(unsigned char str[8192],int j){ int i,l,ll,tok,cou; unsigned char c1,c2,tokstr[8192]; tok=0;ll=0;cou=0;l=strlen(str); while(ll<=l){ if(cou-j>=0){ c1=str[ll-1]; c2=str[ll]; if(((c1>=0x81 && c1<=0x9F) || (c1>=0xE0 && c1<=0xEF)) && ((c2>=0x40 && c2<=0x7E) || (c2>=0x80 && c2<=0xFC))){ tokstr[tok-1]='\n';cou=0;ll--; } else{tokstr[tok]='\n';tok++;cou=0;} } else{tokstr[tok]=str[ll];ll++;tok++;cou++;} } strcpy(str,tokstr); }
>>257 #include<stdio.h>
int main(void)
int x[10000],result,n=0,i;
FILE *fp;
fp=fopen("date.csv","rt");
if(fp==NULL){printf("error:file not found.\n");
exit(1); }
while(1){
result=fscanf(fp,"%lf",&x[n]);
if(result==-1)break; n++; }
fclose(fp);
printf("input data\n");
for(i=0;i<n;i++)printf("%2d",x[i]);
printf("\n");
}
293 :
訂正 :2005/06/28(火) 03:34:18
>>257 #include<stdio.h>
int main(void) {
int x[10000],result,n=0,i;
FILE *fp;
fp=fopen("date.csv","rt");
if(fp==NULL){printf("error:file not found.\n");
exit(1); }
while(1){
result=fscanf(fp,"%lf",&x[n]);
if(result==-1)break; n++; }
fclose(fp);
printf("input data\n");
for(i=0;i<n;i++)printf("%2d",x[i]);
printf("\n");
}
294 :
257&264 :2005/06/28(火) 03:35:22
あ!? 出力は出る様になりましたが、 ずっと値は-858993460のままです。
295 :
257 :2005/06/28(火) 03:40:23
293>> ありがとうございます!! えっと、実行してみたのですが、真っ黒のまま何も表示されない状態です。 上の294は間違えですので気にしないでください(汗)
296 :
訂正 :2005/06/28(火) 03:44:15
>>295 ファイルに入ってるのって数字だけだよね?(一行にひとつの実数でそれが千行?)
ファイル名が間違ってることはない?
297 :
257 :2005/06/28(火) 03:48:22
>>296 様
えっと、実はファイル名はdate.xlsで間違っていたのですが、
自分で入力する際に変更していました。
中に入っているデータは数字だけで、
一行目が-2.36145、その後値は変化していき、
それが2005行目まであります。
xlsとcsvはまったく違うものだが。
299 :
訂正 :2005/06/28(火) 03:57:19
int x[10000]じゃなくて double x[10000]みしてみて
300 :
訂正 :2005/06/28(火) 03:58:11
int x[10000]じゃなくて double x[10000]にしてみて
301 :
257 :2005/06/28(火) 04:00:58
>>299 様
xlsとcsvの間違え申し訳ございません。
doubleに変えてみたのですが、真っ黒の画面に白いバーが点滅しているだけで何も起きません。
遅くまですみません!!
で、読みたいブツはxlsなのか?
303 :
257 :2005/06/28(火) 04:02:58
printf("input data\n"); ↑も出力されていない状態です。
304 :
257 :2005/06/28(火) 04:03:38
>>302 様
date.xlsです。
すみません。
305 :
訂正 :2005/06/28(火) 04:03:52
ファイルの内容最初のほうと最後のほう書いて
xlsかよ オレは降りる。
307 :
257 :2005/06/28(火) 04:08:19
>>305 様
1行目から10行目までが↓
-2.36145
-1.641235
-2.959595
-2.776489
-1.775513
-2.947388
-2.300415
-1.616821
-2.874146
-2.739868
1996行目から2006行目までが↓
-2.581177
-2.605591
-1.921997
-3.081665
-2.715454
-1.885376
-3.057251
-2.312622
-2.373657
-3.276978
以上になります。
308 :
訂正 :2005/06/28(火) 04:28:43
#include<stdio.h> int main(void) { int n=0,i; double x[2100]; FILE *fp; fp=fopen("date.xls","rt"); if(fp==NULL){printf("error:file not found.\n"); exit(1); } while(1){ fscanf(fp,"%lf",&x[n]); if(x[n]==-3.276978)break; n++; } fclose(fp); printf("input data\n"); for(i=0;i<n;i++)printf("%lf\n",x[i]); printf("\n"); }
先生! 学校の教師がプログラミングの課題によく数学を絡めてくるんです。 数学の授業でもないのに、数学の部分で悩ませようとしてくるんです。 授業ではプログラミングの事しか勉強していないのに、 課題に数学を出すなんておかしいと思います><
>>309 プログラミングと数学が関係を持つのはあたりまえ
>>257 fscanf()の戻り値を-1(EOF)かどうかだけでチェックするのは危険だ。
fscanf()で値をNコ読み出すんなら戻り値はNかどうかをチェックしろ。
そうしないと、入力が不正な場合は、あっさり無限ループになる。
それと、本当に.xlsファイルなら、stdioのfscanf()のようなものを使って
お手軽な入出力、というわけにはいかない。
.xlsはただのテキストファイルではないからな。
.xlsファイルを一番簡単に読むやり方はオートメーションを使うことだが、
どうもそれは「宿題」の範囲を超えるような気がする。
312 :
デフォルトの名無しさん :2005/06/28(火) 05:13:57
sage
>>253 大変助かりました!ありがとうございます。
314 :
257 :2005/06/28(火) 08:53:45
>>308 様
遅くまで何度も何度もありがとうございました。
自分も何度も挑戦してみたのですが、難しいっすね(汗)
本当にありがとうございます。
>>311 様
.csvファイルであれば可能でしょうか?
もともと、C言語で作ったプログラムからデータを取った物なので、
.xlsファイルでなくても、.csvファイルにすることも可能です。
>>257 csvからxlsに保存しちまっただけだろ。
xlsからcsvに簡単に変換できるのになぜそうする?
316 :
257 :2005/06/28(火) 09:10:13
>>315 様
そうなんです。
ですので、csvでファイルを扱うことも可能です。
無知なためにxlsとcsvとで、プログラムの組み方が変わってくると思わなかったので。
本当にすみませんm(_ _)m
ん? 少数のデータが多数? どっちなんだ? xlsファイルを一度、テキストエディタで開いて味噌。
318 :
257 :2005/06/28(火) 10:00:41
>>317 様
誤字です。すみません!!
正しくは小数のデータが1行目〜2006行目まで入っているということになります。
メモ帳で開けますかね?挑戦してみます。
何でもいいからテキストエディタをインストールしろ。 話はそれからだ。
320 :
257 :2005/06/28(火) 10:16:52
>>319 様
ただいま通学中のためできないのですが、昼頃にはインストして開いてみますm(_ _)m
べつにメモ帳でもいいけどなw
323 :
322 :2005/06/28(火) 10:58:13
間違った方のファイルアゲちまった。orz BOOL _Stone_Reverse( POINT *ptSet, int iStone, POINT *ptVector ) { // 省略 do { ppiBorad[ tSearch.x ][ tSearch.y ] = iStone; tSearch.x -= ptVector->x; tSearch.y -= ptVector->y; } while ( ppiBorad[ tSearch.x ][ tSearch.y ] != STONE_NONE ); return bResult; } に修正しておいて。
324 :
308 :2005/06/28(火) 11:17:21
俺はそれでうまくいったからたぶんファイルの種類が違うんだな。 因みに俺はデータをメモ帳に保存した。そしたら308でできた。
325 :
デフォルトの名無しさん :2005/06/28(火) 12:54:45
[1] 授業単元: データ構造 [2] 問題文(含コード&リンク): PhysCheck型構造体で表されてる身体検査の データ配列をクイックソートのアルゴリズムを用いて整列を行うプログラムを作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): Cygwin [3.3] 言語:C [4] 期限:今週の木曜1時
326 :
325 :2005/06/28(火) 13:00:11
以下自分で作ってみたプログラムなんですけどコンパイルできないんです 大変見難いかと思いますがどうか宜しくお願いします #include <stdio.h> #define swap(type,h,i) do{type t = h; h=i; i=t;} while(0) void quick_height(const PhysCheck a[],int l,int r) { int pl = l; int pr = r; do{ while(a[pl].height<a[(l + r) / 2].height) pl++; while(a[pr].height>a[(l + r) / 2].height) pr--; if(pl<=pr){ swap(int,a[pl],a[pr]); pl++; pr--; } } while(pl <= pr); if(l<pr){ quick(a,l,pr); } if(pl<r){ quick(a,pl,r); } }
327 :
325続き(構造体とmain関数) :2005/06/28(火) 13:01:05
typedef struct{ char name[20]; int height; double vision; } PhysCheck; int main(void) { int i; PhysCheck x[] = { {"AKANE Kouichi", 170,2.0}, {"TOKUTOMI Shyuji", 173,1.5}, {"NISHIDA Taro", 170,0.5}, {"TSUJINO Jiro", 175,0.4}, {"MATSUO Keiji", 167,0.6}, {"OHYAMA Kazuhiro", 168,0.2}, {"KITAYAMA Takuya", 179,0.6}, {"TANAKA Rina", 158,0.9}, }; int nx = sizeof(x)/sizeof(x[0]); for(i=0;i<8;i++) printf("%-18.18s%4d%5.1f\n",x[i].name,x[i].height,x[i].vision); return(0); }
328 :
257 :2005/06/28(火) 13:03:52
>>324 様
メモ帳に保存しようと思うのですが、
コピペでいいのでしょうか?
それともプログラムから開くでやった方がいいのですか?
プログラムから開くと文字化けします。
329 :
257 :2005/06/28(火) 13:08:18
>>324 様
メモ帳に保存しようと思うのですが、
コピペでいいのでしょうか?
それともプログラムから開くでやった方がいいのですか?
プログラムから開くと文字化けします。
>>328 最初からxlsだったわけじゃないんだろ?そのデータ使え
331 :
257 :2005/06/28(火) 13:23:14
もともとはcsvファイルで出力したものを、データの数が多すぎるんで編集してcsvで保存してあります。 そのcsvファイルのデータを読み込んで、配列に入れたいのですが。
>>325 swap( PhysCheck, a[ pl ], a[ pr ] );
>>257 csvを保存するのにメモ帳は関係ないだろ。
xlsをメモ帳(テキストエディタ)で開けば、
それがそのままでは利用しにくいと言うことが判るから>317はそう言ったんだと思うが。
335 :
デフォルトの名無しさん :2005/06/28(火) 13:57:34
337 :
257 :2005/06/28(火) 14:34:53
なんだかこんがらがってしまいすみません。。 csvよりかテキストファイルの方が読み込みが簡単なのかと思いこんで、書き換えようとしてました。 csvファイルがあらますので、そのまま配列に読み込みたいです。 何度も本当に申し訳ないのですが、宜しくお願いします。
339 :
257 :2005/06/28(火) 15:15:51
分からないことだらけですみません。 csvもテキストファイルなようですね。 csvファイルを読み込んで、配列に入れ込む方法を教えていただきたいです。
それはひょっとしてジョークで言ってるのか?
341 :
デフォルトの名無しさん :2005/06/28(火) 15:37:27
学校の宿題でプログラムを作れと言われたが授業中寝ててぜんぜんわからないから サンプルの乗ってるいいサイトとかもし知ってたら教えてくれ。
[1] 授業単元: プログラミング実習 [2] 問題文(含コード&リンク): 関数 データ型 演算子 制御文 配列 ファイルの入出力を使って100ステップ以上のコンパイルできるソース [3] 環境 [3.1] Win2k [3.2] コンパイラ(バージョン): 不明 [3.3] C [4] 期限:2005年7月12日まで [5] もうさっぱり
344 :
デフォルトの名無しさん :2005/06/28(火) 15:43:12
サンキュー
>>343 制御文っていうのがまたえらく抽象的だな。
>>345 if文
if else文
関係演算子
論理演算子
繰り返し
while文
無限ループ
break文
continue文
多分これだと思います
つーかもう100ステップとかマジ無理
printfくらいしかわからんよ
教えてクン養成マニュアル 1. 努力を放棄すること いやしくも「教えてクン」たるもの、努力をしてはならない。 過去ログを読んだり、検索してはいけない。 「英語は苦手なので、分かりません。」は、高く評価できる。 辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。 他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。 また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。 「サッパリ」という単語が「やる気の無さ」を効果的に表現している。 「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。
>>322 遅レスすいません。
#defineなどはまだ習ってないんですよね……。
そしてポインタを理解していない自分 orz
でも、今日やって方向性は見えてきました!
本当にありがとうございましたm( __ __ )m
349 :
デフォルトの名無しさん :2005/06/28(火) 16:55:33
[1] 授業単元: [2] 1 一行に一つの整数が書かれているファイルがある。 2 このファイルを読み込んで、昇順にソートするプログラムを作りなさい。 3 データファイルの名前はコマンドライン引数で与える。 4 使い方を誤ったとき、ファイルが開けないときにはエラーを出力する。 5 データが1000行以上あれば、警告メッセージを表示して最初の1000行分の データだけ与えられた動作を行う [3] 環境 [3.1] Linux [3.2] イーマックス [3.3] C [4] 2005年6月30日まで どなたか、お願いいたします。
>[3.2] イーマックス (;`Д´)・・・・・
351 :
257 :2005/06/28(火) 17:43:22
昨日より、ものすごく長くかかってしまいましたが、何とかcsvファイルの読み込みができました。 多くの方々の手助けをいただき、ご迷惑をおかけしましたが本当にありがとうごさいました。
イーマックス 新鮮だ つい私も書きたい衝動に駆られる イーマックス 満足した
イィーマッックスゥゥ
354 :
デフォルトの名無しさん :2005/06/28(火) 18:47:00
[1] 授業単元: [2] 配列の内容を値の小さい順に並び替える。 [3] 環境 [3.1] Linux [3.2] gcc [3.3] C [4] 2005年6月30日まで
>>349 イーマックスに萌えたんでヒント(可読性は無視)
static int intcmp(const int *s, const int *t) { return *s - *t; }
int main(int argc, char *argv[])
{ FILE *fp = NULL;
int ary[ARRAY_MAX], i, sts, max;
char buf[BUFSIZ];
if(argc != 3) { fprintf(stderr, "使用法:%s infile outfile\n", argv[0]); goto Error; }
fp = fopen(argv[1], "r"); if(fp == NULL) { perror(argv[0]); goto Error; }
for(i = 0; i < sizeof ary && fgets(buf, sizeof buf, fp) != NULL; i++) ary[i] = atoi(buf);
max = i;
sts = fclose(fp), fp = NULL; if(sts != 0) { perror(argv[0]); goto Error; }
if(max >= sizeof ary) fprintf(stderr, "%s:警告:データが1000行以上あります", argv[0]);
qsort(ary, max, sizeof *ary, intcmp);
fp = fopen(argv[2], "w"); if(fp == NULL) { perror(argv[0]); goto Error; }
for(i = 0; i < max; i++) fprintf(fp, "%d\n", ary[i]);
sts = fclose(fp), fp = NULL; if(sts != 0) { perror(argv[0]); goto Error; }
return EXIT_SUCCESS;
Error: if(fp != NULL) fclose(fp), fp = NULL;
return EXIT_FAILURE; }
宿題なんですが...。 整数の2次元配列の計算2 例のように、2次元配列の縦横をrand関数を使用し、 2桁までの整数配列を作りなさい。 出力例: [0] [1] [2] 横計 [0] ? ? ? ? [1] ? ? ? ? [2] ? ? ? ? [3] ? ? ? ? 縦計 ? ? ? ? お願いしますです。。。。。。。。。。。。。。。。
358 :
デフォルトの名無しさん :2005/06/28(火) 20:22:35
テ ン プ レ ー ト
359 :
357 :2005/06/28(火) 20:26:21
>>358 テンプレートとは何ですか?
関数の名前でしょうか?
さっそく調べて見ます。ありがとうございました
360 :
デフォルトの名無しさん :2005/06/28(火) 20:28:26
ワロタ 357頑張れよ先は長いぞ
ネタにしても酷いな 笑ったから良いけど
362 :
デフォルトの名無しさん :2005/06/28(火) 20:35:32
CString Abc = "CAT = '" + dog + "'"; これの意味なんですか? なんか点が多くて意味が分かりません。
>>362 多分、意味を説明するのに点を使わないわけにいかないので、
説明してもらっても多分意味がわからないと思う。
365 :
デフォルトの名無しさん :2005/06/28(火) 20:40:54
いきなりすいません。<COLOR>のタグで文字の色かえられるじゃないすか?!それでグラデーションのカラーのナンバー教えて下さい。
367 :
デフォルトの名無しさん :2005/06/28(火) 20:49:23
あと、もう@個お願いしますm(__)mグラデカラーのナンバー教えて下さい。
<COLOR>のタグってあったっけ?HTML3.2 にも HTML 4.01transitional にも ないんだけど……
371 :
デフォルトの名無しさん :2005/06/28(火) 21:31:03
[1] 授業単元: [2] sin65゚とsin64.8゚をラグランジュ補間法で求める [3] 環境 [3.1] Linux [3.2] gcc [3.3] C [4] 期限:金曜日 [5] 次のデータを使う:引数 関数値 0 0.0 15 0.25882 30 0.50 45 0.70711 60 0.86603 75 0.96593 90 1.0
>>371 データファイルの内容は?
例えばsin0〜sin90まで(角度は15°とばしのとか)のデータがいるでしょ。
373 :
371 :2005/06/28(火) 22:00:18
もういいです。
>>371 #include <stdio.h>
double mysin(double x) {
return -9.02403152203135e-15 + x * (0.017454900000000606 + x * (-2.2098765424951852e-7 + x * (-8.746296296286118e-7 + x * (-2.9492455418896675e-10 + (1.7613168724302022e-11-3.0483158055678805e-14 * x) * x))));
}
int main(void) {
printf("sin65°=%f\nsin64.8°=%f", mysin(65), mysin(64.8));
}
多分
>>257 の最終的な課題はcsvファイルを読むことではないだろうし、
また来るんだろうな
>>375 そんなのプログラムじゃなくて電卓の計算と同じじゃないか
>>377 ハイハイ。せっかくのネタ振りを。
#include <stdio.h>
double lagrange_interpolation(double* data, unsigned int n, double x) {
int i, j;
double result = 0., temp;
for (i = 0; i < n; ++i) {
temp = 1.0;
for (j = 0; j < n; ++j)
temp *= (i == j ? 1 : (x - j) / (i - j));
result += data[i] * temp;
}
return result;
}
int main(void) {
double data[] = {0.0, 0.25882, 0.50, 0.70711, 0.86603, 0.96593, 1.0};
const unsigned int n = sizeof(data) / sizeof(data[0]);
printf("sin65°=%f\nsin64.8°=%f\n\n", lagrange_interpolation(data, n, 65 / 15.), lagrange_interpolation(data, n, 64.8 / 15.));
}
379 :
デフォルトの名無しさん :2005/06/28(火) 23:42:47
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): (3n+1)問題。n22とする。 ・nが偶数なら2で割る ・nが奇数なら(3n+1)とする この操作をn22の整数に対して繰り返し行うことのできるプログラムを書け。 上の操作の部分の関数結果の数を次々と出力する関数に分けて書く。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 2005 06 30 木曜日 [5] その他の制限: よろしくお願いします
[1] 授業単元:プログラミング基礎 [2] 問題文(含コード&リンク): 整数n(1≦n≦5)と2つのn次正方行列A,Bを読み込み、 A×Bを求めるプログラムを作成せよ。ただし、行列の要素は すべて整数型としてよい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 2005 07 01 金曜日 お願いします.
>>379 不満があればどうぞ
#include <stdio.h>
int modify(int n) {
return n & 1 ? 3 * n + 1 : n >> 1;
}
void print_n(int n) {
printf("%d\n", n);
}
int main(void) {
int n22 = 23;
print_n(n22);
while (n22 != 1) {
n22 = modify(n22);
print_n(n22);
}
return 0;
}
>>380 行列のデータはどこからどのようにして読み込む?
書式は?
[1] 授業単元:プログラミング言語 [2] 問題文(含コード&リンク): 現在ファイル(tensuu.txt)に任意の数の数値が入っている。そのファイルを呼び出し、データの最大、最少、平均値、標準偏差値を取り出す プログラムを関数へのポインター変数の受け渡しを利用して作成せよ [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:6月30日まで よろしくお願いします
>>383 tensuu.txtの書式は?数(改行)数字(改行)…?
385 :
デフォルトの名無しさん :2005/06/29(水) 01:35:01
[1]プログラミング演習 「2」標準入力から正の正整数を読み込み0が入力されたらそれらの整数を小さい順に表示するプログラムを作れ。 「3」1OS:Linux 2コンパイラ(バージョン):gcc 3言語:C [4]明日まで
>>386 123
456
789
…
と続くの?
>>383 #ヒント
BEGIN {
min = 1e300;
max = -1e300;
sum = 0;
s2 = 0;
}
{
sum += $1;
s2 += $1 * $1;
if ($1 < min) {
min = $1;
}
if ($1 > max) {
max = $1;
}
}
END {
printf("max:%g, min:%g, ave:%g, dev:%g\n", max, min,
sum / NR, sqrt((s2 - sum * sum / NR) / (NR - 1)));
}
[1]授業単元:プログラミング言語 [2]問題文:行列A(L行M列)と行列B(M行N列)の積C(L行N列)を求めるプログラムを作りなさい。 [3]環境 [3.1]OS:Linux [3.2]コンパイラ(バージョン):gcc [3.3]言語:C [4]7月1日
>>390 標準偏差といわれてもnで割るのかn-1で割るのか…とりあえず前者。
#include <stdio.h>
#include <float.h>
#include <math.h>
int main(void) {
int n = 0;
double x, min = DBL_MAX, max = DBL_MIN, mean = 0., mean2 = 0.;
FILE* fp = fopen("tensuu.txt", "r");
while (fscanf(fp, "%lf", &x) != EOF) { /* 一応ポインタの受け渡し */
++n;
if (x < min) min = x;
if (max < x) max = x;
mean += x;
mean2 += x * x;
}
fclose(fp);
mean /= n;
mean2 /= n;
printf("最大:%f\n最小:%f\n平均値:%f\n標準偏差:%f\n", max, min, mean, sqrt(mean2 - mean * mean));
return 0;
}
nで割る、でOKです。言葉足らずですいません。
>>388 >>391 夜遅くにありがとうございます。
393 :
デフォルトの名無しさん :2005/06/29(水) 02:28:03
>>389 多分、授業でL行M列行列の和なり差なりを求めるプログラムを習っていると思うので、
それを書いてください。
394 :
389 :2005/06/29(水) 02:38:54
396 :
389 :2005/06/29(水) 03:03:51
>>395 あ、データは標準入力からでL,M,Nと行列A,Bを入力します。
>>383 関数への「ポインター変数の受け渡し」 か
「関数へのポインター変数」の受け渡し かと思った
400 :
デフォルトの名無しさん :2005/06/29(水) 09:12:56
1] 授業単元: C言語 [2] 問題文(含コード&リンク): sin(x)の近似式 sin(x)=x-(x^3/3!)+(x^5/5!)-(x^7/7!)・・・・ の値と、数学関数sin(x)を使用したときの値を比較するプログラムを作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:今日の正午まで(すみません・・・) [5] その他の制限:なし どなたかお願いします。締め切り近くて本当にすみません・・・。
401 :
デフォルトの名無しさん :2005/06/29(水) 09:47:32
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): クラスN人の試験の点数を配列grade[ ]に格納し、総和、平均を求めよ。 さらに最高点、最低点を求められるようにせよ。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:6月30日まで [5] その他の制限: おねがいします
404 :
デフォルトの名無しさん :2005/06/29(水) 10:56:02
[1] 授業単元:プログラミング演習I [2] 問題文: 関数factを用いて大きさnのパスカルの三角形(もどき) を作成しなさい。パスカルの三角形は 2項係数を順次求めていった時に現れる。 1 1 1 2 1 1 3 3 1 1 4 6 4 1 という奴である。n 行目 r 列の成分は組みあわせの数 n C r によって与えられる。ただし nCr = n! / ((n-r)! r! ) である。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7/5まで [5] その他の制限:関数の扱いまで習いました。 どなたかご教授お願いします。
>>404 #include <stdio.h>
int fact( int n, int r )
{
int c, i, t;
if ( r < n - r ) t = n - r; else t = r;
for ( c = 1, i = t + 1; i <= n; i++ ) c *= i;
for ( i = 1; i <= n - t; i++ ) c /= i;
return c;
}
int main( void )
{
int n, r;
for ( n = 1; n <= 16; n++ ) {
for ( r = 0; r <= n; r++ ) {
printf( "%d ", fact( n, r ) );
}
printf( "\n" );
}
return 0;
}
408 :
325 :2005/06/29(水) 11:31:26
すみません遅くなりました、
>>332 ,333様、無事コンパイルでき、ちゃんとソートもできました
本当に助かりました、どうもありがとうですm(_ _)m
410 :
404 :2005/06/29(水) 11:52:07
>>406 すごい、完璧ですね。
ありがとうございます。おかげで助かりました。
411 :
デフォルトの名無しさん :2005/06/29(水) 11:54:46
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ユークリッドの互除法で最大公約数を求める場合の再帰的関数呼び出しによる プログラムを書け。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7/1まで [5] その他の制限: 宜しくお願いします。
412 :
デフォルトの名無しさん :2005/06/29(水) 12:03:42
[1] 授業単元:プログラミング [2] 問題文: キーボードから0以上100未満の整数を複数読み込み,0〜9,10〜19,20〜29, ・・・,90〜99の範囲の整数がそれぞれ何個ずつあるか数えるプログラムを 作成する。負数が入力された時点で入力の終了とする。 カウンタを配列で定義して(int counter[10])作ってください。 [3] 環境 [3.1] OS:Windouws xp [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7/3まで よろしくお願いします。
413 :
397 :2005/06/29(水) 12:20:53
>>407 早速の解答、ありがとうございますっ!
実行してみたところ、一文字の割合だけ出力されました。
3文字を1文字へ変換出力するプログラムは自力でやれ、ってことでしょうか。。。
(問題文の文脈からちゃんと伝わっていなかったのでしたらこちらの不手際ですm(_ _)m)
もしよろしければ、3文字→1文字への変換出力も教えていただきたいです・・・
>>413 そゆこと。
データファイルの形式が意味不明だからね。
415 :
397 :2005/06/29(水) 13:22:25
>>414 なるほど。
データファイルの形式が意味不明、ですか。。
ありがとうございましたっ。ちょっと頑張ってみます。
416 :
デフォルトの名無しさん :2005/06/29(水) 13:28:14
[1] 授業単元:プログラミング演習I [2] 問題文: ・整数n,mを引数にとり、返り値としてnとmの最大公約数をかえす関数 int gcd(int n, int m) を作成しなさい。 ・次に関数 gcd() を利用して整数n,mを引数として与えたときに、 返り値としてnとmの最小公倍数を返り値として返す関数 int lcm(int n,int m) を作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7/5まで [5] その他の制限:関数の扱いまで習いました。 自分で作ろうとしてもどうしても上手くいかないので、 どなたかご教授お願いします。
>>410 >406はちっとも完璧ではない。関数名が悪すぎる。
関数fact()はnCrを求めているじゃないか。
>>416 ヒント:ユーグリットの互除法
int gcd(int m,int n)
{
int r;
do {
r = m % n;
m = n;
n = r;
}while(r!=0);
return m;
}
最小公倍数ぐらいは最小公倍数がわかればできるだろう
>>416 int gcd(int n,int m){int r;if(n<0)n*=-1;if(m<0)m*=-1;while(n){r=n%m;n=m;m=r;}return n;}
int lcm(int n,int m){int l,s,i;if(n<0)n*=-1;if(m<0)m*=-1;l=(n>m?n:m);s=(n<=m?n:m);for(i=1;i<l;i++)if(s*i%l==0)return s*i;return n*m;}
420 :
410 :2005/06/29(水) 13:54:05
>>417 そうですね。完璧という言葉は語弊がありました。
言い忘れてましたが、三角形の表示が難しかったら、
1 1
1 2 1
1 3 3 1
1 4 6 4 1
という表示の仕方でもいいとのことだったので、
406のプログラムでコンパイルしたらちゃんと上のように表示されたので、
いいのかと思ってましたが、何か問題あるんですかねぇ?
プログラムの勉強してるやつに、そのもの自体が難しいことを作らせる先生もどうかと思うね。 コード自体は簡単になるわけだが。
422 :
デフォルトの名無しさん :2005/06/29(水) 13:56:57
[1] 授業単元:プログラミング特別演習 [2] 問題文: 実数値をキーボードから入力し、小数点以下を四捨五入した値を表示する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C ++ [4] 期限:本日22:00まで [5] その他の制限:特に無し どなたかご教授お願いします。
423 :
406 :2005/06/29(水) 14:14:32
>>410 factって階乗(factorial)って意味だったのね。今知ったよ。
ということで修正。
#include <stdio.h>
int fact( int n )
{
int d, i;
for ( d = 1, i = 2; i <= n; i++ ) d *= i;
return d;
}
int ncr( int n, int r )
{
return ( fact( n ) / fact( n - r ) / fact( r ) );
}
int main( void )
{
int i, j;
for ( i = 1; i <= 12; i++ ) {
for ( j = 0; j <= i; j++ ) {
printf( "%d ", ncr( i, j ) );
}
printf( "\n" );
}
return 0;
}
三角形にするのはできなくないけど、自分でやってみてね。
#include <iostream> #include <iomanip> int main() { double x; std::cin >> x; std::cout << std::fixed << std::setprecision( 0 ) << x << std::endl; return 0; }
426 :
417 :2005/06/29(水) 14:18:29
>>420 質問の意図がわからない。
>404のような綺麗な三角形にするにはどうすればいいかってこと?
それなら、各段に左側の空白を補えばいいのだが。
#ヒント:最終段は0、その上の段は1、以下同様に。
427 :
デフォルトの名無しさん :2005/06/29(水) 14:21:29
>>425 ありがとうございます。助かりました!!
[1] 授業単元:情報数学演習 [2] 問題文:ファイルからデータを配列に読み込んでおき、キーボードから単語が入力されたとき、それに最も近い単語を配列の中から探して出力するプログラム [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C ++ [4] 期限:7月4日まで [5] その他の制限:特に無し どなたかご教授お願いします。
429 :
デフォルトの名無しさん :2005/06/29(水) 14:26:36
誰かといてけれー↓ [1]アルゴリズム演習 [3]visualstudio2003 c++ [4]できるだけ早くお願いいたします。 [2] 1から100までの乱数を用いて1000個のデータを生成して 配列に格納する。その後、1個数字を入力させ、その数字が生成 されたデータ内にあるかどうかを確認せよ。データがあった場合 は、何番目にあったかを表示し、無かった場合はそのことを表示 する。
430 :
410 :2005/06/29(水) 14:34:08
>>423 ご丁寧に修正までしていただいてありがとうございます。
助かりました
>>426 意味不明な文章ですいません。そういうことです。
ヒントありがとうございます。頑張って作ってみます。
>>429 #include <iostream>
int main()
{
using namespace std;
srand( time( 0 ) );
int arr[ 1000 ];
for ( int i = 0; i < 1000; i ++ )
arr[ i ] = rand() % 100 + 1;
int input;
cout << "数字をいれやがれ: ";
cin >> input;
bool found = false;
for ( int i = 0; i < 1000; i ++ )
if ( arr[ i ] == input )
{
cout << i << "番目にありますが何か?" << endl;
found = true;
break;
}
if ( ! found )
cout << "残念。" << endl;
return 0;
}
// BCCだと#include <iostream>だけでいけたが、足りなかったら適宜includeしてくれ。
432 :
デフォルトの名無しさん :2005/06/29(水) 14:48:40
>>431 すばやい回答ありがとうございました。
ビルドをかけると6行目に引数依存の照合をしてもみつかりせんと出ます。
なぜでしょう??
433 :
デフォルトの名無しさん :2005/06/29(水) 14:55:27
すいません間違えました5行目でした。 timeの行です。
>>432 だったorz。
つーか、breakあると最初のやつしか表示されないけどいいのだろうか。
436 :
278 :2005/06/29(水) 14:57:45
すいません、278ですがどなたかお願いできないでしょうか? 期日が迫っています。だれか助けてください。
>>248 ・ファイルの形式?特殊ならデータが格納されているフォーマットを
例示してくれなきゃ駄目じゃん。
・データの配列って型は?(cha*の配列の予感)
・最も近いって辞書的に近いってこと?近い遠いを定義してみて。
>>436 テンプレ嫁。
あと3X3の行列のデータを読めってことか?
それとも任意の行列のデータをめってことか?
438 :
デフォルトの名無しさん :2005/06/29(水) 15:04:40
>>435 できましたーーー!!!どうもありがとうございました。 題意からbreakはきしておきます。 ただ高度すぎて先生にばれそうw
マルチなんてするからだ
440 :
437 :2005/06/29(水) 15:05:27
441 :
デフォルトの名無しさん :2005/06/29(水) 15:06:11
[1]授業単元:プログラミング演習 [2]問題文:表計算プログラム。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる。 [3]環境 [3.1]OS:Windows [3.2]コンパイラ(バージョン) [3.3]言語:C [4]期限:7月1日(金) [5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。 ・式入力では、多項間の四則演算および累乗、多重括弧に対応(逆ポーランド記法はなし)。 ・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。
442 :
宿題お願いします :2005/06/29(水) 15:19:54
(Nは自然数) 2n乗≡2(mod n) {問題}2n乗ー2がnで割り切れるかどうかチェックします。 これが成り立つ時、素数表を参照して、 素数で無いものを選び出すプログラムです。C++です宜しくお願いします。
>>428 データが「和食 中華 フレンチ」とかで、キーボードから「コロッケパン」を
入力すると「フレンチ」を出力するようなプログラムを作るってこと?
# 「ヤキソバパン」だと「和食」と「中華」どっちになるのかな?
わかる人だけで結構ですから、早目におねがいします。
448 :
デフォルトの名無しさん :2005/06/29(水) 16:19:08
死ねば♥
>>448 なんですか?あなたは。
わからない人はけっこうですと言ってるだけですよ?
何なのコイツ。回答を得たいのではないのか? 素行が気に入らないから、皆答えなくて良い。
452 :
442 :2005/06/29(水) 16:41:29
自己解決しました。どうもありがとうございました。
わからないなら黙ってればいいのに、なぜジャマをするんですか?
455 :
442 :2005/06/29(水) 16:47:53
452は私ではありません。早くお願いします。
別に誰が誰でもいいけど、
>>442 やる奴もういないっしょ
もし
>>442 以外の書き込みが全て本人以外だったとしたら不運だったな。
ま、テンプレ読んでない時点でスルーされても文句言えないが。
>>444 ># 「ヤキソバパン」だと「和食」と「中華」どっちになるのかな?
何故そう言う発想になるのだろう。
「パン」の段階で和食でも中華でもない気がするのだが。
#つーか、「洋食」じゃなくて「フレンチ」かい。
回答を得るのに必死wwww
このスレもネタスレへと模様替えしたようですw
この頃事後報告無し、同じ問題多しで厨が増えたよな
461 :
宿題お願いします :2005/06/29(水) 17:04:34
442です。書き込み初なので、不快な思いをさせた事申し訳ありません。 2のn乗です。2n乗ー2がnで割り切れるかどうかチェックするプログラムです。 お願いできませんか?
>>457 問題文 428 を読んでないな。「分類する」んじゃなくて、「近い」単語を表示するんだ。
>>442 この際トリップ付けて1のフォーマットに沿った質問をした方が回答得やすいかもよ。
あとunsigned int(4byte),の範囲だと30のケースを判定して終わりだよね。
>>428 距離空間を定義すればいいのかな。
文字列s1, s2の距離は
sqrt((s1[0] - s2[0])^2 + (s1[1] - s2[1]^2 + ..... (s1[N] - s2[N])^2)
とする。
ただしN = max(strlen(s1)-1, strlen(s2)-1)
strlen(s2) == Mのとき、
s2[M] ... s2[N]の値は0とする
みたいな感じで。
>>463 2^2 から 2^31 までチェックしたところそのようなものは一つもなかったから、
プログラムは次のようになるのかな?
#include <iostream>
int main(void){
std::cout << "31 以下の整数でそのような条件を満たすものはありません"
<< std::endl;
}
466 :
宿題お願いします :2005/06/29(水) 17:30:00
463さん指摘ありがとうです。何回も書いてごめんなさい。 [1] 授業単元: プログラム演習 [2] 問題文(含コード&リンク): 2のn乗ー2の答えがnで割り切れるかどうかチェックするプログラム [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Microsoft Visual c++というものです。 [3.3] 言語:C++ [4] 期限:2005年6月30日09:00まで [5] その他の制限:C++に関しての知識はほとんどありません。本を読んでもいまいち理解できないので お願いしました。無理言ってすいません。
#include <stdio.h> int main(void) { unsigned int num = 4,i; for(i=2;i<32;i++,num <<= 1){ const unsigned int check = num - 2; if(check % i) continue; printf("%dは割り切れたぞ\n",i); } return 0; }
>>466 n=2の場合、2^2-2=2 は 2 で割り切れる
n=3の場合、2^3-2=6 は 3 で割り切れる
n=5の場合、2^5-2=30 は 5 で割り切れる
n=7の場合、2^7-2=126 は 7 で割り切れる
n=11の場合、2^11-2=2046 は 11 で割り切れる
n=13の場合、2^13-2=8190 は 13 で割り切れる
n=17の場合、2^17-2=131070 は 17 で割り切れる
不思議と n は素数ばかり並ぶな。
これって数学的に何か秘密があるんじゃないの?
数学得意な人、解説キボンヌ。
メルセンヌ素数でググれ 2^n-2 = 2(2^(n-1) - 1)
470 :
宿題お願いします :2005/06/29(水) 17:56:08
みなさんありがとうございます。466さん467さんどうもです。
あーあ
>>467 なんで勝手にn<=31って制限つけてんだよ。せめて 2^15 まで対応させろよ。
メルセンヌツイスター てなんかカコイイ
[1] 授業単元:プログラミング [2] 問題文:三角形の3頂点(x1,y1),(x2,y2),(x3,y3)を読み込んで3つの角度θ1,θ2,θ3,をdeg単位(°)で計算して印字するプログラムを作成せよ。 また、実数型変数θ1,θ2,θ3へのポインタ変数と、変数方変数x1,y1,x2,y2,x3,y3を引数とする関数を作成しmain関数では同関数として呼び出すようにする。 各変数をポインタを介して関数で使用する。各角度は余弦定理 a^2=b^2+c^2-2bc*cos(A)をする。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):cc [3.3] 言語:C [4] 期限:なるべく早めで みなさん、お願いします。
>>477 #include <math.h>
#define sqr(x) ((x)*(x))
#define sqr_edge_len(x1,y1,x2,y2) (sqr((x1)-(x2))+sqr((y1)-(y2)))
#ifndef M_PI
#define M_PI 3.1415926536
#endif
int calc_angles( double *p_theta1, double *p_theta2, double *p_theta3,
double x1, double y1, double x2, double y2, double x3, double y3 )
{
double sqr_a = sqr_edge_len(x1, y1, x2, y2);
double sqr_b = sqr_edge_len(x2, y2, x3, y3);
double sqr_c = sqr_edge_len(x3, y3, x1, y1);
if( sqr_a * sqr_b * sqr_c == 0 ) return -1;
*p_theta1 = 180.0 * acos( (sqr_b + sqr_c - sqr_a) / (2 * sqrt( sqr_b * sqr_c )) ) / M_PI;
*p_theta2 = 180.0 * acos( (sqr_c + sqr_a - sqr_b) / (2 * sqrt( sqr_c * sqr_a )) ) / M_PI;
*p_theta3 = 180.0 * acos( (sqr_a + sqr_b - sqr_c) / (2 * sqrt( sqr_a * sqr_b )) ) / M_PI;
return 0;
}
>>475 #include <stdio.h>
#include <string.h>
int main() {
for (int n = 2; n < 32768; n++) {
unsigned b[1024];
memset(b, 0, sizeof b);
b[n / 32] |= 1 << n % 32;
int i = 0, j = 0;
bool f = b[0] < 2;
b[0] -= 2;
if (f) do {f = !b[++i]; b[i]--;} while (f);
for (i = n / 32; i >= 0; j = unsigned(((_int64(j) << 32) + b[i--]) % n));
if (!j) printf("%d\n", n);
}
return 0;
}
481 :
デフォルトの名無しさん :2005/06/29(水) 22:47:17
[1]授業単元:プログラミング演習 [2]問題文:表計算プログラム。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる、というもの。 [3]環境 [3.1]OS:Windows [3.2]コンパイラ(バージョン) [3.3]言語:C [4]期限:7月1日(金) できれば早めにお願いします [5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。 ・式入力では、多項間の四則演算および累乗、多重括弧に対応(逆ポーランド記法はなし)。 ・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。 というものです。できた部分部分でもUPしていただけたら幸いです。
482 :
477 :2005/06/29(水) 22:47:45
[1] 授業単元:ポインタ [2] 問題文(含コード&リンク): 幾つかの数値が入ったファイルを呼び出して、 データの最大値・最小値・平均値・標準偏差値を取り出すプログラムを 関数へのポインタ変数の受け渡し(アドレス渡し?)を利用して作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005年6月30日 [5] その他の制限:ポインタのあたりまで習ってます。
484 :
483 :2005/06/29(水) 23:04:09
↓ちなみに、ポインタを利用しないでなら一応作れました。 #include <stdio.h> #include <math.h> main() { int x[100],y=0,n=0,i=0; int max=0,min=100; double sum=0,ave,var,sd; FILE *fp; fp=fopen("seiseki.txt","r"); while (fscanf(fp,"%d",&x[i]) != EOF) { y+=x[i]; max=(max>x[i])?max:x[i]; min=(min<x[i])?min:x[i]; n++; i++; } fclose(fp);
485 :
483 :2005/06/29(水) 23:04:31
↑の続き ave=y/n; for(i=0;i<n;i++) { sum=sum+(x[i]-ave)*(x[i]-ave); } var=sum/n; sd= sqrt(var); printf("最大値 = %d\n",max); printf("最小値 = %d\n",min); printf("平均値 = %f\n",ave); printf("標準偏差値 = %f\n",sd); return 0; }
[1] 授業単元:プログラミング [2] 問題文 0度から360度まで1度刻みの角度に対する三角関数(sin, cos, tan)を計算 し、画面に表示するプログラムをかけ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7/1まで [5] その他の制限: 角度からradへの変換を行う関数を作成、使用すること お願いします
>>487 数学的事情により、90度の倍数ではtanがおかしくなる。
#include <stdio.h>
#include <math.h>
#define PI 3.1415926535897932384626433832795
double degree(double x){return x / 180 * PI;}
int main(void) {
int i;
for (i = 0; i <= 360; i++)
printf("sin%3ddegree=%1.5f\tcos%3ddegree=%1.5f\ttan%3ddegree=%1.5f\n", i, sin(degree(i)), i, cos(degree(i)), i, tan(degree(i)));
return 0;
}
>>488 どうも。
角度をラジアンに変換する式がわかんないんですが・・・
>>489 高校数学だね
radian = (degree / 180) * pi
[1] 授業単元:プログラミング技術 [2] 問題文:n個の文字を読み込んだ後、文字をアルファベット順に並び替えるプログラムを作成しなさい。 1、n個の文字を読み込む 2、文字をアルファベット順に並び替える 3、表示する 以上3つの手続きを関数として作成しmain関数でこれらの関数を呼び出すようにする。 アルファベット順は大文字と小文字がある場合は小文字を先に出す。 例 BasC ⇒aBCs [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):cc [3.3] 言語:C言語 [4] 期限:早ければ早いほどいいです
期限くらい書けよ
>>494 nはどこで決める?ソース中?入力させる?
>>494 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void) {
unsigned int n;
int i, j, len;
char* str, temp;
printf("n?:"); scanf("%u", &n);
getchar();
str = (char*)malloc(n + 2);
fgets(str, n + 2, stdin);
str[len = strlen(str) - 1] = '\0';
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (tolower(str[j]) == str[j + 1] || tolower(str[j + 1]) < tolower(str[j]))
{
temp = str[j];
str[j] =str[j + 1];
str[j + 1] = temp;
}
printf(str);
free(str);
}
>>494 2のみ
#include <stdio.h>
#include <stdlib.h>
#define tolower(c) (('A'<=(c) && (c)<='Z') ? ((c)-'A'+'a') : (c))
int cmp_alph(const unsigned char *c1, const unsigned char *c2)
{
if(tolower(*c1) != tolower(*c2)) return(tolower(*c1) - tolower(*c2));
else return((*c2) - (*c1));
}
int main( void )
{
unsigned char string[] = "awerAlcA";
printf("%s\n", string);
qsort( string, sizeof( string ) - 1, sizeof( unsigned char ), (int(*)(const void *, const void *))cmp_alph);
printf("%s\n", string);
return 0;
}
>>494 #include <stdio.h>
#include <string.h>
int read_nchars(char *chars, int n) {
return fgets(chars, n, stdin) ? strlen(chars): 0;
}
char *sort(char *chars, int n) {
int count[256], i;
const char *p;
memset(count, 0, sizeof count);
for (i = 0; i < n; i++) count[chars[i] & 255]++;
for (p = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ", n = 0; *p; p++)
for (i = 0; i < count[*p]; i++) chars[n++] = *p;
chars[n] = 0;
return chars;
}
void display(const char *chars) {
printf("%s\n", chars);
}
int main() {
char chars[256];
display(sort(chars, read_nchars(chars, sizeof chars)));
return 0;
}
502 :
デフォルトの名無しさん :2005/06/29(水) 23:59:33
プログラムの宿題をお金払いますから、やってくれる人いますでしょうか? 自分は物理学科なんですけど、正直プログラムやってるだけの余裕はありません。 二次元配列の簡単な問題を3つやってもらえたら、6000円を銀行振り込みします。 やってくれる人いますでしょうか。
>>502 それはまずここに問題を書いてからだ。タダでやってくれる物好きが
いるかも知れん。
>>502 たった6000?
一二時間でできないと割に合わないな
[2] 問題文(含コード&リンク):
http://para-site.net/up/data/3042.jpg [3] 環境
[3.1] OS:linux
[3.2] コンパイラ(バージョン): gcc
[3.3] 言語:C
[4] 期限:7月4日
[5] その他の制限:初歩的な配列まで
一万円にします。どうでしょうか。
ファイルから読み込ませるというのがやっかいな予感です。
担当教官に聞いたところ、できなければ無視してもよいと言われました。
ただその場合は、学生数、学生の番号と名前、それぞれの科目の点数を、
プログラムの中で指定しなければならない(5人ほど書く)ので、
できの悪いプログラムだと言われましが、一応問題はないみたいです。
できる方で御願いします。
あと追加ですが、もしやって下さる人がいれば、明日の7時にプログラムをこのスレに書いて下さい。 動作の確認は学校でなければできないので、7時に私がプログラムを学校のPCに打ち込みます。 動作を確認しだい、メールアドレスを載せますので、お金のやり取りはそっちでしましょう。
一応トリップ付けます。
508 :
デフォルトの名無しさん :2005/06/30(木) 00:39:03
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 級数 a(1)=1, a(n)=a(n-1)+n (nは2以上) の値を n=20 まで、1行に5個ずつ出力する プログラムを作成しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月01日まで [5] その他の制限: continue まで習っています。 この問題は去年の期末試験だそうです。 よろしくお願いします。
〜まで習ってますといわれても、何を基準に〜までなんだ?
>>502 その問題、過去にあったような気がするよ。
>>508 #include <stdio.h>
int recursiveFunc(int n)
{
if (n == 1)return 1;
return recursiveFunc(n - 1) + n;
}
int main(void)
{
int i;
for (i = 1; i < 20; i++) {
printf("%4d%c", recursiveFunc(i), " \n"[((i%5) == 0)]);
}
return 0;
}
511 :
510 :2005/06/30(木) 00:53:17
スマン、 誤:for (i = 1; i < 20; i++) { 正:for (i = 1; i <= 20; i++) {
512 :
デフォルトの名無しさん :2005/06/30(木) 00:54:13
>>508 #include<stdio.h>
int main(void)
{
int i,n,a[20];
a[0]=1;
for(i=0;i<20;i++){
if(i==0){
printf("a[%2d]=%3d ",i+1,a[i]);
}else{
a[i]=a[i-1]+i+1;
printf("a[%2d]=%3d ",i+1,a[i]);
}
if(i!=0&&(i+1)%5==0){
printf("\n");
}
}
return 0;
}
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 2つの整数値を書き込んだテキストファイルを作成するプログラム 書き出すファイル名をキーボードから指定でき、既に存在するファイル名であれば、追加書き込みするように。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年6月30日10:00まで [5] その他の制限:FILEまで習ってます
514 :
デフォルトの名無しさん :2005/06/30(木) 00:56:03
[1] 授業単元: アルゴリズムとデータ構造 [2] 問題文 フィボナッチ数列 Fn=F(n-1)+F(n-2) (n>=2) F(0)=F(1)=1 このとき (a)再帰的関数を用いた方法 (b)再帰的関数を用いない方法 この二通りでプログラミングを行いF(0)〜F(20)間での値を表示せよ また、どちらが実行時間が短いか、理論的に考察せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年07月04日17:00まで [5] その他の制限:なし お金もスキルもありませんが、だれか助けてください。
>>505 「任意の数のクラス」の学生?それとも任意の数の「クラスの学生」?
>>514 おま・・・>510と>512嫁よ。
ほとんど同じ問題だぞ。
>>505 この問題だったら、普通は構造体の配列になるはずだが、
それを2次元配列でやれってのは難しくね?
それに、標準偏差は科目別に求めるのに、偏差値は
合計点から求めるのか?
519 :
デフォルトの名無しさん :2005/06/30(木) 01:01:57
510と512が何なのかすでに分かりません。 プログラムは去年やったのですが、語学が昔から苦手で 好きになれませんでした。 でも先生がこの宿題やれっていうし、訳ありの編入学なんで友達もいません。 どうか助けてください。
救いようが無い。
521 :
デフォルトの名無しさん :2005/06/30(木) 01:05:04
ちなみに問題文が何いってるのかも分かりませんが何か?
522 :
デフォルトの名無しさん :2005/06/30(木) 01:26:15
[1] 授業単元: プログラミング言語 [2] 問題文(含コード&リンク): 英語辞書にあるスペルチェッカーを作成せよ [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:6月30日まで [5] お願いします
>>514 #include <stdio.h>
int fib_recursion(int n) {
return n > 1 ? fib_recursion(n - 1) + fib_recursion(n - 2) : 1;
}
int fib_no_recursion(int n) {
int old1 = 0, old2, result = 1;
while (n--) {
old2 = old1;
old1 = result;
result = old1 + old2;
}
return result;
}
int main(void) {
int i;
printf("(a)再帰的関数を用いた方法\n");
for (i = 0; i <= 20; i++) printf("F(%2d)=%5d\n", i, fib_recursion(i));
printf("(b)再帰的関数を用いない方法\n");
for (i = 0; i <= 20; i++) printf("F(%2d)=%5d\n", i, fib_no_recursion(i));
return 0;
}
【考察】実行時間は(b)が早い。
【理由】
1 (a)は関数の呼び出し回数が多い。関数の呼び出しにはそれなりの
時間がかかる。
2 (a)は何度も同じ計算をしている。
(2の例)
F(4)=F(3)+F(2)=(F(2)+F(1))+(F(1)+F(0))=((F(1)+F(0))+F(1))+(F(1)+F(0))
となっていて無駄が多い。
525 :
523 :2005/06/30(木) 01:29:12
#include<stdio.h> main() { char *moji[3] = {メbananaモ,モappleモ,モbikeモ}; char ji[10]; int I,a,b; printf(メ入力:モ); scanf(メ%sモ,ji); for(i=0;i<3;i++) { a=0; b=0; while(moji[i] !=`¥0`) { if(*moji[i]=ji[a]) { b++; } a++; moji[i]++; }
if(b==0) { printf(メ正解モ); break; } } } if(I==3) { printf(メスペル間違い¥nモ); } } これでエラーは出ないのですが、どう打ち込んでも正解になります。行き詰まりました。
再帰 //Fn=F(n-1)+F(n-2) (n>=2) //F(0)=F(1)=1 double F(int n){ return (n<2)?1:(F(n-1)+F(n-2)); }
問題文のところで、
- (問題文)
というのが5行ありますが、プログラムとして出すのは、
2行目、3行目、そして5行目(4行目のを使用)、です。
>>515 任意の数の「クラスの学生」、です。
クラスは1つで、学生の数は任意です。
>>518 構造体でやるのが普通とのことですが、
教官の話では、とにかく答えが出せればよいということでした。
二次元配列に拘らずとも、やりやすい方でよいとのことです。
そうです、科目別の偏差値(2行目問題)、三科目の合計の偏差値(5行目問題)を、
それぞれ求めます。
>>525 ,526
化けとるぞ
それと、題意が良くわからんが、「辞書ファイル」みたいなのがあって
(たとえば/usr/share/dict/wordsとか)、それ使ってスペルチェックしろって
ことじゃないのか?
>>524 神様ありがとうございました。
考察までつけて頂いて、
このスレの人達は伊達の極みですな。
>何度も同じ計算をしている double F(int n, double *dst){ if(n<2) return dst[0]=dst[1]=1; if(dst[n-2]==0) dst[n-2]=F(n-2,dst); if(dst[n-1]==0) dst[n-1]=F(n-1,dst); return dst[n]=dst[n-2]+dst[n-1]; } int main(void) { double dst[20+1]={0}; int n; for(n=0; n<=20; ++n) printf("F(%2d)=%.0lf\n", n ,F(n,dst)); return 0; }
532 :
デフォルトの名無しさん :2005/06/30(木) 02:10:16
>>441 表計算か…。俺も何年か前に出されたがさっぱりわからんくて諦めたやつだ。
俺もちょっと興味あるな。誰か教えてくれ。
>>529 一応辞書ファイルを作ってもやってみたのですが、結局上のような方法でやりました
実験的にとりあえず単語を3つだけにして
534 :
デフォルトの名無しさん :2005/06/30(木) 02:58:54
#513 #include <stdio.h> void FileMakes(char fname[]) { FILE *fp; fp = fopen(fname , "a+"); fprintf (fp, "%d %d\n", 1, 2); fclose(fp); } int main(int argc, char *argv[]) { if ( argc <= 1 ) { printf ( "USAGE : %s <filename>\n",argv[0]); } else { FileMakes(argv[1]); } return 0; }
>>532 来年の7/1だったら誰かが作っているかも試練。
まぁネタでしょ。
536 :
デフォルトの名無しさん :2005/06/30(木) 03:10:41
>>522 no newline at end of file
ってでて走りません
>>537 ちゃんとメッセージ出てるんだから、読んで修正しようよ。
【質問テンプレ】 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 対CPU型のオセロを作成 CPUに58手目からの残り3手を先読みさせ 最善手を導き出す関数を作る [3] 環境 [3.1] OS:WindowssXP [3.2] Borland C++: [3.3] 言語:C [4] 期限:7月3日PM:2:00まで [5] その他の制限: とりあえず対CPU型のオセロは完成しました。 しかし"先読みの関数"の作成がよくわかりません。 Cの勉強初めて1ヶ月足らずです。よろしくお願いします
>>539 関数の仕様がわからない。
ソース隠したいかも知れんが、引数くらい出してもいいと思うよ。
そうすればだれかやってくれるさ。多分。
>>539 Cの勉強始めて1ヶ月足らずの状態でそんな宿題出す奴いるのかよ?
何となくフリーのBCCで遊んでる趣味プログラマな希ガス。
それとも別の言語でアルゴリズムやってて、1ヶ月前にCに突入したのかな?
>>539 先読みって言ってもマス目が8x8だとすると58手目の時点では残りのマスは
3つしかないから、残り3手は6通りしかないし、全通り網羅すればいいんでないの。
543 :
デフォルトの名無しさん :2005/06/30(木) 07:04:30
[1]授業単元:プログラミング演習 [2]問題文:表計算プログラム。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる、というもの。 [3]環境 [3.1]OS:Windows [3.2]コンパイラ(バージョン) [3.3]言語:C [4]期限:7月1日(金) できれば早めにお願いします [5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。 ・式入力では、多項間の四則演算および累乗、多重括弧に対応(逆ポーランド記法はなし)。 ・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。 というものです。できた部分部分でもUPしていただけたら幸いです。
>>466 int test( n )
{
int nn , aa , x;
nn = n ;
aa = 2 ;
x = 1 ;
while( 0 < nn ){
if( ( nn & 1 ) == 0 ){
}else{
x = ( x * aa ) % n ;
};
aa = ( aa * aa ) % n ;
nn >>= 1 ;
};
return 2 == x ;
};
>>441 >>481 >>543 何度も同じの書くなって。
必死な思いでいるのもわかるけど、一回書き込んで誰も解いてくれなかったら、それはそれで仕方ない。
宿題ってのは本来自分でやるものだからな。
// このスレで宿題解いてる奴ってのは、たいていボランティア精神ではなく、
// 「自分が楽しいから」「自分の勉強になるから」「自分自身の小手試し」「暇つぶし」
// などの理由なだけなので甘えないように。
諦め切れなくても、全文書きうつすんじゃなくてせめて
「
>>441 ですけど、できた部分部分でもUPしていただけたら幸いです。」
の一言だけに留めておいてくれ。
これだけでも、動き出す奴は動き出す。
547 :
デフォルトの名無しさん :2005/06/30(木) 09:04:45
>>543 プログラマは統計的にギリギリになるまでやらない傾向が強い。
549 :
416 :2005/06/30(木) 09:24:12
[1] 授業単元: [2] 問題文(含コード&リンク): ポーカーのプログラム [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):VC [3.3] 言語:C++ [4] 期限:7月15日 [5] その他の制限:どこまで習っているか、インクリメントデクリメント演算子まで とりあえずカードを配って表示させるところまではできたのですが、 その先のカードを2回変えることができるようにする部分とカードの判定の部分がよくわかりません。 ヒントでも構いませんのでどうかよろしくお願いします。
551 :
デフォルトの名無しさん :2005/06/30(木) 10:05:03
>>550 インクリメントデクリメント演算子だけでよく
"カードを配って表示させるところまではできた"な
君ほどの素質があればきっと克服できるだろう。
Good Luck !
552 :
デフォルトの名無しさん :2005/06/30(木) 10:19:31
C++を使って、 ゲーム理論の2人ゼロSUMゲームのNash均衡を求めるプログラムを教えてください。 2*2の正方行列で均衡点を求めたいんですが、 (5,5)(0,8) (8,0)(2,2)の行列です。 均衡点は(2,2)です。パレート最適は(5,5)です。 お願いします!! アルゴリズムとしては 使用する変数の宣言 ↓ 利得行列をデータで与える。 ↓ p1_max[i],pi[j]を計算する p2_max[i],pj[i]を計算する ↓ Nash均衡の判定 ↓ i=pi[j] →No ↓Yes j=pj[i] →No ↓Yes (i,j)はNash均衡としPrintする。 です。お願いしまっす。
64bitポインタの32bitへの縮小ってできます?
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): ユークリッドの互除法で最大公約数を求める場合の再帰的関数呼び出しによる プログラムを書け。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7/1まで [5] その他の制限: これどなたかお願いします。
>>555 #include <stdio.h>
int gcd(int a, int b)
{
if(b == 0) return a;
return gcd(b, a % b);
}
int main(void)
{
int a, b;
printf("a=?"); scanf("%d", &a);
printf("b=?"); scanf("%d", &b);
printf("最大公約数GCD(%d,%d)=%d\n", a, b, gcd(a, b));
return 0;
}
557 :
デフォルトの名無しさん :2005/06/30(木) 13:17:09
誰か教えてください。(標準入力から改行で区切られた文字列 s1 と s2 を受け取り, 文字列 s2 の中の任意の文字に等しい文字を s1 から除去して, その結果を標準出力に出力するようなプログラムを書け。) よろしくお願いします。
こんにちは 質問ですが、 typedef struct { int a; std::vector<INFOTABLE> info; }INFO; typedef struct { std::vector<INFO> info; }INFOTABLE とヘッダーに定義すると、 INFOTABLEが定義されていません。と出ますが、 この場合、INFOTABLEはINFOの下に定義してるので、 このような記述でも、コンパイルできる方法を教えていただきたいです。 よろしくお願いします。 (classの場合、頭のところに、class info;としておけば解決できますが・・・。)
>>559 struct info;
単発質問はスレ違いなんで以後気をつけるように。
>>560 それは間違い。
struct INFOというものが定義されたことになる。
なので、以下の
typedef struct
{
int a;
std::vector<INFOTABLE> info;
}INFO;
でエラーになる。
struct stInfotable;
typedef struct
{
int a;
std::vector<stInfotable> info;
}INFO;
typedef struct stInfotable
{
std::vector<INFO> info;
}INFOTABLE;
>>559 このようにしては
563 :
デフォルトの名無しさん :2005/06/30(木) 15:39:13
char a[5]; char b[1]; a[0]=4,a[1]=8,a[2]=4,a[3]=0,a[4]=9; aの配列に入っているデータ5つを、並びを変えずにbの配列ひとつに入れるには どうしたらいいのでしょうか? b[1]=48409にしたい
564 :
デフォルトの名無しさん :2005/06/30(木) 15:40:01
[1] 授業単元: Aプログラミング [2] 問題文(含コード&リンク): N 人の人がいて,それらは番号 0, 1, 2, ..., N-1 で表されているとする。 この N 人の人間関係(知り合いかどうか)を表した配列 a[N][N] がある。 ただし,i 番目の人と j 番目の人とが知り合いであるとき a[i][j] == a[j][i] == 1 であり,知り合いでないとき a[i][j] == a[j][i] == 0 である。 このとき, x 番目の人から,知り合いの知り合いの知り合い..という 繋がりで, y 番目の人まで辿り着くには,最小で何回の知り合いという 関係が必要かを返す関数 int acquaintDistance(int a[N][N], int x, int y) を作れ。 なお,x 番目の人から y 番目の人に辿り着けない場合には, acquaintDistance は -1 を返すこととする。 ヒント:待ち行列を利用する。最初に x を待ち行列に入れ, 後は,「待ち行列から一つ dequeue して,その人の知り合いを 待ち行列に enqueue する」ということを繰り返す。 ただし,一度 enqueue した人は二度と enqueue しないようにし y を enqueue する時点あるいは enqueue する一がいなくなった時点で 終了する。x から各人までの知り合い距離を入れる配列も用意しておき 新しい人を enqueue する度に,その人までの距離をその配列に入れる。 [3] 環境 [3.1] OS:Vine LiNUX [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:6月30日 pm11:00までっす [5] 本当すいませんがお願いいたします。
565 :
デフォルトの名無しさん :2005/06/30(木) 15:44:17
[1] 授業単元:プログラミングC [2] 問題文: 線形リスト全体を削除する関数を作れ.(ノードに割り当てられたメモリを解放することを忘れないように) [3] 環境 [3.1] OS:Vine LiNUX [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C [4] 期限:6月31日ちょうど、深夜0時です [5] お願いいたします。
>>563 charだけいじっても無理
データのビット幅が確定しているのなら
構造体でビットフィールド使ってキツキツに詰めるしかない。
typedef struct NODE{ struct HOGE hoge; struct NODE* pNext; }stNode;//みたいな線形リストなら //先頭アドレスを放り込め。後は再帰的に開放してくれる。 void clearNode(stNode* lpSt){ if(lpSt->pNext){ clearNode(lpSt->pNext); lpSt->pNext = NULL; } free(lpSt); }
>>565 > [4] 期限:6月31日ちょうど、深夜0時です
?????
>>563 あなたのコンパイラでは char に入れられる値の範囲はいくつになりますか?
あと、a[5]='\0' が入っていると sscanf 一発で解決するかも知れません。
>>563 スレ違い。初心者質問スレへどうぞ。
>>566 何故そこでビットフィールド? bの型を間違えているとは思わない?
>>569 文字が入っているとは書いてないのにsscanf()?
>>564 その問題、このスレか前スレにあったぞ
さがしてみ。答えもあるはずだから。
>>559 C++なのにstructをtypedefしたがる人が多いのはなぜだろう。
struct INFOTABLE;
struct INFO {
int a;
std::vector<INFOTABLE> info;
};
struct INFOTABLE {
std::vector<INFO> info;
};
宿題スレなのに単発質問にマジ回答したがる人が多いのはなぜだろう。
574 :
569 :2005/06/30(木) 17:02:03
>>570 配列の各要素に '0' を足せばオッケーでしょう。
まあそういう風に解いて欲しそうではないかも知れませんが……
>>573 宿題を答えにこのスレに来たやつは基本的にひけらかしたいだけだから。
誰もこない…。もしかして、申し訳ないです、明日って今日のつもりだったんですが…。 日付が変わっているとは気付かなくて。 やってやるよゴルァという方どうでしょうか。動作確認してみます。 トリップ付けて下されば、メールで本人確認をして、明日にでも郵便(か銀行)振込します。
誰か釣られる勇者はいないのか?
制限がきつい
情報処理室が閉まるので、引き上げます。 俺は何をしているんだ…orz 明日は昼からレポート作成で情報処理室に篭りますので、よければ。
580 :
デフォルトの名無しさん :2005/06/30(木) 21:14:17
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 0〜9までの数字をランダムに3つ選び、選んだ数字を表示するプログラムを作りなさい。 ただし同じ数字が出ても良い。 [3] 環境 [3.1] OS:Windows [3.3] 言語:C [4] 期限:2005年07月02日午後まで [5] その他の制限:なし お願いします。
>>580 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i;
srand(time(NULL));
for( i = 0; i < 3; ++i)
printf("%d ", rand() % 10);
putchar('\n');
return EXIT_SUCCESS;
}
[1] 授業単元:プログラミング技術 [2] 問題文(含コード&リンク): 1.ベクトル型のクラスMyVectorを三次元に拡張せよ 2.三次元ベクトルのクラスに「/」演算子(ベクトルの実数商)と、 「^」演算子(ベクトルの外積)を追加せよ。三次元ベクトルA=(Ax,Ay,Az)と B=(Bx,By,Bz)の外積ベクトルは次のように定義される。 A*B=(Ay*Bz - AzBy, AzBx - AxBz, AxBy - AyBx) 3.A,Bの外積ベクトルをCにしたとき常に内積値A*C=B*C=0が成り立つことを、 様々な数値で確認せよ。 4.ベクトルクラスの同値比較演算「==」は、サンプルの実装では正しく働かない。 例えば、次のコード MyVector a(10.0,20.0,30.0),b(1.0,2.0,3.0); if(a == 10.0 * b){ cout << "Same!!\n"; }else{ cout << "Difference!!\n"; } は環境によっては「Difference!!」を出力する。なぜなら、浮動小数点演算は桁落ちと 呼ばれる計算誤差が発生するからである。そこで、ある実数aとbが等しいかどうか判定 する場合、十分小さな値ε(例えば、0.0000001)を用いて、|a-b|<εが成り立つことで 等しいと判断するのが一般的である。このことを利用して、「==」演算子を再定義せよ。 [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C++ [4] 期限:05年7月1日7時頃まで [5] その他の制限:
[1] 授業単元: [2] 問題文(含コード&リンク): 英文の入ったファイル(eibun.txt)を読み込んで、指定した文字列が 何回出てくるかカウントするプログラムを作成しなさい。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年6月30日まで [5] その他の制限: ファイルや検索する文字列は、ファイル実行時に指定します。 program eibun.txt for …みたいな感じです。 (プログラム内に*argv[]とかを使う)
586 :
584 :2005/06/30(木) 22:41:45
>>583 え、これがプログラムの答えですか?
一つに纏めれるんですね。明日確認してみます。
というかトリップ付けておられませんが、いいんでしょうか。
これって、テキストファイルをプログラムに読み込ませるやつですよね。
テキストの形式はどのように書けばよいのでしょうか?
やったことないん、ですが。一応↓
http://www.uploda.org/file/uporg137728.txt 絶対違うw
というか、最初から、クラスの人数、格科目の得点、名前、をプログラムの中で
指定しておく旨書いてくおいた方が無難だったですね…明らかに。
ファイル読み込ませるコマンドも分かりません氏。
3 1 田中 50 75 79 2 伊藤 83 43 58 3 佐藤 34 83 53
[1] 授業単元:数値計算 [2] 問題文(含コード&リンク): ビーラントの次数低下法を用いて次の行列式の固有値と固有ベクトルを求めよ。 @ 4 3 1 -1 2 3 6 1 -2 3 A=1 1 4 -3 1 -1 -2 -3 6 1 2 3 -1 1 4 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ(バージョン): gcc(Cygwinの最新のやつ) [3.3] 言語:C [4] 期限:明日朝9:00まで [5] その他の制限: ハードコーティングでいいのでお願いしますorz レポート@4つとか多すぎる(;´Д`) 非常にお願いしまんこ
>>586 普通、double / vector は定義しない。
a=(1.0e-8, 0, 0), b=(0, 0, 0) のときは a == b だが、
a=(0, 0, 0), b=(1.0e-8, 0, 0) のときは a != b となる。
>>587 そもそも宿題を提示した時点でファイルの書式を明示すべき。
593 :
デフォルトの名無しさん :2005/06/30(木) 23:50:43
>>585 #include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fp;
char eng[100], *p;
int count = 0;
if (2 != argc) {
printf("引数が多すぎます\n");
return 0;
}
fp = fopen("eibun.txt", "r");
if (NULL == fp) {
printf("ファイルオープンに失敗しました\n");
return 0;
}
for (;;) {
if (NULL == fgets(eng, 100, fp)) {
break;
}
}
for (p = eng; p = strstr(p, argv[1]); p += strlen(argv[1])) {
count++;
}
printf("%sはeibun.txtの中に%d個あります\n",argv[1], count);
fclose(fp);
}
適当につくったwたぶんまちがってるとこありそう!
595 :
591 :2005/06/30(木) 23:53:42
596 :
デフォルトの名無しさん :2005/06/30(木) 23:55:19
#include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { FILE *fp; char eng[100], *p; int count = 0; if (3 != argc) { printf("引数が多すぎます\n"); return 0; } fp = fopen(argv[1], "r"); if (NULL == fp) { printf("ファイルオープンに失敗しました\n"); return 0; } for (;;) { if (NULL == fgets(eng, 100, fp)) { break; } } for (p = eng; p = strstr(p, argv[2]); p += strlen(argv[2])) { count++; } printf("%sは%sの中に%d個あります\n",argv[2],argv[1], count); fclose(fp); } んじゃこうかな? 文字検索んとこが微妙かも
100文字以上の行があったばあいに、行またがりの文字列を 検索できないな。
>>591 それだと "ababc" から "abc" が探索できなくないか?
文字列S1中の任意の文字に等しい文字をS1から除去するような形のsqueeze (s1,s2)を書け。
601 :
デフォルトの名無しさん :2005/07/01(金) 00:18:10
>>600 こうやりゃいいのかw
俺の奴まじうんこだなww
602 :
584 :2005/07/01(金) 00:31:22
>>590 様
お答えいただきありがとうございます。
>a=(1.0e-8, 0, 0), b=(0, 0, 0) のときは a == b だが、
>a=(0, 0, 0), b=(1.0e-8, 0, 0) のときは a != b となる。
両方とも成り立たせるためにはどのようにすればよろしいのでしょうか・・・
>>602 問題文に答えが書いてあるじゃないか。
DBL_EPSILONでぐぐれ。
604 :
584 :2005/07/01(金) 01:19:39
>>603 様
できました!ありがとうございました!
>>589 アルゴリズムが提示されれば何とかなるかもしれませんね。
606 :
デフォルトの名無しさん :2005/07/01(金) 01:35:24
[1] 授業単元: ファイル処理 [2] 問題文(含コード&リンク):きーぼーどからファイルを読み込んで、そのファイルをオープンするプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Borland c [3.3] 言語:C [4] 期限:本日10時まで 宿題でいきなりつまずいてしまったのでよろしくお願いします。 fopenを使うのでしょうか?
>>606 #include <stdio.h>
#include <string.h>
int main()
{
FILE *_, __;
char ___[8192];
char *____;
_ = fopen("CON", "r");
if (!fgets(___, sizeof ___, _))
return 1;
if (____ = strchr(___, '\n'))
*____ = 0;
fclose(_);
if (!(__ = fopen(___, "a+"))) {
perror(___);
return 2;
}
fclose(__);
return 0;
}
609 :
デフォルトの名無しさん :2005/07/01(金) 01:45:53
ファイルから1文字ずつ読んで指定したファイルに出力する練習をしています。 // iotest.cpp // ファイル入出力練習 #include <iostream.h> #include <fstream.h> #include <stdlib.h> main() { ifstream fileReader("source.txt", ios::in); ofstream fileWriter("copy.txt", ios::out); if (!fileReader) { cerr << "ファイルをオープンできません\n"; exit(1); // stdlib.hの中にプロトタイプがある } if (!fileWriter) { cerr << "ファイルをオープンできません\n"; exit(1); // stdlib.hの中にプロトタイプがある } char c = 0; while (fileReader && !fileReader.eof() ) { fileReader.read( static_cast< char >(c), sizeof(char) ); cout << c << ' '; fileWriter << c << ' '; } return 0; } readとかgetとかいろいろ試したのですがどうしてもうまくいきません。 間違いの指摘をお願いしますm(_ _)m
>>609 もっと新しい教科書で勉強することを進める。
iostream.hはふるい。
char c;
while (fileReader.get(c)) {
fileWriter << c << ' ';
}
とかでどうよ。
>>610 教科書はかなり古いのを使っています。
いい教科書を探したのですがなかなか決まらなくて・・・
それだと無限ループにはまってしまいました。
しかも書き込みもうまく行われていないようです。
612 :
589 :2005/07/01(金) 02:01:16
なるほど、ifstream::get()が何も返さないのね コンパイラはどんなの使ってるの。
614 :
584 :2005/07/01(金) 02:04:47
できたと思ったら勘違いでした・・・ どなたか教えていただけませんか? 引き続き自分でもやってみます・・・ ほんと自分ダメポ・・・
>>609 #include <iostream>
#include <fstream>
// C++の標準ヘッダはもはや〜.hではない
int main()
//戻り値の型の省略はC++ではもはや許されていない
{
std::ifstream fileReader("source.txt");
std::ofstream fileWriter("copy.txt");
// ifstreamやofstreamはデフォルト引数としてinやoutを渡すので不要
if (!fileReader || !fileWriter) {
std::cerr << "ファイルをオープンできません\n";
return 1;
}
std::ifstream::int_type c = 0;
// ifstream::get()はint_typeを返す
while ((c = fileReader.get()) != std::ifstream::traits_type::eof()) {
std::cout << std::ofstream::char_type(c) << ' ';
fileWriter << std::ofstream::char_type(c) << ' ';
}
return 0;
}
>>613 無料のボーランドのやつです。
まずかったでしょうか??
>>615 なるほど!!確かに出来てます。
これだとだいぶjavaのFileReaderに近いので理解しやすいです。
stdというのをつけるのは作法なんでしょうか?
名前がかぶるわけなんかないと高をくくっているのですが・・・
>>617 std::はnamespace
C++標準ライブラリはstd名前空間に包まれることになってます
>>617 小さいプログラムを書いているうちは被らない事が殆どだろうから、
#includeの後にusing namespace std;と書いている人が結構多い。
620 :
584 :2005/07/01(金) 02:33:50
今度こそできました スレ汚しすみませんでした 失礼します。
621 :
606 :2005/07/01(金) 02:41:12
>>607 データの中身はなくてなんかの問題集だと思うのですが。
いきなり問題が書いてあるので・・・
>>608 「_」はなにか適当な文字を入れればいいのでしょうか?
>>621 >>608 をコンパイルして実行してみるよろし。
まあ、_ではじまるシンボルは本当は処理系用に予約されていて
使っちゃいかんのだがな。
624 :
デフォルトの名無しさん :2005/07/01(金) 02:55:13
C++のmain関数への引数の与え方ってどうやるんですか?? int main(int argc, char *argv){ std::cout << argc << ',' << argv << std::endl; } とすると,謎の文字列が表示されました。
int main(int argc, char **argv) { std::cout << argc; for (int i = 0; i < argc; ++i) std::cout << ',' << argv[i] ; std::cout << endl; return 0; }
>>617 あ、それから。C++っぽく1文字ずつコピーするには、以下。
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
int main()
{
std::ifstream fileReader("source.txt");
std::ofstream fileWriter("copy.txt");
if (!fileReader || !fileWriter) {
std::cerr << "ファイルをオープンできません\n";
return 1;
}
std::copy(std::istream_iterator<char>(fileReader), std::istream_iterator<char>(), std::ostream_iterator<char>(fileWriter, " "));
return 0;
}
628 :
デフォルトの名無しさん :2005/07/01(金) 03:54:19
>>441 の課題できたら誰かやってください。また、できたところ(部分部分)まででもいいのでアップしてくれたら幸いです。
629 :
デフォルトの名無しさん :2005/07/01(金) 04:24:30
>>627 ご親切にありがとさんです。
今はmain関数の引数の使い方が分からずに困っております( ; ° °)
つまり上のプログラムのsource.txtの部分を指定できないかってことです。
ほい int main(int argc,char *argv[]) { if(argc!=3) cout << "usage: " << argv[0] << "source.txt dest.txt" << endl; cout << ":" << argv[1] << " -> " << argv[2] << endl; std::ifstream fileReader(argv[1]); std::ofstream fileWriter(argv[2]); }
if(argc!=3) { cerr << "usage: " << argv[0] << "source.txt dest.txt" << endl; exit(1); }
632 :
デフォルトの名無しさん :2005/07/01(金) 06:30:44
@string型をint型にキャストするにはどーすればいいんですか?? StrToIntとかToIntという関数があるようですが, これでは駄目なようで困っています. Aファイルから1行を切り出すにはどうすればいいんですか?? 40文字ずつ改行しながら別のファイルに出力させていくという プログラムを作りたいのですが, char *c; fileReader.get(c, number, '\n'); のようにしてnumberが21くらいになるとメモリがreadにならないという エラーメッセージが出てきます.どうしてでしょうか??
633 :
632 :2005/07/01(金) 06:52:50
誰か答えてよ もしかしてわからないの?
634 :
デフォルトの名無しさん :2005/07/01(金) 07:03:10
>>632 ここは宿題スレです。言語スレへ逝ってください。
プログラム超初心者のオレが答えてやるぜ、たぶん間違ってるけど #include <iostream> #include <string> using namespace std; int main(){ int num; char str[256]; string s ("123"); strcpy(d, s.c_str()); num = atoi(d); printf("%d\n", num); return 0; }
636 :
デフォルトの名無しさん :2005/07/01(金) 09:09:48
[1] 授業単元:プログラミング演習I [2] 問題文: 実数の値xおよびa,pを与えると、 f(x,a,p) = exp(-x*x/(2.0*a*a))*cos(3.14*x+p) を返す関数を作成しなさい。 この関数を用いてxを-3.14から3.14まで0.01きざみで変化させたときのプログラムを作成しなさい。 ただしパラメータa,pは適当にあたえてもよいものとする。例a=0.6,p=0.0など [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7/5まで [5] その他の制限:関数の扱いまで習いました。 どなたかご教授お願いします。
#include <stdio.h> #include <math.h> double func(const double &a, const double &p, const double &x) { return (exp(-x*x/(2.0*a*a))*cos(3.14*x+p)); } int main() { double a, p, x = -3.14; scanf("%lf %lf", &a, &p); while(x <= 3.14) { printf("x = %.2f : %f\n", x, func(a, p, x)); x += 0.01; } return 0; }
#include <stdio.h> #include <math.h> double f(double x, double a, double p) { return exp(-x*x/(2.0*a*a))*cos(3.14*x+p); } int main(int argc, char *argv[]) { int i; double a, p; if (argc != 3) { printf("usage: %s a p\n", argv[0]); return 0; } a = atof(argv[1]); p = atof(argv[1]); for (i = -314; i <= 314; i++) { printf("% 5.2f %f\n", i / 100.0, f(i / 100.0, a, p)); } return 0; }
640 :
636 :2005/07/01(金) 15:35:54
>>637 638 639
ありがとうございました。おかげで完成できました。
641 :
デフォルトの名無しさん :2005/07/01(金) 15:40:27
[1] 授業単元:課題研究 [2] 問題文: ゲーム理論の2人ゼロSUMゲームのNash均衡を求めるプログラム 2*2の正方行列で均衡点を求めたいんですが C D A(5,5)(0,8) B(8,0)(2,2)の行列です。 均衡点は(2,2)です。パレート最適は(5,5)です。 アルゴリズムは 使用する変数の宣言 ↓ 利得行列をデータで与える。 ↓ p1_max[i],pi[j]を計算する p2_max[i],pj[i]を計算する ↓ Nash均衡の判定 ↓ i=pi[j] →No ↓Yes j=pj[i] →No ↓Yes (i,j)はNash均衡としPrintする。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C++ [4] 期限:7/5まで
643 :
デフォルトの名無しさん :2005/07/01(金) 18:52:09
[1]課題プロジェクト [2]最初に入力したものから現在入力したものまでの平均値を求め(リアルタイム処理という、 すなわち最後のデータを待たずに新たに 入ってくるデータがあれば処理を行なう)、 表示するプログラムを作成しなさい。 平均値を求める関数 float avg(int データ番号 n, float 入力データ , float (n-1) までの平均値) を作成し、利用すること。 数値の入力や結果の表示は実行例を参考に mainで行なうこととし、 入力された値が0の時、終了するものとします。 [3]環境 1OS windows xp 2 gcc 3 c言語で、初歩のほうなので、分かりやすくおねがいします。 [4]土曜日のごご六時ごろまでです。
644 :
デフォルトの名無しさん :2005/07/01(金) 18:59:55
{1}プログラミング演習 {2}10進数の0〜255を8ビットの符号なし2進数で表示するプログラムを作成せよ。 なお。10進数を2進数へ変換し、表示する関数void d2b(int i) を作成し、 それをmainから呼んで実行しなさい。 {3}環境 {3,1}os ユニックス {3,2}gcc {3,3}C言語です。 {4}月曜日までです。よろしくお願いします。
void d2b(int i)
{
static int x = 8;
if (x == 0) {
x = 8;
return;
}
x--;
d2b(i
>>1 );
putchar((i & 1) + '0');
}
646 :
デフォルトの名無しさん :2005/07/01(金) 19:25:51
[1] プログラミング基礎 [2] 文字列str内の全ての数字文字を削除する関数を、添字演算子を用いずに作成せよ。 [3] 環境 [3.1] OS:Linux [3.2] gcc [3.3] C [4] 期限:月曜日まで [初心者なんですが
647 :
デフォルトの名無しさん :2005/07/01(金) 19:31:34
>>644 #include <stdio.h>
void d2b(int i);
int main(void)
{
unsigned int i;
for(i = 0; i < 256; i++) {
printf("10進数 %3d 2進数 ");
d2b(i);
}
}
void d2b(int i)
{
int j;
for (j = 8; j >= 0; j--){
printf("%u", (i>>j) & 0x0001);
}
printf("\n");
}
>>646 #include <stdio.h>
#include <ctype.h>
void func(char *src, char *dest) {
while(*src != '\0') {
if(isdigit(*src) == 0) {
*dest = *src;
dest++;
}
src++;
}
*dest = '\0';
}
int main()
{
char str[256], str2[256];
scanf("%s", str);
func(str, str2);
puts(str2);
return 0;
}
>>646 #include <stdio.h>
#include <string.h>
#include <ctype.h>
char *remove_digit(char *str)
{
char *p, *q;
for(p = q = str; *p; ++p)
if( ! isdigit(*p) ) *q++ = *p;
*q ='\0';
return str;
}
int main()
{
char buf[256];
while(1)
{
char *p;
if( p = strchr(fgets(buf, sizeof(buf), stdin), '\n') ) *p = '\0';
puts(remove_digit(buf));
}
return 0;
}
引数NULLのときのガードわすれた。
じゃあ俺が代わりに。 void del_digit(char * str) { char *p_dest = str; char *p_src = str; while (p_dest && *p_dest) { if (!isdigit(*p_src)) { *p_dest++ = *p_src; } p_src++; } }
まちがえた。
653 :
649 :2005/07/01(金) 19:57:59
>>651 ループ毎のチェックでNULLチェックは冗長じゃね?
#include <ctype.h>
char *remove_digit(char *str)
{
if( str )
{
char *p, *q;
for(p = q = str; *p; ++p)
if( ! isdigit(*p) ) *q++ = *p;
*q ='\0';
}
return str;
}
> 引数NULLのときのガードわすれた。 このスレでの回答にそんまもの必要ないと思われ。 問題文に書いてない限りは。
655 :
デフォルトの名無しさん :2005/07/01(金) 20:06:57
cのGUIプログラムでcgi-binディレクトリ以下に置いてます これを拡張子を.cgiにせずに.cのままで webにだしたいのですがコンパイル後、webでみても エラーがでて上手く表示されません。 拡張子.cgiのままなら見れます。 問題があるとしたら以下のプログラムなのですが どこか不都合な部分はあるでしょうか・・・・ ご指摘お願いします ***********hello.c**************** #include <stdio.h> int main(void){ printf("Content-type: text/html\n\n"); printf("<HTML>\n"); printf("<HEAD>\n"); printf("<META http-equiv=\"Content-Type\" content=\"text/html; charset=EUC-JP\">\n"); printf("<TITLE>Sample CGI output</TITLE>\n"); printf("</HEAD>\n"); printf("<BODY>\n"); printf("<H3>\n"); printf("Hello World\n"); printf("</H3>\n"); printf("</BODY>\n"); printf("</HTML>\n");; return 0; }
GUIじゃなくてCGIだろ? あと、CのCGIは、コンパイルしなきゃ動かないと思うんだけど。 もしかして、実行時にmakeしてくれるCGI環境tかあるの?
>>655 エラー内容の類はカキコ必須な。
なんで.cのままやりたいのか、理由もききたい。
.htaccessで出来るかもしれんが。
>>655 反射的にカキコんじまったが、それ宿題なのか?
それと
>>1 の
「質問は必ず【質問テンプレ】に従ってください。」
ってのをポストイットに書いて貼っとけ。
659 :
デフォルトの名無しさん :2005/07/01(金) 20:24:38
[1] プログラミング言語 [2] 区間[a, b]において連続な任意の関数 F(x) の x−軸と F(x) 及び x=a,x=b で囲まれた部分の面積を求めよ。 また,F(x) をX−軸の周りに回転して得られる立体の体積を求める。 ただしa,b,εの値はキーボードから読み込みf(x)はサブ関数で定義する。 [3] 環境 [3.1] OS:Windows [3.2] cpp [3.3] C [4] 期限:月曜日まで [5]初心者です。シンプソン法則を用いる
>>659 g’(x)= F(x) となるg(x)を教えて
661 :
デフォルトの名無しさん :2005/07/01(金) 20:44:05
[1] 授業単元:ポインタ [2] 問題文(含コード&リンク): コード番号に対応した文字列(例えば、1にミルク、2にコーヒー……)を10個作成し、 任意のコード番号を入力すると対応した文字列を出力するプログラムを作成せよ。 (例えば、1と入力するとミルク、2と入力するとコーヒー……と出力される) [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:2005年7月4日まで
663 :
ホームページ プロダクション :2005/07/01(金) 20:47:08
664 :
デフォルトの名無しさん :2005/07/01(金) 20:49:31
[1] プログラミング
[2]
>>655 [3] 環境
[3.1] OS:Linux
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:?
[5] その他の制限:?
>>657 >>658 すまそ・・・・・・・
例題としてシェルのタイプのやつがあって(中身同じ)
それをc言語でも出来るようにしろって問題です
.cgiだとそれにそぐわないと思ったから
665 :
デフォルトの名無しさん :2005/07/01(金) 20:50:28
660番さんありがとうございます。 4.0 / (1 + x * x)でお願いします。
>>664 シェルやPerlのようなインタプリタのスクリプトなら、実行権限ビット
立てとけばそのまま実行できる
Cプログラムの場合はコンパイルしないと実行できない
基本中の基本です
>>662 #include <stdio.h>
const char *list[] = {
"混世魔王・樊瑞", "激動たるカワラザキ",
"衝撃のアルベルト", "眩惑のセルバンテス",
"暮れなずむ幽鬼", "命の鐘の十\常寺",
"マスク・ザ・レッド", "直系の怒鬼",
"白昼の残月", "素晴らしきヒィッツカラルド",
};
int main()
{
int code;
printf("コード入力[1-10] > ");
scanf("%d",&code);
if( code > 0 && code <=10 )
puts(list[code-1]);
else
puts("input error");
return 0;
}
668 :
デフォルトの名無しさん :2005/07/01(金) 21:24:38
669 :
デフォルトの名無しさん :2005/07/01(金) 21:33:40
>>666 Cインタプリタも探せばあるんじゃまいか?
探さんでよろし
CINTのことか
ヽ(`Д´)ノウワァァン!!
675 :
デフォルトの名無しさん :2005/07/01(金) 22:26:29
>>675 何がどうなることを期待していて、
実際はどう違っているのか答えよ。
期限 1時間後
ラベルと変数名って被っても平気なんだ。 しらんかった。
679 :
677 :2005/07/01(金) 22:32:37
Make a Donate → Make a Donation
681 :
659 :2005/07/01(金) 22:59:59
>>681 そういうときはこういいましょう。
「コンパイルが通りません」
そして、速やかに、エラーメッセージを貼り付ける。
>>681 > Tmp関数に代入した値が使われていない
これはワーニングであってエラーじゃないな。無視可能。
> 宣言が正しく終了していない
こっちは問題だが、main()関数の外にreturn 0;があったりするのは
まずいんじゃないのかなあ。たぶん。
変数名と同じGOTOラベルがいいのかどうかはよくわがんねけど、
まあ普通はやらないな
>>678 名前空間が違うのでおk
他には構造体や列挙体もかぶっておk
685 :
デフォルトの名無しさん :2005/07/01(金) 23:31:52
線形論理の古典論理のLKの推論の∨(または)右 Γ→凵AC/Γ→凵AC∨D および Γ→凵AD/Γ→凵AC∨D となるプログラムをCで表してほしいです。
独り言はチラシの裏へ。
687 :
デフォルトの名無しさん :2005/07/01(金) 23:41:27
>>685 こういうレスをみると(°Д°)ハァ?ってなる。
>>677 プログラムありがとうございました。
本当にいいんでしょうか?口座番号さえ分かれば数分でできますよ。
気が変わればメールして下さい。
そのURL先の振込みはややこしそうです。CCカードが必要みたいですし。
代替としてコンビニの募金箱に3千円寄付しときますで、それで。
w
>>502 好い加減、ドン引きされてるのを理解しろよ
善意の人間に金の話を持ち出すのは失礼になることだってあるんだぜ
>>689 こういうやつ結構知ってるからそんなに引かないww
はやく宿題投下キボンヌ
[1] 授業単元:言語処理 [2] 問題文(含コード&リンク): 年月日を表示、変換するプログラムを作る。 XXXX年XX月XX日(例えば、2004年7月2日など)を標準の形式として表示し、 下記のいずれの形式が入力されてもこの形式に変換されるプログラムを作成せよ。 2004-7-2 7/2/2004 Jul./2/2004 2/Jul./2004 2/Jul/2004 2004nen 7gatsu 2nichi 2004 7 2 2004 fumizuki 2 また、存在しない日付(例えば2004年2月30日など)はエラーとする。 [3] 環境 [3.1] OS:UNIX [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7月15日15時まで よろしくお願いします。
オイオイ、まだ2週間もあんだろ。 試みてもいない感じだね。 何時までに回答レスが付かなかったら自分でやるの?
693 :
デフォルトの名無しさん :2005/07/02(土) 01:09:11
[1]C言語演習 [2]Gccコンパイラ [3]期限 7月6日水 [4]RedHat 問題 メニュー表示をし,ステップ「1」として,関数y = 2x2において,x = 0 – 10 ま でを0.01 刻みで1001 個のx,yデータセットを作成して,ファイル名function.datで各自のホ ームディレクトリ(または,カレントディレクトリ)にバイナリ形式で保存する.ステ ップ「2」として,作成したfunction.datからn個目のx,yデータセットを抽出して,ファイ ル名n_xy_ascii.dat(nは入力した数字)としてASCII形式で保存する.以上の様に動作す るプログラムを作成しなさい よろしくお願いします
いったん、バッファに貯めてから、 sscanf(buf, "%d年%d月%日", &y, &m, &d); ってなことかな・・・。 文字列が可変のところは%3sとか%20[abc...xyz]とかしたあと、ただしいつづりかチェックってかたちかな? sscanf以外の解法はメンドイ気もする。
間違えました。 7月5日15時まででした。 これをCで作った後にlexとyaccでも作らないといけないんで結構必死です。
lex使うのかなぁ とは俺も思ったけどやっぱそうだったのか。
sscanf以外なら、状態遷移。 lexで作る時遷移図書くんなら、まずそれを作ってからだな。 つーか、この問題の意味するところは「状態遷移マンセーだぽ」って思えるんだが。
C言語で作って→lex,yaccか・・・メンドイな・・・。 C言語、まず、トークナイザつくらんとダメぽ? 再帰下降型しかノーミソに入ってませんが。
力技でも出来そうだけど、 日月 年 と 年月 日 の判別がめんどくさそう。
セパレータ '-'(ハイフン) '/'(スラッシュ) ' '(スペース) の3種で3つにわけてあとはゴリ押し
701 :
699 :2005/07/02(土) 01:44:39
とおもったが、出題のサポート形式だと、/ セパレートのときが日/月/年 と決まってるんだな。 コレなら、まぁ楽か。
int get_token(FILE *fp, char *s, int size) { int c; do { c = getc(fp); } while (isspace(c)); switch (c) { case EOF: return 0; case '-': case '/': case '.': return c; defualt: ungetc(c, fp); if (isdigit(c)) return get_token_number(fp, s, size); return get_token_stringfp, s, size); } return 0; /* ここにくることはないが、一応 */ } すまん、力尽きた。
703 :
デフォルトの名無しさん :2005/07/02(土) 02:11:33
#include <stdio.h> void d2b(int i); int main(void) { unsigned int i; for(i = 0; i < 256; i++) { printf("10進数 %3d 2進数 "); d2b(i); } } void d2b(int i) { int j; for (j = 8; j >= 0; j--){ printf("%u", (i>>j) & 0x0001); } printf("\n"); } これを配列を使ってできませんか?よろしく、おねがいします。
char *array[256] = { "00000000", "00000001", /* ... */ "11111111" }; /* #include 〜 mainの終わりまでそのまんま */ void d2b(int i) { return array[i % 256]; }
705 :
691 :2005/07/02(土) 02:25:52
sscanfも状態遷移も苦手だという罠・・・。 とりあえずトンクスです。 ヒントを頼りにやってみます。
706 :
デフォルトの名無しさん :2005/07/02(土) 02:34:36
>>>704 char*arrayを使わないで、できませんか?
釣られた漏れ...orz
709 :
デフォルトの名無しさん :2005/07/02(土) 05:19:30
線形論理の古典論理のLKの推論の∨(または)右 Γ→凵AC/Γ→凵AC∨D および Γ→凵AD/Γ→凵AC∨D となるプログラムをC言語で表してほしいです。
>>709 数学のことがわからんので、その理論のことを書いてあるURLをおせーてね。
712 :
397 :2005/07/02(土) 07:05:14
397です。 407氏が課題の後半部分を作ってくださったので 前半は自分でやってみたのですが、間に合いそうにないです。。 残り時間も僅かなのですが、 もしよろしければ、どなたか教えていただけないでしょうか。
713 :
デフォルトの名無しさん :2005/07/02(土) 09:32:48
[1] 授業単元:プログラミング [2] 問題文: int型の配列にキーボードから整数を読み込んでいくときに、 常に配列の中が小さい順に保たれるようにしたい。 新しい要素を適切な位置に挿入しながら読み込むプログラムを 作成してください。 [3] 環境 [3.1] OS:Windouws xp [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7/7まで よろしくお願いします。
715 :
デフォルトの名無しさん :2005/07/02(土) 10:22:45
ソースファイルを解析して、ある単位単位ごとに語句を取り出すのは簡単ですか?
717 :
デフォルトの名無しさん :2005/07/02(土) 11:08:25
1] 授業単元: プログラム [2] 問題文 二進数を入力して十進数に変換せよ。ただし配列は使わない。 [3] 環境 [3.1] OS:Windows/Linux/どちらでも可 [3.2] コンパイラ(バージョン):gcc [3.3] どちらでも可 [4] 期限:7月4日 [5] その他の制限:配列はNG。for,while,do-while,ifの中で。 どうかお願いします。
719 :
397 :2005/07/02(土) 13:26:35
720 :
デフォルトの名無しさん :2005/07/02(土) 13:38:43
[1] 授業単元:課題研究 [2] 問題文: ゲーム理論の2人ゼロSUMゲームのNash均衡を求めるプログラム 2*2の正方行列で均衡点を求めたいんですが C D A(5,5)(0,8) B(8,0)(2,2)の行列です。 均衡点は(2,2)です。パレート最適は(5,5)です。 アルゴリズムは 使用する変数の宣言 ↓ 利得行列をデータで与える。 ↓ p1_max[i],pi[j]を計算する p2_max[i],pj[i]を計算する ↓ Nash均衡の判定 ↓ i=pi[j] →No ↓Yes j=pj[i] →No ↓Yes (i,j)はNash均衡としPrintする。 [3] 環境 [3.1] OS:Windows XP [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C++ [4] 期限:7/5まで
>>718 #include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *s = malloc(32);
int v;
fgets(s, 32, stdin);
v = strtol(s, NULL, 2);
printf("%d\n", v);
free(s);
return 0;
}
>>721 無意味な動的メモリ確保も然り乍ら、31ビット入力という中途半端さは一体なんなんだろう。
>>722 配列を使わないっていう制約だからじゃねーの?
for, while, ifの中でとかいう制約もあるようだがな。 こんなもんでどうよ。 #include <stdio.h> int main() { int n = 0, c; while ((c = getchar()) != EOF && c == '0' || c == '1') { n <<= 1; n |= (c - '0'); } printf("%d\n", n); return 0; }
>>724 あ、whileの条件式間違ってる
while ((c = getchar()) != EOF && (c == '0' || c == '1'))
にしてくれや
726 :
デフォルトの名無しさん :2005/07/02(土) 18:34:48
>>718 #include <stdio.h>
#include <stdlib.h>
#define LF 0x0a
int main( void )
{
unsigned long int num, inp;
printf( "input binary digit " );
num =0;
while( LF != (inp = getchar() )) {
num <<= 1;
if( '1' == inp ){
num |= 1;
}
else if( '0' == inp ){
}
else{
fprintf( stderr, "input error!\n" );
return 1;
}
}
printf( "%d\n", num );
return 0;
}
727 :
718 :2005/07/02(土) 18:48:12
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク):長さ100の配列にランダムな文字('a'-'z' or 'A'-'Z' or '0'-'9')を格納し、 何か1文字を入力し、入力された文字がいくつ格納されているか表示しなさい [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):VS .net2003 [3.3] 言語:C [4] 期限:7月3日まで [5] その他の制限:特に無し・・・のはず おねがいします。ランダム文字がわかりませんorz
>>728 ごり押しだがこんな感じ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define S "abcdefghijklmnopqrstuvwxyz" \
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
"0123456789"
int main(void) {
const char * s = S;
const size_t len = sizeof(S)-1;
char a[100];
int i, c, n = 0;
srand((unsigned int)time(0));
for (i = 0; i < 100; ++i) a[i] = s[rand()%len];
if ((c = getchar()) == EOF) return 1;
for (i = 0; i < 100; ++i) if (a[i] == c) ++n;
printf("%c は %d個\n", (char)c, n);
return 0;
}
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { char ch,buff[64]={'\0'},dim[100]; int i = 0,counter = 0; srand(time(NULL)); for(ch = 'a';ch <= 'z';ch++,i++) buff[i] = ch; for(ch = 'A';ch <= 'Z';ch++,i++) buff[i] = ch; for(ch = '0';ch <= '9';ch++,i++) buff[i] = ch; const size_t length = strlen(buff) + 1; for(i=0;i<100;i++) dim[i] = buff[rand() % length]; printf("検索する文字を入力してくれ(a-z A-Z 0-9):"); ch = getchar(); printf("dim[100] = "); for(i=0;i<100;i++){ printf("%c",dim[i]); if(dim[i] == ch) counter++; } printf("\ndim[100]から%cを%d個検索した\n",ch,counter); return 0; }
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { char ch,buff[64]={'\0'},dim[100]; int i = 0,counter = 0; srand(time(NULL)); for(ch = 'a';ch <= 'z';ch++) buff[i++] = ch; for(ch = 'A';ch <= 'Z';ch++) buff[i++] = ch; for(ch = '0';ch <= '9';ch++) buff[i++] = ch; const size_t length = strlen(buff) + 1; for(i=0;i<100;i++) dim[i] = buff[rand() % length]; printf("検索する文字を入力してくれ(a-z A-Z 0-9):"); ch = getchar(); printf("dim[100] = "); for(i=0;i<100;i++){ printf("%c",dim[i]); if(dim[i] == ch) counter++; } printf("\ndim[100]から%cを%d個検索した\n",ch,counter); return 0; }
[1] 授業単元: 情報処理 [2] 問題文(含コード&リンク): ABCの3つの文字が AAAAAAAAAAAAAABBBBBBBBBBBCCCCCCCCCCCCCCCC のように順に並んでいます。 この列のなかから、最初のA(は分かりますが)と最後のA 同様に、最初のBと最後のB 最初のCと最後のCが配列の何番目にあるかを 二分検索を応用して与えなさいというのです。 二分検索は分かるのですが・・・。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):BorlandC無料のです。 [3.3] 言語:C [4] 期限:2005年07月04日まで [5] その他の制限: 一通り、C言語は文法は習いました。
733 :
730 :2005/07/02(土) 20:09:09
まだ間違えてた const size_t length = strlen(buff) + 1; ↓ const size_t length = strlen(buff);
>>729 ,730-731
ありがとうございました
[1] 授業単元:情報処理1 [2] 問題文:glutとC言語により、樹木曲線を表示するプログラムを作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ:Borland C++ 5.5.1 [3.3] 言語:C [4] 期限:2005年7月4日10:00まで [5] GLUTを使用 自分なりに考えてみたんですが、うまく表示されませんorz tree関数のところで間違ってると思うんですが。 よろしくお願いします。
736 :
735 :2005/07/02(土) 20:45:09
#include <stdio.h> #include <GL/glut.h> #include <math.h> #define PI 3.1415926535 #define RAD(c) ((PI * (c)) / 180.0) #define rate 0.5 //主枝に対する分枝の長さ #define turn 45.0 //分枝の角度 double x=0.0, y=0.0, angle=90.0, length=0.5; int n; void tree(int n, double length, double angle); void display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3d(100.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); tree(n, length, angle); glEnd(); glFlush(); }
737 :
735 :2005/07/02(土) 20:46:35
#include <stdio.h> #include <GL/glut.h> #include <math.h> #define PI 3.1415926535 #define RAD(c) ((PI * (c)) / 180.0) #define rate 0.5 //主枝に対する分枝の長さ #define turn 45.0 //分枝の角度 double x=0.0, y=0.0, angle=90.0, length=0.5; int n; void tree(int n, double length, double angle); void display(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3d(100.0, 0.0, 0.0); glBegin(GL_LINE_STRIP); tree(n, length, angle); glEnd(); glFlush(); }
738 :
735 :2005/07/02(土) 20:48:15
つづき void tree(int n, double length, double angle) { x=x+length*sin(RAD(angle)); // 枝の終点のx座標を計算 y=y+length*cos(RAD(angle)); // 枝の終点のy座標を計算 glVertex2d(x, y); //枝の表示 if (n>0){ tree(n-1, length*rate, angle-turn); //右部分枝の描画 (再帰呼び出し) tree(n-1, length*rate, angle+turn); //左部分枝の描画 (再帰呼び出し) } } int main(int argc, char *argv[]) { printf("n="), scanf("%d",&n); //次数nの入力 glutInit(&argc, argv); glutInitWindowSize(1200, 800); glutCreateWindow(argv[0]); glutDisplayFunc(display); glutMainLoop(); return 0; }
740 :
匿名 :2005/07/02(土) 21:50:06
1] 授業単元: プログラミング [2] 問題文(含コード&リンク):30000までの素数をエラトステネスのふるいにより 求めよ。何番目の素数を求められるようにする。ex.3番目の素数は5。 素数を与えたときにそれが何番目の素数であるかを表示。 これを1つのプログラムにしなさい。という問題です。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C++/ [4] 期限:2005年07月04日12:00まで または 無期限 のいずれか [5] その他の制限:特にありません。 宜しくお願いします。
741 :
デフォルトの名無しさん :2005/07/02(土) 22:14:18
[1] 授業単元: プログラミング [2]素数かどうかを判定する関数isprimeを作成し、 2から1000までの素数を 10列の表として表示するプログラムを 作成しなさい [3.1]OS WINDOWS [3.2]gcc [3.3]C言語 [4]月曜日までです。 よろしくお願いします。 [5]
>>741 #include <stdio.h>
int isprime(int n) {
int i;
for (i = 2; i <= n / 2; i++) if (n % i == 0) return 0;
return 1;
}
int main(void)
{
int i, j;
for (i = 2, j = 0; i <= 1000; i++)
if (isprime(i)) {
++j;
printf("%4d", i);
if (!(j % 10)) printf("\n");
}
}
>>740 #include <algorithm>
#include <iostream>
#include <vector>
std::vector<bool> sieve_of_eratosthenes(int upper) {
std::vector<bool> integers(upper + 1, true);
integers[0] = integers[1] = false;
for (int i = 2; i <= upper / 2; ++i) {
int notprime = i;
while ((notprime += i) <= upper) integers[notprime] = false;
}
return integers;
}
std::vector<int> make_primes(int upper) {
std::vector<bool> sieve(sieve_of_eratosthenes(upper)); std::vector<int> result;
for (int i = 2; i <= upper; ++i) if (sieve[i]) result.push_back(i);
return result;
}
int main() {
std::vector<int> primes = make_primes(30000); int n;
std::cout << "非正数の入力で終了" << std::endl;
std::cin >> n;
while (n > 0) {
if (n > 30000) std::cout << "範囲外" << std::endl;
else {
std::vector<int>::iterator pos = std::lower_bound(primes.begin(), primes.end(), n);
if (*pos == n) std::cout << pos - primes.begin() + 1 << "番目" << std::endl;
else std::cout << "素数でない" << std::endl;
}
std::cin >> n;
}
}
[1] 授業単元: C言語プログラミング基礎 [2] 問題文:数あてゲームを作れ。1〜9までまでの乱数を使い、 入力した数字が違っていた場合は大小によってメッセージを変える。 そして正解の場合は「正解!」と表示し、再度遊ぶかどうか尋ねる。 「Y」の場合は続行し、「N」だったら終了する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:Cのみ [4] 期限:7月4日 [5] その他の制限: よろしくお願いします。
>>744 YでもNでもなかったらどうしたらいいんだ?
>>744 ま、いいや。Nで終了、その他で続行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(void) {
int n, u;
char str[2];
srand((unsigned)time(NULL));
do {
n = rand() % 9 + 1;
do {
printf("?:"); scanf("%d", &u);
if (n > u) printf("more large");
else if (n < u) printf("more small");
} while (n != u);
printf("正解!再度遊ぶ?");
scanf("%2s", str);
} while (strcmp(str, "N"));
return 0;
}
747 :
744 :2005/07/02(土) 23:29:24
それではY以外は終了でお願いします。
748 :
744 :2005/07/02(土) 23:31:03
>>746 すみません。リロードし忘れてました。ありがとうございます。
747は忘れてください。
>>748 それならば
} while (strcmp(str, "N"));
を
} while (!strcmp(str, "Y"));
に変更してくれ
>>748 すまんが
char str[2];
を
char str[4];
に変更。
751 :
744 :2005/07/02(土) 23:40:32
>>746 ,750
了解しました。ありがとうございました。
752 :
744 :2005/07/02(土) 23:43:12
753 :
デフォルトの名無しさん :2005/07/02(土) 23:57:40
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): 次の機能を持つメールアドレス管理プログラムを作成せよ (1) データの新規登録、削除、検索。 (2) データのファイルへの保存と、ファイルからの読み込み。 (3) 保存されているデータを姓のアルファベット順で一覧表示 ※データの内容は、姓、名前(ともにローマ字表記)、メールアドレスの3要素とする データはリスト構造で管理すること ※プログラム開始時に保存されているファイルを読み込み、終了時にその時点のすべての データをファイルに保存するようにすること ※上の(1)から(3)は次のようなメニュー画面から選択できるようにすること 1. 新規登録 2. 一覧表示 3. 削除 4. 終了 -「2. 一覧表示」が選択された時はその時点のすべてのデータを姓のアルファベット順で一覧表示すること -「3. 削除」を選択した時は,検索する姓または名前を入力させ それが存在する場合はデータの内容を表示後、「処理: a. 削除する b. なにもしない」の メニューの中から選択させるようにすること [3] 環境 [3.1] OS:Windows/Linux/等々 Windows [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C/C++/どちらでも可 のいずれか C [4] 期限:yyyy年mm月dd日hh:mmまで または 無期限 のいずれか 7月3日 よろしくお願いします。
754 :
デフォルトの名無しさん :2005/07/02(土) 23:58:35
あげてしまった。すまぬ。
757 :
匿名 :2005/07/03(日) 00:31:05
740です。743,754どうもありがとうございます。
>>753 > 姓のアルファベット順で一覧表示
同姓の場合は?
759 :
デフォルトの名無しさん :2005/07/03(日) 00:47:36
>>758 その場合は名前を比較して、名前のアルファベット順にしてください。
無理そうなら同姓の場合は考えなくてもいいです。
お願いします。
760 :
C++お願いします。 :2005/07/03(日) 00:52:49
[1] 授業単元: プログラミング演習 [2] 問題文(含コード&リンク):10進6ケタの自然数を16進表示するプログラム。 7進8ケタの自然数を10進表示するプログラム 7進8ケタの自然数を3進表示するプログラム の3問です。いきなり3問もすいません。お願いします。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C++です。 [4] 期限:2005年7月5日23:59までです。 [5] その他の制限:無いです。
//10進6ケタの自然数を16進表示するプログラム。 #include <stdio.h> #include <stdlib.h> int main() { char buf[7]; int n; fgets(buf, sizeof buf, stdin); n=atoi(buf); printf("%x", n); return 0; }
762 :
デフォルトの名無しさん :2005/07/03(日) 01:32:01
>>761 ありがとうです!
>>760 3問が1つのプログラムにまとまってる。
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
std::string to_radix_n(unsigned int x, unsigned int n) {
int index = 0;
std::string s, characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
do s.push_back(characters.at(x % n)); while (x /= n);
std::reverse(s.begin(), s.end());
return s;
}
unsigned int from_radix_n(std::string s, unsigned int n) {
unsigned int x = 0;
std::string characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (std::string::size_type i = 0, len = s.length(); i < len; ++i)
(x *= n) += static_cast<unsigned int>(characters.find(std::toupper(s[i])));
return x;
}
int main() {
std::string s;
std::cin >> s;
std::cout << to_radix_n(from_radix_n(s, 10), 16) << std::endl;
std::cin >> s;
std::cout << to_radix_n(from_radix_n(s, 7), 10) << std::endl;
std::cin >> s;
std::cout << to_radix_n(from_radix_n(s, 7), 3) << std::endl;
}
764 :
C++お願いします。 :2005/07/03(日) 02:40:27
ありがとうございます、763さん。 やってもらって悪いのですが、 エラー出てしまうんですけど… 私の方に問題あるのですかね? 本当にプログラム初心者なのでわかりません。 本当にすいません。
コンパイルエラーなら、そのまま貼り付けろ
MSVC6.0だったりして。
767 :
C++お願いします。 :2005/07/03(日) 02:54:40
メンバではありませんって出るんですよね…。 貼り付けて実行してるんですけど、 黒い画面が出ないんです…くだらない質問で ごめんなさい。
768 :
デフォルトの名無しさん :2005/07/03(日) 02:56:26
769 :
C++お願いします。 :2005/07/03(日) 02:56:54
MSVC6.0ってMicrosoft Visual 6.0の事ですよね?きっと。 自分それです。これだとちょっと違うんですか?
ああなるほど VC++6.0ではpush_back()がbasic_string<>のメンバじゃないんだね
771 :
763 :2005/07/03(日) 02:58:49
>>769 あ〜あ、コンパイラを書かないから。そのコンパイラはグズグズで
使い物にならないんだよ。で、何行目になんていうエラーが出るって?
push_back がダメなら、 += にしたらええんちゃう? 効率は落ちるけど。
773 :
763 :2005/07/03(日) 03:01:31
それじゃあ do s.push_back(characters.at(x % n)); while (x /= n); を do s += characters.at(x % n); while (x /= n); では?
774 :
763 :2005/07/03(日) 03:01:48
かぶったorz
奴が使ってるのは違法コピーのVC6.0 に300ペリカ
776 :
C++お願いします。 :2005/07/03(日) 03:05:04
8行目のdo s.push_back(characters.at(x % n)); while (x /= n); の行にメンバではありません。って出ます。 16行目の(x *= n) += static_cast<unsigned int>(characters.find(std::toupper(s[i]))); にtoupper stdのメンバではありません。って出ます。
ところで、なんでVC6.0なの? そのコンパイラでC++はやめたほうがいいよ。
778 :
763 :2005/07/03(日) 03:09:23
>>776 ちゃんと
>>772-774 読んでる?
std::toupper→toupperに変更。改めて言うけど、君の使っているソフトが
イカレテいるために、わざわざプログラムを改悪(というよりも間違ったものに)
しているんだからね。
779 :
C++お願いします。 :2005/07/03(日) 03:10:03
今+=にしたら一個エラーがへりました! 16行目もなにか問題あるんでしょうか?
toupperがマクロか何かで、std名前空間につつまれてないのかな。 #include <cctype> --> #include <ctype.h> std::toupper() --> toupper() でどうよ。
781 :
C++お願いします。 :2005/07/03(日) 03:14:56
すいません。 わざわざ。 出来ました。みなさんほんとありがとうございます。
782 :
763 :2005/07/03(日) 03:18:33
>>781 ちなみに。もしチェックする教官が君とは違うまともなコンパイラを
使っていたら、その答案はハネられるよ。
都合の悪いことには答えないのなw
ガッコで使ってるコンパイラがあるんだろうけど.... ま、コピったのかな、それを。 cctype.hをインクルードしておきながら using宣言も使わずに toupper()とするのはまあ間違いと言われかねないが。 ctype.hをインクルードするか using宣言を書いておけば まあ間違いとは言えないだろう。
785 :
C++お願いします。 :2005/07/03(日) 03:22:39
答えますよw。 そんな非情じゃないですw。 これはそんないかれたコンパイラなんですか?
786 :
784 :2005/07/03(日) 03:23:47
cctype.hじゃないcctypeだ
>>785 要するに、C++標準準拠度が低いというだけ。
もっとも、当時はそれでも使われていたし、今でもそれを使っている
現場は結構多いけどな
>>785 はい。世界標準規格に沿ったプログラムを書いてもコンパイルできません。
789 :
C++お願いします。 :2005/07/03(日) 03:27:04
じゃあC++標準準拠度が高くなれば、 またプログラムが変わってくるって事ですか? ちなみにこの授業の教授はプログラム一切分からないんですよw。 大学院生が全部見させられてるらしいです。 授業で黒板にJABAって書いてましたから。
>>789 「VC++6.0でもコンパイル可能で、標準に準拠したプログラム」
を書けばよい。
ただし、今の時代にわざわざそんな無駄な苦労をする意味は全く無い
と言ってよい。
学習の障害になるだけだ。
792 :
C++お願いします。 :2005/07/03(日) 03:29:44
>>788 全然知らなかったです。 未だにポケベル使ってる様な感じで解釈します。
793 :
763 :2005/07/03(日) 03:31:29
あ、次の行は消しといてくれ。恥ずかし… int index = 0;
まあそのガッコで平気でVC++6.0を使っており
授業が
>>789 みたいな感じなら、
たぶん
>>763 の回答は、担当教授の想定とは随分違うものなんじゃないかな(w
時には授業のレベルに合わせることも必要だろう、学生のテクニックとして。
このスレのpart18と27のdatがどうしても見つかりません。 どなたか恵んでください。m(_ _)m
そーいえば、まとめサイトはどーなったんだろう。
797 :
デフォルトの名無しさん :2005/07/03(日) 11:21:33
■■■■■■■■■■■■■■■■ ■ ■ 違う板にコピペすると、四角の枠の中に ■ ■ メッセージとURLが現れる不思議な絵。 ■ ■ ■ ■ (その仕組みがリンク先に書いてある) ■ ■ ■ ■ この原理を応用すると、まったく新しい ■ ■ コピペが作れる予感。 ■■■■■■■■■■■■■■■■
ズレてる時点で信憑性(ry
799 :
795 :2005/07/03(日) 12:32:09
800 :
デフォルトの名無しさん :2005/07/03(日) 14:40:37
よろしくお願いします。 [1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 初期状態が次のようになっている8パズルがある。 これを状態空間で表して、初期状態を2回展開して得られる全ての状態に対して、 縦型探索により解を求めよ。 <初期状態(○は空)> 1 2 ○ 4 5 3 7 8 6 <目標状態> 1 2 3 4 5 6 7 8 ○ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Borland C [3.3] 言語:C [4] 期限:7月5日まで [5] その他の制限: プログラムのソースの他に解の探索経路も提出することになっているので、 探索経路も出力させなければならない。
802 :
デフォルトの名無しさん :2005/07/03(日) 15:49:43
実行
>>643 返事を待つのが面倒くさくなった
#include <stdio.h>
float avg(int n, float data, float old_avg) {
return (old_avg * (n - 1) + data) / n;
}
int main(void) {
float old_avg = 0., data;
int n = 0;
while (1) {
printf("入力:"); scanf("%f", &data); ++n;
if (data == 0.) break;
printf("平均:%f\n", old_avg = avg(n, data, old_avg));
}
return 0;
}
808 :
デフォルトの名無しさん :2005/07/03(日) 18:24:58
>>800 =
>>643 こんな感じでどうやろ?
#include <stdio.h>
float avg(int n,float in,float Avg){
double All=0;
if(n<1) return in;/*多分、一個目の呼び出しなので平均値無し。*/
All = Avg*n;/*合計値を復元。*/
return (All+in)/(n+1);/*さらに平均値にして返却。このとき割れない数字だと計算誤差が出る。w*/
}
int main(){
float Avg=0,In;
int N=0;
while(1){
puts("Input Type float");
scanf("%f",&In);
if(In == 0.0f) break;
Avg = avg(N++,In,Avg);
printf("Result No.%d:Ave(%f)\n",N,Avg);
}
puts("End");
return 0;
}
809 :
808 :2005/07/03(日) 18:28:07
810 :
12 :2005/07/03(日) 20:40:00
811 :
デフォルトの名無しさん :2005/07/03(日) 20:56:55
すいません期限はもぅちょいですが埋もれてしまうのが怖いチキンな私ですのでもう一度投稿させて下さい、なにとぞよろしくお願いします [1]C言語演習 [2]Gccコンパイラ [3]期限 7月6日水 [4]環境RedHat Linux 問題 メニュー表示をし,ステップ「1」として,関数y = 2x2において,x = 0 – 10 ま でを0.01 刻みで1001 個のx,yデータセットを作成して,ファイル名function.datで各自のホ ームディレクトリ(または,カレントディレクトリ)にバイナリ形式で保存する.ステ ップ「2」として,作成したfunction.datからn個目のx,yデータセットを抽出して,ファイ ル名n_xy_ascii.dat(nは入力した数字)としてASCII形式で保存する.以上の様に動作す るプログラムを作成しなさい よろしくお願いします
すまんがメニュー部を提示してくれんか?
授業でならっとるか、すでに提出した分のがあるはず
>>811
813 :
デフォルトの名無しさん :2005/07/03(日) 21:20:13
[1] 授業単元: C言語 [2] 問題文:データ構造 入力した文字列を、文字列の昇順になるようにリストに登録する [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン): VC++ 6.0 [3.3] 言語:C++[4] 期限:7月4日 実行は出来るのですが、データを入力してると(例:B、A、C) 問題が発生したため、c1005.exe を終了します。と出て 終わってしまいます、*の場所が多分何処か間違ってると思います ご教授お願いします
814 :
デフォルトの名無しさん :2005/07/03(日) 21:22:15
1-1 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct list{ charname[100]; struct list *next;//自己参照構造体 }NODE; void list_out(NODE *); void main(void) { NODE *new,*head,*p,*back; char name[100]; printf("***文字列の昇順に登録***\n"); printf("文字列入力 (CTRL+Zで終了)\n"); head=NULL;* while(printf("->"),gets(name) !=NULL){ new = (NODE *)malloc(sizeof(NODE)); if(new == NULL){ printf("メモリを確保できません!!\n"); exit(1); }
815 :
813 :2005/07/03(日) 21:22:51
1-2 strcpy(new->name,name);//文字列登録 if(head==NULL){*//リストの先頭なら /*ポインタのつなぎ換え*/ new->next=head;* head=new;* } else{ p=head;//挿入場所を探す while(p != NULL && strcmp(p->name,new->name) < 0){* back=p; p=p->next;* } /*ポイントのつなぎ替え*/ back->next=new;* new->next= p;* } } printf("\n***リストの内容***\n"); list_out(head);* } voidlist_out(NODE*p) { while(p!='\0'){ printf("%s\n",p->name); p=p->next; } }
816 :
811 :2005/07/03(日) 21:50:01
>>812 いえ、本当に何もないんです、、、いきなりこの課題だけをぽんと出された感じでして、、、(汗)
[1] 授業単元:プログラミング(C) [2] 問題文(含コード&リンク): 文字列を入力し、それを左右入れ替えて出力するプログラムを書け。 例えば、"ABCD"と入力したら"DCBA"と出力する [3] 環境 [3.1] OS:WindowsXP [3.2] コンパイラ(バージョン):VisualC++ [3.3] 言語:C [4] 期限:7/7 [5] その他の制限:関数は使わないでお願いします 簡単ですんません…
>>818 入力が 1000 番地から書き込まれていて、出力を 2000 番地から書き込むんだったら
int main(void){
char * in=(char *) 1000, * out=(char *) 2000;
char *p=in,*q=out;
while(*p++!='\0');
while(p>=in){
*q++=*p--;
}
q='\0';
return 0;
}
int mainも関数ですよ!
>>818 関数使いまくりですが初心者なので許してください(><)
#include <stdio.h>
int main(){
int i;
char str[250], *p;
p = str;
gets(str);
for (; *p; p++);
do {
p--;
putchar(*p);
} while (p != str);
putchar('\n');
return 0;
}
int i; は必要なかった(^^;)
>文字列を入力 関数無しでどうやれと? Cで >820 文字列として後ろからコピー、に失敗してるぞ(w
825 :
デフォルトの名無しさん :2005/07/04(月) 09:38:37
>>825 printf("(%3.1f,%3.1f)\n",d->x,d->y);
ネタか自作関数無しでmainのみか・・・818
最近C言語を始めた初心者ですが、次の問題をお願いします。 キーボードから入力された文字が文字列str内にあるかどうか判断し、存在すれば次の文字を入力させ、存在しなければプログラムを終了する。 文字列の定義 char str[]="ABCD"; 入力ー>A あります。 入力ー>D あります。 入力ー>E ありません。
830 :
デフォルトの名無しさん :2005/07/04(月) 11:24:35
[1] 授業単元: プログラミングとその応用 [2] 問題文(含コード&リンク): 次のような「エラトステネスのふるい」のアルゴリズムを用いて、n以下の素数を求めるプログラムを作成せよ。 1.S={2...n}という整数の集合を考える。 2.Sが空集合で無い限り、次の(1)〜(3)を繰り返す。 (1)mをSの要素の最小値とする。このときmは素数である。 (2)Am = {k|k=am,k∈S,a∈Z}とする (3)SからAmの要素を全て取り除いて、残りの集合をあらためてSとする [3] 環境 [3.1] OS:Windows/Linux/等々 :Linux [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C/C++/どちらでも可 のいずれか:C [4] 期限:できれば今日の6時まで… [5] その他の制限:授業では構造体を習いたてです。 市販の本などと同じ順番で習ってて、構造体の前までの課題です。 よろしくお願いします。
>>830 まだ6.5時間あるから必死こいて検索しろ。
>>828 >1を読んでテンプレを書くように。
こういうプリミティブな入力は、CとC++とでは教えることが随分変わるからな。
833 :
デフォルトの名無しさん :2005/07/04(月) 11:47:06
[1] 授業単元: C言語1 [2] 問題文(含コード&リンク): 1つ以上のファイル名を引数として、各ファイルの行数・単語数・バイト数、 および全ファイルの行数・単語数・バイト数のそれぞれの合計を表示するプログラムを作成せよ。 ※単語とは、「isspace()が真になる文字の列」で区切られている文字列であるとする。 isspace()を使うには、ctype.hをインクルードしておく必要がある。 想定される実行例 %wcount a.c b.c c.c d.c 行数 単語数 バイト数 ファイル名 100 211 1590 a.c 33 90 637 b.c 70 154 1069 c.c 171 474 3237 d.c 374 929 6533 合計 プログラム名をwcountとする。 [3] 環境 [3.1] OS:Windows/Linux/等々 :Linux [3.2] コンパイラ(バージョン): gcc [3.3] 言語:C/C++/どちらでも可 のいずれか:C [4] 期限:できるだけ早くお願いします。 [5] その他の制限:初歩的な内容は、一応ひととおり習いました。 マジ困ってるのでお願いします!
834 :
830 :2005/07/04(月) 11:48:23
>831 ほんとわからないんでお願いします…(´・ω・`)
>>834 ちょっとgcc使える環境にないんで検証はできないから思いついた流れだけ。
とりあえず元のSを格納した配列(Src[])と、Amを格納する配列(am[])
現在のSを示す配列(flags[])を用意して見つかったkは順次am[]に格納していって
src[]上でkに該当する要素のインデックスナンバーをflags[]に順次格納
んで条件分岐でflags[]にすでにあるのとかぶったらそれはなかったものとすれば
Amを取り除いたSを擬似的に作れないか?まぁ単なる思いつきだし、無駄がかなりあると思うが・・・
ガンガレ
>>834 一般的なエラトステネスの篩のソースなど、このスレでもgoogleでもいくらでも見つかるだろ。
そのうち、問題文の処理と同じような戦術を採っているものを探し出して適当に書き換えればいいと思うのだが。
>>828 #include <stdio.h>
#include <string.h>
int main(void) {
for (;;) {
int c; const char str[] = "ABCD";
printf("入力->");
while ((c = getchar()) != EOF && c == '\n') ;
if (c == EOF) return 1;
if (strchr(str, c)) puts("あります。");
else {puts("ありません。"); break;}
}
return 0;
}
840 :
デフォルトの名無しさん :2005/07/04(月) 13:48:37
age
841 :
? :2005/07/04(月) 14:29:07
[1] 授業単元: 線形代数学演習 [2] 問題文(含コード&リンク): n次正方行列の逆行列を余因子行列を経由して求め、 a11= ,a12= ,… a21= ,a22= ,… の形で表示させる。もとの行列の成分はscanf で取得する。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):bcc [3.3] 言語:C [4] 期限:早ければ早いほど
東京ディズニー・・・アンダーグラウンド?
東京電気アンダーグラウンド
>>841 で、あなたは何処?
略称。
846 :
841 :2005/07/04(月) 15:23:06
847 :
デフォルトの名無しさん :2005/07/04(月) 15:32:43
[1] 授業単元:proa [2] 問題文(含コード&リンク): リストのノード順序を,逆の順序にする関数. (データを入れ替えではなく、next の値の変更により,逆の順序にする) [3] 環境 [3.1] OS:vineLinux [3.2] コンパイラ(バージョgcc [3.3] 言語:C [4] 期限:2005年7月7日24:00まで お願いしますm(_ _)m
単方向だろうな。 双方向で逆順にするようなバカな問題はない。
853 :
デフォルトの名無しさん :2005/07/04(月) 18:00:08
[1] 授業単元: 回路解析特論 [2] 問題文(含コード&リンク): チョーク入力型全波整流回路において電源電流とダイオード通過後の電流をプログラムにより解析する。 電圧源は正弦波。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 期限:2005年07月06日12:00まで
[1] 授業単元: プログラミングT [2] 問題文(含コード&リンク): 符号なし整数xを右にnビット回転した値を返す関数rrotateと、 左にnビット回転した値を返す関数lrotate unsigned rrotate(unsigned x, int n) { /* ・・・ */ } unsigned lrotate(unsigned x, int n) { /* ・・・ */ } を作成せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):bcc [3.3] 言語:C [4] 期限:明後日 よろしくお願いします
/* 32bitInt限定、0 <= n < 32でのみ意味がある */ unsigned rrotate(unsigned x, int n) {return x >> n | x << (32 - n);} unsigned lrotate(unsigned x, int n) {return x << n | x >> (32 - n);}
>>854 #include <limits.h>
unsigned rrotate(unsigned x, int n) {
static const unsigned width = sizeof(unsigned) * CHAR_BIT;
return x << n % width | x >> (width - n % width);
}
unsigned lrotate(unsigned x, int n) {
static const unsigned width = sizeof(unsigned) * CHAR_BIT;
return x >> n % width | x << (width - n % width);
}
858 :
デフォルトの名無しさん :2005/07/04(月) 18:53:08
>Upper = Upper >> n; せめてUpper >>= n; とは書けなかったのだろうか。つーか、一時変数イラネ。
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 方形波と三角波を選択可能にして、選んだ信号を発生させるプログラムを作成せよ。( 1kHz) [3] 環境 [3.1] OS:Windows2000 [3.2] コンパイラ(バージョン): VC++ 6.0 [3.3] 言語:C++ [4] 期限:来週末まで [5] その他の制限: どうかよろしくお願いしますm(_ _)m
>>860 発生ってなんだよ。
なんか湧かすのか?
>>859 あんまりグチャグチャなコードは書きたくないんですよ。
読みやすいとは言いませんけど、自分で読みづらいコードはヤなんです。
まー、ほとんど癖なんですけどね〜。
WAVは勘弁な(w
>>863 a = a op b;
よりは、a op= b;
のほうが通常効率がよいし、普通の香具師にとっては読みやすい
両者の違いは特にC++で演算子オーバーロードされている場合に重要なので、
後者のように書ける場合には、後者のように書く癖をつけたほうがいいぞ。
866 :
デフォルトの名無しさん :2005/07/04(月) 19:42:02
#include <stdio.h> float avg(int ,float ,float ); main() { float x,y; int n; printf("データを入力してください!"); n=1; while(n){ printf("入力値%d= ",n); scanf("%f",&x); if(x == 0.0) break; n++; } float avg(int n,float x,float y) { float b; b = (x+y)/2; return b; } このプログラム回らないんですけど、 どうしたら、回りますか?? 教えてください。お願いします。
>>866 悪いことは言わない。一から勉強しなおせ
868 :
デフォルトの名無しさん :2005/07/04(月) 19:49:14
じゃ0から勉強しなおせ。 なんならマイナスでもいいんだぞ。
870 :
デフォルトの名無しさん :2005/07/04(月) 19:54:34
>>869 マイナスから、勉強してますが、なにか?
いやなにも・・・
>>865 そんなもんかな。
まー、一応気をつけることにするよ。
>>862 書き方が足りませんでした。
時刻と振幅の値をテキストに出力する形式でお願いします。
>>873 waveで鳴らすの作っちゃったオレはどうすればいいんだ?
やる気失せた・・・・・・・。
876 :
860 :2005/07/04(月) 20:06:47
877 :
デフォルトの名無しさん :2005/07/04(月) 20:30:58
1]授業単元:プログラミング演習 [2]問題文:多重リスト(二重)。各セルを構造体で表現し、表全体はリストによってセルを結合。セルの構造体は右および下のセルを示すポインタ変数2つと、セル値として保持する文字列へのポインタ変数1つを持つものとし、動的にメモリ領域を割り当てる。 [3]環境 [3.1]OS:Windows [3.2]コンパイラ cc [3.3]言語:C [4]期限:7月5日 10時 [5]その他の制限:・プログラムを起動すると、初期状態として、適当な行数x列数の表を生成する。この際、各セルの値は0とする。 ・コマンドによって、表の表示、行および列の追加、挿入、移動、削除、表の保存復元、ヘルプ、終了の各操作を行うものとする。 というものです。初期化まで、また関数ごとでUPしてくれてもかまいません。よろしくお願いします。
878 :
デフォルトの名無しさん :2005/07/04(月) 20:42:05
>>866 関数を引数をかいてないんじゃないのかい?
880 :
860 :2005/07/04(月) 21:23:09
>>879 ありがとうございます。まさかこんなに早くやっていただけるとは・・・。
助かりますm(_ _)m
881 :
名無しさん :2005/07/04(月) 21:31:36
[1] 授業単元: プログラム実習 [2] 問題文(含コード&リンク): 適当な自然数を入力し、素数判別をする。 素数でない場合、その数の約数は何でしょう?という 問題です。宜しくお願いします。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): MaicroSoft Visual C++ 6.0 [3.3] 言語:C++ [4] 期限:2005年7月7日23:59まで [5] その他の制限:どこまで習っているか、等々
>>877 行や列を挿入した場合、値はどうするんだ?
1行全て同じ値?
笑った
>>877 延長してもらったのか?もっと早く言ってくれ。。。
構文解析・算術評価の部分は出来てるから、がんばってやってみるが。
886 :
885 :2005/07/04(月) 21:48:56
あれ、問題が変わってるw 俺が手をつけた部分は無意味だったようだ。
887 :
名無しさん :2005/07/04(月) 21:51:10
MicroSoftでしたw 笑われちゃいますね…
889 :
名無しさん :2005/07/04(月) 21:56:59
ですね…
890 :
デフォルトの名無しさん :2005/07/04(月) 22:05:57
891 :
デフォルトの名無しさん :2005/07/04(月) 22:26:41
892 :
名無しさん :2005/07/04(月) 22:27:33
>>891 #include <stdio.h>
int main() {
printf("構造体に姓と血液型を追加");
return 0;
}
895 :
デフォルトの名無しさん :2005/07/04(月) 23:09:24
>>877 です。みなさんには迷惑をかけています。期限は延びました。最終的には
>>441 に書いてあるものなればいいのですが。
なんどもすいません。算術などはもちろんつけて欲しいです。
896 :
デフォルトの名無しさん :2005/07/04(月) 23:13:31
897 :
877 :2005/07/04(月) 23:18:45
>>885 期限は最大で7月6日まで延ばせるかもしれません。でもプログラムにレポートをつけないといけないので、限界で6日の12時くらいまでです。
1] 授業単元:制御理論 [2] 問題文(含コード&リンク):y''(t)+3y'(t)+4y(t)=u(t),y(0)=0 y(t)を出力せよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 期限:なし [5] その他の制限:差分方程式で近似する。逐次式を作る。・・・授業でC言語やってないんですけど宿題出ました。 お願いします。
899 :
877 :2005/07/04(月) 23:29:48
補足:コマンドについて1 p:表データ(全てのセル値、数式の場合には計算結果の値)を表示(表の形で)。 P(大文字):pと同様に表データを表示するが、数式の場合には計算結果の値ではなく、数式をそのまま表示する。 i:行または列を挿入する。行の場合には行番号(1,2...)を列の場合には列番号(A,B...)をそれぞれコマンド引数で指定する。たとえば"i B"とした場合には 現在の表のA列とB列の間に新たな列Bが挿入され、元のB列、C列...は列番号が一つずつずれてC列D列...となる。
てか
>>877 の課題は他のと比べて手軽にできるって課題じゃね〜なw
ぶっちゃけ今できてる所だけでも作ったソース出さんと間に合わないと思う
今まったく手付かずなら
>>885 に期待するしかないかなw
なんでこんな課題がでてるのか不思議だw
901 :
877 :2005/07/04(月) 23:37:47
補足:コマンドについて2 a:行または列を追加する。"a B"とした場合にはB列の後ろに新たな列を追加する。 d:行または列を削除する。"d B"とした場合にはB列を削除する。 m:行または列を移動する。ふたつの引数を用いる。"m B D"とした場合にはB列をD列の前に前に移動する。 s:外部ファイル表にデータを保存する。保存書式は任意。 o:sコマンドで保存した外部ファイルの読み込み、表を再構築する。 h:いわゆるヘルプコマンド。 q:プログラムを終了する。 だらだら書いてすみません。
>>897 &etc
小規模のソフト一本分位の労力がかかるので結構手間がかかる。
一日でできるか怪しいので自分でも対策を打ってくれ。
僕はもう力つきそうだよ。
903 :
902!=885 :2005/07/04(月) 23:40:05
あー作ってる人いるのか。
そっちに任せよう。
>>899 情報の後だし禁止。
或いは誰かがおおまかな仕様(リスト、セルの仕様とインターフェース)を決めて、 それぞれのメニュー項目ずつに分担するとかな。
関数を引数をかいてないんじゃないのかい?
906 :
デフォルトの名無しさん :2005/07/04(月) 23:50:43
[1] 授業単元: C [2] 問題文:十進数を二進数に変換するプログラム制作 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:2005/07/08 [5] do while,配列を使う。 もうお手上げです。 とりあえず計算は、数値を2で割り余りを記憶し、商が0になるまで 計算し0になったら余りを逆にすればいいということはわかりました。 でもプログラムできない・・・・超初心者です。
>>906 よく意味が分からんが、十進数で入力したのを
二進数で出力しろってこと?
数の進数なんか変換できないよ、表現上の問題だから。
できたとこまで揚げてみれば?
908 :
885 :2005/07/05(火) 00:02:11
なんか任されてるしw 俺のも完成するか分からんので言い訳を考えとくことを強く推奨。
909 :
906 :2005/07/05(火) 00:04:16
キーボードから与えられた数値を二進数表示させるプログラムをせいさくせよ。というものです。 Enter Number 25 25 = 11001 ↑みたいな感じになるプログラムです。 出来たところもなにも全くわからないのです(;_;
>>909 それはこういうプログラムかね?
#include <stdio.h>
char* to_2(unsigned x, char* s) {
int index = 0, left = 0;
char temp;
do s[index++] = (x & 1) + '0'; while (x >>= 1);
s[index--] = '\0';
while (left < index) {
temp = s[left];
s[left] = s[index];
s[index] = temp;
++left;
--index;
}
return s;
}
int main(void) {
unsigned x;
char s[256];
printf("Enter Number:"); scanf("%u", &x);
printf("%u = %s", x, to_2(x, s));
}
911 :
906 :2005/07/05(火) 00:24:03
>>910 ぬぉぉ。コンパイラしたら、その通りでした!!!
あまり習ってない用語もびっしり・・・難しそう・・・
プログラム引数?っていうのですかね、それを使わなくても出来ますか?この処理は?
>>906 結果の2進数を整数値で出すかcharで出すかで変わってくるんだが
charの場合だと
c(char型) v(INT型)ってすると
c= v+'0'ってすれば文字列になる ポインタか配列でまわせば普通に文字列なる
で最後に\0は絶対いれてね 文字列終わらないから
INTで出さないといけない場合は…
配列で結果を取り込んで一桁目の結果×1(10^0) 2桁目の結果×10(10^1)…
って足し算かな?Cだと^で累乗計算じゃないから関数使わんといけないけど
こんな感じでどう?
913 :
910 :2005/07/05(火) 00:30:54
>>911 まぁ落ち着け。コンパイラするって…「コンパイル」ね。言われた通り、
do〜whileと配列とを使っているだけ。あと、2進数って言うことだったから
2進数独特の処理になってる。もうちょっと教育的にすると(多分)次のように
なるハズ。
char* to_2(unsigned x, char* s) {
int index = 0, left = 0;
char temp;
do {
s[index++] = x % 2 + '0';
x = x / 2;
} while (x != 0);
s[index--] = '\0';
while (left < index) {
temp = s[left];
s[left] = s[index];
s[index] = temp;
++left;
--index;
}
return s;
}
あら?整数で出すのかいてたら文字列で出すのもう出てたな
多分
>>910 が課題出した人の意図だと思うよ
915 :
877 :2005/07/05(火) 00:38:33
>>885 期待しています。できるとこまででもいいのでお願いします。
916 :
906 :2005/07/05(火) 01:05:15
>>910 ご丁寧に有難うございます。
教育的というのはどのような意味なのでしょうか?
918 :
910 :2005/07/05(火) 07:31:09
>>916 教育的ってのは、基礎的・基本的っていう意図で書いた。
考え方をそのままコードにしたらってこと。
919 :
デフォルトの名無しさん :2005/07/05(火) 09:05:52
1] 授業単元:c++ [2] aを入力してS=1/1+(1-2)/2+(1-2+3)/3.....(1-2+3-4......a)/aを表示するプログラム aを入力してS=1/1+(1*2)/2+(1*2/3)/3.....(1*2/3*4......a)/aを表示するプログラム [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C++ [4] 期限:今日の9時半まで [5] その他の制限:FOR文つかうっぽい すいません。時間があまりないのですが少し遅れてもいいのでお願いしますm(_ _)m もう全然わかりません・・・
920 :
デフォルトの名無しさん :2005/07/05(火) 09:12:48
age
921 :
デフォルトの名無しさん :2005/07/05(火) 09:23:22
922 :
919 :2005/07/05(火) 09:53:42
期限過ぎてもいいのでお願いします。 ボーランドのC++です
>>919 int main( void )
{
double S, n;
int a, i, j;
//
printf( "a = " ); scanf( "%d", &a );
for ( S = 0.0, i = 1; i <= a; i++ ) { for ( n = 0.0, j = 1; j <= i; j++ ) if ( j % 2 ) n += ( double )j; else n -= ( double )j; S += n / ( double )i; }
printf( "S = %f\n", S );
//
printf( "a = " ); scanf( "%d", &a );
for ( S = 0.0, i = 1; i <= a; i++ ) { for ( n = 1.0, j = 1; j <= i; j++ ) if ( j % 2 ) n /= ( double )j; else n *= ( double )j; S += n / ( double )i; }
printf( "S = %f\n", S );
return 0;
}
[1]授業単元:プログラミング中級 [2]問題文:1000以下の素数で、足しあわせると1000になるような二つの素数の組をすべて求めるプログラムを作れ [3]環境 [3.1]OS:UNIX [3.2]コンパイラ:gcc [3.3]言語:C [4]期限:7/8 [5]制限特に無し よろしくお願いします
[1] 授業単元: プログラミング [2] 問題文(含コード&リンク): 代数方程式f(x)=x^3+2x^2+2x+2=0の区間[-2,0]における実数解を求めよ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC++ 6.0 [3.3] 言語:C++ [4] 期限:来週まで [5] その他の制限: なんとか、よろしくお願いします。
927 :
919 :2005/07/05(火) 11:38:15
すいません。せっかく作ってもらったところですがリザルトやnumなど まだ習ってないのでそれを使用しないでお願いしますm(__)m
>>927 resultやnumは変数名なので、どんな名前でもいいんですが。
>>927 result,numの扱われ方を見れ
それでも変数だとわからないなら、一から勉強しれ
笑った
931 :
919 :2005/07/05(火) 12:06:24
(´・ω・)あらら。ケータイからなんで詳しく見てなかった。
932 :
デフォルトの名無しさん :2005/07/05(火) 12:30:44
このごろネタなのかゆとり教育の犠牲者か判らない奴が殖えたな。
このごろゆとり教育という言葉を使いたがる奴も殖えたな。
まぁバカって言ったら可愛そうだからな。文部省の犠牲者と言い換えてもかまわんよ
プログラムに興味はないが単位は欲しいってヤツからすればそんなもんじゃないか?
936 :
デフォルトの名無しさん :2005/07/05(火) 14:05:23
簡単に答えられる奴はきもい。
簡単に答えられなくてきもいオレはどうすればいいんだ。
940 :
デフォルトの名無しさん :2005/07/05(火) 18:36:26
941 :
877 :2005/07/05(火) 18:36:31
>>885 そろそろレポートのほうも書かないといけないので、できた部分まででもいので夜にでもUPしてくれませんか?
943 :
デフォルトの名無しさん :2005/07/05(火) 18:39:43
[1]授業単元:プログラミング [2]問題文:二つの整数の最大公約数を再帰を使って求めよ [3]環境 [3.1]OS:INUX [3.2]コンパイラ:gcc [3.3]言語:C [4]期限:7/10 よろしくお願いします
944 :
デフォルトの名無しさん :2005/07/05(火) 18:41:46
ずいぶんトイレっぽいOSだなと思った
>>940 ゆとり教育世代の程度が総じて低いなら、大学の講義も学生にあわせて程度が低くなる。
947 :
デフォルトの名無しさん :2005/07/05(火) 19:19:36
>>946 大学は講義のレベルを下げるようなことはしない。
日本の大学の程度が低いのなんて 明治時代からだろ
大学なんてのは学生が勉強するとこじゃなくて教授の職場だろ?
大学なんてのは学生が勉強するとこじゃなくて教授の遊び場だろ?
三流大学なら仕方ないな。
名門でも三流でも同じだって。 名門大学では、大抵の場合、学生の大半がちゃんと理解しているから、講義の程度が変わらないというだけであって。 どんな大学の講義でも、大半の学生が理解してなさそうなことは、ちゃんと解説しているだろう?
>>948 日本の大学の程度が低くなったのは戦後だよ。
= = = = = = = 終 了 = = = = = = = = 続ける場合は学歴板
>>943 #include <stdio.h>
#include <stdlib.h>
int gdc(int m, int n) {
if ((m % n) == 0) {
return n;
} else {
return gdc(n, (m % n));
}
}
int main(int argc, char **argv) {
int num1 = 12;
int num2 = 8;
printf("gdc(%d,%d) = %d\n", num1, num2, gdc(num1, num2));
return 0;
}
957 :
891 :2005/07/05(火) 20:17:29
>>894 さん、ありがとうございましたm(_ _)m
<<926 #include<iostream> int main(void){ std::cout << -1.543689013 <<std::endl; return 0; }
>>926 #include <stdio.h>
int main()
{
double x1, x0 = -1.0;
double limit = 1.0e-20;
double diff = 1.0;
while(diff > limit)
{
x1 = x0 - ( x0 * (x0 + 2) + 2 + (2 / x0)) / (3 * x0 + 4 + (2/x0) );
diff = x1 > x0 ? x1 - x0 : x0 - x1;
x0 = x1;
}
printf("ans : x = %g\n", x1);
return 0;
}
961 :
960 :2005/07/05(火) 21:04:08
10桁未満じゃ詰まらんな。 > printf("ans : x = %g\n", x1); を > printf("ans : x = %.20f\n", x1); とでもして、表示桁数増やしてくれ。
>>926 #include <iostream>
double f(double x) { return ((x+2)*x+2)*x+2; }
double s(double x, double gp)
{ return gp*gp > 1e-20 ? s(x + gp, f(x) * f(x+gp) < 0 ? -gp/2 : gp) : x; }
int main(void) { std::cout << s(0, -2) << endl; }
×endl ○std::endl
964 :
960 :2005/07/05(火) 21:17:27
あ、C++だったか。
965 :
926 :2005/07/05(火) 22:20:35
[1] 授業単元: C/C++ [2] 問題文(含コード&リンク): 引数として2進数を文字列で渡すと、 16進数に変換し、文字列として返す関数を作る。 同様に引数を16進数、戻値を2進数で返す関数も作る。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): VC++6.0 [3.3] 言語:C/C++/ [4] 期限:7月9日 [5] その他の制限: 文字列の扱いがどうにもわかりません・・・。 どうかよろしくお願いします。
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 任意の整数nまでの和S(n)を求めるプログラムを再起的に関数を呼び出す形で書け [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月7日まで [5] その他の制限: おねがいします
>>967 整数じゃなくて自然数だが
#include <stdio.h>
int sum(int n)
{
if (n == 0) return 0;
else if (n == 1) return 1;
return sum(n-1) + n;
}
main() { printf("%d\n", sum(10)); }
復活の埋蔵金!! でもあと30個はきついよ。
> else if (n == 1) return 1; 不要
972 :
2/1 :2005/07/06(水) 01:20:40
>>966 #include <string>
#include <sstream>
using namespace std;
bool in_range(char x, char a, char b){ return x >= a && x <= b;}
// 2進→16進
string bin2hex(const string &src)
{
stringstream ss;
int tmp = 0;
int limit2 = src.size() % 4;
int limit1 = src.size() / 4 + (limit2 ? 1 : 0);
if( limit2 == 0 ) limit2 = 4;
for(int i = 0; i < limit1; ++i, limit2 = 4)
{
for(int j = 0; j < limit2; ++j)
{
if( ! in_range(src[j], '0', '1') ) throw string("bin2hex format error");
tmp = ( tmp << 1 ) | (src[j] - '0');
if( j % limit2 == (limit2-1) )
{
ss << hex << tmp;
tmp = 0;
}
}
}
return ss.str();
}
973 :
2/2 :2005/07/06(水) 01:20:51
// 16進→2進 string hex2bin(const string &src) { stringstream ss; for(int i = 0; i < src.size(); ++i) { char ch = -1; if( in_range(src[i], '0', '9') ) ch = src[i] - '0'; else if( in_range(tolower(src[i]), 'a', 'f') ) ch = tolower(src[i]) - 'a' + 0xa; else throw string("hex2bin format error"); for(unsigned char mask = 1 << 3; mask != 0; mask >>= 1) ss << !!(ch & mask); } return ss.str(); }
[1] 授業単元:プログラミング [2] 問題文(含コード&リンク): 2人が互いに座標を指定していくような○×クイズのプログラムをつくれ。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C [4] 期限:7月7日 [5] その他の制限: 1年生なんですが、全くわかりません・・・orz よろしくお願いします!
あ、ちなみに3×3の○×クイズです! 座標というのは 1、3と入力したら左下、 2、2と入力したら真ん中にマークがつくということらしいです。
>>974 =975
貴様はまず○×クイズというものを知れ。プログラムより前に。
[1] 授業単元:プログラミング(C言語) [2] 問題文(含コード&リンク): 下記のような整数型配列において、以下の処理を行うプログラムの作成。 処理を行った後、配列の内容を出力する #define YOUSO 10 int a[YOUSO] = {2,4,6,8,10,12,14,16,18,20} ; int b[YOUSO] = {3,6,9,12,15,18,21,24,27,30} ; (1)配列aの要素をすべて配列bに転送する (2)b=a+bを配列内の要素毎に行う (3)配列aの配列内順序を逆にして、配列bに転送する (4)配列aと配列bの各要素を交換する 以上の処理を1つのプログラムで行うものを作れ、とのことです [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン): [3.3] 言語:C/ [4] 期限:7月8日まで [5] その他の制限:どこまで習っているか、等々 配列処理までです もうなにがなんだかわけわからなくなってだめぽ、状態です ほとんど丸投げで申し訳ないですがどうぞ力を貸してください
これはクイズじゃないからな、念のため ○│×│○ ─┼─┼─ ×│○│○ ─┼─┼─ ×│○│×
980 :
デフォルトの名無しさん :2005/07/06(水) 07:09:21
>>980 素早いレスdクスです!
でも、明らかにまだ習ってない関数が使われてるようです・・
関数、ポインタはまだ習ってませんorz
こちらの情報が少なすぎたみたいですいません!
>>972 うわー、なるほど。
ありがとうございました
983 :
デフォルトの名無しさん :2005/07/06(水) 10:08:39
[1] 授業単元:プログラミングC言語 [2] 問題文(含コード&リンク): int型整数の三乗値を返す関数はint cube(int x) {/*・・・*/} を作成せよ [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン): [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 期限:今日午後一時まで
マルチUzeeeeeeeeeeeeeeee
(ノ・ェ・ヽ) キューン U U
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
>>968 のS(n)は
S(1) S(2) S(3) S(4)
。 。 。 。
。。 。。 。。
。。。 。。。
。。。。
と並べることでわかるように三角関数と呼ばれる。
このようなひと目でわかる出力する関数を付け加えよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ(バージョン):
[3.3] 言語:C
[4] 期限:7月7日
[5] その他の制限:
宜しくおねがいします
988 :
デフォルトの名無しさん :2005/07/06(水) 11:00:17
[1] 授業単元:プログラミング演習I [2] 問題文: 65 91 39 31 55 76 55 52 63 71 39 38 60 59 65 70 45 51 61 44 -1 上のデータ(一番最後の -1 はデータの終りを表すものとする。)を main() 関数などで適当な実数配列 a に読み込んだとしよう。このとき配列 a[] とその要素数 n を関数の引数として渡すことによって平均、標準偏差、最高点、最低点が計算できる。 そこで、 a の平均点を求める関数: double mean( double a[], int n ) a の標準偏差を求める関数: double stddev( double a[], int n ) a の最高点を求める関数: double max_array( double a[], int n ) a の最低点を求める関数: double min_array( double a[], int n ); を作成し、これらの関数の返してきた値を表示しなさい。 [3] 環境 [3.1] OS:Linux [3.2] コンパイラ(バージョン):gcc [3.3] 言語:C [4] 期限:7/12まで [5] その他の制限:「関数と配列について」まで習いました。構造体などはまだ習っていません。 データを読み込む前のプログラムだけでいいので、どなたかご教授お願いします。
>>987 なにがなんだかさっぱりわからん
その図からひと目ではなにもわからん
三角関数ってsinとかcosだろ?
もしかして、こうか?
S(1) S(2) S(3) S(4)
。 。 。 。
。。 。。 。。
。。。 。。。
。。。。
[1] C言語 [2] 100桁同士の正整数の積を 「筆算をまねる方法(1桁ずつ乗算)」 を用いて計算するプログラムを作成せよ. プログラムは以下の仕様に従うこと: プログラムは,標準入力から 100 桁以下の正整数を2つ受け取り, その積を標準出力に出力する. 例: % ./bignum1 123456 123 15185088 [3] OS:Linux [4] 期限:7/8(金)午後一時まで [5]雛形はあるので、雛形の「// ここを頑張ってつくる」 のところをお願いします
#include <stdio.h> #include <string.h> #define MAX_FIGS 200 // 最大桁数 (100桁*100桁の計算は200桁まで) // 長大数を表す構造体 typedef struct { char fig[MAX_FIGS]; // 長大数を各桁ごとに格納 int numFigs; // 最大桁数 } BIGNUM; void readBigNum(BIGNUM *n); void printBigNum(BIGNUM *n); int main(int argc, char *argv[]) { BIGNUM x, y; readBigNum(&x); readBigNum(&y); // ここを頑張ってつくる return 0; }
/* 標準入力から長大数を1つ読み込む * 引数: n - 長大数へのポインタ(格納先)*/ void readBigNum(BIGNUM *n) { int i, j; char str[MAX_FIGS]; // 読み込み scanf("%s\n", str); // 長大数に変換する // 長大数 n の初期化 bzero(n, sizeof(BIGNUM)); // 下位の桁から順次取り出す for (i=strlen(str)-1, j=0; i >= 0; i--, j++) n->fig[j] = str[i] - '0'; // 最大桁数 n->numFigs = j; }
/* * 長大数を標準出力へ書き出す * 引数: n - 長大数へのポインタ */ void printBigNum(BIGNUM *n) { int i; // 先頭の0は無視する for (i=n->numFigs - 1; i >= 1; i--) if (n->fig[i] != 0) break; // 長大数の表示 for ( ; i >= 0; i--) printf("%c", n->fig[i] + '0'); printf("\n"); }
995 :
ななすぃ :2005/07/06(水) 11:39:02
[1] 授業単元:プログラミングC言語 [2] 問題文(含コード&リンク):配列のデータ構造を実現するプログラムを 数パターン作成する ・データの挿入、削除、表示が可能であること。 ・配列に代入するデータは整数型とする。 ・プログラムの仕様(関数への入出力、表示方法など)は自由とする [3] 環境 [3.1] OS:Windows [3.2] コンパイラ(バージョン):Borland C++ Compiler5.5 [3.3] 言語:C/C++/どちらでも可 のいずれか [4] 期限:7月9日昼まで [5] その他: できるだけ早くお願いします。それとよろしければ簡単な注釈 も書いていただければうれしいです。
>>989 それです。
図が変になってしまってすいません。
>>990 BIGNUM * multiplyBigNums( const BIGNUM * x, const BIGNUM * y, BIGNUM * z );
int main()
{
:
// ここを頑張ってつくる
multiplyBigNums( &x, &y, &z );
printBigNum( &z );
return 0;
}
BIGNUM * multiplyBigNums( const BIGNUM * x, const BIGNUM * y, BIGNUM * z )
{
int i, j, k;
memset( z, 0, sizeof( BIGNUM ) );
z->numFigs = x->numFigs + y->numFigs;
for ( i = 0; i < x->numFigs; i ++ )
for ( j = 0; j < y->numFigs; j ++ )
{
k = i + j;
z->fig[ k ] += x->fig[ i ] * y->fig[ j ];
z->fig[ k + 1 ] += z->fig[ k ] / 10;
z->fig[ k ] %= 10;
}
return z;
}
999 :
デフォルトの名無しさん :2005/07/06(水) 12:44:44
999
1000 :
デフォルトの名無しさん :2005/07/06(水) 12:44:59
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。