C/C++の宿題を片付けます 97代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/10/09(火) 22:40:13【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
0002デフォルトの名無しさん
2007/10/09(火) 23:02:39環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0003デフォルトの名無しさん
2007/10/10(水) 00:45:520004デフォルトの名無しさん
2007/10/10(水) 00:47:08読みにくいから引用符くらい覚えてよ
0005デフォルトの名無しさん
2007/10/10(水) 05:26:430006デフォルトの名無しさん
2007/10/10(水) 06:02:23[2] 問題文:5人の名前(文字の1or2次元変数)とその年齢(1次元変数)を
入力し、それぞれの名前と年齢の文だけ「誕生日おめでとう」と表示する。
5人の名前と年齢は、『東郷=1歳』,『猛田=2歳』,『友沢=3歳』,『六道=4歳』,『矢部=5歳』にします
(表示例)
○○さん、
誕生日おめでとう
誕生日おめでとう
△△さん、
誕生日おめでとう
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2007年10月11日まで]
[5] その他の制限: for,if,caseなどは習いました。
PADも書かないといけないのでできるだけ簡単なのでお願いします。
0007デフォルトの名無しさん
2007/10/10(水) 07:48:56年齢の数と同じ回数だけ「誕生日おめでとう」と表示するんだな。
0008デフォルトの名無しさん
2007/10/10(水) 08:48:53#include <stdio.h>
#define NIN 5
#define LEN 4
int main(void)
{
char Name[LEN+1][NIN];
int i, j, Age[NIN];
for(i=0; i!=NIN; i++)
{
puts("名前を入力しなさい.");
scanf("%s", Name[i]);
puts("年齢を入力しなさい.");
scanf("%d", &Age[i]);
}
for(i=0; i!=NIN; i++)
{
printf("%sさん、\n", Name[i]);
for(j=0; j!=Age[i]; j++)
{
puts("誕生日おめでとう");
}
}
return 0;
}
0009デフォルトの名無しさん
2007/10/10(水) 09:28:27[2] 問題文(含コード&リンク):
与えられた整数値の階乗を計算する関数を作成しなさい。
ただし整数値はint型で受け取るものとし、結果は文字列としてchar型配列で返すこと。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: 任意
[3.3] 言語: C
[4] 期限: 無期限
[5] 備考:いや、宿題じゃないんだけどね。
暇つぶしにどうぞ。
0010デフォルトの名無しさん
2007/10/10(水) 10:24:58分かると思うけど、結果がintの範囲を越える場合も考慮してください
0011デフォルトの名無しさん
2007/10/10(水) 10:39:410012デフォルトの名無しさん
2007/10/10(水) 11:18:02Cでもライブラリがそこら辺にゴロゴロしてるけど
00139
2007/10/10(水) 11:24:240014デフォルトの名無しさん
2007/10/10(水) 11:58:46面倒臭いからここでも見ろ
0015デフォルトの名無しさん
2007/10/10(水) 12:35:240016デフォルトの名無しさん
2007/10/10(水) 13:27:46(・∀・)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5040.txt
実行例
$ ./a.exe
value: 1234567
1234567! = 762078456028
うちのボロPCではこれ以上の桁を計算させるのは可哀想・・・orz
0017デフォルトの名無しさん
2007/10/10(水) 13:33:19あっ、ごめ。階乗って 1 * 2 * 3 * ... だった・・・orz
0018デフォルトの名無しさん
2007/10/10(水) 14:15:30[2] 問題文(含コード&リンク):
1から10までの和や1から100までの和を表示させるプログラムを作成せよ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C++
[4] 期限: 10月10日まで
[5] その他の制限:宜しくお願いします
0019デフォルトの名無しさん
2007/10/10(水) 14:15:51(・∀・)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5042.txt
掛け算を足し算のループで・・・ださっw
$ time ./a.exe
value: 123
123! = 1214630436702532967576624324188129585545421708848338231532891816182923589
23621676688311569606126402021707358352212940477825910915704116514721860295199062
61646730733907419814952960000000000000000000000000000
real 0m3.146s
user 0m1.483s
sys 0m0.030s
0020デフォルトの名無しさん
2007/10/10(水) 14:17:28>>16 が、ちょうど階乗を間違って 1 + 2 + 3 ... + n として作ったプログラムです。
002118
2007/10/10(水) 14:20:458.c 85: Warning: function 'snprintf' undefined -- assumed to be int
このようなエラーが出ました。
0022デフォルトの名無しさん
2007/10/10(水) 14:30:14#include <iostream>
int main()
{
int n, sum = 0;
std::cin >> n;
while(n) sum += n--;
std::cout << sum;
return 0;
}
0023デフォルトの名無しさん
2007/10/10(水) 14:30:54階乗と勘違いして作ったやつなので、関数名とか変えないと頭が弱い子だと思われちゃうよw
コンパイルエラーの件は、これでなんとかなるはず。
--- g.c.orig 2007-10-10 14:28:53.265625000 +0900
+++ g.c 2007-10-10 14:28:54.937500000 +0900
@@ -8,7 +8,7 @@
/*
* なぜか私の環境では memmove でオーバラップしたメモリの転送ができなかったので自作
*/
-inline void memmove_ol(char *s1, char* s2, size_t n) {
+static void memmove_ol(char *s1, char* s2, size_t n) {
int i;
for (i = n; i >= 0; i--) s2[i] = s1[i];
s1[0] = ' ';
@@ -54,7 +54,7 @@
big_integer_t current, result = { "0" };
for (i = 1; i <= value; i++) {
- snprintf(current.value, sizeof(current.value), "%d", i);
+ sprintf(current.value, "%d", i);
result = add_big_integer(¤t, &result);
0024デフォルトの名無しさん
2007/10/10(水) 14:34:00あ、C++だったのね。
>>20,23 は無視して下さい。
0025デフォルトの名無しさん
2007/10/10(水) 14:36:48よくこうなってるの見るけど、大学側がバカなのか本人がバカなのかどっちなんだろ。
0026デフォルトの名無しさん
2007/10/10(水) 14:41:08C言語で書くとCPUのキャリーフラグを扱えないので一工夫必要だし
効率も少し悪くなるな。
0027デフォルトの名無しさん
2007/10/10(水) 14:48:58検算のために ruby で階乗させたら圧倒的に速かった・・・orz
0028デフォルトの名無しさん
2007/10/10(水) 15:00:430029デフォルトの名無しさん
2007/10/10(水) 15:03:38関数は char* f(int n){} でたのむ
0030デフォルトの名無しさん
2007/10/10(水) 15:19:59a = 123456789 と b = (2の12乗 *17 ) をかける場合
aに17を掛けて12ビットシフトする様にしたら速いかなあ
0031デフォルトの名無しさん
2007/10/10(水) 15:22:43n の取りうる範囲は INT_MAX ?
0032デフォルトの名無しさん
2007/10/10(水) 15:24:59intelCPUなら遅くなるはず
003329
2007/10/10(水) 15:36:280034 ◆JdKMFRogo6
2007/10/10(水) 16:12:04[2] 問題文(含コード&リンク):
処理の前後で clock() の値を保存しておき、その差をとり、プログラムの実行時間を求めよ。
[3] 環境
[3.1] OS: Windows XP
[3.2] VC
[3.3] 言語: C++
[4] 期限: 10月14日
[5] その他の制限:
include<time.h>を用いる。
int t1, t2, t0;
t1 =???
処理 (この部分は何でもかまいません)
t2 =???
t0 = t2 - t1;
???(結果表示の文、できれば秒単位で少数の2,3桁まで)
制限というかイメージ的には、こんな感じかなぁとは思うのですが式がわかりませんでした。
大変お手数ですが、よろしくお願いいたします 。
0035デフォルトの名無しさん
2007/10/10(水) 16:13:570036デフォルトの名無しさん
2007/10/10(水) 16:18:12{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 93, 3262, 1544, 3944, 1526, 8169, 9238, 8562, 6670, 490, 71
59, 6826, 4381, 6214, 6859, 2963, 8952, 1759, 9993, 2299, 1560, 8941, 4639, 7615
, 6518, 2862, 5369, 7920, 8272, 2375, 8251, 1852, 1091, 6864, 0, 0, 0, 0, 0, 0}
0037デフォルトの名無しさん
2007/10/10(水) 16:19:02基数は10000な
0038デフォルトの名無しさん
2007/10/10(水) 16:21:44{0, 0, 0, 0, 0, 0, 788, 6578, 6736, 4790, 5035, 5236, 3213, 9321, 8506, 2295, 1359, 7768, 7173, 2632,
9474, 2533, 2443, 5944, 9963, 4033, 4292, 304, 2840, 1198, 4623, 9041, 7721, 2138, 9196, 3883, 257,
6427, 9024, 2637, 1050, 6192, 6624, 9528, 2993, 1113, 4628, 5727, 763, 3172, 3739, 6988, 9439, 2244,
5621, 4516, 6424, 254, 332, 9186, 4131, 2274, 2829, 4853, 2775, 2424, 2407, 5739, 324, 321, 2574, 557,
9568, 6602, 2603, 1904, 1703, 2406, 2351, 7008, 5879, 6178, 9222, 2278, 9623, 7038, 9737, 4720,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
0039デフォルトの名無しさん
2007/10/10(水) 16:30:000040デフォルトの名無しさん
2007/10/10(水) 16:35:17内部的に10000進数表現をunsigned intの配列にして保持してるから,
基本的にO(log(n))くらいか?
0041デフォルトの名無しさん
2007/10/10(水) 16:43:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5043.zip
gcc integer.c test.c -o a
a 200
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ........................................................................................................
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7
88, 6578, 6736, 4790, 5035, 5236, 3213, 9321, 8506, 2295, 1359, 7768, 7173, 2632
, 9474, 2533, 2443, 5944, 9963, 4033, 4292, 304, 2840, 1198, 4623, 9041, 7721, 2
138, 9196, 3883, 257, 6427, 9024, 2637, 1050, 6192, 6624, 9528, 2993, 1113, 4628
, 5727, 763, 3172, 3739, 6988, 9439, 2244, 5621, 4516, 6424, 254, 332, 9186, 413
1, 2274, 2829, 4853, 2775, 2424, 2407, 5739, 324, 321, 2574, 557, 9568, 6602, 26
03, 1904, 1703, 2406, 2351, 7008, 5879, 6178, 9222, 2278, 9623, 7038, 9737, 4720
, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
0042デフォルトの名無しさん
2007/10/10(水) 16:58:03#include <time.h>
#include <stdio.h>
int main() {
int i;
clock_t c = clock();
for (i = 0; i < 1000000000; i++)
continue;
printf("%.3f", (double)(clock() - c) / CLOCKS_PER_SEC);
return 0;
}
0044デフォルトの名無しさん
2007/10/10(水) 17:56:48こちらこそ暇を持て余しておりましたので、楽しかったです。
また、お題を下さい。
0045デフォルトの名無しさん
2007/10/10(水) 18:07:28[1] 授業単元:
[2] 問題文(含コード&リンク):
全角半角混合の文字列に含まれる半角文字を全角文字に変換せよ.
[3] 環境
[3.1] OS: XP sp2
[3.2] コンパイラ名とバージョン: VC++ 6.0
[3.3] 言語: C++
[4] 期限: 改めて明日
0046デフォルトの名無しさん
2007/10/10(水) 18:08:26授業単元:プログラミング�T
問題文:下図の左のグラフ(頂点と辺からなる図)で、出発点を1とする一筆書きの書き順を全パターン生成しなさい。
期限:無期限
この課題は既に提出済みなので、期限は存在しません。
ここにお願いしましたのは、今後の勉強のために、皆様にご指導いただけたらと思った次第であります。
アップロードしたファイルの中身は
・問題の詳細(画面をキャプチャしたファイルです)
・自分が作ったソースコード
・問題に対する考察
などが入っています。
添削や別解の案などがありましたらご教授下さい。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5033.zip
0047デフォルトの名無しさん
2007/10/10(水) 18:18:58[2] 問題文(含コード&リンク):int a[]={-2,-3,0,1,5,3}という配列がある。この配列から正の数(0は含まない)のみを小さい順に取り出せ。また、どこから取り出したかわかるように取り出したところには変わりに0を入れよ。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C言語
[4] 期限:明日まで
[5] その他の制限:
実行例
数:-2,-3,0,1,5,3
1を取り出しました
数:-2,-3,0,0,5,3
3を取り出しました
数:-2,-3,0,0,5,0
5を取り出しました
数:-2,-3,0,0,0,0
もう正の数はありません。
0048デフォルトの名無しさん
2007/10/10(水) 18:48:06[2] 問題文(含コード&リンク):
各辺が確率的に結ばれるグラフ(ランダムグラフ)を確率ごとに100個ずつ作りファイルに入れ、それが連結か否かを判定するプログラミングを作りなさい
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0)
[3.3] 言語:C
[4] 期限: 2007年10月22日12時まで
[5] その他の制限: 制限なし
0049デフォルトの名無しさん
2007/10/10(水) 18:54:32#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define POINT_NUM 2
int main(void){
FILE *fp;
int i, j, r;
char filename[FILENAME_MAX+1];
srand(time(NULL));
for(r=0;r<100;r++){
sprintf(filename, "out%03d.txt", r);
fp=fopen(filename, "w");
if(fp==NULL) return 1;
for(i=0;i<POINT_NUM;i++)
for(j=i+1;j<POINT_NUM;j++)
if((rand()%100)<r){
fprintf(fp, "%d - %d\n", i, j);
printf("%s : 連結\n", filename); // <- ガンバレ
}
fclose(fp);
}
return 0;
}
0050デフォルトの名無しさん
2007/10/10(水) 19:02:47#include <stdio.h>
int main(void)
{
int a[] = {-2,-3,0,1,5,3};
int i, size = sizeof a / sizeof *a, min, index;
while(1) {
printf("数:%d", a[0]);
for(i=1; i<size; i++) printf(",%d", a[i]);
putchar('\n');
min = 0;
for(i=0; i<size; i++) {
if(a[i] > 0) break;
}
if(i==size) break;
min = a[i];
index = i;
for(i++; i<size; i++) {
if(a[i]> 0 && a[i] < min) {
min = a[i];
index = i;
}
}
a[index] = 0;
printf("%dを取り出しました\n", min);
}
printf("もう正の数はありません。\n");
return 0;
}
0051 ◆JdKMFRogo6
2007/10/10(水) 20:20:41ありがとうございます!
ソース等よく読んで理解できるようになるよう頑張ります。
0052デフォルトの名無しさん
2007/10/10(水) 21:33:58永久ループ使ってないからダメなんじゃ?
0053デフォルトの名無しさん
2007/10/10(水) 22:03:52ほんまやね。あれダメだ。本人より。
0054デフォルトの名無しさん
2007/10/10(水) 22:06:530055デフォルトの名無しさん
2007/10/10(水) 22:25:580056デフォルトの名無しさん
2007/10/10(水) 22:45:15[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
キーボードから次元Nを入力したあと、N*N行列AとN次元ベクトルxのデータを要素ごとにキーボードから入力し、Axを計算するプログラムを完成させよ。
[3] 環境
[3.1] OS:UNIX系端末
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年10月11日21:00まで
[5] その他の制限:ポインタと関数malloc()を使う。
0057デフォルトの名無しさん
2007/10/10(水) 22:50:44> Axを計算する
わけわからん
0058デフォルトの名無しさん
2007/10/10(水) 22:51:15>>57わけわかった
0059デフォルトの名無しさん
2007/10/10(水) 23:02:07前スレ 316 に下記を追加でおk
int main(void){
matrix_t *A, *x, *Ax;
int N, col, row;
printf("Size N:");
scanf("%d", &N);
A=matrix_alloc(N, N);
x=matrix_alloc(N, 1);
for(col=0;col<N;col++)
for(row=0;row<N;row++){
printf("Matrix A[%d][%d]=", col, row);
scanf("%lf", &A->data[col][row]);
}
for(col=0;col<N;col++){
printf("Vector x[%d]=", col);
scanf("%lf", &x->data[col][0]);
}
Ax=matrix_mul(A, x);
printf("\n");
for(col=0;col<N;col++) printf(" %f", Ax->data[col][0]);
return 0;
}
0060デフォルトの名無しさん
2007/10/10(水) 23:38:430061デフォルトの名無しさん
2007/10/10(水) 23:47:380062デフォルトの名無しさん
2007/10/10(水) 23:50:07[2] 問題文(含コード&リンク):
相異なるM個の要素からなる要素から N 個選んだ組合せをすべて表示し場合の数も表示する関数をつくれ。
ただしM≧Nである。MとNは自分で入力する。
for文などを用いず、関数の再帰を使う方法で回答せよ
4個の要素(1 2 3 4)から3つ選んだ場合の例
(1 2 3)
(1 2 4)
(1 3 4)
(2 3 4)
4
[3] 環境
[3.1] OS: Win
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 明後日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
お願いします
0063デフォルトの名無しさん
2007/10/10(水) 23:51:32情報系の人たちはどんな授業を受け、どういうふうに勉強してんの?
0064デフォルトの名無しさん
2007/10/10(水) 23:57:00[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5045.txt
↑このソースに続けて、下記のようにソートする関数を作成しなさい。
�@「書籍のアルファベット順(a→b→c…)」
�A「ISBNコードの番号が若い順」
�B「価格の安い順」
但し、「どの方法でソートしますか?」と問う文言を入れ、�@〜�Bから選べるようにすること。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: CPad for Borland C++Compiler 2.31
[3.3] 言語: C/C++/どちらでも可
[4] 期限: 10月12日まで
[5] その他の制限: 上記のソースがしょぼい出来で申し訳ありませんが、よろしくお願いいたします。
0065デフォルトの名無しさん
2007/10/11(木) 00:19:12[2] 問題文:A(1)からA(50)にランダムな数値が入っている。昇順でソート。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
0066デフォルトの名無しさん
2007/10/11(木) 00:20:02ソートするのはいいがその後は自由ってのは気に入らんな
表示でもするのかね
0067デフォルトの名無しさん
2007/10/11(木) 00:21:34「異なるM個の要素」は、1からMまでの連番でいいのかな?
>>64
やってみる。15分くれ。
006865
2007/10/11(木) 00:30:420069デフォルトの名無しさん
2007/10/11(木) 00:31:25ありがとうございます!
0070デフォルトの名無しさん
2007/10/11(木) 00:51:05遅くなってすまん。あまりデバッグできてないけどあげる。
ちゃんとソートできていないようなら、比較関数を修正して。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5046.txt
あと、mainをint型に変更した。
0071デフォルトの名無しさん
2007/10/11(木) 00:53:57そうでした…スミマセン!!!!!
そのあとにソート結果を表示します。
>>67
ソート語、ソート結果を表示します。
お手数ですが、よろしくお願いいたします。
0072デフォルトの名無しさん
2007/10/11(木) 00:54:07#include <stdio.h>
#define M 128
static int data[M], tmp[M], m, n;
void comb_r(int data_index, int tmp_index)
{
int i;
if(tmp_index == n){
for(i = 0; i < n; i++) printf("%d ", tmp[i]);
printf("\n");
return;
}
for(i = data_index; i < m; i++){
tmp[tmp_index] = data[i];
hoge_r(i + 1, tmp_index + 1);
}
}
int main(void)
{
int i;
while(m < M && scanf("%d", &data[m]) == 1) // cntl + z等で終了
m++;
scanf("%d", &n);
comb_r(0, 0);
return 0;
}
0074デフォルトの名無しさん
2007/10/11(木) 01:01:56if(tmp_index == n){ 内に大局変数のカウンタを増やして、mainで表示してください。
0075デフォルトの名無しさん
2007/10/11(木) 01:09:07[2] 問題文(含コード&リンク):
6人の学生が3科目を受験し、各学生の科目ごとの特典を入力し、学生ごとまたは科
目ごとの得点合計および全得点合計を、配列により求めるプログラムである。プログ
ラム中の「 」に正しい答えを入れて、プログラムを完成させなさい。
void main(void)
{
int ten[][4] = {{0,0,0,0},{0},{0},{0},{0},{0},{0}},
int i, j;
printf("得点を入力してください\n");
for(i = 1; i <= 6; i++)
{ for(j = i; j <= 3; j++)
scanf("%d",「 �@ 」 );
}
/* 得点の集計 */
for(i = i; i <= 6; i++)
{ for(j = i; j <= 3; j++)
{
「 �A 」 += 「 �B 」;
「 �C 」 += 「 �B 」;
}
}
「 �D 」;
for(j = 1; j <= 3; j++)
{
「 �E 」 += 「 �B 」;
}
}
4.朝まで。 5.多次元配列ってとこやっております・・・。/* 得点の集計 */が下に続くのですが省略><
0076デフォルトの名無しさん
2007/10/11(木) 01:12:56[2] 問題文(含コード&リンク):
氏名(型はchar)、郵便番号(型はchar)、番号(型はint)を表す3つの配列
simei、yuubin、bangouで構成し、以下の条件を満たす住所録を作成しなさい。
1:新規追加が可能。引数は順に氏名、郵便番号、番号とするような
データ項目を住所録に追加する関数。void tuika(char *, char *, int)
2:指定されたデータの削除が可能で、削除されたデータ項目は登録が
ない状態とする。ここで、登録がないデータ項目とは、氏名と郵便番号に
ついてはヌル文字、番号については0が格納されていることとする。
また、一度削除されたデータ項目は、以降の新規追加で再利用可能であること。
引数で指定されたデータ項目と合致する個人データを住所録から削除する関数。
void Dsimei(char *)、void Dyuubin(char *)、void Dbangou(int)
例えばDsimei()は、引数で指定された文字列を名前とするような個人データを
住所録から削除する。Dyuubin()、Dbangou()も同様。
3:引数で指定されたデータ項目を住所録から検索する関数。
void Fsimei(char *)、void Fyuubin(char *)、void Fbangou(int)
例えばFsimei()は、引数で指定された文字列を名前とするようなデータ項目を
住所録から検索する。Fyuubin()、Fbangou()も同様。
これらの関数は合致する全ての個人データを表示するものとする。
※最大3名分のデータを管理できる。
※文字列の一致判定にはstrcmpを用いる。
※データを格納する配列simei、yuubin、bangouはグローバル変数で確保する。
※データの入出力は凝らず(ユーザとの対話的入出力は必要ない)に
呼び出す側でそのまま渡して良い。つまり、main関数で
void tuika(yamada, 123456, 16)などとすること。
※構造体を用いずに2次元配列を用いること。
0077デフォルトの名無しさん
2007/10/11(木) 01:13:29007876
2007/10/11(木) 01:14:46[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 金曜日の13時までです。
[5] その他の制限: 基礎的な内容は、一通り習ってます。ただ、本当に
基礎的な内容なので、基礎的な内容で回答頂けると助かります。
よろしくお願いします。
0079デフォルトの名無しさん
2007/10/11(木) 01:41:13[2] 問題文(含コード&リンク):ASCIIコードで名前を入力し、その名前を出力し、その後入力した名前を大文字で表示する。入力終了はEOFで行う。
[3.1] OS:windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C++
[4] 期限:10月11日22時
[5] その他の制限:int変数に入力してそのASCIIコードの文字をchar型配列に順に代入すること
とりあえずプログラムをつくったのですが2カ所あるch[i]の所でエラーが出ます。その理由がよくわかりません。どこを修正すればいいか教えてください。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int i=0;
char ch;
cout << "Input ASCII code -->";
while(cin >> hex >> ch[i])
{
cout << "Input ASCII code -->";
i++;
}
ch[i]="\0";
cout << endl;
cout << "Your name -->" << ch;
cout << endl;
if('a'<=ch && ch<='z')
{
ch=ch-'a'+'A';
}
cout << "Uppercase name -->" << ch;
cout << endl;
return 0;
}
0080デフォルトの名無しさん
2007/10/11(木) 01:48:570081デフォルトの名無しさん
2007/10/11(木) 01:49:59できれば9時までにお願いします><
0082デフォルトの名無しさん
2007/10/11(木) 03:07:16問題が腐ってるので穴埋めしても完成しない。
やる価値無し。
0083デフォルトの名無しさん
2007/10/11(木) 03:25:11というかやたらミスが多い問題文だな
講師は事前にデバッグとかしないのかよ
i=i;て何やねん
0084デフォルトの名無しさん
2007/10/11(木) 03:25:47というかやたらミスが多い問題文だな
講師は事前にデバッグとかしないのかよ
i=i;て何やねん
0085デフォルトの名無しさん
2007/10/11(木) 03:28:55あなたはあなた
0086デフォルトの名無しさん
2007/10/11(木) 03:32:500087デフォルトの名無しさん
2007/10/11(木) 03:46:01main(void)
{
int ten[][4] = {{0,0,0,0},{0},{0},{0},{0},{0},{0}};
int i, j;
printf("得点を入力してください\n");
for(i = 1; i <= 6; i++)
for(j = 1; j <= 3; j++){
scanf("%d",�@&ten[i][j]);
}
/* 得点の集計 */
for(i = 1; i <= 6; i++){
for(j = 1; j <= 3; j++){
�Aten[0][j] += �Bten[i][j];
�Cten[i][0] += �Bten[i][j];
}
}
�Di=0;
for(j = 1; j <= 3; j++){
�Eten[0][0] += �Bten[i][j];
}
}
for文の初期値を修正して埋めてみた。�Aと�Cは順不同。
0088デフォルトの名無しさん
2007/10/11(木) 06:55:57#include<stdio.h>
#include<stdlib.h>
#define POINT_NUM 20
#define SAMPLE_NUM 100
int main(void){
FILE *fp;
int i, j, k, r, cnt;
char filename[FILENAME_MAX+1];
int point[POINT_NUM], max_p, min_p;
for(r=0;r<=20;r+=2){ // 2点間を接続する確率 %
for(cnt=0;cnt<SAMPLE_NUM;cnt++){
sprintf(filename, "%03d%%-%02d.txt", r, cnt);
fp=fopen(filename, "w");
if(fp==NULL) return 1;
for(i=0;i<POINT_NUM;i++) point[i]=i;
for(i=0;i<POINT_NUM;i++)
for(j=i+1;j<POINT_NUM;j++)
if((rand()%100)<r){
fprintf(fp, "%d - %d\n", i, j);
if(point[i]>point[j]) max_p=point[i], min_p=point[j];
else max_p=point[j], min_p=point[i];
for(k=0;k<POINT_NUM;k++) if(point[k]==max_p) point[k]=min_p;
}
for(i=0;i<POINT_NUM;i++) if(point[i]!=0) break;
if(i>=POINT_NUM) printf("%s : 連結\n", filename);
fclose(fp);
}
}
return 0;
}
0090デフォルトの名無しさん
2007/10/11(木) 13:15:45[2] 問題文(含コード&リンク): RGB値を使い、2値化を行う 芝生の緑の部分を取り出す
(芝生の部分はrgbというテキストファイルにRGB値の範囲が載っています
また、zipではjpgファイルになってますが容量オーバーのため本来はbmpファイルを使用しています)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5047.zip
[3] 環境
[3.1] OS: (Windows/Linux/等々) Windows
[3.2] コンパイラ名とバージョン: よくわかりません
[3.3] 言語: (C/C++/どちらでも可 のいずれか) VisualC++2005
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 明日の11時まで
[5] その他の制限: 環境のコンパイラ名とバージョンというのがよくわかりません
説明不足な点があると思いますがよろしくお願いします
0091デフォルトの名無しさん
2007/10/11(木) 13:26:30これだけでいいのかな?
int is_grass(int r, int g, int b){
return ((100<=r && r<=140) && (140<=g && g<=170) && (70<=b && b<=100));
}
009290
2007/10/11(木) 14:07:13これを加えるとこういったエラーが出てきたのですが・・・
○○\kadai.cpp(301) : error C3872: '0x3000': この文字を識別子で使用することはできません
○○\kadai.cpp(301) : error C3872: '0x3000': この文字を識別子で使用することはできません
○○\kadai.cpp(301) : error C3872: '0x3000': この文字を識別子で使用することはできません
○○\kadai.cpp(301) : error C3861: ' return': 識別子が見つかりませんでした
○○のところは私の名前などが入っているため隠しています
0093デフォルトの名無しさん
2007/10/11(木) 14:22:04301行目をコピペして晒してみ。
0094デフォルトの名無しさん
2007/10/11(木) 14:24:31なんでやねん!
int is_grass(int r, int g, int b){
return ((100<=r && r<=140) && (140<=g && g<=170) && (70<=b && b<=100));
}
void BMPtoGrassBin(
unsigned char dest[Y_SIZE][X_SIZE],
const unsigned char src[Y_SIZE][X_SIZE][3] )
{
int y, x;
for (y=0; y<(int)biHeight; y++)
for (x=0; x<(int)biWidth; x++) {
dest[y][x]=is_grass(src[y][x][0], src[y][x][1], src[y][x][2])?HIGH:LOW;
}
}
0095デフォルトの名無しさん
2007/10/11(木) 14:32:51[3] 環境
[3.1] OS:WindowsXP
[3.2] BorlandC++
[3.3] C++
0096デフォルトの名無しさん
2007/10/11(木) 14:36:34文字列をランダムに生成するのにどうしてAが必ず先頭にくるのか説明したまえ
009795
2007/10/11(木) 14:43:57aからと書いたほうがよかったですかね。
0098デフォルトの名無しさん
2007/10/11(木) 14:48:41文字列の文字数とか文字列自体の数とかはどうなってんの?
0099デフォルトの名無しさん
2007/10/11(木) 14:56:29だから問題文の説明が不足してるって言ってるの。
A〜Zのランダム文字列を生成してからそれを整列して改めて表示するの?
010090
2007/10/11(木) 15:22:49ありがとうございます
先ほどこの問題で先生に聞きに行ったところ
原画像を白黒にせずに原画像から直接RGB値を用いて
2値化の画像を生成するのが今回の課題と先生は言ってました
実行操作のところでこういうプログラムを作ってみましたが上手くできませんでした
//画像処理3:RGB値から2値化
is_grass(intensity, image_bw);
BWto24BMP(image_bw, image_out);
printf("RGBからの2値化出力画像ファイル名(*.bmp):"); scanf("%s", output);
writeBMP(image_out, output);
0101デフォルトの名無しさん
2007/10/11(木) 15:30:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5049.txt
こういう事かな?
0102デフォルトの名無しさん
2007/10/11(木) 15:56:45あなたが他人のソースコードをうpしたということはよく分かった
なんか先生がかわいそうになってきた
カンニングについては諦めているだろうから
くだらない質問で迷惑かけるなよと言いたい
0103デフォルトの名無しさん
2007/10/11(木) 15:59:17>>8
返事が遅れてすみません。考えていただきありがとうございます。
しかし、LEN,NIN,putsは習っていません。
もうちょっと詳しく書くべきでした。すみませんでした。
>>6に付け足しで、『if』,『if-else』,『while』,『do-while』,『switch』,『for』を習いました。
あと『int』,『char』,『double』でもう一度お願いできませんか?
お願いします
0104デフォルトの名無しさん
2007/10/11(木) 16:36:08小学生じゃないんだから、習ってないもの使ったって問題ないよ。
むしろ評価する人はよく調べてるなと思うだろう。
0105デフォルトの名無しさん
2007/10/11(木) 17:22:58完璧に使いこなせたら、ちょっと危なくなるから。
こっちの都合なんですけど・・・。
お願いします。
0106デフォルトの名無しさん
2007/10/11(木) 17:26:20#include<stdio.h>
int main(void)
{
int i,j;
char name[5][32] = { "東郷", "猛田", "友沢", "六道", "矢部" };
int age[5] = { 1, 2, 3, 4, 5};
for(i=0;i<5;i++){
printf("%sさん、\n",name[i]);
for(j=0;j<age[i];j++){
printf("誕生日おめでとう\n");
}
}
return 0;
}
0107デフォルトの名無しさん
2007/10/11(木) 17:45:56お前が何を習ったのか、どこまで知ってるのかを考慮してプログラムするのは難しい
0108デフォルトの名無しさん
2007/10/11(木) 17:50:07ありがとうございました。明日学校でやってみます。
>>107
制限がなかったらこんなこと言われなくて済むんですけどね。
未熟者ですみません。
0110デフォルトの名無しさん
2007/10/11(木) 20:42:58[2] 問題文(含コード&リンク):
�@100000以下の素数の数nを求め、サイズnの配列に素数を小さい順に格納する。
�A�@で求めた配列から、5つの整数を選び(その中の一つは必ず12345であること)素因数分解し、
次のような書式で出力するプログラムを作成せよ。
ex)整数 は p1のn乗、p2のn乗・・・・の積であらわされる。
(p:素数)
�@と�Aを一つのプログラムにまとめて作成すること。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC6
[3.3] 言語:C
[4] 期限:10/13
[5] その他の制限:
素数の数までは完成したのですが、素因数分解が出来ません。
まだ授業が進んでいないので、効率の悪い方法で構いません。
よろしくお願いします
0111デフォルトの名無しさん
2007/10/11(木) 20:46:28[2] 問題文(含コード&リンク):コインを半物ずつ重さを比べて贋コインを探すという問題です
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: djgpp
[3.3] 言語: C
[4] 期限:10/17
[5] その他の制限:
#include <stdio.h>
main(){
int n,m,i,i0,w[20];
n=12; //コインの個数
printf("にせ金の番号は?");
scanf("%d",&m);
printf("\n"); //改行
for(i=1;i<=n;i++){
if(i==m) w[i]=9;
else w[i]=10;
printf("i=%d,weight=%d\n",i,w[i]);
}
↓↓↓ここから↓↓↓
for(i=1;i<=n-1;i+=2){
if(w[i]>w[i+1]){i0=i+1;break;}
else if(w[i]<w[i+1]){i0=i;break;}
}
↑↑↑ここまで↑↑↑
printf("\n");
printf("にせ金 %d, 重さ %d\n",i0,w[i0]);
return 0;
}
2枚ずつ比較して探すプログラムがあるのでこれの矢印で囲んだ部分を改変させて作って欲しいです
お願いします
0112デフォルトの名無しさん
2007/10/11(木) 21:17:17半物ずつって何?
こういうパズルって比較する回数を限定するんじゃないの?
0113デフォルトの名無しさん
2007/10/11(木) 21:35:38すみません説明不足でした
このプログラムの場合だと12枚あるコインを6枚6枚で比較して
偽物の入ってる方を3枚3枚で比較して・・・・・って感じです
回数の指定は特にないみたいですが、なるべく少ない回数でやるみたいなのと
講義内で半分ずつ比較するのが一番良いやり方だと言っていたので半分の方法でやろうと思いまして
0114デフォルトの名無しさん
2007/10/11(木) 22:30:481で求めた配列って素数しか入ってないんじゃない?
1で求めた配列を使って、12345を含むランダムで選んだ整数を素因数分解するってこと?
011576(78)
2007/10/11(木) 22:33:370116デフォルトの名無しさん
2007/10/11(木) 22:42:32すいません、その通りです。問題読み間違えてました・・・・
�A訂正
�@の配列を使って、12345を含む任意の整数を素因数分解せよ。です
0117デフォルトの名無しさん
2007/10/11(木) 23:12:12void factorization(int n, int *prime)
{
int i;
printf("%d = ", n);
for(i=0; prime[i]*prime[i]<=n; i++) {
int cnt = 0;
while(n % prime[i] == 0) {
cnt++;
n /= prime[i];
}
if(cnt==1) printf("%d%s", prime[i], n==1?"": " * ");
else if(cnt> 1) printf("%d^%d%s", prime[i], cnt, n==1?"":" * ");
}
printf("%.0d\n", n==1 ? 0 : n);
}
0118デフォルトの名無しさん
2007/10/12(金) 02:04:21#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void factorization(int n, int *prime)
{
int i, cnt;
printf("%d = ", n);
for(i=0; prime[i]*prime[i]<=n; i++) {
for(cnt=0; n%prime[i]==0; cnt++) n /= prime[i];
if(n==1) {
printf("%d^%d\n", prime[i], cnt);
return;
}
if(cnt==1) printf("%d * ", prime[i]);
else if(cnt> 1) printf("%d^%d * ", prime[i], cnt);
}
printf("%d\n", n);
}
int main(void)
{
int i, j, a[5] = {12345}, prime[10000] = {2}, cnt = 1;
srand(time(NULL));
for(i=3; i<=100000; i+=2) {
for(j=0; j<cnt; j++) if(i % prime[j] == 0) break;
if(j==cnt) prime[cnt++] = i;
}
for(i=1; i<5; i++) a[i] = rand();
for(i=0; i<5; i++) factorization(a[i], prime);
return 0;
}
0119デフォルトの名無しさん
2007/10/12(金) 05:19:560120デフォルトの名無しさん
2007/10/12(金) 07:06:10何だそのtypoはw
最初釣りかと思ったじゃないか……
頭痛が痛いよ、まったく
0121デフォルトの名無しさん
2007/10/12(金) 09:46:59[2] 問題文:HIT and BLOWの解き方
�@候補の数列を作成するkouho[][](配列に置く)
・決まった桁数
・使った数字に重複のないこと
�A候補として残すかどうか判断するためチェック用配列chk[]を作成する。
・候補の数列と構造体にしても可
・最初はすべての数列を候補とする
�B残っている候補の数列のなかから適当なものを予想する
・候補の配列の先頭でも良いし、乱数を使っても良い。
�C入力されたhitとblowにしたがって候補を捨てていく(チェック用の配列にフラグをたてる)
[3] 環境
[3.1] OS: (Windows)
[3.2] コンパイラ名とバージョン: (bcc.5.5)
[3.3] 言語: (C++)
int i2,n1,n2,n3,n4,kouho;
for( i=0, n1=1; n1<=9; n1++)
for(n2=1; n2<=9; n2++)
for(n3=1; n3<=9; n3++)
for(n4=1; n4<=9; n4++){
kouho[0]=n1;
kouho[1]=n2;
kouho[2]=n3;
kouho[3]=n4;
i++;}
こんな感じで作りましたがいまいちわかりませんおよろしく願いします。
0122デフォルトの名無しさん
2007/10/12(金) 10:00:59typo?「危険が危ない」はちょっと古いですが普通に使われる正しい日本語なんですが…。
0123デフォルトの名無しさん
2007/10/12(金) 10:08:290124121
2007/10/12(金) 10:16:59#include <stdlib.h>
#include <time.h>
int main(void)
{
int i2,n1,n2,n3,n4,kouho[9*9*9*9][3];
for( i2=0, n1=1; n1<=9; n1++)
for(n2=1; n2<=9; n2++)
for(n3=1; n3<=9; n3++)
for(n4=1; n4<=9; n4++){
kouho[i2][0]=n1;
kouho[i2][1]=n2;
kouho[i2][2]=n3;
kouho[i2][3]=n4;
i2++;
}
return 0;
}
訂正。
0125デフォルトの名無しさん
2007/10/12(金) 10:29:40危険(なこと)は確かに危ないけど、「危険が危ない」は正しい日本語とは言えないね。
0126デフォルトの名無しさん
2007/10/12(金) 11:10:47[2] 問題文(含コード&リンク):
mem1に入っているプログラムで
data2に入っているsimulation_dataを読み込んで、モデル化するプログラムを作っているのですが、
うまく読み込めてないようなんです。実行されるとdata6_arspecの中のresult4bに結果が入力されます。
/*simulation_dataを読み込む文です間違いありかもしれません*/
FILE *fp1;
fp1=fopen("..\\data2\\simulation_data","r");
for(j=0;j<n;j++){
fscanf(fp1,"%15.5f \n",&raw_16ch[0][j]);
}
for ( j=0; j<n; j++ ) {
printf("%15.5f \n",raw_16ch[0][j]);
}
fp1=fopen("sim1_","w");
fprintf(fp1,"sim1_ \n");
for(j=0;j<n;j++){
fprintf(fp1,"%15.5f \n",raw_16ch[0][j]);
}
fclose(fp1);
この文が間違っているんだと思います。実行時に入力するのは、
�@..\data2\simulation_data �A2500 �B..\data6_arspec\ �Cresult4b\ �D1 �E64 �F25 �G1.0 �H1
の順です。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 10月13日13時まで
[5] その他の制限:よろしくお願いしますm(_ _)m
UP先はこちらです。
http://www.dotup.org/uploda/www.dotup.org6676.zip.html
0127デフォルトの名無しさん
2007/10/12(金) 11:32:07いえ、重言ではありますが似た意味の表現を重ねて重要さや意味を強める、
畳語に近い正しい日本語の用法なんですが…。
失礼ですが、どちらの大学をご卒業ですか?
0128デフォルトの名無しさん
2007/10/12(金) 12:15:370129デフォルトの名無しさん
2007/10/12(金) 12:19:47・printf()系とscanf()系のフォーマット指定子は互換性がない。従って、そのフォーマット指定子は見直す必要があるかもしれない。
・simulation_dataを読み込んだ後、クローズしていない。
・zipなんか怖くて見てられるか。
0130デフォルトの名無しさん
2007/10/12(金) 12:28:19[2] 問題文:文字の2次元変数をa[4][5]として適当に文字を入力し、表示させる
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2007年10月12日13時まで]
[5] その他の制限: for,if,caseなどは習いました。
#include<stdio.h>
void main(){
int i,j;
char a[4][5];
a[0][0]='た';a[0][1]='さ';a[0][2]='か';a[0][3]='あ';
a[1][0]='ち';a[1][1]='し';a[1][2]='き';a[1][3]='い';
a[2][0]='つ';a[2][1]='す';a[2][2]='く';a[2][3]='う';
a[3][0]='て';a[3][1]='せ';a[3][2]='け';a[3][3]='え';
a[4][0]='と';a[4][1]='そ';a[4][2]='こ';a[4][3]='お';
for(i=0;i<4;i++){
for(j=0;j<5;j++){
printf("%c",a[i][j]);
}
printf("\n");
}
}
全角が表示されなくて困ってます
0131デフォルトの名無しさん
2007/10/12(金) 12:29:590132デフォルトの名無しさん
2007/10/12(金) 12:30:51char ではなくて wchar_tでしょう。
0135デフォルトの名無しさん
2007/10/12(金) 12:41:51ありがとうございます
0136デフォルトの名無しさん
2007/10/12(金) 13:07:42数字が間違っていたんでできなくて当たり前でした
恥ずかしいです・・・
0137デフォルトの名無しさん
2007/10/12(金) 14:51:49>>125
>>127
「危険が危ない」が日本語的にどうだろうと>>119は
「期限が危ない」と言いたかったと思うのは変な奴扱い?
だから>>120はtypoっていったんだろ?
0138デフォルトの名無しさん
2007/10/12(金) 16:35:57って、下らないレスしてる俺も可哀想な子だな。可哀想な俺に問題を恵んでください。
>>119
期限が危ない問題はどれですか?
0139デフォルトの名無しさん
2007/10/12(金) 16:41:50宿題プリーズ
0140デフォルトの名無しさん
2007/10/12(金) 17:15:52[2] 問題文:くだらない喧嘩を止めさせ、結果を表示させる
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: なるべく早く
[5] その他の制限: 特になし
0141デフォルトの名無しさん
2007/10/12(金) 17:18:19喧嘩はどこですか?
0142デフォルトの名無しさん
2007/10/12(金) 17:25:52#include <stdio.h>
int main() {
puts("\n"
" ∧_∧ / ̄ ̄ ̄ ̄ ̄ \n"
" ( ) < マターリは… \n"
" ( ) \_____ \n"
" │ │ │ \n"
" (_(__) \n"
"\n"
"\n"
" ∧_∧ / ̄ ̄ ̄ ̄ ̄ \n"
" ( ・∀・ ) ミ < 義務だよ! \n"
" ⊂ 9 \_____ \n"
" クルッ ( ヽノ \n"
" し(_)\n"
);
return 0;
}
0143デフォルトの名無しさん
2007/10/12(金) 17:26:38ありがとうございました
0145デフォルトの名無しさん
2007/10/12(金) 17:49:48途中まで作ったけど、もう挫けた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5054.lzh
0146デフォルトの名無しさん
2007/10/12(金) 18:54:00もう遅いかもしれないけど一応
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5055.txt
規制で書き込めなかった。
0147126 ◆manko/yek.
2007/10/12(金) 19:01:250148デフォルトの名無しさん
2007/10/12(金) 19:13:23騙るのは勝手だけど明日の昼まで待てないのか
0149デフォルトの名無しさん
2007/10/12(金) 19:25:59[2] 問題文(含コード&リンク):
1から9までの数字から重複を許さず4個とる(1234〜6789)。入れ替えや括弧を任意につけても良いとして、4個の数字に加減乗除を施し、
結果が12になるものを、その演算方法と共に列挙するプログラムを作成せよ
たとえば、
1 2 3 4 ---> 1 2 4 * + 3 + (=1 + 2 * 4 +3)
などと表示されていれば良い。矢印の右は左から順にスタックに積む、あるいはポップして計算するという操作を表す。
もし12にできないものがあれば、矢印の右にNGを表示せよ。12になる計算式は唯一とは限らないから、そのうち一つを
表示すればよい。
[3] 環境
[3.1] OS: WinXp
[3.2] コンパイラ名とバージョン: Borland
[3.3] 言語: C
[4] 期限: 明後日
[5] その他の制限:ポインタは使わないで書いてほしいです
お願いします!
0150デフォルトの名無しさん
2007/10/12(金) 19:34:47もう期限過ぎちゃいましたからいいです。
出来てるところまで提出しなさいと言われたので空のファイルを提出しました。
0151デフォルトの名無しさん
2007/10/12(金) 19:43:120152デフォルトの名無しさん
2007/10/12(金) 20:29:51( ´∀`)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5052.zip
やっとアクセス規制が解除された・・・
問題が難しいものだったので、C では正直しんどいので C++ で書いてみました。
データ構造を Graph, Node, Edge により構成し、経路を Path として表現してます。
出力形式は、graphviz というフリーソフトの dot ファイルという形式です。
出力したファイルを graph.sh で処理すると、添付した gif 画像を自動生成できます。
ろだのファイルサイズの制限上、数経路分のみ画像を添付しています。
g++3.4.4 + cygwin 1.5.24 + graphviz 2.14.1 という環境で動作確認しました。
久しぶりにハマってしまったよ・・・(´;ω;`)
こんな難しい課題が出ちゃうのですか?情報系の学科かな?
私は今までこんな課題もらったことないなぁ・・・
0153デフォルトの名無しさん
2007/10/12(金) 21:05:46ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5056.txt
0154デフォルトの名無しさん
2007/10/12(金) 21:56:11やたら回りくどくなってしまったお・・・。いい訳だけどCは使いにくすぎ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5058.c
ヒントが素晴らしかったお。
0155デフォルトの名無しさん
2007/10/12(金) 21:57:130156デフォルトの名無しさん
2007/10/12(金) 22:03:0123: 不正な初期化(関数 calc )って出てコンパイルできません・・・・
0157デフォルトの名無しさん
2007/10/12(金) 22:20:13その23行とやらをコピペしてみてくれ。
0158デフォルトの名無しさん
2007/10/12(金) 22:25:39node n = {tail, '\0', 0};
です
あと構造体を使わないでかけますか?
0159デフォルトの名無しさん
2007/10/12(金) 22:28:360160デフォルトの名無しさん
2007/10/12(金) 22:29:320161デフォルトの名無しさん
2007/10/12(金) 22:33:21違う違う
変数を使って初期化できるのはC99ってだけ
0162161
2007/10/12(金) 22:36:460163≠154
2007/10/12(金) 22:38:09gccでは警告だけでコンパイルできる。
それが通らないとは一体どんなコンパイラだ?
一応こう書き換えれば通ると思うが。
--
node n;
n.tail = tail;
n.c = '\0';
n.value = 0;
--
しかし、問題は他にもあって、環境によっては
--
fprintf(stderr, "\nFIND:");
--
をprintf()にしないと表示がぐずぐずになる。
また、割り切れない除算を強行するので例えば、1 2 / 3 + 4 *が得られている。
と言うことで、誰かが書き直すのを待った方がいいかも知らん。
0164デフォルトの名無しさん
2007/10/12(金) 22:38:22n.tail = tail;
みたいに分ければいけるかも
0166≠154
2007/10/12(金) 22:44:430168デフォルトの名無しさん
2007/10/12(金) 22:52:560169153
2007/10/12(金) 23:02:31>>153で上げたのはコインの枚数を変えるとおかしくなったので修正した。
ろだのコメントがおかしいけど気にしないで。
0170デフォルトの名無しさん
2007/10/12(金) 23:09:000171デフォルトの名無しさん
2007/10/12(金) 23:15:07ポインタ使うなってのは配列をスタックにしてやれってことなんだろうけど。
0172デフォルトの名無しさん
2007/10/12(金) 23:24:120173デフォルトの名無しさん
2007/10/13(土) 00:05:07http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5060.c
0174デフォルトの名無しさん
2007/10/13(土) 00:12:39どうもありがとうございます。
。でも数字を自分で入力するんじゃなく、9個の数字から4つ選ぶ9C4=126通りの組合せそれぞれに対して
12になるのが一つだせればいいんです。もし一つもなければNGを出すんですが・・・
0175デフォルトの名無しさん
2007/10/13(土) 00:37:27割り算それでいいの?
0176デフォルトの名無しさん
2007/10/13(土) 00:51:43ポインタ使わずに頑張ったところ悪いが、
1 3 / 9 * 4 *
↑こんなんが出ない
0177デフォルトの名無しさん
2007/10/13(土) 00:51:45まずい?浮動小数点数になおすべきなんかな
>>174
longjmp使っていいならやるお
0178デフォルトの名無しさん
2007/10/13(土) 01:02:310179デフォルトの名無しさん
2007/10/13(土) 01:15:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5061.c
0180デフォルトの名無しさん
2007/10/13(土) 01:35:37本当にわかってんの?
0181デフォルトの名無しさん
2007/10/13(土) 01:41:53tmpもdoubleにするか、キャストしないと、
端数切り捨てられますよ、っと
しかしポインタ使うなと言われて関数ポインタ使うとはw
0182デフォルトの名無しさん
2007/10/13(土) 01:48:320183デフォルトの名無しさん
2007/10/13(土) 01:51:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5062.c
0184デフォルトの名無しさん
2007/10/13(土) 02:42:24ポインタなしでどうやってんのかと見てみたら、関数の仮引数を int a[] みたいな書式でやってるのな、痛々しいw
0185デフォルトの名無しさん
2007/10/13(土) 03:57:110186デフォルトの名無しさん
2007/10/13(土) 05:55:11ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5064.c
0187デフォルトの名無しさん
2007/10/13(土) 06:02:55if(!is_12) printf("%d %d %d %d ---> NG\n", num[0], num[1], num[2], num[3]);
0188デフォルトの名無しさん
2007/10/13(土) 06:17:04もう気づいてるかもだが、 >>183 では 1789 ---> 98*71-/ になってるとこが
NG になるお。 9*8/(7-1) の括弧に対応してないのかな
0189デフォルトの名無しさん
2007/10/13(土) 06:25:460190デフォルトの名無しさん
2007/10/13(土) 07:58:190192デフォルトの名無しさん
2007/10/13(土) 08:35:31配列わずにポインタ使えって言うから例題みたら*(array+i)とかよくあること。
0193149
2007/10/13(土) 09:39:26>>186
おお!すごい。ありがとうございます。186と183の結果違いますね。
アルゴリズム的にはどういう感じですか?
186も改造して 1789にも対応しようと思うんですが
0194デフォルトの名無しさん
2007/10/13(土) 10:39:44[2] 問題文(含コード&リンク):
mem1に入っているプログラムで
data2に入っているsimulation_dataを読み込んで、モデル化するプログラムを作っているのですが、
うまく読み込めてないようなんです。実行されるとdata6_arspecの中のresult4bに結果が入力されます。
/*simulation_dataを読み込む文です間違いありかもしれません*/
FILE *fp1;
fp1=fopen("..\\data2\\simulation_data","r");
for(j=0;j<n;j++){
fscanf(fp1,"%15.5f \n",&raw_16ch[0][j]);
}
for ( j=0; j<n; j++ ) {
printf("%15.5f \n",raw_16ch[0][j]);
}
fp1=fopen("sim1_","w");
fprintf(fp1,"sim1_ \n");
for(j=0;j<n;j++){
fprintf(fp1,"%15.5f \n",raw_16ch[0][j]);
}
fclose(fp1);
この文が間違っているんだと思います。実行時に入力するのは、
�@..\data2\simulation_data �A2500 �B..\data6_arspec\ �Cresult4b\ �D1 �E64 �F25 �G1.0 �H1
の順です。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C
[4] 期限: 10月15日10時まで
[5] その他の制限:よろしくお願いしますm(_ _)m
UP先はこちらです。
http://www.dotup.org/uploda/www.dotup.org6676.zip.html
0195デフォルトの名無しさん
2007/10/13(土) 10:56:450196デフォルトの名無しさん
2007/10/13(土) 11:07:50どっかで色々指摘したと思うのだが、完全無視か?
0197デフォルトの名無しさん
2007/10/13(土) 11:29:150199デフォルトの名無しさん
2007/10/13(土) 12:24:580200デフォルトの名無しさん
2007/10/13(土) 12:54:15[1] 授業単元:暇つぶしにもならないか?
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5065.txt
[3] 環境
[3.1] OS: 自由
[3.2] コンパイラ名とバージョン: 自由
[3.3] 言語: C
[4] 期限:2007年10月20日0時00分
[5] その他の制限:他の課題を優先
0201デフォルトの名無しさん
2007/10/13(土) 13:13:34http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5066.c
0202デフォルトの名無しさん
2007/10/13(土) 13:22:39show_deckやり直し
0203デフォルトの名無しさん
2007/10/13(土) 13:35:47( ´∀`)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5067.txt
0204デフォルトの名無しさん
2007/10/13(土) 13:55:21今さら指摘すると、それ分数使えない
0205デフォルトの名無しさん
2007/10/13(土) 14:08:26混ぜ具合の要求レベルによるんだろうってことはわかるんですけど。
0206デフォルトの名無しさん
2007/10/13(土) 14:09:320207デフォルトの名無しさん
2007/10/13(土) 14:18:53シャッフルとして使っちゃダメなレベル
0208デフォルトの名無しさん
2007/10/13(土) 14:20:54高卒の俺に教えてください。
0210デフォルトの名無しさん
2007/10/13(土) 14:24:03ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5068.txt
0211デフォルトの名無しさん
2007/10/13(土) 14:34:11あ、seed(time(0)); はめんどくさくて端折りました。
0212デフォルトの名無しさん
2007/10/13(土) 14:35:190213デフォルトの名無しさん
2007/10/13(土) 14:38:4053枚のカードから一発でババを引き当てることが出来る状態のことを
完全シャッフル状態といいます。
0214デフォルトの名無しさん
2007/10/13(土) 14:40:15どちらかといえば>>203のほうがいいと思うんだ、うん。
0215デフォルトの名無しさん
2007/10/13(土) 14:43:20210じゃなくて203?
0216デフォルトの名無しさん
2007/10/13(土) 14:46:45うげ、安価ミスw>210です
0217デフォルトの名無しさん
2007/10/13(土) 14:47:05農学部卒の俺の答え
今回の例だったら 52x52 のカウンタの配列作って、数万回試行、カウンタとって
標準偏差とってほかの方法と比べる、みたいなんじゃないか?証明はムリ
0218デフォルトの名無しさん
2007/10/13(土) 14:58:18for(i=0;i<N;i++){
r=(int)(rand() / (RAND_MAX + 1.0) * (i+1));
temp=array[i]; array[i]=array[r]; array[r]=temp;
}
みたいするといい感じに混ざるらしい。
詳しくは510からの議論を参照されたし
0219デフォルトの名無しさん
2007/10/13(土) 14:59:331から25までに入ってる奴は自分より小さい番号のところに絶対入らない糞仕様だぞ
0220デフォルトの名無しさん
2007/10/13(土) 15:00:28均一に混ぜるなら>>218の方法だけど、
リアルに似せるなら多少不均一でもいいかもね。よくないか。
0221デフォルトの名無しさん
2007/10/13(土) 15:25:330222デフォルトの名無しさん
2007/10/13(土) 18:41:50いまさら指摘すると、分数を使う必要はない
1/3*6 = 2 ができなくても 6*1/3 のように並び替えで同じ解が得られるから
0223デフォルトの名無しさん
2007/10/13(土) 18:58:14メモリ内を覗かれても、カードが配られる時まで
次に配られるカードが何であるか分からない
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void){
int card[52], i, idx, temp;
srand(time(NULL);
for(i=0;i<52;i++) card[i]=i;
for(i=0;i<52;i++){
idx=rand()%(52-i);
temp=card[i];
card[i]=card[i+idx];
card[i+idx]=temp;
}
for(i=0;i<52;i++) printf("%d\n", card[i]);
return 0;
}
※上記の表現は誇張しています。頑張れば次のカードを調べることは可能です
0224デフォルトの名無しさん
2007/10/13(土) 19:13:15void mywindow_init2()
{
int i;
HDC hdc = GetDC(mywin[0]);
for(i=0;i<MDC_MAX;i++){
mdc[i]=CreateCompatibleDC(hdc);
}
bmp[0]=CreateCompatibleBitmap(hdc,WINX,WINY);
bmp[1]=LoadImage(myinst,"bitmap1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bmp[2]=CreateBitmap(WINX,WINY,1,1,NULL);
bmp[3]=LoadImage(myinst,"title.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bmp[4]=LoadImage(myinst,"gameover.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
bmp[5]=LoadImage(myinst,"ending.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
SelectObject(mdc[0],bmp[0]);
PatBlt(mdc[0],0,0,WINX,WINY,WHITENESS);
SelectObject(mdc[1],bmp[1]);
SelectObject(mdc[2],bmp[2]);
SelectObject(mdc[3],bmp[3]);
SelectObject(mdc[4],bmp[4]);
SelectObject(mdc[5],bmp[5]);
COLORREF c;
c=GetPixel(mdc[1],0,0);
BitBlt(mdc[2],0,0,640,371,mdc[1],0,0,SRCCOPY);
BitBlt(mdc[1],0,0,640,371,mdc[2],0,0,SRCINVERT);
ReleaseDC(mywin[0],hdc);
}
で、ビットマップが変換できないってエラーでて困ってるんだけど
0225149
2007/10/13(土) 19:30:02183は組合せが1234から始まってないので・・・
あとプログラムのアルゴリズムに対して考察もしないといけないので・・・
0226デフォルトの名無しさん
2007/10/13(土) 19:33:18催促するならはっきり書かなきゃ
0227デフォルトの名無しさん
2007/10/13(土) 19:35:560229デフォルトの名無しさん
2007/10/13(土) 20:07:21for(i=1; i<=6; i++) {
for(j=i+1; j<=7; j++) {
for(k=j+1; k<=8; k++) {
for(l=k+1; l<=9; l++) {
//チェック用の関数
}}}}
ってやればよくね?
0230デフォルトの名無しさん
2007/10/13(土) 20:10:27チェック用の関数がどこにあたるかわからないです。。。
>>183のプログラムが理解できなくて・・・
>>186ならなんとか理解できそうなんですが
0231デフォルトの名無しさん
2007/10/13(土) 20:28:580232デフォルトの名無しさん
2007/10/13(土) 20:29:32うは、俺恥ずかしす
0233149
2007/10/13(土) 20:48:59やっぱり理解できなかったです。
122行目の
temp=work[index], work[index]=work[i], work[i]=temp; の構文がよくわからないです。なんでセミコロンじゃなくてコンマなんですか?
0234デフォルトの名無しさん
2007/10/13(土) 21:01:58work[index]=work[i];
work[i]=temp;
と同じ。
ただ、そういう書き方もできるだけ。
0237デフォルトの名無しさん
2007/10/13(土) 21:07:420238デフォルトの名無しさん
2007/10/13(土) 21:17:13解禁しますか?はいかイエスで答えて下さい
ニア はい
イエス
0239デフォルトの名無しさん
2007/10/13(土) 21:30:04まず f ( a b c d) 数字abcdをそのままの順序でつかって計算可能な式すべてを計算する を作る
○は加減乗算とする
可能性として a b ○ c ○ d ○ または a b ○ c d ○○ の形しかない
これで関数fはつくれるだろ
0241デフォルトの名無しさん
2007/10/13(土) 21:33:310242デフォルトの名無しさん
2007/10/13(土) 21:42:044つなら
a b○c○d○ a bc○○d○ と
a bcd○○○
でいいか?
0243デフォルトの名無しさん
2007/10/13(土) 21:44:180244デフォルトの名無しさん
2007/10/13(土) 21:47:12ab○c○d○ は dcab○○○ と等価
0245デフォルトの名無しさん
2007/10/13(土) 21:48:410246デフォルトの名無しさん
2007/10/13(土) 22:00:56というのを再帰して求めれば全ての配置が決まるな
0247デフォルトの名無しさん
2007/10/13(土) 22:09:590248デフォルトの名無しさん
2007/10/13(土) 22:22:20http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5069.c
表示部分がちょっと手抜き
0249248
2007/10/13(土) 22:27:599/(8-5)*4=12
が抜けとる
思ったよりめんどいな
0250デフォルトの名無しさん
2007/10/13(土) 22:34:060251248
2007/10/13(土) 22:36:350252デフォルトの名無しさん
2007/10/13(土) 22:41:58俺は試してないから知らないけど
0253デフォルトの名無しさん
2007/10/14(日) 03:05:540254183
2007/10/14(日) 03:26:47(組み合わせの結果を逆順に配列に入れてるだけ)になるからダメなんだな…。
直してあげたいが2日間飯食ってなくて辛いんだ。すまない。
0255デフォルトの名無しさん
2007/10/14(日) 03:33:500256デフォルトの名無しさん
2007/10/14(日) 03:35:47そんな貴方の生活習慣を直してあげたい。
0257デフォルトの名無しさん
2007/10/14(日) 11:51:280258デフォルトの名無しさん
2007/10/14(日) 11:58:310260デフォルトの名無しさん
2007/10/14(日) 12:20:17計算の順番は固定じゃないんだから、4321を1234って風に逆順にすればいいだけだろ?
0261デフォルトの名無しさん
2007/10/14(日) 12:20:57>>257に宿題
>>223を考察せよ。
(1)本当にチート対策されているのか?
(2)均一にシャッフルされているか?
(3)その他気付いた点
0262デフォルトの名無しさん
2007/10/14(日) 12:22:120263デフォルトの名無しさん
2007/10/14(日) 12:37:50[2] 問題文(含コード&リンク):
簡単なアーカイバーを作れ。プログラムのインターフェイスや
ファイルのフォーマットなどは自由である。
ただし、最低でも以下の操作が行えること:
・書庫へのファイルの追加
・書庫に含まれるファイルのリストの出力
・書庫に含まれるファイルのうち、指定されたものの内容を出力
[3] 環境
[3.1] OS: Write once, run anywhere
[3.2] コンパイラ名とバージョン: YES!
[3.3] 言語: C/C++
[4] 期限: 2007年10月27日12時30分
[5] その他の制限: 暇TSUBUSIX
あんまおもしろくないかな?ファイルが関わってくると色々面倒だよね。
0264デフォルトの名無しさん
2007/10/14(日) 12:47:01Javaじゃないんだから”Write once, run anywhere ”なんて
ヒントくれYO!
0265デフォルトの名無しさん
2007/10/14(日) 12:51:18余裕があるのならRUN-LENGTH圧縮くらいやっても。
0266デフォルトの名無しさん
2007/10/14(日) 12:52:00http://www.jnode.org/
0267デフォルトの名無しさん
2007/10/14(日) 13:13:360268デフォルトの名無しさん
2007/10/14(日) 13:13:52暇つぶしスレとか、
初心者がレベルアップに問題こなしてくスレとか、
そんな感じじゃねえかw
0269デフォルトの名無しさん
2007/10/14(日) 13:23:010270デフォルトの名無しさん
2007/10/14(日) 15:34:40http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5070.txt
も、もっと簡単な宿題を
0271デフォルトの名無しさん
2007/10/14(日) 15:41:13実行できないぞ
0272デフォルトの名無しさん
2007/10/14(日) 15:51:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5071.txt
0273デフォルトの名無しさん
2007/10/14(日) 15:55:37ただ要求を大きく見誤ってるぞ・・・。4つの数字は組み合わせで与えないと。
0274デフォルトの名無しさん
2007/10/14(日) 15:58:170275デフォルトの名無しさん
2007/10/14(日) 16:08:140276デフォルトの名無しさん
2007/10/14(日) 16:18:580277牛
2007/10/14(日) 16:19:24http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5072.txt
0279牛
2007/10/14(日) 16:31:10http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5073.txt
なんかこんどは数多すぎ orz こんなもん? 1578以外全部OKになっちゃった。
0280牛
2007/10/14(日) 16:43:590281デフォルトの名無しさん
2007/10/14(日) 16:48:17宿題のくせにむずいぞ
0282デフォルトの名無しさん
2007/10/14(日) 16:52:160283デフォルトの名無しさん
2007/10/14(日) 16:54:23abcdは、9C4 × 4! だけいれかえろ
0284デフォルトの名無しさん
2007/10/14(日) 17:00:29>>46氏はもうどこかへ旅立たれたのだろうか。
0285デフォルトの名無しさん
2007/10/14(日) 17:02:060286デフォルトの名無しさん
2007/10/14(日) 17:03:22>>283方式でやったやつ >>279
0287デフォルトの名無しさん
2007/10/14(日) 17:06:35ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5074.c
0288デフォルトの名無しさん
2007/10/14(日) 17:08:02やったな 完成してるじゃん
0289デフォルトの名無しさん
2007/10/14(日) 17:10:25ただこれ、
1 2 3 4 ---> 1 2 4 * + 3 +
まではでるけど
1 2 3 4 ---> 1 2 4 * + 3 + (=1 + 2 * 4 +3)
はでないんだ。
というか後置記法だったら、
1 2 3 4 ---> 1 2 4 * + 3 + (= 2 * 4 + 1 + 3)
なんじゃないかと小一時間(ry
0290デフォルトの名無しさん
2007/10/14(日) 17:13:38小1時間自分で考えろよ
0291デフォルトの名無しさん
2007/10/14(日) 17:23:22だが、断る。
0292デフォルトの名無しさん
2007/10/14(日) 17:31:340293デフォルトの名無しさん
2007/10/14(日) 17:42:470294デフォルトの名無しさん
2007/10/14(日) 22:05:26もうだめ・・・ワインがまわってきた・・
0295 ◆Q0rf/h.OAE
2007/10/14(日) 22:26:51[2] 問題文(含コード&リンク):
【※1】のプログラムを、入力した整数が3と7の公倍数か評価する部分と、
1〜100の範囲外であるか評価する部分を別関数としてプログラムを作成すること。
但し、関数との値の受け渡しは、引数や戻り値を用いること。
※1のプログラム…
include <stdio.h>
int main(void)
{
int n;
do {
printf("1〜100の整数を入力してください。\n");
scanf("%d", &n);
if(n<1||n> 100) {
printf("その旨");
return 0;
}
}while(n%21);
printf("入力した整数は、3と7の公倍数です。\n");
return 0;
}
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限: 2007年10月14日22時58分迄
[5] その他の制限: brakeを用いていただけると助かります。
0297デフォルトの名無しさん
2007/10/14(日) 22:48:50#include <stdio.h>
int is_range(int n){
return (1<=n && n<=100);
}
int brake(int n){
return ((n%3)==0 && (n%7)==0);
}
int main(void)
{
int n;
while(1) {
printf("1〜100の整数を入力してください。\n");
scanf("%d", &n);
if(!is_range(n)) {
printf("その旨");
return 0;
}
if(brake(n)) break;
}
printf("入力した整数は、3と7の公倍数です。\n");
return 0;
}
0298 ◆Q0rf/h.OAE
2007/10/14(日) 22:59:140299 ◆Q0rf/h.OAE
2007/10/14(日) 23:08:18[2] 問題文(含コード&リンク):
>297のプログラムを、関数との値の受け渡しと引数や戻り値を使用せずに、
変数のスコープを用いるプログラムを作成すること。
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限: 2007年10月14日23時40分迄
[5] その他の制限:特にありません
宜しくお願いします。
0300デフォルトの名無しさん
2007/10/14(日) 23:10:38>>295
0301デフォルトの名無しさん
2007/10/14(日) 23:25:52[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5076.txt
[3] 環境
[3.1] OS:Windows
[3.3] 言語: C 言語
[4] 期限:10月15日午前1時まで
よろしくお願いします
0302デフォルトの名無しさん
2007/10/14(日) 23:27:25キモい課題だな
0303デフォルトの名無しさん
2007/10/14(日) 23:33:550304デフォルトの名無しさん
2007/10/14(日) 23:47:51#include <stdio.h>
int main(void)
{
int no_min, no_max, sum;
printf("整数を入力してください:");
scanf("%d", &no_min);
printf("整数を入力してください:");
scanf("%d", &no_max);
if(no_min>no_max) no_min^=no_max,no_max^=no_min,no_min^=no_max;
do{
sum=(no_max+no_min)*(no_max-no_min+1)/2;
}while(0);
printf("%d から %d までを足した値は %d です。\n", no_min, no_max, sum);
return 0;
}
0305デフォルトの名無しさん
2007/10/14(日) 23:50:32#include <stdio.h>
int main(void)
{
int no;
puts("============================");
puts(" 読み込んだ整数の個数だけ*を連続表示 " );
puts("============================");
printf("正の整数を入力してください:");
scanf("%d", &no);
while (no-- > 0) puts("*");
return(0);
}
0306デフォルトの名無しさん
2007/10/14(日) 23:53:40#include <stdio.h>
int main(void)
{
int no, sum;
puts("============================");
puts(" 1から5までの和を求めて表示(複合代入演算子+後置増分演算子)" );
puts("============================");
for(no=1,sum=0;no<=5;sum+=no++);
printf("1から5までを足した値は%dです。 \n", sum);
return (0);
}
0307デフォルトの名無しさん
2007/10/15(月) 00:00:21#include <stdio.h>
int main(void){
int i, j;
int A[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }, KA[2][3];
double K;
char buf[50+1];
puts("============================");
puts(" 2行3列の行列を加算する");
puts("============================");
printf("実数を入力してください:");
fscanf(stdin, "%50s", buf);
sscanf(buf, "%lf", &K);
for(i = 0; i < 2; i++){
for(j = 0; j < 3; j++){
KA[i][j] = A[i][j] * K;
}
}
for(i = 0; i < 2; i++){
for(j = 0; j < 3; j++){
printf(" %3d", KA[i][j]);
}
putchar('\n');
}
return(0);
}
0308デフォルトの名無しさん
2007/10/15(月) 00:07:22[2] 問題文(含コード&リンク): 部分ピボット選択付きガウスの消去法を実現するプログラムを作成せよ。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語のみ
[4] 期限: 2007年10月18日午後7時まで
[5] その他の制限: 数学関数を用いる。
0309デフォルトの名無しさん
2007/10/15(月) 00:21:59>>287のはどうやってんだ?
0310デフォルトの名無しさん
2007/10/15(月) 00:26:180311デフォルトの名無しさん
2007/10/15(月) 01:49:02教科書もしかして「線型代数とその応用」?
ピポットなんて概念その本でしかみたことない。
ピポットの概念の説明も書いたほうがレスつきやすい希ガス。
0312デフォルトの名無しさん
2007/10/15(月) 01:50:45もっと本を読め
0313デフォルトの名無しさん
2007/10/15(月) 01:53:58リョーカイ
0314デフォルトの名無しさん
2007/10/15(月) 02:23:30#include <stdio.h>
#include <math.h>
#define N 128
#define swap(type, x, y) do{type tmp = x; x = y; y = tmp;}while(0)
int main(void){
double a[N][N], b[N], mul;
int i, j, k, n;
scanf("%d", &n);
for(i = 0; i < n; i++){
for(j = 0; j < n; j++) scanf("%lf", &a[i][j]);
scanf("%lf", &b[i]);
}
for(i = 0; i < n; i++){
for(j = i, k = i + 1; k < n; k++)
if(fabs(a[j][j]) < fabs(a[k][k]))
j = k;
for(k = 0; k < n; k++) swap(double, a[i][k], a[j][k]);
swap(double, b[i], b[j]);
if((mul = a[i][i]) == 0) return fprintf(stderr, "解なし\n"), 1;
for(j = 0; j < n; j++) a[i][j] /= mul;
b[i] /= mul;
for(j = 0; j < n; j++)
if(j != i){
mul = a[j][i]/a[i][i];
for(k = 0; k < n; k++) a[j][k] -= mul*a[i][k];
b[j] -= mul*b[i];
}
}
for(i = 0; i < n; i++) printf("%g\n", b[i]);
return 0;
}
0315デフォルトの名無しさん
2007/10/15(月) 03:32:04while(1){
int a = getch();
if(a == 0x71) break; //qを押されたら終了
a &= 0xff;
int k = atoi((char *)&a); //文字を数値へ変換
if(k==4{
if(x>0){
x--;
}
}else if(k==8){
if(x<239){
x++;
}
}
}
上記の文章は4を押したら128から-1
8を押したら128から+1するというプログラムなのですが
if(k==4{
if(x>0){
x--;
}
}else if(k==8){
if(x<239){
x++;
}
} の部分を
x=に変換したいのですが
x= ((k==4)&&(x>0)x--) || ((k==8)&&(x<239)x++);
みたいにやってみたのですが上手くいきません
一文で複数条件つけて上手く書く方法お願いしますorz
0316読みづらいので書き直し
2007/10/15(月) 03:34:35while(1){
int a = getch();
if(a == 0x71) break; //qを押されたら終了
a &= 0xff;
int k = atoi((char *)&a); //文字を数値へ変換
if(k==4{
if(x>0){
x--;
}
}else if(k==8){
if(x<239){
x++;
}
}
}
上記の文章は4を押したら128から-1
8を押したら128から+1するというプログラムなのですが
if(k==4{
if(x>0){
x--;
}
}else if(k==8){
if(x<239){
x++;
}
} の部分を
x=に変換したいのですが
x= ((k==4)&&(x>0)x--) || ((k==8)&&(x<239)x++);
みたいにやってみたのですが上手くいきません
一文で複数条件つけて上手く書く方法お願いしますorz
0317デフォルトの名無しさん
2007/10/15(月) 03:35:080318デフォルトの名無しさん
2007/10/15(月) 03:42:450319デフォルトの名無しさん
2007/10/15(月) 03:48:02x = x - (k == 4 && x > 0) + (k == 8 && x < 239);
のほうがいいか。
どっちにしろ、無理に一文にまとめても、効率悪くなるだけで意味ないと思うが。
0320デフォルトの名無しさん
2007/10/15(月) 03:58:350321デフォルトの名無しさん
2007/10/15(月) 04:26:050322デフォルトの名無しさん
2007/10/15(月) 04:43:30専用ブラウザでみてると、ちゃんとインデントされてるよ。
0323デフォルトの名無しさん
2007/10/15(月) 06:30:020324315-317
2007/10/15(月) 06:53:56いや、このスレ通りそういう風にするという宿題だったんです
効率はともかく・・・
アルゴリズムの勉強だったんですかね?
とにかくありがとうございます
0325デフォルトの名無しさん
2007/10/15(月) 07:10:43の方が、題意に沿ってるかもな
こういう書き方は好きじゃないが
0326デフォルトの名無しさん
2007/10/15(月) 07:12:39条件演算子とかいう奴でしたっけ?
そういう書き方もできるのか…あんまり使わないですが覚えておきます
0327デフォルトの名無しさん
2007/10/15(月) 08:38:170328デフォルトの名無しさん
2007/10/15(月) 08:41:210329デフォルトの名無しさん
2007/10/15(月) 10:00:31実行画面
分入力=>2000
33時間20分です
0330デフォルトの名無しさん
2007/10/15(月) 10:09:32実行画面
上底、下底及び高さ入力=>3 4 5
面積=17.50
0331デフォルトの名無しさん
2007/10/15(月) 10:16:07#include <stdio.h>
int main(void)
{
int m;
printf("分入力=>");
scanf("%d", &m);
printf("%d時間%d分です\n", m / 60 , m % 60);
return 0;
}
>>330
#include <stdio.h>
int main(void)
{
int a, b, h;
printf("上底、下底及び高さ入力=>");
scanf("%d%d%d", &a, &b, &h);
printf("面積=%.2f\n", (double)(a + b) * h / 2);
return 0;
}
0332デフォルトの名無しさん
2007/10/15(月) 10:24:20最初にa.jpgを表示し、xキーを押すと次の画像(b.jpg)を表示します
yキーを押すと前の画像(a.jpg)を表示します
これのアルゴリズムが分かりません
for文を使って書きたいです
0333デフォルトの名無しさん
2007/10/15(月) 11:04:29では、がんばってください
0334デフォルトの名無しさん
2007/10/15(月) 11:06:05int day=29;
実行画面
3問:8日
4問:21日
0335デフォルトの名無しさん
2007/10/15(月) 12:57:49>>1
0336デフォルトの名無しさん
2007/10/15(月) 13:47:20#include <stdio.h>
#define NumofProblems 108
int main(void)
{
int n, d, day = 29;
n = NumofProblems / day;
d = NumofProblems % day;
printf("%d問:%d日\n", n, day - d);
if(d) printf("%d問:%d日\n", n + 1, d);
return 0;
}
0337デフォルトの名無しさん
2007/10/15(月) 16:20:45%s/NumofProblems/NUM_OF_PROBLEMS/
いや、ただ単に俺の趣味の問題だがね。
0338デフォルトの名無しさん
2007/10/15(月) 17:59:24[2] 問題文(含コード&リンク):
性能の異なる機械が5台ある。そこに、2種類の製品A・Bの発注がくる。
毎日、発注の有無に関わらずスケジューリングをし、製品の発注があった場合、いつ完成するかを出すプログラムを書きなさい。
ただし、毎日発注があるとは限らない。発注がない場合にはそのスケジューリングは無かったものとし、あった場合にのみ、各機械に仕事が割り当てなれる。
製品Aは機械1(6)⇒機械2(4)⇒機械3(5)⇒機械4(8)⇒機械5(10)
製品Bは機械5(8)⇒機械4(2)⇒機械3(10)⇒機械2(5)⇒機械1(7)の順に加工される。
()内は加工時間、単位:時間
終了条件は、100日
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C言語
[4] 期限:10/16正午
[5] その他の制限:
よろしくお願いします。
0339デフォルトの名無しさん
2007/10/15(月) 18:07:410340338
2007/10/15(月) 18:21:59違います。問題文書き直します。
性能の異なる機械が5台ある。そこに、2種類の製品A・Bの発注がくる。
毎日、発注の有無に関わらずスケジューリングをし、いつ製品が完成するかを出すプログラムを作成しなさい。
ただし、発注間隔はランダムで、毎日発注があるとは限らない。発注がない場合にはそのスケジューリングは無かったものとし、あった場合にのみ、各機械に仕事が割り当てなれる。
製品Aは機械1(6)⇒機械2(4)⇒機械3(5)⇒機械4(8)⇒機械5(10)
製品Bは機械5(8)⇒機械4(2)⇒機械3(10)⇒機械2(5)⇒機械1(7)の順に加工される。
()内は加工時間、単位:時間
終了条件は、100日。
発注が毎日来た場合には、機械がすでに使用されているから、完成するまでの時間がかかるし、
発注があまりない場合には、直ぐに完成する。っていうプログラムを作れって事だと思うんですけど・・・
よろしくお願いします
0341デフォルトの名無しさん
2007/10/15(月) 19:22:43それともおれだけ理解できないのか?
0342デフォルトの名無しさん
2007/10/15(月) 19:43:110343デフォルトの名無しさん
2007/10/15(月) 19:43:450344デフォルトの名無しさん
2007/10/15(月) 20:37:51[2] 問題文(含コード&リンク): 通知勧告を促すプログラムを作りなさい
例) << 何回通告しますか?
>> 5
<< #1 締め切りは12月31日です
<< #2 締め切りは12月31日です
<< #3 締め切りは12月31日です
<< #4 締め切りは12月31日です
<< #5 締め切りは12月31日です
[3] 環境
[3.1] OS: (Windows
[3.2] コンパイラ名とバージョン: VC++
[3.3] 言語: C++
[4] 期限: 早めで
[5] その他の制限:なし
よろしくお願いします
0345デフォルトの名無しさん
2007/10/15(月) 21:02:03//全体の流れ
//無限ループ
//数値の入力、失敗したらピリオドであるかを判定。
//ピリオドなら終了if(getchar)=='.')break;
//ピリオドでなかったら入力間違いのメッセージを出して再入力。fflush(stdin);
//if文で正負0を判定して表示
//以上を繰り返す。
main()
{
int a;
printf("数値aを入力してください");
while(scanf("%d",&a)!='.'){
?????????????????????
if(getchar()=='.'){
break;
}
?????????????????????
if(a>0){
printf("PLUS\n");
}else if(a<0){
printf("MINUS\n");
}else if(a==0){
printf("ZERO\n");
}
}
}
2箇所、分かりません。よろしくお願いします。
0346デフォルトの名無しさん
2007/10/15(月) 21:11:50こっちに誘導した俺が言うのもなんだが、>>1をよく読め
0347 ◆vLIz8KOkPM
2007/10/15(月) 21:23:27[3.1] OS:Linux [3.2] コンパイラ名とバージョン:gcc GNONE2.[3.3] 言語: C言語
[4] 期限: 明日午前9時まで
[5] その他の制限: 関数、構造体、ポインタまで習いました。
初心者なので、理解しやすい、できるだけ簡単なプログラムでお願いします。
[2] 問題文
標準入力から複数の数字を読み込み,読み込んだ数字を逆順にしたものを,out.txt に
書き出しなさい.また,その数の合計した値を out.txt の最後に書き出しなさい.
標準入力から読み込む書式は,最初の数字にはデータの個数,2つ目以降の数字は実際
に処理する数字とする.具体的には,
4 12 -45 56 3
と入力した場合,最初の 4 はこれから読み込む数字の個数を表し,残りの 12 -45 56 3
は out.txt に書き出す数字である.out.txt には
3 56 -45 12 26
と書き出すことになる.最後の 26 は,4つの数字の合計である.
読み込まれる数の個数は毎回変更するため,動的にデータの個数分のメモリを確保(malloc()
関数を使う)すること.
***** ヒント *****
※ 最初の数字を読み込んだ後に malloc()関数で個数分のint型の領域を確保する.malloc()
関数の返り値はint型の配列として扱うことが出来る.
※ 標準入力からの読み込みは scanf() 関数が使える.また,読み込みが終了した場合
scanf() 関数は EOF を返す.つまり,
while(scanf("%d", &value) != EOF) { 処理 }
のような形で読み込み処理は記述できる.上記の処理で,数字を保存しておく.
※ int型の領域の後ろから out.txt に値を出力し,最後に合計値を出力する.
0348デフォルトの名無しさん
2007/10/15(月) 21:27:39>>345
無限ループってかいてあるじゃない。
ループはwhile(1)かfor(;;)が正解
でその後
if(scanf("%d", &a) != 1) {
if(getchar() == '.') break;
puts("なめんな");
fflash(stdin);
continue;
}
scanfって途中で失敗したら読み込んだ内容をストリームに返すっけ…?
0349デフォルトの名無しさん
2007/10/15(月) 21:29:00最近ActionScriptに凝ってるもんで<(^_^;)
0350デフォルトの名無しさん
2007/10/15(月) 21:32:17いや、while(scanf("%d",&a)!='.')はちゃんと無限ループになると思いますよw
0351デフォルトの名無しさん
2007/10/15(月) 21:34:22[1] 授業単元: プログラミング
[2] 問題文:
次のニ次元配列の第二要素を第一要素の小さい順に出力せよ。
a[5][2] = { {11,1}, {5,2}, {15,3}, {3,4}, {8,5} }
出力例:4 2 5 1 2
注:第一要素の値を比べた過程は必ず含むこと。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 16日9:00まで
[5] その他の制限: 特になし
よろしくお願いしますm(__)m
0354デフォルトの名無しさん
2007/10/15(月) 22:10:22#include<stdio.h>
main()
{
int *a,b=0,value;
FILE *fp;
if((fp=fopen("out.txt","w"))==NULL){
printf("file can't open.\n");
exit(1);
}
scanf("%d",&value);
a=(int *)malloc((sizeof(int*))*value);
while(scanf("%d",a)!=EOF){
b+=*a++;
}
while(--value>=0){
fprintf(fp,"%d ",*a--);
}
fprintf(fp,"%d",b);
fclose(fp);
}
0355デフォルトの名無しさん
2007/10/15(月) 22:17:340356デフォルトの名無しさん
2007/10/15(月) 22:20:08図で説明はできるので理解はできているつもりです(理解できていないのかもしれませんが)。
皆さんはどうやってポインタ関連を克服しましたか?
0357デフォルトの名無しさん
2007/10/15(月) 22:26:520358デフォルトの名無しさん
2007/10/15(月) 22:28:47[2] 問題文(含コード&リンク):
性能の異なる機械が5台ある。そこに、2種類の製品A・Bの発注がくる。
毎日、発注の有無に関わらずスケジューリングをし、いつ製品が完成するかを出すプログラムを作成しなさい。
ただし、発注間隔はランダムで、毎日発注があるとは限らない。発注がない場合にはそのスケジューリングは無かったものとし、あった場合にのみ、各機械に仕事が割り当てなれる。
製品Aは機械1(6)⇒機械2(4)⇒機械3(5)⇒機械4(8)⇒機械5(10)
製品Bは機械5(8)⇒機械4(2)⇒機械3(10)⇒機械2(5)⇒機械1(7)の順に加工される。
()内は加工時間、単位:時間
終了条件は、100日。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C言語
[4] 期限:10/16正午
[5] その他の制限:
よろしくお願いします。
0359デフォルトの名無しさん
2007/10/15(月) 22:44:45宿題以外ならつかわなければいい
0360デフォルトの名無しさん
2007/10/15(月) 22:49:29ここで他の人の宿題を解いて覚えたよ
0361デフォルトの名無しさん
2007/10/15(月) 22:49:56#include<stdio.h>
main()
{
int a[5][2]={{11,1},{5,2},{15,3},{3,4},{8,5}};
int i,j,tmp1,tmp2;
for(i=0;i<5;i++)
for(j=4;j>i;j--)
if(a[j-1][0]>a[j][0]){
tmp1=a[j][0];
tmp2=a[j][1];
a[j][0]=a[j-1][0];
a[j][1]=a[j-1][1];
a[j-1][0]=tmp1;
a[j-1][1]=tmp2;
}
for(i=0;i<5;i++)
printf("%d ",a[i][1]);
printf("\n");
}
整列にバブルソートを使用。ソート部分を関数化すれば他のソートにも変更可能。
0362デフォルトの名無しさん
2007/10/15(月) 22:58:49一日の発注数の最大とかは決まってないの?
0363358
2007/10/15(月) 23:11:59発注量は一定です。
よろしくお願いします
0364デフォルトの名無しさん
2007/10/15(月) 23:13:19thx
助かりました
0365 ◆vLIz8KOkPM
2007/10/15(月) 23:14:00ありがとうございましたm(__)m助かりました☆
0366デフォルトの名無しさん
2007/10/16(火) 00:05:13qsortを使って…
#include<stdio.h>
#include<stdlib.h>
int compare_int(const int *a,const int *b)
{
return *a - *b;
}
main()
{
int i,*ptr;
int a[5][2] = { {11,1},{5,2},{15,3},{3,4},{8,5} };
int buffer = mallco(sizeof(int)*10);
ptr = buffer;
for(i=0;i<5;i++){
*buffer++=a[i][0];*buffer++=a[i][1];
}
qsort(data,5,sizeof(int)*2,(int(*)(const void*,const void*))compare_int);
for(i=0;i<5;i++){
++buffer;printf("%d,",*buffer++);
}
}
0367デフォルトの名無しさん
2007/10/16(火) 00:12:18参考になるかもしれないソースは見つけた…。
有名なtarのソースファイル……自前で組む気になれない
http://www.vector.co.jp/soft/winnt/util/se015014.html
0368714
2007/10/16(火) 01:06:25[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5080.txt
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C言語
[4] 期限: 10月16日 pm5:00
[5] その他の制限:
よろしくお願いします。
0369デフォルトの名無しさん
2007/10/16(火) 01:42:58[2] 問題文(含コード&リンク): 以下のプログラムは変数a,bの値を表示した後
値の入れ替えを行って再度表示するプログラムであるが誤りを含んでいる。
それを、ポインタ変数を使って正しく変更せよ。
以下のプログラム↓
#inlude <stdio.h>
void swap(int x,int y){
int temp;
temp=x;
x=y;
y=temp;
}
int main(void)
{
int a=10,b=30;
printf("a=%d b=%d\n",a,b);
swap(a,b);
printf("a=%d b=%d\n",a,b);
return 0;
}
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C言語
[4] 期限:10/16の10時
[5] その他の制限:
よろしくお願します。
0370デフォルトの名無しさん
2007/10/16(火) 01:44:43void swap(int *x,int *y){
int temp;
temp=*x;
*x=*y;
*y=temp;
}
swap(&a,&b);
確認してないから間違ってるかも
0372デフォルトの名無しさん
2007/10/16(火) 02:56:41http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5081.txt
問題文のnewton()だとaが渡せないのでaをグローバル変数として宣言してます。
0373デフォルトの名無しさん
2007/10/16(火) 10:38:48( ´∀`)つttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5082.txt
0374デフォルトの名無しさん
2007/10/16(火) 10:41:430375デフォルトの名無しさん
2007/10/16(火) 11:05:10switch (rand() % 100) {
↓
switch (rand() % 400) {
くらいにすると、トレースしやすい結果がでます。
0376デフォルトの名無しさん
2007/10/16(火) 11:08:38エラー E2034 2seihinn.cpp 44: 'void *' 型は 'order_t *' 型に変換できない(関数 create_order(int) )
エラー E2034 2seihinn.cpp 48: 'void *' 型は 'product_t *' 型に変換できない(関数 create_order(int) )
ってなるんですけど・・・
0377デフォルトの名無しさん
2007/10/16(火) 11:10:09C言語じゃないのかよ!ってかそこからかよ!
0378デフォルトの名無しさん
2007/10/16(火) 11:12:46とりあえず拡張子は .c にしろ。話はそれからだ。
0379デフォルトの名無しさん
2007/10/16(火) 11:21:17自分でC言語と指定してるのに何を言っとるのだー
0380デフォルトの名無しさん
2007/10/16(火) 11:24:300381376
2007/10/16(火) 11:41:25C++でお願いします。
0382デフォルトの名無しさん
2007/10/16(火) 11:45:00!!!
もしかしてどうすればコンパイルできるのか分からないだけか?
0383376
2007/10/16(火) 11:52:000384デフォルトの名無しさん
2007/10/16(火) 11:55:59スレタイにもあるようにC++の宿題も全然おっけー
0385デフォルトの名無しさん
2007/10/16(火) 12:50:20あほらしくなってきた・・・
誰か他の人よろしく。わしゃもう寝る。
0386デフォルトの名無しさん
2007/10/16(火) 13:58:080387368
2007/10/16(火) 13:58:25おかげさまで間に合いました。
本当にありがとうございました。
0388デフォルトの名無しさん
2007/10/16(火) 15:24:48[1] 授業単元:言語処理
[2] 問題文(含コード&リンク):
ここに書きました。
http://doiob.net/doiob/uploader/src/up11562.txt
tanakaとta na kaの間はタブであけてます。taとnaの間は
スペースであけています。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C言語
[4] 期限:明日まで。
[5] その他の制限:
よろしくお願します。
0389デフォルトの名無しさん
2007/10/16(火) 15:29:120390デフォルトの名無しさん
2007/10/16(火) 15:33:43最後に入力された値の合計値を表示するプログラムを作成する
ただし、入力データの終わりは負の数で示すものとする
(例えば1,5、4、−1が入力された場合、『合計=10』と表示)
※
・入力された値が0以上であるかどうかをはじめて判定する前に
最初の値を読み込んでいなくてはならない
・値を読み込む回数=判定する回数=加算回数+1
問2、 問1を拡張して、合計だけでなく平均も表示するプログラムの作成
(例えば上の数の並びに対しては、『合計=10 平均=3』と表示
宜しくお願いします
0391デフォルトの名無しさん
2007/10/16(火) 15:34:58可変長だと面倒なんだけど、単語の長さやファイルの行数に上限を設けたらダメかな。
0392デフォルトの名無しさん
2007/10/16(火) 15:38:47[2] 問題文(含コード&リンク):
1、整数型iにデータを入力し、iのアドレスをポインタ変数pに記憶して、
i,&i,p,*pの値を表示するプログラムを作成せよ。
2、二つの実数型変数xとyにデータを入力してそれらのアドレスを
ポインタ変数pとqにそれぞれ記憶し、ポインタ変数pとqを用いてxとyの和
を求めるプログラムを作成せよ
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C言語
[4] 期限:10/16の10時
[5] その他の制限:
二問ありますがよろしくお願します。
0393デフォルトの名無しさん
2007/10/16(火) 15:40:29#include <stdio.h>
int main()
{
int cnt = 0;
int sum = 0;
for (int val; scanf("%d", & val) == 1 && val >= 0; ++cnt) {
sum += val;
}
printf("sum:%d, avg:%g\n", sum, (double) sum / cnt);
return 0;
}
0394デフォルトの名無しさん
2007/10/16(火) 15:43:400395デフォルトの名無しさん
2007/10/16(火) 15:44:13// 1
#include <stdio.h>
int main() {int i; scanf("%d", & i); char * p = & i; printf("%d, %p, %p, %c\n", i, & i, p, * p); return 0;}
// 2
#include <stdio.h>
int main() {float x, y; scanf("%g%g", & x, & y); float * p = x; float * q = y; * p + * q; return 0;}
0396デフォルトの名無しさん
2007/10/16(火) 16:08:04LinuxでBCCっすかw
0397390
2007/10/16(火) 16:15:51最後に入力された値の合計値を表示するプログラムを作成する
ただし、入力データの終わりは負の数で示すものとする
(例えば1,5、4、−1が入力された場合、『合計=10』と表示)
※
・入力された値が0以上であるかどうかをはじめて判定する前に
最初の値を読み込んでいなくてはならない
・値を読み込む回数=判定する回数=加算回数+1
問2、 問1を拡張して、合計だけでなく平均も表示するプログラムの作成
(例えば上の数の並びに対しては、『合計=10 平均=3』と表示
すみません、emacsで使えるようできませんか?
0398デフォルトの名無しさん
2007/10/16(火) 16:21:32>1
0399デフォルトの名無しさん
2007/10/16(火) 16:31:29[2] 問題文(含コード&リンク):
キーボードから空白を含まない文字列を入力し、その文字列内の大文字アルファベットの個数
小文字アルファベットの個数、数字の個数、それら以外の個数を数えあげて表示する
プログラムを作成せよ
[3] 環境
[3.1] OS:Windows [3.2] コンパイラ名とバージョン:gcc 3.4
[3.3] 言語: C++
[4] 期限:無期限
[5] その他の制限:特になし
一応作ってみたんですが、思うようにいかないです
0400デフォルトの名無しさん
2007/10/16(火) 16:32:40単語の長さは20くらいでカバーできると思います。
行数は10でいいです。
あとでかえるので。
0401デフォルトの名無しさん
2007/10/16(火) 16:32:41その「一応」をアップロードしたまえ。
0402デフォルトの名無しさん
2007/10/16(火) 16:33:26>すみません、emacsで使えるようできませんか?
ここはC/C++スレ、elisperはいないです。
0403デフォルトの名無しさん
2007/10/16(火) 16:35:33問1
整数nを仮引数として取り、
n≦0のとき0
n>0のとき1/n^2
を戻り値とするdouble型関数
func(n)を定義せよ。
問2
上で定義したfunc(n)を使い、
1+1/1^2+1/2^2+1+3^2+・・・+1/100^2
の値を出力するプログラムを作成せよ。
0404デフォルトの名無しさん
2007/10/16(火) 16:35:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5083.txt
エラーチェックを全くしてないのでそのあたり突っ込まれそうなら適宜補完してください。
あと、1.txtと2.txtがc:\にあることになってるのでそこも変更してください。
0405399
2007/10/16(火) 16:35:57#include<ctype.h>
main()
{char a[100];
char *px;
int i,b,c,d,e;
i = 0; b = 0; c = 0; d = 0; e = 0;
scanf("%s", a);
px = &a[i];
for(px=a; *px != '\0'; px++){
for(i=0; a[i] != '\0'; i++){
if (a[i] = isupper(a[i]))
b++;
else if(a[i] = islower(a[i]))
c++;
else if(a[i] = isdigit(a[i]))
d++;
else
e++; }}
printf("ALPHABET = %d\n", b);
printf("alphabet = %d\n", c);
printf("numeral = %d\n", d);
printf("others = %d\n", e);}
と作ってみてはいるんですが、コンパイルした結果を見る限り、
else if(a[i] = islower(a[i]))
c++;
else if(a[i] = isdigit(a[i]))
d++;
の部分が作用されてないっぽいです。よろしくお願いします。
0406404
2007/10/16(火) 16:40:15行数に関しては適当に#defineして現在6になってるところを置き換えたらいけるはず。
0407デフォルトの名無しさん
2007/10/16(火) 16:47:15>for(px=a; *px != '\0'; px++){
>for(i=0; a[i] != '\0'; i++){
何で二重ループしてるの?
pxへの代入が使われてないし、
これだとaの文字数分、内側のループを繰り返すと思うよ
試してないけど
ループは一重でおk
外側のループを消し去ってしまえ
0408399
2007/10/16(火) 16:52:05俺もそう思うんですけど、それだとポインタ使わないってことですよね?
実はその部分はヒントとして教授が提示してた部分なんですよ
だから無理やりにでも使わなきゃいけないのかなって・・・
0409デフォルトの名無しさん
2007/10/16(火) 16:57:05#include <iostream>
#include <string>
#include <functional>
#include <algorithm>
using namespace std;
int upper_num;
int lower_num;
int digit_num;
struct Counter : unary_function<char, void> {
void operator () (char c) {
if ('A' <= c && 'Z' >= c)
++upper_num;
else if ('a' <= c && 'z' >= c)
++lower_num;
else if ('0' <= c && '9' >= c)
++digit_num;
}
};
int main() {
string str;
cin >> str;
for_each(str.begin(), str.end(), Counter());
cout << "upper: " << upper_num << endl;
cout << "lower: " << lower_num << endl;
cout << "digit: " << digit_num << endl;
}
0410デフォルトの名無しさん
2007/10/16(火) 16:59:22#include<stdio.h>
double func(int n)
{
return n<=0 ? 0 : 1.0/(n*n);
}
main()
{
int n;
double s=1.0;
for(n=0;n<=100;n++)
s+=func(n);
printf("f(n)=%.10lf\n",s);
}
表示に指定がなかったので小数点以下10桁を表示するようにしてます。
0411デフォルトの名無しさん
2007/10/16(火) 17:05:43それは、外側のループ部分だけ示された、ということ?
それなら内側のループ消して、処理部分のa[i]を*pxに変えればいいだけ
もし二つのループを両方示されたなら、
どちらかを使えという意味だと思うよ
0412デフォルトの名無しさん
2007/10/16(火) 17:09:46#! /usr/bin/ruby
def function(n)
if n <= 0 then
0
else
1 / n ** 2
end
end
sum = 0.0
(1..100).each { |n| sum += function(n.to_f) }
puts sum
# 何語で書けば良いか分からなかったので ruby で書きましたw
0413399
2007/10/16(火) 17:14:41示されたのは外側のループですね
言われたらなんとなくわかった気がするので、また試してみます
ありがとうございました。
>>409
ありがとうございます。
でも俺の知識の範疇を軽く越えてますね・・・ORZ
0414デフォルトの名無しさん
2007/10/16(火) 17:19:390415デフォルトの名無しさん
2007/10/16(火) 17:23:550416デフォルトの名無しさん
2007/10/16(火) 17:47:31>>412はスレタイを読むべきだと思うよ
0417デフォルトの名無しさん
2007/10/16(火) 17:50:18( ´∀`)つ puts (1..100).inject(0.0) { |sum, n| sum += if n <= 0 then 0.0 else 1.0 / n**2 end }
0418デフォルトの名無しさん
2007/10/16(火) 17:51:040419デフォルトの名無しさん
2007/10/16(火) 18:33:32解答、ありがとうございました。
>>412
C言語でした。書き忘れて申し訳ないです。
0420デフォルトの名無しさん
2007/10/16(火) 19:14:12自分ならこう書きます、ただし空白を含んだ文字列も可ですが
文字列長の制限256Byteそれを越す文字列を入れると暴走します…。
#include<stdio.h>
#include<ctype.h>
#define BUFFER_LEN 256
void main(void)
{
int upper_count,lower_count,num_count;
char buffer[BUFFER_LEN];
upper_count = lower_count = num_count = 0;
gets(buffer);
for(;*buffer!='\0';++buffer){
if(isupper(*buffer))++upper_count;
if(islower(*buffer))++lower_count;
if(isdigit(*buffer))++num_count;
}
printf("大文字:%d 小文字:%d 数字:%d",upper_count,lower_count,num_count);
}
0421デフォルトの名無しさん
2007/10/16(火) 19:21:12[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5084.txt
[3] 環境
[3.1] OS: XP VISTA
[3.2] visual studio 2005
[3.3] 言語: C++
[4] 期限: 10/19 〜0:00
[5] その他の制限: 特になし
よろしくお願いします。
0422420
2007/10/16(火) 20:14:01*buffer!='|0' || *buffer != ' '
とすればいけるかな問題文満たせるな…
0423422
2007/10/16(火) 20:15:31誤:|0
正:\0
0424デフォルトの名無しさん
2007/10/16(火) 21:46:29[2]問題文
ニュートン法を使って、f(z)=z*z*z-z-1=0の解である虚数解と実数解をすべて、C言語を使って出力せよ。
[3]環境
OS : XP
言語: C
[4]期間
2007/10/22
[5]制限
特になし
よろしくお願いします。m(_ _)m
0425デフォルトの名無しさん
2007/10/16(火) 22:07:39点aでfに接する直線は、傾きg(a)で、(a,f(a))を通る
y- f(a) = g(a)(x - a)
y=0 のときの解は、x = a- f(a)/g(a)
たとえば a=1+i などから初めて、k(a) = a- f(a)/g(a)の値が収束すればいい
0426デフォルトの名無しさん
2007/10/16(火) 22:13:05例えば、調べる値は、自然数 n に対して、( n/360 + 1 )( cos( nπ /360 ) + i * sin(nπ /360) )などにしたらどうだ
0427デフォルトの名無しさん
2007/10/16(火) 22:49:32・根本的に配列とポインタを混同している
・オーバーフロー懸念するならfgets使えよ
0428デフォルトの名無しさん
2007/10/16(火) 22:58:370429デフォルトの名無しさん
2007/10/16(火) 23:13:060430428
2007/10/16(火) 23:24:190431デフォルトの名無しさん
2007/10/16(火) 23:28:48[2]問題文
酔歩 (ランダムウオーク)
原点から出発し、k歩あるいた後の位置がどこになるかを考察する。
乱数を発生させ、偶数であれば正の方向に一歩、奇数であれば負の方向に一歩進むとする。]
k=100の場合の試行を10000回おこない、結果をグラフで表示するプログラムを作れ。
[3]環境
OS : XP
言語: C
[4]期間
2007/10/17
[5]制限
特になし
どなたか、お願いいたします。
0432428
2007/10/16(火) 23:59:04#include <stdio.h>
#include <complex.h>
#define Complex complex<double>
Complex f(Complex z){ z=z*z*z-z-(Complex)1;return z;}
Complex h(Complex z){z=z-f(z)/((Complex)3*z*z-(Complex)1);return z;}
main(){
Complex z , I(0,1),w[9];
int n,i,k=0;
for(n=0;n<1000;n++){
z=(Complex)(n/100)*exp(I*M_PI* (Complex)((n+0.0)/100));
for(i=0;i<200;i++)z=h(z);
if(abs(f(z))<0.001)for(i=0;i<k;i++)if(abs(z-w[i])<0.01)break;
if(i==k){w[k]=z;k++;printf("real=%f\timag=%f\n", real(z),imag(z));}}}
0433デフォルトの名無しさん
2007/10/17(水) 00:06:45どんなグラフにすればいいの?
それが分かればやってみる。
0434デフォルトの名無しさん
2007/10/17(水) 00:09:52ヒストグラムで表示されるプログラムだと助かりますm(_ _)m
0435デフォルトの名無しさん
2007/10/17(水) 00:17:420436デフォルトの名無しさん
2007/10/17(水) 00:19:23k[0]が10なら-100のところに10個点をつける といったところだろう
0437デフォルトの名無しさん
2007/10/17(水) 00:23:040438デフォルトの名無しさん
2007/10/17(水) 00:28:14出力例を書いてくれると助かります。m(_ _)m
0439デフォルトの名無しさん
2007/10/17(水) 00:30:11*
*
* * *
** *** * *
0440デフォルトの名無しさん
2007/10/17(水) 00:35:34100歩移動した結果は-100〜100の間の偶数、計101個にしかならないので要素数は101でいい
#define STEP 100
#define STEP_TO_IDX(n) (((n) + STEP) / 2)
#deine IDX_TO_STEP(n) (n * 2 - STEP)
こんな感じで
0441デフォルトの名無しさん
2007/10/17(水) 00:39:030442デフォルトの名無しさん
2007/10/17(水) 00:40:160443デフォルトの名無しさん
2007/10/17(水) 00:40:53すいません、本当にCについて無知でして・・・。というか、出力例という言葉が分からない感じでして。
一応、グラフについてはどんな形でもいいと言われました。
なので、実行した下に表示される形でも、エクセルに数値が出される形でも何でもいいです
m(_ _)m
0444デフォルトの名無しさん
2007/10/17(水) 00:42:11初期値 z = x + i*y を入力する形で作れませんか?
0445デフォルトの名無しさん
2007/10/17(水) 00:44:38それとも90°曲げて右に伸びるタイプが良かったのか、
目盛や軸をつける必要があるのかないのか、
とか、そういう部分のことだ。
何でもいいということが分かったので>>439風にする。
0446デフォルトの名無しさん
2007/10/17(水) 00:47:30#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, j, k[101] = {0}, pos;
srand(time(NULL));
for(i=0; i<1000; i++) {
for(j=0, pos=0; j<100; j++) pos += rand() % 2 ? 1 : -1;
k[(pos+100)/2]++;
}
for(i=0; i<=100; i++) {
printf("%3d:%3d:", i * 2 - 100, k[i]);
for(j=0; j<k[i]; j+=2) putchar('*');
putchar('\n');
}
return 0;
}
0447デフォルトの名無しさん
2007/10/17(水) 00:48:19形は439の形で
縦軸と横軸に簡単な目盛りがついていれば助かります
目盛りはいりません
本当にすみません
0448デフォルトの名無しさん
2007/10/17(水) 00:50:34>縦軸と横軸に簡単な目盛りがついていれば助かります
>目盛りはいりません
どっちだよ。
今ヨーグルト喰ってるから、ちょっと待っててね。
0449デフォルトの名無しさん
2007/10/17(水) 00:51:29ごめん、何のためにあるんだ?
俺は配列定数作りたい時にしか使ってないのだが……
0450デフォルトの名無しさん
2007/10/17(水) 00:59:23申し訳ございませんm(_ _)m
0451デフォルトの名無しさん
2007/10/17(水) 01:00:29いや C++ から逆輸入かな?と思ったんだけどね。
0452デフォルトの名無しさん
2007/10/17(水) 01:00:47ちょ
0453451
2007/10/17(水) 01:05:140454デフォルトの名無しさん
2007/10/17(水) 01:16:00[2] 問題文(含コード&リンク):
連結リストによる実装を行う。
・各要素を表す構造体の他に連結リストの先頭に構造体を1つ置き、これを
ヘッダーと呼ぶことにする。
・次の要素が存在しない場合には、対応する構造体では、次の構造体への
ポインターをNULLとする。
・連結リストの構造体は、
struct c{
int a;
struct c *ne;
};
とする。
指定された構造体の前の構造体へのポインターを返す関数preを作成せよ。
(例えば、
□→□→□→□→□
とすると、指定された構造体が左から4番目としたら、左から2番目。)
最初の引数を、指定する構造体へのポインターとし、次の引数を対象となる
連結リストのヘッダーへのポインターとして、
struct c *pre(struct c *t, struct c *l){
に続けて書くこと。尚、main関数は作らなくても良い。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月18日9:00まで
[5] その他の制限: 文章でも説明(これは自分で書こうと思います)しないと
いけないので、出来るだけ簡単な文法を使って書いて頂けると助かります。
0455デフォルトの名無しさん
2007/10/17(水) 01:16:11え〜と・・・勝手な仕様変更についての「申し訳ございません」だったんですが・・・。
何かこっちの失礼としてとられたのなら、すみません。m(_ _)m
とりあえず、今からレポート作ってきます。本当に助かりました。
ありがとうございました。
0456デフォルトの名無しさん
2007/10/17(水) 01:22:323番目じゃなくて2番目?
0457デフォルトの名無しさん
2007/10/17(水) 01:25:09ヨーグルト食べたよー。途中までは >>446 を流用した。適当に改行して。
途中で面倒になったのは許してくれ。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int k = 100;
int n = 10000;
int a[21] = {0};
int i, j, p;
srand(time(NULL) ^ 0xBadFeel);
for (i = 0; i < n; i++) {
for (j = 0, p = 0; j < k; j++) { p += rand() % 2 ? 1 : -1; }
a[(p + k) / 10]++;
}
for (i = 0; i < 21; i++) {
printf("% 6d %c", n - i * 500, (i % 2 ? '|' : '+'));
for (j = 0; j < 21; j++) {
printf(" %c ", ((((20 - i) * 500 - a[j]) > 0) ? ' ' : '*'));
}
printf("\n");
}
printf(" /-100 0 +100\n");
return 0;
}
0458デフォルトの名無しさん
2007/10/17(水) 01:28:08#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int k = 100;
int n = 10000;
int a[21] = {0};
int i, j, p;
srand(time(NULL) ^ 0xBadFeel);
for (i = 0; i < n; i++) {
for (j = 0, p = 0; j < k; j++) { p += rand() % 2 ? 1 : -1; }
a[(p + k) / 10]++;
}
for (i = 0; i < 21; i++) {
printf("% 6d %c", n - i * 500, (i % 2 ? '|' : '+'));
for (j = 0; j < 21; j++) {
printf(" %c ", ((((20 - i) * 500 - a[j]) > 0) ? ' ' : '*'));
}
printf("\n");
}
printf(" /-100 0 +100\n");
return 0;
}
0459デフォルトの名無しさん
2007/10/17(水) 01:41:14ってことじゃない?
0460デフォルトの名無しさん
2007/10/17(水) 02:41:53[2] 問題文(含コード&リンク):
(X,Y)=(-100,100)
(X,Y)=(-100.0)
(X,Y)=(0,100)
(X,Y)=(100,0)
(X,Y)=(-40,0)
(X,Y)=(50,-100)
これらの座標値を与えると単純な閉路(閉路を多角形と考える)を計算し、点A(-40,-20)、点B(-20,-20)が多角形の内部か外部か判定するプログラムを作れ
[3] 環境
[3.1] OS:指定無し
[3.2] 指定無し
[3.3] 言語: どちらでも可
[4] 期限:2007年10月17日15:00まで
[5] その他の制限:特に無し
わかる方、是非教えてください(><)
0461デフォルトの名無しさん
2007/10/17(水) 05:27:211.与えられた点を与えられた順序で繋いでいく
2.与えられた点を凸包になるように繋いでいく
どっち?
※2.の場合には例であげられた点(-40,0)を通らない
0462デフォルトの名無しさん
2007/10/17(水) 07:18:55ただ、2.の方が実装は楽しそう。
0463399
2007/10/17(水) 08:17:20結果は>>405と変わりませんでした。
やっぱり else if(*px = isdigit(*px))
d++;
else
e++;
この部分が適用されてないっぽいです。
これはいったいどういうことなんでしょうか・・・
0464デフォルトの名無しさん
2007/10/17(水) 08:17:38途中で支離滅裂なことばっかりいってすみません。
最後まで面倒みていただき、ありがとうございました。
0465デフォルトの名無しさん
2007/10/17(水) 08:27:120466デフォルトの名無しさん
2007/10/17(水) 08:56:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5085.txt
0467デフォルトの名無しさん
2007/10/17(水) 09:30:21>461さん
全ての点を含めた多角形なので1だと思われます(^O^)
0468デフォルトの名無しさん
2007/10/17(水) 09:36:42>466さん
プログラミング初心者なので規格とかわからないのですが、
とりあえずはプログラムが実行出来て答えが導き出せれば良いとのことです。
これがそのプログラムですか?参考にします☆
ありがとうございます!!
0469デフォルトの名無しさん
2007/10/17(水) 09:38:14ループが終わった後に文字列表示してみればわかるんじゃないかな
0470466
2007/10/17(水) 10:07:130471デフォルトの名無しさん
2007/10/17(水) 10:34:18#include <stdio.h>
#define NITEM(arr) (sizeof(arr)/sizeof(arr[0]))
typedef struct{int x, y;}vect2;
vect2 vect2_sub(const vect2 a, const vect2 b){
vect2 ret;
ret.x=b.x-a.x;
ret.y=b.y-a.y;
return ret;
}
int is_inside(vect2 vert[], int vert_num, vect2 p){
vect2 v1v2, v1p;
double temp;
int i, check=0;
for(i=0;i<vert_num;i++){
v1v2=vect2_sub(vert[i], vert[(i+1)%vert_num]);
v1p=vect2_sub(vert[i], p);
temp=v1v2.x*v1p.y-v1v2.y*v1p.x;
if(temp>0) check++;
if(temp<0) check--;
}
return !!(check);
}
int main(int argc, char *argv[]){
vect2 vert[]={{-100,100},{-100,0},{0,100},{100,0},{-40,0},{50,-100}};
vect2 chk_p[]={{-40,-20},{-20,-20}};
int i;
for(i=0;i<NITEM(chk_p);i++)
printf("(%d,%d) is %sside.\n", chk_p[i].x, chk_p[i].y, is_inside(vert, NITEM(vert), chk_p[i])?"in":"out");
return 0;
}
0473466
2007/10/17(水) 10:43:13内積じゃ無理ですね。
0474471
2007/10/17(水) 10:55:07#include <stdio.h>
#define NITEM(arr) (sizeof(arr)/sizeof(arr[0]))
typedef struct{int x, y;}vect2;
vect2 vect2_sub(const vect2 a, const vect2 b){
vect2 ret;
ret.x=b.x-a.x;
ret.y=b.y-a.y;
return ret;
}
int is_inside(vect2 vert[], int vert_num, vect2 p){
vect2 v1v2, v1p;
int i, j, temp, check, inside_count=0;
for(i=0;i<vert_num;i++){
for(j=0,check=0;j<3;j++){
v1v2=vect2_sub(vert[(i+j)%vert_num], vert[(i+(j+1)%3)%vert_num]);
v1p=vect2_sub(vert[(i+j)%vert_num], p);
temp=v1v2.x*v1p.y-v1v2.y*v1p.x;
if(temp>0) check++;
if(temp<0) check--;
}
if(check==3 || check==-3) inside_count+=check/3;
}
return !!(inside_count);
}
int main(int argc, char *argv[]){
vect2 vert[]={{0,0},{100,0},{0,100},{100,100}};
vect2 chk_p[]={{10,20},{20,10}};
int i;
for(i=0;i<NITEM(chk_p);i++) printf("(%d,%d) is %sside.\n", chk_p[i].x, chk_p[i].y, is_inside(vert, NITEM(vert), chk_p[i])?"in":"out");
return 0;
}
0475デフォルトの名無しさん
2007/10/17(水) 10:56:540476デフォルトの名無しさん
2007/10/17(水) 10:57:45vect2 vert[]={{0,0},{100,0},{0,100},{100,100}};
vect2 chk_p[]={{10,20},{20,10}};
↓
vect2 vert[]={{-100,100},{-100,0},{0,100},{100,0},{-40,0},{50,-100}};
vect2 chk_p[]={{-40,-20},{-20,-20}};
0477デフォルトの名無しさん
2007/10/17(水) 11:16:050478デフォルトの名無しさん
2007/10/17(水) 11:58:270479デフォルトの名無しさん
2007/10/17(水) 12:30:36どの問題の答えかは知らないが解いたものうp!
新たな宿題なら>>1の質問テンプレを読んで書きなおし
0480デフォルトの名無しさん
2007/10/17(水) 12:48:550481デフォルトの名無しさん
2007/10/17(水) 12:53:09何の話だ?必要な情報が無い
0482デフォルトの名無しさん
2007/10/17(水) 13:02:06#include <stdio.h>
#include <stdlib.h>
main(){
int x[100],y[100];
for(int i=0;i<100;i++){x[i]=rand();y[i]=rand();}
}
0483デフォルトの名無しさん
2007/10/17(水) 13:06:39RAND_MAX*RAND_MAX
0484デフォルトの名無しさん
2007/10/17(水) 13:11:230485デフォルトの名無しさん
2007/10/17(水) 13:12:14点の結び方で異なる面積になるから、そのうち最大のやつを求めてくれって事
0487デフォルトの名無しさん
2007/10/17(水) 13:54:45struct c *p;
for(p = l: p->ne!=NULL; p=p->ne) if(p->ne==t) return p;
return NULL;
}
0488デフォルトの名無しさん
2007/10/17(水) 14:28:36http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5086.c
0489デフォルトの名無しさん
2007/10/17(水) 14:50:40小学生にでも言い聞かせてるつもりか?
分かってるなら自分で解けばいいだろ
0490デフォルトの名無しさん
2007/10/17(水) 19:00:27[2] 問題文(含コード&リンク):宿題1で作ったプログラムを以下のデータに
対応できるように変更及び拡張せよ。
成績データとしてホームページから seiseki2.txtをダウンロードせよ。
変更するプログラム:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5088.txt
seiseki2.txt:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5089.txt
[3] 環境
[3.1] OS:win xp
[3.2] Microsoft Visual Studio .NET 2003
[3.3] 言語:c++
[4] 期限:2007年10月19日9:30まで
[5] その他の制限:(どこまで習っているか)構造体、ファイル処理まで
よろしくお願いします。
0491490
2007/10/17(水) 19:02:43「以下のデータ」:
学生数: 10人 → 30人
科目数: 2 → 5
(数学、生物学、地学、英語、国語)
平均に基づいて成績をつけよ。
S: 90以上
A: 80 < 点数の平均 < 90
B: 70 < 点数の平均 < 80
C: 60 < 点数の平均 < 70
D: 60未満
抜けてました。すみません。よろしくお願いします。
0492デフォルトの名無しさん
2007/10/17(水) 19:35:05えっと・・・どこがわからないんですか?
0493デフォルトの名無しさん
2007/10/17(水) 20:54:11rand()の実装依存。
0494デフォルトの名無しさん
2007/10/17(水) 21:28:42randに依存するけど、同じ値なら同じ出力するプログラムがいいんで巣が
0495デフォルトの名無しさん
2007/10/17(水) 22:21:49>>488 はダメだった?
0496デフォルトの名無しさん
2007/10/17(水) 22:39:340497デフォルトの名無しさん
2007/10/17(水) 22:47:15[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5090.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10月19日10:00まで
[5] その他の制限: 特になし
よろしくお願いします
0498466
2007/10/18(木) 00:06:04#include <stdio.h>
#include <math.h>
#define N 128
typedef struct point{
double x, y;
}point;
double angle_from_x(point p1, point p2){
return atan2(p2.y - p1.y, p2.x - p1.x);
}
int main(void){
point p[N], q;
double p_ang[N], q_ang, dif_ang;
int n, i, cur, prev = 0;
for(n = 0; n < N; n++) if(scanf("%lf%lf", &p[n].x, &p[n].y) != 2) break;
scanf("%lf%lf", &q.x, &q.y);
for(i = 0; i < n; i++) p_ang[i] = angle_from_x(p[i], p[(i + 1)%n]);
for(i = 0; i < n; i++){
q_ang = angle_from_x(p[i], q);
dif_ang = p_ang[i] - q_ang;
dif_ang = dif_ang > M_PI ? dif_ang - 2*M_PI : dif_ang < -M_PI ? dif_ang + 2*M_PI : dif_ang;
cur = dif_ang > 0 ? 1 : dif_ang < 0 ? -1 : 0;
if(cur*prev < 0) break;
prev = cur;
}
if(i < n) puts("入ってる");
else puts("入ってない");
return 0;
}
0499466
2007/10/18(木) 00:25:25だめぽ
0500デフォルトの名無しさん
2007/10/18(木) 01:08:19[2] 問題文(含コード&リンク):
名前と得点のデータをメンバとする構造体を定義し、入力と表示を行うプログラムを作成する。
入力件数は最大5件で、名前は10文字、得点は100点までの入力とし、範囲外ならばエラーを表示し再入力させる。
名前にENDと入力されたら入力を終了し結果を表示する。データは得点の高い順に表示する。
また、名前の最初にENDと入力した場合はエラーを表示しプログラムを終了する。
データの1件分の入力、表示、ソートをそれぞれ関数に分けて処理を行う。
[3] 環境
[3.1] OS:win xp
[3.2] コンパイラ名とバージョン:bcc5.5
[3.3] 言語:C言語
[4] 期限:2007年10月19日10:00まで
[5] その他の制限:特になし
よろくお願いします><
0501デフォルトの名無しさん
2007/10/18(木) 01:09:32個人的にはこっちの方が分かりやすいなぁ、1文字ずつ読むという意味においては。
#include <algorithm>
#include <cctype>
#include <iostream>
#include <iterator>
int upper_num, lower_num, digit_num;
void counter(char c) {
if (std::isupper(c))
++upper_num;
else if (std::islower(c))
++lower_num;
else if (std::isdigit(c))
++digit_num;
}
int main() {
std::for_each(std::istream_iterator<char>(std::cin), std::istream_iterator<char>(), counter);
std::cout << "upper: " << upper_num
<< "\nlower: " << lower_num
<< "\ndigit: " << digit_num
<< std::endl;
}
0502454
2007/10/18(木) 01:31:16解答ありがとうございます。
でも、それだと、指定された構造体へのポインターを返してないですか?
つまり、
□→□→□→□→□
とすると、指定された構造体が左から4番目としたら、左から3番目の
*ne(左から4番目へのポインター)を返してないですか?
指定された構造体の前の構造体へのポインターを返すと言う問題なので
左から2番目の*ne(左から3番目へのポインター)を返すことになります。
0503デフォルトの名無しさん
2007/10/18(木) 01:35:34そういう風に考えてるから、きちんと理解できないんだ
0504デフォルトの名無しさん
2007/10/18(木) 01:53:410 { a=0 , ne=*1}
1 { a=1 , ne=*2}
2 { a=2 , ne=*3}
3 { a=3 , ne=*4}
4 { a=4 , ne=NULL}
>>487では例えば3の要素を指定した場合、
「neが3を指し示すようになっている構造体」への『ポインタ』を返している。つまり2の要素へのポインタ。
君の言い方に合わせればこれは「1のne」に等しいわけだから、問題無いと思う。
0505454
2007/10/18(木) 02:19:45>>504
レスありがとうございます。
>>504さんの図を使うと、
「例えば3の要素を指定した場合」って言うのは
プログラム中の引数のtは*3ですよね?
そして「2の要素へのポインタ」って言うのは*2ですよね?
0506デフォルトの名無しさん
2007/10/18(木) 02:33:21[2] 問題文(含コード&リンク): 整数n(2<=n<=16)と数字列digitsを与えると10進数に変換した値を求めるプログラム
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 10/19 17:00
[5] その他の制限: void base2dec(int n, string digits, int &dec)を利用すること
(実行例)110101(2)=53
123(8)=83
FFFF(16)=65535
ちなみにn進数を10進数に変換する方法はわかっています。
((((digits[0]*n)+digits[1])*n+digits[2])*n+digits[3])*n+・・・
void関数の中をうまくプログラムできません。よろしくお願いします。
0507デフォルトの名無しさん
2007/10/18(木) 02:36:57そう。
「指定された構造体(3)の前の構造体(2)へのポインター(*2==1.ne)を返す関数pre」
で問題無いと思うが
0508454
2007/10/18(木) 02:51:16落ち着いて、>>504さんの図と例を使って、紙にプログラムの動作を
一つ一つ書きながら、確認していったら、納得できました。
確かに合ってます。
ありがとうございました。
>>487
せっかく解答下さって、合ってたのに間違ってるとか言って
申し訳ないです。
0509デフォルトの名無しさん
2007/10/18(木) 02:54:56#include <iostream>
using namespace std;
void base2dec(int n, string digits, int &dec){
int k=1,m,s=digits.size();dec=0;
for(int i=1;i<=s;i++){m=digits[s-i];dec+=k*(m<64?m-48:m-55);k*=n;}}
main(){ int dec;base2dec(8,"123",dec);cout<<dec;}
0510デフォルトの名無しさん
2007/10/18(木) 03:02:43#include <iostream>
using namespace std;
void base2dec(int n, string digits, int &dec){
int k=1,m;dec=0;
for(int i=digits.size()-1;i>=0;i--)
{m=digits[i];dec+=k*(m<64?m-48:m-55);k*=n;}}
main(){ int dec;base2dec(16,"FFFF",dec);cout<<dec;}
0511デフォルトの名無しさん
2007/10/18(木) 03:21:020512デフォルトの名無しさん
2007/10/18(木) 08:34:480513デフォルトの名無しさん
2007/10/18(木) 08:47:23using namespace std;
void base2dec(int n, string digits, int &dec){
int m;dec=0;
for(int i=0;i<digits.size();i++)
{m=digits[i];dec=dec*n+(m<64?m-48:m-55);}}
main(){ int dec;base2dec(8,"123",dec);cout<<dec;}
0514デフォルトの名無しさん
2007/10/18(木) 09:08:33void bubble(int a[]){
int i,j,tmp;
for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--)
if(a[j]<a[j-1]){
tmp=a[j];a[j]=a[j-1];a[j-1]=tmp;
print_array(a);
}
}
void insertion(int a[]){
int i,j,tmp;
for(i=1;i<N;i++){
j=i;
while(j>=1 && a[j-1]>a[j]){
tmp=a[j];a[j]=a[j-1];a[j-1]=tmp;j--;
}
print_array(a);
}
}
void selection(int a[]){
int i,j,tmp,lowest,lowkey;
for(i=0;i<N-1;i++){
lowest=i;lowkey=a[i];
for(j=i+1;j<N;j++)
if(a[j]<lowkey){
lowest=j;lowkey=a[j];
}
tmp=a[i];a[i]=a[lowest];a[lowest]=tmp;
print_array(a);
}
}
0515デフォルトの名無しさん
2007/10/18(木) 09:08:48int base2dec(int n, std::string d){
int m,x=0;
for(int i=0;i<d.size();i++)
{m=d[i];x=x*n+(m<64?m-48:m-55);}
return x;}
main(){std::cout<<base2dec(8,"123");}
0516デフォルトの名無しさん
2007/10/18(木) 10:40:29[2] 問題文(含コード&リンク):ボイヤームーア法の機能を以下の2点について拡張する。
�@ファイルの先頭からテキストを1行ずつ(1行の文字数は999文字以下とする)読み込み、何行目の何文字目に
検索文字列の先頭が存在するか出力する。
�A探索文字列中に同じ文字列が複数含まれる場合について検索方法を改良する。(末尾の文字と同じ文字が、1文字まで)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: [2007年10月23日10:00まで
[5] その他の制限: stdio.h string.hを使用する
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5092.txt
同じ文字が無いときを最初に書こうとしてますが、何故か無限ループになります…
0517デフォルトの名無しさん
2007/10/18(木) 11:56:24移動テーブル t[0]〜t[255]
初期化 t[i]=0
for (i=1; i<=M ;i++) t[ b[M-i] ] = i;
serch(){
検索位置n=0
while(1){
i=0→M-1 if( b[i] != a[n] ) break;
if( i==M )return n;
n + = t [ a[n+M] ];
if(n+M >=N)return -1;}
}
0518デフォルトの名無しさん
2007/10/18(木) 12:10:59一致するビット列の全てのアドレスを求めるプログラムを作る
ただし、検索する文字列は1バイト単位とする
もっとも速く計算するものを作る
0519デフォルトの名無しさん
2007/10/18(木) 12:11:52Cの文字列は添え字0からなので
if(strg[length1]==ex[length1+i])
を
if(strg[length1-1]==ex[length1+i-1])
にしないとstrncmpが失敗します。
0520デフォルトの名無しさん
2007/10/18(木) 12:13:450521デフォルトの名無しさん
2007/10/18(木) 12:20:40それ以前に改行文字を取り除いてない
0522デフォルトの名無しさん
2007/10/18(木) 12:23:180523デフォルトの名無しさん
2007/10/18(木) 12:24:090524デフォルトの名無しさん
2007/10/18(木) 12:33:29[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5093.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: Dos窓c
[3.3] 言語: C言語
[4] 期限: ([2007年10月19日まで]
[5] その他の制限:特になし
よろしくお願いします。
0525519
2007/10/18(木) 12:41:25fgetsで読み込んでるから改行文字は変更されている。
そこは問題なかった…
for(j=length1-1;j>0;j--)
if(strg[j]==ex[length1+i]) i+=length1-j;
if(j==0 && strg[j]!=ex[length1+i]) i+=length1;
ここもいろいろおかしい
その一、始めのif文だけどi操作してbreakしないといけないのでは?
その二、二つ目のifだがここに書いちゃいけないだろ
ちなみにこうしたら一応動いた検索文字列に文字重複あるとダメだが…。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5094.txt
実行環境 Win98SE BCC5.5.1 Pen3
0526デフォルトの名無しさん
2007/10/18(木) 12:49:502分探索だろ
serch(a,b){
m=(a+b)/2;
if(p<x[m])k=serch(a,m-1) else if(p>x[m]) k=serch(m+1,b); else k=m;
return k;}
0527デフォルトの名無しさん
2007/10/18(木) 14:09:03serch( 検索元文字列, 検索する文字列 , 見つけたバイト数の配列 )
http://fx10.web.fc2.com/2ch.zip
#include <stdio.h>
#include <time.h>
void serch(char* x,char* str,int* adr){adr[0]=1;}
main(){
int N=18000000;char *x=new char[N];N=0;
printf("データロード中・・・");
FILE *fp=fopen("2ch.txt","rb");while(fread( &x[N],1,1,fp))N++;fclose(fp);
printf("完了\n");
int c,adr[100];
char str0[]="ノンアルコール",str1[]="冷蔵庫に物を沢山詰め込んでいるんです";
c=clock();
serch(x,str0,adr);
serch(x,str1,adr);
c=clock()-c;
printf("検索にかかった時間は %d 秒です\n",c);}
0528デフォルトの名無しさん
2007/10/18(木) 14:10:310529527
2007/10/18(木) 14:12:500530デフォルトの名無しさん
2007/10/18(木) 14:19:07コードが汚い
0531デフォルトの名無しさん
2007/10/18(木) 14:20:38これは恥ずかしい。よくこれだけの突っ込みどころをたった一行に埋め込めたもんだ。
0532527
2007/10/18(木) 14:21:380533デフォルトの名無しさん
2007/10/18(木) 14:23:21文字列検索なのにバイナリでファイル読み込むと何か利点あるの?
0534デフォルトの名無しさん
2007/10/18(木) 14:24:320535デフォルトの名無しさん
2007/10/18(木) 14:25:06汚いと全く思わないのか?
汚いの承知で手を抜いただけかと思った
0536デフォルトの名無しさん
2007/10/18(木) 14:25:570537デフォルトの名無しさん
2007/10/18(木) 14:26:32一応、バイナリファイルの検索もできるようにする為 一行ずつよんでxに格納していいけどそちらのほうがちょっと長くなるな
0538デフォルトの名無しさん
2007/10/18(木) 14:29:07serch(); serch();
c=clock()-c;
の部分が何秒で戻ってくるかだけわかればいい あとのコードは気にしないように
0539デフォルトの名無しさん
2007/10/18(木) 14:31:14[2] 問題文:
/***list.txt***/
data014s
data021c
data123s
data126a
/************/
といったファイル(list.txt)があるとする。
このファイルの中身から数字だけを取り出して
int型の配列list_num[]に格納せよ。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: ([2007年10月19日まで]
[5] その他の制限:特になし
0540デフォルトの名無しさん
2007/10/18(木) 14:32:38これとほぼ等価なコード。
--
N = fread(x, 1, N, fp);
--
それにしても、変数の使い回しや大文字の使用は気持ち悪い。
0541デフォルトの名無しさん
2007/10/18(木) 14:40:37if ((fp=fopen("2ch.txt","r")) == NULL) exit(1);
for (n=0; (x[n]=fgetc(fp)) != EOF; ++n);
fclose(fp);
x[n] = '\0';
0542デフォルトの名無しさん
2007/10/18(木) 14:41:210543デフォルトの名無しさん
2007/10/18(木) 14:47:27serch関数の部分うpしてくれ。
0545デフォルトの名無しさん
2007/10/18(木) 14:50:16printf("検索にかかった時間は %f7.3 秒です\n",(double)c/CLOCKS_PER_SEC);
にしないとちゃんと秒表示されないと思う…。
0546527
2007/10/18(木) 14:57:15#include <time.h>
int N;
void serch(char* x,char* str,int* adr){
char t[256];int n,M,k,su=0;
for(M=0;;M++)if(str[M]=='\0')break;
for(n=0;n<256;n++)t[n]=M;
for(n=1;n<=M;n++){k=(unsigned char)str[M-n];if(t[k]==M)t[k]=n;}
n=0;while(1){
for(k=0;k<M;k++)if(str[k]!=x[n+k]) break;
if(k==M){adr[su]=n;su++;n+=M;}
else {k=(unsigned char)x[n+M];n+=t[k];}
if(n+M>=N){adr[su]=-1;return;}}}
main(){
N=18000000;char *x=new char[N];N=0;
printf("データロード中・・・");
FILE *fp=fopen("2ch.txt","rb");while(fread( &x[N],1,1,fp))N++;fclose(fp);
printf("完了\n");
int c,adr[100];
char str0[]="ノンアルコール",str1[]="冷蔵庫に物を沢山詰め込んでいるんです";
c=clock();
serch(x,str0,adr);printf("%dバイト目 %dバイト目 に出現する\n",adr[0],adr[1]);
serch(x,str1,adr);printf("%dバイト目 %dバイト目 に出現する\n",adr[0],adr[1]);
c=clock()-c;
printf("検索にかかった時間は %d 秒です\n",c);}
0547527
2007/10/18(木) 14:59:09ノンアルコールは2つ、冷蔵庫に物を沢山詰め込んでいるんですは1つあるんだけど・・・番地はあってるかな?
0548527
2007/10/18(木) 15:12:460549デフォルトの名無しさん
2007/10/18(木) 15:17:28#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define MAXLINE 1000
main()
{
char filename[100],line[MAXLINE],num[100];
int i,j,len,n=0,list_num[100];
FILE *fp;
printf("Input file name:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL){
printf("file can't open.\n");
exit(1);
}
while(fgets(line,MAXLINE,fp)!=NULL){
len=strlen(line);num[0]='\0';
for(i=0,j=0;i<len;i++){
if(isdigit(line[i])) num[j++]=line[i];
}
num[j]='\0';
if(num[0]!='\0')
list_num[n++]=atoi(num);
}
for(i=0;i<n;i++)
printf("%d\n",list_num[i]);
}
行の中にある数値を出現した順に並べてint配列に格納するようになってます。
なのでdata014s10という行だとlist_numには1410が格納されます。
0550527
2007/10/18(木) 16:43:51ファイルの先頭64KBくらいを読み込んで、ハッシュ(CRC、MD5など) を計算してそれが一致したら詳しく調べるようにするといいと思う
一度計算したらデータベースに蓄えておき次回の検索時に使用する するとDVDなどにも対応できる
0551デフォルトの名無しさん
2007/10/18(木) 17:03:35#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
void serch(const char * const x, char const * const str, int * adr)
{
unsigned cnt = 0;
for (const char * np = NULL, * p = x; np = strstr(p, str); p = np + strlen(str)) adr[cnt++] = np - x;
adr[cnt] = -1;
} // >546よりざっと倍くらい遅いみたい
int main()
{
const int N = 18000000;
char * x = new char[N];
fprintf(stderr, "データロード中・・・");
FILE * fp = fopen("2ch.txt", "r");
if (fp == NULL) return EXIT_FAILURE;
unsigned size = fread(x, 1, N, fp);
fclose(fp);
x[size] = '\0';
fprintf(stderr, "完了\n");
char str0[] = "ノンアルコール";
char str1[] = "冷蔵庫に物を沢山詰め込んでいるんです";
int c = clock();
int adr[100];
serch(x,str0,adr); printf("%dバイト目 %dバイト目 に出現する\n", adr[0], adr[1]);
serch(x,str1,adr); printf("%dバイト目 %dバイト目 に出現する\n", adr[0], adr[1]);
c = clock() - c;
fprintf(stderr, "検索にかかった時間は %g 秒です\n", double(c) / CLOCKS_PER_SEC);
delete[] x; return EXIT_SUCCESS;
}
0552デフォルトの名無しさん
2007/10/18(木) 17:04:02ほら、高速化してやったぞ
あとスレ違いだからよそでやって
#include <stdio.h>
#include <stdlib.h>
int main(void){
size_t bufsize;
unsigned char *buf=NULL;
FILE *fp=NULL;
printf("データロード中・・・");
fp=fopen("2ch.txt","rb");
if(fp==NULL) goto on_error;
fseek(fp, 0L, SEEK_END);
bufsize=ftell(fp);
fseek(fp, 0L, SEEK_SET);
buf=malloc(bufsize);
if(buf==NULL) goto on_error;
fread(buf, 1, bufsize, fp);
fclose(fp);
printf("完了 %u bytes\n", bufsize);
free(buf);
return 0;
on_error:
if(buf!=NULL) free(buf);
if(fp!=NULL) fclose(fp);
return 1;
}
0553デフォルトの名無しさん
2007/10/18(木) 17:15:58内容が濃い課題ですが・・・お願いします。
0554デフォルトの名無しさん
2007/10/18(木) 17:40:22このへんで や ら な い か ?
君ならどう書く? in 厶板
ttp://pc11.2ch.net/test/read.cgi/tech/1169104637/
0555デフォルトの名無しさん
2007/10/18(木) 17:48:17最初見たときにやろうかと思ったんだけど、VC++のWizardが main() を吐いてくれず、
_tWinMain() とかになったので萎えた。Wizard使わないでゼロから書くのはさすがにめんどい。
0556デフォルトの名無しさん
2007/10/18(木) 18:00:02[2]キーボードから数値を入力して「正」「負」「0」を表示する。ピリオド「.」が入力されたら終了。
//全体の流れ //無限ループ //数値の入力、失敗したらピリオドであるかを判定。
//ピリオドなら終了if(getchar)=='.')break; //ピリオドでなかったら入力間違いのメッセージを出して再入力。fflush(stdin);
//if文で正負0を判定して表示 //以上を繰り返す。
[3] Linux
gcc
C
[4]10/22 0:00
[5]繰り返し・条件分岐まで習得。
main()
{
int a;
printf("数値aを入力してください");
while(scanf("%d",&a)!='.'){
?????????????????????
if(getchar()=='.'){
break;
}
?????????????????????
if(a>0){
printf("PLUS\n");
}else if(a<0){
printf("MINUS\n");
}else if(a==0){
printf("ZERO\n");
}
}
}
2箇所、分かりません。お願いします。
0557デフォルトの名無しさん
2007/10/18(木) 19:02:34こんな感じになると思う…。
main()
{
int num;
char buffer[1024];
chra *ptr;
while(1){
if(!gets(buffer) || buffer[0]=='.') break;
ptr = buffer;
if(*ptr=='+'||*ptr=='-') ++ptr;
while(isdigit(*ptr))++ptr;
if(*ptr != '\0') { printf("Input Miss!\n"); continue; }
num = atoi(buffer);
if(num == 0) { printf("%s is Zero\n",buffer ); continue; }
if(num < 0) { printf("%s is Minus\n",buffer); continue; }
/*if(num > 0) { */ printf("%s is Minus\n",buffer); /* continue; } */
}
}
while(scanf("%d",&a)!='.'){
の時点で何かおかしい
0558デフォルトの名無しさん
2007/10/18(木) 19:18:59既にない模様。
>>551
OldXeonで0.05秒。timeコマンドで測っても(キャッシュヒットしちゃえば)0.1秒程度。
>>527
こんな数字じゃ、工夫するのも虚しいね。
0559デフォルトの名無しさん
2007/10/18(木) 19:40:160560デフォルトの名無しさん
2007/10/18(木) 19:57:29解決しました。ありがとうございました。
0561デフォルトの名無しさん
2007/10/18(木) 21:09:22fp2=fopen("report.txt","w");
for(i=2;i<L;i++){
while(!feof(fp)){
while(1){
fscanf(fp,"%c",&moji);
if(moji=='('){
fscanf(fp,"%d",&p_num);
if(p_num==i){
fprintf(fp2," (%d):",p_num);
printf(" (%d):",p_num);
}
}
break;
}
}
}
ファイルを読み込ませて括弧の中の数値を順番にバンバン表示させたいんですが
いまは(2)だけにしか反応してくれません
(2)・・・・・・・・・・
(3)・・・・・・・・・
っていう風にしたいのですが、どこが間違っていますでしょうか?
0562デフォルトの名無しさん
2007/10/18(木) 21:31:46色々おかしい気がする。
breakでwhile(1){}しか抜けれないから、
ファイルの読み込みが終わるまでwhile(eof(fp)){}から抜けない。
その後fpをfseekもオープンし直しもして無いから、ずっとeofの位置に行ってる。
なので、forの2週目からwhile(eof(fp)){}のループに入らない。
あと、breakの位置とか。ifの中じゃね?
動作確認してるわけじゃないから、勘違いだったらスマン
0563デフォルトの名無しさん
2007/10/18(木) 21:33:26何書いてんだ俺・・・
0564デフォルトの名無しさん
2007/10/18(木) 21:34:57何をやりたいかよく分からないけど、
文字が'('で無い時に繰り返す仕様になってないからでは?
0566デフォルトの名無しさん
2007/10/18(木) 23:39:57#include <stdio.h>
#include <string.h>
static int *table = new int[256];
static void make_table(char *ptn){
int i, len = strlen(ptn);
for(i = 0; i < 256; i++) table[i] = len;
while(*ptn) table[*ptn++] = --len;
}
static char *bm(char *str, char *ptn){
int i, len = strlen(ptn);
char *p = str + strlen(str);
if(*ptn == '\0') return NULL;
while(p - str >= len){
for(i = len - 1; i >= 0 && str[i] == ptn[i]; i--) ;
if(i < 0) return str;
str += table[str[i]] - len + 1 + i > 0? table[str[i]] - len + 1 + i : 2;
}
return NULL;
}
void search(char *str, char *ptn, int *adr){
int *q = adr, len = strlen(ptn);
char *p = str;
make_table(ptn);
while((p = bm(p, ptn)) != NULL){
*q++ = p - str;
p += len;
}
}
0567デフォルトの名無しさん
2007/10/19(金) 00:03:20[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5096.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:明日まで
[5] その他の制限:特にありません
よろしくお願いします
0568デフォルトの名無しさん
2007/10/19(金) 00:09:190569566
2007/10/19(金) 00:35:47吐きそう。
0570デフォルトの名無しさん
2007/10/19(金) 00:51:42問い1
#include<stdio.h>
int main(void)
{
int a; float b; double c;
int *pa;float *pb; double pc;
a = 1; b = 1.2; c = 1.23;
pa = &a;pb = &b; pc = &c;
printf("a=%d b=%f c=%f\n",*a,*b,*c);
return 0;
}
問い2はこれ+ポイント操作
ヒント:ポイント表示の書式は %p
0571デフォルトの名無しさん
2007/10/19(金) 01:00:160572デフォルトの名無しさん
2007/10/19(金) 01:21:29問い1 間違ってた…まぁコンパイルとおらないから分っただろうけど…
誤 printf("a=%d b=%f c=%f\n",*a,*b,*c);
正 printf("a=%d b=%f c=%f\n",*pa,*pb,*pc);
問い2
int main(void)
{
char a; int b; float c; double d;
char *pa;int *pb;float *pc; double pd;
pa = &a;pb = &b; pc = &c;pd = &d;
printf("ポインタ移動前 a:%p b:%p c:%p d:%p\n",pa,pb,pc,pd);
++pa; ++pb; ++pc; ++pd;
printf("ポインタ移動前 a:%p b:%p c:%p d:%p\n",pa,pb,pc,pd);
--pa; --pb; --pc; --pd;
*pa = 1; *pb = 15; *pc = 1.2; *pd = 1.23;
printf("代入 a=%d b=%d c=%f d=%f\n",a,b,c,d);
++*pa; ++*pb; ++*pc; ++*pd;
printf("インクリメント a=%d b=%d c=%f d=%f\n",a,b,c,d);
return 0;
}
0573566
2007/10/19(金) 02:04:10#include <stdio.h>
#include <string.h>
#define max(x, y) ((x) > (y) ? x : y)
static char table[256];
static void make_table(char *ptn){
int i, ptn_len = strlen(ptn);
for(i = 0; i < 256; i++) table[i] = ptn_len;
for(i = 0; i < ptn_len - 1; i++) table[(unsigned char)ptn[i]] = ptn_len - i - 1;
}
char *bm(char *str, char *ptn){
int str_len = strlen(str), ptn_len = strlen(ptn), i = ptn_len - 1, j;
while(i < str_len){
j = ptn_len - 1;
while(str[i] == ptn[j]){
if(j == 0) return str + i;
i--, j--;
}
i = i + max(table[(unsigned char)str[i]], ptn_len - j);
}
return NULL;
}
void search(char *str, char *ptn, int *adr){
int *q = adr, ptn_len = strlen(ptn);
char *p = str;
make_table(ptn);
while((p = bm(p, ptn)) != NULL){
*q++ = p - str;
p += ptn_len;
}
}
0574デフォルトの名無しさん
2007/10/19(金) 02:10:58[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5097.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:10/25まで
[5] その他の制限:(必須)と追記されているものは必ずやらなければならない問題なので、可能ならばこちらを優先的にお願いします
0575デフォルトの名無しさん
2007/10/19(金) 02:20:1210月19日の〜0:00って、もう過ぎたってこと?
それとも本日が終了するまで?
0576516
2007/10/19(金) 02:23:42ありがとうございました!!
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5098.c
0577デフォルトの名無しさん
2007/10/19(金) 02:31:32>複数の行を1行ずつ文字列の配列に読み込み
>ただし,1行ごとの文字列の長さの制限を行なわないようにすること.
額面どおり受け取ると書けない。fgets()まわすのが妥当っぽいけど厳密には1行ずつ読み込まない。
だいたい最初の問題が一番面倒ってのもおかしいよな。。。ヒントもねえし。
必須じゃないからいいのかな。
0578566
2007/10/19(金) 02:34:29>>527 当方の環境では0.11ほどこちらのが速い
#include <stdio.h>
#include <string.h>
#define max(x, y) ((x) > (y) ? x : y)
static char table[256];
static int str_len, N;
static void make_table(char *ptn){
int i, ptn_len = strlen(ptn);
for(i = 0; i < 256; i++) table[i] = ptn_len;
for(i = 0; i < ptn_len - 1; i++) table[(unsigned char)ptn[i]] = ptn_len - i - 1;
}
char *bm(char *str, char *ptn){
int ptn_len = strlen(ptn), i = ptn_len - 1, j;
while(i < str_len){
j = ptn_len - 1;
while(str[i] == ptn[j]){
if(j == 0) return str + i;
i--, j--;
}
i = i + max(table[(unsigned char)str[i]], ptn_len - j);
}
return NULL;
}
void search(char *str, char *ptn, int *adr){
int *q = adr, ptn_len = strlen(ptn);
char *p = str;
str_len = N, make_table(ptn);
while((p = bm(p, ptn)) != NULL)
*q++ = p - str, str_len -= p - str, p += ptn_len;
*adr = -1;
}
0579566
2007/10/19(金) 02:35:050580デフォルトの名無しさん
2007/10/19(金) 02:35:45親切にお答えくださった方、本当にありがとうございました!^^
無事に課題提出できました♪
0581566
2007/10/19(金) 02:37:32○*q = -1;
0582デフォルトの名無しさん
2007/10/19(金) 02:43:59いい加減にしてとっとと失せろ
0583デフォルトの名無しさん
2007/10/19(金) 02:46:300584527
2007/10/19(金) 02:58:00あと>>578なんですけどうごきませんでしたよ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5100.txt
0585デフォルトの名無しさん
2007/10/19(金) 03:05:43gccでバージョンの規程が無くて制限も無いから、どうにでもなるべ。
ファイルをオープンした後にgetcを使って最大の行の長さと行数をチェック。
その数値を利用してメモリ確保。
ファイルを先頭から読み直してfgetsなり何なりで読めばいい。
メモリ確保はCならmallocで確保したchar *の配列でも文字列の配列と言えるだろうし、
行数の制限については記述が無い。
気に入らなきゃC99で動的なサイズの配列でも宣言すりゃいい。
0586デフォルトの名無しさん
2007/10/19(金) 11:37:49[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5101.txt
[3] 環境
[3.1] OS: 学内Linux、自宅WindowsXP
[3.2] コンパイラ名とバージョン: 学内gcc、自宅Microsoft .NET Framework SDK
[3.3] 言語: C
[4] 期限: 今日中
[5] その他の制限:
まだ講義では触れていないor触れていてもほんの少しなため、
なるべく構造体・ポインタを使わないで済むようにしていただきたいです。
期限が短くてすみませんがよろしくお願いします。
0587デフォルトの名無しさん
2007/10/19(金) 11:42:41Microsoft .NET Framework SDK なんてコンパイラない
0588デフォルトの名無しさん
2007/10/19(金) 11:56:58コマンドプロンプトでcl ○○.cでコンパイルして○○.exeで実行する形です
なるべく学内のPCでコンパイルした方がいいため、gccでコンパイルできれば大丈夫です
0589デフォルトの名無しさん
2007/10/19(金) 12:18:50とりあえず1のほう 動作確認はしていないが
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5103.txt
0590デフォルトの名無しさん
2007/10/19(金) 12:54:17問い2はこんなかんじでしょう… やはり動作未確認…
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5104.txt
0591デフォルトの名無しさん
2007/10/19(金) 13:30:01[2] 問題文(含コード&リンク):
カレントディレクトリで作業しているときに
そのディレクトリにdataというディレクトリを作って、
そのディレクトリの中身に何があるか知りたい。
そこでその中身をファイルlist.txtに書き出せ。
[3] 環境
[3.1] OS: LINUX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 10/19 17:00
[5] その他の制限:
0592デフォルトの名無しさん
2007/10/19(金) 13:38:15#include<stdio.h>
#include<stdlib.h>
int main(void){
system("md data");
system("dir data>list.txt");
return 0;
}
0593デフォルトの名無しさん
2007/10/19(金) 14:33:120594デフォルトの名無しさん
2007/10/19(金) 14:34:26UNIX だから dir じゃなくて ls では?
たぶん課題内容は ./data のディレクトリ内のファイル一覧だから
md data は必要ないとおもいます。
課題文が分りづらいだからだけど…
0595594
2007/10/19(金) 14:36:56誤 UNIX
正 LINUX
UNIX系と打ったつもりだった…
LINUXとUNIXは違うけどコマンドはおおかた同じだったと…
0596591
2007/10/19(金) 15:34:02>>594
ありがとう
mdはディレクトリ作成らしくて必要なかったです。
system("dir data>list.txt"); で中身がlist.txtに記述されました
0597デフォルトの名無しさん
2007/10/19(金) 16:37:41[2] 問題文(含コード&リンク):
キーボードから自然数nを入力し1〜nまでの合計とnの階乗を求めて表示するプログラムを作成せよ
実行例1(Xは入力)
自然数n:X
1〜10までの合計は55
10の階乗は3628800
実行例2(Xは入力)
自然数n:X
1〜20までの合計は210
20の階乗は243290202008176640000
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン
[3.3] 言語: C
[4] 期限: 10月19日18:00までです
[5] 条件はないです
お願いします
0598デフォルトの名無しさん
2007/10/19(金) 16:52:22int main(void)
{
int i, n;
double d = 1.0;
printf("自然数n:");
scanf("%d", &n);
for(i=2; i<=n; i++) d *= i;
printf("1〜%dまでの合計は%d\n", n, n * (n + 1) / 2);
printf("%dの階乗は%.0f\n", n, d);
return 0;
}
0599デフォルトの名無しさん
2007/10/19(金) 17:10:420600デフォルトの名無しさん
2007/10/19(金) 20:57:46イマサラだけど、Linuxにもdirコマンドあるよ。
/usr/binだった気がするから、インストールしてないと入ってないかも知れない。
0601デフォルトの名無しさん
2007/10/19(金) 21:31:22必ずあるとはいえないということですね…分りました。
0602デフォルトの名無しさん
2007/10/20(土) 00:02:17doubleか…。いや、>>597が納得しているならいいんだけどさ…。
0603デフォルトの名無しさん
2007/10/20(土) 00:45:51[2] 問題文(含コード&リンク):
・それぞれ次の動作をする簡潔なプログラムを書け。極端な入力は考えなくていい。
�@入力として空白で区切られた整数を任意個受け取り(入力終了は改行文字)
そのうち最大のものを出力する。(*scanf()は使用不可)
�A4桁以下の素数を小さいほうから順に全て出力する。
�B入力として英数文字の文字列を受け取り、(入力終了はEOD)その文字列中の
英小文字を英大文字に、数字を#(数字1文字につき#1つ)に変換した文字列を出力する。
(*<ctype.h>は使用しないこと)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 21日(日)の23:59までです。
今まで考えたのですけど、どうも分かりませんでした・・・
どなたかお願いします。
0604デフォルトの名無しさん
2007/10/20(土) 00:48:47返事遅れました
本日までです。 から40分過ぎましたが
提出期限までは少し余裕があるので大丈夫です
明日の夜10:00までは
0605デフォルトの名無しさん
2007/10/20(土) 00:49:31http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5105.zip
めぼしいのをいくつかやっといた
ファイル名が一部適当だけど、必須課題は"address.c"と"22.c"ね
"addline.c"が行番号付加のやつ。他は分かると思う。
22.cはaddline.cでデータを作成してから試してね。
あと、へったな英語を表示するので嫌だったら直しておいてw
0606デフォルトの名無しさん
2007/10/20(土) 00:51:21返事ないからもう期限過ぎたのかと思ってやってなかったw
時間あったらやっておく……
0607デフォルトの名無しさん
2007/10/20(土) 01:12:30ありがとうございます。
返事遅れて本当申し訳ない
0608デフォルトの名無しさん
2007/10/20(土) 01:40:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5106.txt
0609605
2007/10/20(土) 02:03:31分かると思うけど>>605の「22.cはaddline.cでデータを作成してから」は「address.cでデータを〜」の間違いです
お詫びして訂正申し上げます
>>608
どもです
0610605
2007/10/20(土) 02:19:38スレ汚しスマソ
0611デフォルトの名無しさん
2007/10/20(土) 02:47:07�@
#include<stdio.h>
#define MAXIN 1000
int getword(char w[])
{
int i=0,c;
while((c=getchar())!=' '&&c!='\n')
w[i++]=c;
w[i]='\0';
return c;
}
main()
{
int c,num,max=0;
char s[MAXIN];
do{
c=getword(s);
num=atoi(s);
if(max<num)
max=num;
}while(c!='\n');
printf("max=%d\n",max);
}
0612デフォルトの名無しさん
2007/10/20(土) 02:48:54�A
#include<stdio.h>
main()
{
int i,j,prime[1001];
for(i=0;i<1001;i++)
prime[i]=1;
for(i=2;i<1001;i++){
if(prime[i]==1)
for(j=2;j*i<1001;j++)
prime[j*i]=0;
}
for(i=2,j=0;i<1001;i++){
if(prime[i]==1){
printf("%3d ",i);
j++;
}
if(j==10){
printf("\n");
j=0;
}
}
}
素数判定はエラトステネスのふるいでやってます。
0613デフォルトの名無しさん
2007/10/20(土) 02:50:26�B
#include<stdio.h>
main(){
int c,i=0;
char s[1000];
while((c=getchar())!=EOF){
if(c>='a'&&c<='z')
s[i++]=c-'a'+'A';
else if(c>='0'&&c<='9')
s[i++]='#';
else
s[i++]=c;
}
s[i]='\0';
printf("%s\n",s);
}
0614603です
2007/10/20(土) 11:26:26とても助かりました。本当にありがとうございました。感謝しています。
0615デフォルトの名無しさん
2007/10/20(土) 13:27:16これだからC++ってやめられないよね!
なんでこんなもん作らないといかんのだ・・・orz
0616デフォルトの名無しさん
2007/10/20(土) 14:00:40日本人の集団が作った有名なやつがある それつかえよ
ntfとかだったような
0617デフォルトの名無しさん
2007/10/20(土) 14:15:380618デフォルトの名無しさん
2007/10/20(土) 15:41:33[2] 問題文:下に示すピボット選択付きガウスの消去法のプログラムをポインタと関数mallocを必ず用いて書き換えなさい。
[3] 環境
[3.1] OS: UNIX
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: Cのみ
[4] 期限:2007/10/25 午後7時
0619 ◆nTn094TDwg
2007/10/20(土) 15:43:15#include <stdlib.h>
#include <math.h>
#define MAXN 32
int main(void){
int n, i, j, k, l, imax;
double b, t, a[MAXN][MAXN + 1];
/* 行列の大きさをセット */
printf("1次連立方程式の解を求めます。\n");
printf("何元の連立方程式にしますか?\nn = ");
scanf("%d", &n);
if (n > MAXN || n < 1) {
printf(" n の値は1〜%dまでです。\n", MAXN);
exit(1);
}
0620デフォルトの名無しさん
2007/10/20(土) 15:44:21/* 方程式の入力 */
printf("方程式の係数を入力してください。\n");
for (k = 0; k < n; k++)
for (j = 0; j < n + 1; j++) {
printf("a[%d][%d]=", k, j);
scanf("%lf", &a[k][j]);
}
for (k = 0; k < n; k++) {
/* ピポットを走査する */
t = 0; imax = k;
for (l = k; l < n; l++) {
if (fabs(a[l][k]) > t) {
imax = l;
t = a[l][k];
}
}
0621デフォルトの名無しさん
2007/10/20(土) 15:44:51/* 見つかったピボット行をk行と入れ替える */
for (l = 0; l < n + 1; l++) {
t = a[k][l]; a[k][l] = a[imax][l]; a[imax][l] = t;
}
/* 後は同じ */
b = a[k][k];
for (j = 0; j < n + 1; j++) a[k][j] /= b;
/* ピポット行よりも下の行について */
for (i = k + 1; i < n; i++) {
/* ピポットと同じ列を0に */
b = -a[i][k];
for (j = 0; j < n + 1; j++) a[i][j] += b * a[k][j];
}
}
/* 次に後置代入 */
for (k = n - 2; k >= 0; k--)
for (j = k + 1; j < n; j++)
a[k][n] -= a[k][j] * a[j][n];
/* 答を表示 */
printf("Gauss単純消去法(部分ピボット選択)による解\n");
for (i = 0; i < n; i++)
printf("x[%d]=%lf\n", i, a[i][n]);
return 0;
}
0622デフォルトの名無しさん
2007/10/20(土) 15:53:08[2]問題文
ニュートン法を使って、初期値 x+i*yを入力して、f(z)=z*z*z-z-1=0の解である虚数解と実数解をすべて、C言語を使って出力せよ。
収束条件は、|1-f(z)/f'(z)|<εとなる。
[3]環境
OS : XP
言語: C
[4]期間
2007/10/21
[5]制限
複素数を表示するときには、配列を使ってやってください。
二度めですが、よろしくお願いします。m(_ _)m
0623デフォルトの名無しさん
2007/10/20(土) 16:20:44#include <stdio.h>
#include <complex.h>
#define Complex complex<double>
Complex f(Complex z){ z=z*z*z-z-(Complex)1;return z;}
Complex h(Complex z){z=z-f(z)/((Complex)3*z*z-(Complex)1);return z;}
main(){
Complex z , I(0,1),w[9];
int n,i,k=0;
for(n=0;n<1000;n++){
z=(Complex)(n/100)*exp(I*M_PI* (Complex)((n+0.0)/100));
for(i=0;i<200;i++)z=h(z);
if(abs(f(z))<0.001)for(i=0;i<k;i++)if(abs(z-w[i])<0.01)break;
if(i==k){w[k]=z;k++;printf("real=%f\timag=%f\n", real(z),imag(z));}}}
0624デフォルトの名無しさん
2007/10/20(土) 16:25:12tasu (double* x, double* y, double* z){
z[0]=x[0]+y[0];
z[1]=x[1]+y[1];}
とやるってこと?
0625デフォルトの名無しさん
2007/10/20(土) 17:14:39[2] 問題文:
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5111.txt
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン: Borland C++Compiler
[3.3] 言語: C/C++
[4] 期限:2007/10/21
[5] 途中までソース作りました。よろしくお願いします。
0626デフォルトの名無しさん
2007/10/20(土) 17:47:53買い物いってきて戻ってきたらつくってやるよ
0627デフォルトの名無しさん
2007/10/20(土) 17:51:39http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5112.txt
0628デフォルトの名無しさん
2007/10/20(土) 18:15:150629デフォルトの名無しさん
2007/10/20(土) 18:47:04早速ありがとうございました!!!!1
0631デフォルトの名無しさん
2007/10/20(土) 21:19:17コンソールか、GUIなのかわからん
VisualStudioって書いてあるが、どこまでOKなんだろう
.NETのクラス群使ってもいいのか、gcnewもありなのか
0632デフォルトの名無しさん
2007/10/20(土) 22:43:07はい、その通りです。できれば、よろしくお願いします。
0633デフォルトの名無しさん
2007/10/20(土) 22:51:55うごきませんでした
0634デフォルトの名無しさん
2007/10/20(土) 22:57:59どうして動かないのか(エラーが出てコンパイルが出来なかった等)書かないと
誰も相手にしてくれないと思う
0635デフォルトの名無しさん
2007/10/20(土) 23:18:490636デフォルトの名無しさん
2007/10/20(土) 23:27:200637デフォルトの名無しさん
2007/10/21(日) 00:13:55あってもclass使わなかったりとかで、OOPっぽくないし
0638デフォルトの名無しさん
2007/10/21(日) 02:19:02[2] 問題文(含コード&リンク):
以下の要素と条件を用いてキューをC言語で作成せよ
キューを表す配列Q
キューの左端を表す変数1eft
キューの右端を表す変数right
キューに含まれるデータの数 size
関数enqueue,dequeue
配列のすべての要素にデータがあってもオーバフローとしない
配列のすべての要素にデータがある際にenqueue要求があった場合にオーバフローとする
[3] 環境
[3.1] OS:XP
[3.2] VisualStudio2005
[3.3] 言語: C++
[4] 期限: 22日
[5] その他の制限:これといってなし
よろしくお願いします!
0639デフォルトの名無しさん
2007/10/21(日) 02:45:51あと変数名の最初の文字に数字は使えない
>キューの左端を表す変数1eft
_1eftなどアンダーバーを挿入するなどの回避策をとる必要がある
0640638
2007/10/21(日) 02:59:06[2] 問題文(含コード&リンク):
以下の要素と条件を用いてキューをC言語(←C++でお願いします><)で作成せよ
キューを表す配列Q
キューの左端を表す変数left ←1eftからleftに変えさせていただきました><
キューの右端を表す変数right
キューに含まれるデータの数 size
関数enqueue,dequeue
配列のすべての要素にデータがあってもオーバフローとしない
配列のすべての要素にデータがある際にenqueue要求があった場合にオーバフローとする
改めてよろしくお願いします
0641デフォルトの名無しさん
2007/10/21(日) 03:22:450642デフォルトの名無しさん
2007/10/21(日) 04:28:11template <typename T>
class queue
{
static const int DATA_MAX = 3, left = 0;
T Q[DATA_MAX];
int right;
public:
queue() : right(-1) {}
int size(){return right + 1;}
T dequeue(){if (size() == 0) throw "underflow!"; return Q[right--];}
void enqueue(const T& t)
{
if (right + 1 == DATA_MAX) throw "overflow!";
T* first = Q, * last = Q + right + 1;
while (last != first) {--last; *(last + 1) = *last;}
Q[left] = t;
++right;
}
};
0643デフォルトの名無しさん
2007/10/21(日) 11:54:16�@
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5112.txt
C++の入門書を読んでクラスの基本的な作り方覚えただけの人間が作ったものなのでちと汚いです。
マスの効果をクラスに含めるともう少しスマートになると思います。
0644デフォルトの名無しさん
2007/10/21(日) 13:28:06リンク間違えてるぞ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5115.txt
あとiventに噴いた
eventね
0645デフォルトの名無しさん
2007/10/21(日) 13:31:59素で間違ってた。サンクス。
寝ぼけた頭で変数名とかつけてたからなー。お恥ずかしい限り。
0646574
2007/10/21(日) 14:48:52>>608
ありがとうございます
ファイル操作があまり良く分かっていないので、課題に苦戦していました
お礼レスが遅くなってしまい、申し訳ないです
0647デフォルトの名無しさん
2007/10/21(日) 14:51:480648デフォルトの名無しさん
2007/10/21(日) 15:27:12[1] 授業単元:C言語
[2] 問題文(含コード&リンク):文字列sに記述された数字列を整数値として変換する関数
int str2int(const char s[])を作成せよ(数字以外はそこまでで変換した値を返せばよい)
また、これを用いて2つの数字文字列の和を求めるプログラムを作成せよ
[3] 環境
[3.1] OS: XP
[3.2] コンパイラ名とバージョン: VC 2005
[3.3] 言語: C
[4] 期限: 10月26日まで
[5] その他の制限:<stdio.h>で使える以外の関数は習ってないので使用できないです
数字文字を1字づつ変換するプログラムを作ってみたものの足し算の段階で詰まってしまいました
最初から考え直す為にもヒントを頂けると嬉しいです
0649デフォルトの名無しさん
2007/10/21(日) 15:39:49{
int i, n;
for(i=0, n=0; s[i]>='0'&&s[i]<='9'; i++) n = n * 10 + s[i] - '0';
return n;
}
0650デフォルトの名無しさん
2007/10/21(日) 15:42:20逆じゃね?
0651デフォルトの名無しさん
2007/10/21(日) 15:47:460652デフォルトの名無しさん
2007/10/21(日) 15:54:09走査する向きが
0653デフォルトの名無しさん
2007/10/21(日) 15:56:10確認はしましたか?
0654デフォルトの名無しさん
2007/10/21(日) 15:57:23お前の頭の向きが逆じゃね?
0655デフォルトの名無しさん
2007/10/21(日) 15:58:070656デフォルトの名無しさん
2007/10/21(日) 16:01:020657デフォルトの名無しさん
2007/10/21(日) 16:03:02{
int i = 0, n, flag = 1;
if(s[0]=='-') {
flag = 0;
i++;
}
for(n=0; s[i]>='0'&&s[i]<='9'; i++) n = n * 10 + s[i] - '0';
return flag ? n : -n;
}
一文字目をチェックすればいいだけじゃね?
0658デフォルトの名無しさん
2007/10/21(日) 16:03:31[2] 問題文(含コード&リンク):
2つの文字列を連結するプログラムを作成せよ。
・文字列str1とstr2を連結し、str1に格納する関数
「void str_conn(char str1[], char str2[])」
を作成する。
・main関数で2つの文字列を入力させ、この関数を利用して
連結した結果を表示する。
*(cat)(cpy)はNG。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: cygwin gcc
[3.3] 言語: C
[4] 期限:23日(火)
[5] その他の制限:
0659デフォルトの名無しさん
2007/10/21(日) 16:04:46int atoi(const char *s)
{
int f = 1, n;
if(*s == '-')
f = -1;
for(n = 0;isdigit((unsigned char)*s);s++)
n = n * 10 + *s - '0';
return n * f;
}
0660659
2007/10/21(日) 16:05:26int atoi(const char *s)
{
int f = 1, n;
if(*s == '-')
f = -1;
s++;
for(n = 0;isdigit((unsigned char)*s);s++)
n = n * 10 + *s - '0';
return n * f;
}
0661デフォルトの名無しさん
2007/10/21(日) 16:10:24{
int i, j;
for(i = 0;str1[i];i++) ;
for(j = 0;str2[j];j++) str1[i++] = str2[j];
str1[i] = 0;
return;
}
0662デフォルトの名無しさん
2007/10/21(日) 16:11:01{
while(*str1) str1++;
while(*str1++=*str2++);
}
0663デフォルトの名無しさん
2007/10/21(日) 16:12:220664デフォルトの名無しさん
2007/10/21(日) 16:14:59まだおかしい
0665660
2007/10/21(日) 16:18:59ほんとだ
int atoi(const char *s)
{
int f = 1, n;
if(*s == '-'){
f = -1;
s++;
}
for(n = 0;isdigit((unsigned char)*s);s++)
n = n * 10 + *s - '0';
return n * f;
}
0666デフォルトの名無しさん
2007/10/21(日) 16:25:47/* int atoi(const char *s) */
int str2int(const char s[])
{
int n,i,f,k;
for(f=s[0]-'-',i=f?0:1,n=0;s[i]>='0'&&s[i]<='9';i++)
n=n*10+(f?s[i]-'0':-s[i]+'0');
return n;
}
int add_str(const char a[], const char b[])
{
return str2int(a) + str2int(b);
}
int main()
{
printf("%d\n", add_str("-1234abc", "4567def"));
return 0;
}
0667デフォルトの名無しさん
2007/10/21(日) 16:29:48組み込んでみたら見事に動きました、足し算もばっちりですありがとうございました
原理を理解してしっかり自分の糧にしたいと思います
ちなみに応用問題でdoubleを使って-や小数の値も計算できるように改良せよと問題がありますが
これを弄ればこちらの問題も可能でしょうか?
0668デフォルトの名無しさん
2007/10/21(日) 16:47:40649がちゃんと理解できればそんなに難しい問題じゃない。
0669デフォルトの名無しさん
2007/10/21(日) 16:49:07仕様書を読むとできないと明記されてる
Alice was beginning to get very tired of sitting by her sister on the bank,
and of having nothing to do: once or twice she had peeped into the book her sister was reading,
but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?'
So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid),
whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies,
when suddenly a White Rabbit with pink eyes ran close by her.
0670デフォルトの名無しさん
2007/10/21(日) 16:53:230671デフォルトの名無しさん
2007/10/21(日) 16:59:170672デフォルトの名無しさん
2007/10/21(日) 18:40:49今履修中のプログラミング基礎に全くついていけない状態です(>_<)
周りに聞く友達もいないので、ぜひ教えてください。お願いします。
【質問テンプレ】
[1] 授業単元:scanf(); rand();?
[2] 問題文(含コード&リンク):
「おみくじ」をプログラムで作成しなさい
1.任意の整数を入力
2.ランダムに割り出した値で、1で入力した日付を割り、余りを求める
3.余りの数字によって、printfする内容を変える
余りを求めて、おみくじの結果を表示する部分は、main関数とは別に作りなさい
例:intomiyage(inta) {・・・
ヒント
scanf(); rand(); if文を使う
余りを求める:「%」(例)5÷2の余りをxへ:x = 5 % 2;
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語だと思います=
[4] 期限: ([2007年10月22日24時まで] )
[5] その他の制限: (while文、if文と入力してもらうscanf、printf等しか習ってない段階です=)
0673デフォルトの名無しさん
2007/10/21(日) 19:14:39授業単元が書けないなら大学生辞めた方がいいよ
金の無駄
0674デフォルトの名無しさん
2007/10/21(日) 19:19:53こんな感じかなぁ??
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int output(unsigned int n,unsigned int m)
{
if(n == 0) { printf("大凶じゃ!!\n") ;return 0;}
if(n == m-1) { printf("大吉ですぞ!!\n") ;return 0;}
if(n < m>>4) { printf("凶とはついとらんの\n");return 0;}
if(n > m>>1) { printf("中吉ですぞ\n") ;return 0;}
printf("末吉だな\n") ;return 0;
}
int main(void)
{
unsigned int n,m;
srand((unsigned int)time());
printf("何番のおみくじを引く?");
scanf("%d",&n);
m = (int)rand();
output(n%m,m);
return 0;
}
0675デフォルトの名無しさん
2007/10/21(日) 19:27:41問題文に忠実にするなら
関数名は omiyage
引数は 1 つで型は int
剰余を求めるのは omiyage の中
あと、scanf の書式指定が違う
0676674
2007/10/21(日) 19:56:13関数名と引数について
例に書いてあるだけだから制約とは思えないのですが?
僕の読み方が悪いのでしょうか?
剰余を求める部分について
これも「結果を表示する部分は、main関数とは別に作りなさい」とあり、
剰余した値がおみくじの結果だと思ったのですが?
%dだと負数も受け付けてしまいますね %u が正しかったです。
あと m=0 でエラーがでます。
m = (int)rand();
を
while(!(m = (unsigned int)rand()));
に訂正
0677デフォルトの名無しさん
2007/10/21(日) 20:01:05すみません >>675 は気にしないで下さい
0678デフォルトの名無しさん
2007/10/21(日) 20:17:37#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int toDate(int x){
static int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i=0;
while(1){
if (x <= days[i]) return x;
x -= days[i];
i = (i+1)%12;
}}
int omiyage(int a){
static const char *results[] = {"大吉","吉","末吉","凶","大凶"};
static int table[] = {0,1,1,2,2,2,3,3,4};
printf("%s!!" , result[table[a/(sizeof(table)/sizeor(int))]]);
return 0;}
int main(){
unsigned x;
int n;
scanf("%u",x);
srand(time(NULL));
x = toDate(x);
while(!(n=rand()));
omiyage(x%n);
return 0;}
こうですか?
分かりません><
0679678
2007/10/21(日) 20:19:00変数名間違えてるしorz
0680デフォルトの名無しさん
2007/10/21(日) 20:28:20a/(sizeof(table)/sizeor(int)) は a/(sizeof(table)%sizeor(int))
ですね
n=1になったら大吉と吉しか出ないw
まぁ自分もn=1なら大吉と大凶しか出ませんが…
0681680
2007/10/21(日) 20:30:27a/(sizeof(table)/sizeor(int)) は a/(sizeof(table)%sizeor(int))
↓
a/(sizeof(table)/sizeor(int)) は a%(sizeof(table)/sizeor(int))
0682デフォルトの名無しさん
2007/10/21(日) 20:37:03訂正サンクス
しかしsizeor……
携帯から書くもんじゃないな
0683デフォルトの名無しさん
2007/10/21(日) 20:37:36○sizeof
0684デフォルトの名無しさん
2007/10/21(日) 20:55:380685デフォルトの名無しさん
2007/10/21(日) 21:02:41よんだか?
0686デフォルトの名無しさん
2007/10/21(日) 21:04:35[1] 授業単元:ファイル処理
[2] 問題文(含コード&リンク):
3×3行列のデータをファイルから読み込み、その行列を計算して画面に出力せよ。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語だと思います=
[4] 期限: なし
[5] その他の制限:
0687デフォルトの名無しさん
2007/10/21(日) 21:05:50そして3×3行列のデータファイルをうpしる
0688デフォルトの名無しさん
2007/10/21(日) 21:08:38[2] 問題文(含コード&リンク):
等比数列の初項aと公比rを入力し、格項の値とn項までの総和を計算し出力せよ。ただし、r!=1とする。(for文を使用する)
等比数列: a, ar, ar^2,・・・・・ar^(n-1)
等比数列の和:Sn=a+ar+ar^2+・・・・+ar^(n-1)
[3] 環境
[3.1] OS: windows2000
[3.2] コンパイラ名とバージョン:C++Builder
[3.3] 言語: C
[4] 期限: 明後日
[5] その他の制限: for文を使用でお願いします。その他は特に難しい文を使わないはずです。
0689デフォルトの名無しさん
2007/10/21(日) 21:22:35int main(){
int x,s,a,r,n,i;
printf("初項? ");
scanf("%d",&a);
printf("公比? ");
scanf("%d",&r);
printf("何項目まで? ");
scanf("%d",&n);
i=1;x=a;s=0;
while(i<=n){
s+=x;
printf("第%d項目:%d ここまでの部分和:%d\n",i,x,s);
x*=r;++i;}
return 0;
}
0690689
2007/10/21(日) 21:25:04#include <stdio.h>
int main(){
int x,s,a,r,n,i;
printf("初項? ");
scanf("%d",&a);
printf("公比? ");
scanf("%d",&r);
printf("何項目まで? ");
scanf("%d",&n);
for(i=1,x=a,s=0;i<=n;s+=x&&printf("第%d項目:%d ここまでの部分和:%d\n",i,x,s)&&x*=r&&++i);
return 0;
}
これでどうぞ>>688
0691デフォルトの名無しさん
2007/10/21(日) 21:28:01r=0 の時にどうなる?
0692デフォルトの名無しさん
2007/10/21(日) 21:31:10やべ、無限ループww
カンマ演算子が左から評価されることが保証されてる自信が無かったからショートサーキット使ったんだが、墓穴掘ったか
しょうがないから素直にこれで
未テスト
#include <stdio.h>
int main(){
int x,s,a,r,n,i;
printf("初項? ");
scanf("%d",&a);
printf("公比? ");
scanf("%d",&r);
printf("何項目まで? ");
scanf("%d",&n);
for(i=1,x=a,s=0;i<=n;++i){
s+=x;
printf("第%d項目:%d ここまでの部分和:%d\n",i,x,s);
x*=r;
}
return 0;
}
0693デフォルトの名無しさん
2007/10/21(日) 21:37:26サンクス!
これは各項のすべての値でますか?
0694デフォルトの名無しさん
2007/10/21(日) 21:41:180695デフォルトの名無しさん
2007/10/21(日) 21:55:31[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5116.txt
[3] 環境
[3.1] OS: Windows
[3.3] 言語: C言語
[4] 期限: 10月22日(月)午前1時まで
よろしくお願いします
0696デフォルトの名無しさん
2007/10/21(日) 21:58:34リンク先を見る限り何が分からないのか分からないよ
0697680
2007/10/21(日) 21:59:09初期値 :a
公比 :r
求める項数:n
として
a-a*r^n/(1-r)
で求められる。
double power(double x,unsigned int n)
{
int temp = 0; double result;
while(n&1) { int>>=1; temp=1; };
result = power(x,n-1) * x;
for(;temp > 0;--temp) result *=result;
return result;
}
double calc(double init,double ratio,unsigned int n)
{ return a*(1-power(ratio,n))/(1-ratio); };
割り算あるからnが小さいと遅い…
あと項数が複数あってもダメ…
といろいろ束縛あるなぁ…
わざわざpower書いたのも馬鹿っぽいしなぁ
0698デフォルトの名無しさん
2007/10/21(日) 22:01:29それぞれの関数の名前と不等号の向きを変えるだけでできるぜ!
と優しい俺は教えてあげる
課題4は「値渡し」
0699697
2007/10/21(日) 22:05:53>>695
main以外書きます
int minof(int x,int y)
{
if(x < y){ return x; } else { return y; }
}
int min3(int x,int y,int z)
{
int min = x;
if(y < min) min = y;
if(z < min) min = z;
return min;
}
int min5(int v,int w,int x,int y,int z)
{ return minof(v,minof(w,minof(x,minof(y,z)))); }
0700デフォルトの名無しさん
2007/10/21(日) 22:08:430701デフォルトの名無しさん
2007/10/21(日) 22:11:43pow(x,r)使おうぜ!
それはともかく、等比数列の各項までの和を計算する場合、こんな方法が自分は好きだ
関数名適当
int sum(int a , int r , int n){
int s;
if(n==1)s = a;
else s = sum(a,n-1)*r + a;
printf("第%d項までの和:%d",n,s);
return s;
}
0702デフォルトの名無しさん
2007/10/21(日) 22:13:200703デフォルトの名無しさん
2007/10/21(日) 22:14:06else s = sum(a,r,n-1)*r + a;
→else s = sum(a,r,n-1)*r + a;
0704デフォルトの名無しさん
2007/10/21(日) 22:15:28そんなに急がなくても問題は逃げたりしないよ
0705デフォルトの名無しさん
2007/10/21(日) 23:05:07rを配列で与えてaをxとすると
どこかで見た式に見えるな…
Horner級数だったっけか?
n次の関数をちょっぴり高速に計算する方法
0706デフォルトの名無しさん
2007/10/21(日) 23:10:24こんな奴の事かな?
ax^3+bx^2+cx+d -> ((ax+b)x+c)x+d
0707デフォルトの名無しさん
2007/10/21(日) 23:22:52そう!xの累乗求めながら計算するより乗算回数が大きく減るんですよね。
0708デフォルトの名無しさん
2007/10/21(日) 23:32:03[2] 問題文(含コード&リンク):
memo.txtの中身が
abc ji a ds
de sa s st
ji asa a
であったときに、1行ずつみて
行ごとの最初の文字列を、scanfで指定した行の文字列を取り出せ。
(abcとjiの間がtabであけた。jiとaとdsの間はスペース。)
例えば
2と入力したらdeという文字列がでるように。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:できればはやく。
[5] その他の制限:
0709デフォルトの名無しさん
2007/10/21(日) 23:44:48#include<stdio.h>
#define WORD_LEN_MAX 100
#define TO_STR_(num) #num
#define TO_STR(num) TO_STR_(num)
int main(void){
int line_no;
char buf[WORD_LEN_MAX+1];
FILE *fp;
fp=fopen("memo.txt", "r");
if(fp==NULL) return 1;
printf("Input line number :");
scanf("%d", &line_no);
for(;line_no>1;line_no--) fscanf(fp, "%*[^\n]"), fscanf(fp, "%1[\n]", buf);
//fscanf(fp, "%*[ \t]");
if(fscanf(fp, "%" TO_STR(WORD_LEN_MAX) "[^ \t\n]", buf)==1) puts(buf);
fclose(fp);
return 0;
}
0710デフォルトの名無しさん
2007/10/22(月) 01:10:480711デフォルトの名無しさん
2007/10/22(月) 03:02:23[1] 授業単元: プログラミング演習�U(C言語)
[2] 問題文(含コード&リンク):
クラス分けテストで出題された問題を完成させ、main関数で2つの文字を入力させ、
この関数を利用して連結した結果を表示する様実装する。
(問題)
以下は文字列str1とstr2を連結し、str1に格納するプログラムである。
�@〜�Bを埋めてプログラムを完成させよ。
void str_conn(char str1[], char str[]2){
int i, j;
for(i=0; �@; i++);
for(j=0; �A; j++)
str1[ �B ]=str2[j];
str1[i+j]=str2[j];
}
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限:25日(木曜日)までにお願いします。
[5] その他の制限: 特にないです。
0712デフォルトの名無しさん
2007/10/22(月) 03:08:44void str_conn(char str1[], char str[]2){
int i, j;
for(i=0; str1[i] != '\0'; i++);
for(j=0; str2[j] != '\0'; j++)
str1[i+j]=str2[j];
str1[i+j]=str2[j];
}
0713デフォルトの名無しさん
2007/10/22(月) 03:23:23一応自分でも作ってみたのですが...あまりに素人すぎてコンパイラのエラーをみても修正方法がいまいち分かりません。
#include <stdio.h>
void str_conn(char str1[], char str2[]){
int i, j;
for(i=0; str1[i] != '\0'; i++);
for(j=0; str2[j] != '\0'; j++)
str1[i+j]=str2[j];
str1[i+j]=str2[j];
}
int main(void)
{
printf("文字列1:");
gets(str1);
printf("文字列2:");
gets(str2);
printf("%s\n", str2[j]);
return 0;
}
0714デフォルトの名無しさん
2007/10/22(月) 03:41:58void str_conn(char str1[], char str2[])
{
int i, j;
for(i = 0; str1[i] != '\0'; i++)
;
for(j = 0; str2[j] != '\0'; j++)
str1[i+j] = str2[j];
str1[i+j] = str2[j];
}
int main(void)
{
char str1[256], str2[256];
printf("文字列1:");
gets(str1);
printf("文字列2:");
gets(str2);
str_conn(str1, str2);
printf("%s\n", str1);
return 0;
}
0715デフォルトの名無しさん
2007/10/22(月) 04:00:53ありがとうです。
最終的に出力する結合文字列はstr_conn関数内だから、当然呼び出しはstr_connですよね。
なに勘違いしてたんだろ。
それで結果はstr1と...納得しました。
それにstr1,2の格納文字数指定も忘れているとは...
参考になります。
0716デフォルトの名無しさん
2007/10/22(月) 07:30:07658と同じ授業?と思ったけど環境が違うな……
0717デフォルトの名無しさん
2007/10/22(月) 10:15:08注意:標準関数は使用するな
実行画面
数値入力==>-5
絶対値:5
0718デフォルトの名無しさん
2007/10/22(月) 10:20:09#include<stdio.h>
main()
{
int n;
printf("数値入力==>");
scanf("%d",&n);
printf("絶対値%d\n",n>0 ? n : -n);
}
0719デフォルトの名無しさん
2007/10/22(月) 10:22:39同じプログラムがすでに書かれててワロス
0720デフォルトの名無しさん
2007/10/22(月) 11:00:05--
printf("数値入力==>");
scanf("%d",&n);
printf("絶対値%d\n",n>0 ? n : -n);
--
求めた結果を出力しろとも書いてないしな。
0721デフォルトの名無しさん
2007/10/22(月) 11:06:240722デフォルトの名無しさん
2007/10/22(月) 11:09:4710桁までの整数を入力すると、数字の並びを逆にして表示するプログラムを作成せよ。
ただし0123のように入力すると0123は整数ではないのでエラーと返すか321と出力させよ
よろしくお願いします
0723デフォルトの名無しさん
2007/10/22(月) 11:13:29#include<stdio.h>
int main(viod)
{
unsigned int num,result = 0;
printf("Input a number>");scanf("%u",&num);
while(num!=0){
result = result*10 + num%10;
num /= 10;
}
printf("%d",result);
return 0;
}
0724デフォルトの名無しさん
2007/10/22(月) 11:16:25これは新解釈だ。
0725723
2007/10/22(月) 11:21:5710桁無理だ…。
というわけで
unsigned int → unsigned long
"%u" → "%lu"
に訂正しないといかん
0726デフォルトの名無しさん
2007/10/22(月) 11:24:120727デフォルトの名無しさん
2007/10/22(月) 11:25:200123って書いたら8進数で123って解釈するのが普通だと思う
0728デフォルトの名無しさん
2007/10/22(月) 11:26:56[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
文字を入力し、その文字に含まれるアルフェベット(空白含む)の数をそれぞれ表示させよ。
またその生起確率も計算し表示させろ。
[3] 環境
[3.1] OS: Windows XP
[3.2] gcc
[3.3] 言語:C言語
[4] 期限: 2007年10月23日02:00まで
よろしくお願いしますm(_ _)m
0729デフォルトの名無しさん
2007/10/22(月) 11:27:420730デフォルトの名無しさん
2007/10/22(月) 11:28:10計算結果違ったらMS社のせいな。Win付属の電卓使ったから…
0731num = num / 10
2007/10/22(月) 11:28:17ここは質問スレではありません。
0732デフォルトの名無しさん
2007/10/22(月) 11:29:42文字は一つ
0733デフォルトの名無しさん
2007/10/22(月) 11:38:54お願いします
教えて下さい
0734デフォルトの名無しさん
2007/10/22(月) 11:38:56[2] 問題文(含コード&リンク):
10個の製品の在庫管理のプログラムを作成しなさい。
全ての製品は初期在庫として、1000個の在庫を持っている。毎日80〜120個ランダムに減っていく。
また、製品によって減っていく量は異なるものとする。
在庫量が300個(発注点)以下になった製品は発注をかけ、その三日後に500個納品される。
終了条件:1000日
単位時間: 日
出力の例:
製品A
前日在庫量 需要量 当日在庫量
320 120 200
200 100 100
100 110 0
○日に10個欠品しました!!
500個納品されました!!
490 90 400
各製品ごとに上記のように表示されるようにしなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ: bcc
[3.3] 言語: C++
[4] 期限:22日19時
[5] その他の制限: できれば、後から簡単に、初期在庫量・発注点・製品数などを変更できるようにしてください。
よろしくお願いします。
0735デフォルトの名無しさん
2007/10/22(月) 11:40:06文字に含まれる文字?
文を入れてもらって文字の頻度をとるのかな?
int main(void)
{
char buffer[1024];
unsigned int cnt[256];unsigned int all;
int i;
for(i = 0;i < 256;++i) cnt[i] = 0; /* memcopyの方が早い、おそらく */
gets(buffer);
for(i = 0;buffer[i]!='\0';++i){
++cnt[(unsigned char)buffer[i]];
}
all = i;
printf("文字 出現数 出現確率\n")
for(i = 0;i < 256;++i)
printf(" \"%c\" %4u %7.3f\n",(unsigned char)i,cnt[i],cnt[i]*100.0/all);
return 0;
}
0736デフォルトの名無しさん
2007/10/22(月) 11:41:41731の名前のとこに書いとるがな…
0737デフォルトの名無しさん
2007/10/22(月) 11:44:21>>735
うわ、日本語がおかしいorz
完全なる説明不足です
文の中の文字の間違いです…御免なさい
「abcdae df」なら「a:2 b:1 c:1 d:2 e:1 f:1 空白:1」みたいに…
0738728
2007/10/22(月) 11:45:06もちつけ俺。
0739730
2007/10/22(月) 11:47:17徹夜のせいか数字の桁数みまちがえた…そろそろ寝んとやばいか…
64bit整数に対応してたらそれで…文字列処理版は今から書く…
0740デフォルトの名無しさん
2007/10/22(月) 11:49:06釣りだと思って無視してたw
0741723=725=730=739
2007/10/22(月) 12:08:50書き直しました。
頭の0は無視します。
10進以外の数を入れると何も表示せず終わります。
スペース、タブも無視しません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5117.txt
0742741
2007/10/22(月) 12:14:38http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5118.txt
0743735
2007/10/22(月) 12:28:13それだと生起確率がないぞ…
printf(" \"%c\" %4u %7.3f\n",(unsigned char)i,cnt[i],cnt[i]*100.0/all);
は
if(isprint(i)&&cnt[i])
printf(" \"%c\" %4u %7.3f\n\%",(unsigned char)i,cnt[i],cnt[i]*100.0/all);
とした方が言いかもしれん
\x00〜\x1fまでが入るとやばいし0個の文字がたくさんあるとうざい…
0745デフォルトの名無しさん
2007/10/22(月) 12:33:29普通にこれでいいだろ
試してないけど
#include <stdio.h>
#define MAX 10
int main(){
char buf[MAX+1];
int count=0;
printf("10桁までの数字を入力してください");
while(count < MAX && (buf[count] = getchar) != EOF)
if(isdigit(buf[count]) && buf[0] != '0') count++;
while(count>0) putchar(buf[--count]);
return 0;
}
0746735=743
2007/10/22(月) 12:34:440747745
2007/10/22(月) 12:34:520748デフォルトの名無しさん
2007/10/22(月) 12:35:140749745
2007/10/22(月) 12:37:41ぬる文字いらないじゃん
0750デフォルトの名無しさん
2007/10/22(月) 12:47:38EOFってint型で-1じゃなかったかな?
ShiftJIS環境下において\xffが入力されることがないからそれはまぁいいとして
入力が0だと何も表示しないがそれはいいのか?
仕様の一言で済むが…。
自分は
0123→123→321
0000→0→0
となるべきではないだろうか?0も10桁までの整数だと思う。
あと100と入れると0のとこでcount進むな…
あっ俺も反転後の頭の0消してないや…
0751デフォルトの名無しさん
2007/10/22(月) 12:50:41もちっと落ち着け
0752750
2007/10/22(月) 12:52:33while(count>0) putchar(buf[--count]);
のまえに
while(count>0) if(buf[count]!='0'){ ++count; break; }else --count;
これで100でも001などという表示にはなんない…
countうんぬん気のせいだった忘れて欲しい。お願い忘れて!
を入れるべきか…
でもどうやって100と入力した時の
0753デフォルトの名無しさん
2007/10/22(月) 12:55:50入力 7f8 って入力したら 87 って表示しそうだけど…
0754デフォルトの名無しさん
2007/10/22(月) 12:58:52#include <stdio.h>
int main() {
int i;
char cs[32];
printf("10桁までの整数:");scanf("%10s%*[^\n]%*c",cs);
for (i = strlen(cs) - 1; 0 <= i; i--) {
if (isdigit(cs[i]) && !(i == 0 && cs[i] == '0')) putchar(cs[i]);
}
return 0;
}
0755デフォルトの名無しさん
2007/10/22(月) 13:03:32#include <stdio.h>
int main() {
int i;
char cs[32];
printf("10桁までの整数:");scanf("%10s%*[^\n]%*c",cs);
for (i = 0; i < strlen(cs) - 1 && cs[i] == '0'; i++) cs[i] = ' ';
for (i = strlen(cs) - 1; 0 <= i; i--) {
if (isdigit(cs[i]) && !(i == 0 && cs[i] == '0')) putchar(cs[i]);
}
return 0;
}
0756デフォルトの名無しさん
2007/10/22(月) 13:06:34ぐだぐたなのの半分は俺
0757デフォルトの名無しさん
2007/10/22(月) 13:07:17#include <stdio.h>
int main() {
int i;
char cs[32];
printf("10桁までの整数:");scanf("%10s%*[^\n]%*c",cs);
for (i = 0; i < strlen(cs) - 1 && cs[i] == '0'; i++) cs[i] = ' ';
for (i = strlen(cs) - 1; cs[i] == '0'; i--) cs[i] = ' ';
for (i = strlen(cs) - 1; 0 <= i; i--) {
if (isdigit(cs[i]) && !(i == 0 && cs[i] == '0')) putchar(cs[i]);
}
return 0;
}
0758デフォルトの名無しさん
2007/10/22(月) 13:22:41%10s を %[^0-9]10s ってしたほうが良くない?
7bhgjf1 とかの抑止のために…
出力側 isdigit のチェック無くなるよ?
0759デフォルトの名無しさん
2007/10/22(月) 13:23:42[2] 問題文(含コード&リンク):
10個の製品の在庫管理のプログラムを作成しなさい。
全ての製品は初期在庫として、1000個の在庫を持っている。毎日80〜120個ランダムに減っていく。
また、製品によって減っていく量は異なるものとする。
在庫量が300個(発注点)以下になった製品は発注をかけ、その三日後に500個納品される。
終了条件:1000日
単位時間: 日
出力の例:
製品A
前日在庫量 需要量 当日在庫量
320 120 200
200 100 100
100 110 0
○日に10個欠品しました!!
500個納品されました!!
490 90 400
各製品ごとに上記のように表示されるようにしなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ: bcc
[3.3] 言語: C++
[4] 期限:22日19時
[5] その他の制限: できれば、後から簡単に、初期在庫量・発注点・製品数などを変更できるようにしてください。
よろしくお願いします。
0760デフォルトの名無しさん
2007/10/22(月) 13:23:58いや 2/3 位自分だ ゴメン orz
0761デフォルトの名無しさん
2007/10/22(月) 13:25:16スキャンする時点でゼロも飛ばせたら…。
char配列で頑張るのはここらへんが限度か。
0762デフォルトの名無しさん
2007/10/22(月) 13:26:310763デフォルトの名無しさん
2007/10/22(月) 14:06:06dt1='00001';if('00001'==dt1){dt1=1;}
dt2='0000';if('0000'==dt2){dt2=0;}
write(dt1+' '+dt2);
0764デフォルトの名無しさん
2007/10/22(月) 14:16:49問題文は 722 だ、
で一つ質問だが何言語だそれ?
writeって関数Cにあったか?C++でもいいが…やっぱ無かったと思うが…
'0001' '0000'もCじゃありえないぞ…
0765デフォルトの名無しさん
2007/10/22(月) 14:23:31scanf("%10s%*[^\n]%*c",cs);
を
scanf("%[^1-9]c%[^0-9]10s%*[^\n]%*c",cs,cs+1);
てのはどうだろう…
0766デフォルトの名無しさん
2007/10/22(月) 14:27:06cでwrite()と言えば、unixのsystem callだろう。常考
>763が何をしたいのかは私も判らんが。
0767デフォルトの名無しさん
2007/10/22(月) 14:28:22あ〜〜 scanfの戻り値もチェックした方がいいよね?
そしたらこうかscanfのとここうなるかなぁ…
if(scanf("%[^1-9]c%[^0-9]10s%*[^\n]%*c",cs,cs+1) <2)
{ printf("入力が正しくありません。\n"); return -1; }
0768デフォルトの名無しさん
2007/10/22(月) 14:32:120769デフォルトの名無しさん
2007/10/22(月) 14:35:050770デフォルトの名無しさん
2007/10/22(月) 14:36:06それって『++C++』って言うんだよ
0771デフォルトの名無しさん
2007/10/22(月) 14:37:190772デフォルトの名無しさん
2007/10/22(月) 14:37:33thanks
見た感じ変数宣言してないし文字列リテラルを''で囲んで書いてる
比較演算子の記述方法がCと同じdt1に文字列も数値も入るからTypeless言語
これを考えるとPerlかなと思う。確かPerlの標準出力ってwriteとwritenだったような…
0773デフォルトの名無しさん
2007/10/22(月) 14:38:15多製品っていうのが、やっかいだな・・・
0774デフォルトの名無しさん
2007/10/22(月) 14:40:42オンラインで動作します
// エラー デバッグ ブラウザ ツール
// http://www.mozilla-japan.org/
// シンプル プログミング ツール
// http://proforceone.web.fc2.com/
// 素因数分解サンプルプログラム
// Calculation processing にコピーして[RUN]
MAX=1000; br();
for(x=2;MAX>=x;x++){write(" "+x+" ⇒");
for(i=2;x>=i;i++){if(0==x%i){k=0;
for(j=2;(i>=j)&&(1>=k);j++){
if(0==i%j){k++;}
} if(1==k){write(" "+i);}
}} br();
}
0775デフォルトの名無しさん
2007/10/22(月) 14:43:19// http://proforceone.web.fc2.com/
// 素因数分解サンプルプログラム
// Calculation processing にコピーして[RUN]
MAX=1000; br();
for(x=2;MAX>=x;x++){write(" "+x+" ⇒");
for(i=2;x>=i;i++){if(0==x%i){k=0;
for(j=2;(i>=j)&&(1>=k);j++){
if(0==i%j){k++;}
} if(1==k){write(" "+i);}
}} br();
}
0776デフォルトの名無しさん
2007/10/22(月) 14:45:49製品クラスのベースクラス用意して
ベースクラスのポインタvectorとかslistでもって、…
出力例は明らかに1製品だけだよな…
シュミレーション関数をfor_eachで回すのか…もしかして…
0777772
2007/10/22(月) 14:52:14明らかにコンパイラとしての構文規約に違反してる…
0778デフォルトの名無しさん
2007/10/22(月) 14:54:54例は1製品だけど、
>各製品ごとに上記のように表示されるようにしなさい
ってあるから、全製品について表示させるんじゃない?
0779デフォルトの名無しさん
2007/10/22(月) 14:57:08>文字列リテラルを''で囲んで書いてる
そうしないとコンパイラが8進数と勘違いするよ
0780デフォルトの名無しさん
2007/10/22(月) 15:01:06設定が入ったクラス用意して1製品だけを処理するシュミレーションを
for_eachで製品回数分回せばいいということにならないだろうか?
vector<> setting(3);
setting = {製品Aの設定,製品Bの設定,製品Cの設定};
for_each(setting.begin(),setting.end(),simulation);
こんな流れ出処理したら出力例が製品分縦続きで出てくると…
0781デフォルトの名無しさん
2007/10/22(月) 15:42:55どこらへんまで使っていいか判断が難しいよな……
単なるCの構文置き換え程度なのか、
better C程度なのか、
クラスばりばり使っていいのか、
STLばりばり使っていいのか、
テンプレート使っていいのか、
boost使っt(ry
まあ俺はクラスをちょい使うレベルしか無理だがw
STLはvectorくらいしか分からん
0782デフォルトの名無しさん
2007/10/22(月) 15:45:07// http://www.mozilla-japan.org/
// シンプル プログミング ツール
// http://proforceone.web.fc2.com/
// 00001 を 1 に。0000 を 0 に。 (符号付15桁有効)
// Calculation processing にコピーして[RUN]
dt='00001 0000 095 +00000023 -0888 -123456789012345';
dt=dt.split(' ');for(i=0;dt.length>i;i++){br();di=dt[i];
si='+';if('+'==di.substr(0,1)){si='+';di=di.substr(1);}
else if('-'==di.substr(0,1)){si='-';di=di.substr(1);}
di='000000000000000'.substr(0,15-di.length)+di;
sp(2);write(eval(si+'.'+di)*1000000000000000);}
0783デフォルトの名無しさん
2007/10/22(月) 15:50:07[2] 問題文(含コード&リンク):年月日を入力して、その日に最も近いクリスマスを全て表示するプログラムを作れ
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:BCC5.5
[3.3] 言語:C言語
[4] 期限:明日まで
[5] その他の制限:特になし
0784デフォルトの名無しさん
2007/10/22(月) 15:52:40// http://www.mozilla-japan.org/
// ++C++ シンプル プログミング ツール
// http://proforceone.web.fc2.com/
// 00001 を 1 に。0000 を 0 に。 (符号付15桁) (符号明示化)
// Calculation processing にコピーして[RUN]
dt='00001 0000 095 +00000023 -0888 -123456789012345';
dt=dt.split(' ');for(i=0;dt.length>i;i++){br();di=dt[i];
si='+';if('+'==di.substr(0,1)){si='+';di=di.substr(1);}
else if('-'==di.substr(0,1)){si='-';di=di.substr(1);}
di='000000000000000'.substr(0,15-di.length)+di;
sp(2);write(si+eval('.'+di)*1000000000000000);}
0785デフォルトの名無しさん
2007/10/22(月) 15:59:09dt='00001 0000 095 +00000023 -0888 -123456789012345';
dt=dt.split(' ');
for(i=0;dt.length>i;i++){
br();di=dt[i];si='+';
if('+'==di.substr(0,1)){
si='+';di=di.substr(1);
}else if('-'==di.substr(0,1)){
si='-';di=di.substr(1);
}di='000000000000000'.substr(0,15-di.length)+di;
sp(2);write(si+eval('.'+di)*1000000000000000);
}
0786デフォルトの名無しさん
2007/10/22(月) 16:00:38いい加減スレ違いだし、くどいよ。
0787デフォルトの名無しさん
2007/10/22(月) 16:01:52+1
+0
+95
+23
-888
-123456789012345
0788デフォルトの名無しさん
2007/10/22(月) 16:02:57俺はvectorすらわかんねw
ここに書き込むぐらいだから、Cの構文置き換え程度なんじゃない?
クラスとか使ったほうがきれいにできるなら使っちゃっていいんじゃない
0789デフォルトの名無しさん
2007/10/22(月) 16:03:39かわいそう〜
0790デフォルトの名無しさん
2007/10/22(月) 16:07:25とりあえず書いたけど動作確認まではしてないよ…。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5119.cpp
>>772
'0000'と書いてあったんだ…
0791デフォルトの名無しさん
2007/10/22(月) 16:09:54この問題の目的は
8進数して処理されるのを
いかに10進数で認識するか
と言うことでしょう・・・
0792デフォルトの名無しさん
2007/10/22(月) 16:16:36>その日に最も近いクリスマスを全て表示する
???
>>789
いやC言語風味な別言語だよ 785 のは…
・理由は宣言型言語でない(変数の宣言なしで変数の使用が可能)
・main関数がない
・リテラル宣言がC,C++と異なる。
・ライブラリがない(インタプリタならあたりまえ)
・標準的な関数名の違い
なにより多少の手直しだけではコンパイラを通らない。
0793デフォルトの名無しさん
2007/10/22(月) 16:19:22大元をたどるとですね
文字列"0001"を文字列"1"へ、
文字列"0000"を文字列"0"へ
文字列"0100"を文字列"100"へ
ということ
ただし文字列な長さは固定でないとする。
0794デフォルトの名無しさん
2007/10/22(月) 16:20:20[2] 問題文(含コード&リンク):
input-3-1.txtは100000行からなり、各行には整数が1つずつ書かれている。
このinput-3-1.txtを読み込み、 input-3-1.txtの100000行目を1行目に、99999行目を2行目にというように、逆順に出力するプログラムを作り、
output.txtに出力しなさい。
このとき、プログラムへの入力と出力はscanf、printfとリダイレクトを使うこと。
input-3-1.txtはhttp://toku.xdisc.net/cgi/up/vcc/nm11765.zipです。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:VC++2003
[3.3] 言語:C
[4] 期限:2007年10月24日
[5] その他の制限:
初心者でもわかるような感じにお願いします。
配列を使う課題なので、配列も使ってください。
0795デフォルトの名無しさん
2007/10/22(月) 16:29:00こんなのはいかがでしょう
#include<iostream>
#include<string>
using namespace std:
int main(void)
{
string buffer[10000];
for(int i=0;i<10000;++i) getline(cin,buffer[i],"\n");
for(int i=10000;i>0;) cout << buffer[--i] << "\n";
return 0;
}
0796デフォルトの名無しさん
2007/10/22(月) 16:29:03その>>784の++C++言語から
標準C++言語に変換する
プリコンパイラ?を作成せよ
なんちゃって・・・
0797デフォルトの名無しさん
2007/10/22(月) 16:30:11http://youtv.atspace.com/?rSTV=STEREO+%E5%88%9D%E9%9F%B3%E3%83%9F%E3%82%AF
0798デフォルトの名無しさん
2007/10/22(月) 16:32:11めんどくさいの一言に尽きる。別のスレで頼め…。
あとここはC,C++のスレだから 786 でスレ違いだといったんだ。
0799795
2007/10/22(月) 16:36:38動く気しない…どう思いますか?みなさん
#include<iostream>
#include<string>
using namespace std:
int main(void)
{
string buffer[100000];
for(int i=0;i<100000;++i) getline(cin,buffer[i],"\n");
for(int i=100000;i>0;) cout << buffer[--i] << "\n";
return 0;
}
0800デフォルトの名無しさん
2007/10/22(月) 16:43:13>いやC言語風味な別言語だよ 785 のは…
・理由は宣言型言語でない(変数の宣言なしで変数の使用が可能)
実はバリアント型である
・main関数がない
実は省略が可能である
・リテラル宣言がC,C++と異なる。
実は " も使用可能である
・ライブラリがない(インタプリタならあたりまえ)
ライブラリは .js と実は呼ばれている
・標準的な関数名の違い
標準関数に無い場合はライブラリを作れば良い
>なにより多少の手直しだけではコンパイラを通らない。
基本は変わって無いんですが・・・ライブラリ使ってます
0801デフォルトの名無しさん
2007/10/22(月) 16:44:00・言語が指定と違う
・行数が指定を満たしていない
0802デフォルトの名無しさん
2007/10/22(月) 16:45:25出題者の意図を読まないといけなさそうだねえ。やっぱintの配列を期待してそうに見える。
要素100000の巨大配列なら auto 変数はやめときたい。今時無視できる大きさなのかな?
あと言語は(ry
0803デフォルトの名無しさん
2007/10/22(月) 16:45:49大丈夫?
0804デフォルトの名無しさん
2007/10/22(月) 16:49:19なんかうざいし、クラス使う意味ほぼ無し
0805デフォルトの名無しさん
2007/10/22(月) 16:49:55それでは
汎用性が無い
>>787
これは
すばらしい
0806デフォルトの名無しさん
2007/10/22(月) 16:50:43Cだっちゅーに
0807799
2007/10/22(月) 16:52:58malloc/free使ってないのは配列使ってと書いてあるからだけど
100000て添え字までいけるのかなぁ
C版に書き直しました…。
#include<stdio.h>
int main(void)
{
int *buffer[100000];
for(int i=0;i<100000;++i) scanf("%d",buffer[i]);
for(int i=100000;i>0;) printf(%d",buffer[i]);
return 0;
}
0808デフォルトの名無しさん
2007/10/22(月) 16:53:25br(); 1行改行
br(1); 1行改行
br(2); 2行改行
br(N); N行改行
0809デフォルトの名無しさん
2007/10/22(月) 16:54:43scanf?
type input-3-1.txt | 794.exe > output.txt
ってやれってことか?
0810807
2007/10/22(月) 16:54:54#include<stdio.h>
int main(void)
{
int buffer[100000];
for(int i=0;i<100000;++i) scanf("%d",&buffer[i]);
for(int i=100000;i>0;) printf(%d",buffer[i]);
return 0;
}
0811デフォルトの名無しさん
2007/10/22(月) 16:55:29おいおい、ポインタ配列を作ってしれっと誤魔化すなや。
0812デフォルトの名無しさん
2007/10/22(月) 16:56:18794 < input-3-1.txt > output.txt でいいんでない?
0813デフォルトの名無しさん
2007/10/22(月) 16:56:22もちつけ
0814デフォルトの名無しさん
2007/10/22(月) 16:57:31sp(); 半角1スペース
sp(1); 半角1スペース
sp(2); 全角1スペース
sp(3); 全角1スペース+半角1スペース
sp(4); 全角2スペース
sp(5); 全角2スペース+半角1スペース
sp(N); 全角(N/2)スペース+半角(N%2)スペース
0815デフォルトの名無しさん
2007/10/22(月) 16:57:48794 < input-3-1.txt > output.txt
だが?
scanf、printf使えと書いてある。リダイレクトも
パイプは書いてないからダメだろう
0816デフォルトの名無しさん
2007/10/22(月) 16:59:34標準のC/C++って
split使えるの?
0817デフォルトの名無しさん
2007/10/22(月) 17:01:02仕様書を読むとできないと明記されてる
Alice was beginning to get very tired of sitting by her sister on the bank,
and of having nothing to do: once or twice she had peeped into the book her sister was reading,
but it had no pictures or conversations in it, `and what is the use of a book,' thought Alice `without pictures or conversation?'
So she was considering in her own mind (as well as she could, for the hot day made her feel very sleepy and stupid),
whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies,
when suddenly a White Rabbit with pink eyes ran close by her.
0818810
2007/10/22(月) 17:01:14目的もはっきりしてるし、他で使いまわしたりしていないし
0819デフォルトの名無しさん
2007/10/22(月) 17:01:510820デフォルトの名無しさん
2007/10/22(月) 17:02:52グローバルでもstaticでも御好きに
0821デフォルトの名無しさん
2007/10/22(月) 17:03:09#include<ctype.h>
#include<string.h>
int issign(int chr){ return (chr=='+' || chr=='-'); }
int main(void){
char buf[]="00001 0000 095 +00000023 -0888 -123456789012345";
char number[10+1], *ptr=buf;
int i, sign;
while(*ptr){
sign='+';
while(!isdigit(*ptr) && !issign(*ptr) && *ptr) ptr++;
if(issign(*ptr)) sign=*ptr++;
if(!isdigit(*ptr)) continue;
while(*ptr=='0') ptr++;
for(i=0;i<10 && isdigit(*ptr);i++) number[i]=*ptr++;
if(i==0) sign='+',number[i++]='0';
number[i]='\0';
while(isdigit(*ptr)) ptr++;
putchar(sign);
for(i=strlen(number)-1;i>=0;i--) putchar(number[i]);
putchar('\n');
}
return 0;
}
0822デフォルトの名無しさん
2007/10/22(月) 17:05:55こっちで聞いた方が良くない?
http://pc11.2ch.net/test/read.cgi/tech/1190860744/l50
標準じゃsplitはないよ…
0823デフォルトの名無しさん
2007/10/22(月) 17:06:05バッファオーバーフロー
0824デフォルトの名無しさん
2007/10/22(月) 17:06:540825810
2007/10/22(月) 17:08:04ご指摘ありがとうございます。
#include<stdio.h>
int main(void)
{
int buffer[100000];
for(int i=0;i<100000;++i) scanf("%d",&buffer[i]);
for(int i=100000;i>0;) printf(%d",buffer[--i]);
return 0;
}
0826デフォルトの名無しさん
2007/10/22(月) 17:08:50これを実行するために
dt="00001 0000 095 +00000023 -0888 -123456789012345".split(' ');
.split();
を標準的なC++を使ってライブラリ化せよ
0827デフォルトの名無しさん
2007/10/22(月) 17:09:18ちといま開発環境がないとこにいるんだよ…
0828デフォルトの名無しさん
2007/10/22(月) 17:17:31これを実行
dt="00001 0000 095 +00000023 -0888 -123456789012345".split(' ');
実行した結果に等価
dt[0]="00001";
dt[1]="0000";
dt[2]="095";
dt[3]="+00000023";
dt[4]="-0888";
dt[5]="-123456789012345";
0829デフォルトの名無しさん
2007/10/22(月) 17:19:560830デフォルトの名無しさん
2007/10/22(月) 17:21:590831デフォルトの名無しさん
2007/10/22(月) 17:24:370832デフォルトの名無しさん
2007/10/22(月) 17:25:280833デフォルトの名無しさん
2007/10/22(月) 17:25:58CにはCのBASICにはBASICのプログラミングスタイルがあるように
人の好みもそれぞれだろうからね。
でもここは宿題スレだぞ
0834デフォルトの名無しさん
2007/10/22(月) 17:27:590835デフォルトの名無しさん
2007/10/22(月) 17:28:15dt="00001 0000 095 +00000023 -0888 -123456789012345".split(' ').join('/');
実行した結果に等価
dt="00001/0000/095/+00000023/-0888/-123456789012345";
0836デフォルトの名無しさん
2007/10/22(月) 17:30:14了解
0837デフォルトの名無しさん
2007/10/22(月) 17:32:24#include<stdio.h>
#include<stdlib.h>
#define LINE_MAX 100000
int main(void){
char *buf=NULL, *ptr, moji;
long i, cursize=0, bufsize=0, linecount=0;
long linehead[LINE_MAX+1];
linehead[0]=0;
while(scanf("%c", &moji)==1){
if(cursize>=bufsize){
bufsize+=10000;
buf=realloc(buf, bufsize);
if(buf==NULL) return 1;
}
if(moji=='\n'){
buf[cursize++]='\0';
linehead[++linecount]=cursize;
}else{
buf[cursize++]=moji;
}
if(linecount>LINE_MAX) break;
}
for(i=linecount-1;i>=0;i--) printf("%s\n", &buf[linehead[i]]);
return 0;
}
0838デフォルトの名無しさん
2007/10/22(月) 17:32:50それはちがう ライブラリ化で
よりプログラムを簡単にすると言うこと
宿題にライブラリ function 付ければ それで良い
0839デフォルトの名無しさん
2007/10/22(月) 17:36:32すべての宿題はこれで片付くわけだw
#include"bakalib.h"
int main(int argc, char *argv[]){
return bakafunc(argc, argv);
}
0840デフォルトの名無しさん
2007/10/22(月) 17:38:57getsで1ラインずつ読み込んでsscanfとかstrtolで変換した方が
よさそでない
0841デフォルトの名無しさん
2007/10/22(月) 17:42:570842デフォルトの名無しさん
2007/10/22(月) 17:45:560843デフォルトの名無しさん
2007/10/22(月) 17:46:13http://www.cppll.jp/cppreference/cppstring.html
0844デフォルトの名無しさん
2007/10/22(月) 17:49:54scanf("%d")もしくはscanf("%ld")でとらない理由が知りたい
何か不都合があったかなぁ…
0845デフォルトの名無しさん
2007/10/22(月) 17:49:56ところが
超++C++言語は
.split(' ');
たったコレだけで動作する 最高だ
0846デフォルトの名無しさん
2007/10/22(月) 17:51:44サンプルのファイルだとオーバーフローしないが、
問題文には整数の桁数制限が無かったのでこうした
0847デフォルトの名無しさん
2007/10/22(月) 17:55:21超++C++言語は
内部文字コードはUTF-16なので
半角文字も16ビットです
char * ではなく
int * になるよ
0848デフォルトの名無しさん
2007/10/22(月) 18:00:23それを考えると整数型に変換しない方がいいと思う。
整数型にしている以上上限値は必ずあるから。
それに引き換えtxtファイルの1行の文字数制限はない…。
>>841
getsにはバッファーオーバーランの危険性がありましたね…失念…やばいやばい
0849デフォルトの名無しさん
2007/10/22(月) 18:02:37http://ash.jp/code/unitbl1.htm
http://ash.jp/code/unitbl21.htm
http://ash.jp/code/unitbl22.htm
0850デフォルトの名無しさん
2007/10/22(月) 18:06:16unsigned int * かな
0851デフォルトの名無しさん
2007/10/22(月) 18:06:53整数が1つずつ - intを使えよな
逆順に出力 - 全部メモリに取り込め
scanf、printfとリダイレクトを - fseek使うな。1passで。
でも普通は >>837 みたいになるよな。
0852デフォルトの名無しさん
2007/10/22(月) 18:14:03レベルの低いC厨はそうやって一つの事しか出来ないから困る
複数を使い分けろよ
0853デフォルトの名無しさん
2007/10/22(月) 18:14:43ありがとうございました
0854デフォルトの名無しさん
2007/10/22(月) 18:15:40--
awk '{buffer = $0 "\n" buffer;} END {print buffer;}'
0855デフォルトの名無しさん
2007/10/22(月) 18:15:590856デフォルトの名無しさん
2007/10/22(月) 18:17:18課題文みるかぎり1passである必要はなさそうだよ。
まぁバイナリじゃないからfseek使えんし…
テンポラリファイルに記録しながらオフセットを記録して…邪道か…
0857デフォルトの名無しさん
2007/10/22(月) 18:17:40じゃあどーやんの?
0858デフォルトの名無しさん
2007/10/22(月) 18:17:420859デフォルトの名無しさん
2007/10/22(月) 18:22:24どうやるもなにも、クラス使う意味ないし、for_each()使う意味も全くないし、何よりうざいってだけさ
0860デフォルトの名無しさん
2007/10/22(月) 18:24:08やっぱそうですよね。組み込み系じゃあるまいし…。
0861デフォルトの名無しさん
2007/10/22(月) 18:33:310862デフォルトの名無しさん
2007/10/22(月) 18:33:33forで回してもいいわなそりゃ
class作ったのはその他制限の部分に関係しているのだが?
PODでも良かったかもしれんが…。
もっとスマートに書けるなら外形だけでもいいから示してもらいたい。
0863デフォルトの名無しさん
2007/10/22(月) 18:38:04じゃ、それでいいよ。
0864デフォルトの名無しさん
2007/10/22(月) 18:38:460865デフォルトの名無しさん
2007/10/22(月) 18:44:34// ++C++ エラー デバッグ ブラウザ ツール
// http://www.mozilla-japan.org/
// ++C++ シンプル プログミング ツール
// http://proforceone.web.fc2.com/
// 100000行からなり
// 逆順に出力する
// すべて選択 して Processed input data にコピーする
pc11.2ch.net/test/read.cgi/tech/1191937213/
// Calculation processing にコピーして[RUN]
dt=$.split('\n');for(i=dt.length-1;0<=i;i--){br();sp(2);write(dt[i]);}br();br();
0866デフォルトの名無しさん
2007/10/22(月) 18:44:390867デフォルトの名無しさん
2007/10/22(月) 18:46:200868デフォルトの名無しさん
2007/10/22(月) 18:55:37模範回答を示せ
>>865
スレタイと>>1をよく読んでからどっかいけ
awk ならこれだけだ
{a[++i]=$0}END{for(;i>=1;i--)print a[i]}
0869デフォルトの名無しさん
2007/10/22(月) 18:56:00< >
0870デフォルトの名無しさん
2007/10/22(月) 19:00:36よほどあのコードに自身があるんだねぇwww
0871デフォルトの名無しさん
2007/10/22(月) 19:05:12そういうクラスもありだろうが、この場合はもっとうまく設計できると思う
0872862≠868
2007/10/22(月) 19:05:47綺麗に書けたわけでもないし、もっと綺麗なコードになるなら
手本なり部分的な代案なりがないと手直しも何も出来ない
0873デフォルトの名無しさん
2007/10/22(月) 19:05:520874デフォルトの名無しさん
2007/10/22(月) 19:09:44製品毎の在庫管理クラスStockMamager
複数の製品在庫をまとめる管理クラスFactory
Factoryを引数で受け取って、シミュレートするsimulate関数
という感じにする
by C++ 初心者
0876デフォルトの名無しさん
2007/10/22(月) 19:12:340877デフォルトの名無しさん
2007/10/22(月) 19:17:240878デフォルトの名無しさん
2007/10/22(月) 19:28:07// ++C++ エラー デバッグ ブラウザ ツール
// http://www.mozilla-japan.org/
// ++C++ シンプル プログミング ツール
// http://proforceone.web.fc2.com/
// 100000行からなり
// 逆順に出力する (センタリングしてみた)
// この掲示板を すべて選択 して Processed input data にコピーする
//pc11.2ch.net/test/read.cgi/tech/1191937213/
// Calculation processing にコピーして[RUN]
write('<center>');dt=$.split('\n');
for(i=dt.length-1;0<=i;i--){br();sp(2);write(dt[i]);}br();br();
0879デフォルトの名無しさん
2007/10/22(月) 19:33:190880デフォルトの名無しさん
2007/10/22(月) 19:39:10ループを書くだけ野暮。
>854
0881デフォルトの名無しさん
2007/10/22(月) 19:39:230882デフォルトの名無しさん
2007/10/22(月) 19:40:24模範回答を示せ
0883デフォルトの名無しさん
2007/10/22(月) 19:47:37遅れてる部分あるんですね?
0884デフォルトの名無しさん
2007/10/22(月) 19:50:55ここは宿題スレだから
0885デフォルトの名無しさん
2007/10/22(月) 19:56:17ライブラリ化の宿題が
増える・・・
0886デフォルトの名無しさん
2007/10/22(月) 19:59:08参考にBASICでは A$=B$+C$:
0887デフォルトの名無しさん
2007/10/22(月) 20:04:010888デフォルトの名無しさん
2007/10/22(月) 20:09:09859じゃないけど、文字の通りにやるだけだったらこれを10回分繰り返せば終わりじゃないかと。
int _tmain(int argc, _TCHAR* argv[])
{
int zaiko = 1000;
int nouhin = -1;
time_t t; time(&t); srand(t);
printf("前日在庫量 需要量 当日在庫量");
for( int i = 0 ; i < 1000 ; i++ ) {
int n = 80 + rand()%40;
if( nouhin >= 0 ) {
if( --nouhin == 0 ) {
zaiko += 500;
printf("500個納品されました\n");
}
}
int zenjitu = zaiko;
zaiko -= n;
if( zaiko <= 300 && nouhin == -1 ) {
nouhin = 3;
}
printf("%8d %8d %8d\n",(zenjitu<0)?0:zenjitu,n,(zaiko<0)?0:zaiko);
if( zaiko < 0 ) {
printf("%d日に%d個欠品しました\n",i,-zaiko );
}
}
return 0;
}
0889デフォルトの名無しさん
2007/10/22(月) 20:09:520890デフォルトの名無しさん
2007/10/22(月) 20:10:57↑ではCではどうですか?
0891デフォルトの名無しさん
2007/10/22(月) 20:12:290892デフォルトの名無しさん
2007/10/22(月) 20:15:18文字で無くなるという
サンプルコードは?
0893デフォルトの名無しさん
2007/10/22(月) 21:39:110894デフォルトの名無しさん
2007/10/22(月) 21:43:47C++だろ
0895デフォルトの名無しさん
2007/10/22(月) 21:50:21sizeof() は size_t 型を返す立派な演算子だが…
0896デフォルトの名無しさん
2007/10/22(月) 21:52:570897デフォルトの名無しさん
2007/10/22(月) 21:53:33C99だとな
0898デフォルトの名無しさん
2007/10/22(月) 21:53:45どこがC++じゃないの?
0899デフォルトの名無しさん
2007/10/22(月) 22:02:53それじゃ1製品じゃない?
10製品同時じゃなきゃだめなんじゃないの?
0900デフォルトの名無しさん
2007/10/22(月) 23:30:3810製品分のとはかかれているなぁ。
ただ製品間で関係性がないから
10製品同時でやるのも1製品ずつ10回やるのも
差違がない。
ためしにrand関数をハックして
各製品に与えられる乱数列を同じにすると同じ結果が得られる…。
0901デフォルトの名無しさん
2007/10/23(火) 00:33:05全然分からなくて困ってるんです(><;)
0902デフォルトの名無しさん
2007/10/23(火) 00:34:58きいてやるからうpれ
ただし5分以内な
0903デフォルトの名無しさん
2007/10/23(火) 00:38:38端折ったら死亡
0904901
2007/10/23(火) 00:39:36すみません、リナックスで書いてたので文字化けしちゃってます…
書き換えてくるのでもう少し待ってもらえませんか?
0905デフォルトの名無しさん
2007/10/23(火) 00:41:46わかった待つからww
いちいちレスすんなwww
0906デフォルトの名無しさん
2007/10/23(火) 00:41:585分という約束を先延ばしにするとは
学生にしてはできるな
0907デフォルトの名無しさん
2007/10/23(火) 00:46:22[2] 問題文:オイラー法を用い、dy/dx=(3x-5y-4)/5 の常微分方程式を
解きなさい。また、その結果をExcelファイルに出力して
グラフを作りなさい。諸条件は以下のようにする。
初期値 (x,y)=(0,0)
刻み幅 Δh=0.3
積分区間 [a,b]=[0,3]
[3] 環境
[3.1] OS: Windows
[3.3] 言語:C++
[4] 期限: 2007年10月25日まで
0908907
2007/10/23(火) 00:49:37すいません。言語はc++じゃなくて、cです。
お願いします。
0909901
2007/10/23(火) 01:05:35#i#include <stdio.h>
nclude <stdlib.h>
/* 隣接点リスト中の各ノードを定義する構造体 */
struct node {
int num; /* そのノードが保持する節点番号 */
struct node *pair; /* そのノードとペアのノードを指すポインタ */
struct node *next; /* そのノードの次のノードを指すポインタ */
};
/* 隣接点リストの先頭ノードと末尾ノードを覚えておくためのデータを定義する構造体
末尾ノードは"番兵"と呼ばれるダミーのノードであることに注意 */
struct adjlist {
struct node *start; /* 先頭ノードを指すポインタ */
struct node *end; /* 末尾ノードを指すポインタ */
};
typedef struct node NODE;
typedef struct adjlist ADJLIST;
FILE *fp; char dfname[25];
NODE *intail(NODE**, int);
void delnode(NODE*, NODE**);
NODE *getnode();
void stop(char*);
0910901
2007/10/23(火) 01:07:01main()
{
int N, i, x, y;
int sum = 0;
NODE *p, *q;
ADJLIST *a;
printf("\n入力データファイル名 = "); /* ファイル名を入力してもらう */
scanf("%s",dfname);
fp =fopen(dfname,"r"); /* ファイルを開く */
if (fp == NULL) stop("Error: ファイルが利用できません");
if (fscanf(fp, "%d", &N) != 1) /* ファイルから節点数Nを読み込む */
stop("Error: 節点数が必要です");
int s[N],t[N];
/* (N+2)個の隣接点リストの先頭ノードと末尾ノードを覚えておくための
データ領域aを確保する。[a[0]:回路リスト用,a[1]:節点1の隣接点リスト,..,
a[N]:節点Nの隣接点リスト,a[N+1]:付加節点用] */
a = (ADJLIST *) malloc((N+2) * sizeof(ADJLIST));
if (a == NULL) stop("Error: 節点数が多すぎます");
/* 隣接点リストを初期化する(番兵ノードを作る)
[番兵を用いたのは、所望のアルゴリズムを片方向リストで実現するため]*/
for (i = 1; i <= N; i++)
a[i].start = a[i].end = getnode();
/* ファイルから枝データ(節点のペア)を読み込む */
while (fscanf(fp, "%d %d", &x, &y) == 2){
p = intail(&a[x].end,y); /*節点xの隣接点リストの末尾に節点yを挿入*/
q = intail(&a[y].end,x); /*節点yの隣接点リストの末尾に節点xを挿入*/
p->pair = q; q->pair = p; /*xとyの相互参照ポインタを設定*/
}
fclose(fp);
0911901
2007/10/23(火) 01:07:56for (i = 1; i<=N; i++){
printf("\n隣接点リスト%d :", i);
s[i]=0;
for (p = a[i].start; p != a[i].end; p = p->next){
printf(" -> %d", p->num);
s[i]++;
}
}
printf("\n");
/*オイラー回路を持つかどうか判定する*/
for (i = 1; i<=N; i++){
printf("\n節点%dの枝数 :", i); /*各節点の枝の数を表示*/
printf("%d",s[i]);
sum += s[i]%2;
}
printf("\n");
if (sum == 0)
printf("\nオイラー回路が存在します。\n");
else
printf("\nオイラー回路は存在しません。\n");
printf("\n");
return 0;
}
0912901
2007/10/23(火) 01:08:27endp: 末尾ノードへのポインタの"アドレス"
x: 新しいノードが保持する節点番号
戻り値: 新しいノードのアドレス */
NODE *intail(NODE **endp, int x)
{
NODE *p;
p = *endp;
*endp = getnode(); /*番兵のアドレスを変更*/
p->num = x;
p->next = *endp;
return p; /*戻り値はxのアドレス(新番兵の手前)*/
}
/* 隣接点リスト中のpの位置にあるノードを削除する
p: 削除するノードへのポインタ
endp: 末尾ノードへのポインタの"アドレス" */
void delnode(NODE *p, NODE **endp)
{
NODE *pn;
pn = p->next;
if (pn == *endp) /*nが末尾の要素であるとき、*/
*endp = p; /*nが新しく番兵になる*/
else {
*p = *pn; /*nの後続ノードmの内容をnに複写*/
pn->pair->pair = p; /*mの双対ノードの双対ノードはmである*/
}
free(pn); /*mの領域を解放する*/
}
0913デフォルトの名無しさん
2007/10/23(火) 01:09:32出力はCSVでもいいでしょうか?
Excelファイル出力は…
0914901
2007/10/23(火) 01:09:39戻り値: 新しいノードのアドレス */
NODE *getnode()
{
NODE *p;
p = (NODE *) malloc(sizeof(NODE));
if (p == NULL) stop("Error: メモリーが足りません");
return p;
}
/* エラー処理 */
void stop(char *str)
{
printf("\n%s\n", str); exit(1);
}
0915901
2007/10/23(火) 01:10:31上記のデータ構造を用いてグラフがオイラー回路を持つかどうか判定し
持つ場合は見つけ出し出力するプログラムを作れ
【2】分からないところ
判定まではできたのですが、それ以降が…
【3】言語
Cです。
【4】期限
明日(10月23日)までです、お願いします(><;)
なお、入力ファイルは
data01.dat
6
1 2
1 3
1 5
1 6
2 3
2 4
2 5
3 4
3 5
5 6
このように節点数のしたに枝の情報が並んでいる形です。
長文申し訳ありません…
0916デフォルトの名無しさん
2007/10/23(火) 01:15:10ラリホー
0917デフォルトの名無しさん
2007/10/23(火) 01:19:44奇点が二つの時は一方を、ゼロの場合はてきとうにひとつの頂点を選んで、
あとは一度通った辺を選ばないようにして、適当にうろうろさせた結果を出せば、
それが一筆書きになってるんじゃないの?
0918901
2007/10/23(火) 01:24:20寝れるなら寝たいです(><;)
>>917
オイラー回路と一筆書きって微妙に違うんです…
一筆は始点に戻らなくてもいいんですがオイラーは………はい。
0919デフォルトの名無しさん
2007/10/23(火) 01:27:34CSVファイル出力だけならこうなるけど…
あと仕様として0.3の丸め誤差で刻み幅が0.3から微妙にずれますが、
ずれないようにした方がいいですか?
#include<stdio.h>
long double df(long double x,long double y)
{ return (3*x-5*y-4)/5; }
int main(void)
{
long double x,y,delta;
FILE *outfile;
x = y = 0.0; delta = 0.3;
ourfile = fopen("data.csv","w");
fprintf(outfile,"%Lf,%Lf\n",x,y);
do{
y += dx(x,y)*delta;
x += delta;
fprintf(outfile,"%Lf,%Lf\n",x,y);
}while(x<1.0);
fclose(outfile);
return 0;
}
0920デフォルトの名無しさん
2007/10/23(火) 01:27:59じゃあ、奇点が0個のだけね。
でも、適当に辺を一回ずつ選べば始点に戻るよ。
0921デフォルトの名無しさん
2007/10/23(火) 02:29:44オイラー閉路を探るんなら、
1.適当なノードからスタート
2.手当たり次第エッジを選んでそちらへ進む.通過したエッジは消去。
3.行き止まり(たどれるエッジがないノード)になったら、そのノード番号をスタックに積む。
4.1個前のノードに戻り、2.へ戻る。
5.戻るノードもたどるエッジも無くなったら終了。
これでOK。プログラム見るの面倒だから書かないけど。
奇点が2以上→オイラー閉路にはならない(そもそも上記アルゴリズムを使わないで済む)
奇点が0でエッジが残っている→グラフが分断されていた。オイラー閉路ではない。(ただし各部分グラフはオイラー閉路)
奇点が0で残ったエッジも0→スタックに積んでいるのがオイラー閉路のたどり方。
あとはがんばれ。
0922デフォルトの名無しさん
2007/10/23(火) 02:39:35[2] 問題文(含コード&リンク): 英文ファイルを読み込み、指定したアルファベットで始まる英単語を英文ファイルからすべて表示する。
さらに、英文ファイル中の該当英単語数とその中から一番長い英単語を表示するプログラム
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C++
[4] 期限: 10/23日22時
[5] その他の制限:関数 findword(string fname, char top, string longest)を使用
実行例
Input file name-->data.txt
first letter--> a
Apple and alive a act an a a April advantage all
10words found and longest word --> advantage
ちなみにヒント
string fname,longest; int count; char top;
cout << "Input file-->"; cin >> fname;
cout << "first letter-->"; cin >>> top;
count = findword(fname,top,longest);
cout<< 結果の表示(省略)
上記のようなものをmain関数に含むと良い。(そのまま含まない)
string name = "special"のとき's'=name[0],'l'=name[6]でchar型として利用可
erase()を使い、文字列の語尾を1文字短くするにはs.erase(s.size()-1)を利用するとよいとだされました。
自分の中で方針がある程度決まっているのですが、うまくプログラムで表現できません。よろしくお願いします
0923デフォルトの名無しさん
2007/10/23(火) 02:50:460924デフォルトの名無しさん
2007/10/23(火) 02:56:59findword(string fname, char top, string longest){
fstream fp(fname.c_str(),ios::in);
getline(fp, st);
do{
n=st.find(top);
st=st.substr(n);
getline(fp, st);
} while(fp.eof());
0925デフォルトの名無しさん
2007/10/23(火) 03:58:21英単語は何で区切られてるの?
0926デフォルトの名無しさん
2007/10/23(火) 04:15:33>>854 と >>868 の処理速度を比べてみたが予想通りだった
何を野暮と思うかは人それぞれだから納得できる説明が欲しいな
0927907
2007/10/23(火) 07:28:450928デフォルトの名無しさん
2007/10/23(火) 07:43:32set使って重複無くして、一番長い単語は線形検索かな…。
0929デフォルトの名無しさん
2007/10/23(火) 08:19:03[2] 問題文(含コード&リンク):関数 add1 は int型の値を引数として受け取り,その値に1を加えて表示する.
関数 add2 は int型の値を引数として受け取り,その値に1を加えた値を戻り値として返す.
関数 add3 は int型のアドレスを引数として受け取り,ポインタの指す値に1を加えて表示する.
[3] 環境
[3.1] OS: Windows
[3.2] コンパラver任意
[3.3] 言語: C
[4] 期限: 10月25日
[5] その他の制限:
0930デフォルトの名無しさん
2007/10/23(火) 08:21:07#include <stdlib.h>
void add1(int i);
int add2(int i);
void add3(int *p);
int main(void)
{
int n;
printf("Input integer: ");
scanf("%d", &n);
printf("Original: %d \n", n);
???????;
printf("After Add1: %d \n", n);
printf("Add2: %d \n", ???????); /* nを適用した関数add2 の値を表示する */
printf("After Add2: %d \n", n);
???????; 関数add3 に nを適用する
printf("After Add3: %d \n", n);
return 0;
}void add1(int i) {
???????
}
int add2(int i) {
???????}
void add3(int *p) {
???????
}
よかったら????の部分埋めてください
見づらいってとこはスルーしてください
0931デフォルトの名無しさん
2007/10/23(火) 08:26:53add2(n)
add3(&n)
printf("%d", i+1);
return i + 1;
*p += 1;
0932デフォルトの名無しさん
2007/10/23(火) 08:32:120933デフォルトの名無しさん
2007/10/23(火) 08:44:35関数add3 に nを適用する をコメントアウトし忘れている…提出前に訂正忘れずに。
0934デフォルトの名無しさん
2007/10/23(火) 08:47:010935デフォルトの名無しさん
2007/10/23(火) 11:04:46どうせネタなんだからシンプルな方でいいっしょ。だから、野暮。
# 実用性? どうせスレ違いなんだからどうでもいいよw
0936デフォルトの名無しさん
2007/10/23(火) 11:28:11解答ありがとうございます。
どのような動作を行うプログラムか答えよ.
また,以下のプログラムをもとに,コマンドラインから与えられた引数を文字列と見て,各引数の出現する順番はそのままで,文字の並びを左右逆にして表示するプログラムを作り,実行結果を示せ.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
char *c;
printf("argc=%d\n", argc);
for (i = 1; i < argc; i++) {
c = argv[i];
while (*c != '\0') {
putchar(*c++);
}
putchar('\n');
}
return 0;
}
こちらの解答も面倒でなければお願いします
0937デフォルトの名無しさん
2007/10/23(火) 11:36:55int main(int argc, char *argv[])
{
int i;
char *c;
printf("argc=%d\n", argc);
for(i=1; i<argc; i++) {
c = argv[i];
while(*c!='\0') c++;
while(c!=argv[i]) putchar(*--c);
putchar('\n');
}
return 0;
}
0938デフォルトの名無しさん
2007/10/23(火) 11:38:07ほいさ
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
char *c,*d;
for (i = 1; i < argc; i++) {
c = d = argv[i];
while (*d != '\0');
while (d-- != c){
putchar(*d);
}
putchar('\n');
}
return 0;
}
0939デフォルトの名無しさん
2007/10/23(火) 11:39:050941デフォルトの名無しさん
2007/10/23(火) 15:28:34[2] 問題文(含コード&リンク):2頂点の名前を与えるとその頂点間の距離を求めるプログラムを
作成せよ。なお頂点の座標はテキスト文章で以下のように与えられる。
1 23 32
2 12 23
3 45 24
4 32 19
5 18 17
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン:cc
[3.3] 言語:C
[4] 期限:2007年10月24日
[5] その他の制限:ファイル操作ができるようになるのが目的らしいです。
テキストファイルは一列目が頂点の名前、2列目はx座標、3列目はy座標です。
よろしくお願いします。
0942デフォルトの名無しさん
2007/10/23(火) 17:07:14あってるかどうか手計算で確認してや〜
#include <stdio.h>
#include <math.h>
#define N 5
typedef struct{
int num;
int x;
int y;
}Point;
double Length(Point p1,Point p2);
int main()
{
Point P[N];
FILE *fp = fopen("data.txt","r");
int i,p1,p2;
for(i = 0; i < N; i++)
fscanf(fp,"%d%d%d",&P[i].num,&P[i].x,&P[i].y);
for(i = 0; i < N; i++)
printf("%d %d %d \n",P[i].num,P[i].x,P[i].y);
puts("1〜5番の、どの点の距離を測りますか(コンマをはさんで番号入力");
scanf("%d,%d",&p1,&p2);
printf("長さは%.3lfです \n",Length(P[p1-1],P[p2-1]));
return 0;
}
double Length(Point p1,Point p2)
{
int divx = p1.x - p2.x;
int divy = p1.y - p2.y;
return sqrt(divx*divx + divy*divy);
}
0944デフォルトの名無しさん
2007/10/23(火) 18:35:22[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5120.txt
[3] 環境
[3.1] OS: XP VISTA
[3.2] visual studio 2005
[3.3] 言語: C++
[4] 期限: 10/25 12:00まで
[5] その他の制限: 特になし
よろしくお願いします。
0945デフォルトの名無しさん
2007/10/23(火) 18:44:50strcpy(配列,???);
の???には何を入れればいいのでしょうか?
0946デフォルトの名無しさん
2007/10/23(火) 18:53:120947デフォルトの名無しさん
2007/10/23(火) 18:59:27文字列の入力されているtxtファイル名ってことですか?
0948デフォルトの名無しさん
2007/10/23(火) 19:34:07txtファイルから読み込みたいんならstrcpyじゃなくてfgetsとかを使うべし
0949デフォルトの名無しさん
2007/10/23(火) 19:44:07fgetsで文字列をバッファに格納した後、
strcpy(配列,バッファ);
とかですか?
0950デフォルトの名無しさん
2007/10/23(火) 20:05:200951デフォルトの名無しさん
2007/10/23(火) 20:13:28fgetsで直接配列に入れればいいじゃんか
0952デフォルトの名無しさん
2007/10/23(火) 20:25:38[2] 問題文(含コード&リンク):
(1)モンテカルロ法を用いて、y=x^2,y=0,x=1で囲まれる領域の面積を求めよ。
(2)モンテカルロ法で、ある進行方向に人が1歩ずつ前進するとき、右、または左に
それぞれ1/2の確率でよろけるものとする。
10歩前進した後、中央にいる確率を10回、100回、1000回…100000回の時、
それぞれ表示させる。
[3] 環境
[3.1] OS Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:10/24の12時
[5] その他の制限:(1)(2)において発生させる乱数の数を10、100、1000…100000
と増やし、それぞれの場合における結果を画面に表示させること。
よろしくお願いします
0953さとみ
2007/10/23(火) 20:32:45[3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン: [3.3] 言語: C言語 [4] 期限: 10/24[5] その他の制限:なし
#include <stdio.h>#include <stdlib.h>
struct node{ int data;
struct node *next;};
struct node *head;
void add_head(int x)
{ struct node *p;
p = (struct node *)malloc(sizeof(struct node));
p->data = x; p->next = head; head = p;}
void print_list(struct node *q)
{ struct node *p;
printf("list\n");
for(p = q;p != NULL;p = p->next){
printf("%d\n"p->data); }}
main(int argc, char *argv[])
{ int i, val, n;
head = NULL;
n = atoi(argv[1]);
for(i = 0;i < n; i++){
scanf("%d",&val);
add_head(val); }
print_list(head);
return(0);}
ここまでやってみましたが二箇所にエラーが発生しました、間違えたところ教えてください。
0954デフォルトの名無しさん
2007/10/23(火) 20:41:36#include <stdlib.h>
#include <string.h>
struct node{ int data;
struct node *next;};
struct node *head;
void add_head(int x)
{ struct node *p;
p = (struct node *)malloc(sizeof(struct node));
p->data = x; p->next = head; head = p;}
void print_list(struct node *q)
{ struct node *p;
printf("list\n");
for(p = q;p != NULL;p = p->next){
printf("%d\n",p->data); }}
main(int argc, char *argv[])
{ int i, val, n;
head = NULL;
n = atoi(argv[1]);
for(i = 0;i < n; i++){
scanf("%d",&val);
add_head(val); }
print_list(head);
return(0);}
0955デフォルトの名無しさん
2007/10/23(火) 20:54:08http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5122.txt
0956デフォルトの名無しさん
2007/10/23(火) 20:56:09(2)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, j, k;
srand(time(NULL));
for(i=10; i<=100000; i*=10) {
int cnt = 0;
for(j=0; j<i; j++) {
int pos = 0;
for(k=0; k<10; k++) pos += rand() % 2 ? 1 : -1;
if(pos==0) cnt++;
}
printf("%6d回の試行で中央にいる確率は%f\n", i, (double)cnt / i);
}
return 0;
}
0957デフォルトの名無しさん
2007/10/23(火) 20:59:02(1)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
double f(double x)
{ return x*x; };
int main(void){
double sum; unsigned long i;
srand((unsigned int)time(0));
for(i = 0;i<1000000;++i) sum += f((double)rand()/RAND_MAX);
printf("Answer:%f",sum/1000000);
return 0;
}
0958デフォルトの名無しさん
2007/10/23(火) 21:06:13最近のコンパイラならエラーメッセージと行が出るからそれ晒せ。
あと、いくら行が多いって怒られたからって無理にツメツメで書くぐらいならうpロダにtxtファイルで上げろ。
0959955
2007/10/23(火) 21:08:26http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5123.txt
>>955は題意を満たしていなかった(各クラスのメンバ変数の入出力関数が
おかしな事になっていた)ので作り直した。
0960952
2007/10/23(火) 21:17:07[1] 授業単元:プログラミング2
[2] 問題文(含コード&リンク):
(追)モンテカルロ法を用いて、半径1の球の体積を求めよ。
[3] 環境
[3.1] OS Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:10/24の12時
[5] その他の制限;発生させる乱数の数を10、100、1000…100000
と増やし、それぞれの場合における結果を画面に表示させること。
度々すいませんがよろしくお願いします
956&957さんありがとうございました。
0961デフォルトの名無しさん
2007/10/23(火) 21:26:20Win98SE Pen�V1G BCC32 5.5.1で動作確認した。
自分で間違い探し…。ほんと基本的なとこだよ
訂正前:整形のみ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5125.txt
訂正後
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5126.txt
0962デフォルトの名無しさん
2007/10/23(火) 21:32:54#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000000
int main(void)
{
double x, y, z;
int i, cnt = 0;
srand(time(NULL));
for(i=0; i<N; i++) {
x = (double)rand() / RAND_MAX;
y = (double)rand() / RAND_MAX;
z = (double)rand() / RAND_MAX;
if(x * x + y * y + z * z <= 1) cnt++;
}
printf("%f\n", (double)cnt / N * 8);
return 0;
}
0963デフォルトの名無しさん
2007/10/23(火) 21:38:52はい
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5127.txt
0964952
2007/10/23(火) 21:49:29自分が作ったのと比べて見てみます。
ありがとうございました。
0965961
2007/10/23(火) 21:58:55そういやエラー2つって書いてあったが、エラー1警告1なんじゃ?
もしエラーが2つなら全角スペースがあったはず…
自分は整形時に置換しちゃったから…
0966956
2007/10/23(火) 22:02:38for(k=0; k<10; k++) pos += rand() % 2 ? 1 : -1;
だと、環境にもよるだろうけど、予想以上に実際の確率よりずれるな。
for(k=0; k<10; k++) pos += (int)(rand() / (RAND_MAX + 1.0) * 2) ? 1 : -1;
に修正しといて
0967デフォルトの名無しさん
2007/10/23(火) 22:09:19for(i=0;i<n;i++){
do{
ran=rand();
ranm=RAND_MAX;
x=ran/ranm;
}while(x==1.0);
node1[i]=(double)(-log(1.0-x)/lambda1);
}
for(i=0;i<n;i++){
do{
ran=rand();
ranm=RAND_MAX;
x=ran/ranm;
}while(x==1.0);
node2[i]=(double)(-log(1.0-x)/lambda2);
0968デフォルトの名無しさん
2007/10/23(火) 22:09:50xcnt=0;
dcnt=0;
for(i=0;i<n;i++){
cnt[i]=0;
for(j=0;j<n;j++){
if(i!=j){
if((node1[i]+node2[j]>=theta && node1[j]+node2[i]>=theta) && i<j){
cnt[i]++;
dcnt++;
}
}
}
if(cnt[i]==0){
xcnt++;
}
}
}while(xcnt>10 && dcnt>=3800 && dcnt<=4200);
0969デフォルトの名無しさん
2007/10/23(火) 22:11:31ある条件のネットワークに沿ったら
do〜whileから抜け出すようにしたいのですが、
うまくループから抜け出してくれません
xcntってやつの条件なら上手く抜けることは確認できました
&&dcntってやつを付けたら、さっさと抜けてしまいます
なにか修正点があるなら御願いします
0970デフォルトの名無しさん
2007/10/23(火) 22:15:07プログラム長いんだったら 1 のアップローダー使おうよ
0971デフォルトの名無しさん
2007/10/23(火) 22:23:480972sage
2007/10/23(火) 22:27:23[1] 授業単元:C++プログラミング
[2] 問題文(含コード&リンク):
文字列配列クラスと int 型配列クラスを定義し、2 つのクラスを基本クラスとして新たなクラスを定義してください。
定義したクラスに実装すべきメンバー関数は以下のとおりです。
文字列と数値をペアで登録できる。
数値 n (n>=0) を添字として、int 型配列の n 番目の要素を返す。
文字列 s を添字として、int 型配列の n 番目の要素を返す。
n は文字列配列で s に等しい要素のインデックスとする。
ただし、配列のサイズは 10 固定とし、それ以上の要素は登録できないものとします。
また、文字列の比較に strcmp()、文字列の複製に strdup()、文字列の解放に free() を使って構いません。
エラー処理は特に規定しません。
[3] 環境
[3.1] OS Windows XP
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限:10/24の12時
[5] なし
0973デフォルトの名無しさん
2007/10/23(火) 22:32:02dcnt++でしか弄ってないためforが何回まわるかで値が決まりますが
i<jの条件からおおよそn回まわるとn*n/2回インクリメントされます。
dcnt>=3800 && dcnt<=4200 から n の範囲を逆算すると
おおよそ 88<=n<=91 …明らかにきnの範囲厳しくないか?
結論 dcnt++ の場所間違えてるか dcnt のチェック値がおかしい と思う
0974デフォルトの名無しさん
2007/10/23(火) 22:42:32…あれこのソース、コンパイラ通るの?
>do{
> ran=rand();
> ranm=RAND_MAX;
> x=ran/ranm;
> }while(x==1.0);
>node1[i]=(double)(-log(1.0-x)/lambda1);
x==1.0だからnode1[i]、node2[i]って全部NaN?
エラーはでないか…ハハハ……
0975デフォルトの名無しさん
2007/10/23(火) 22:44:48問題文が意味不明。
[2]問題文:以下のプログラムをのフローチャートを書け。
また、動作を説明し、変数i, j, kの値をトレースせよ。
#include <stdio.h>
int problem3(void)
{
int i,j,k;
int a[3][4]={{1,2,3,4}, {5,6,7,8}, {9,0,1,2}};
int b[4][3]={{1,2,3}, {4,5,6}, {7,8,9}, {0,1,2}};
int c[3][3];
for(i=0;i<3;i++){
for(j=0;j<3;j++){
c[i][j]=0;
for(k=0;k<4;k++){
c[i][j]+=a[i][k]*b[k][j];
}
}
}
/* output array */
for(i=0;i<3;i++){
printf("c[%d][0,1,2]:(",i);
for(j=0;j<3;j++){
printf("%d,", c[i][j]);
}
printf(")\n");
}
return 0;
}
行数制限にかかるので、環境以下は次に…
0977デフォルトの名無しさん
2007/10/23(火) 22:55:33[3.1] OS: Windows Vista
[3.2] コンパイラ名とバージョン: bcc
[3.3] 言語: C++ …のはずです…
[4] 期限: 07年10月24日03:00まで
[5] その他の制限: 特になし
0978デフォルトの名無しさん
2007/10/23(火) 22:58:35明らかにC言語だよね
いや明らかでもないか
0979デフォルトの名無しさん
2007/10/23(火) 23:00:25すいませんorz
0980デフォルトの名無しさん
2007/10/23(火) 23:11:47フローチャートもどき作成…てかtextでフローチャートかけるかメンドイ。
ソース横に流れを罫線で書いてprintfとかの処理あるところには□置いたから
これ見ながらWordなりExcelなりで書いてくれ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5128.txt
0981デフォルトの名無しさん
2007/10/23(火) 23:13:31(i=0〜2まで繰り返す)
(j=0〜2まで繰り返す)
c[i][j] = 0.0 で 初期化
(k=0〜3まで繰り返す)
c[i][j]+=a[i][k] * b[k][j]
(kのループ終了)
(jのループ終了)
(iのループ終了)
(i=0〜3まで繰り返す)
(j=0〜3まで繰り返す)
c[i][j]を表示
(jのループ終了)
(iのループ終了)
図はさすがにかけないが
______________
/i=0〜2 \
| ________________| ループはこうやって書く。んだっけ?
0982デフォルトの名無しさん
2007/10/23(火) 23:14:350983誰か次スレ立てて
2007/10/23(火) 23:21:10【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはやめましょう。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[1] 授業単元:
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
【アップローダー==ラウンジ】(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
【C 関数検索 man on WWW】 http://www.linux.or.jp/JM/index.html
【過去ログ検索】 http://chomework.sakura.ne.jp/
【wiki】 http://www23.atwiki.jp/homework/
【前スレ】
C/C++の宿題を片付けます 97代目
http://pc11.2ch.net/test/read.cgi/tech/1191937213/
0984デフォルトの名無しさん
2007/10/23(火) 23:21:34まあ、授業でやってない可能性もあるわけだがw
んで、このプログラムは要するに行列の掛け算をしている。
i j k c[i][j]
0 0 0 +1*1
0 0 1 +2*4
0 0 2 +3*7
0 0 3 +4*0 # c[0][0] = 1+8+21+0 = 30
0 1 0 +5*2
0 1 1 +6*5
0 1 2 +7*8
0 1 3 +8*1 # c[0][1] = 10+30+57+8 = 105
あとは自分で頑張れ。
0985デフォルトの名無しさん
2007/10/23(火) 23:22:467*8=57 orz
0986デフォルトの名無しさん
2007/10/23(火) 23:41:48時間過ぎたけど。#includeの改行は自分で展開してちょうだい。
#include <algorithm> #include <cctype> #include <fstream> #include <iostream> #include <iterator> #include <set> #include <string>
std::set<std::string> words;
int in_length(const std::string& x, const std::string& y) {return x.length() < y.length();}
int findword(const std::string& fname, char top, std::string& longest) {
std::ifstream input(fname.c_str());
const char delimiters[] = " \t,.;:\"?!()[]-";
std::string line;
while (getline(input, line)) {
std::string::size_type start_index = line.find_first_not_of(delimiters);
while (start_index != std::string::npos) {
std::string::size_type end_index = line.find_first_of(delimiters, start_index);
if (end_index == std::string::npos) end_index = line.length();
if (end_index - start_index != 0 && std::tolower(line[start_index]) == std::tolower(top)) words.insert(line.substr(start_index, end_index - start_index));
start_index = line.find_first_not_of(delimiters, end_index);
}
}
longest = *std::max_element(words.begin(), words.end(), in_length);
return words.size();
}
int main() {
std::string fname, longest; int count; char top;
std::cout << "Input file-->"; std::cin >> fname; std::cout << "first letter-->"; std::cin >> top;
count = findword(fname, top, longest);
std::copy(words.begin(), words.end(), std::ostream_iterator<std::string>(std::cout, " "));
std::cout<< "\n" << count << " words found and longest word --> " << longest << std::endl;
}
0987デフォルトの名無しさん
2007/10/23(火) 23:49:29http://pc11.2ch.net/test/read.cgi/tech/1193150915/
0988デフォルトの名無しさん
2007/10/23(火) 23:52:00このスレタイは…
0989987
2007/10/23(火) 23:52:05立て直したほうがいい
0990デフォルトの名無しさん
2007/10/24(水) 00:01:413回読み直したが理解できない
多分、文章で書いてくれても分からないので動作例を書いて下さい
#超解釈すると劣化 map を実装せよってことかな
class homework{
private:
int number[10];
string key[10];
int membernum;
public:
int add(string key, int number);
int get(int number);
int get(string key);
};
0991デフォルトの名無しさん
2007/10/24(水) 00:05:34[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5129.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2007年10月14日22:00まで
[5] その他の制限: なし
0992デフォルトの名無しさん
2007/10/24(水) 00:06:21忘れてました・・・
どうかよろしくお願いします。
0993デフォルトの名無しさん
2007/10/24(水) 00:14:04しかもキーと値は別々の配列に格納。
その配列クラスも手作りで、何故か継承して使うように
書いてあるように見える…。
普通はprivateメンバじゃないかと自分は思う…
どうなの?>>972
0994デフォルトの名無しさん
2007/10/24(水) 00:14:11class StringArray {}
class IntArray {}
class Map : public StringArray, IntArray {
void append(string, int);
int operator [] (int n);
int operator [] (string&);
}
stringじゃなくてcharかな?
0995デフォルトの名無しさん
2007/10/24(水) 00:16:19たびたびすいません
[4] 期限: 2007年10月24日22:00まで
でした。
0996デフォルトの名無しさん
2007/10/24(水) 00:17:31課題文にでてくる関数名を見る限り
stringじゃなくてchar*を使って欲しそうに見える…。
標準C関数…C++なのに…まぁchar*で文字列扱う時はstlのalgorithmより楽だが
0997デフォルトの名無しさん
2007/10/24(水) 00:29:200998デフォルトの名無しさん
2007/10/24(水) 00:30:300999デフォルトの名無しさん
2007/10/24(水) 00:31:301000デフォルトの名無しさん
2007/10/24(水) 00:31:5810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。