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

このエントリーをはてなブックマークに追加
887デフォルトの名無しさん
二人三脚練習のペアの組合わせを自動的にしたいんです…
しかし、わかりません… だれか詳しい方教えてください…

先輩が5人、後輩が12人います。必ず先輩と後輩でペアを組みます。
先輩5人が、後輩を交代させ1日6回練習し、後輩を養成します。
組み合わせを決める際、不平等にならないよう、できるだけ同じ回数練習に参加できるようにしたいのです。
もし、練習回数が少なくなってしまった後輩は、つぎの日の練習を多めにします。
さらに、日ごとに練習場所が異なり(平たん、登り、下り)、
異なる練習場所ごとにも平等の回数にしたいのです。

みなさん、教えてくださいよろしくお願いします…

ここでの注文です 
気軽に「こんなソフトあリませんか?」 Part.85 http://pc11.2ch.net/test/read.cgi/software/1206534091/431-
888デフォルトの名無しさん:2008/04/02(水) 00:41:11
>>887
スレ違いな宣伝スンナ
889デフォルトの名無しさん:2008/04/02(水) 13:16:54
>>886
Cの宿題じゃないね。
よってスレ違い。
890デフォルトの名無しさん:2008/04/05(土) 14:29:28
[1] 授業単元:オペレーションシステム
[2] 問題文(含コード&リンク):アーカイバユーティリティを作りなさい。
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:2008年4月12日
簡単なアーカイバユーティリティ(圧縮無し可)を作りたいのですが、何から始めた方がいいのか全く分かりません。
制限としては、ユーザーが『xmkfs ファイル名』とタイプしたらアーカイブファイルを作成して。
『xcpin アーカイブファイル名 コピーするファイル名』とタイプしたらアーカイブファイルの中にファイルをコピー。
『xdir アーカイブファイル名』とタイプしたらアーカイブファイルの中に入ってるファイル名を表示する。
『xmore アーカイブファイル名 ソースファイル名』とタイプしたらソースファイルの中身を表示する。
『xcpout アーカイブファイル名 ソースファイル名』 とタイプしたらソースファイルを解凍。
このようなプログラムを作りたいです。
助けて頂けるとありがたいです。
891デフォルトの名無しさん:2008/04/05(土) 14:50:22
>>890
まずはアーカイブファイルの構成を考えてみ
892デフォルトの名無しさん:2008/04/05(土) 20:11:42
[1] 授業単元:プログラミング
[2] 問題文:ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6194.txt
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン: CPad for Borland
 [3.3] 言語:C
[4] 期限:2008年4月7日提出
[5] その他の制限:getchar,fgets関数可 scanf,gets関数不可

C言語自体かじったこともなく、教科書見ても全然判らないです;
気づけば期限が今週迄で、自分の頭ではどこをどうすれば…という状態です。
期限が短すぎますが、手の空いてる方がいたら何卒よろしくお願いします;
(できれば、自分でも後からできるように簡単なプログラムで
お願いします…注文多くて申し訳ないです)
893デフォルトの名無しさん:2008/04/05(土) 20:20:12
>>892
>自分でも後からできるように簡単なプログラムでお願いします
無理。
894デフォルトの名無しさん:2008/04/05(土) 20:51:34
>>892
(1)。エラーチェックとかしてない。問題文に誤字があったけど適当に解釈した。
#include <stdio.h>
#include <limits.h>

int absolute(int n1, int n2)
{
return abs((n1 > n2) ? (n1 - n2) : (n2 - n1));
}

int getInt(const char * pszPrompt)
{
char sz[LINE_MAX];

printf("%s", pszPrompt);
fgets(sz, sizeof(sz), stdin);

/* ignore some digits */
sz[('-' == sz[0] ? 10 : 9)] = '¥0';

/* no error checking */
return atoi(sz);
}

int main(int argc, char * argv[])
{
int n1 = getInt("Integer 1:");
int n2 = getInt("Integer 2:");
printf("absolute difference of %d and %d is %d¥n",
n1, n2, absolute(n1, n2));
return 0;
}
895892:2008/04/05(土) 21:21:32
失礼しました、@の問題は、

@入力された2つの整数の差の絶対値を出力するプログラムを作成せよ。
 整数には負数を入力される場合も考慮する。
 ただし、入力される数値は、整数の場合最大8桁までを有効とし、9桁以降を無視する。
 負数の場合は、最大9桁までを有効とし、10桁目以降は無視する。
 また次のプロトタイプ宣言を持ち、変数n1とn2の差の絶対値を戻す関数を使用すること。
 【 int absolute(int n1,int n2); 】

誤字だらけで申し訳ないです;

>>894
コンパイルしてみたのですが、エラーで実行できませんでした;

他にも手伝ってくれる方がいましたらよろしくお願いします。
896デフォルトの名無しさん:2008/04/05(土) 21:42:03
>>895
>コンパイルしてみたのですが、エラーで実行できませんでした;
何歳のおこちゃまか知らないけど、どんなエラーがでたかくらい書けよ

#include <math.h>
#include <stdlib.h>
#define LINE_MAX 256
これを追加すればエラーは無くなるかもな
LINE_MAXの値は適当だけど
897デフォルトの名無しさん:2008/04/05(土) 21:42:16
>>892 >>1をなぜ読まない↓
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
898デフォルトの名無しさん:2008/04/05(土) 21:44:41
2番は返すと書いてるくせにvoidだから問題が矛盾してると教師に言っておけ。
899892:2008/04/05(土) 22:10:57
>>896様、>>897
失念してました、度々申し訳ないです。>>1読み直してきます;
そして、エラーについてですがちゃんと動くようになったのですが、

警告 W8057 prc08.c 42: パラメータ 'argc' は一度も使用されない(関数 main )
警告 W8057 prc08.c 42: パラメータ 'argv' は一度も使用されない(関数 main )

と出てきますが、問題ないでしょうか?
そして@にて、エラー仕様があったので追加させていただきます;
<エラー仕様>
「・整数以外が入力されたら、"整数以外"を表示し、終了。
 ・『−』のみ、または改行のみ入力されたら"-、又は改行のみ"を表示し、終了。」

自分焦りすぎですね…少し頭冷やしてきます。

>>898
よく判りませんが、力がついたら言っておきます;
900デフォルトの名無しさん:2008/04/05(土) 22:14:54
>>899
>警告 W8057 prc08.c 42: パラメータ 'argc' は一度も使用されない(関数 main )
>警告 W8057 prc08.c 42: パラメータ 'argv' は一度も使用されない(関数 main )
日本語がわからないのか?使用されないって書いてあるじゃないか
int main(void)にすれば警告は消える
901デフォルトの名無しさん:2008/04/06(日) 02:45:50
人に優しく
902デフォルトの名無しさん:2008/04/06(日) 02:48:38
>>898
矛盾していないよ
903デフォルトの名無しさん:2008/04/06(日) 02:59:20
>>892 (2) 
#include<stdio.h>
#include<stdlib.h>
void figure( int x, int y, int *p_add, int *p_sub) {*p_add = x + y; *p_sub = abs(x - y);}
int main() {
int x = 50, y = 60, add, sub;
figure(x, y, &add, &sub);
printf("和: %d 差:%d\n", add, sub);
return 0;
}
904デフォルトの名無しさん:2008/04/06(日) 03:37:02
>>892 (3)
#include <stdio.h>
void dump(int *p_data) { while (*p_data != 0) printf("%d\n", *p_data++); }
void main() { int data[] = {10, 20, 30, 0}; dump(data); }
905デフォルトの名無しさん:2008/04/06(日) 04:07:27
>>892 (4)
#include <stdio.h>
#define toupper(c) if (c >= 'a' && c <= 'z') c = c - 'a' + 'A';
void upper(char *p_data) { while (*p_data != '\0') { toupper(*p_data); p_data++; } }
void main() { char str[] = "apple"; upper(str); puts(str); }
906890:2008/04/06(日) 05:15:33
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6195.c
↑こういう形で始めていけばいいのでしょうか?
でも、この場合は元のファイルの情報などもアーカイブファイル先に追加出来るのでしょうか?
907デフォルトの名無しさん:2008/04/06(日) 07:30:17
if(argv[1] == NULL)
これはコマンドではなく、その後ろのパラメータ、あるいはオプションでは?
908デフォルトの名無しさん:2008/04/06(日) 07:39:24
>>906
そんな糞雛形作る前に、アーカイブファイルの仕様を決めないとダメ。
仕様っていうのは例えば次みたいに決める(これは適当)

アーカイブファイル =
 「各ファイルの情報」が順に並ぶ
 ファイル終端は EOF

各ファイルの情報 =
 ファイル名 (16 byte)
 ファイルサイズ (16進数, 8 byte)
 ファイルのデータ (ファイルサイズ分)

元のファイルの情報のうち,アーカイブに追加したいものは
ちゃんと仕様に取り込んでおかないといけない.
(上の例だと,大体 4 GB くらいまでの元ファイルのデータと,
 英数字 16 文字までのファイル名しか保存できない)

ファイル名を任意の長さにしたり,ファイルサイズを任意にしたりしたければ,
仕様の段階で頭を使ってやる必要がある.
また,最終更新日時とかを保存したければ,OS やファイルシステムを考えて,
それなりに何とかする必要がある.
仕様をうまく設計しないと、>>890 の要求は満たせないかもしれない。
909892:2008/04/06(日) 12:50:59
>>900
警告文消えました、ありがとうございます。

>>903,>>904,>>905
3つも同時にありがとうございますっ。これなら少し理解できそうです。

残りはこの3つ(@訂正あり;)ですので、よろしくお願いします。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6196.txt
910デフォルトの名無しさん:2008/04/06(日) 15:59:34
>>892 (5)
>>909 (5)
#include <stdio.h>
int _strcmp(char *s1, char *s2) { while (*s1 != '\0' && *s2 != '\0') { if (*s1 != *s2) return *s1 - *s2; s1++; s2++; } return *s1 - *s2; }
void get_string(char *p_str, int size) { int c; while ((c = getchar()) != '\n') { if (size > 1) { *p_str++ = c; size--; } } *p_str = '\0'; }
void main() { char a[11], b[11]; get_string(a, sizeof(a)); get_string(b, sizeof(b)); if (_strcmp(a, b) == 0) puts("epual!!"); else puts("Not equal!!"); }
911892:2008/04/06(日) 17:47:51
>>910
またも解答、本当にありがとうございます。

期限も今日のみとなりましたので、残るところ@とEですが、
時間のある方よろしくお願いしますー。
912デフォルトの名無しさん:2008/04/06(日) 17:51:31
[1] 授業単元: 画像処理
[2] 問題文: グレイスケール画像(拡張子はpgm)から2値化画像(pbm)を作るプログラムを組め.
[3] 環境
 [3.1] OS:linux
 [3.2] コンパイラ名とバージョン:gcc,cc
 [3.3] 言語:C
[4] 期限:今週中
[5] その他の制限: 特になし,出来るだけ判り易く

要するにpgmtopbmの動作が出来れば良いと思われます.
linuxの中にあるソース見たのですがちょっと良く解らなかったので
お願いに上がりました.
よろしくお願いします.
913デフォルトの名無しさん:2008/04/06(日) 18:01:48
>>892 (6)
>>909 (6)
#include <stdio.h>
void binary(unsigned char n, char *s) { int i, d; for (i = 7; i > 0; i--) { d = n / (2 << (i - 1)); n -= (2 << (i - 1)) * d; *s++ = '0' + d; } *s++ = '0' + n; *s = '\0'; }
void print(unsigned char n) { char b[9]; binary(n, b); printf("%3d, %02x, %s\n", n, n, b); }
int atoi(char *s) { int n = 0; while (*s != '\0') { n = n * 10 + (*s - '0'); s++; } return n; }
void get_string(char *p_str, int size) { int c; while ((c = getchar()) != '\n') { if (size > 1) { *p_str++ = c; size--; } } *p_str = '\0'; }
void main() { char s[4]; unsigned char n[3]; get_string(s, sizeof(s)); n[0] = atoi(s); n[1] = n[0] << 1; n[2] = ~n[0]; print(n[0]); print(n[1]); print(n[2]); }
914デフォルトの名無しさん:2008/04/06(日) 18:11:29
>>912
できるだけわかりやすくってどれくらいだよ
ポインタは使うなとかそういう制限はあるのか?
915デフォルトの名無しさん:2008/04/06(日) 18:24:59
画像でポインタ使うなってどんだけww
916デフォルトの名無しさん:2008/04/06(日) 18:40:28
>>914
単純にコメントなどで読みやすいコードをって意味じゃね?
917デフォルトの名無しさん:2008/04/06(日) 19:19:53
>>912
#include <stdio.h>
#include <string.h>
int trans(char *fname_in, char *fname_out, int threshold){
FILE *fp_in=NULL, *fp_out=NULL;
int width, height, maximum, value, x, y, ret=0;
char buf[11];

if(!(fp_in=fopen(fname_in, "r"))) goto on_error;
if(!(fp_out=fopen(fname_out, "w"))) goto on_error;
fscanf(fp_in, "%10s", buf);
if(strcmp(buf, "P2")) goto on_error;
if(fscanf(fp_in, "%d %d %d", &width, &height, &maximum)!=3) goto on_error;
threshold=threshold*256/(maximum+1);
fprintf(fp_out, "P1\n");
for(y=0;y<height;y++){
for(x=0;x<width;x++){
if(fscanf(fp_in, "%d", &value)!=1) goto on_error;
fprintf(fp_out, " %d", value>=threshold?1:0);
}
fprintf(fp_out, "\n");
}
ret=1;
on_error:
if(fp_in) fclose(fp_in);
if(fp_out) fclose(fp_out);
return ret;
}
int main(int argc, char *argv[]){
if(argc==3) trans(argv[1], argv[2], 128);
return 0;
}
918917:2008/04/06(日) 19:22:37
間違えた。訂正
threshold=threshold*256/(maximum+1);

threshold=threshold*(maximum+1)/256;
919912:2008/04/06(日) 19:30:40
抽象的な表現で申し訳ありませんでした.
>>916さんの仰る通り出来るだけ簡単で読み易いコードって意味で
判り易くと表現しました.

>>917さん
有難うございます.
試してみます
920917:2008/04/06(日) 19:33:42
>>912 >>917 の訂正版
#include <stdio.h>
#include <string.h>
int trans(char *fname_in, char *fname_out, int threshold){
FILE *fp_in=NULL, *fp_out=NULL;
int width, height, maximum, value, x, y, ret=0;
char buf[11];

if(!(fp_in=fopen(fname_in, "r"))) goto on_error;
if(!(fp_out=fopen(fname_out, "w"))) goto on_error;
fscanf(fp_in, "%10s", buf);
if(strcmp(buf, "P2")) goto on_error;
if(fscanf(fp_in, "%d %d %d", &width, &height, &maximum)!=3) goto on_error;
threshold=threshold*(maximum+1)/256; // ここ修正した
fprintf(fp_out, "P1\n%d %d\n", width, height); // ここ修正した
for(y=0;y<height;y++){
for(x=0;x<width;x++){
if(fscanf(fp_in, "%d", &value)!=1) goto on_error;
fprintf(fp_out, " %d", value>=threshold?1:0);
}
fprintf(fp_out, "\n");
}
ret=1;
on_error:
if(fp_in) fclose(fp_in);
if(fp_out) fclose(fp_out);
return ret;
}
int main(int argc, char *argv[]){
if(argc==3) trans(argv[1], argv[2], 128);
return 0;
}
921912:2008/04/06(日) 19:38:18
>>920
ありがとう御座います
大変感謝です
922デフォルトの名無しさん:2008/04/06(日) 19:53:23
>>909 (1)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int absolute(int n1, int n2) {
if (n1 > 0 && n2 < 0) return n1 - n2;
if (n1 < 0 && n2 > 0) return -n1 + n2;
if (n1 == 0 && n2 == 0) return 0;
return n1 > n2 ? n1 - n2: n2 - n1;
}
int input() {
int n; unsigned int i; char buf[256], *p;
p = fgets(buf, 256, stdin);
if (buf[0] == '\n' || strlen(buf) == 2 && buf[0] == '-') { printf("-、又は改行のみ\n"); exit(EXIT_FAILURE); }
for (i = 0; i < strlen(buf); i++)
if (i == 0 && buf[0] == '-') continue;
else if (!isdigit(buf[i]) && buf[i] != '\n') { printf("整数以外\n "); exit(EXIT_FAILURE); }
if (strlen(buf) > 9) p = buf + strlen(buf) - 9;
n = atoi(p);
if (buf[0] == '-' && n > 0) n *= -1;
return n;
}
int main() {
long n1, n2; n1 = input(); n2 = input();
printf("%dと%dの差の絶対値: %d\n", n1, n2, absolute(n1, n2));
return 0;
}
923909:2008/04/06(日) 22:25:27
>>913>>922
お付き合いいただいてありがとうございます。@の方で、
『警告 W8065 prc12-4.c 32: プロトタイプ宣言のない関数 'input' の呼び出し(関数 main )
 警告 W8065 prc12-4.c 32: プロトタイプ宣言のない関数 'input' の呼び出し(関数 main )』
実行できたのですが、どうすればいいでしょうか?;
924デフォルトの名無しさん:2008/04/06(日) 22:31:12
>>923
int input(void);
925923:2008/04/06(日) 22:58:22
>>924
ありがとうございました、なんとか期限までに完成できました。
本当にありがとうございます。
また後日お世話になるかもしれませんが、その時はよろしくお願いします;
926デフォルトの名無しさん:2008/04/06(日) 23:39:05
[1] 授業単元: 画像処理
[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6198.txt
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン:gcc
 [3.3] 言語: C
[4] 期限: 2008/04/11
[5] その他の制限:特になし

さっき別の問題で質問し,回答して頂いたばかりなのですがもう一問
出来ない問題があったので質問させて頂きます
宜しくお願いします
927890:2008/04/07(月) 03:41:42
取り敢えずまずは一つのファイルを格納し、展開出来るようにして行こうと思っています。
他サイトのサンプルコードなどを頼りに↓のようなものを作ってみました。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6199.c

すみませんが、進め方として合ってるか見て下さるとありがたいです。
また、ファイル名だけを取り出そうとしたのですが、上手く表示されませんでした。
928890:2008/04/07(月) 03:53:18
連投すみません。
↑の部分でファイルデータをアーカイブファイル先に保存出来てなかったので、それを修正したものを新たにアップしました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6200.c
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
ラベルと親の意味がわかりません