C/C++の宿題を片付けます 104代目

このエントリーをはてなブックマークに追加
929デフォルトの名無しさん:2008/04/07(月) 23:19:59
>>890
ざっくり作ってみた。
当方マカなんで拡張子やらの取り扱いがオカシイやもしれませんが悪しからず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6204.txt
930890:2008/04/08(火) 02:37:57
>>929
ありがとうございます。
参考にさせて頂きます。
931デフォルトの名無しさん:2008/04/08(火) 03:08:22
>>890

$ cat xmkfs.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; system("touch .fs"); sprintf(commnd, "tar --file %s --create .fs", argv[1]); system(commnd); system("rm .fs"); }

$ cat xcpin.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --append %s", argv[1], argv[2]); system(commnd); }

$ cat xdir.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --list | grep --invert-match --line-regexp \\.fs", argv[1]); system(commnd); }

$ cat xmore.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --get %s --to-stdout", argv[1], argv[2]); system(commnd); }

$ cat xcpout.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --get %s", argv[1], argv[2]); system(commnd); }
932デフォルトの名無しさん:2008/04/08(火) 04:01:10
>>931 これでええやん

$ cat xdir.c
#include <stdio.h>
void main(int argc, char *argv[]) { char commnd[256]; sprintf(commnd, "tar --file %s --list --exclude .fs", argv[1]); system(commnd); }
933デフォルトの名無しさん:2008/04/08(火) 19:10:25
チートwww
934デフォルトの名無しさん:2008/04/09(水) 01:01:37
1] 授業単元:プログラミング
[2] 問題文:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6207.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: CPad for Borland
 [3.3] 言語:C
[4] 期限:2008年4月10日提出
[5] その他の制限:getchar,fgets関数可 scanf,gets関数不可

Aの方は作り変えの作業もあり、更に難しいかと思いますが、
@、A共々よろしくお願いします。
935デフォルトの名無しさん:2008/04/09(水) 02:46:58
>>932
> void main(int argc, char *argv[])
はずかしい間違いなのですが……。
936デフォルトの名無しさん:2008/04/09(水) 02:48:25
>>934 (1)
後出しのエラー仕様を>>913に追加したらええやん
if (n < 0 || n > 255) { puts("エラー"); exit(0); }
if (c < '0' || c > '9') { puts("エラー"); exit(0); }
if (n[0] == '\0') { puts("エラー"); exit(0); }
937デフォルトの名無しさん:2008/04/09(水) 02:52:37
mainから出るときはきちんとintを返しましょう
938デフォルトの名無しさん:2008/04/09(水) 03:12:43
>>935
>>936
$ gcc -o xdir xdir.c
xdir.c: In function `main':
xdir.c:2: warning: return type of 'main' is not `int'
何か問題あるの?
939デフォルトの名無しさん:2008/04/09(水) 05:55:04
間違いかどうかは一概には言えないが、ISO準拠だとmainはint型の値を返すのが
標準的とされている。くどいようだが、一概には言えないのは、各個人でISO準拠ではない
スタイルでも問題のない環境が存在するから。とりあえず、幅広い環境で通用する
int main(void) あるいはそこに書かれているスタイルの引数の変数を宣言するのが望ましい。
というのは、1年以上前にこのスレで五月蝿いくらいに議論されたことがある。

さてと、久々に帰ってきた俺が再びこのスレでレスしちゃうよぉ〜。あれから腕を磨いた。
そうだな、スーパーサイヤ人になったとでも言おうか。界王拳が使えるだけのときと比べて
かなりレベルアップしたぜ?やるかい?うほっ?あっーー!
940デフォルトの名無しさん:2008/04/09(水) 06:21:05
>>934
ちょっと作ってみた。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6208.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6209.c
Aはもとがクソに見えたので、もとから少し変えた。
941デフォルトの名無しさん:2008/04/09(水) 13:37:13
>>939
二度と来んなw
942940:2008/04/09(水) 15:50:05
>>940
チョンボしてたんでちょっと修正。
× if (month < 0 || 12 < month) {
○ if (month < 1 || 12 < month) {

他にも変なとこあるかもしんない。そんときはごめん。
943デフォルトの名無しさん:2008/04/11(金) 01:42:06
[1] 授業単元:C言語プログラミング基礎実習
[2] 問題文(含コード&リンク):if文を用いて上半分が赤、下半分が青の正方形を描く
              プログラミングを作れ。(上半分なら赤、そうでなければ
              青、という命令をif文で書く。)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: わかりません;;
 [3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 4月12日までにお願いします。
[5] その他の制限:for文とif文で作ってください。
         

ちなみに(10,10)〜(29,29)の範囲の正方形(赤)を描くプログラムは下の通りです。

int i,j;

for(i=10,j=10;i++)
for(j=10;j<30;j++)

myDC.SetPixel(i,j,RGB(255,0,0));

説明が分かりにくいかもしれませんがお願いします。
944デフォルトの名無しさん:2008/04/11(金) 01:50:56
>>943
サンプルがどう見てもC++ですが……
つーか、有り得ない間違いがあるし。
945940:2008/04/11(金) 01:56:13
(0,0)〜(9,9)の範囲だとこんな感じか。

int i, j;
for (i = 0; i < 10; ++i) {
for (j = 0; j < 10; ++j) {
if (i < 10 / 2) {
myDC.SetPixel(i, j, RGB(255, 0, 0));
} else {
myDC.SetPixel(i, j, RGB(0, 0, 255));
}
}
}
946940:2008/04/11(金) 02:09:06
>>944
別にCでも問題ないでしょ。

struct test_struct {
void (*SetPixel)(int, int, int);
};

static void test_func(int i, int j, int rgb)
{
/* ... */
}

int main(int argc, char *argv[])
{
struct test_struct myDC;

myDC.SetPixel = test_func;

myDC.SetPixel(0, 0, 0);

return 0;
}
947デフォルトの名無しさん:2008/04/11(金) 02:22:24
>>945
そんな感じで(10,10)〜(29,29)の範囲でしていただけないでしょうか?
948940:2008/04/11(金) 02:44:34
>>947
int i, j;
for (i = 10; i < 30; ++i) {
for (j = 10; j < 30; ++j) {
if (i < 20) {
myDC.SetPixel(i, j, RGB(255, 0, 0));
} else {
myDC.SetPixel(i, j, RGB(0, 0, 255));
}
}
}
949デフォルトの名無しさん:2008/04/11(金) 03:45:57
なにこのあつかましさ
950890:2008/04/11(金) 14:12:20
>>929 >>931 >>932 前回はありがとうございました。
更に質問なのですが、アーカイブファイルに取り込んだファイルの情報に最終修正時刻を追加したいのですが、どうすれば良いでしょうか?
最終修正時刻の方は何とか自分でコードが書けたのですが、それを>>929が作ってくれたプログラムに追加が上手く行っておりません。
struct stat st;
struct tm* t;
char strtime[256];
int tlength;

stat(argv[3], &st);
t = localtime(&st.st_mtime);
strftime(strtime, 256, "%b %d %H:%M %y", t); //format time
tlength = strlen(strtime);
fwrite(&tlength, sizeof(int), 1, fout);
fwrite(strtime, sizeof(char) * tlength, 1, fout);

時間情報の追加はこのような形で行えばいいでしょうか?
また、[i] ファイル名, サイズ、日にちの順番でアーカイブの中身を表示をするにはどうすればいいでしょうか?

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6218.c
951940:2008/04/11(金) 16:26:17
>>950
一応作ってみた。
動かしてないんで期待通りか分からない。
修正箇所の目安程度に見て。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6219.c

ところで、この仕様ってそれぞれ別コマンド?
あとxcpoutの場合、解凍した後アーカイブ内にもとファイルが残ったままになるでOK?
952デフォルトの名無しさん:2008/04/11(金) 20:04:08
>>950
基本的には書き込むデータを増やしたなら読み込み時にも対応する位置に対応する処理を追加すればよいです。
すでに951(940)氏が出して下さっているので不要かもですが、
バグ修正含めちょこちょこ変更してみたので一応うpしときます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6221.txt
953934:2008/04/12(土) 13:14:31
>>936
解決しました。ありがとうございますー

>>940
わざわざありがとうございます。ですが、元を使わなくていけなかったので;
あと、@がコンパイルできたのですが、入力結果がでませんでした;
954デフォルトの名無しさん:2008/04/12(土) 13:24:39
[1] 授業単元:Cプログラミング言語
[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6222.txt
[3] 環境
 [3.1] OS: (Windows)
 [3.2] コンパイラ名とバージョン:CPad for Borland
 [3.3] 言語: (C)
[4] 期限:4/14まで
[5] その他の制限:入力はgetcharで行う。

よろしくお願いしますm(_ _)m
あと、文章構成見にくかったら言ってください。
955936:2008/04/12(土) 13:38:54
>>953
おめ。3つ目のは以下の間違いだったので今更だけど訂正
if (s[0] == '\0') { puts("エラー"); exit(0); }

あと、2進数変換は>>940氏のアルゴリズムのほうがエレガントなので
余力があるなら書き換えたほうが良さそう
956940:2008/04/12(土) 14:17:59
>>953
問題文に「@0〜255の整数を入力し、数値に変換して unsigned char型配列に格納する。」
とあるので、0〜255を入力し終えるまで何も出力されないです。
そこら辺はソース見てもらった方がいいと思います。
957>954@:2008/04/12(土) 15:30:46
#include <stdio.h>
int main(void)
{
int dst=0;
int cnt;
for(cnt=0; ; ++cnt){
char in = getchar();
if(in=='0' || in=='1'){
if(cnt<8)
dst = dst*2 + (in - '0');
}else{
if(in=='\n'){
if(cnt>0)
break;
else
printf("エラー\n再入力せよ\n");
}
dst=0;
cnt=-1;
}
}
printf("%d\n", dst);
return 0;
}

元の仕様には明記されていないんだが、エラー文字があった場合はエラーメッセージが何度も表示されないようにしてみた。
958940:2008/04/12(土) 16:38:04
>>954
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6224.c
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6225.c
Bは「float型に格納可能な範囲」の判定をどうすればいいのか分からなかったとです。
どうすればいいんですかね?
959デフォルトの名無しさん:2008/04/12(土) 16:51:44
[5] その他の制限:入力はgetcharで行う。
960940:2008/04/12(土) 17:04:00
>>959
すんません、よく読んでませんでした。
961デフォルトの名無しさん:2008/04/12(土) 19:59:56
>>958

> float 型に格納可能な範囲

FLT_MIN FLT_MAX
ttp://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
962デフォルトの名無しさん:2008/04/12(土) 20:19:45
>>954
一応できたけど、何で動いてるのかよくわからない。(笑
とくに3個目があってるかよくわからない。誤差を許容すると言うことなので誤差出まくりだけど大丈夫だよね。
提出するなら、一回検算してください。修正はご自分で!

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6230.zip
963940:2008/04/12(土) 21:16:42
>>954
とりあえずfloatの範囲を有効桁数7桁と、小数点以下38桁までならゼロが連続してOKって感じで作ってみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6228.c

ゼロの入力に関して仕様がよく分からないところがあります。
今のところ 0、0.0、.0、0.、. でゼロが入力できます。

>>961
floatの32ビットをちゃんと意識して、floatで扱える範囲を考えないとダメっぽいですね。
964940:2008/04/12(土) 22:09:30
>>954
>>963は全然違いますね。
無視してください。
965デフォルトの名無しさん:2008/04/12(土) 22:48:55
全然違いますね、わかります。
966953,954:2008/04/12(土) 22:54:22
>>936
了解です。わざわざどもですー。
>>940、958様
説明が下手で申し訳ありません。つまり入力した数が255なら、
こんな感じで表示するようにしたかったのです;
『ビット処理前 dec:255 hex:ff bin:11111111 〜』

こっちのほうはすいません、ちょっとよく判らないです;
あと、Aは問題なく動いてると思うのですが、0のとき何もおきなかったですー。

>>957
問題なく動いてます。ありがとうございますー。

>>962
ツッコめるLvならいいのですが、修正できればここには来ないです;;
とりあえず動いていて、気になったのは03を例にすれば、
警告 W8068 main.c 34: 比較において定数が範囲外(関数 main )
警告 W8004 main.c 30: 'Pow' に代入した値は使われていない(関数 main )
警告 W8004 main.c 30: 'Answer' に代入した値は使われていない(関数 main )
警告 W8004 main.c 29: 'ch' に代入した値は使われていない(関数 main )
警告 W8004 main.c 28: 'Point' に代入した値は使われていない(関数 main )
警告 W8004 main.c 28: 'L' に代入した値は使われていない(関数 main )
警告 W8004 main.c 28: 'i' に代入した値は使われていない(関数 main )
と、こんな感じで警告文が出るのですが問題ないでしょうか?
967デフォルトの名無しさん:2008/04/12(土) 23:54:32
>>966

(3) だけ解いてみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6232.txt

よかったらどうぞ
gcc で確認したから警告でるかもしれないけどw
968962:2008/04/13(日) 01:56:58
ボーランドのコンパイラって、初期化に警告だすの?
初期化時の値は大体つかってない。途中でかわってるはず。習慣なんでね。
一点だけ、EOFが現状-1だと気づかなくって、確認漏れなんだけど、
unsigned charでは比較できない。ので、intに変更してくだちい。
それだけかな?何で動いてるのかよくわかってないもんでね。。。
うごいててよかったよ。あっはっは〜。
969966 ◆TIBETlaTO. :2008/04/13(日) 11:19:15
>>967
どうもありがとうございます。
970966:2008/04/13(日) 16:09:28
知らない人がお礼してますが、966のものです。

>>967
警告 W8065 ParseFlt.c 84: プロトタイプ宣言のない関数 'parse_input' の呼び出し(関数 main )
とでて、数字を入力するとerror3が出たり、英数を入力すると、入力のループになってるようです;;
>>962
変えて見たのですが、iとhが残ってますね。でも、動いてよかったですー。

そして少々特殊?な問題なのですが、
こちらのフローチャートを見てプログラムしなさいという問題があったので、
できれば今日中でよろしくお願いします。
ワードもエクセルもないので、オープンオフィスで申し訳ないのですが;

[1] 授業単元:プログラミング
[2] 問題文:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6234.zip
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: CPad for Borland
 [3.3] 言語:C
[4] 期限:2008年4月14日提出
[5] その他の制限:getcharで入力
971967:2008/04/13(日) 17:48:29
972デフォルトの名無しさん:2008/04/14(月) 00:55:10
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6238.c
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):ttp://www.pref.fukushima.jp/pc-concours/2008/03/03_reidai.html(2006本戦の問5です)
[3] 環境
 [3.1] OS:WindowsXP
 [3.2] コンパイラ名とバージョン:VC++
 [3.3] 言語:C++
[4] 期限:4月16日
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6238.c
ここまであるのですが、0が入力された場合
0
0
0
0
と出力されるのではなく、プログラムを終了するようにしたいのですが、どう追加すればいいのでしょうか?
973デフォルトの名無しさん:2008/04/14(月) 01:12:39
do{
scanf("%d", &s);
}while(s<0 || s>=10000);
if ( s == 0 ) { return 0; }
974デフォルトの名無しさん:2008/04/14(月) 01:32:49
>>972
なんかめんどくさいことやりすぎじゃね?
#include <stdio.h>
int f( int s_ ) { return ( ( s_ * s_ ) % 1000000 ) / 100; }
int main(){
int i,s;
do { scanf( "%d", &s ); } while ( s < 0 || s > 10000 );
if ( s == 0 )
return 0;
for ( i = 0; i < 10; ++i )
printf( "%d\n", ( s = f( s ) ) );
return 0;
}
975デフォルトの名無しさん:2008/04/14(月) 01:43:05
>>973
終了できました、ありがとうございます
976デフォルトの名無しさん:2008/04/14(月) 12:57:40
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define DATASIZE 10
#define RANDS 4
int main()
{
int s,rank=2,base;
int RandInt[DATASIZE] = {0};
int i,j;
char *RandStr;
puts("初期値(10000未満の正の整数");
scanf("%d",&s);
if( s == 0 )
return 0;
RandStr = malloc(sizeof(char)*((rank * RANDS) + 1));
s = (int)pow(s,rank);
for(i = 0; i < DATASIZE; i++){
sprintf(RandStr,"%0*d",rank * RANDS,s);
for(j = - (RANDS/2) ; j < (RANDS/2); j++){
RandInt[i] *= 10;
RandInt[i] += RandStr[(rank * RANDS)/2 + j] - '0';
}
s = RandInt[i];
s = (int)pow(s,rank);
}
for(i = 0; i < DATASIZE; i++)
printf("%d\n",RandInt[i]);
free(RandStr);
return 0;
}
977デフォルトの名無しさん:2008/04/14(月) 22:31:13
[1] 授業単元:プログラム
[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6244.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:visual studio 2003
 [3.3] 言語: C言語
[4] 期限:4月15日18:00(急ですいません)
[5] その他の制限:
前に(>>704)スタックやキューでやってもらった宿題の続きなのですが、
よろしくお願いします   orz
978デフォルトの名無しさん
>>977
ラベルと親の意味がわかりません