C/C++の宿題を片付け ..
310:デフォルトの名無しさん
08/02/17 21:55:38
[1] 授業単元:C言語II
[2] 問題文(含コード&リンク)
シェルを実装していますが、分からないのは入出力リダイレクションの処理です。
たとえばプロンプトから
$ cat 123 > textout
と、入力して 引数の'>'(もしくは'<') で入出力を切り替える処理を考えています。
どうすればいいのでしょうか?
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4.4
[3.3] 言語:C
[4] 期限: 2008年2月29日
311:デフォルトの名無しさん
08/02/18 00:26:19
>>308
とりあえずsignal.hなるものの存在を初めて知った
で、<unistd.h>は「unix standard」。
ここまで来ると、Windowsの人間はまるでついていけない……
312:デフォルトの名無しさん
08/02/18 02:30:54
>>308 [kill-main.c]
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
pid_t pid;
void ctrlc(void){
kill(pid,SIGUSR1);
}
int main(){
unsigned int c;
if((pid = fork()) == 0){
execl("kill-child","kill-child",(char *)0);
perror("execl");
exit(EXIT_FAILURE);
}
if(signal(SIGINT,(void*)ctrlc) == SIG_ERR){
perror("sigint");
exit(EXIT_FAILURE);
}
do{
printf("Send signal?(C-c/n)\n");
while((c=getchar()) != EOF)
if(c != '\n')
break;
if(c == 'n')
exit(0);
}while(c != EOF);
}
313:デフォルトの名無しさん
08/02/18 02:32:35
>>308 [kill-child.c]
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void siguser(void){
static int n = 0;
printf("Signal received %d times\n",++n);
if(n == 10)
exit(EXIT_SUCCESS);
}
int main(){
signal(SIGINT,SIG_IGN);
if(signal(SIGUSR1,(void *)siguser) == SIG_ERR){
perror("signal");
exit(EXIT_FAILURE);
}
for(;;){}
}
子まで書き換えないとならないのがミソだな
314:デフォルトの名無しさん
08/02/18 04:08:11
>>312-313
御回答ありがとうございます。
SIG_IGNを使いシグナルを無視させることで無効化するんですね。
勉強になりました!ありがとうございます。
315:デフォルトの名無しさん
08/02/18 14:14:22
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):Cシェルを作成しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2008年2月19日まで
[5] その他の制限: なし
C言語でシェルを作っているのですが、
>310さんと同じく'>'の入力リダイレクションの処理が分からないです。
自力で途中までは書いているのですが、キー入力の分割処理が上手く行きません。
void parseitファンクション内の処理がおかしいと思われます。
助けて頂けると幸いです。
ソースファイル↓
URLリンク(kansai2channeler.hp.infoseek.co.jp)
316:デフォルトの名無しさん
08/02/18 16:43:12
誰か292頼みます
317:デフォルトの名無しさん
08/02/18 18:15:57
>>316
問題が理解できないのでどうしようもない
まずnステップっていうのがわからない
そもそも、1ステップでどういう動きをするんだ?
ランダムで X 方向 or Y 方向に 1つ動くっていうのか、
それとも、X 方向にランダムでいくつ、Y方向にランダムでいくつって言う風に動くのか
あと表示のしかたも、各ステップ毎のX,Yの値をただ単に並べればいいのか、
図で見せるのかわからない
318:デフォルトの名無しさん
08/02/18 22:56:21
>>315
void parseit 内で、
*params++ = command;
の後のパラメータ分文字を読み飛ばす処理内で、">"の処理をしているのが不味い
a.out > aaa
↑
ここでパラメータ分文字を読み飛ばす処理は終了するので、次のパラメータを探す処理に
移ると、次のパラメータは、">"になる
">" の処理もそのままだと、 ファイル名の前後に空白文字が入る可能性がある(問題ないのかもしれないけど)
あと、void parseit 関数の終わりの*params = '\0'; は、 *params = NULL; じゃね
319:デフォルトの名無しさん
08/02/19 00:16:23
>>318
なるほど、そう言うのが原因なんですね。
確かにテストをすると空白らしくものがファイル名と'>'の前(おそらく)に入ってると思われます
となると、やはり新しいファンクションを増やした方がてっとり早いのでしょうか?
320:デフォルトの名無しさん
08/02/19 00:59:51
>>319
横レスになるけど.
先に ">"の前後で文字列を切り分けてからコマンド部分をあらためて切り分ける方法もあるんじゃないかな。
標準関数を使っていいのなら切り分けはこんな感じ↓
char redirect[20]; // リダイレクト先
_Bool test_parse( char *command, char **param )
{
_Bool ret = false;
char cmd[256]; // コマンド部
int result;
// >の前後で文字列を切り分け
result = sscanf( command, "%255[^>]%*[>]%19s", cmd, redirect );
if( result > 1 ) {
ret = true;
}
getToken( cmd, param ); // ここでコマンド部をパラメータと切り分ける関数を別に作って呼ぶ
return ret;
}
こうするとローカル変数cmdとredirectにそれぞれ>の前後で切り分けた文字が入るはず。
ついでにretで1以外が入っていた場合はredirectにも代入があったことになるからフラグでそれを知らせてます。
321:デフォルトの名無しさん
08/02/19 03:51:32
>>320
レス感謝です。
getTokenでparseitと同様の処理をさせれば良いのでしょうか?
322:デフォルトの名無しさん
08/02/19 06:43:13
>>321
4時か、がんばってるねぇ…
とっくに寝てそうだけど、getTokenでparseitのparamsに入れていく部分の処理を入れればいいと思う。
元のソース見る限りだとredirectは特に同じことをしてなさそうに見えるから。
323:デフォルトの名無しさん
08/02/19 06:54:35
試しに>>320の教えてくれたsscanfを使ってみたのですが、
未だに空白が付いて正しい結果を出しません。
もしかしたらメイン内でやったのがいけなかったのかもしれません。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
324:デフォルトの名無しさん
08/02/19 07:09:34
あー
空白がつくのって
"a.out params > text.txt"
みたいなときに " text.txt"がredirectにはいるってこと?
VC++でコンパイルしたからGCCでは挙動違うのかな?
sscanfの処理を
sscanf( command, "%255[^>]%*[> \t]%19s", cmd, redirect );
って修正してもだめ?
325:デフォルトの名無しさん
08/02/19 07:13:47
すみません>>322の通りにやると文字化けが生じてしまいます。
もしこれが解決出来れば、test_parseファンクションを使えると思うのですが…。
何か解決方法があったら教えてください。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
326:デフォルトの名無しさん
08/02/19 10:37:19
無事に解決できました。
どうやら問題やはcmdの最後の部分に空白があったため、問題が起きていたようです。
なので、最後尾にNULLを追加したらリダイレクションが正常に完了しました。
>>318 >>320 >>322 >>324助言ありがとうございました。
327:デフォルトの名無しさん
08/02/19 10:39:06
>>316
適当解釈。
#include <stdio.h>
#include <stdlib.h>
#define N 10
void suiho(int *x, int *y)
{
int r=rand()%4;
*x+=((r/2)*2-1)*(r%2);
*y+=((r/2)*2-1)*(!(r%2));
printf("(%d,%d)\n",*x,*y);
}
int main(void)
{
int i,x=0,y=0;
srand(time(NULL));
for(i=0;i<N;i++)suiho(&x,&y);
return 0;
}
328:デフォルトの名無しさん
08/02/19 20:29:30
>>327
面白い解釈だ
神龍:どんな問題でも一つだけ聞き流してやろう
ってのが思い浮かんだ
329:デフォルトの名無しさん
08/02/19 21:26:31
誰か終わってないリストチョーライ。
330:デフォルトの名無しさん
08/02/19 22:00:26
[1] 授業単元: C言語
[2] 問題文(含コード&リンク):2問ありますURLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限: 問題文にそって作る
お手数おかけしますが、よろしくお願いします。
331:デフォルトの名無しさん
08/02/19 22:27:31
因数因数って引数だろ、「ひきすう」で変換すればちゃんと出てくるのに・・・
ってもやもやしながら読んでたらばおで噴いたwwwwwww
332:デフォルトの名無しさん
08/02/19 22:37:55
構造体変数名がlist_tっていうのが違和感あるんだが,これって変数が
list_tって名前なんだよな?
xxx_tって普通,型名につける方法じゃないっけ?
333:デフォルトの名無しさん
08/02/19 23:18:56
ば、ばお・・・ごめんなさいorz
>>332
問題文を確認したら構造体変数名はlist_tとありました。
これが誤っているとすると
typedef struct list{
〜
} list_t;
って感じですかね?
334:デフォルトの名無しさん
08/02/20 00:13:00
typedef struct list_t{}list;だろ
_tは普通使わないと思うけど
335:デフォルトの名無しさん
08/02/20 00:15:26
>>334
へぇ 普通はそうなのか
普通って難しいな
336:デフォルトの名無しさん
08/02/20 00:27:17
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2/22
[5] その他の制限:
よろしくお願いします。
337:デフォルトの名無しさん
08/02/20 01:03:12
[1] 情報セキュリティ
[2] 問題文(含コード&リンク):
C言語プログラムのファイルを読み込んで、バッファオーバーラン
の危険性を検出(修正)するサポートツール。
[3] 環境
[3.1]Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2月21
[5] その他の制限: なし
338:デフォルトの名無しさん
08/02/20 01:07:57
さらっと書いてるけど>>337は相当むずかしくないか?
339:デフォルトの名無しさん
08/02/20 01:11:45
gets()が検出できればおkだったりしてな
340:デフォルトの名無しさん
08/02/20 01:16:50
つ lint
341:337
08/02/20 01:25:54
* get * sprintf * strcat * strcpy * vsprintf
が検出できれば OKです
342:デフォルトの名無しさん
08/02/20 01:28:57
先に書けよ
343:337
08/02/20 01:33:14
すみません。
344:デフォルトの名無しさん
08/02/20 04:14:35
・getってなんだよ。
・scanfはスルーかよ。
345:デフォルトの名無しさん
08/02/20 04:23:51
>>337
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFMAX 1024
int main(int argc, char *argv[]) {
FILE *fp;
char buf[BUFMAX];
int line = 0;
if (argc < 2 || (fp = fopen(argv[1], "r")) == NULL) {
printf("Usage: a.out [assemble code file]\n");
exit(0);
}
while (fgets(buf, BUFMAX, fp)) {
++line;
if (!strcmp(buf, "\tcall\tscanf\n") ||
!strcmp(buf, "\tcall\tgets\n") ||
!strcmp(buf, "\tcall\tsprintf\n") ||
!strcmp(buf, "\tcall\tstrcat\n") ||
!strcmp(buf, "\tcall\tstrcpy\n") ||
!strcmp(buf, "\tcall\tvsprintf\n")) {
printf("find at line%d: %s", line, buf);
}
}
fclose(fp);
return 0;
}
こんな感じでいいのかな。アセンブリコードに対して検索した方が楽だよな。
346:デフォルトの名無しさん
08/02/20 04:35:42
>>345
その発想はなかったわw
347:337
08/02/20 07:49:57
ありがとうございます
348:デフォルトの名無しさん
08/02/20 11:53:11
>>330
1問目
URLリンク(kansai2channeler.hp.infoseek.co.jp)
構造体変数名はlist_tとする意図が汲み取れないが、それは無視して作った。
構造体のtypedefした名前をlist_tとするの間違いじゃなかろうか・・・
349:デフォルトの名無しさん
08/02/20 12:13:13
>>330
URLリンク(kansai2channeler.hp.infoseek.co.jp)
問題をそのまま書いた方が良いと思うよ・・・
350:デフォルトの名無しさん
08/02/20 19:57:42
>>336
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)
一応作ってみた
考え方が良く分からんから、まぁたぶん大丈夫だろう的なレベル
351:デフォルトの名無しさん
08/02/20 20:47:15
>>348-349
ありがとうございます。
352:デフォルトの名無しさん
08/02/20 21:23:03
>>350
ありがとうございます
353:デフォルトの名無しさん
08/02/22 00:51:17
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):
・リスト構造
アルファベットの文字列をいくつか読み込み、それを、アルファベット順にソートし、以下のコマンドが入力された場合、それぞれの命令を実行せよ。
条件として、リスト構造が使われていること、サブ関数の呼び出し(単純なものでもよい)が使われていること、malloc関数が使われていること。
p :入力された文字列を表示する。
a :指定された文字列をリストに追加する。(アルファベット順に並ぶように)
d :指定された文字列をリストに削除する。(不要になった記憶領域はfree()を使って開放すること。また、指定された文字列がリストに無い場合は、その旨を表示。)
q :プログラムを終了する。
? :使用可能なコマンドの一覧を表示する。
end:データ入力の終了
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2月26日まで
[5] その他の制限:
こんな感じです。
URLリンク(kansai2channeler.hp.infoseek.co.jp)
できればなるべく簡単な方法でお願いします。
354:353
08/02/22 00:54:56
ごめんなさい、訂正です。
× d :指定された文字列をリストに削除する。
○ d :指定された文字列をリストから削除する。
355:デフォルトの名無しさん
08/02/22 02:55:06
>>353
BUFSIZE文字以上の入力があった場合に異常動作を起こす他、色々と問題・手抜きは抱えてるが少なくともその実行例は通る
URLリンク(kansai2channeler.hp.infoseek.co.jp)
356:353
08/02/22 03:24:27
>>355
ありがとうございます。
しかし、まんまコピペでコンパイルが通りませんでした…
そしてNode型とかようわからん件…ごめんなさい低級で
とりあえず自分なりにいじってみます。ダメだったらまたくるかも。
357:デフォルトの名無しさん
08/02/22 03:27:56
>>356
あぁ、VC++2008でコンパイルしたから気付かんかったけど
C99形式のコメント(//〜)を使ってるからそれかもしれん
その部分を全部消してみてくれ
358:353
08/02/22 03:50:47
>>357
消してみましたが、やはり同じようです。
とりあえずvistaですが、bccでまんまコピペでコンパイルしてみた結果、以下が表示されました。
list.c:
警告 W8060 list.c 24: おそらく不正な代入(関数 insert )
警告 W8060 list.c 24: おそらく不正な代入(関数 insert )
警告 W8060 list.c 32: おそらく不正な代入(関数 insert )
警告 W8060 list.c 32: おそらく不正な代入(関数 insert )
警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode )
警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode )
エラー E2468 list.c 100: void 型の値は許されない(関数 appendProc )
警告 W8019 list.c 100: コードは効果を持たない(関数 appendProc )
エラー E2468 list.c 114: void 型の値は許されない(関数 deleteProc )
警告 W8019 list.c 114: コードは効果を持たない(関数 deleteProc )
エラー E2468 list.c 136: void 型の値は許されない(関数 main )
警告 W8019 list.c 136: コードは効果を持たない(関数 main )
*** 3 errors in Compile ***
359:デフォルトの名無しさん
08/02/22 04:01:06
>>358
コメントを消した状態ならこっちではANSI C準拠の設定でgcc通る(警告は出る)以上分かりかねる
bcc捨ててくれとしか言い様がない
使用したgccは以下
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
360:デフォルトの名無しさん
08/02/22 04:21:12
これはbccのバグっぽい
361:デフォルトの名無しさん
08/02/22 04:24:08
多分三項演算子とfgetsの合わせ技でエラーになってんだろうな
bccだとvoid fgetsで定義されてるとかか?
362:デフォルトの名無しさん
08/02/22 04:26:26
[1] 授業単元: 基礎プログラミング
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:本日正午まで(恐らく本日中であればなんとかなります)
[5] その他の制限:
なるべく自分でどうやっているプログラムなのか理解した上で提出した方がいいため、
if文やfor文使いまくりでもいいので、簡単なプログラムにしていただけると助かります。
363:デフォルトの名無しさん
08/02/22 04:37:40
>fgets(buf, BUFSIZE, stdin) ? 0 : exit(1);
364:デフォルトの名無しさん
08/02/22 04:39:46
>>358
fgets(buf, BUFSIZE, stdin) ? (void)0 : exit(1);
これで回避できるみたいだが、よくわからんな。
bccの3項演算子の扱いが謎。
365:デフォルトの名無しさん
08/02/22 04:46:17
voidとそうじゃないものを並べちゃいけないみたいだね。
void同士ならOKらしい。
366:デフォルトの名無しさん
08/02/22 05:53:24
>>362
とりあえず適当
(1)
#include<stdio.h>
void num2roma(int num,const char roma[]){
const int mod = num % 10;
const int div = num / 10;
const int mod5 = num % 5;
int i;
if(div)num2roma(div,roma+2);
if(mod5==4){
putchar(roma[0]);
putchar(roma[mod/4]);
}else{
if(mod5!=mod)
putchar(roma[1]);
for(i=0;i<mod5;++i)
putchar(roma[0]);
}
}
int main(void){
int num;
while(scanf("%d",&num)==1){
num2roma(num,"IVXLCDM");
putchar('\n');
}
return 0;
}
367:デフォルトの名無しさん
08/02/22 05:54:59
(2)
#include<stdio.h>
int main(void){
int count[100];
int i,j,h;
for(i=0;i<100;++i){
count[i] = 0;
}
for(i=0;i<30;++i){
if(scanf("%d",&h) != 1){
break;
}
++count[h/5];
}
for(i=0;i<100;++i){
if(count[i] != 0){
printf("%d...%d%8d : ",i*5,i*5+5,count[i]);
for(j=0;j<count[i];++j){
putchar('*');
}
putchar('\n');
}
}
return 0;
}
368:デフォルトの名無しさん
08/02/22 18:01:06
>>362
>>366 はでかいミスがあった それは忘れてこっちを使ってくれ
(2) 3999までの正整数をローマ数字にする int2roman.cpp
URLリンク(kansai2channeler.hp.infoseek.co.jp)
369:デフォルトの名無しさん
08/02/22 19:32:04
ここのスレはソースをはってどこがおかしいか
おしえてくれるスレですか?
かなりながいソースなんですが。
370:デフォルトの名無しさん
08/02/22 19:45:43
>>369
そりゃもう手取り足取り
どれだけ長いソースでも宿題であれば片付けるよ
それが2ちゃんクロリティ
371:デフォルトの名無しさん
08/02/22 19:50:06
ただちょっと専門的な話だから
流れをかいたファイルといろいろこみの
tar.gz形式のファイルでうpします
あとで。
372:デフォルトの名無しさん
08/02/22 19:53:24
>>371
教授から出されたような難解で困難な宿題?
373:デフォルトの名無しさん
08/02/22 23:14:14
[1] 授業単元: 認識
[2] 問題文(含コード&リンク):
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:月曜日までといいたいところですが
[5] その他の制限:
おねがいします。わからないことがあれば聞きます。
374:373
08/02/22 23:20:53
URLリンク(www12.axfc.net)
こちらです
すいません。
375:デフォルトの名無しさん
08/02/22 23:24:36
>>373
件のファイルが既にありません。
しかも、「実行ファイルを実行せよ」というのはかなり怪しいです。
ウィルスなら誰も手を出しません。
376:373
08/02/22 23:35:20
//としてるとこは全部消してもらってもかまいません。
あとでみたらログチェックしたままのファイルでした
377:デフォルトの名無しさん
08/02/22 23:47:07
誰もがDVIファイル読める環境にあると思うなよw
せめてPDFくらいは・・・
あと実行ファイルは誰も実行せんがな(´・ω・`)
378:373
08/02/22 23:50:28
URLリンク(kansai2channeler.hp.infoseek.co.jp)
すいません。
379:デフォルトの名無しさん
08/02/22 23:53:25
DVIを読むためにいろいろと導入するのが理系の学生だと思うけどなぁ……
でも俺の周りでdvioutとかGhost Scriptとかまで入れてるのは二三人しかいないなぁ……
そもそもTeXすら入れてないってやつが多いし……
Linuxのパッケージ?にはUNIX派生のいろいろが入っているからいいんだろうけど……
380:デフォルトの名無しさん
08/02/23 00:55:59
このスレって理系の学生が答えるスレだったっけ?
381:デフォルトの名無しさん
08/02/23 00:58:44
>>378
そのファイル読んだけど、やってる処理に関する知識を持ってないから全く分からん
その点も説明して貰わんと、分かる人間しか答えられんぞ
382:デフォルトの名無しさん
08/02/23 01:19:49
余計な文消して文消して
コメントをいれるようにしてもう一度うpします。
そっちのほうがわかるとおもうので。
383:373
08/02/23 13:37:46
gaiyou.txtと図をいれてみました。pngもしくはjpg形式です。
お願いします。
URLリンク(www12.axfc.net)
384:デフォルトの名無しさん
08/02/23 16:16:36
チェックしてみようかと思ったが、
コンパイルすら通らずにエラーや警告出まくりなんで止めた。
385:デフォルトの名無しさん
08/02/23 16:21:04
コンパイルはとおるけど
386:デフォルトの名無しさん
08/02/23 17:21:51
>>384
ヘッダファイルをチェックしてみては?
Windowsには無くてLinuxにはある、っていうヘッダがたくさん含まれている可能性もある
387:デフォルトの名無しさん
08/02/23 19:14:26
tarファイルって書いてあるのにgzなのが気になって仕方が無い
388:デフォルトの名無しさん
08/02/23 19:27:17
uploader側で末尾のピリオド以降を拡張子と自動認識されてるんじゃないの
389:デフォルトの名無しさん
08/02/23 19:52:27
それにしてもtar.gzファイルとかtgzファイルとか書き方があると思った
390:デフォルトの名無しさん
08/02/23 23:02:52
宿題がこないね
391:デフォルトの名無しさん
08/02/23 23:08:25
#include <stdio.h>
void main(void)
{
FILE *kadaip;
char buff[256];
int n;
printf("文字を入力してください!\n");
printf("(Enterを入力すると終了)\n");
scanf("%c",&n);
kadaip = fopen("C:\\kadai.txt","w");
if(kadaip != NULL)
{
gets(buff);
while(buff[0] !='\0')
{
buff [256]= fprintf(kadaip,"%c\n",n);
printf("文字を入力してください!\n");
printf("(Enterを入力すると終了)\n");
scanf("%c",&n);
gets(buff);
}
if(buff < 0)
printf("出力エラー!\n");
fclose(kadaip);
}
else
printf("openエラー入力エラー!\n");
}
全然わからなくて、とりあえず作ってみたのがこれです。間違いだらけだと思いますが教えていただけたら嬉しいです。
あと、プログラムの終了条件は文字データの入力がないときです。よろしくお願いいたします。
392:デフォルトの名無しさん
08/02/23 23:09:55
[1] 授業単元:プログラミング
[2] 問題文:キーボードから入力した内容をファイルに保存して表示するプログラムを作りなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: visual stdio
[3.3] 言語: C
[4] 期限:2月25日まで
[5]上のものです。間違って先にプログラムの方を投稿してしまいました。
環境等はこちらです。すみませんでした。
393:デフォルトの名無しさん
08/02/23 23:22:40
>>392
#include <stdio.h>
int main(void)
{
FILE *kadaip;
char buff[256];
int n;
kadaip = fopen("C:\\kadai.txt","w");
if(kadaip != NULL)
{
printf("openエラー入力エラー!\n");
return 1;
}
while(1)
{
printf("文字を入力してください!");
printf("(Enterのみを入力すると終了)\n");
gets(buff);
if(buff[0] =='\0') break;
n=fprintf(kadaip,"%s\n",buff);
if(n<=0)
{
printf("出力エラー!\n");
break;
}
}
fclose(kadaip);
return 0;
}
394:393
08/02/24 00:01:01
>>393 が間違ってたので訂正
if(kadaip != NULL)
↓
if(kadaip == NULL)
395:デフォルトの名無しさん
08/02/24 00:04:26
373ですけど
どうですかね?
バグはみつかりましたか?
396:デフォルトの名無しさん
08/02/24 00:58:57
>>394
訂正のとおりに実行してみたら無事にできました。お早い返答ありがとうございました。
397:デフォルトの名無しさん
08/02/24 01:54:24
URLリンク(www.nicovideo.jp)
これか
398:デフォルトの名無しさん
08/02/24 02:00:08
>>397
どれだよw
399:デフォルトの名無しさん
08/02/24 02:09:19
URLリンク(www.akibablog.net)
こちらか
400:デフォルトの名無しさん
08/02/24 13:10:21
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 巡回セールスマン問題の厳密解を求めるプログラムを作成せよ
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: VC 2008 Exp
[3.3] 言語: どちらでも可
[4] 期限: 2/25 12:00 ごろ
動的計画法で求めようとしているのですが、最小コストは求まったものの
そのルートを求める方法がいまいちわかりません。
dist[a][b] には a -> b の距離が入っています (a->b = b->a)
n は巡回頂点数です
URLリンク(kansai2channeler.hp.infoseek.co.jp)
401:デフォルトの名無しさん
08/02/24 15:13:14
>>400
ちょっと質問
ソースとか全然みてないでいうんだが、問題文は「厳密解」になってるけど
動的計画法って「近似解」を求める方法じゃない?
402:デフォルトの名無しさん
08/02/24 15:19:46
>>401
すまn
漏れの勘違いだったorz
403:デフォルトの名無しさん
08/02/25 02:00:32
>>400
URLリンク(kansai2channeler.hp.infoseek.co.jp)
・cost のサイズがでかすぎで手元でコンパイル通らなかったので減らした
・n や dist や CITY_NUM の定義が分からなかったので適当に補間した
以後ソースを挙げるなら定義の部分も含めてくれ
実行可能であることが最も望ましい
404:403
08/02/25 02:01:47
>>403
>コンパイル通らなかったので減らした
これは間違いで、コンパイルは通ったが実行時エラーが出たので減らした
405:デフォルトの名無しさん
08/02/25 17:53:48
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2月29日正午ごろまで(できれば28日中)
[5] その他の制限:
問題文の例の図がずれて見づらくなっちゃってます。すみません。
←valueの行で‖と‖の間が空白の場所は数値が入っておらず、演算子に対応してる位置だと思ってください。
また、大分長くなってしまってもいいので、なるべく簡単なプログラムでお願いします。
可能であればでいいので、何を目的とした部分なのか程度の注釈をいくつかつけてくださると助かります。
406:デフォルトの名無しさん
08/02/25 20:57:34
[1] プログラミング
[2] 問題文長くなるので下に書くごめんなさい
[3] 環境
[3.1] OS: Windows2000
[3.2] すいませんわかりません
[3.3]C 言語
[4] 期限: ([2008年2月26日まで] できるだけ早くお願いしたいです。
[5] 制限は特になし
機動及びmain関数(kin_main.c)
このプログラミングの実行ファイルの名称は(kintai)のする。起動時に因数として勤怠情報ファイルを引数を与える。
>kintai kin0004
引数なしで機動した場合には、ファイル名を入力するようにメッセージを表示させる。
>kintai
>勤怠情報ファイルパスを指定してください。
>
このプログラミングのmain関数。初期化処理(kin_init()),勤怠情報記録ファイル読み込み処理(kin_file_read()),
入力情報論理チェック機能(kin_logic_chk()),勤怠計算機能(kin_calc()),標準出力機能(kin_display),CSVファイル生成機能(kin_create_csv()),
を順次に呼び出し。各関数の戻り値がエラーの場合にはその時点でmain関数に戻る。プログラムを終了にするにはmain関数
出なければならない。エラー情報はいかに示す。
エラーディファイン 出力情報 意味
ERR_INIT 初期化エラー 初期化関数内でエラー
ERR_FILE_ACCESS ファイルアクセスエラー ファイルアクセスに失敗した場合
ERR_LINE_NUM_OVER 勤怠情報ファイル文字数オーバー 勤怠情報ふぁいるの1行分文字数が所定の値を超える場合
ERR_PARSE 勤怠ファイル構文エラー 勤怠情報記録の構文が誤ってる場合
ERR_TIME_LOGIC 論理チェックエラー 入力された勤怠情報に誤りがある場合
NG 内部処理エラー 上記のエラーに該当しない場合。
丸なげでごめん
407:デフォルトの名無しさん
08/02/25 21:04:29
>>406
勤怠情報ファイルのフォーマットもなしどうしろと?
丸なげどころか、情報がたりなすぎる
408:デフォルトの名無しさん
08/02/25 21:19:28
>>407
すまんまだはじめたばっかで
フォーマットを検索してもわからん
でもこんな感じになるはずなんだ
スレリンク(news4vip板)
の>>4と>>5
409:デフォルトの名無しさん
08/02/25 21:24:18
>>408
見えない
なんで検索しないといけないのかも分からんよ
410:デフォルトの名無しさん
08/02/25 21:26:18
>>406
とりあえずツッコミどころが満載だな……
・CSVファイル生成機能(kin_create_csv())でのエラーは捕まえないの?
・エラーを出すのなら、その逆として「●●の処理は成功しました」と順次表示していくと親切じゃない?
・NG→ERR_internal の方がかっこよくない?
・ERR_TIME_LOGICで、「一ヶ月の勤務日数が32日です」とか
「終業時刻+残業時間が、退勤時刻を超えてる」とかも出したほうが親切じゃない?
411:デフォルトの名無しさん
08/02/25 21:32:10
int main(int argc,char **argv){
int Result=0;
if(argc<2){
puts("勤怠情報ファイルのパスを指定してください");
}else{
FILE *pFile=fopen(argv[1],"rb");
if(pFile==NULL){
printf("%s はオープンできないよ\n",argv[1]);
}else{
printf("%s をオープンしたよ\n",argv[1]);
puts("閉じるよ");
Result=kin_init();
if(Result<0)printf("kin_init()が %d だと言ってる\n",Result);
すまんこんな感じになると思うんだ
412:デフォルトの名無しさん
08/02/25 21:34:46
>>410
すごい親切だと思うけどどうやるかさっぱりわからん
413:デフォルトの名無しさん
08/02/25 21:36:34
最初のif else 文からしてあやしい。
fopenを二回やることになるぞ
・引数ありで起動した場合
・引数なしで、ファイルパスを指定(入力?)する場合
414:デフォルトの名無しさん
08/02/25 21:47:15
>>411のは昨日やってもらったやつなんだ
引数与えないと起動しないようにするらしい
kintai kin0004.txtをつけるなければきどうしないようにする
0004は日付が入るyymmでyyが西暦の下二桁mmが該当月
.txt入らないと起動しないようにするみたいなです
415:デフォルトの名無しさん
08/02/25 21:53:12
>>414
「ファイル構文」という用語を持ち出すほどだから、
勤怠情報のファイルフォーマットはxmlくらいのものだと思った
CSV出力があるのなら、最初からCSV形式で勤怠情報のファイルフォーマットを策定すればいいんじゃない?
古い諺だが
データ構造+アルゴリズム=プログラミング
と言うし。
416:デフォルトの名無しさん
08/02/25 21:58:06
>>415
ありがと
でも初心者の俺にはさっぱり意味がわからん
417:デフォルトの名無しさん
08/02/25 22:15:29
もしかして勤怠情報ファイルのフォーマットは決まってないのか?
418:デフォルトの名無しさん
08/02/25 22:32:40
正直フォーマットって言葉がでてこないから決まってないです。
問題文にkintai kin0004.txtだった 。.txtぬけてたすまん
419:デフォルトの名無しさん
08/02/25 23:22:08
週末、勢い込んでカレー作った。
たまねぎ炒めるところから始めて、
かなり気合入れて作った。
たまねぎの量、土日あわせて6玉。
うまかった。
でも今日の屁が死ぬほどくさい。
420:デフォルトの名無しさん
08/02/25 23:27:19
余ったタマネギは犬猫に食べさせちゃだめだよ!!!
でも実験という名目ならいいのかな??
421:デフォルトの名無しさん
08/02/25 23:33:19
だるいから嫌
422:デフォルトの名無しさん
08/02/25 23:33:53
だるいから嫌
423:デフォルトの名無しさん
08/02/25 23:35:56
だるいから嫌
424:デフォルトの名無しさん
08/02/26 00:03:54
だるいから嫌
425:デフォルトの名無しさん
08/02/26 02:25:49
>>405
多少問題文とやり方が違うし、あんま自信ないけど、一応できたのでうp
URLリンク(kansai2channeler.hp.infoseek.co.jp)
426:デフォルトの名無しさん
08/02/26 04:07:54
だるいから嫌
427:デフォルトの名無しさん
08/02/26 07:14:34
>>425
乙です
ありがとう
428:デフォルトの名無しさん
08/02/26 11:45:04
[1] 授業単元: C
[2] 問題文(含コード&リンク):
3次元配列を用いたカレンダー生成プログラム
任意の西暦年数nを与えて、n年のカレンダーを下記の仕様により、作成せよ。
1)3次元配列day[12][6][7]を使用する。
2)出力形式は
1月 2月 3月 4月
5月 6月 7月 8月
9月 10月 11月 12月
とする。
3)うるう年にも対応させる。
[3] 環境
[3.1] OS:MacOSX 10.5
[3.2] コンパイラ名とバージョン:gcc 4.0.1
[3.3] 言語:Cでお願いします。
[4] 期限:2/27に提出です。
[5] その他の制限:特にありません。できれば、配列に組み込む部分と出力部分には関数を使ってほしいです。
日を配列に組み込むところで、つまってしまい、どうにもならなくなってしまいました。
最終的には理解できるようにしたいので、簡単なコメントなどつけてくれると嬉しいです。
急ぎで申し訳ありませんが、よろしくお願いしますm(_ _)m
429:デフォルトの名無しさん
08/02/26 12:11:46
わざわざ配列に入れる必要なんてないと思うけど
430:デフォルトの名無しさん
08/02/26 12:32:22
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
個人課題 )IDカードを読み込んだら、その番号を"IDList.txt"に出力せよ。
buf[]にはそれぞれ二桁の16進数が入ってるのですが、それを繋げて、
strとしました。このstrに入った値を"IDList.txt"に書き込んでいきたいのです。
略)
sprintf(str, "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]);
これ以降をよろしくお願いします。
※カードを読み込むたびにstrは変わります。
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:VS2005pro
[3.3] 言語:C++
[4] 期限:特になし
[5] その他の制限:特になし
ド素人な課題で申し訳ないのですがよろしくお願いします。
431:デフォルトの名無しさん
08/02/26 13:21:29
>>430
それ本当にC++の授業なのか?
C++の特色のひとつは、Cから格段に進化した文字列操作だぞ
432:デフォルトの名無しさん
08/02/26 13:31:08
>>430
つーかそれ、FILE * fp = fopen("IDList.txt", "w")してsprintf(str, ...)をfprintf(fp, ...)にすればいいだけじゃん。
433:デフォルトの名無しさん
08/02/26 13:55:13
>>431
C++の授業ではないのですが、C言語の授業の延長の授業で、
環境がC++だったんでそのように書きました、申し訳ありません。
確かにやっていることは++は含んで無いのだと思います。
>>432
ありがとうございます。
"a"にしたら望んでいた物になりました。
434:デフォルトの名無しさん
08/02/26 16:43:10
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク):URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS: Linux /Windows
[3.2] コンパイラ名とバージョン: (Linux)gcc /(Windows)コマンドプロンプト上でコンパイル
[3.3] 言語: C
[4] 期限: 2月28日中
[5] その他の制限:長いプログラムになっても構いませんので簡単めなプログラムでお願いします。
設問1と設問3は自分で考えて辿り着いた答を書いてます。違っていたら指摘お願いします。
問2のコメント以下は実際に実行時間を計測して考察しろ的なものだと思うのですが、
どうやればいいのかいまいち分からないため簡単にでいいのでどうやればいいのか教えてください。
435:デフォルトの名無しさん
08/02/26 18:53:38
>>434
これ問題文そのまま「コピペ」してるか?
436:デフォルトの名無しさん
08/02/26 18:59:02
>>434
設問2
URLリンク(kansai2channeler.hp.infoseek.co.jp)
設問3
NULL: 「これ以上前の文字が存在しない」はOK、「次の文字に移る」は、違う
DEL: 「これ以上後の文字が存在しない」はOK、「全文字の並べ替え終了」は、違う
s1 スタックには下→上に、文字が小→大で積まれる
s2 スタックには下→上に、文字が大→小で積まれる
ので、s1,s2のスタックに有効な文字データが無い状態をチェックするために使用している(番兵)
つまり、2.aの処理の場合にNULL文字がなければ、
s1スタックにデータが無いという状態をチェックする文( if (s1が空) { ... } のような文 ) が必要になるが、
番兵(NULL文字)を用いることにより、その必要がなくなる
(番兵については、wikiでもみてね)
437:400
08/02/26 20:51:48
>>403
ありがとうございます。
説明不足で余計なお手数をおかけしてしまい申し訳ありません。
確かに、double では静的確保に成功する配列サイズなのに、
int で同じ添え字の配列を確保しようとすると確かにクラッシュするようです。不思議ですね。
その点は malloc で動的確保することで無事に動作しました。
438:438
08/02/26 21:23:50
>>428 行数制限のため入出力は関数にしなかったが。
#include<stdio.h>
int day[12][6][7];
int z(int y,int m,int d){
if(m<3)y--,m+=12;
return(y+y/4-y/100+y/400+(m*13+8)/5+d)%7;
}
int main(void){
int y,s,m,w,d;
while(1){
printf("y=");
scanf("%d",&y);
//格納
for(m=0;m<12;m++)
for(w=0;w<6;w++)
for(d=0;d<7;d++){
day[m][w][d]=w*7+d+1-z(y,m+1,1);
if(day[m][w][d]<1||day[m][w][d]>(z(y,m+2,1)-z(y,m+1,1)+7)%7+28)
day[m][w][d]=0;
}
//表示
for(s=0;s<3;s++)
for(w=0;w<6;w++,printf("\n"))
for(m=0;m<4;m++,printf(" "))
for(d=0;d<7;d++)
if(day[s*4+m][w][d]>0)
printf("%2d",day[s*4+m][w][d]);
else
printf(" ");
}
return 0;
}
439:デフォルトの名無しさん
08/02/27 00:11:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
文字頻度と文字の連接頻度をカウントするプログラムを作成せよ。
尚、入力ファイルにhamlet3-1をWebからダウンロードして使い、tsv形式で結果を出力せよ。($./a.out hamlet3-1.txt > hamlet.tsv としてプログラムを実行)
‐処理
・入力ファイルを「読み込みモード」でオープンする
・ファイルの銭湯から1文字ずつ読み込みながら小文字にそろえて、'a'〜'z'の範囲にある場合は以下の処理を行う。
@'a'〜'z'の各文字g亜出現する頻度を計数する。
A連続する2文字の連接頻度をa-a,a-b,...z-zまで計数する。
途中にスペース、改行などアルファベットが入った場合は連接していないとする。
・計数結果を標準出力に出力
hamlet3-1
URLリンク(kansai2channeler.hp.infoseek.co.jp)
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2008/02/27 23;59迄
[5] その他の制限:特にありません。
よろしくお願いします。
440:デフォルトの名無しさん
08/02/27 00:17:52
[1] 授業単元:プログラミング演習
[2] 問題文:
空気中でつるされている銅球の温度変化は以下の式で求まる。
Cp・ρ((πd^3)/6)dT/dt=-πd^2((λ/d)Nu)(T-Tair)
周辺空気の温度Tair=300K、流速3m/sのときの銅球の温度変化を計算しなさい。
なお、t=0sで銅球の初期温度はT0=700K、銅球の温度分布は無視し、各物性値は500Kで計算のこと。
(Cp=1.03kJ/kgK、ρ=8813kg/m^3、λ=39.71×10^3W/mK、Nu=11.04)
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C++
[4] 期限: 2008年2月27日15:00
[5] その他の制限:使用したアルゴリズムは全て関数化する。
ルンゲクッタ法を使用
どうしてもわからないのですみませんがお願いします。
441:デフォルトの名無しさん
08/02/27 00:26:00
>>440
微分方程式を解くのか?
442:デフォルトの名無しさん
08/02/27 00:32:01
>>441
そうなんだと思います。
443:デフォルトの名無しさん
08/02/27 01:23:12
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
[3] 環境
[3.1] OS: Windows
[3.2]コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 2008年2月27日 12:00
2つの文字列A,Bに入力し、、
それぞれの文字列の先頭から順に一文字づつ抜き出し、
交互に出力するプログラムを作成しなさい。
Str関数を使用しない
例:
文字列Aにabcd
文字列Bに123456
と入力すると
出力結果 a1b2c3d456
が出力されるようにする。
よろしくおねがいします
444:デフォルトの名無しさん
08/02/27 01:29:42
>>439
URLリンク(kansai2channeler.hp.infoseek.co.jp)
445:デフォルトの名無しさん
08/02/27 01:31:44
>>444は間違い。
446:デフォルトの名無しさん
08/02/27 01:38:15
>>439
URLリンク(kansai2channeler.hp.infoseek.co.jp)
こっちが正しい。
447:デフォルトの名無しさん
08/02/27 01:44:13
>>443
#include <stdio.h>
int main(void)
{
char bufA[32], bufB[32];
int i=0;
printf("文字列Aの入力:");
fgets(bufA, sizeof(bufA), stdin);
printf("文字列Bの入力:");
fgets(bufB, sizeof(bufB), stdin);
while(bufA[i] != '\n' && bufB[i] != '\n')
{
putchar(bufA[i]);
putchar(bufB[i]);
i++;
}
if(bufA[i] != '\n') puts(bufA+i);
if(bufB[i] != '\n') puts(bufB+i);
return 0;
}
448:デフォルトの名無しさん
08/02/27 01:46:34
Str関数ってなんだろう。Str関数を作れって意味ではなさそうだし。
str〜関数を使えってことかな?
449:デフォルトの名無しさん
08/02/27 02:15:44
>>439
URLリンク(kansai2channeler.hp.infoseek.co.jp)
>>444-446
連接の解釈が違うきがする
450:デフォルトの名無しさん
08/02/27 02:22:55
>>449
ああああああ!!!
そうか、そういうことか。
451:443
08/02/27 02:27:24
>>447
すみません、書き忘れてましたorz
配列でなくポインタででした・・
>>448
strのとこはstrcpyとか使わないでということです。
452:!= 447
08/02/27 02:48:15
>>451
bufA[i]←こういうのがあってはいけないってことかな?
ならば、
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *bufA, *bufB;
int i=0;
bufA=malloc(32);
bufB=malloc(32);
printf("文字列Aの入力:");
fgets(bufA, 32, stdin);
printf("文字列Bの入力:");
fgets(bufB, 32, stdin);
while(*(bufA+i) != '\n' && *(bufB+i) != '\n')
{
putchar(*(bufA+i));
putchar(*(bufB+i));
i++;
}
if(*(bufA+i) != '\n') puts(bufA+i);
if(*(bufB+i) != '\n') puts(bufB+i);
free(bufA);
free(bufB);
return 0;
}
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4968日前に更新/299 KB
担当:undef