C/C++の宿題を片付けます 104代目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/02/04(月) 23:32:19【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう.
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
【質問テンプレ】
[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++の宿題を片付けます 103代目
http://pc11.2ch.net/test/read.cgi/tech/1200318925/
0002デフォルトの名無しさん
2008/02/04(月) 23:35:070003デフォルトの名無しさん
2008/02/05(火) 00:17:37-''":::::::::::::`''> ゆっくりしていってね!!! <
ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
|::::::;ノ´ ̄\:::::::::::\_,. -‐ァ __ _____ ______
|::::ノ ヽ、ヽr-r'"´ (.__ ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、
_,.!イ_ _,.ヘーァ'二ハ二ヽ、へ,_7 'r ´ ヽ、ン、
::::::rー''7コ-‐'"´ ; ', `ヽ/`7 ,'==─- -─==', i
r-'ァ'"´/ /! ハ ハ ! iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i |
!イ´ ,' | /__,.!/ V 、!__ハ ,' ,ゝ レリイi (ヒ_] ヒ_ン ).| .|、i .||
`! !/レi' (ヒ_] ヒ_ン レ'i ノ !Y!"" ,___, "" 「 !ノ i |
,' ノ !'" ,___, "' i .レ' L.',. ヽ _ン L」 ノ| .|
( ,ハ ヽ _ン 人! | ||ヽ、 ,イ| ||イ| /
,.ヘ,)、 )>,、 _____, ,.イ ハ レ ル` ー--─ ´ルレ レ´
0004デフォルトの名無しさん
2008/02/05(火) 00:40:15[2] 正規分布に従う乱数を生成しなさい。
[3] 環境
[3.1] OS: mac
[3.2] gcc 3.4
[3.3] 言語: C
[4] 期限: [2008年2月7日まで]
0005デフォルトの名無しさん
2008/02/05(火) 01:21:26Box-Muller transform
0006デフォルトの名無しさん
2008/02/05(火) 06:59:45#include <stdio.h>
unsigned int rnd(){
static unsigned int x=3,y=11,z=13,w=17;
unsigned int t;
t=(x^(x<<13)); x=y; y=z; z=w;
return ( w=(w^(w>>7))^(t^(t>>5)) );}
double seiki(){
return -6+ (0.0+rnd()+rnd()+rnd()+rnd()+rnd()+rnd()
+rnd()+rnd()+rnd()+rnd()+rnd()+rnd() ) /0xFFFFFFFF;}
main(){
int n;
for(n=0;n<100;n++)printf("%f\n",seiki());
}
0007デフォルトの名無しさん
2008/02/05(火) 17:53:37[2] 問題文(含コード&リンク):
1)5科目の合計点を計算して exam_data[i].x[6]に入れ、合計点の高い順に並べ替え
2)各科目の最高点、最低点、平均、標準偏差を計算せよ。標準偏差=sqrt(分散) と定義される。
3)並び替え等の処理
4)結果を file Result_1_23 に書き出せ。
問題文全文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6000.txt
用いるデータ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5999.txt
解答例
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6001.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
[4] 期限:[2008年2月6日19:00まで]
[5] その他の制限:特になし
丸投げです。よろしくお願いします。
0008デフォルトの名無しさん
2008/02/05(火) 19:11:000009デフォルトの名無しさん
2008/02/05(火) 22:28:23[2] 問題文(含コード&リンク):
ビジュアルベーシックのWinAPI(C++)を使用して、テトリスを作る。
矢印キーで移動、SPACEキーで回転。
次に何が出るか、スコア、時間を同時に表示。
(+αとしてスコアを保存し、ランキングも表示できる)
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:ビジュアルベーシックプロフェッショナル2003で動作。WinAPI。
[3.3] 言語:C++
[4] 期限: 2008年2月10日(日)
[5] その他の制限:
学校の課題なので、初心者に見えるようなプログラムでお願いします。
丸投げですが、かなり急いでます。よろしくお願いします。
0010デフォルトの名無しさん
2008/02/05(火) 22:43:48i,n;char s[165];main(m){read(0,s,s);m=s[1]%2?n=121,44:s[4]%2?n=132,11:(n=66,22);for(;i<44;s[i++]-=s[i]%2*3)s[i+n]|=s[i];write(1,s,m);for(i=0;i<165;m%35&&write(1,s+i,11),i+=11)for(m=n=0;n<10;)m+=s[i+n++];}
0011デフォルトの名無しさん
2008/02/05(火) 22:45:07なぜにそんな時間がかかりそうなのを残してるんだorz
あと、どの辺まで習ってる?
・WindowProc.
・SetTimer()
・メモリデバイスコンテキスト
・レジストリ or INIファイル
・MFC
etc.
0012デフォルトの名無しさん
2008/02/05(火) 23:02:47すみません。それはこのままデバッグすればいけますか?
>>11
WindowProcは習いました。SetTimerも説明は受けました。
メモリデバイスコンテキストも話は聞きました。
しかしMFCの意味が分からないです。
できればhttp://www13.plala.or.jp/kymats/study/game_other/SPACE_TETRIS/SPACE_TETRIS.gifみたいなものはできますか?
0013デフォルトの名無しさん
2008/02/05(火) 23:05:200014デフォルトの名無しさん
2008/02/05(火) 23:14:50MFCは知らないなら無視してもいいかと。
画像の表示、キー入力はできるんだろ?
具体的に何がわからないんだ?
現状のまま丸投げするとおそらくさっぱりなコードが返ってくるぞ。
0015デフォルトの名無しさん
2008/02/05(火) 23:17:14MicrosoftVisualBasic2003のプロフェッショナルを俺の通っている高校で使用していて、
それのWinAPIを使った課題なんです。
なんて説明すればいいのかわからなかったんですが…。
0016デフォルトの名無しさん
2008/02/05(火) 23:21:31画面表示、キー入力は可能です。
わからないのはテトリスの落ちてくる、テトリミノのランダム化。
テトリミノの形設定。
一列並んだら消える。
上までいったらゲーム終了。
(+αだと、スコアの記録の仕方)
というテトリスの基本的部分の構造が全く分からなくて、チャートも書けない状況です。
0017デフォルトの名無しさん
2008/02/05(火) 23:25:100018デフォルトの名無しさん
2008/02/05(火) 23:27:20もし、VisualBasicでWindowsAPI使ったプログラム(C,C++関係なし)を作れ言われたら、俺わからん。
0019デフォルトの名無しさん
2008/02/05(火) 23:29:31ここ一週間くらいぐぐってたんですが、
コンパイル通らないんですよね。
あとは、知らない言語とか。
>>18
VisualBasicかもしれない…申し訳ないですが本当に初心者なんです。
WindowsAPIでC++です。
0020デフォルトの名無しさん
2008/02/05(火) 23:31:09まちがた。VisualStadioかもしれない。でした。
0021デフォルトの名無しさん
2008/02/05(火) 23:33:14VisualBasicはないだろ。変数宣言がdim i as integerがVB、int i;がC(C++)だ。
>>16
途中でもいいならソースアップした方がいい。
>わからないのはテトリスの落ちてくる、テトリミノのランダム化。
乱数つかうだけ
>テトリミノの形設定。
const staticとかで宣言するだけ
>一列並んだら消える。
>上までいったらゲーム終了。
テトリミノが固定されたときに全ラインにチェックかけるだけ
>(+αだと、スコアの記録の仕方)
スコアを別ファイルに保存するだけ
002221
2008/02/05(火) 23:34:29>途中でもいいならソースアップした方がいい。
中途半端でもいいから現状のソースがあるならアップした方がいい。
typoとかいうレベルじゃねぇorz
0023デフォルトの名無しさん
2008/02/05(火) 23:48:54手をつける場所が分からず、まだ何もできていない状況ですが。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
//====================================================================
static wXsize , wYsize;
RECT rect;
char buff[1024];
//====================================================================
0024デフォルトの名無しさん
2008/02/05(火) 23:51:13//===============================
case WM_SIZE:
wXsize = LOWORD(lParam);
wYsize = HIWORD(lParam);
break;
//===============================
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 描画コードをここに追加してください...
TextOut( hdc , 10 , 10 , buff , (int)strlen(buff) );
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
0025デフォルトの名無しさん
2008/02/05(火) 23:53:09>テトリミノが固定されたときに全ラインにチェックかけるだけ
他は言っていることはわかるんですが、このチェック方法がわかりません。
0026デフォルトの名無しさん
2008/02/05(火) 23:53:250027デフォルトの名無しさん
2008/02/05(火) 23:56:45いろんな実装あるだろうけど、たとえばな・・・
フィールドにテトリミノ(の残骸)があるかどうかを確保する変数bool field[6][25]があるとする。
bool check;
for ( int y = 0; y < 25; y++ ) {
check = true;
for ( int x = 0; x < 6; x++){
check &= field[ x ][ y ];
}
if ( check ) {
// yラインを消す処理+消えたとこより上を下にずらす処理
}
}
00289
2008/02/05(火) 23:58:1500299
2008/02/06(水) 00:01:55なるほど。
ありがとうございます。
考え方はわかった気がします。
00309
2008/02/06(水) 00:25:28ほとんど何も出来ていませんが。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6004.txt
0031デフォルトの名無しさん
2008/02/06(水) 00:27:43http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6005.txt
0032デフォルトの名無しさん
2008/02/06(水) 01:55:19ありがとうございました。
助かりました。
0033デフォルトの名無しさん
2008/02/06(水) 02:32:38[2] 問題文(含コード&リンク):
問題文全文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6006.txt
用いるデータ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6008.txt
解答例
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6007.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語:C
[4] 期限:[2008年2月6日19:00まで]
[5] その他の制限:特になし
丸投げで申し訳ないです。よろしくお願いします。
0034デフォルトの名無しさん
2008/02/06(水) 03:35:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6009.txt
>>7よりもこっちが先だと思うんだけど。
0035デフォルトの名無しさん
2008/02/06(水) 04:27:35[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6010.txt
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:2008年2月7日午前10時まで
[5] その他の制限:特にありません
よろしくお願いします。
00369
2008/02/06(水) 10:16:56一応テトリス課題です。
0037デフォルトの名無しさん
2008/02/06(水) 11:05:28[2] 問題文(含コード&リンク):複素数の時粒、虚部の値をファイルから入力し、複素数の四則演算をファイルに出力するプログラムを作成せよ。
ただし演算部分は関数にして実装せよ。
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: (gcc
[3.3] 言語: C++
[4] 期限:2月6日以内
[5] その他の制限: プログラムの構成は ファイルから読み込み、複素数の四則演算、別のファイルに書き込み
です。よろしくお願いします。
0038デフォルトの名無しさん
2008/02/06(水) 12:23:43時粒って何?
std::complexを使っていいの?
0039デフォルトの名無しさん
2008/02/06(水) 12:26:05APIなのか.Netなのかどっちなのかとw
00409
2008/02/06(水) 17:54:24APIだと思うんですが、教師の言ってる意味が日本語でおk状態です。
0041デフォルトの名無しさん
2008/02/06(水) 21:28:50遅くなってすみません。
本当にありがとうございました。
0042デフォルトの名無しさん
2008/02/06(水) 22:11:27[2] 問題文:下記のプログラムの空白部分(□)を記入し,「ポインタを利用したプログラム」(report12.c)
を作りなさい
3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン: CPad for Borland
[3.3] 言語:C
[4] 期限:2008年2月12日午後18時まで
[5] その他の制限:string.h は使えない。
プログラム
#include <stdio.h>
int main(void)
{
int i;
char str[] = "Japan";
int str_length;
int data[] = {1, 2, 3, 4, 5, 0};
int *p;
/* 文字列の長さ */
str_length = □
/* 文字配列の各要素のアドレスを表示する */
for(i=0; i<str_length; i++)
{
printf("%p : str[%d] = %c\n", &str[i], i, str[i]);
}
printf("\n");
004342の続き
2008/02/06(水) 22:12:07for(i=0; i<5; i++)
{
printf("%p : data[%d] = %d\n", &data[i], i, data[i]);
}
printf("\n");
/* 配列の各要素のアドレスをポインタを利用して表示する */
p = &data[0];
while(*p)
{
printf("%p : %d\n", &data[*p], data[*p]);
p++;
}
return 0;
}
string.hを使わずに文字列の長さを出す方法がわかりません。
あと、最後のwhile文で表示するところがうまくいきません。
どなたかよろしくお願いします。
0044デフォルトの名無しさん
2008/02/06(水) 22:23:10/* 文字列の長さ */
for(str_length=0; str[str_length]; str_length++) {}
/* 配列の各要素のアドレスをポインタを利用して表示する */
p = &data[0];
while(*p)
{
printf("%p : %d\n", p, *p);
p++;
}
0045デフォルトの名無しさん
2008/02/06(水) 22:39:19助かりました。
本当にありがとうございました。
0046デフォルトの名無しさん
2008/02/07(木) 07:59:520047デフォルトの名無しさん
2008/02/07(木) 14:13:20[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6015.txt
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:2008年2月8日午前10時まで
[5] その他の制限:特にありません
非常に困っております。よろしくお願いします。
0048デフォルトの名無しさん
2008/02/07(木) 14:20:36何が問題なんだ?
そのコードはちゃんと動くけど。
0049デフォルトの名無しさん
2008/02/07(木) 14:21:38え?プログラムが完成されてるってことですか?ごめんなさい、もう少しよく考えてから出直します
0050前スレ798
2008/02/07(木) 15:15:32[2] �@ % ./a.out n
の時、nまでの順列を生成するプログラムを作る。
1. n = atoi( argv[1] ); で引数を整数に変換
2. for( i = 0; i < n; i++ ) a[i] = i+1; としてa[]を初期化
3. perm()を完成させる。
�A % ./a.out x n
の時(x,nは整数),x^{n}を計算するプログラムを作る。
x^{n} = x^{m} * x^{m} (n = 2m)
x^{n} = x * x^{m} * x^{m} (n = 2m+1)
x^{n} = 1 (n=0)
を利用して乗算回数の最小化を行うこと。
x^{n}の値と、乗算回数を出力する。
�B Ackermann関数
A(0,n) = n+1
A(m,0) = A(m-1,1) (m>0)
A(m,n) = A(m-1,A(m,n-1)) (n>0)
をするプログラムを作る。
% ./a.out m n
ただし、% ./a.out 3 12
での実行時間が0.05sec未満。
→%time ./a.out 3 12
%time ./a.out 4 x
は多分動かないのでm<=3で試すこと。
[3] 環境
[3.1] Linux
[3.2] gcc
[3.3] C
[4] 2008年2/12(火)
[5] 制限は特にないです
先週はありがとうございました!今週も・・・・よろしくお願いしますm(__)m
0051デフォルトの名無しさん
2008/02/07(木) 20:49:34[2] 問題文:f(x) = ax^2 + bx +c
g(x) = αx^2 + βx + γ
h(x) = Ax^2 + Bx + C
としたとき、合成関数 f(g(h(x)))=8次式 において、x^8〜x までの係数をそれぞれ求める
[3] 環境
[3.1] OS:XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: できるだけ早いと嬉しいです。並行して自力でもやっていますが、計算ミスが怖いです。
[5] その他の制限:特にありません
0052デフォルトの名無しさん
2008/02/07(木) 20:58:08この rnd() はなんという乱数発生法ですか?
あと、どんな乱数でも多数加えると正規分布に近づくことは確かですが、12 回たして6引くというのは(よく知られてはいますが)あまり精度はよくありません。
0053デフォルトの名無しさん
2008/02/07(木) 22:59:29[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6016.txt
[3] 環境
[3.1] OS: Win XP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C
[4] 期限: 2008年2月8日午前7時30分 (できればこの時間までにお願いしたいですが、午前中でもかまいません)
[5] その他の制限:急ぎで申し訳ありませんが、困っているのでよろしくおねがいします。
0054デフォルトの名無しさん
2008/02/07(木) 23:32:08[2] 問題文 4問です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6017.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual C++ 2005
[3.3] 言語: C
[4] 期限: 2月10日 午前0時まで
[5] その他の制限:特になし
0055デフォルトの名無しさん
2008/02/08(金) 01:11:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6018.c
0056デフォルトの名無しさん
2008/02/08(金) 01:17:1739行目くらいの
fprintf(outfp, "%s", pstart); を fputs(pstart, outfp);
に変えてください
(別にどっちでもいいんだけど、統一させないと気持ち悪いから
どうも、fprintfを使うのが癖になってるな)
0057デフォルトの名無しさん
2008/02/08(金) 01:24:30#include <stdio.h>
#include <string.h>
#define BSIZE 1024
int ismatch(char *str1, char *str2){
while(*str1 == *str2){
if(*str1 == '\0') return 0;
if(*str2 == '\0') break;
str1++, str2++;
}
return *str2 == '\0';
}
int main(int argc, char *argv[]){
FILE *in, *out;
int cnt = 0, len;
char buf[BSIZE], *p;
if(argc < 4) return fprintf(stderr, "Usage: <FILENAME> <STRING> <STRING> [FILENAME]\n"), 1;
if((in = fopen(argv[1], "r")) == NULL) return perror(argv[1]), 1;
if(argc < 5) out = stdout;
else out = fopen(argv[4], "w");
len = strlen(argv[2]);
while(fgets(buf, sizeof(buf), in))
for(p = buf; *p != '\0'; p++)
if(ismatch(p, argv[2]))
fputs(argv[3], out), p += len - 1, cnt++;
else
fputc(*p, out);
fclose(in);
if(argc >= 5) fclose(out);
printf("\"%s\"-> \"%s\",(%d)\n", argv[2], argv[3], cnt);
return 0;
}
0058 ◆TQgM1tAAxo
2008/02/08(金) 04:30:06[1] 授業単元:プログラミング
[2] 問題文: ウインドウ中でマウスクリックしたときにビットマップキャラクターが
クリック場所に動いていくようなアニメーションを作成せよ。このときの
OnLButtonUp(UINT nFlags, CPoint point)とOnTimer(UINT nIDEvent) に書くべき記述は?
*ちなみにタイマー識別IDはID1とする
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VC++2006
[3.3] 言語: C++
[4] 期限: 2008年2月10日11:59まで] または [無期限] のいずれか)
[5] その他の制限: とくになし
0059デフォルトの名無しさん
2008/02/08(金) 05:32:50const int DELAY = 3;
const int TIMER_ID = 1;
CPoint g_tp = {CLIENT_SIZE.x / 2, CLIENT_SIZE.y / 2};
CPoint g_cp = g_tp;
int OnButtonUp(UINT nFlags, CPoint point)
{
//nFlagsって何だっけ?
g_tp = point;
}
int OnTimer(UINT nIDEvent)
{
if (nIDEvent == TIMER_ID)
{
g_cp.x += (g_tp.x - g_cp.x) / DELAY;
g_cp.y += (g_tp.y - g_cp.y) / DELAY;
}
}
こんな漢字か?
0060デフォルトの名無しさん
2008/02/08(金) 08:10:23ありがとうございます。助かります。
0061デフォルトの名無しさん
2008/02/08(金) 12:59:33課題1だけど、そのアルゴリズムがバグっているという事実はどうしてくれようか。
#include <stdio.h>
static void print(int * a, int num)
{
int ic;
for (ic = 0; ic < num; ++ic) {
printf("%d%s", a[ic], ic < num - 1 ? ", " : "\n");
}
}
static void shift(int * a, int n)
{
int t = a[n - 1];
int i;
for (i = n - 1; i >= 1; --i) { // ←アルゴリズムどおりならint i = n - 2になる
a[i] = a[i - 1];
}
a[0] = t;
}
int main()
{
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
print(a, sizeof(a) / sizeof(*a));
shift(a, sizeof(a) / sizeof(*a));
print(a, sizeof(a) / sizeof(*a));
return 0;
}
0062デフォルトの名無しさん
2008/02/08(金) 13:55:53課題2は、n=5のときの値が違うけど気にしない方向で(ぉぃ
つーか、これも漸化式が読み間違いを引き起こしやすいんだけど。
#include <stdio.h>
#include <math.h>
int main()
{
double p = 2 * sqrt(3);
double q = 3;
for (int n = 1; n <= 20; ++n) {
printf("n = %d: %.15g, %.15g, %.15g\n", n, p, q, (p + q) / 2);
double r = 1 / p + 1 / q;
p = 2 / r;
q = sqrt(p * q); // p(n+1) * q(n) と解釈。p(n) + q(n)に見えなくもない
}
return 0;
}
0063デフォルトの名無しさん
2008/02/08(金) 14:19:27// 課題3-1
#include <stdio.h>
int main(void){
int i,a[41] = {0, 1,};
printf("%d:%d\n",0,a[0]);
printf("%d:%d\n",1,a[1]);
for(i=2;i<=40;i++){
a[i] = a[i-1] + a[i-2];
printf("%d:%d\n",i,a[i]);
}
return 0;
}
// 課題3-2 修正版
#include<stdio.h>
int fib(int *a, int n){
if(n == 0) return 0;
else if (n==1) return 1;
else if (a[n]!=-1) return a[n];
else return fib(a, n-1)+fib(a, n-2);
}
int main(){
int i, a[41] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,};
for(i=0;i<=40;i++){
a[i] = fib(a, i);
printf("%d:%d\n",i,a[i]);
}
return 0;
}
0064デフォルトの名無しさん
2008/02/08(金) 14:51:08// 課題3-2を、関数内で完結させるように修正してみた。
#include <stdio.h>
static int fib(int n)
{
static int a[] = {
0, 1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
};
if (n >= sizeof(a) / sizeof(* a) || a[n] == -1) {
a[n] = fib(n - 1) + fib(n - 2);
}
return a[n];
}
int main()
{
for (int n = 0; n <= 40; ++n) {
printf("%d:%d\n", n, fib(n));
}
return 0;
}
0065デフォルトの名無しさん
2008/02/08(金) 15:54:00ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6020.cpp
アッカーマン関数0.05secは無理だった
0066デフォルトの名無しさん
2008/02/08(金) 16:24:10アッカーマン関数は、ack(3, 12)の段階で呼び出し回数が7億を越えるからシンプルな実装じゃその所要時間は無理でしょ。
>54に書かれている、キャッシュする配列を用意する方法でも呼び出し回数は大して減らないから(ハンドリングコストの所為で)遅くなるし。
# フィボナッチ数の場合は、キャッシュすると爆速だけど。
ということで、手元の所要時間を。
./ackCache 3 7
ack(3, 7):1021
0.01sec
./ackCache 3 8
ack(3, 8):2045
0.04sec
./ackSimple 3 12
ack(3, 12):32765
2.29sec
./ackCache 3 12
ack(3, 12):32765
10.52sec
# あー気にいらね
0067デフォルトの名無しさん
2008/02/08(金) 16:42:10呼び出し回数は大して減らないって?
Ack(3, 12)なら、81923回の呼び出しで求まるし、一瞬だけど。
0068デフォルトの名無しさん
2008/02/08(金) 16:45:17あまりやりすぎると数式で求めろといわれそうだがwww
int ackermann(int m, int n)
{
if(m==0) return n+1;
if(m==1) return n+2;
if(m==2) return n*2+3;
if(n==0) return ackermann(m-1, 1);
return ackermann(m-1, ackermann(m, n-1));
}
006966
2008/02/08(金) 16:59:11m=4, n=1 m=3, n=12
シンプル版 9.9sec 2.4sec
キャッシュ版 41.4sec 10.3sec
ショートカット版 0.00sec 0.00sec
ショートカット版は、mが1のときのアッカーマン関数を解いた結果を導入したもの。
# 解く過程はこれ。
ack(1, 0) ⇒ ack(0, 1) ⇒ 2
ack(1, 1) ⇒ ack(0, ack(1, 0)) ⇒ ack(1, 0) + 1 ⇒ 3
ack(1, 2) ⇒ ack(0, ack(1, 1)) ⇒ ack(1, 1) + 1 ⇒ 4
ack(1, 3) ⇒ ack(0, ack(1, 2)) ⇒ ack(1, 2) + 1 ⇒ 5
:
:
以下同様に。
ソースは後で。
007066
2008/02/08(金) 17:02:37>>67
>呼び出し回数は大して減らないって?
だから、>54の問題にあるようなキャッシュについてですがな。
m=1について解いてしまえば早くなりましたがな。
癪だから以下に。
--
#include <stdio.h>
#include <stdlib.h>
// #include <stdbool.h>
static int ack(unsigned m, unsigned n)
{
// static int a[4][16];
// bool inRange = m < sizeof(a) / sizeof(* a) && n < sizeof(* a) / sizeof(** a);
int val;
// if (inRange && a[m][n] != 0) return a[m][n];
if (m == 0) {
val = n + 1;
} else if (m == 1) { // short cut for ack(1, n)
val = n + 2; // ack(1, n) -> ack(0, ack(1, n-1)) -> ack(1, n-1) + 1
} else if (n == 0) {
val = ack(m - 1, 1);
} else {
val = ack(m - 1, ack(m, n - 1));
}
// if (inRange) a[m][n] = val;
return val;
}
コメント部分を生かせばキャッシュされるけど、最早どうでもいいなぁw
007166
2008/02/08(金) 17:16:12それがアリなら、これも追加しとこうぜ。
if(m==3) return (1 << (n + 3)) - 3;
>>70
いやだから、m = 1やm = 2について解いたりせずキャッシュのみで、
Ack(3, 12)は81923回で導き出せるんだって。
007266
2008/02/08(金) 18:10:54>>71
アッカーマン関数は、その引き数に自身の結果が使われるからm * n 程度のキャッシュじゃダメだったのね。
取り敢えず、4x40000にしたら無事すんなり終わりましたわさ。
それにしても、mが0、1のときは一次式で2のときは2次式なのに、3でいきなり2の冪か。
m=4について解いたらとんでもない式になりそうですな。
0073デフォルトの名無しさん
2008/02/08(金) 21:34:010074デフォルトの名無しさん
2008/02/08(金) 22:23:16[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6015.txt
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C言語
[4] 期限:2008年2月11日午前10時まで
[5] その他の制限:特にありません
今の状態では、3008年2月のカレンダーしか表示されません。
これを何年何月を入力すれば、その年月のカレンダーが表示されるようにしたいです。
よろしくお願いします。
0075 ◆TQgM1tAAxo
2008/02/08(金) 22:24:28[エラー報告]
58で質問した者です!
即対応していただきありがとうございます。
しかし、その記述をいれてみたところエラーが生じてしまい、またいきづまってしまいました。
そのエラー内容を載せます。
「error C2018:文字'0x81'は認識できません。
error C2018:文字'0x40'は認識できません。
error C2552:'g_tp':初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2039:'x':7CSize'のメンバではありません。」
主に1,2番目と同様のエラーが20個くらい出ています(´・ω・`)なんだかよく分かりません。
一応また質問テンプレ載せておきます。
【質問】
[1] 授業単元:プログラミング
[2] 問題文: ウインドウ中でマウスクリックしたときにビットマップキャラクターが
クリック場所に動いていくようなアニメーションを作成せよ。このときの
OnLButtonUp(UINT nFlags, CPoint point)とOnTimer(UINT nIDEvent) に書くべき記述は?
*ちなみにタイマー識別IDはID1とする
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン:VC++6.0 .NET
[3.3] 言語: C++
[4] 期限: 2008年2月10日11:59まで
[5] その他の制限: とくになし
なんどもすいません。
0076デフォルトの名無しさん
2008/02/08(金) 22:36:21全角スペースを使うな
0077デフォルトの名無しさん
2008/02/08(金) 22:37:130078 ◆TQgM1tAAxo
2008/02/08(金) 23:00:19どうもすいません。
全角を消した結果でたエラーを載せます!
「error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2065: 'CLIENT_SIZE' : 定義されていない識別子です。
error C2228: '.x' : 左側がクラス、構造体、共用体ではありません。
error C2228: '.y' : 左側がクラス、構造体、共用体ではありません。
error C3861: 'CLIENT_SIZE': 識別子は、引数依存の照合を使用しても見つかりません。
error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2065: 'CLIENT_SIZE' : 定義されていない識別子です。
error C2228: '.x' : 左側がクラス、構造体、共用体ではありません。
error C2228: '.y' : 左側がクラス、構造体、共用体ではありません。
error C3861: 'CLIENT_SIZE': 識別子は、引数依存の照合を使用しても見つかりません。」
ちなみに、すべてCPoint g_tp = {CLIENT_SIZE.x / 2, CLIENT_SIZE.y / 2};
の文でエラーがでています!
0079デフォルトの名無しさん
2008/02/08(金) 23:28:18>>59 はコードの一部だから、あれだけでは動かないよ。
そもそも問題は、「〜アニメーションを作成せよ」なのか
「〜に書くべき記述を答えよ」なのか、どちらだ?
0080デフォルトの名無しさん
2008/02/08(金) 23:34:51まさかとは思うが、>59の一行目をコピーしていないって落ちじゃないよな?
0081 ◆TQgM1tAAxo
2008/02/08(金) 23:53:281行目を記述してもエラーがでてしまいます(´・ω・`)
ちょっとエラー内容がかわったのでまた載せます!
「error C2552: 'CLIENT_SIZE' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
'CPoint' : ベースを含む型はアグリゲートではありません。
error C2039: 'x' : 'CSize' のメンバではありません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atltypes.h(26) : 'CSize' の宣言を確認してください。
error C2039: 'y' : 'CSize' のメンバではありません。
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atltypes.h(26) : 'CSize' の宣言を確認してください。
error C2552: 'CLIENT_SIZE' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2552: 'g_tp' : 初期化子リストによる個別の識別子の初期化に誤りがあります。
error C2039: 'x' : 'CSize' のメンバではありません。
error C2039: 'y' : 'CSize' のメンバではありません。」
ちなみに、課題は授業で作ったMFCアニメーションデータを改変し、マウスクリックで
キャラクターを自由に移動させるようにしろというものです。
なので、onDrawなどの関数やその他のものはそろっています。
キャラクターを上下左右に動かす方法は分かるのですが、
クリックされた場所に動かすという記述方法が分からなくて困っています(´・ω・`)
0082デフォルトの名無しさん
2008/02/08(金) 23:56:290083 ◆TQgM1tAAxo
2008/02/09(土) 00:04:35下にキャラクターが進むときはOnTimerに
y+=10;(yはキャラクターのいるy座標値)
と記述すればうごくのですが、クリックしたとこにうごかすのがどうしてもできなくて・・(´・ω・`)
スムーズに動かず、いっきにクリックした位置に移動してしまったりの失敗の繰り返しです(´・ω・`)
どうしたら良いでしょうか?
ほんと頭悪くてすいません(´・ω・`)
0084デフォルトの名無しさん
2008/02/09(土) 00:04:57キャラクターをクリックされた場所に動かすという記述方法は分かるのですが、
onDrawなどの関数やその他のものが分からなくて困っています(´・ω・`)
0085 ◆TQgM1tAAxo
2008/02/09(土) 00:09:43どういうことですか?(´・ω・`)
どうしたら良いのでしょうか?(´・ω・`)
0086デフォルトの名無しさん
2008/02/09(土) 00:13:450087デフォルトの名無しさん
2008/02/09(土) 00:18:33�BAckermann関数
キャッシュのやつを作ってみたので一応添付
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6022.txt
ショートカットを加えると確保領域が少なくすむのは何故なんだろ・・・・
0088デフォルトの名無しさん
2008/02/09(土) 02:28:13OnLButtonUpとOnTimerに書くべき記述を答えれば良いだけじゃなかったのか
DELAYの値をもっと大きくしてみろ
もしくは
int OnTimer(UINT nIDEvent)
{
if (TIMER_ID == nIDEvent)
{
//X軸方向の移動
if (g_cp.x < g_tp.x) {g_cp.x++;}
else if (g_cp.x > g_tp.x) {g_cp.x--;}
//Y軸方向の移動
if (g_cp.y < g_tp.y) {g_cp.y++;}
else if (g_cp.y > g_tp.y) {g_cp.y++;}
}
}
で代替。コピペじゃなくて自分で打つように
あと、タイマーイベントの間隔を遅めにしてくれ
ちなみに、cp=キャラクターポジション、tp=ターゲットポジションの略ね
OnTimerとかってMFCのパーツだよな?使ってないからサッパリ思い出せんw
0089デフォルトの名無しさん
2008/02/09(土) 02:46:43それを>>58が理解できると思うか?
またエラーが出るって言ってくるのがオチだろ。
0090 ◆TQgM1tAAxo
2008/02/09(土) 05:43:14丁寧にありがとうございます!でも、もう一回考えて、ちょっと違う方法ですが自分で解決しました。
どうもありがとうございます
>>89
考えたらできたわ
0091デフォルトの名無しさん
2008/02/09(土) 09:38:030092デフォルトの名無しさん
2008/02/09(土) 12:29:510x1234を0x123fにするには (28) と (29) を行う。その演算子の
記号は (30) である。 また、上位1バイトを0にし、下位1バイトをそのままに
するには、 (31) と (32) を行う。その演算子の記号は (33) である。
ビットを反転するには、 (34) と排他的論理和を行うか、ビット演算子の反転
を使用する。そのビット演算子(反転)の記号は (35) である。
(28)の解答群
ア 0x0000 イ 0x000F ウ 0x1230 エ 0xfff0 オ 0xffff
(29)、(32)の解答群
ア 論理和 イ 論理積 ウ 排他的論理和 エ 否定論理和 オ 否定論理積
(30)、(33)、(35)の解答群
ア & イ | ウ ^ エ ~ オ !
(31)の解答群
ア 0x0001 イ 0x000f ウ 0x00ff エ 0xf000 オ 0xff00
(34)の解答群
ア 0x0000 イ 0x0001 ウ 0x1111 エ 0x1010 オ 0xffff
0093デフォルトの名無しさん
2008/02/09(土) 12:30:33えば、double型の変数aの小数点以下を切り捨てるには、 (36) と記述する。
キャスト演算子は (37) であり、算術演算子より優先順位が (38)
ため、int型の変数a、bの除算を実数の精度で計算し、その結果をdouble型の変数c
に格納する記述は (39) である。
また、キャスト変換はポインタにも有効であり、int型の配列の内容を1バイトずつ
参照することができる。
なお、次のプログラムの出力結果は処理系によって異なる場合があるが、本問では考
慮しないものとする。
#include <stdio.h>
main()
{
int a[] = {0x01020304, 0x05060708};
int i;
char *p;
p = (40) ;
for (i = 1;i <= 8; i++)
printf(゙%x゙,*p++);
}
0094デフォルトの名無しさん
2008/02/09(土) 12:31:51(36)の解答群
ア int a イ int (a) ウ (int a) エ (int) a オ a(int)
(37)の解答群
ア 単項演算子 イ 関係演算子 ウ 比較演算子 エ 論理演算子 オ 条件演算子
(38)の解答群
ア 高い イ 低い
(39)の解答群
ア c = a / b イ (double)c = a / b ウ c = (double)a / b エ c = (double)(a / b)
(40)の解答群
ア char a イ char *a ウ (char) a エ (char) *a オ (char *) a
0095デフォルトの名無しさん
2008/02/09(土) 12:32:22どなたか解答をお願いいたします。
0096デフォルトの名無しさん
2008/02/09(土) 12:35:15ttp://pc11.2ch.net/test/read.cgi/tech/1201083176/808
0097デフォルトの名無しさん
2008/02/09(土) 12:58:330098デフォルトの名無しさん
2008/02/09(土) 13:17:07・yearとmonthを入力できるようにする。
・1日の曜日を求める。
0099デフォルトの名無しさん
2008/02/09(土) 13:29:41ありがとうございます。えっと、つまり…どの部分をどう変えればいいんでしょうか…orz
0100デフォルトの名無しさん
2008/02/09(土) 13:35:24int year = 2008;
int month = 2;
int first_dow = 5; /* 1日は金曜日 */
を変えればいい。
year, monthはそれぞれscanf()か何かで入力すればいいし、first_dowは問題に書いてある通り。
>(課題では,前回のプログラムを使って1日の曜日を計算する)
つまり、「前回のプログラム」がないと作れない。
0101デフォルトの名無しさん
2008/02/09(土) 13:37:590102デフォルトの名無しさん
2008/02/09(土) 13:55:43すいません これもできれば...
問?
関数定義に関する次の記述中の()に入れる適切な字句を解答群の中か
ら選べ。なお、同じ解答を複数回使用してもよい。
関数の基本構成は次のようになっている。
記憶クラス 型 関数名(引数の型と名前)
{
宣言と文
}
関数の記憶クラスには、その関数をほかのモジュールから参照できる (1) 、
その関数をほかのモジュールから参照できない (2) があり、特に指定しない場
合は (3) になる。
関数の型は、その関数が (4) 文で戻すデータの型である。また、特殊な型と
して (5) があり、戻り値をもたないことを示す。型が (6) の戻り値
を使用する場合には、省略することができる。
関数でデータのやりとりをするには引数を用いる。関数の定義側の変数を
(7) と呼び、この関数を呼びだす側の引数を (8) と呼ぶ。
(1)〜(3)、(5) (6)の解答群
ア char イ extern ウ int エ static オ void
(4)の解答群
ア break イ continue ウ exit エ goto オ return
(7) (8)の解答群
ア 定数 イ 仮引数 ウ 元引数 エ 実引数 オ ポインタ変数
0103デフォルトの名無しさん
2008/02/09(土) 14:04:51(1)extern
(2)static
(3)extern
(4)return
(5)void
(6)int
(7)仮引数
(8)実引数
0104デフォルトの名無しさん
2008/02/09(土) 14:06:27ファイル入出力に関する次の記述の正誤を、解答群の中から選べ。
(9) fopen関数のエラー時の戻り値は NULL である。
(10) ファイルのオープンモードを ゙a゙ (追加書き込み)と指定した場合、ファイルが存
在しない場合はエラーとなる。
(11) プログラム中に fopen関数を使用した場合、 fclose関数を記述していないとコ
ンパイルエラーが発生する。
(12) fscanf関数のエラー時の戻り値は NULL である。
(13) fgets関数のファイル終了時の戻り値は EOF である。
(14) fgets関数は読み込んだ文字列の最後に ゙\0゙ を付加する。
(15) fgetc関数及びgetc関数は、ファイルから1文字ずつ読み込む。
(16) ungetc関数はファイルから読み込んだ文字を、まだ読んでいなかったものとし
て扱う。
解答群
ア 正しい イ 誤り
0105デフォルトの名無しさん
2008/02/09(土) 14:08:550106デフォルトの名無しさん
2008/02/09(土) 14:11:01(9) ○ (10) (多分)× (11) × (12) (0がNULLと同等に扱えるから)○
(13) × (14) ○ (15) ○ (16) (なんか表現が微妙だが)○
0107デフォルトの名無しさん
2008/02/09(土) 14:15:39(12) について
fscanf は入力エラーのとき EOF を返す
0108デフォルトの名無しさん
2008/02/09(土) 14:15:480109デフォルトの名無しさん
2008/02/09(土) 14:36:44ありがとうございます!!本当に助かりました!
0110デフォルトの名無しさん
2008/02/09(土) 14:40:35*buffer = '0' + ((char)(data >> 8) & 0x0F);
if(((data >> 8) & 0x0F) > 9)
*buffer += 7;
buffer++;
*buffer = '0' + ((char)(data>>4) & 0x0F);
if(((data>>4) & 0x0F) > 9)
*buffer += 7;
*buffer++;
*buffer = '0' + ((char)data & 0x0F);
if((data & 0x0F) > 9)
*buffer += 7;
}
これは、10ビットバイナリ値を3桁の16進数へ変換するらしいのですが
これを4桁の10進数にするには、どのように書けば良いのでしょうか。
cは全くの初心者で、本来はで基礎から勉強すれば良いのですが、すぐに
この部分だけのソースが欲しいのです。だれか、お助けください。
0111デフォルトの名無しさん
2008/02/09(土) 14:46:49sprintf(buffer, "%04d", data);
0112110
2008/02/09(土) 14:55:51ありがとうございます。こんな早く対応して頂けるなんて感謝です。
おかげさまで4桁の数字が表示されました。
ただ、プログラム全体としては、桁が増えた分動かなくなってしまいました。
もう少し、頑張ってみます。
今後とも、どうぞよろしくお願いします。
0113デフォルトの名無しさん
2008/02/09(土) 14:55:58{
int i;
for (i = 12; i >= 0; i -= 4)
*buffer++ = "0123456789ABCDEF"[(data >> i) & 15];
}
0114デフォルトの名無しさん
2008/02/09(土) 14:56:41プログラムの説明
このプログラムの目的は、コマンドラインより入力されたビット列を15ビットごとに
パリティビットを付加し、16進数で表示することである。
コマンドラインから渡される引数には、ビット列のほかに偶数パリティ、奇数パリティ
を選択するパラメータがある。
ビット列は255ビット以内の任意の長さであり、15ビットの倍数に満たない場合は、
足りないビットには0を挿入する。
なお、コマンドラインの入力に間違いはないものとする。
コマンドラインの書式
プログラム△ビット列(任意の長さ)△パリティの指定
0115デフォルトの名無しさん
2008/02/09(土) 14:59:550 偶数パリティ
1 奇数パリティ
※「△」は1文字以上の空白文字を示す。
コマンドラインの例 (プログラム名が「toi7」の場合)
toi7 0101001100101010001010010010101011010 0
処理手順
�@ コマンドラインより渡されたビット列を配列にコピーする。
�A 配列に格納された文字列を、先頭から1文字ずつ取り出し以下の処理を行う。
・取り出した文字(ビット)の1の個数をカウントする。
・15ビットの数値に変換するために、変換後の数値を左に1ビットシフトし、数値
に変換した文字(ビット)とのビット演算を行う。
�B15文字ごとに以下の処理を行う。
・変換後の数値を左に1ビットシフトする。なお、ビット列が15文字に満たない場合は、足りない分左にシフトする。
・カウントした1の個数から、パリティビットを付加する。偶数パリティであれば
1の個数が偶数になるように、奇数パリティであれば奇数になるようにパリティ
ビットを付加する。
・パリティビットを付加した変換後の数値を16進数で表示する。
0116110
2008/02/09(土) 15:08:17ありがとうございます。 4桁の数字が、ちゃんと表示されました。
ただ、10進数の表示をしたいのですが英字まで表示されてしまいます。
引き続き、アドバイス頂けた助かります。
ほんと、すみません。
0117デフォルトの名無しさん
2008/02/09(土) 15:18:50C:\>toi7 0101001100101010001010010010101010010 0
532B
1495
A401
※「C:\>」はコマンドプロンプトを示す。
0118デフォルトの名無しさん
2008/02/09(土) 16:22:36#include <stdio.h>
int str2bit(char *str, char *pal, int , int);
int main(int argc, char **argv)
{
int i = 0;
int cnt = 0;
int hyoji = 0;
int res = 0;
char array[256];
memset(array, 0, sizeof(array));
memcpy(array, argv[1], strlen(argv[1]));
for ( i = 0 ; i < strlen(array); i++ ) {
if ( i && !(i % 15) ) { /* 区切り */
/* bit化 */
res = str2bit(array, argv[2]
, hyoji * 15, strlen(array));
fprintf(stdout, "0x%4x\n", res);
hyoji++;
}
}
res = str2bit(array, argv[2], hyoji * 15, strlen(array));
fprintf(stdout, "0x%4x\n", res);
return 0;
}
0119デフォルトの名無しさん
2008/02/09(土) 16:24:15int str2bit(char *str, char *pal, int cur, int max)
{
int res = 0;
int i = 0;
int cnt =0;
char t_byte[16+1];
memset(t_byte, 0, sizeof(t_byte));
for ( i = 0; i < 15; i++ ) {
t_byte[i] = ( cur + i >= max ) ? '0' : str[cur + i];
if ( t_byte[i] == '1' ) {
cnt++;
res += 1;
}
res <<= 1;
}
if ( *pal == '0' ) { /* 偶数パリティ */
if ( cnt % 2 )
res++;
} else { /* 奇数パリティ */
if ( !(cnt % 2 ) )
res++;
}
return res;
}
できたから載せただけ。
0120デフォルトの名無しさん
2008/02/09(土) 16:29:45特定しましたよ。
0121デフォルトの名無しさん
2008/02/09(土) 16:34:26何を特定できた??
0122デフォルトの名無しさん
2008/02/09(土) 16:36:01#include<stdio.h>
void encode(char *bits, int parity)
{
unsigned short value=0;
int i, bitnum=0;
for(i=0;bits[i];i++)
{
value=(value<<1)+bits[i]-'0';
bitnum+=value&1;
if((i+1)%15==0)
{
printf("%04X\n", (value<<1)+((bitnum+parity)&1));
value=0;
bitnum=0;
}
}
if((i%15))
{
value<<=(15-(i%15));
printf("%04X\n", (value<<1)+((bitnum+parity)&1));
}
}
int main(int argc, char *argv[])
{
if(argc==3) encode(argv[1], atoi(argv[2]));
return 0;
}
0123デフォルトの名無しさん
2008/02/09(土) 17:43:15[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6023.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: (2月12日まで)
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
プログラムの一部 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6024.txt
コンパイルできてもセグメントエラーorz どなたかお願いします。
0124110
2008/02/09(土) 17:59:53int i;
for (i = 12; i >= 0; i -= 4)
*buffer++ = "0123456789"[(data >> i) & 9];
}
アドバイスいただいた、プログラムを10進数表示させようと上のように書き換えたのですが
このように書くと0189しか表示されません。
こんな簡単な奴ふざけるなと思わせてしまって申し訳ないのですが
どうか、教えていただけないのでしょうか。
初心者のスレかくのが本来ですが、マルチぽくなるのでこのまますみません。
0125デフォルトの名無しさん
2008/02/09(土) 18:14:58data>>iで済むのは16進数だからであって、
10進数で同じ方法は考えないほうがいい。
0126デフォルトの名無しさん
2008/02/09(土) 18:20:09{
unsigned tmp;
for(tmp=1000;tmp>0;tmp/=10)
{
*buffer++=((data/tmp)%10)+'0';
}
}
0127110
2008/02/09(土) 18:37:44アドバイスありがとうございます。無事に動作するようになりました。
ASMを勉強していてASMでの書式など有る程度把握出来てきたのですが
c言語は、書式がまるっきり分からず困っていました。
c言語は生活に十分必要な物だと思いますのでこれを機に勉強をしようとおもいます。
とても困っていたので、ほんと感謝の気持ちでいっぱいです。
ありがとうございました。
0128デフォルトの名無しさん
2008/02/09(土) 19:32:03プログラム
/*パリティビットの生成*/
#include <stdio.h>
#include <string.h>
main(int argc,char *argv[])
{
char dum[256];
int num,cnt;
int i = 0,j;
(41) ;
while(dum[i] != `\0`){
num = cnt = 0; for(j=0;j<15 && dum[i] != `\0`;j++){
(42) ;
num <<= 1;
(43);
}
for (;j < 16; j++)
num <<= 1;
if ( (44) == (1 ー ( (45) ー '0')))
num |= 1;
printf("%x\n",num);
}
}
0129デフォルトの名無しさん
2008/02/09(土) 19:44:13すいませんm(_ _)m
しばらく書き込み出来なかったもんで..
上記の(41)〜(45)を答えるんですが..
(41)の解答群
ア dum = argv イ dum = argv[1] ウ strcpy(dum,argv) エ strcpy(dum,argv[1])
(42)の解答群
ア cnt += 1 イ cnt += dum[i] + 1 ウ cnt += dum[i] - `0' エ cnt += dum[i] + `1'
(43)の解答群
ア num |= dum[i] - `0' イ num |= dum[i++] - `0' ウ num &= dum[i] - `0' エ num &= dum[i++] - `0'
(44)の解答群
ア cnt イ cnt / 2 ウ cnt % 2 エ cnt * 2
(45)の解答群
ア argv[1] イ *argv[1] ウ argv[2] エ *argv[2]
です
0130デフォルトの名無しさん
2008/02/09(土) 21:05:59[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6025.txt
input.txt: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6026.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語:C
[4] 期限:2月13日正午
[5] その他の制限:
計算式の記述が分かり辛いですが、どうぞよろしくお願いいたします。
0131デフォルトの名無しさん
2008/02/09(土) 22:31:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6027.txt
0132デフォルトの名無しさん
2008/02/10(日) 01:19:11ありがとうございます!
0133デフォルトの名無しさん
2008/02/10(日) 02:10:32プログラム >>128
解答群 >>129
すいませんm(_ _)m どなたか解答をお願いします。
0134デフォルトの名無しさん
2008/02/10(日) 03:15:38(43):イ
(44):ウ
(45):ウ
但し(41)の答えが何なのか、これが分らない
0135デフォルトの名無しさん
2008/02/10(日) 03:19:59但し(41)の答えがn(ry
自分でやってくれ
0136デフォルトの名無しさん
2008/02/10(日) 03:21:16エ じゃないかな
0137デフォルトの名無しさん
2008/02/10(日) 04:10:18一つくらい自分でやらせようとしてたんだが…
0138デフォルトの名無しさん
2008/02/10(日) 04:12:39ググってもすぐ分かるというのに
0139デフォルトの名無しさん
2008/02/10(日) 10:34:58(41)エ
(42)ウ
(43)イ
(44)ウ
(45)エ
これでOKでしょうか?
0140デフォルトの名無しさん
2008/02/10(日) 11:03:41main()
{
char x[3][7] = {"first","second","third"};
char *z[3] = {"first","second","third"};
char **p;
p = z;
p++;
�@ printf("%c\n",**p);
�A printf("%s\n",*p+1);
�B printf("%s\n",*(p+1)+1);
これだと xの要素数は21個で ポインタ配列zの要素数は19個
�@�A�Bのprintfの表示は �@がs �Aがecond �Bがhird
でいいですかね?
0141デフォルトの名無しさん
2008/02/10(日) 11:35:41これで合ってるのかな。srandがよくわからない。。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6028.c
>>140
合ってる
0142デフォルトの名無しさん
2008/02/10(日) 13:18:183個だろ
014354
2008/02/10(日) 15:24:52めっちゃかんしゃです。
0144デフォルトの名無しさん
2008/02/10(日) 15:38:46プログラム
/*語尾変換プログラム*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int f_read(void);
int w_cnv(int ln);
#define CHRSIZE sizeof(char)
char str[20][(254 + 2)* CHRSIZE * 2 + sizeof(char)];
main()
{
int ln;
int i;
int cnt;
ln = f_read();
cnt = w_cnv(ln);
for(i=0;i<ln;i++) printf("%s",str[i]);
printf("\n文章中を%d件変換し、\n",cnt);
printf("文末を%d件付加しました。\n",ln);
}
/*ファイル入力*/
int f_read(void)
{
FILE *fp;
0145デフォルトの名無しさん
2008/02/10(日) 15:39:16char buf[256];
int cnt = 0;
if((fp = fopen("word.dat","r")) == NULL){
printf("入力ファイルがオープンできません\n");
exit(1);
}
while( (46) != NULL)
(47) ;
fclose(fp);
return(cnt);
}
/*変換*/
int w_cnv(int ln)
{
int i;
int cnt = 0;
char w_str[256];
for(i=0;i<ln;i++){
while( (48) != NULL){
strcpy(w_str,strstr(str[i],"な") + CHRSIZE * 2);
strcpy(strstr(str[i],"な"),"にゃ");
(49) ;
cnt++;
}
strcpy( (50) ,"にゃ\n");
}
return(cnt);
}
0146デフォルトの名無しさん
2008/02/10(日) 15:40:31ア fgets(buf,255,fp) イ fgets(fp,buf,255) ウ fscanf("%s",buf,fp) エ fscanf(fp,"%s",buf)
(47)の解答群
ア strcpy(buf,str[cnt++]) イ strcpy(buf,str[cnt+1],buf) ウ strcpy(str[cnt++],buf) エ strcpy(str[cnt+1],buf)
(48)の解答群
ア strcat(str[i],"な") イ strchr(str[i],"な") ウ strcpy(str[i],"な") エ strstr(str[i],"な")
(49)の解答群
ア strcat(w_str,str[i]) イ strcat(str[i],w_str) ウ strcpy(w_str,str[i]) エ strcpy(str[i],w_str)
(50)の解答群
ア strchr(str[i],`\0') イ strchr(str[i],`\n') ウ strchr(w_str[i],`\0') エ strchr(w_str[i],`\n')
文中の「な」を「にゃ」に変換し、さらに文末の語尾に「にゃ」を付加して表示するプログラムです
(46)〜(50)の答はどうなりますかね?
0147デフォルトの名無しさん
2008/02/10(日) 16:16:12うざいからうpロダ使ってくれないかな。
0148デフォルトの名無しさん
2008/02/10(日) 17:03:18[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6029.txt
[3]
環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:VC
[3.3] 言語:C
[4] 期限:2月13日
[5] その他の制限:
前回は本当にありがとうございました。
今回もよろしくお願いいたします。
0149デフォルトの名無しさん
2008/02/10(日) 17:42:59http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6030.txt
0150デフォルトの名無しさん
2008/02/10(日) 18:09:40[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6031.lzh
[3]
環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限:2月13日
[5] その他の制限:
動的計画法についての課題です。問題が図表付きなので圧縮しています。
0151デフォルトの名無しさん
2008/02/10(日) 20:25:53ありがとうございました。
0152デフォルトの名無しさん
2008/02/10(日) 21:05:23[2] 問題文:入力された文字列を逆に並べて表示せよ(例:TOKYO→OYKOT)
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:Microsoft Visual C++ 2005 Express Edition
[3.3] 言語:C
[4] 期限:2008年2月13日8:00まで
[5] その他の制限:#include <stdio.h>で使える命令のみ
一次元配列のみ
0153デフォルトの名無しさん
2008/02/10(日) 21:10:05[2]時計の針2本がなす角(中学入試の算数問題でよく出題される問題)
問:キーボード上から時と分を入力し、その時間とそれを指す長針・短針
のなす角を求める。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6032.c
[3] 環境
[3.1] OS:Windows
[3.2] bcc32
[3.3] 言語: C
[4] 期限: [2008年2月12日まで]
[5]その他の制限:
入力・計算・出力部分は必ず関数化し、mainの中でそれらを呼び出すようにする
なす角θを計算する部分は成功しましたが(そこまでの完成版はリンクしたプログ
ラムを参照)、キーボード上から入力した時間をうまく表示することができません。出力は、
??:?? なす角:??°
とします。どうか宜しくお願いします。
0154デフォルトの名無しさん
2008/02/10(日) 21:11:22#include <stdio.h>
int main(void)
{
char *p, str[256];
scanf("%s", str);
p = str;
while(*p) p++;
while(p--!=str) putchar(*p);
return 0;
}
0155デフォルトの名無しさん
2008/02/10(日) 21:24:02自分の技量不足で申し訳ありませんが質問してもよろしいでしょうか?
関数の*pの*は何か意味があるのでしょうか?
0156デフォルトの名無しさん
2008/02/10(日) 21:24:35>>149
0157デフォルトの名無しさん
2008/02/10(日) 21:24:35void output(int s, int t, double r1)
{
printf("%d:%d なす角:(%.1f)°\n", s, t, (double)r1);
}
にしてh1とm1渡すだけじゃね?
0158デフォルトの名無しさん
2008/02/10(日) 21:24:52[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6033.txt
[3] 環境
[3.1] OS: Win XP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語: C
[4] 期限: 2008年2月12日午前7時00分
[5] その他の制限:色々な処理方法があるそうですが、
なるべくレベルが低い方法でよろしくおねがいします。
0159デフォルトの名無しさん
2008/02/10(日) 21:27:27間接参照。
0160デフォルトの名無しさん
2008/02/10(日) 21:30:03ありがとうございます!
0161デフォルトの名無しさん
2008/02/10(日) 21:56:55#include <stdio.h>
static int su[9], cnt;
void perm(int *a, int j){
int i;
if(j == 9){
int x = 0, y = 0;
for(i = 0; i < 6; i++) x = 10*x + a[i];
for(i = 6; i < 9; i++) y = 10*y + a[i];
if(x%y == 0){
printf("%d / %d = %d\n", x, y, x/y);
cnt++;
}
return;
}
for(i = 0; i < 9; i++)
if(su[i] == 0){
su[i] = 1;
a[j] = i + 1;
perm(a, j + 1);
su[i] = 0;
}
}
int main(void){
int a[9];
perm(a, 0);
printf("合計パターン数 = %d\n", cnt);
return 0;
}
0162デフォルトの名無しさん
2008/02/10(日) 22:35:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6034.txt
0163デフォルトの名無しさん
2008/02/10(日) 23:00:27>>145
>>146
ですが
解答はいかがでしょうか...
携帯からで見づらくて大変すいません...m(_ _)m
0164デフォルトの名無しさん
2008/02/10(日) 23:02:13>>1
0165デフォルトの名無しさん
2008/02/10(日) 23:15:130166デフォルトの名無しさん
2008/02/10(日) 23:15:22157番さんのおっしゃる通りにしたら、「output関数における呼び出し時のパ
ラメータが足りない」というエラーが出ました。157番さんの通りにプログラム
を設計するなら、mainの中でoutputなどの各種呼び出しをどのようにすれば良い
のか教えて下さい。プログラミングの基本である自学自習を心掛けていますが
この呼び出し関数の設計などはあまり得意な方でないのでどうかお願いします。
0167123
2008/02/10(日) 23:15:37ありがとうございます。実行してみたのですが生成される乱数が全て0になってしまいます。
srand関数を使って乱数の種を定めた時のプログラミング例を載せてみます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6036.c
どうかお願いします。
0168デフォルトの名無しさん
2008/02/10(日) 23:35:33お前どうやって>>153まで自分で出来たんだ?
得意じゃないってレベルじゃねーぞ
output(h1, m1, show1);
0169デフォルトの名無しさん
2008/02/10(日) 23:37:490170153
2008/02/10(日) 23:57:48それでも不足部分は沢山あるのでそれを補えるよう努力しなければと思い
ます。
ちなみにコンパイルできました。ありがとうございました。
0171デフォルトの名無しさん
2008/02/11(月) 00:13:35エラーがでたわけではないのですが、VC++2003.NETで
ビットマップ画像をインポートして追加しようとしたのですが、
実行するとその画像が表示されません!
実行の際には画像が切り替わっている様子がうかがえるのですが、表示されないのです。
新規作成で追加するとちゃんと表示されるのですが・・。
どなたか原因分かる方いますか?
0172デフォルトの名無しさん
2008/02/11(月) 00:13:39設計を見直すべき。
0173デフォルトの名無しさん
2008/02/11(月) 00:17:52すいません 荒らしてしまって...
携帯からなんで うp無理みたいです...
なんかいろいろほんとすいませんでしたm(_ _)m
0174デフォルトの名無しさん
2008/02/11(月) 00:21:45「10 動的に確保したメモリの解放」
これが抜けてる以外は問題なさそうだけど。
試しに実行してみたら、ちゃんと乱数生成されてるし。
0175デフォルトの名無しさん
2008/02/11(月) 00:30:32pc環境とか関係するんですかね?とりあえず学内pcにファイルを移して実行してみます。
本当にありがとうございました。
0177デフォルトの名無しさん
2008/02/11(月) 00:51:27[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6037.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:Visual C++ 2005
[3.3] 言語: C
[4] 期限: 2月13日
[5] その他の制限:特にありません
0178デフォルトの名無しさん
2008/02/11(月) 01:48:02うpろだが使えないとしても、>>1読んでテンプレくらいは使って欲しいところ
まぁ推奨になってるからどうしてもテンプレは使いたくないってのなら止めないけど
0179デフォルトの名無しさん
2008/02/11(月) 11:21:06>>145
>>146
携帯からの投稿自体 無理がありました すいませんでした...m(_ _)m
できれば解答をいただけると幸いです..
0180デフォルトの名無しさん
2008/02/11(月) 14:34:02[2] 問題文:
文字列を入力させ、それを表示するプログラムを作成せよ。
ただし、文頭にaが入力された場合はそれを表示せず、
数値が入力された場合はエラーとしてもう1度入力させること。
【実行例】
入力=jgmttgad18j
※エラー※数値が入力されました。
もう1度入力してください
入力=aaaiaueokaki
出力=iaueokaki
[3] 環境
[3.1] OS:Windows Vista
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C++
[4] 期限:2008年2月11日22:00まで
[5] その他の制限:
先生が、ヒントで「フラグを使うとできるかも」といってました!
よろしくお願いします!
0181デフォルトの名無しさん
2008/02/11(月) 14:54:09#include <iostream>
#include <string>
using namespace std;
int main()
{
while(1) {
cout << "入力=";
string s;
cin >> s;
if( s.find_first_of( "0123456789" ) == string::npos ) {
cout << "出力=" << s.substr( s.find_first_not_of( "a" ) ) << "\n";
break;
} else {
cout << "数値が含まれるので、再度入力してください。\n";
}
}
return 0;
}
0182デフォルトの名無しさん
2008/02/11(月) 18:40:08#include <stdio.h>
#include <string.h>
int main(void)
{
char str[256];
int top;
printf("入力:");
start:
top=0;
fgets(str,256,stdin);
again0:
if(str[top]>=48&&str[top]<=57){
printf("再入力:");
goto start;
}
if(top++<strlen(str))goto again0;
top=0;
again1:
if(str[top]=='a'){
top++;
goto again1;
}
printf("出力:");
again2:
printf("%c",str[top++]);
if(str[top]!=NULL)goto again2;
return 0;
}
0183デフォルトの名無しさん
2008/02/11(月) 18:57:58>>182
ありがとうございます!
できれば入力に
cin.getlineとか使うくらいの初歩のでもやってほしいんですが..(><)
入力だけでいくと
#include<iostream.h>
main()
{
char a[50] ;
cout<<"a=" ;
cin.getline(a,50) ;
}
こんな感じで・・
サーセン(・_・、)
0184デフォルトの名無しさん
2008/02/11(月) 19:38:23#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main() {
while (true) {
std::cout << "入力: ";
std::string line;
if (!std::getline(std::cin, line))
break;
boost::regex re_num("\\d+");
if (boost::regex_search(line, re_num)) {
std::cout << "※エラー※数値が入力されました" << std::endl;
std::cout << "もう一度入力してください" << std::endl;
continue;
}
boost::regex re_str("^a+");
std::cout << "出力: "
<< boost::regex_replace(line, re_str, "") << std::endl;
break;
}
}
0185デフォルトの名無しさん
2008/02/11(月) 19:41:23それなら>>180の
cin >> s;
を
char sz[50]; cin.getline(sz,50); s=sz;
にすればいいが、
初歩というのは、もしかしてstringを使うなと言ってる?
0187デフォルトの名無しさん
2008/02/11(月) 20:00:14#include <iostream>
using namespace std;
bool hasDigit( const char* pstr )
{
while(*pstr) {
if( isdigit(*pstr) )
return true;
pstr ++;
}
return false;
}
int main()
{
while(1) {
cout << "入力=";
char sz[50];
cin.getline( sz, sizeof(sz) );
if( !hasDigit( sz ) ) {
char* p;
for( p=sz; *p=='a'; p++ );
cout << "出力=" << p << "\n";
break;
} else {
cout << "数値が含まれるので、再度入力してください。\n";
}
}
return 0;
}
0188デフォルトの名無しさん
2008/02/11(月) 22:32:23[2] 問題文 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6038.txt
[3] 環境
[3.1] OS: WindowsXP
[3.3] 言語:C言語
[4] 期限: できれば、早いとありがたいです。
よろしくお願いいたします。
0189デフォルトの名無しさん
2008/02/11(月) 22:44:53[2] 問題文
四問あります
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6039.zip
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: visual stdio
[3.3] 言語: C
[4] 期限: 2月13日の昼まで
0190デフォルトの名無しさん
2008/02/11(月) 22:46:32アウエイ
(50)は解なし。強いてあげればイか。
0191189
2008/02/11(月) 22:48:29>>189には不備がありました
課題1には二つ問題があるのですが
一つtxtファイルが入ってません
それを書き直したものにしますので少々待っててください
0192デフォルトの名無しさん
2008/02/11(月) 22:58:36[2] 問題文
5問あります
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6040.zip
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: visual stdio
[3.3] 言語: C
[4] 期限: 2月13日の昼まで
[5]ご迷惑をおかけして申し訳ありません
期限を13日としていますが出来ればなるべく早くお願いします
0193デフォルトの名無しさん
2008/02/11(月) 23:07:15どれも最近見た気がするが、これって何処の課題なんだろ。
最後の二つは、ちょっと前に俺がうpしたから間違いない。
0194デフォルトの名無しさん
2008/02/11(月) 23:15:21本当ですか
よろしければその解答を頂けないでしょうか
0195デフォルトの名無しさん
2008/02/11(月) 23:18:41ちょっと前にうpしたって言ってるじゃん。
ホントに欲しけりゃ、スレから探して持っていけばいいさ。
0196デフォルトの名無しさん
2008/02/11(月) 23:30:16ありがとうございます
4と5は解決しました
0197デフォルトの名無しさん
2008/02/11(月) 23:36:55ttp://www.borujoa.org/upload/source/upload16700.lzh
↓参考ページ。
ttp://www.htv-net.ne.jp/~dark/suro%20aimu%20jagura-.html
0198デフォルトの名無しさん
2008/02/11(月) 23:37:55ありがとうございます。
まぁ結果的に2級は落ちましたが..
少しは勉強になったのでよかったです
皆さん いろいろ迷惑をかけましたがありがとうございましたm(_ _)m
0199デフォルトの名無しさん
2008/02/11(月) 23:40:13この程度だと、あんまり取る意味なさそうな気も。
0200デフォルトの名無しさん
2008/02/12(火) 00:09:02確かにそうですよね..
C2級も取れないレベルなんて 俺ってなんなんだろう...
やっぱりバカなんだなぁ つくづく思います。
0201デフォルトの名無しさん
2008/02/12(火) 00:40:36眠くてやばいんで誰か解き方のだけ速攻教えてください。
C言語で123の数値を合計して6とするにはどうすればいいんでしょうか?
0202デフォルトの名無しさん
2008/02/12(火) 00:43:29int sum=1+2+3;でおk
0203デフォルトの名無しさん
2008/02/12(火) 00:46:27ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6041.cpp
0204デフォルトの名無しさん
2008/02/12(火) 00:48:33ありがとうございます。
その数値が入力されたものの場合はどうすればいいんでしょうか><
0205199
2008/02/12(火) 00:48:33いやいや、この程度とは言ったけど、
これを全く勉強せずに解ける人なんて居ないよ。
資格としての意味は薄いにしても、
1つの通過点にするのはいいんじゃないかな。
目標があると励みやすいし。
でさ、本当に2級を取得するだけの力をつけたいんだったら、
このスレで解答を求めたりするんじゃなくて、
自分で試行錯誤して辿り着く方が為になると思うんだけどな。
スレ違いなんでこの辺で。
0206デフォルトの名無しさん
2008/02/12(火) 00:51:42int sum = val / 100 + (val / 10) % 10 + val % 10;
0207デフォルトの名無しさん
2008/02/12(火) 00:52:05説明不足でほんとすみません。
0208207
2008/02/12(火) 00:54:18ありがとうございます。
0209デフォルトの名無しさん
2008/02/12(火) 00:54:190210デフォルトの名無しさん
2008/02/12(火) 00:54:39説明不足だと思うならちょっとくらい眠くてもテンプレに従えよ
0211デフォルトの名無しさん
2008/02/12(火) 00:54:57int sum = (str[0] - '0') + (str[1] - '0') + (str[2] - '0');
0212207
2008/02/12(火) 00:55:23ありがとうございます。
0213デフォルトの名無しさん
2008/02/12(火) 01:00:18そっか atoiを絶対使うと思い込んでいたからできなかったのか><
'0'から引けば結果は数値と同じっすもんね・・・
本当にありがとうございました。
0214デフォルトの名無しさん
2008/02/12(火) 01:02:05#include<stdio.h>
#include<stdlib.h>
int main(void){
char buf[16];
int n, sum = 0;
fgets( buf, 16, stdin );
n = atoi( buf );
while( n > 0 )
{
sum += n % 10;
n /= 10;
}
printf("%d\n",sum);
return 0;
}
多分こういうことがやりたいんだろうと思って答えてみる
間違っててもそれは質問の仕方が悪いと思う
0215デフォルトの名無しさん
2008/02/12(火) 01:09:380216デフォルトの名無しさん
2008/02/12(火) 01:16:23ありがとうございます。助かりました。
0217デフォルトの名無しさん
2008/02/12(火) 03:07:47どう表示したらいいか不明なので適当にやった
最小のものが見つかった時点で逐次表示
#include<stdio.h>
int main(void){
int cost[][4][3]={{{3,2,1},{2,3,3},{3,3,2},{0,2,0}},
{{1,1,2},{2,1,3},{3,1,2},{0,2,0}},
{{1,1,2},{1,2,3},{1,1,4},{0,3,0}},
{{3,0,0},{2,0,0},{2,0,0},{0,0,0}}},
c,cmin=9999,p,pmin=9999,x,y,i,k;
for(i=0;i<729;i++){//3^6=729
printf("(0,0)0");
for(k=i,c=p=x=y=0;x<3&&y<3;k/=3)
c+=cost[x][y][k%3],
p++,
x+=(k%3!=0),
y+=(k%3!=1),
printf("→(%d,%d)%d",x,y,c);
if(x==3&&y==3&&cmin>c)cmin=c,printf(" 最小コスト\n");
else if(x==3&&y==3&&pmin>p)pmin=p,printf(" 最短経路\n");
else printf("\r%79s\r","");
}
return 0;
}
0218デフォルトの名無しさん
2008/02/12(火) 15:32:39課題1
#include <stdio.h>
int main(void)
{
bool exist[10000]={false,};
int temp,i=0,max,min,count=0;
FILE *fp=fopen("input8500.txt","r");
if(!fp) return 1;
while(!feof(fp)){
fscanf(fp,"%d ",&temp);
exist[temp]=true;
}
fclose(fp);
while(!exist[i++]);
min = i;
i = 9999;
while(!exist[i--]);
max = i;
for(i = 0; i < 10000;i++) if(exist[i])count++;
printf("count = %d\nmax - min = %d",count,max-min);
return 0;
}
0219デフォルトの名無しさん
2008/02/12(火) 15:38:30課題2
#include <stdio.h>
int main(void)
{
int rank[11]={0,};
int temp,i,j;
FILE *fp=fopen("input_histo.txt","r");
if(!fp) return 1;
while(!feof(fp)){
fscanf(fp,"%d ",&temp);
rank[temp/10]++;
}
fclose(fp);
for(i=0;i<11;i++){
printf("\n%3d点台:",i*10);
for(j=0;j<rank[i];j++)printf("*");
}
return 0;
}
0220193
2008/02/12(火) 16:59:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6042.txt
(1)〜(3)
0221デフォルトの名無しさん
2008/02/12(火) 20:27:04>>219
>>220
皆さんありがとうございます
これでなんとかなりそうです><
0222デフォルトの名無しさん
2008/02/12(火) 21:21:05こちらで質問したいと思います。
お時間がある方、ご協力いただけると幸いです。
先週からC言語について学び始めた高1です。
明日からプログラミングが学校の授業ではじまり
予習していたのですが、何度やっても思い通りの結果を表示できません
本当に基礎的な問題かも知れませんが、アドバイス、正答などいただけると幸いです。
1.5個の整数データを配列に代入し合計と平均を求めるプログラムをつくれ。
2.問1のデータの最大値を求めるプログラムをつくれ。
3.問1のデータを大きい順に並べ替えるプログラムをつくれ。
本当に程度の低い質問かもしれませんが
悩んでます><よろしくおねがいします。
0223デフォルトの名無しさん
2008/02/12(火) 21:24:370224デフォルトの名無しさん
2008/02/12(火) 22:06:18#include <stdio.h>
int main(int argc, char **argv) {
static int array[5];
int i;
double sum=0.0;
if (argc==6)
{
for(i=0;i<5;i++) {
array[i]=atoi(argv[i]);
sum += array[i];
}
printf("average[%lf] sum[%d]\n", sum/5, (int)sum);
}
return 0;
}
悩んでいるというのであれば何がわからないのかくらい書くべきです。
予想すると何もわからなくて悩んでいるんですよね。
2と3は自分で考えましょう。
0225デフォルトの名無しさん
2008/02/12(火) 22:27:32[2] 画像ファイルを読み込み、マウスでクリックした位置の
水平垂直方向の輝度を表示せよ。
[3.1] Windows XP
[3.2] Visual C++2005 ExpressEdition
[3.3] C++
[4] 期限: 無期限
[5] その他の制限:とくになし。
ファイルダイアログでpicturebox1に画像ファイルを取り込んで、
getpixelでRGB値を取得しています。
pictureboxは640*480なのですが、画像サイズが640*480以外だと、
エラーが出たり、マウスの位置と、取得したRGB値が一致しません。
どうしたものだろうか?
private: System::Void pictureBox1_MouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
Graphics^gr=this->CreateGraphics();
Bitmap^bm = (Bitmap^)(pictureBox1->Image);
int w = pictureBox1->Image->Width; int h = pictureBox1->Image->Height;
int z = 480/h;
int x=e->X/z; int y=e->Y/z;
gr->FillRectangle(Brushes::Black,Rectangle(700,27,128,480));
gr->DrawLine(Pens::LightGray,700+64,27,700+64,27+480);
if(x<w && y<h ){
for (int y=0;y<h-1;y++) {
Color c=bm->GetPixel(x,y);
//平均輝度
int r=c.R; int g=c.G; int b=c.B;
int rgbdiv = (int)((r+g+b)/3);
Color c2=bm->GetPixel(x,y+1);
int r2=c2.R; int g2=c2.G; int b2=c2.B;
int rgbdiv2 = (int)((r2+g2+b2)/3);
gr->DrawLine(Pens::Red,700+rgbdiv/2,27+y*z,700+rgbdiv2/2,27+(y+1)*z);
} } }
0226デフォルトの名無しさん
2008/02/12(火) 22:44:170227デフォルトの名無しさん
2008/02/12(火) 23:12:510228デフォルトの名無しさん
2008/02/12(火) 23:21:250229デフォルトの名無しさん
2008/02/13(水) 01:36:59ありがとうございました。
0230デフォルトの名無しさん
2008/02/13(水) 10:19:22[2] 問題文(含コード&リンク):
問題文: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6044.txt
input.txt: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6043.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:visual stdio
[3.3] 言語:C
[4] 期限:2月13日中
[5] その他の制限:
期限間近ではありますが、よろしくお願いいたします
0231デフォルトの名無しさん
2008/02/13(水) 10:44:46[2] 問題文(含コード&リンク):
http://www.uploda.net/cgi/uploader2/index.php?file_id=0000050574.pdf
待ち行列の問題です。
pdfの11ページに載っています。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 本日23:59まで
その他の制限: 特になし
丸投げです。よろしくお願いします。
0232デフォルトの名無しさん
2008/02/13(水) 13:50:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6045.txt
0233デフォルトの名無しさん
2008/02/13(水) 14:43:340234デフォルトの名無しさん
2008/02/13(水) 14:47:340235デフォルトの名無しさん
2008/02/13(水) 14:54:57> fscanf(fp, "%d", &temp);
> data[temp]++;
> }
>while(count <= 100)
0236デフォルトの名無しさん
2008/02/13(水) 15:02:220237デフォルトの名無しさん
2008/02/13(水) 15:30:21http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6046.txt
0238デフォルトの名無しさん
2008/02/13(水) 16:19:12http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6047.txt
0239デフォルトの名無しさん
2008/02/13(水) 20:12:05チョンのあやかり創価学会
偽善者が政治活動、公明党
ニセ仏教、騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
カルトキチガイ・創価騙されバカ信者
カルト・キチガイ・偽善政治活動・公明党
カルト・キチガイ・偽善政治活動・公明党
カルト・キチガイ・偽善政治活動・公明党
0240デフォルトの名無しさん
2008/02/13(水) 20:44:17>>238
期限間近のものを本当にありがとうございました。
0241デフォルトの名無しさん
2008/02/13(水) 20:48:280242デフォルトの名無しさん
2008/02/13(水) 21:01:17今、実行できる環境がないのですが>>232はなぜ荒らしなのでしょうか。
0243デフォルトの名無しさん
2008/02/13(水) 21:08:23拡張性が無く再利用できないアルゴリズム。
fclose()してない。
こんなの宿題で提出されたら俺なら赤点つける。
0244デフォルトの名無しさん
2008/02/13(水) 21:14:18荒らしのプログラムにも気付けない自分が情けないです…
詳しい説明ありがとうございました。
0245デフォルトの名無しさん
2008/02/13(水) 22:04:070246デフォルトの名無しさん
2008/02/13(水) 22:20:41>>232読んでみたがこれで十分だろ
題意は満たしてるし、時間・空間計算量も小さくなるように組まれてるしな
拡張性について指定がない以上、こういうのも一つの解としてありだろ
0247デフォルトの名無しさん
2008/02/13(水) 22:28:18>>243さんは一体何のつもりなんでしょうか(苦笑
0248デフォルトの名無しさん
2008/02/13(水) 22:36:480249デフォルトの名無しさん
2008/02/13(水) 22:42:48題意満たしてるか?
0250デフォルトの名無しさん
2008/02/13(水) 22:42:520251デフォルトの名無しさん
2008/02/13(水) 22:43:53何か条件抜けてるか?
0252デフォルトの名無しさん
2008/02/13(水) 22:48:30|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \
|┃ | (__人__) | 俺なら赤点つける
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0253デフォルトの名無しさん
2008/02/13(水) 22:48:330254デフォルトの名無しさん
2008/02/13(水) 22:54:02合格者がちょうど100人の時にカウントがずれる。
<にすべき比較を<=にしてるという初心者のようなミス。
fclose()していない。
仮にあれが荒らしじゃないとすれば、無能であるという自覚の無い初心者。
ある意味荒らしよりたちに負えない。
0255デフォルトの名無しさん
2008/02/13(水) 22:55:30|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \ 表面上問題文で要求された結果は返すけど、
|┃ | (__人__) | 拡張性が無く再利用できないアルゴリズム。
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0256デフォルトの名無しさん
2008/02/13(水) 22:57:38|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \ 題意は満たしてるし、時間・空間計算量も小さくなるように組まれてるしな
拡張性について指定がない以上、こういうのも一つの解としてありだろ
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0257デフォルトの名無しさん
2008/02/13(水) 22:59:46|┃ | | ←これなに?
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \
|┃ | (__人__) |
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0258デフォルトの名無しさん
2008/02/13(水) 22:59:47211回数えてるぞ。
0259デフォルトの名無しさん
2008/02/13(水) 23:03:020260デフォルトの名無しさん
2008/02/13(水) 23:03:27何したいのかわからん。
0261デフォルトの名無しさん
2008/02/13(水) 23:04:310262デフォルトの名無しさん
2008/02/13(水) 23:05:020263デフォルトの名無しさん
2008/02/13(水) 23:06:28それはお前がバカ
0264デフォルトの名無しさん
2008/02/13(水) 23:06:59それは点数による度数分布だからおk
0〜100以外の点数が来たらNGだが
0265デフォルトの名無しさん
2008/02/13(水) 23:07:170266デフォルトの名無しさん
2008/02/13(水) 23:13:22>>232
・今回与えられたデータではたまたま正常に動く
・不正なデータ(100点を超えたりマイナスだったり)に対する備えが無い
・偏ったデータ(全員が100点とか)で無限ループ
・100位以内が丁度100人の時に計算がずれる
・ファイルから点数を直接読み出してないから拡張性が無い
・↑のデータを利用して他の関数を書いてるから再利用できない
・fclose()してない
>>238
・パーフェクト
>>230は好きな方選んで提出したらいいんじゃね?
自力で組めなかったんだし粗悪なプログラムで赤点補習した方が将来のためかもしれないしね。
0267デフォルトの名無しさん
2008/02/13(水) 23:14:52バカがまとめんなよw
>>232で出る答えは間違ってるし、全員100点でも無限ループなんてしない。
0268デフォルトの名無しさん
2008/02/13(水) 23:21:10>>238も人数が210人未満のときに間違える。
0269デフォルトの名無しさん
2008/02/13(水) 23:22:04合格者数:105人
合格者平均点:77.7723810点
>>238の実行結果
Success:104
Average:77
0270デフォルトの名無しさん
2008/02/13(水) 23:33:340271デフォルトの名無しさん
2008/02/13(水) 23:34:26プログラムが間違ってるからだね。
0272デフォルトの名無しさん
2008/02/13(水) 23:37:40ループ終了条件をfeofで判定してるため、最後の数を二重に数えてるから。
0273デフォルトの名無しさん
2008/02/13(水) 23:37:520274デフォルトの名無しさん
2008/02/13(水) 23:40:350275デフォルトの名無しさん
2008/02/13(水) 23:50:30ありがとうございますm(_ _)m
0276デフォルトの名無しさん
2008/02/13(水) 23:56:49ありがとうございます。
while(!feof(fp))
{
fscanf(fp, "%d", &temp);
data[temp]++;
}
↓
while(fscanf(fp, "%d", &temp) != EOF)
{
data[temp]++;
}
みたいにしたらいいのかな。
0277デフォルトの名無しさん
2008/02/13(水) 23:58:100278デフォルトの名無しさん
2008/02/14(木) 00:10:08[2] 問題文(含コード&リンク): http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6049.txt
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン:Visual C++2005 ExpressEdition
[3.3] 言語:C
[4] 期限:2月15日
[5] その他の制限:特にないです
0279デフォルトの名無しさん
2008/02/14(木) 00:14:35チョンのあやかり創価学会
偽善者が政治活動、公明党
ニセ仏教、騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや
カルトキチガイ・創価騙されバカ信者
カルト・キチガイ・偽善政治活動・公明党
カルト・キチガイ・偽善政治活動・公明党
カルト・キチガイ・偽善政治活動・公明党
0280デフォルトの名無しさん
2008/02/14(木) 00:18:580281デフォルトの名無しさん
2008/02/14(木) 00:40:44fscanfを使うなら、
while (fscanf(...) == 1)
とするべき。
0282デフォルトの名無しさん
2008/02/14(木) 00:50:47「double max(double a,double b)関数をとり、引数aとbの大きいほうを返す関数」は、
double max_caller(double (*f)(double, double), double a, double b){
return (*f)(a, b);
}
でよろしいか?
0283デフォルトの名無しさん
2008/02/14(木) 07:06:31いいですよ。
0284デフォルトの名無しさん
2008/02/14(木) 09:53:12なるほど、それだと読み込みエラーとかでもループを抜けられるんですね。
勉強になりました。ありがとうございました。
0285デフォルトの名無しさん
2008/02/14(木) 11:39:45http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6051.txt
チェックあまりしてない。甘いところはご愛嬌。
0286デフォルトの名無しさん
2008/02/14(木) 12:09:39問題2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6052.txt
これもチェックあまりしてない。甘いところはご愛嬌。
0287デフォルトの名無しさん
2008/02/14(木) 18:04:30って課題が出たんですけど、誰か教えてください。
0289デフォルトの名無しさん
2008/02/15(金) 12:03:39[1] 授業単元: 一般情報処理C
[2] 問題文(含コード&リンク):「nステップによるある一回の酔歩における、格子点上の経路を画面に表示するプログラムを作成せよ。」
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:c
[4] 期限:2008/2/19
[5] その他の制限:なし
0290デフォルトの名無しさん
2008/02/15(金) 14:45:36[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
崖から鉛直上向きに投げた石の4秒後の鉛直方向位置を求めたい.
(1)オイラー法によりその位置を求めるプログラムを作成し,4秒後の
位置を求めなさい.
(2)理論解との位置の誤差を0.1m以下にするには時間きざみΔtを
いくらにすればよいか考察しなさい.
[3] 環境
[3.1] OS:Vista
[3.2] コンパイラ名とバージョン:VS2005
[3.3] 言語:C
[4] 期限:2008/2/15 15:50まで
[5] その他の制限:
0291デフォルトの名無しさん
2008/02/15(金) 15:11:20(1)だけ。
初速に関する条件がなかったけど入力させる形でよかった?
#include <stdio.h>
#include <stdlib.h>
#define GRAVITY (-9.80665)
#define DELTA_T (0.1)
int main(void)
{
char temp[32];
double v0, velocity, time, y;
printf("初速度を入力してください:");
do{
fgets(temp, sizeof(temp), stdin);
v0 = atof(temp);
}while(v0 <= 0);
for(time = 0; time < 4; time += DELTA_T)
{
velocity = v0 + time * GRAVITY;
y += velocity * DELTA_T;
}
printf("4秒後の位置は %f(m) です", y);
return 0;
}
>>289
一口に酔歩って言っても定義はいくつもあるんだけど、
何の前提条件も無しでその問題文がだされたわけ?
0292デフォルトの名無しさん
2008/02/15(金) 17:34:59えっとその前の課題が「二次元格子上での酔歩におけるnステップによる平均移動距離を、m回のシュミレーションによる統計平均から計算せよ。また、その標準偏差を求めよ」
で、その課題の下に「乱数の発生方法について」とあって、1#include<stdlib.h>によって、stdlib.hヘッダーをインクルードする。2#include<time.h>によって、time.hヘッダーをインクルードする。
3srand((unsigned)time(NULL));によって乱数の種の初期値を現時刻から決める。4rand()/(RAND_MAX+1.0);によって0から1における一様乱数を発生させる。
と書いてあって、その下に上記の課題が書いてあります。
0293デフォルトの名無しさん
2008/02/15(金) 20:05:59[2] 問題文(含コード&リンク):
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6055.zip
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語: C++
[4] 期限: 2月18日24時まで
[5] その他の制限:考察も書かないといけないので
注訳等も入れてもらえると幸いです。
また期限はギリギリの期限ですので出来るだけ
早く対応していただけると非常に助かります。
0294デフォルトの名無しさん
2008/02/15(金) 21:59:30元のプログラムがてんでダメダメだな。
0295デフォルトの名無しさん
2008/02/15(金) 22:13:23あれ、引用のコピペ失敗したかな(´・ω・`)、自分で動かした分には元のプログラムは動いたんだけど
0297デフォルトの名無しさん
2008/02/15(金) 22:26:4367行目に変な文字が入ってるけど、ダメってのはそういう意味じゃない。
元のプログラムの作り自体にセンスが感じられないってこと。
0299デフォルトの名無しさん
2008/02/16(土) 07:24:05http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6056.cpp
0300デフォルトの名無しさん
2008/02/16(土) 10:45:37ありがとうございます
0301_
2008/02/17(日) 08:34:24|┃ | |
|┃ \_/
ガラッ. |┃ |
|┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
|┃ / <●>::::::<●> \
|┃ | (__人__) |
|┃三 \ ` ⌒´ /
|┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0302デフォルトの名無しさん
2008/02/17(日) 11:03:44三 |┃┃
|┃┃
∧∧ ..|┃┃
三 ( ;). |┃┃ピシャッ!
/ ⊃.|┃┃
0303_
2008/02/17(日) 11:52:13.. |┃ | |
.. |┃ .. \_/
ガラッ.. |┃ ..|
三 |┃ |
三 |┃ ノ// ./ ̄ ̄ ̄ \
|┃三 / ::\:::/:::: \
∧∧ ..|┃ / <●>::::::<●> \
三 ( ;). |┃ | (__人__) |
/ ⊃.|┃三 \ ` ⌒´ /
シュー |┃三 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
0304_
2008/02/17(日) 11:52:33三 |┃┃
|┃┃
∧∧ ..|┃┃
三 ( ;). |┃┃ピシャッ!
/ ⊃.|┃┃
0305デフォルトの名無しさん
2008/02/17(日) 12:15:33[1] 授業単元: コンピュータ実習
[2] 問題文:(下記のコードに書き加えてファイルに出力しなさい)
[3] 環境
[3.1] OS: (Linux)
[3.2] コンパイラ名とバージョン: (gcc)
[3.3] 言語: (C++)
[4] 期限: 今日
[5] その他の制限: なし
#include <iostream>
#include <string>
#include <fstream>
class write{
private:
string input;
public:
string input(){
cout<<文字列をファイルに書き込みたい;
cin>>input;
return input;
}};
int main(){
write ob;
//書き込み処理
//書き込み処理終了
return 0;
}
0306デフォルトの名無しさん
2008/02/17(日) 15:57:43fstream("ファイル", ios::out) << ob.input();
//書き込み処理終了
0307デフォルトの名無しさん
2008/02/17(日) 16:06:25ofstream使えよ。
0308デフォルトの名無しさん
2008/02/17(日) 17:48:53[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6057.txt
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 明日まで
問題はC言語のシグナルの送信に関するものです。
よろしくお願いします。
0309デフォルトの名無しさん
2008/02/17(日) 18:10:27あと、シグナルハンドラの中では、非同期シグナルセーフな関数以外は呼び出さない方がいい。
0310デフォルトの名無しさん
2008/02/17(日) 21:55:38[2] 問題文(含コード&リンク)
シェルを実装していますが、分からないのは入出力リダイレクションの処理です。
たとえばプロンプトから
$ cat 123 > textout
と、入力して 引数の'>'(もしくは'<') で入出力を切り替える処理を考えています。
どうすればいいのでしょうか?
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc 3.4.4
[3.3] 言語:C
[4] 期限: 2008年2月29日
0311デフォルトの名無しさん
2008/02/18(月) 00:26:19とりあえずsignal.hなるものの存在を初めて知った
で、<unistd.h>は「unix standard」。
ここまで来ると、Windowsの人間はまるでついていけない……
0312デフォルトの名無しさん
2008/02/18(月) 02:30:54#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);
}
0313デフォルトの名無しさん
2008/02/18(月) 02:32:35#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(;;){}
}
子まで書き換えないとならないのがミソだな
0314デフォルトの名無しさん
2008/02/18(月) 04:08:11御回答ありがとうございます。
SIG_IGNを使いシグナルを無視させることで無効化するんですね。
勉強になりました!ありがとうございます。
0315デフォルトの名無しさん
2008/02/18(月) 14:14:22[2] 問題文(含コード&リンク):Cシェルを作成しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2008年2月19日まで
[5] その他の制限: なし
C言語でシェルを作っているのですが、
>310さんと同じく'>'の入力リダイレクションの処理が分からないです。
自力で途中までは書いているのですが、キー入力の分割処理が上手く行きません。
void parseitファンクション内の処理がおかしいと思われます。
助けて頂けると幸いです。
ソースファイル↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6060.c
0316デフォルトの名無しさん
2008/02/18(月) 16:43:120317デフォルトの名無しさん
2008/02/18(月) 18:15:57問題が理解できないのでどうしようもない
まずnステップっていうのがわからない
そもそも、1ステップでどういう動きをするんだ?
ランダムで X 方向 or Y 方向に 1つ動くっていうのか、
それとも、X 方向にランダムでいくつ、Y方向にランダムでいくつって言う風に動くのか
あと表示のしかたも、各ステップ毎のX,Yの値をただ単に並べればいいのか、
図で見せるのかわからない
0318デフォルトの名無しさん
2008/02/18(月) 22:56:21void parseit 内で、
*params++ = command;
の後のパラメータ分文字を読み飛ばす処理内で、">"の処理をしているのが不味い
a.out > aaa
↑
ここでパラメータ分文字を読み飛ばす処理は終了するので、次のパラメータを探す処理に
移ると、次のパラメータは、">"になる
">" の処理もそのままだと、 ファイル名の前後に空白文字が入る可能性がある(問題ないのかもしれないけど)
あと、void parseit 関数の終わりの*params = '\0'; は、 *params = NULL; じゃね
0319デフォルトの名無しさん
2008/02/19(火) 00:16:23なるほど、そう言うのが原因なんですね。
確かにテストをすると空白らしくものがファイル名と'>'の前(おそらく)に入ってると思われます
となると、やはり新しいファンクションを増やした方がてっとり早いのでしょうか?
0320デフォルトの名無しさん
2008/02/19(火) 00:59:51横レスになるけど.
先に ">"の前後で文字列を切り分けてからコマンド部分をあらためて切り分ける方法もあるんじゃないかな。
標準関数を使っていいのなら切り分けはこんな感じ↓
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にも代入があったことになるからフラグでそれを知らせてます。
0321デフォルトの名無しさん
2008/02/19(火) 03:51:32レス感謝です。
getTokenでparseitと同様の処理をさせれば良いのでしょうか?
0322デフォルトの名無しさん
2008/02/19(火) 06:43:134時か、がんばってるねぇ…
とっくに寝てそうだけど、getTokenでparseitのparamsに入れていく部分の処理を入れればいいと思う。
元のソース見る限りだとredirectは特に同じことをしてなさそうに見えるから。
0323デフォルトの名無しさん
2008/02/19(火) 06:54:35未だに空白が付いて正しい結果を出しません。
もしかしたらメイン内でやったのがいけなかったのかもしれません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6062.c
0324デフォルトの名無しさん
2008/02/19(火) 07:09:34空白がつくのって
"a.out params > text.txt"
みたいなときに " text.txt"がredirectにはいるってこと?
VC++でコンパイルしたからGCCでは挙動違うのかな?
sscanfの処理を
sscanf( command, "%255[^>]%*[> \t]%19s", cmd, redirect );
って修正してもだめ?
0325デフォルトの名無しさん
2008/02/19(火) 07:13:47もしこれが解決出来れば、test_parseファンクションを使えると思うのですが…。
何か解決方法があったら教えてください。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6064.c
0326デフォルトの名無しさん
2008/02/19(火) 10:37:19どうやら問題やはcmdの最後の部分に空白があったため、問題が起きていたようです。
なので、最後尾にNULLを追加したらリダイレクションが正常に完了しました。
>>318 >>320 >>322 >>324助言ありがとうございました。
0327デフォルトの名無しさん
2008/02/19(火) 10:39:06適当解釈。
#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;
}
0328デフォルトの名無しさん
2008/02/19(火) 20:29:30面白い解釈だ
神龍:どんな問題でも一つだけ聞き流してやろう
ってのが思い浮かんだ
0329デフォルトの名無しさん
2008/02/19(火) 21:26:310330デフォルトの名無しさん
2008/02/19(火) 22:00:26[2] 問題文(含コード&リンク):2問ありますhttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6066.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C
[4] 期限: 明日まで
[5] その他の制限: 問題文にそって作る
お手数おかけしますが、よろしくお願いします。
0331デフォルトの名無しさん
2008/02/19(火) 22:27:31ってもやもやしながら読んでたらばおで噴いたwwwwwww
0332デフォルトの名無しさん
2008/02/19(火) 22:37:55list_tって名前なんだよな?
xxx_tって普通,型名につける方法じゃないっけ?
0333デフォルトの名無しさん
2008/02/19(火) 23:18:56>>332
問題文を確認したら構造体変数名はlist_tとありました。
これが誤っているとすると
typedef struct list{
〜
} list_t;
って感じですかね?
0334デフォルトの名無しさん
2008/02/20(水) 00:13:00_tは普通使わないと思うけど
0335デフォルトの名無しさん
2008/02/20(水) 00:15:26へぇ 普通はそうなのか
普通って難しいな
0336デフォルトの名無しさん
2008/02/20(水) 00:27:17[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6067.txt
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: gcc 3.4
[3.3] 言語: C
[4] 期限: 2/22
[5] その他の制限:
よろしくお願いします。
0337デフォルトの名無しさん
2008/02/20(水) 01:03:12[2] 問題文(含コード&リンク):
C言語プログラムのファイルを読み込んで、バッファオーバーラン
の危険性を検出(修正)するサポートツール。
[3] 環境
[3.1]Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2月21
[5] その他の制限: なし
0338デフォルトの名無しさん
2008/02/20(水) 01:07:570339デフォルトの名無しさん
2008/02/20(水) 01:11:450340デフォルトの名無しさん
2008/02/20(水) 01:16:500341337
2008/02/20(水) 01:25:54が検出できれば OKです
0342デフォルトの名無しさん
2008/02/20(水) 01:28:570343337
2008/02/20(水) 01:33:140344デフォルトの名無しさん
2008/02/20(水) 04:14:35・scanfはスルーかよ。
0345デフォルトの名無しさん
2008/02/20(水) 04:23:51#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;
}
こんな感じでいいのかな。アセンブリコードに対して検索した方が楽だよな。
0346デフォルトの名無しさん
2008/02/20(水) 04:35:42その発想はなかったわw
0347337
2008/02/20(水) 07:49:570348デフォルトの名無しさん
2008/02/20(水) 11:53:111問目
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6068.txt
構造体変数名はlist_tとする意図が汲み取れないが、それは無視して作った。
構造体のtypedefした名前をlist_tとするの間違いじゃなかろうか・・・
0349デフォルトの名無しさん
2008/02/20(水) 12:13:13http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6069.txt
問題をそのまま書いた方が良いと思うよ・・・
0350デフォルトの名無しさん
2008/02/20(水) 19:57:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6070.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6071.txt
一応作ってみた
考え方が良く分からんから、まぁたぶん大丈夫だろう的なレベル
0351デフォルトの名無しさん
2008/02/20(水) 20:47:15ありがとうございます。
0352デフォルトの名無しさん
2008/02/20(水) 21:23:03ありがとうございます
0353デフォルトの名無しさん
2008/02/22(金) 00:51:17[2] 問題文(含コード&リンク):
・リスト構造
アルファベットの文字列をいくつか読み込み、それを、アルファベット順にソートし、以下のコマンドが入力された場合、それぞれの命令を実行せよ。
条件として、リスト構造が使われていること、サブ関数の呼び出し(単純なものでもよい)が使われていること、malloc関数が使われていること。
p :入力された文字列を表示する。
a :指定された文字列をリストに追加する。(アルファベット順に並ぶように)
d :指定された文字列をリストに削除する。(不要になった記憶領域はfree()を使って開放すること。また、指定された文字列がリストに無い場合は、その旨を表示。)
q :プログラムを終了する。
? :使用可能なコマンドの一覧を表示する。
end:データ入力の終了
[3] 環境
[3.1] OS:Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2月26日まで
[5] その他の制限:
こんな感じです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6072.txt
できればなるべく簡単な方法でお願いします。
0354353
2008/02/22(金) 00:54:56× d :指定された文字列をリストに削除する。
○ d :指定された文字列をリストから削除する。
0355デフォルトの名無しさん
2008/02/22(金) 02:55:06BUFSIZE文字以上の入力があった場合に異常動作を起こす他、色々と問題・手抜きは抱えてるが少なくともその実行例は通る
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6073.c
0356353
2008/02/22(金) 03:24:27ありがとうございます。
しかし、まんまコピペでコンパイルが通りませんでした…
そしてNode型とかようわからん件…ごめんなさい低級で
とりあえず自分なりにいじってみます。ダメだったらまたくるかも。
0357デフォルトの名無しさん
2008/02/22(金) 03:27:56あぁ、VC++2008でコンパイルしたから気付かんかったけど
C99形式のコメント(//〜)を使ってるからそれかもしれん
その部分を全部消してみてくれ
0358353
2008/02/22(金) 03:50:47消してみましたが、やはり同じようです。
とりあえず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 ***
0359デフォルトの名無しさん
2008/02/22(金) 04:01:06コメントを消した状態ならこっちでは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)
0360デフォルトの名無しさん
2008/02/22(金) 04:21:120361デフォルトの名無しさん
2008/02/22(金) 04:24:08bccだとvoid fgetsで定義されてるとかか?
0362デフォルトの名無しさん
2008/02/22(金) 04:26:26[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6074.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:本日正午まで(恐らく本日中であればなんとかなります)
[5] その他の制限:
なるべく自分でどうやっているプログラムなのか理解した上で提出した方がいいため、
if文やfor文使いまくりでもいいので、簡単なプログラムにしていただけると助かります。
0363デフォルトの名無しさん
2008/02/22(金) 04:37:400364デフォルトの名無しさん
2008/02/22(金) 04:39:46fgets(buf, BUFSIZE, stdin) ? (void)0 : exit(1);
これで回避できるみたいだが、よくわからんな。
bccの3項演算子の扱いが謎。
0365デフォルトの名無しさん
2008/02/22(金) 04:46:17void同士ならOKらしい。
0366デフォルトの名無しさん
2008/02/22(金) 05:53:24とりあえず適当
(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;
}
0367デフォルトの名無しさん
2008/02/22(金) 05:54:59#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;
}
0368デフォルトの名無しさん
2008/02/22(金) 18:01:06>>366 はでかいミスがあった それは忘れてこっちを使ってくれ
(2) 3999までの正整数をローマ数字にする int2roman.cpp
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6075.txt
0369デフォルトの名無しさん
2008/02/22(金) 19:32:04おしえてくれるスレですか?
かなりながいソースなんですが。
0370デフォルトの名無しさん
2008/02/22(金) 19:45:43そりゃもう手取り足取り
どれだけ長いソースでも宿題であれば片付けるよ
それが2ちゃんクロリティ
0371デフォルトの名無しさん
2008/02/22(金) 19:50:06流れをかいたファイルといろいろこみの
tar.gz形式のファイルでうpします
あとで。
0372デフォルトの名無しさん
2008/02/22(金) 19:53:24教授から出されたような難解で困難な宿題?
0373デフォルトの名無しさん
2008/02/22(金) 23:14:14[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6076.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:月曜日までといいたいところですが
[5] その他の制限:
おねがいします。わからないことがあれば聞きます。
0374373
2008/02/22(金) 23:20:53こちらです
すいません。
0375デフォルトの名無しさん
2008/02/22(金) 23:24:36件のファイルが既にありません。
しかも、「実行ファイルを実行せよ」というのはかなり怪しいです。
ウィルスなら誰も手を出しません。
0376373
2008/02/22(金) 23:35:20あとでみたらログチェックしたままのファイルでした
0377デフォルトの名無しさん
2008/02/22(金) 23:47:07せめてPDFくらいは・・・
あと実行ファイルは誰も実行せんがな(´・ω・`)
0378373
2008/02/22(金) 23:50:28すいません。
0379デフォルトの名無しさん
2008/02/22(金) 23:53:25でも俺の周りでdvioutとかGhost Scriptとかまで入れてるのは二三人しかいないなぁ……
そもそもTeXすら入れてないってやつが多いし……
Linuxのパッケージ?にはUNIX派生のいろいろが入っているからいいんだろうけど……
0380デフォルトの名無しさん
2008/02/23(土) 00:55:590381デフォルトの名無しさん
2008/02/23(土) 00:58:44そのファイル読んだけど、やってる処理に関する知識を持ってないから全く分からん
その点も説明して貰わんと、分かる人間しか答えられんぞ
0382デフォルトの名無しさん
2008/02/23(土) 01:19:49コメントをいれるようにしてもう一度うpします。
そっちのほうがわかるとおもうので。
0383373
2008/02/23(土) 13:37:46お願いします。
http://www12.axfc.net/uploader/18/so/Ne_12711.gz.html
0384デフォルトの名無しさん
2008/02/23(土) 16:16:36コンパイルすら通らずにエラーや警告出まくりなんで止めた。
0385デフォルトの名無しさん
2008/02/23(土) 16:21:040386デフォルトの名無しさん
2008/02/23(土) 17:21:51ヘッダファイルをチェックしてみては?
Windowsには無くてLinuxにはある、っていうヘッダがたくさん含まれている可能性もある
0387デフォルトの名無しさん
2008/02/23(土) 19:14:260388デフォルトの名無しさん
2008/02/23(土) 19:27:170389デフォルトの名無しさん
2008/02/23(土) 19:52:270390デフォルトの名無しさん
2008/02/23(土) 23:02:520391デフォルトの名無しさん
2008/02/23(土) 23:08:25void 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");
}
全然わからなくて、とりあえず作ってみたのがこれです。間違いだらけだと思いますが教えていただけたら嬉しいです。
あと、プログラムの終了条件は文字データの入力がないときです。よろしくお願いいたします。
0392デフォルトの名無しさん
2008/02/23(土) 23:09:55[2] 問題文:キーボードから入力した内容をファイルに保存して表示するプログラムを作りなさい。
[3] 環境
[3.1] OS: WindowsXP
[3.2] コンパイラ名とバージョン: visual stdio
[3.3] 言語: C
[4] 期限:2月25日まで
[5]上のものです。間違って先にプログラムの方を投稿してしまいました。
環境等はこちらです。すみませんでした。
0393デフォルトの名無しさん
2008/02/23(土) 23:22:40#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;
}
0395デフォルトの名無しさん
2008/02/24(日) 00:04:26どうですかね?
バグはみつかりましたか?
0396デフォルトの名無しさん
2008/02/24(日) 00:58:57訂正のとおりに実行してみたら無事にできました。お早い返答ありがとうございました。
0397デフォルトの名無しさん
2008/02/24(日) 01:54:24これか
0398デフォルトの名無しさん
2008/02/24(日) 02:00:08どれだよw
0399デフォルトの名無しさん
2008/02/24(日) 02:09:19こちらか
0400デフォルトの名無しさん
2008/02/24(日) 13:10:21[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 は巡回頂点数です
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6084.txt
0401デフォルトの名無しさん
2008/02/24(日) 15:13:14ちょっと質問
ソースとか全然みてないでいうんだが、問題文は「厳密解」になってるけど
動的計画法って「近似解」を求める方法じゃない?
0402デフォルトの名無しさん
2008/02/24(日) 15:19:46すまn
漏れの勘違いだったorz
0403デフォルトの名無しさん
2008/02/25(月) 02:00:32http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6086.c
・cost のサイズがでかすぎで手元でコンパイル通らなかったので減らした
・n や dist や CITY_NUM の定義が分からなかったので適当に補間した
以後ソースを挙げるなら定義の部分も含めてくれ
実行可能であることが最も望ましい
0405デフォルトの名無しさん
2008/02/25(月) 17:53:48[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6089.txt
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限: 2月29日正午ごろまで(できれば28日中)
[5] その他の制限:
問題文の例の図がずれて見づらくなっちゃってます。すみません。
←valueの行で‖と‖の間が空白の場所は数値が入っておらず、演算子に対応してる位置だと思ってください。
また、大分長くなってしまってもいいので、なるべく簡単なプログラムでお願いします。
可能であればでいいので、何を目的とした部分なのか程度の注釈をいくつかつけてくださると助かります。
0406デフォルトの名無しさん
2008/02/25(月) 20:57:34[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 内部処理エラー 上記のエラーに該当しない場合。
丸なげでごめん
0407デフォルトの名無しさん
2008/02/25(月) 21:04:29勤怠情報ファイルのフォーマットもなしどうしろと?
丸なげどころか、情報がたりなすぎる
0408デフォルトの名無しさん
2008/02/25(月) 21:19:28すまんまだはじめたばっかで
フォーマットを検索してもわからん
でもこんな感じになるはずなんだ
http://yutori.2ch.net/test/read.cgi/news4vip/1203862807/
の>>4と>>5
0409デフォルトの名無しさん
2008/02/25(月) 21:24:18見えない
なんで検索しないといけないのかも分からんよ
0410デフォルトの名無しさん
2008/02/25(月) 21:26:18とりあえずツッコミどころが満載だな……
・CSVファイル生成機能(kin_create_csv())でのエラーは捕まえないの?
・エラーを出すのなら、その逆として「●●の処理は成功しました」と順次表示していくと親切じゃない?
・NG→ERR_internal の方がかっこよくない?
・ERR_TIME_LOGICで、「一ヶ月の勤務日数が32日です」とか
「終業時刻+残業時間が、退勤時刻を超えてる」とかも出したほうが親切じゃない?
0411デフォルトの名無しさん
2008/02/25(月) 21:32:10int 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);
すまんこんな感じになると思うんだ
0412デフォルトの名無しさん
2008/02/25(月) 21:34:46すごい親切だと思うけどどうやるかさっぱりわからん
0413デフォルトの名無しさん
2008/02/25(月) 21:36:34fopenを二回やることになるぞ
・引数ありで起動した場合
・引数なしで、ファイルパスを指定(入力?)する場合
0414デフォルトの名無しさん
2008/02/25(月) 21:47:15引数与えないと起動しないようにするらしい
kintai kin0004.txtをつけるなければきどうしないようにする
0004は日付が入るyymmでyyが西暦の下二桁mmが該当月
.txt入らないと起動しないようにするみたいなです
0415デフォルトの名無しさん
2008/02/25(月) 21:53:12「ファイル構文」という用語を持ち出すほどだから、
勤怠情報のファイルフォーマットはxmlくらいのものだと思った
CSV出力があるのなら、最初からCSV形式で勤怠情報のファイルフォーマットを策定すればいいんじゃない?
古い諺だが
データ構造+アルゴリズム=プログラミング
と言うし。
0416デフォルトの名無しさん
2008/02/25(月) 21:58:06ありがと
でも初心者の俺にはさっぱり意味がわからん
0417デフォルトの名無しさん
2008/02/25(月) 22:15:290418デフォルトの名無しさん
2008/02/25(月) 22:32:40問題文にkintai kin0004.txtだった 。.txtぬけてたすまん
0419デフォルトの名無しさん
2008/02/25(月) 23:22:08たまねぎ炒めるところから始めて、
かなり気合入れて作った。
たまねぎの量、土日あわせて6玉。
うまかった。
でも今日の屁が死ぬほどくさい。
0420デフォルトの名無しさん
2008/02/25(月) 23:27:19でも実験という名目ならいいのかな??
0421デフォルトの名無しさん
2008/02/25(月) 23:33:190422デフォルトの名無しさん
2008/02/25(月) 23:33:530423デフォルトの名無しさん
2008/02/25(月) 23:35:560424デフォルトの名無しさん
2008/02/26(火) 00:03:540425デフォルトの名無しさん
2008/02/26(火) 02:25:49多少問題文とやり方が違うし、あんま自信ないけど、一応できたのでうp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6091.txt
0426デフォルトの名無しさん
2008/02/26(火) 04:07:540427デフォルトの名無しさん
2008/02/26(火) 07:14:34乙です
ありがとう
0428デフォルトの名無しさん
2008/02/26(火) 11:45:04[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
0429デフォルトの名無しさん
2008/02/26(火) 12:11:460430デフォルトの名無しさん
2008/02/26(火) 12:32:22[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] その他の制限:特になし
ド素人な課題で申し訳ないのですがよろしくお願いします。
0431デフォルトの名無しさん
2008/02/26(火) 13:21:29それ本当にC++の授業なのか?
C++の特色のひとつは、Cから格段に進化した文字列操作だぞ
0432デフォルトの名無しさん
2008/02/26(火) 13:31:08つーかそれ、FILE * fp = fopen("IDList.txt", "w")してsprintf(str, ...)をfprintf(fp, ...)にすればいいだけじゃん。
0433デフォルトの名無しさん
2008/02/26(火) 13:55:13C++の授業ではないのですが、C言語の授業の延長の授業で、
環境がC++だったんでそのように書きました、申し訳ありません。
確かにやっていることは++は含んで無いのだと思います。
>>432
ありがとうございます。
"a"にしたら望んでいた物になりました。
0434デフォルトの名無しさん
2008/02/26(火) 16:43:10[2] 問題文(含コード&リンク):ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6092.txt
[3] 環境
[3.1] OS: Linux /Windows
[3.2] コンパイラ名とバージョン: (Linux)gcc /(Windows)コマンドプロンプト上でコンパイル
[3.3] 言語: C
[4] 期限: 2月28日中
[5] その他の制限:長いプログラムになっても構いませんので簡単めなプログラムでお願いします。
設問1と設問3は自分で考えて辿り着いた答を書いてます。違っていたら指摘お願いします。
問2のコメント以下は実際に実行時間を計測して考察しろ的なものだと思うのですが、
どうやればいいのかいまいち分からないため簡単にでいいのでどうやればいいのか教えてください。
0435デフォルトの名無しさん
2008/02/26(火) 18:53:38これ問題文そのまま「コピペ」してるか?
0436デフォルトの名無しさん
2008/02/26(火) 18:59:02設問2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6093.c
設問3
NULL: 「これ以上前の文字が存在しない」はOK、「次の文字に移る」は、違う
DEL: 「これ以上後の文字が存在しない」はOK、「全文字の並べ替え終了」は、違う
s1 スタックには下→上に、文字が小→大で積まれる
s2 スタックには下→上に、文字が大→小で積まれる
ので、s1,s2のスタックに有効な文字データが無い状態をチェックするために使用している(番兵)
つまり、2.aの処理の場合にNULL文字がなければ、
s1スタックにデータが無いという状態をチェックする文( if (s1が空) { ... } のような文 ) が必要になるが、
番兵(NULL文字)を用いることにより、その必要がなくなる
(番兵については、wikiでもみてね)
0437400
2008/02/26(火) 20:51:48ありがとうございます。
説明不足で余計なお手数をおかけしてしまい申し訳ありません。
確かに、double では静的確保に成功する配列サイズなのに、
int で同じ添え字の配列を確保しようとすると確かにクラッシュするようです。不思議ですね。
その点は malloc で動的確保することで無事に動作しました。
0438438
2008/02/26(火) 21:23:50#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;
}
0439デフォルトの名無しさん
2008/02/27(水) 00:11:44[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
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6095.txt
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2008/02/27 23;59迄
[5] その他の制限:特にありません。
よろしくお願いします。
0440デフォルトの名無しさん
2008/02/27(水) 00:17:52[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] その他の制限:使用したアルゴリズムは全て関数化する。
ルンゲクッタ法を使用
どうしてもわからないのですみませんがお願いします。
0441デフォルトの名無しさん
2008/02/27(水) 00:26:00微分方程式を解くのか?
0442デフォルトの名無しさん
2008/02/27(水) 00:32:01そうなんだと思います。
0443デフォルトの名無しさん
2008/02/27(水) 01:23:12[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
が出力されるようにする。
よろしくおねがいします
0444デフォルトの名無しさん
2008/02/27(水) 01:29:42http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6096.txt
0445デフォルトの名無しさん
2008/02/27(水) 01:31:440446デフォルトの名無しさん
2008/02/27(水) 01:38:15http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6097.txt
こっちが正しい。
0447デフォルトの名無しさん
2008/02/27(水) 01:44:13#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;
}
0448デフォルトの名無しさん
2008/02/27(水) 01:46:34str〜関数を使えってことかな?
0449デフォルトの名無しさん
2008/02/27(水) 02:15:44ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6098.c
>>444-446
連接の解釈が違うきがする
0450デフォルトの名無しさん
2008/02/27(水) 02:22:55ああああああ!!!
そうか、そういうことか。
0451443
2008/02/27(水) 02:27:24すみません、書き忘れてましたorz
配列でなくポインタででした・・
>>448
strのとこはstrcpyとか使わないでということです。
0452!= 447
2008/02/27(水) 02:48:15bufA[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;
}
0453440
2008/02/27(水) 04:50:45どうすればいいかもまったくわからないです…
どのような解法でもいいのでどなたか本当にお願いします。
0454デフォルトの名無しさん
2008/02/27(水) 10:02:02この温度変化の微分方程式の本質は
dT(t)/dt = a * T(t) + b
という形になるはず。
この解は、微分しても同じ形の関数T(t)が出てくるので、
T(t) = c * e^t
のように、指数関数になる、っていうのまではいいのか?
0455デフォルトの名無しさん
2008/02/27(水) 10:15:33それはよくないんじゃないか?
0456デフォルトの名無しさん
2008/02/27(水) 10:18:020457440
2008/02/27(水) 10:58:22そこまではわかったんですが…どのようにソースを作ればいいのかがわからないです。
ルンゲクッタ法を用いてやってみているんですが解が求まりません…
0458デフォルトの名無しさん
2008/02/27(水) 11:01:17ありがとうございます!
0459デフォルトの名無しさん
2008/02/27(水) 11:02:55ある程度できてるならソース張って添削してもらった方が早いと思うぞ。
0460デフォルトの名無しさん
2008/02/27(水) 11:45:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6100.cpp
0461デフォルトの名無しさん
2008/02/27(水) 11:47:16T(t) = c e^t だったら温度が指数関数的に吹っ飛ぶことになるが
0462440
2008/02/27(水) 12:43:05曖昧なところが多々あってすいません。
double Onndo(double t0, double T0, double h,double k)
{
int i;
int x,y,k1,k2,k3,k4,h2;
double K ; /* 解法で得られた値を格納する変数 */
x=t0;y=T0;
h2=h/2.;
for(i=0;i<=y;i++){
k1=f(x,y,k);
k2=f(x+h2,y+h2*k1,k);
k3=f(x+h2,y+h2*k2,k);
k4=f(x+h,y+h*k3,k);
x=t0+(double)i*h;
y+=(k1+2.*k2+2.*k3+k4)*h/6.;
}
K=x;
return K;
}
0463440
2008/02/27(水) 12:44:34*---- 関数f(x,y)の設定 ----*/
double f(double x, double y,double k)
{
double f;
f=k*(y-300)*x;
return f;
}
/*----- 解の設定 -----*/
double Ans_f(double y,double x,double k)
{
return exp(-k*x);
}
k=(-6*ramu*Nu)/(Cp*ro*d*d);として計算しています。
0464デフォルトの名無しさん
2008/02/27(水) 14:31:19[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6101.txt
[3] 環境
[3.1] OS: (Windows/Linux/等々) Linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 28日24:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
まだ講義ではそこまで深くプログラミングを学んでいないため、if文for文など簡単な文を多めに使う感じにしてください。
プログラムでなく考察を要求してるところを横棒で区切りました。
そちらの方にも軽くヒントなどいただきたいです。
0465デフォルトの名無しさん
2008/02/27(水) 15:53:39Cp……銅の比熱(500K)
ρ……銅の密度(500K)
d……???
λ……熱伝達係数
Nu……ヌッセルト数
流速3m/s はどこで使うの?
d は何?
πd^2((λ/d)Nu) の部分は πdλNu と約分できそうだけど、ホントにこのままでいいの?
それともd^2ってのは二階微分を表してるの?
0467デフォルトの名無しさん
2008/02/27(水) 22:56:46[2] 問題文(含コード&リンク):
コマンド ライン引数に指定されたファイルすべてに対して、 改行文字以外の各行を、
逆さまにして表示するプログラムを書いてください。
なお、対象のファイルには英数字などの半角文字のデータのみが入っているものとし、
漢字などの全角文字は含まれていないものとします。
[3] 環境
[3.1] OS:Windows XP
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C
[4] 期限: 2008年2月28日 11:00
[5] その他の制限:
1.文字列の最後の文字から先頭に向かって、順に 1 文字ずつ表示
(ただし、文字列の最後の文字が改行文字の場合、その次から始める)
2. 1 で改行文字があったならば、改行文字を表示
だれかよろしくお願いします
0468デフォルトの名無しさん
2008/02/28(木) 00:26:20#include <stdio.h>
#include <string.h>
static void flip(char * str)
{
char * tail = strchr(str, '\n');
if (tail == NULL) tail = strchr(str, '\0');
for (--tail; str < tail; ++str, --tail) {
char foo = * str;
* str = * tail;
* tail = foo;
}
}
static void flipCat(const char * fileName)
{
FILE * fp = fopen(fileName, "r");
char buf[1000];
while (fgets(buf, sizeof(buf), fp) != NULL) {
flip(buf);
fputs(buf, stdout);
}
fclose(fp);
}
int main(int argc, char ** argv)
{
for (int ic = 1; ic < argc; ++ic) {
flipCat(argv[ic]);
}
return 0;
}
0469デフォルトの名無しさん
2008/02/28(木) 00:43:38http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6103.txt
こんな感じかな?
再帰関数を使っているのであんまりサイズが大きい配列だとプログラムが異常終了するかも
あと時間の計測方法は知らん
適当にmain関数を使っていじってみて
0470デフォルトの名無しさん
2008/02/28(木) 07:54:50[2] 問題文(含コード&リンク):以下の条件を満たしロトのプログラムを作成しなさい。
1 1〜42の中から6つの数字と1つのボーナス数字を選ぶことができます。ただし同じ数字を選ぶことはできません。
2 7つの数字は1次元配列の中になければなりません。
3 1つ1つの問題に対して関数定義を作り1つのプログラムで完成させなさい(関数を使う)
4 すべての関数はポインタを使いなさい。
問1 6つの数字と1つのボーナス数字を選ぶプログラム(エラー表示を含む)
問2 選らんだ数字とボーナス数字を1次元配列で表示しなさい
問3 選んだ数字とボーナス数字を小さい順に並べなさい
問4 ランダムに抽選されるプログラムを作り選んだ数字と比較し、以下の中の1つを表示させなさい
Match 6 Jackpot
Match 5 + Bonus Almost - just 1 away
Match 5 Holidays paid for
Match 4 + Bonus Night out
Match 4 Full petrol tank
Match 3 + Bonus Grub at local takeaway
問5 何回数字を選んだか表示しなさい (例)1はx回選ばれました
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン:
[3.3] 言語:C言語
[4] 期限:2008年3月3日まで
[5] その他の制限:ありません
丸投げです。どなたかよろしくおねがいします。
0471デフォルトの名無しさん
2008/02/28(木) 09:24:35http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6104.txt
0472470
2008/02/28(木) 09:35:36質問なんですが問4のランダム抽選はどのように表示されますか?
0473470
2008/02/28(木) 09:56:40>>471 ほんとうにありがとうございます。
0474デフォルトの名無しさん
2008/02/28(木) 10:20:39test2.c(26) : error C2143: 構文エラー : ';' が '型' の前にありません。
test2.c(26) : error C2143: 構文エラー : ';' が '型' の前にありません。
test2.c(26) : error C2143: 構文エラー : ')' が '型' の前にありません。
test2.c(26) : error C2143: 構文エラー : ';' が '型' の前にありません。
test2.c(26) : error C2065: 'ic' : 定義されていない識別子です。
test2.c(26) : warning C4552: '<' : 演算子にプログラム上の作用がありません。作用
を伴う演算子を使用してください
test2.c(26) : error C2059: 構文エラー : ')'
test2.c(26) : error C2065: 'ic' : 定義されていない識別子です。
test2.c(26) : error C2143: 構文エラー : ';' が '{' の前にありません。
test2.c(27) : error C2065: 'ic' : 定義されていない識別子です。
と表示されるのですが…
0475デフォルトの名無しさん
2008/02/28(木) 10:47:43int ic;
for (ic = 1; ic < argc; ++ic) {
に変えたら?
0476デフォルトの名無しさん
2008/02/28(木) 13:38:15[2] 問題文(含コード&リンク):キーボードから整数の入力を4回繰り返し,それらの値を2次元配列 A の各要素に順に代入し,その行列のそれぞれの要素と行列式を表示するプログラムを作成せよ.
結果例
1行1列の要素? 6
1行2列の要素? 5
2行1列の要素? 4
2行2列の要素? 3
行列A =
6 5
4 3
行列式 = 2
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: VC
[3.3] 言語: C++
[4] 期限: 本日夕方6時まで
もしよろしければどなたかお願いします。
0477デフォルトの名無しさん
2008/02/28(木) 13:50:12#include <stdio.h>
int main(void)
{
int a[2][2],i,j;
for(i=0;i<2;i++){
for(j=0;j<2;j++){
printf("%d行%d列の要素? ",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
printf("行列A =\n%d %d\n%d %d\n",a[0][0],a[0][1],a[1][0],a[1][1]);
printf("行列式 = %d",a[0][0]*a[1][1]-a[0][1]*a[1][0]);
return 0;
}
0478デフォルトの名無しさん
2008/02/28(木) 14:10:59早すぎるお仕事、ありがとうございました
0479デフォルトの名無しさん
2008/02/28(木) 21:18:180480デフォルトの名無しさん
2008/02/28(木) 21:29:27昨日から作ってるけど速くならない
0481デフォルトの名無しさん
2008/02/29(金) 00:31:48[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6106.txt
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc
[3.3] 言語:C
[4] 期限: 2008年3月1日
[5] その他の制限:
0482デフォルトの名無しさん
2008/02/29(金) 00:56:15どんな環境でどんなデータに対してどれだけ時間がかかるのが遅いって言うんだ?
基準をplz
0483デフォルトの名無しさん
2008/02/29(金) 01:06:59#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#define BSIZE 128
int main(int argc, char **argv){
int rfd, rdnum
char buf[BSIZE];
if ((rfd = open(argv[1], O_RDONLY)) == -1) {
perror(argv[1]);exit(1);
} else {
printf("ファイルのオープンに成功しました\n");
}
while(1){
if ((rdnum=read(rfd,buf,BSIZE))<1) break;
printf(" %d\n",rdnum);
}
close(rfd);
return 0;
}
0484デフォルトの名無しさん
2008/02/29(金) 01:11:21全文字列を展開してソートした場合
#include <iostream>
#include <string>
#include <set>
#include <time.h>
using namespace std;
class gou{
public: string str; int num;
gou(string a, int b){str=a; num=b;}
bool operator<(const gou& a)const{return str<a.str;}};
main(){
int sz=20000,n;
string a(sz,'\0');
for(n=0;n<sz;n++)a[n]=rand()&255;
multiset<gou> s;
int cl=clock();
for(n=0;n<sz;n++){ s.insert(gou(a,n)); a=a.substr(1)+a[0];}
cl=clock()-cl; cout<<"20kのブロックーソート "<<(cl+0.0)/1000<<"sec \n";
}
0485デフォルトの名無しさん
2008/02/29(金) 01:15:30トン
0486デフォルトの名無しさん
2008/02/29(金) 02:33:11[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
1) 3つの「点」からなる構造体「三角形」を作成しなさい。1つの「三角形」を構成する3つの頂「点」の座標を読み込み、三角形の重心を求めなさい。
2) 「三角形」の重心を計算する関数を作成しなさい。この関数を用いて問題1を行いなさい。
3) 2つの「三角形」の「頂点」の座標を読み込み、どちらの「三角形」の中心点が原点に近いか求めなさい。
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: Borland C++Compiler Version 2.31
[3.3] 言語:C++
[4] 期限: 2008年2/29日中
[5] その他の制限: なし
切羽詰って依頼します。よろしくお願いします。
0487デフォルトの名無しさん
2008/02/29(金) 03:54:353)は、「中心点が原点に近いか」じゃなくて「重心が原点に近いか」じゃないの?
0488デフォルトの名無しさん
2008/02/29(金) 07:58:42各座標のx,yをそれぞれ足して3で割るだけじゃん。
0489デフォルトの名無しさん
2008/02/29(金) 15:57:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6107.txt
0490デフォルトの名無しさん
2008/02/29(金) 17:06:38#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/time.h>
#include<math.h>
typedef unsigned char byte_t;
int srcsize;
int comp(const void *p1, const void *p2){ return memcmp(*(byte_t**)p1, *(byte_t**)p2, srcsize); }
int main(void){
int n;
byte_t *src, *blockarea, *tmp, **blocklst;
struct timeval stv={0}, etv={0};
srcsize=20000;
src = (byte_t *)calloc(sizeof(byte_t),srcsize);
blockarea = (byte_t *)calloc(sizeof(byte_t),(srcsize*srcsize));
blocklst = (byte_t **)calloc(sizeof(byte_t*),srcsize);
if(src == NULL || blockarea == NULL || blocklst == NULL){ return 1; }
for(n=0;n<srcsize;n++)src[n]=rand()&255;
gettimeofday(&stv, NULL);
memcpy(blockarea, src, srcsize);
blocklst[0] = blockarea;
for(n=1,tmp=blockarea+srcsize; n<srcsize; n++, tmp+=srcsize){
memcpy(tmp, src+n, srcsize-n);
memcpy(tmp+srcsize-n, src, n);
blocklst[n] = tmp;
}
qsort(blocklst, srcsize, sizeof(byte_t*), comp);
gettimeofday(&etv, NULL);
fprintf(stderr, "time %g sec\n", (etv.tv_sec-stv.tv_sec)+abs(etv.tv_usec-stv.tv_usec)/1000000.0);
return 0; }
0491デフォルトの名無しさん
2008/02/29(金) 17:30:14あっ、インデックス保持してやないや
メモリの解放もわすれてるし・・・
どうも、ボケてるな
0492デフォルトの名無しさん
2008/02/29(金) 18:18:410493デフォルトの名無しさん
2008/03/02(日) 13:33:08[2] 問題文(含コード&リンク):
<四則演算機の作成>
テキストファイルから数式を読み出し、計算結果を別ファイル名で出力する。
数式には、+−*/()を含む。計算結果は整数とし、小数点以下は切り捨てる。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C++
[4] 期限: 2008年3月3日10:00まで
[5] その他の制限:逆ポーランド記法に並び替えて計算するという手順で
プログラムを作成しなさいとの説明がありました。逆ポーランド記法に
並び替えるプログラムで詰まってしまい先に進めらなくなってしまいました。
丸投げなのですがよろしくおねがいします。
0494デフォルトの名無しさん
2008/03/02(日) 16:00:36[2] 問題文(含コード&リンク):
<copying-GCをC言語で作成 >
授業で行ったcopying-GCをC言語でせよ。
[3] 環境
[3.1] OS:Windows
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C言語
[4] 期限: 2008年3月5日00:00まで
[5] その他の制限:なし
C言語が大の苦手で、今遅れを取り戻そうとしているのですが。
期限が迫り、自分ではやってみるもののまったくわからないのでお願いします。
0495デフォルトの名無しさん
2008/03/02(日) 16:09:410496デフォルトの名無しさん
2008/03/02(日) 16:17:110497デフォルトの名無しさん
2008/03/02(日) 16:36:470498デフォルトの名無しさん
2008/03/02(日) 17:34:480499デフォルトの名無しさん
2008/03/02(日) 22:22:58#include "copying-GC.h"
#include <stdio.h>
int main(void) {
char s1[]="copying-";
char s2[]="GC";
printf("%s\n", copygin-GC(s1, s2));
return 0;
}
0500デフォルトの名無しさん
2008/03/02(日) 23:03:31雑誌の後ろらへんとか見てみたんだけどなかった、、、かといって会社に頼むとめちゃくちゃ高いし...
0501デフォルトの名無しさん
2008/03/02(日) 23:11:24そうでないならそもそもスレ違い。
0502デフォルトの名無しさん
2008/03/02(日) 23:23:03スレ違いということなので、他で探してくる...orz
0503デフォルトの名無しさん
2008/03/02(日) 23:53:26専門知識が必要だと厳しいかも知れんが、参考になりそうなサイトでの添付してくれれば
やさしいお兄さんが答えてくれる可能性はグンと上がると思うよ?
0504デフォルトの名無しさん
2008/03/02(日) 23:55:16前方後円墳の容積を求める宿題なら。。
0505デフォルトの名無しさん
2008/03/03(月) 08:26:08途中までです。仕事から帰ったら完成させます。すんません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6112.txt
0506デフォルトの名無しさん
2008/03/03(月) 09:58:24泥臭い
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6113.txt
0507デフォルトの名無しさん
2008/03/03(月) 19:16:16C言語で書いてみたんだが、まだ必要だったらレスplz
参考までに速度比較(速度調べるために遅いマシンで測定した)
>>484 のコードで 20000 の時 8.96 sec
書いてみたコード 20000 の時 0.11 sec
書いてみたコード 200000 の時 1.41 sec
0508デフォルトの名無しさん
2008/03/03(月) 19:19:39493です、ありがとうございました。
直前で見ることができなかったのですが、
なんとか明日まで延ばしてもらえたので
ありがたくいただきます。
0509デフォルトの名無しさん
2008/03/03(月) 19:53:44ありがとう
でも前ちょっと聞いたんだけどスルーされちゃったから(キャプチャ関係)
ちょっと切羽詰ってて、やらなきゃいけないので
当然謝礼はちゃんと出しますのでやって頂ける方はメールください(捨てアドでいいので)
スレ違いすぎるのでとりあえずこれくらいで書き込みはやめます
よろしくお願いします
0510デフォルトの名無しさん
2008/03/03(月) 20:36:52もう書いてる人いるけどせっかくだから張ってみる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6118.cpp
0511デフォルトの名無しさん
2008/03/03(月) 20:58:44条件が有りまして
for文のネストもしくはwhile文のネストを使ってなおかつgoto文を使って下さい
よろしくお願いします。
0512デフォルトの名無しさん
2008/03/03(月) 21:01:18>>1 を読んで書き直すか下のURLクリック
ttp://pc11.2ch.net/test/read.cgi/tech/1203343907/394
0513デフォルトの名無しさん
2008/03/03(月) 22:08:590514デフォルトの名無しさん
2008/03/03(月) 22:33:35↑外側 ↑内側
これの内側のmapにデータがある時に外側のmapをclearした場合、内側のmapに格納してあるデータは自動的に解放されるのでしょうか?
0515デフォルトの名無しさん
2008/03/03(月) 22:36:46解放されます
というか、特定の型の場合だけ残すほうが難しいよ
0516デフォルトの名無しさん
2008/03/03(月) 22:45:31ありがとうございます。
感謝です。
いつもわざわざ内側をclearしてから外側をclearしていました。><
0517デフォルトの名無しさん
2008/03/03(月) 23:07:59おお、さらに書いていただけたとは・・。
ここまで短くなるものなのですね。自分で途中まで書いてたものが
えらく長かったので助かります。505-506の方のと両方参考にして
提出後自分で練り直してみたいとおもいます。
ありがとうございました。
0518デフォルトの名無しさん
2008/03/04(火) 00:41:18俺も作ったから貼ってみる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6119.c
0519デフォルトの名無しさん
2008/03/04(火) 02:05:34[2] 問題文(含コード&リンク):()
for文を使用して、15パズルを作成せよ。
出来るなら経過時間も表示させること。
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C++
[4] 期限: 2008年3月29日まで
[5] その他の制限:
学校の課題です。出来るところまでやってみたものをろだにあげてあります。
開始時にランダムにピースを配置するものと、正解判定、経過時間の表示が手付かずの状態です。
出来ればあれ(ろだ、6120.txt)に手を加える形で作って頂ければ助かります。
0520519
2008/03/04(火) 02:08:50ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6120.txt
です。
0521505
2008/03/04(火) 02:19:22当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4)です。
すでに他の方のすばらしいものがあり、私のもののメリットは皆無です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6121.txt
0522デフォルトの名無しさん
2008/03/04(火) 02:20:54まずは、パズル.bmpと、空きに、指定する、数字と、完成形を、示して、ください
0523デフォルトの名無しさん
2008/03/04(火) 03:24:29大変もうしわけありませんでした。
パズル.bmpはこちら(ttp://neko-loader.net/pict/src/neko18219.bmp)です。アップローダー(ねころだ)ですがご容赦ください。
完成形は、どう言えば良いんでしょうか。
「実行したときには、すでに数字パネルがバラバラに配置されている」「それをパズル.bmpのように元通りに直したら完成と表示される」
といった形です。
最初に表示される画像は完成したパズルの形だけれども、その後バラバラに配置されて……といった流れはなくとも大丈夫のようです。
15パズルとしては、Wikiペディア(ttp://ja.wikipedia.org/wiki/15%E3%83%91%E3%82%BA%E3%83%AB)に書いてあるものと同じスタンダードなものです。
メイン関数の部分にオセロゲーム、と書いてありますが、そこは消し忘れですので気になさらないでください。
本当に申し訳ないのですが、「空きに指定する数字」というのがよくわからず……。
こちらの知識不足で、ご迷惑をおかけしますが、どういったことでしょうか。
0524デフォルトの名無しさん
2008/03/04(火) 08:00:38なにが判らないのか判らない。15パズルが、ピースを一つずつずらしていくパズルだと言うことは理解できているの?
先ずはWeb上にある15パズルを探してきて自分で動かしてみたら?
0525デフォルトの名無しさん
2008/03/04(火) 12:51:42一応、そのあたりのことは理解しているつもりなのですが……。
現状(6120.txt)では、キーボードの上下左右を押して、ピースをずらす、という段階までは作れたつもりなんですが
「ピースを順番どおりにきちんと並びかえたときに、どうやってそれを判定するのか」
「最初にどうやってピースがバラバラに配置された状態にすればいいのか」
の二つがわからなかったんです。
0526デフォルトの名無しさん
2008/03/04(火) 13:14:32きちんと並んだかどうかは、例えば1から15までのピースに1から15までの番号を振りブランクに0を振ったとして、
それらが1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0になったかどうかで判断すればいい。
初期位置は、解けないパズルになる可能性が合ってもいいなら、1から15までとブランクをシャッフルして配置すれば宜しい。
解けないパズルになってはいけないのなら、揃った状態からプログラム的にランダムにピースを操作するしかない。
0527デフォルトの名無しさん
2008/03/04(火) 13:37:12> 揃った状態からプログラム的にランダムにピースを操作するしかない。
本当?
0528デフォルトの名無しさん
2008/03/04(火) 13:38:430529デフォルトの名無しさん
2008/03/04(火) 15:35:200530デフォルトの名無しさん
2008/03/04(火) 16:04:17if(masu[1][0]==1)&&(masu[2][0]==2)……という風にやっていけば大丈夫でしょうか。
ひとまずやってみます。アドバイス本当にありがとうございます。
ピース配置のほうも、助かりました。>>529さんも、ありがとうございます。
揃った状態から盤面をランダムにする、という方法でひとまずやってみたいと思うのですが……。
randを使用すれば良いんでしょうか。
0531デフォルトの名無しさん
2008/03/04(火) 18:42:17パリティが奇だったら最後の2ピースひっくり返すだけ。面倒でもないよね。
0532528
2008/03/04(火) 19:35:340533デフォルトの名無しさん
2008/03/04(火) 19:39:3415パズルなら、randで4まで出るようにして、それを空白のマスで行う、とか
1……空白マスの上を動かす
2……右を
3……下を
4……左を
ってな具合に
角と辺では別処理
0534デフォルトの名無しさん
2008/03/05(水) 01:05:26ありがとうございます。自分では考えもつきませんでした……。
戴いた助言どおりに進めてみることにします。
0535デフォルトの名無しさん
2008/03/05(水) 04:56:30簡単に作ってみた。C++詳しくないんで中身はほとんどCだけど。
元のソースはよくわからんかったので全く利用してませんが悪しからず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6123.cpp
0536535
2008/03/05(水) 05:45:15sizeof(unsigned char) ではなく sizeof(unsigned int) です。
0537535
2008/03/05(水) 06:59:44moveTest()のDIR_NとDIR_Sは
case DIR_N: return (y_size > 1 && i >= x_size);
case DIR_S: return (x_size == 1) ? (y_size > 1 && i < y_size-1) : (y_size > 1 && i < (x_size-1) * y_size);
にしといて下さい。
あとshuffle()は最初のほうに if(x_size == 1 && y_size == 1) return; を加えて下さい。
0539デフォルトの名無しさん
2008/03/05(水) 22:29:19すみません。15パズルのパリティの計算を教えてください。
0540デフォルトの名無しさん
2008/03/05(水) 22:44:18初期状態に、戻すように、入れ替えて、いけば、いい、
それが、偶数回の、作業か、奇数回の、作業か、という、意味
0541デフォルトの名無しさん
2008/03/06(木) 00:05:03[2] 問題文(含コード&リンク):ls -lの様な結果を表示するプログラムを作成しなさい。
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:2008年3月8日まで
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6124.c
↑自力でここまで作ったのですが、user、group、ownerのアクセス方式の表示の仕方が分かりません。
それが表示出来るようになればst.st_modeの値の代わりにそれを表示出来るようにさせたいです。
よろしくお願いします。
0542デフォルトの名無しさん
2008/03/06(木) 00:17:11各ビットの意味はmanページに書いてあるだろ。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
例えばls -lがどう表示するのか知りたいならinfoにある。
スティッキービットなどを考慮しなくていいのなら、
drwxrwxrwx形式でdはディレクトリ、以下ユーザ、グループ、他人の、それぞれ読み込み、書き込み、実行許可。
そうそう、dの部分はシンボリックリンクやデバイスなどの場合はそれに合わせて変わるのも忘れずに。
0543デフォルトの名無しさん
2008/03/06(木) 00:24:48自力でそこまでできるんだったら、モードの表示も自力でできるだろう?
先頭の文字は、S_ISDIR(st.st_mode)ならば'd'、S_ISCHR(st.st_mode)ならば
'c'という風に表示すればいい。どう表示するかはman lsしてくれ。
残りの9文字は、st.st_mode & S_IRWXU ? 'r' : '-' のように一文字ずつ
出していけばいい。ただし、スティッキービットに注意すること。
0544デフォルトの名無しさん
2008/03/06(木) 00:32:01間違えた。st.st_mode & S_IRUSR ? 'r' : '-' だた。
0545デフォルトの名無しさん
2008/03/06(木) 05:06:3715パズルの任意の局面は、
(A)
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15
(B)
1 2 3 4
5 6 7 8
9 10 11 12
13 15 14
のいずれかからスタートした入れ替え操作で到達可能という意味.
(A)を(B)にする入れ替え操作は存在しない。(証明は簡単)
0546デフォルトの名無しさん
2008/03/06(木) 05:54:00亀レスだし、VCないからcursesライブラリ使ってだけど、できたからうpってみる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6126.txt
0547デフォルトの名無しさん
2008/03/06(木) 09:17:44#include <iostream>
using namespace std;
#define XX 99
int parity(int *board) {
int p = 0;
for (int i = 0; i < 16; ++i)
if (board[i] == XX) p ^= !(i & 4);
else
for (int j = i+1; j < 16; ++j)
if (board[i] > board[j]) p = !p;
return p;
}
int main() {
int board[] = {
1,XX, 2, 4,
5, 6, 3, 8,
9,10, 7,11,
13,14,15,12
};
printf("parity = %d\n", parity(board));
}
0548519
2008/03/06(木) 10:14:55>>546さん、>>547さん、
また、今まで助言を下さった方々、本当にありがとうございました。
0549デフォルトの名無しさん
2008/03/06(木) 19:13:46それを、あらかじめ、判定するという、話なんですが
0550デフォルトの名無しさん
2008/03/06(木) 20:07:33#define HEIGHT 4
#define WIDTH 4
typedef struct tab_board_t{
int num[HEIGHT][WIDTH];
}board_t;
int is_solvable(board_t *board){
int ret=1, x, y;
for(y=0;y<HEIGHT;y++){
for(x=0;x<WIDTH;x++){
ret=(ret+(board->num[y][x]/WIDTH-y))&1;
ret=(ret+((board->num[y][x]%WIDTH)-x))&1;
}
}
return ret;
}
/*
但し、完成した状態の定義を
board_t board={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
とする
*/
0551デフォルトの名無しさん
2008/03/06(木) 20:34:23間違ってるな
0552デフォルトの名無しさん
2008/03/06(木) 20:43:44{{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,15,14,13}}を、与えると、1が、返ってきて、しまいましたが、、、
未完の、大作と、評価して、おきます
0553550
2008/03/06(木) 21:50:12#define HEIGHT 4
#define WIDTH 4
#define BOARD_SIZE ((HEIGHT)*(WIDTH))
#define SPACE ((BOARD_SIZE)-1)
typedef struct tag_board_t{ int num[BOARD_SIZE]; }board_t;
int swap(int *a, int *b){
int c; c=*a; *a=*b; *b=c;
return (*a!=SPACE && *b!=SPACE); // 空白との交換はカウントしない
}
int sign(int a){ return (a>0)?1:(a<0)?-1:0; } // 数値の符号を返すだけ
int is_solvable(board_t *board){
int check_pos, swap_pos, target_pos, swap_count=0;
int diff_x, diff_y;
board_t work;
work=*board;
for(check_pos=0;check_pos<WIDTH*HEIGHT;check_pos++){
for(target_pos=0;work.num[target_pos]!=check_pos;target_pos++);
while(work.num[check_pos]!=check_pos){
diff_x = (check_pos%WIDTH) - (target_pos%WIDTH);
diff_y = (check_pos/WIDTH) - (target_pos/WIDTH);
if(diff_x) swap_pos=target_pos + sign(diff_x);
else swap_pos=target_pos + sign(diff_y)*WIDTH;
swap_count+=swap(&work.num[target_pos], &work.num[swap_pos]);
target_pos=swap_pos;
}
}
return (swap_count%2==0);
}
0554デフォルトの名無しさん
2008/03/06(木) 23:34:550555デフォルトの名無しさん
2008/03/07(金) 00:52:37[2] 問題文(含コード&リンク):()
大きな川のこちらの岸辺に n 艘の船がある。
船 j は川を t_j 分で渡ることができる。
船を動かすとき、二艘繋いで動かすこともできる。
このときは、遅い船の時間だけかかってしまう。
こちらの岸辺にある船をすべて向こうの岸辺に
持って行くためにかかる最短時間を求めよ。
入力:
船の艘数 n (≦ 1000000)
各船が川を渡る時間 t_1, ..., t_n
出力:
最短時間
[3] 環境
[3.1] OS: 問わず
[3.2] コンパイラ名とバージョン: 問わず
[3.3] 言語: どちらでも可
[4] 期限: 03/10 まで
[5] その他の制限: 特になし。
0556デフォルトの名無しさん
2008/03/07(金) 00:57:38全部、同時に、出港すれば、、、、
0557デフォルトの名無しさん
2008/03/07(金) 00:58:45t_1からt_nの中の最小値が答え。
0558デフォルトの名無しさん
2008/03/07(金) 00:59:150559デフォルトの名無しさん
2008/03/07(金) 01:01:230560555
2008/03/07(金) 01:07:34よくある問題設定なので書かなくても察してくれると思ってた・・・。
0561デフォルトの名無しさん
2008/03/07(金) 01:09:320562デフォルトの名無しさん
2008/03/07(金) 01:13:160563デフォルトの名無しさん
2008/03/07(金) 01:13:460564デフォルトの名無しさん
2008/03/07(金) 01:22:15int required_time(int* t, int n)
{
if(n<=0) return 0;
else if(n==1) return *t;
else return std::accumulate(t, t+n, 0) + *min_element(t, t+n) * (n-1);
}
0565デフォルトの名無しさん
2008/03/07(金) 01:27:01else return std::accumulate(t, t+n, 0) + *std::min_element(t, t+n) * (n-2);
0566555
2008/03/07(金) 01:28:44船の速さが 1 2 5 10 のとき、その解法だと 19 になりますが
最適解は 17 です({1,2}, {1}, {5,10}, {2}, {1,2})
0567デフォルトの名無しさん
2008/03/07(金) 01:35:270568555
2008/03/07(金) 01:44:05> 遅い船の時間だけかかってしまう。
は、遅い船のスピードに支配される、という意味で使っていました。
ああ、もうぼろぼろ・・・
0569デフォルトの名無しさん
2008/03/07(金) 08:37:08春休み中はスレも停滞するし、暇つぶしの問題は歓迎だろ。
ただ、2つの場所を種々の条件で移動する問題はなぞなぞの要素が強いと思われ。
0570デフォルトの名無しさん
2008/03/07(金) 08:54:01まあ俺はわからんけど
0571デフォルトの名無しさん
2008/03/07(金) 13:10:30少し考えてみようか。
解けない気がするけどw
0572デフォルトの名無しさん
2008/03/07(金) 13:47:35int required_time(int* t, int n)
{
int t_temp;
switch(n){
case 1: return t[0];
case 2: return t[1];
case 3: return t[0] + t[1] + t[2];
case 4: return t[0] + 3 * t[1] + t[3];
default:
t_temp = 2 * t[0] + 3 * t[1] + t[n-1];
t[1] = t[0];
return temp_t + required_time(t + 1, n - 3);
}
}
0573デフォルトの名無しさん
2008/03/07(金) 19:59:42なんかちがわね? t[] = {1,3,4,4} のとき
そのプログラムだと 1 + 3*3 + 4 = 14 だけど
(1,3)->, <-(1), (1,4)->, <-(1), (1,4)-> で13 になるよ
0574デフォルトの名無しさん
2008/03/07(金) 22:43:47また、お前か
0575デフォルトの名無しさん
2008/03/08(土) 01:34:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6128.txt
総当りでやってみた。100万艘とかは無理w
でもいろいろやってみると、以下が鉄則のようにみえる。
一、速い二艘を往復に使うべし
一、遅い方の船から二艘ずつを組にして渡るべし
0576デフォルトの名無しさん
2008/03/09(日) 16:08:31[2] 問題文:データ構造スタックを用いた逆ポーランド電卓の作成
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン:bcc32
[3.3] 言語: C
[4] 期限: 3月中
初心者です
四則演算が行える電卓を作りたいのですが、よろしくお願いします。
0577デフォルトの名無しさん
2008/03/10(月) 11:12:29[1] 授業単元:n/a
[2] 問題文(含コード&リンク):n/a
[3] 環境
[3.1] OS: (WindowsXPproSP2)
[3.2] コンパイラ名とバージョン: (bccフリー版最新)
[3.3] 言語: (どちらでも可)
[4] 期限: (無期限)
[5] その他の制限: ()
基本的なノリは成分分析やバーコードバトラーです。
・任意の文字列(桁数固定表記の数値がメイン)を任意のリスト(*)に基づいて一字ごとに点数化し、その和を返すプログラム。
・a.txtファイル内に一行毎に一個の文字列を記録した文字列を、上記で丸ごと処理しc.txtファイル(**)として返すプログラム。
リスト自体は別個に独立したb.txtファイルで。
* リストの書式は丸投げですが、二軸マトリックス(x軸…対象文字列内の位置、y軸…対象となる文字の内容)でお願いします。
** 点数が一行に一個ずつ並んでるだけです。
cd実行後のコマンドは"enscore a.txt b.txt c.txt"みたいな感じで。
例:"14159265358979323846"を点数化したい場合
x(左からA〜T),y(上から0〜10)。尚、y=10は数字以外の場合に適用されます、だから大小区別の英数字ならy=0〜62になります。
以下、該当部分が()で括られています。
{y=0|8,56,88,114,100,88,67,10,12,116,107,18,126,60,92,42,44,3,41,73}
{y=1|(124),56,(46),41,81,15,126,95,86,17,105,80,126,71,35,5,107,109,118,15}
{y=2|122,61,19,107,96,(50),128,96,64,46,6,18,73,69,44,(69),33,83,8,27}
{y=3|84,57,100,128,38,88,86,52,(110),7,42,43,23,101,(47),45,(1),81,6,99}
{y=4|3,(116),77,62,88,45,32,1,17,101,59,20,27,26,69,18,41,81,(24),107}
{y=5|25,17,13,(2),108,120,7,(98),123,(65),121,122,116,91,40,109,70,13,73,23}
{y=6|2,19,7,44,91,121,(88),10,58,98,123,109,119,93,88,40,88,99,112,(33)}
{y=7|72,83,32,66,88,86,63,104,27,2,106,84,(7),9,73,18,0,64,6,118}
{y=8|51,75,79,16,102,98,78,51,48,31,(118),36,110,47,12,68,98,(17),106,80}
{y=9|68,109,114,49,(53),70,84,9,62,67,1,(44),80,(117),0,79,16,84,66,56}
{y=10|60,34,105,58,73,99,110,127,9,61,115,23,45,60,39,80,36,3,14,101}
124+116+46+2+53+50+88+98+110+65+118+44+7+117+47+69+1+17+24+33}
=1229
0578デフォルトの名無しさん
2008/03/10(月) 15:58:16[2] 問題文(含コード&リンク):
0001.jpg 0002.jpg 0003.jpg ....というファイルを順に読み込み、
動画として表示するアプリケーションを作成せよ。
問題文全文
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6131.txt
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語:C++
[4] 期限:[2008年3月15日まで]
[5] その他の制限:
FLTKを使用する。
映像を直接扱うクラスやライブラリは使わない。(e.g., mpegs)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6132.txt
上は、自分でやったとこまでです。初心者なので訳が分からなくなってます。
あと、問題文が英語で本当にすみません。
0579デフォルトの名無しさん
2008/03/10(月) 16:55:37Cで作ってみた
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6133.txt
0580デフォルトの名無しさん
2008/03/10(月) 21:11:36ありがとう、夜勤から帰ったらためしてみる。まずは取り急ぎ
0581デフォルトの名無しさん
2008/03/10(月) 22:57:24当方の環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6134.txt
K&R2 4.3 よりも無駄に長く汚くなってしまいました。とりあえず、そっちを読んでください。
0582デフォルトの名無しさん
2008/03/11(火) 01:55:05バグがありました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6135.txt
0583577
2008/03/11(火) 11:25:18折角作って頂いたのに本当に申し訳ないんだが、enscoreコマンド実行時にリストの中身と計算過程の表示を省くには何処を削ればいいんでしょう?
処理個数が多くなりそうなので…。
0584デフォルトの名無しさん
2008/03/11(火) 12:40:59あれ?リストの中身表示、計算過程って表示されちゃってる?
#define DEBUG ってなってなければ、表示されない(プログラムの実行コードに含まれない)はずなんだけど・・・
コンパイラによってデフォルトで DEBUG ついちゃうのかな?
まぁ、#ifdef DEBUG 〜 #endif の間を削除しちゃえばいいさぁ〜
0585デフォルトの名無しさん
2008/03/12(水) 11:51:16[1] 授業単元:独学
[2] 問題文(含コード&リンク):stl
[3] 環境
[3.1] OS: ubuntu
[3.2] コンパイラ名とバージョン: g++
[3.3] 言語: c++
[4] 期限: (無期限)
[5] その他の制限:
stlの使い方について質問です。今リストの中に1,2,4,8,16,32,64
と入っているんですが、"erase" を使って5番目の数字を削除して中身を表示し、
その後に3番目の数字を削除して表示。 そして、"insert"を使って3番目と4番目の
数字の間に7を入れて表示という感じにするにはどうしたらいいんですか?
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
int main(){
list<int> mylist;
for(int i=1; i<=64; i *= 2)
mylist.push_back(i);
cout<<endl;
list<int>::const_iterator itr1;
for(itr1 = mylist.begin(); itr1 != mylist.end(); itr1++)
cout<< *(itr1)<<" ";
return 0;
}
0586デフォルトの名無しさん
2008/03/12(水) 13:18:17スレ違い。
初心者歓迎スレでもSTLスレでもお好きな方ヘどうぞ。
0587デフォルトの名無しさん
2008/03/13(木) 00:15:410588デフォルトの名無しさん
2008/03/13(木) 02:20:40Structure and Interpretation of Computer Programs (SICP)辺りを読むのも良いかもな
0589デフォルトの名無しさん
2008/03/13(木) 16:58:40[2] 問題文(含コード&リンク):約分を行う関数を作成せよ。
ただし、分子と分母をメンバとする構造体を用いて、分数を表す。
構造体タグには、typedefによってBUNSUという名前をつけて使用する。
[3] 環境
[3.1] OS:WindowsXP SP2
[3.2] コンパイラ名とバージョン:Developer studio
[3.3] 言語:C++
[4] 期限:無制限
[5] その他の制限:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6136.txt
*1〜2の、約分処理と関数の呼び出し方がわかりません。
もしよければお願いします。
0590デフォルトの名無しさん
2008/03/13(木) 17:07:56は?
C++に構造体タグなんてありませんが。構造体名自体が型として使えるので、typedefする必要もありませんが。
0591デフォルトの名無しさん
2008/03/13(木) 18:21:480592デフォルトの名無しさん
2008/03/13(木) 21:20:13#include<stdio.h>
typedef struct bunsu{
int bunshi;
int bunbo;
} BUNSU;
int getgcd(int m, int n){
while(m*n){ if(m>n) m%=n; else n%=m; }
return m+n;
}
void yakubun_p(BUNSU *x){
int gcd;
gcd = getgcd(x->bunshi, x->bunbo);
x->bunshi /= gcd;
x->bunbo /= gcd;
}
int main(void){
BUNSU a;
printf("分子?"); scanf("%d", &a.bunshi);
printf("分母?"); scanf("%d", &a.bunbo);
printf("%d / %d = ", a.bunshi, a.bunbo);
yakubun_p(&a);
printf("%d / %d\n", a.bunshi, a.bunbo);
return 0;
}
0593デフォルトの名無しさん
2008/03/14(金) 00:31:46ありがとうございました。
C言語をはじめたばかりですが、がんばっていこうと思います!
0594デフォルトの名無しさん
2008/03/14(金) 00:54:42[2] 問題文(含コード&リンク):
VisualC++を使用して「はさみ将棋」を作成せよ。
テクスト、授業で配布したプリントのほかにも、自分で参考となる資料を集めて利用しても構わない。
[3] 環境
[3.1] OS: WinXP
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C++
[4] 期限: 2008年3月28日まで
[5] その他の制限:特になし。ただ、出来るだけ平易な文で作っていただけると助かります。
0595デフォルトの名無しさん
2008/03/14(金) 01:15:000596541
2008/03/14(金) 01:59:06[2] 問題文(含コード&リンク):ls -lの加え-a、-w、-F結果が表示出来るようにしなさい
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語: C
[4] 期限:2008年3月17日まで
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6140.c
前回は助けて頂きありがとうございました。
↑自力でここまで作ってみたのですが、-a、-wなどの部分を作成がまったく見当がつきません。
助けて頂けるとありがたいです、よろしくお願いします。
0597デフォルトの名無しさん
2008/03/14(金) 04:50:33ちょっと待て。
> [3.3] 言語:C++
>C言語をはじめたばかりですが、がんばっていこうと思います!
おまいさんは、何語を習っているのかさえ判っていなかったのか?
0598 ◆nUWYoBn0RQ
2008/03/14(金) 16:48:25課題で
c言語の文字列ソートで
char * month[]={"january" ,"february", "march","april","may","june","july"}
をアルファベット順にソートかつ大文字に変えて表示するやり方
がわかりません。
教えてください。今日までなので時間がありません。
お願いします
0599サッカー
2008/03/14(金) 17:09:48[2] 問題文 :c言語の文字列ソートで
char * month[]={"january" ,"february", "march","april","may","june","july"}
をアルファベット順にソートかつ大文字に変えて表示しろ。
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: 2008年3月15日まで
助けてください。
やり方が全くわかりません。
教えてください。
お願いします
0600デフォルトの名無しさん
2008/03/14(金) 17:43:58ほいよ
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int cmp(const void*a,const void*b){return strcmp(a,b);}
int main(void){
char * month[]={"january" ,"february", "march","april","may","june","july"};
const int N = sizeof month / sizeof * month;
int i;
qsort(month , N , sizeof * month , cmp);
for(i=0;i<N;++i){
const char*it;
for(it=month[i];*it;++it)putchar(toupper(*it));
puts("");
}
return 0;
}
0601600
2008/03/14(金) 17:46:38int cmp(const void*a,const void*b){return strcmp(*(char**)a,*(char**)b);}
0602デフォルトの名無しさん
2008/03/14(金) 17:50:09[2] 問題文(含コード&リンク):
1、,学籍番号と名前と年齢からなる構造体「学生」を定義して、以下の二人の「学生」を
作りなさい。
・学籍番号1番、「青木三郎」20歳
・学籍番号2番、「加藤武雄」21歳
2,「学生」の学籍番号、名前、年齢を設定する関数を作り、1の問題を行いなさい。
[3] 環境
[3.1] OS: (Windows/Linux/等々) Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) Borland C++
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C++
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) できるだけ早く
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
クラスの作り方がよくわかりません。
よろしくお願いします。
0603サッカー
2008/03/14(金) 17:53:30助かりました。
ありがとうございます。
0604 ◆zCS1o.kilU
2008/03/14(金) 18:17:37[2] 問題文 :mystrlen関数作成せよ。プロトタイプはint mystrlen (char*);
またmain関数からmystrlen関数を呼び出し自分の名前の長さを求め
なさい。
実行例「 ”山田太郎”は0008バイトです 」
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] strlen関数使用禁止
お願いします。
0605デフォルトの名無しさん
2008/03/14(金) 18:27:16好きなんどーぞ
int mystrlen(char*p){
return strcspn(p,"");
}
int mystrlen(char*p){
return (char*)memchr(p,0,-1) - p;
}
int mystrlen(char*p){
return strchr(p,0) - p;
}
0606デフォルトの名無しさん
2008/03/14(金) 18:27:23struct Gakusei {
int num; char* name; int age;
void set(int _num, char* _name, int _age) {
num = _num; name = _name; age = _age;
}
};
int main() {
// 1
Gakusei g1 = {1, "青山三郎", 20};
Gakusei g2 = {2, "加藤武雄", 21};
// 2
g1.set(1, "青山三郎", 20);
g2.set(2, "加藤武雄", 21);
}
0607 ◆zCS1o.kilU
2008/03/14(金) 18:40:28もうひとつだけお願いがあります。1] 授業単元:プログラミング
[2] 問題文 :キーボードから西暦と月を入力するとカレンダーを
表示するプログラムを作成せよ
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] scanf使用不可. fgetsでお願いします。
お願いします
0608デフォルトの名無しさん
2008/03/14(金) 18:44:19当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6142.txt
0609 ◆zCS1o.kilU
2008/03/14(金) 19:03:27ありがとうございます。
0610 ◆TJ9qoWuqvA
2008/03/14(金) 19:55:04わからないよ〜。
最後にこれができないと
単位がもらえないよ。
0611デフォルトの名無しさん
2008/03/14(金) 20:06:27お前が誰だかわからないよ
0612607
2008/03/14(金) 20:21:56です。ありがとうございます。
もうひとつだけお願いがあります。1] 授業単元:プログラミング
[2] 問題文 :キーボードから西暦と月を入力するとカレンダーを
表示するプログラムを作成せよ
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] scanf使用不可. fgetsでお願いします。
お願いします
0613デフォルトの名無しさん
2008/03/14(金) 21:20:32>>612
当方で確認した環境は cygwin/WindowsXP, 処理系はgcc3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6143.txt
0614デフォルトの名無しさん
2008/03/14(金) 22:21:48[2] 問題文(含コード&リンク):データ構造・スタックの作成
[3] 環境
[3.1] OS: windows vista
[3.2] コンパイラ名とバージョン: bcc32
[3.3] 言語: C
[4] 期限: できるだけ早く
http://www2.uploda.org/uporg1305086.txt
↑スタックとして、これを使用したいと思います。
しかし、整数しか扱えず、浮動小数点数のプッシュが行えません。
関数の返却値をdouble型に変更してみたり、確保する型の変更など
試してみましたが、うまくいきませんでした。
浮動小数点数を扱える様に変更をよろしくおねがいします。
0615デフォルトの名無しさん
2008/03/14(金) 22:25:220616デフォルトの名無しさん
2008/03/14(金) 22:39:38当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6144.txt
0617デフォルトの名無しさん
2008/03/14(金) 22:47:22614です。
ありがとうございます。
実行してみたところ、一か所エラーがでてしまいました。13行目ですが、
エラー E2034 13: 'void *' 型は 'double *' 型に変換できない(関数 StackAlloc(Stack *,int) )
処理系の違いによるものでしょうか。
何か対策がありましたら教えて頂けると助かります。
0618デフォルトの名無しさん
2008/03/14(金) 22:49:54元のファイルもコンパイルできなかったのかな?
0619デフォルトの名無しさん
2008/03/14(金) 22:50:46if ((s->stk = (double *)calloc(max, sizeof(double))) == NULL) {
でどうでしょうか?
0620デフォルトの名無しさん
2008/03/14(金) 22:59:48>>618
614のファイルでは、整数のみ扱える状態でコンパイル、実行が行えました。
>>619
実行できました。ありがとうございます。
本当に助かりました。
このスタックを用いてプログラムの作成を行うのですが、
また解らないことがありましたら、質問させていただけたらと思いますので
その際はよろしくお願いいたします。
0621デフォルトの名無しさん
2008/03/14(金) 23:08:12C++としてコンパイルしているだろ?
0622607
2008/03/14(金) 23:21:480623デフォルトの名無しさん
2008/03/14(金) 23:33:12>>617
拡張子を.cpp としてコンパイルしていました。
Cでコンパイルしたところ動きました。
ご指摘ありがとうございます。今後気を付けます。
>>619
訂正していただいたのにすみませんでした。
言語をCとせずにコンパイルしていたのが原因でした。
616が動作することも確認できました。
ありがとうございました。
0625デフォルトの名無しさん
2008/03/15(土) 07:40:55後半だれてたから、読みづらいソースになってるかもしんないけど、
一応できたからうp。参考程度にどうぞ (間違ってたらごめんね)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6145.txt
0626デフォルトの名無しさん
2008/03/15(土) 09:00:05最も得点が高くなる文字列を求めたい
例えば3文字で次のように得点が与えられていれば
AB 1
AC 5
BA 2
BC 3
CA 10
CB 1
BCA の得点13が最高得点
0627デフォルトの名無しさん
2008/03/15(土) 09:02:50計算量が増えますから、総当たりが難しいです
0628626
2008/03/15(土) 09:17:13距離をマイナス倍すれば(例えば10から引く)巡回セールスマンと一致しますね
0629デフォルトの名無しさん
2008/03/15(土) 09:29:21レンタカーやタクシーで巡回するようなものです
0631デフォルトの名無しさん
2008/03/15(土) 11:06:09同じ点(文字)を二度以上通ってもいいですか?
もし、いいなら単純な動的計画法が適用できる気が。
0632デフォルトの名無しさん
2008/03/15(土) 11:13:59おなじ文字を何度も使ったら値は無限に増えます
ACACACACA・・・・とか 一度だけの並べ替えにしてください
0633デフォルトの名無しさん
2008/03/15(土) 11:17:26ACA で終わりじゃないの?
0634デフォルトの名無しさん
2008/03/15(土) 11:21:06文字は全て使わなくても良いですが、全部使った方が高得点になります
0635626
2008/03/15(土) 11:35:080636デフォルトの名無しさん
2008/03/15(土) 12:01:14[2] 問題文(含コード&リンク):英和辞書を作成せよ。
辞書データはプログラム開始時にファイル(ファイル名はdic.dat)より読み込みメモリ上にリスト構造を構築する。
以下これをリストという。
次の機能をメニューで選べるようにすること。(機能ごとに関数にしておく)
(1)検索:英単語(半角)を入力すると、リストより検索して日本語(全角)の意味を表示する。
(2)追加:新しい単語とその意味をキーボードより入力し、リストに追加する。
(3)修正:リストのデータを修正する。
(4)削除:リストより任意の単語を削除する。
(5)保存:リストをファイルに保存する。
(6)終了:プログラムの終了。もしデータが変更されているのに保存されていない時は、
保存せず終了して良いか確認する処理を行う。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:3月中
[5] その他の制限:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6146.txt
お願いします。
0637デフォルトの名無しさん
2008/03/15(土) 13:01:11>文字は全て使わなくても良いですが、全部使った方が高得点になります
それは得点配分しだいじゃないか?
0638デフォルトの名無しさん
2008/03/15(土) 20:00:13STLのmapをCに移植すればいいんじゃね?
0639デフォルトの名無しさん
2008/03/15(土) 20:03:220640デフォルトの名無しさん
2008/03/15(土) 20:08:230641デフォルトの名無しさん
2008/03/15(土) 20:29:04これがマリー・アントワネットの力か……
0642デフォルトの名無しさん
2008/03/15(土) 21:14:11[2] 問題文(含コード&リンク):
標準入力からファイル名を受け取り、ファイル内容を以下のように要素毎に整列し出力せよ
入力ファイル:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6147.txt
出力ファイル:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6148.txt
[3]
環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:gcc3.4
[3.3] 言語:C
[4] 期限:3月20日
[5] その他の制限:
入力するファイルの行数は1000行以内とする
「Perlの方が楽かもねぇ」と言われてもどっちもわからず・・・
0643デフォルトの名無しさん
2008/03/16(日) 05:45:48http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6149.c
0645デフォルトの名無しさん
2008/03/16(日) 11:29:30取り合えず動く程度の簡易なもの(非VC++)。
ルールはググって上2つぐらいをざっと見ただけなんでもしかしたら間違ってるかも。
役に立つか分かりませんが参考程度にどうぞ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6150.txt
0647sage
2008/03/16(日) 18:04:32[2] 問題文 :入力した西暦が閏年かどうか出力せよ
閏年:4年に一度であり、100年に一度ではなく、400年に一度である
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: なるべく早く
よろしくお願いします
0648デフォルトの名無しさん
2008/03/16(日) 18:23:04#include <stdio.h>
int is_leap_year(int year)
{
return (year%400==0) || ((year%100!=0)&&(year%4==0));
}
int main()
{
int year;
printf("西暦:");
scanf("%d", &year);
printf("%d年は%sです。\n", year, is_leap_year(year) ? "閏年" : "平年");
return 0;
}
0649デフォルトの名無しさん
2008/03/16(日) 18:27:02>[4] 期限: なるべく早く
Cより先に、この変な言葉を直すよう日本語を学べ。
#include <stdio.h>
int main(void)
{
int d;
char* toshi[] = {"平", "閏"};
scanf("%d", &d);
printf("%s年\n",toshi[!(d&3)-!(d%100)+!(d%400)]);
return 0;
}
0650デフォルトの名無しさん
2008/03/16(日) 18:28:39○static const char * const toshi[]
0651636
2008/03/16(日) 18:57:42[2] 問題文(含コード&リンク):英和辞書を作成せよ。
辞書データはプログラム開始時にファイル(ファイル名はdic.dat)より読み込みメモリ上にリスト構造を構築する。
以下これをリストという。
次の機能をメニューで選べるようにすること。(機能ごとに関数にしておく)
(1)検索:英単語(半角)を入力すると、リストより検索して日本語(全角)の意味を表示する。
(2)追加:新しい単語とその意味をキーボードより入力し、リストに追加する。
(3)修正:リストのデータを修正する。
(4)削除:リストより任意の単語を削除する。
(5)保存:リストをファイルに保存する。
(6)終了:プログラムの終了。もしデータが変更されているのに保存されていない時は、
保存せず終了して良いか確認する処理を行う。
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:Visual Studio 2005
[3.3] 言語:C
[4] 期限:3月中
[5] その他の制限:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6151.txt
1〜6の「」のに入っている処理の仕方がわかりません。
お願いします!
0652デフォルトの名無しさん
2008/03/16(日) 21:55:52http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6153.txt
651より以前から作ったので適当に変えた箇所がある。
0653デフォルトの名無しさん
2008/03/17(月) 00:54:00>>649のままで良いんじゃね?こんな所で質問するような奴が
staticだconstを使ったら変に思われちまう。
0654デフォルトの名無しさん
2008/03/17(月) 06:18:05最初に y%4 == 0 で条件に合わないものはそれ以降は比較しないと。
それが通ったら y%100 != 0 || y%400 == 0 にすると。
0655デフォルトの名無しさん
2008/03/17(月) 08:53:34A || B はAが真ならBは評価されない。
A && B はAが偽ならBは評価されない。
Bの位置に関数呼び出しを入れたりするとA次第で実行されない、というのはよくバグの原因になる。
0656デフォルトの名無しさん
2008/03/17(月) 08:53:55[2] 問題文 :英小文字をgetsで標準入力より配列テーブルへ入力する
入力されたデータの個数と共に配列の先頭アドレスを関数 英大文字変換に渡す
英大文字に変換されたデータをprintfで標準出力に出力する
ただし、入力するデータの個数は最大10個までとする
入力のときの表示は「str=」、出力のときの表示は「STR=XXX....X」とする
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: 今日のお昼頃
よろしくお願い致します
0657デフォルトの名無しさん
2008/03/17(月) 09:14:10#include <stdio.h>
void capital_letter(char *str, int num);
int main(void)
{
char str[10];
printf("str=");
gets(str);
// fgets(str, sizeof(str), stdin); にしたいところ
capital_letter(str, sizeof(str));
printf("STR=%s",str);
return 0;
}
void capital_letter(char *str, int num)
{
int i;
for(i = 0; i < num; i++)
{
if('a' <= str[i] && 'z' >= str[i])
{
str[i] += 'A' - 'a';
}
}
}
0658デフォルトの名無しさん
2008/03/17(月) 09:15:36だから何?閏年の条件式になんでそんな無意味な突込みを???
Bの位置に関数呼び出しをするような条件式じゃないからw
0659デフォルトの名無しさん
2008/03/17(月) 09:20:20>>654が言うような最適化はすでにされてるって意味なんだが。
0660デフォルトの名無しさん
2008/03/17(月) 09:21:57はぁ?ちゃんと読め。それから、数多く繰り返し実行をしてみろ。
明らかに4の倍数以外を400で割り切れるかまで条件判定しなくても済むから
処理時間に差が出ているんだが?
0661デフォルトの名無しさん
2008/03/17(月) 09:24:100662デフォルトの名無しさん
2008/03/17(月) 09:27:20{
return (year%400==0) || ((year%100!=0)&&(year%4==0));
}
int is_leap_year(int year)
{
if(year%400) return 1;
else if((year%100!=0)&&(year%4==0)) return 1;
else return 0;
}
0663デフォルトの名無しさん
2008/03/17(月) 09:28:19いや、なんで自分で clock() を用いて検証しない?
何噛み付いてんの?理屈からして筋の通る理論に
無駄で間違った持論で噛み付かれても迷惑。
お前が理解していないとしか言いようがないんだが
0664デフォルトの名無しさん
2008/03/17(月) 09:31:14いや、だから違うって、なんで先に400で割り切れる条件判定をするんだ?
それが400年に1度で、更に4で割り切れない年も判定するのが無駄だって話なんだが・・・
まず4で割り切れなきゃ、100で割り切れない、または、400で割り切れるという条件判定に
持ち込まないという条件について述べているんだが?
0665デフォルトの名無しさん
2008/03/17(月) 09:32:590666デフォルトの名無しさん
2008/03/17(月) 09:39:22return (year%4==0 && (year%100!=0 || year%400==0));
0667デフォルトの名無しさん
2008/03/17(月) 09:44:42year % (year % 100 != 0 ? 4 : 400) == 0
0668デフォルトの名無しさん
2008/03/17(月) 09:52:23回数を多くすれば、些細なことだが無駄に気づくだろう
0669デフォルトの名無しさん
2008/03/17(月) 10:02:13測ってないけどこの形が最速じゃね。
0671デフォルトの名無しさん
2008/03/17(月) 13:13:55> 阿呆なこと
何が?そうやってアホとか相手を罵倒する発言、人間性を疑うよ。
言葉にはあんたの人間性がモロに露呈しているが、噛み付いているのが
あんただけって気づかない?そう、あんたが話題の本質を理解せずに
勘違いしているだけだろ。論より証拠。あんたもソースで示したら?
論点が食い違っていることが明白だから。
0674デフォルトの名無しさん
2008/03/17(月) 13:17:56理屈としてはそれでおk。
0675デフォルトの名無しさん
2008/03/17(月) 13:19:19あんたさすがに自分の勘違いを認めない上に、このスレに粘着しているのか。
未熟者がでしゃばると、お前みたいな墓穴を掘っても、更に何か言い訳をしたり
相手を否定して自分を押し切ろうとするから嫌われるんだよ。マジ、ソースを出せよ
gdgd言ってねーで。ごちゃごちゃとみっともないんだよ、言い訳するやつって。
0676661
2008/03/17(月) 13:21:16いや、自己紹介しなくてもw
0677デフォルトの名無しさん
2008/03/17(月) 13:21:50話を始めた?ここから勘違いを始めて、それについて必死に弁解する意味がないだろw
なのに、アホだの、なんだこの低俗な品のない奴は?まぁ、春休み中なんで、
どんな精神レベルの低い子供かは分かるが、こんなのがそのまま大人になったら面倒だな。
0678661
2008/03/17(月) 13:25:35あんたのレスに粘着されてるぞ〜w
まぁ、いきなり関数呼び出し云々を持ち出した>655も半端に知識をひけらかしたいだけに見えなくもないが。
言っていることは正しいだけに、場とタイミングを間違えたとしか言いようがないな。
恐らくは、安易に短絡構文を使ってデバッグに苦労した経験でもあったのだろう。
>>677
で、誰が何をどう勘違いして、どう弁解していると「あんたは」考えているのかな?
0679デフォルトの名無しさん
2008/03/17(月) 13:50:49別に君が相手側を説得することにメリットがあるわけでも無し、そろそろ放っておいたらどうよ。
どっちにとは言わんけど。
0680デフォルトの名無しさん
2008/03/17(月) 13:51:370681デフォルトの名無しさん
2008/03/17(月) 14:02:30> for(i=1; i<=MAX; i++) {
> for(y=1; y<=MAX_Y; y++) {
> if( y%4 != 0 ) leap=0;
> else if( y%100 != 0 || y%400 == 0 ) leap = 1;
> }
> }
潜在的バグがあるね
以下のようにすれば顕在化する
for(y=1; y<=MAX_Y; y++) {
↓
for(y=1; y<=MAX_Y; y++,leap=1) {
0682デフォルトの名無しさん
2008/03/17(月) 14:46:590683デフォルトの名無しさん
2008/03/17(月) 14:50:06# まさか、1900年や2100年を処理しなくてはいけないケースなんてそうそうないだろ。
0684デフォルトの名無しさん
2008/03/17(月) 14:53:45範囲外はいつものの方法でやるとして。
0685デフォルトの名無しさん
2008/03/17(月) 15:00:480686デフォルトの名無しさん
2008/03/17(月) 16:23:50必要あるないだの、何を基準に話を始めてんだ?
それが分かってないから、お前らはいつまで経っても
客観的な立場、意見が重要となる社会に出てまともに活動が出来ないんだよ。
路上じゃあんたらにとってそんなルールは必要ないとか都合が悪いとか言ってると
すぐに事故るぞ。自分が原因で。
0687デフォルトの名無しさん
2008/03/17(月) 16:28:44所詮は宿題スレか。
0688デフォルトの名無しさん
2008/03/17(月) 16:34:18スレ違いはしょうがない〜♪
0689デフォルトの名無しさん
2008/03/17(月) 16:36:060690デフォルトの名無しさん
2008/03/17(月) 17:24:37かなり差が出るんだな。
正直、感動した。
>>681
もう少し詳しく
0691デフォルトの名無しさん
2008/03/17(月) 20:02:49たまたまその前年が平年でleapを平年の値で受け継いでいるが。
0692デフォルトの名無しさん
2008/03/17(月) 20:24:39説明ありがとん。
つーか、自分の鈍さに絶望。
0693648
2008/03/17(月) 22:17:070694デフォルトの名無しさん
2008/03/18(火) 00:19:46[2] 問題文 :5つの数字を標準入力より配列テーブルへ入力する。
配列の先頭アドレスと共に結果用の配列の先頭アドレスを関数 四則演算に渡す。
四則演算された結果をprintfで標準出力に出力する。
入力のときの表示は DATA = とする
出力のときの表示は X + Y = Z X - Y = Z X * Y = Z X / Y = Z とする
なお、加算はaの0と1番目、減算はaの0と2番目、乗算はaの0と3番目、
除算はaの0と4番目をそれぞれ行い、計算結果をpに入れる。
注)ポインタを使用すること。
リンク方法 cal(a,p);
入出力情報・「記号 a 型名 char *」「記号 p 型名 int *」
[3] 環境
[3.1] OS: windowsxp
[3.2] コンパイラ名とバージョン: VC 6.0
[3.3] 言語: C言語
[4] 期限: 今日の朝まで
よろしくおねがいします
0695デフォルトの名無しさん
2008/03/18(火) 00:33:20#include <stdio.h>
void cal(char *a, int *p) {
p[0] = a[0]+a[1];
p[1] = a[0]-a[2];
p[2] = a[0]*a[3];
p[3] = a[0]/a[4];
}
int main() {
char a[5];
int p[4], i, tmp;
/* 入力 */
for(i=0; i<5; i++) {
printf("DATA=");
scanf("%d", &tmp);
a[i] = (char)tmp;
}
/* 計算 */
cal(a, p);
/* 出力 */
printf("%d+%d=%d %d-%d=%d %d*%d=%d %d/%d=%d\n",
(int)a[0], (int)a[1], p[0],
(int)a[0], (int)a[2], p[1],
(int)a[0], (int)a[3], p[2],
(int)a[0], (int)a[4], p[3]);
return 0;
}
0696デフォルトの名無しさん
2008/03/18(火) 06:33:180697デフォルトの名無しさん
2008/03/18(火) 07:03:53過去スレでも似たような議論あったな。
int isLeapyear(int year)
{
return year%4 ? 0 : year % 100 ? 1 : year % 400 ? 0 : 1;
}
&&とか||使わないでこれで十分じゃね?
0698デフォルトの名無しさん
2008/03/18(火) 07:31:13とにかく、4の倍数に当たらないものまで、100で割り切れるかどうか、400で割り切れるかどうか
といった判定にまで持ち込まなければ、その無駄がかなり省けるというのは
繰り返す回数を増やして目に見える処理時間の差を出したコードを参照して頂ければお分かりになられるかと。
0700デフォルトの名無しさん
2008/03/18(火) 08:47:13main関数の中に条件判定を入れて処理するのとでは、自分の環境で計測したところ、
1.7倍の差が出た。mainの中で判定した場合で1秒だと、関数を呼び出した方は1.7秒。
0701デフォルトの名無しさん
2008/03/18(火) 09:05:240702デフォルトの名無しさん
2008/03/18(火) 13:59:460703デフォルトの名無しさん
2008/03/18(火) 19:13:06コードが読みやすいほうが良いに決まってるだろ。
実用時は最適化するんだから。
0704名無しです
2008/03/19(水) 22:00:09[2] 問題文(含コード&リンク):
・リスト構造の実現
1,グラフデータを記憶する隣接リストの作成,
2,深さ優先探索に必要なスタック,
3,幅優先探索に必要なキューの作成に必須なデータ構造です.
4,ポインタを用いて動的に確保するかの選択が必要です.
5,また,データへのアクセス効率を考えて,両方向環状リストとして構築する
・上記リスト構造を用いて,スタックおよびキューの実現
もっとも大雑把に書くと,
スタックを使ったグラフの深さ優先探索,キューを使ったグラフの幅優先探索,グラフの連結成分分解の実装.
ファイル(複数のグラフデータが列記されている)からグラフを1つずつ読み込み,プログラム上で扱い
やすいデータ構造上にグラフデータを反映させ,その上で探索してもらうという構成になっています.
グラフは無向グラフです
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン:visual studio 2003
[3.3] 言語: C言語
[4] 期限: 20008年3月20日20:00まで
[5] その他の制限: C言語初心者なのでなるべく簡単にしてくれるとありがたいです.
リンクの張り方がわからず、問題文が長くなりお手数をかけて申し訳ありません。
どうぞよろしくお願いします。
0705デフォルトの名無しさん
2008/03/20(木) 06:51:424.が意味不明。
ポインタを使わなければ任意で複数のエッジの表現はできない。
0706名無しです
2008/03/20(木) 09:40:57「静的」と「動的」とは,例えば配列 a[10]のように格納する領域が指定されているのを静的といい,
動的というのは問題によりその格納する領域が変化すると、説明されました
文章が稚拙でわかりにくいところが多々あるかもしれませんが、よろしくお願いします
0707デフォルトの名無しさん
2008/03/20(木) 11:43:20リストは動的に領域を確保しないと意味ないぞ。
目的が単にスタック、キューの実現なら、配列を使って実装できるけど、
リストを使うことが課題で決められているなら、動的に確保するしかない。
0708デフォルトの名無しさん
2008/03/20(木) 11:52:50ノード数Xノード数の2次元配列を使う表現の2種類を区別しろというこではなかろうか?
0709名無しです
2008/03/20(木) 11:55:02後出しになってしまってすいません。ご教授お願いします
0710デフォルトの名無しさん
2008/03/20(木) 12:06:38後出しでファイルの入出力の仕様追加が発生すると困りそうだな。
0711デフォルトの名無しさん
2008/03/20(木) 12:08:32なんか俺もそう思うんだが、
>>704の1にはグラフデータを記憶する隣接リストの作成って書いてあるんだよな。
なんか余計分からなくなってきた…orz
0712デフォルトの名無しさん
2008/03/20(木) 12:15:52もう少し詳しい課題の内容が分からないと教えられないかも
0713デフォルトの名無しさん
2008/03/20(木) 12:22:42ワザと曖昧な出題をして学生がちゃんと仕様を確定する的確な質問をするか。
頓珍漢な答えを提出するか。
曖昧さの中から考えられるすべてのケースを想定して複数回答を提出するか
というのを試したことがある。
0714デフォルトの名無しさん
2008/03/20(木) 12:32:57>>704が出された正確な課題で、わざと曖昧な課題にしてあるのなら
いくらでも作りようがあるけど、なんか単に課題が書ききれてないだけのような気が…。
0715デフォルトの名無しさん
2008/03/20(木) 13:17:430716デフォルトの名無しさん
2008/03/20(木) 13:23:050717名無しです
2008/03/20(木) 13:47:10ファイルの入出力の仕様というのはfopenとかのことでしょうか?
「リスト構造」を基に「スタック」,「キュー」,およびグラフのデータ構造(隣接リスト等)を実現し,
アルゴリズムに従い,グラフ上を探索し,得られた探索木を出力してもらうプログラムの作成と課題には
書いてあるのですが、これじゃ情報不足でしょうか?
至らぬ文章力ですいません orz
0718デフォルトの名無しさん
2008/03/20(木) 14:04:39量が多いなら>>1のうpろだを使うとかして。
0719名無しです
2008/03/20(木) 19:55:13読み込むデータはこれを渡されました。
0720名無しです
2008/03/20(木) 22:46:18ぜひご指導お願いします 何度も書き込んですいません orz
0721デフォルトの名無しさん
2008/03/20(木) 23:26:25で、グラフの探索とのことですが、何を探索すればいいのでしょうか?
1: 2 3 4 5 10
とかあるのは、「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」という意味でしょうか?
そして、互いに一番遠い距離にあるノードの組を求めればいいのでしょうか?
何か情報をくださらないと、これだけでは私は解けないのです。
0722名無しです
2008/03/21(金) 07:52:46という意味です。
ファイル http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6159.txt
深さ優先探索を途中までやって間違っているやつを知り合いにもらいました。これを
書き直してわかりやすようにしてはもらえないでしょうか? お願いします
0723デフォルトの名無しさん
2008/03/21(金) 10:21:30http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6160.c
ごり押しで作ってたら、かなり汚いソースになってしまった
初心者には難しいと思うから、ほとんど参考にはならないと思うけど
だれもうpしてないので上げてきます
0724デフォルトの名無しさん
2008/03/21(金) 12:48:03[1] 授業単元:C#の個人課題
[2] 問題文(含コード&リンク):VC#(VS2008C#)にてwindowsフォームアプリケーションにて
WEBカメラ(USB)をプレビューするプログラムを書け。
[3] 環境
[3.1] OS: (WindowsXP)
[3.2] コンパイラ名とバージョン:VC#2005or2008
[3.3] 言語: (C#)
[4] 期限: [無期限]
C#だけどやってもいいか。という方いらっしゃいましたらお願いします。
0725デフォルトの名無しさん
2008/03/21(金) 16:05:35ぶっちゃけ知りたいこと課題に偽装しただけにしかみえない
0726名無しです
2008/03/21(金) 22:17:45ですがすいませんわからないです orz
>>722のやつを作り変えて簡単なプログラムを作れないでしょうか?
何度もお願いして悪いと思うのですがお願いします。
0727デフォルトの名無しさん
2008/03/22(土) 13:16:37「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」
これだけ求めたいのなら、ファイルから読み込んだデータを線形リストに格納して
ノード番号の位置のデータを参照するだけで済むだろう。
スタック、キューなんて使う必要ないし使いどころがないよな。
>>721のいうように互いに一番遠い距離にあるノードの組を求めるとか、そんな問題ならわかるが。
0728デフォルトの名無しさん
2008/03/22(土) 13:37:49http://tnt.math.metro-u.ac.jp/labo/grad/2003/egu/adjoin_list.htm
http://tnt.math.metro-u.ac.jp/labo/grad/2004/masa/graph/0.html
0729デフォルトの名無しさん
2008/03/22(土) 13:43:50> 未だに>>704の問題文が意味わからんのは俺だけ?
本人も含めて誰もわかっていないのでは?
>>704からは、実装方法に関する制限は読み取れるが、
結局どういう問題を解きたいのかが示されていない。
0730デフォルトの名無しさん
2008/03/22(土) 13:48:19・隣接リスト != リンクリスト, 連結リスト etc.
・動的確保しない連結リスト表現
struct Node { int num; int next; } nodes[20]; とでもして next は次のノードを指す添え字番号を指す。
例えば次の要素アクセスするなら nodes[nodes[i].next]。無効値は -1 とか。
C 使いなら普通ポインタ使うんでこんなことしないだろうが、アルゴリズムやデータ構造の教科書的にはたまにある表現だと思う。
・「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」はファイルフォーマットの説明。
・「スタック、キューなんて使う必要ないし使いどころがないよな。」→幅優先探索と深さ優先探索で使うって書いてあるじゃん。
・(とりあえずの)探索内容→グラフ上を探索し,得られた探索木を出力
つまり単純に辿るだけ。出力フォーマットはしらんが、とりあえずどういう風に探索したかを出力できればいいんだろ。
木というからにはちゃんと親子が分かるようにするべきっぽく、>722 もそんな感じだ。
・グラフの連結成分分解って書いてあるからここは深さ優先を使うことになるはず。
0731デフォルトの名無しさん
2008/03/22(土) 13:52:04・両方向環状リストの実装
・上記を用いた、スタック、キュー、隣接リストの実装
・上記を用いた、深さ優先探索、幅優先探索アルゴリズムの実装(出力は探索木)
・上記を用いた、グラフの連結成分分解の実装
これ、何回かに分けて出された課題をまとめてやろうとしてるんじゃないの?
0732名無しです
2008/03/22(土) 15:01:51>>731さんがまとめてることをしたいんです。こんなにわかりにくい説明で
理解してくださってありがとうございます。
0733名無しです
2008/03/22(土) 19:43:43私が最初から>>731さんのように書けば良かったのですが、説明が下手なのと
理解力がないばかりに orz
0734デフォルトの名無しさん
2008/03/22(土) 23:56:13双方向リングリストの実装のみ
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6164.c
0736デフォルトの名無しさん
2008/03/23(日) 00:17:480737733
2008/03/23(日) 00:21:49http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6165.c
訂正内容
次の行を追加
list->next->prev=ret;
0738デフォルトの名無しさん
2008/03/23(日) 06:55:06>>737 を元にスタック実装して、グラフの連結成分分解を作ってみた
連結成分について考え方が間違ってたらすまん
できるかぎり簡単にしたつもり
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6166.c
0739デフォルトの名無しさん
2008/03/23(日) 10:14:59[2] 問題文:
問1)次のコードの実行結果を答えなさい。
byte a = 3;
System.out.println(a = 2);
問2)次のコードの実行結果を答えなさい。
short a = 3;
System.out.println(a == 2);
問3)次のコードの実行結果を答えなさい。
int a = 0;
if (a == 1)
System.out.print("aの値:");
System.out.println(a);
System.out.println("終了");
[3] 環境
[4] 期限:[無期限]
[5] その他の制限: なし
レベルが違うような質問で申し訳ありません・・。
スレ違いでしたらスルーでお願いします。
0740デフォルトの名無しさん
2008/03/23(日) 10:19:480741デフォルトの名無しさん
2008/03/23(日) 10:34:10ご親切にありがとうございました。
0742デフォルトの名無しさん
2008/03/23(日) 17:05:360743デフォルトの名無しさん
2008/03/23(日) 19:59:020744名無しです
2008/03/23(日) 22:19:320745デフォルトの名無しさん
2008/03/24(月) 00:22:15あぁ・・・ミスった
memset(adj, 0, sizeof(adj)*NODENUM*NODENUM); を
memset(adj, 0, sizeof(int)*NODENUM*NODENUM); に変えてね・・・
0746デフォルトの名無しさん
2008/03/24(月) 04:54:50[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6168.txt
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン: visual studio 2005
[3.3] 言語:C言語
[4] 期限:2008年3月24日午前11時(できれば午前中で・・
急なお願いですがよろしくお願いします。
[5] その他の制限:なし
0747デフォルトの名無しさん
2008/03/24(月) 06:15:00フローチャートは矢印で繋ぐだけじゃ不十分だよ。
0748746
2008/03/24(月) 08:06:46それ以外は自分でんはんとかしようと思っているので・・・
ここではそれしか表現できなくて
0749デフォルトの名無しさん
2008/03/24(月) 09:55:10この程度の物は矢印をまともに全部書いたらほとんどそれで答えじゃねーか。
0750746
2008/03/24(月) 10:37:090751デフォルトの名無しさん
2008/03/24(月) 10:55:48ソースにくどいほどコメント書いて、それを適切な四角で括って
矢印で繋げばいいんじゃねーの。
0752デフォルトの名無しさん
2008/03/24(月) 12:35:40↓
◇センスの有無
↓あり ↓なし
□合格処理□不合格処理
↓←───┘
○終了
0753デフォルトの名無しさん
2008/03/24(月) 13:24:28[2] 問題文:http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6170.txt
[3] 環境
[3.1] OS:WindowsXP
[3.2] コンパイラ名とバージョン:visual studio 2003
[3.3] 言語:C
[4] 期限:3/27
よろしくお願いします。
0754デフォルトの名無しさん
2008/03/24(月) 13:31:41超初心者の宿題だろう 自分で出来ないのかよ
0755デフォルトの名無しさん
2008/03/24(月) 13:32:42strcatとstrlen使っちゃ駄目ってのは面倒だね。
(1)
#include<string.h>
int mystrlen(char*p){
return strchr(p,0)-p;
}
(2)
#include<string.h>
int mystrcatlen(char*a,char*b){
return strchr(strcpy(strchr(a,0),b),0)-a;
}
0756デフォルトの名無しさん
2008/03/24(月) 13:34:34なんだと!テメこのやろー
ここがどこだか分かってるのか?
戦闘アドレス なめんなよ
0757デフォルトの名無しさん
2008/03/24(月) 13:38:50(1)
#include<stdio.h>
int main(){
char p[100];
printf("文字列を入力してください -> ");
scanf("%99s",p);
printf("'%s'の長さは%dです\n",p,mystrlen(p));
}
(2)
#include<stdio.h>
int main(){
char p[100],q[100];
printf("文字列を入力してください -> ");
scanf("%99s",p);
printf("文字列を入力してください -> ");
scanf("%99s",q);
printf("'%s'と'%s'を繋げると",p,q);
printf("'%s'になり、長さは%dです\n",p,mystrcatlen(p,q));
}
0758デフォルトの名無しさん
2008/03/24(月) 14:15:04助かりました。
ありがとうございます。
0759名無しです
2008/03/24(月) 17:44:14コンパイルすると「int main(int argc, char **argv){ /*argv main関数に引数を渡す*/」
でエラーが出てしまいます.
エラー表示は「'0x40'は認識できません」と「'0x81'は認識できません」の2つが出てしまいます.
後,幅優先探索と連結成分分解のプログラムは>>738には入ってないんでしょうか?
何度もレスしてすいません.どうかお力を貸してください.
0760デフォルトの名無しさん
2008/03/24(月) 17:46:390761デフォルトの名無しさん
2008/03/24(月) 21:21:20幅優先探索は入ってない
連結成分分解ってのが、つながってる点をまとめて表示することでないなら、
俺の連結成分の考えかたが間違ってる
0762デフォルトの名無しさん
2008/03/25(火) 00:00:16連結成分分解は、>>738で問題ない?
問題ないなら、幅優先探索での連結成分分解も作るけど
(キューの実装できれば深さ優先探索とほとんど処理変わらないから、
必要ないかもしれないけど)
0763デフォルトの名無しさん
2008/03/25(火) 02:17:34Python で作ったプログラムで N < 10 までは試したけど、
発展問題についてはまだやってない。
基本問題:
例えば N = 8 としたときに
「この文章には0が1個、1が5個、2が3個、3が2個、
4が1個、5が2個、6が1個、7が1個含まれています」
という文章が生成されるとして、9以下の任意の自然数Nについて
もこのような文章を生成するプログラムを作れ。
解がない場合は「解なし」とする。
発展問題:
Nが10以上の時、解はあるだろうか?
0764デフォルトの名無しさん
2008/03/25(火) 02:30:370765デフォルトの名無しさん
2008/03/25(火) 02:46:440766デフォルトの名無しさん
2008/03/25(火) 02:50:48文書中に現れる文字をカウントして正しい文書にする
0767デフォルトの名無しさん
2008/03/25(火) 02:54:58いつでもとけるのかどうかを考えればよい
0768デフォルトの名無しさん
2008/03/25(火) 02:55:46正しい自己言及文を生成する問題。
「」の中の数字の数と文章の内容を確認すれ。
0769デフォルトの名無しさん
2008/03/25(火) 03:04:030の個数をカウントしてそれを記録
次に1の個数をカウントして記録 もしその個数に0が現れれば0を更新
それにも1が現れれば1の個数を更新
・・・・
無限に値が更新される事はなく次へ進めるとは思う
たとえば0が現れるのは桁上がりが現れるときだから(何度か更新を繰り返したとすると)
一度に0がいくつも増えなくては行けなくなりいつか停止すると思う
0770デフォルトの名無しさん
2008/03/25(火) 03:07:450771デフォルトの名無しさん
2008/03/25(火) 03:14:53↓
(あ、1の数が変わった。更新しよう)
↓
「1 が 2 個」
↓
(あ、1の数が1個にもどった。更新しよう)
↓
無限ループ。
0772デフォルトの名無しさん
2008/03/25(火) 03:17:330773デフォルトの名無しさん
2008/03/25(火) 03:25:48そうなる所はカウントを保留しておき個数が変化するのを待ってカウントするか
簡単にはできそうにないね
巡回セールスマンと同じ種類では?
0774871
2008/03/25(火) 03:27:12ちなみに、Nの意味はN以上の数が出てこないって解釈で。すると
N=1 のときは解なし。
N=2 も解なし。
N=3 も解なし。
N=4 では
「0が1個、1が3個、2が1個、3が3個」
「0が1個、1が2個、2が3個、3が2個」
N=10 ってのは「"10"という部分文字列の数」という解釈にしようと思う。
0775デフォルトの名無しさん
2008/03/25(火) 03:29:530が1個じゃないの?
間違えている?
0776デフォルトの名無しさん
2008/03/25(火) 03:31:130777デフォルトの名無しさん
2008/03/25(火) 03:31:360778871
2008/03/25(火) 03:34:29だと、0については言えてるけど、
1について言及が無いので美しくない(俺的に)
できれば文章中に出てくる全ての数字について言及させたい。
だから <N 以上の数を使わない>てルールをつけたんだ。
0779デフォルトの名無しさん
2008/03/25(火) 03:34:50その制限を外した場合は>>771のような無限ループは発生するのだろうか?
0780デフォルトの名無しさん
2008/03/25(火) 03:44:13試行錯誤か、全パターンを生成して文書チェックするかくらいで
いずれにしても時間がかかる
例えばN=1000を一日以内に解くプログラムとかは作れないんじゃないか?
0781デフォルトの名無しさん
2008/03/25(火) 04:38:119が1個、10が1個、11が1個、12が2個、13が1個、14が1個。
0782デフォルトの名無しさん
2008/03/25(火) 04:57:56その文章中の0は2個ありそうだ。
例えば11という数字があった場合、1として2個で11として1個と数えるのか、
それとも11という塊になっている場合は1としてはカウントしないのか。
0783デフォルトの名無しさん
2008/03/25(火) 04:59:50ですよね
0784デフォルトの名無しさん
2008/03/25(火) 05:01:080785デフォルトの名無しさん
2008/03/25(火) 05:04:00783が正解
0786デフォルトの名無しさん
2008/03/25(火) 05:14:04文章から得られる全ての部分文字列の集合内の数値に相当する要素の個数について無矛盾にする問題とみなすか。
0787デフォルトの名無しさん
2008/03/25(火) 05:18:23巡回セールスマンと同じく多項式時間では解けないというやつと思う
プログラム作るだけ時間の無駄と思っている
0788デフォルトの名無しさん
2008/03/25(火) 11:22:494が1 5が1 6が1 7が1
8が2 9が1 10が1
0789デフォルトの名無しさん
2008/03/25(火) 11:25:040790デフォルトの名無しさん
2008/03/25(火) 11:53:54std::string S[N];
int count(int num){
int sum=0;
std::string substr = <num の文字列表現>
for(int i=0; i<N; ++i) {
std::string i2s = i の文字列表現
sum += <文字列 i2s に含まれる substr の数>
sum += <文字列 S[i] に含まれる substr の数>;
}
return sum;
}
int check(){
for (int i=0; i<N; ++i) { if (count(i) != <文字列S[i]の整数表現>) return; }
printf("----\n");
for (int i=0; i<N; ++i) printf("%d が %s\n", i, S[i]);
}
void find(int depth) {
if (depth < 0) {
check(); return;
}
for (int i=0; i<N; ++i) { S[depth] = <i の文字列表現>; find(depth-1);
}
void main() { find(N-1); }
0791名無しです
2008/03/25(火) 12:20:30>>704の問題ですが
>>738さんのでやると連結成分分解のプログラムの動作を確認できるんですけど,ずっと同じ出力結果なんです。
出力結果の数字が何を指しているのかわからないのでどのような意味なのか教えてもらえないでしょうか?
幅優先探索での連結成分分解もよくわからないので作っていただけないでしょうか?
よろしくお願いします
0792デフォルトの名無しさん
2008/03/25(火) 13:42:01間違ってるかもしれないし、厳密解でもない
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6174.c
0793デフォルトの名無しさん
2008/03/25(火) 15:38:35対数時間で計算出来そうにみえるけど
ナップザック系とは関係なくないか
0794デフォルトの名無しさん
2008/03/25(火) 16:26:33面白いな
0795デフォルトの名無しさん
2008/03/25(火) 20:59:56ttp://codepad.org
実行結果までやってくれる
0796デフォルトの名無しさん
2008/03/25(火) 21:48:06[2] 問題文(含コード&リンク):
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6176.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6177.txt
[3] 環境
[3.1] OS: (Windows/Linux/等々)
[3.2] コンパイラ名とバージョン:gcc 3.4 VC 6.0
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限:明日の夜まで
[5] その他の制限:ほとんど素人が手をつけ始めたくらいの知識しかないです。だから難しいことはしてないかも。
何問か課題を出されたのですがどうしてもこの2つが分かりません。よろしくお願いします。
0797796
2008/03/25(火) 21:49:55OSはwindowsで言語はC言語です。
0798デフォルトの名無しさん
2008/03/25(火) 21:55:15一問だけ解いてみた
#include <stdio.h>
int main(void){
int i, j;
for(i=0;i<26;i++){
for(j=0;j<=i;j++) putchar('A'+i);
for(;j<=26;j++) putchar('Z'-i);
putchar('\n');
}
return 0;
}
0799デフォルトの名無しさん
2008/03/25(火) 22:01:47やってみたけど問題としてはツマンナイ答えしかでないっぽいよ。
いいアルゴリズム探す気力なくなったの途中でやめました..
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6178.c
0800デフォルトの名無しさん
2008/03/25(火) 22:08:22対応しているのは N=10 まで?
0801799
2008/03/25(火) 22:10:25× if( c[ a[ i ] ] != 1 )
○ if( c[ i ] != 1 )
0802デフォルトの名無しさん
2008/03/25(火) 22:13:38N=19ぐらいまで。それ以上でも正解は同じパターン一個っぽい。
(のでそれ以上追求するのやめました。)
0804デフォルトの名無しさん
2008/03/25(火) 22:18:17N=11 のときに 0 と 1 の個数が違うんだが…
0805デフォルトの名無しさん
2008/03/25(火) 22:28:36下の奴適当にやってみた
曜日を調べるのは「C言語 曜日」でぐぐって一番上の奴使った
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6179.txt
0806デフォルトの名無しさん
2008/03/25(火) 23:14:47ttp://codepad.org/3hP8x4xd
0807デフォルトの名無しさん
2008/03/25(火) 23:32:13全部のグラフで同じ出力結果になるってこと?
出力結果はただ単に、到達可能な点をまとめて{ }で囲んで表示してるだけ
出力結果が何を指しているのか分からないってことは、
>>738のプログラムがあってないってことなんで、幅優先探索は作れない
0808デフォルトの名無しさん
2008/03/26(水) 10:24:331番目の問題の表示例は
AZZZZZZZZZZZZZZZZZZZZZZZZZZ
BBYYYYYYYYYYYYYYYYYYYYYYYYY
CCCXXXXXXXXXXXXXXXXXXXXXXXX
の間違いか?
AZZZZZZZZZZZZZZZZZZZZZZZZZZZ
BBYYYYYYYYYYYYYYYYYYYYYYYYYY
CCCXXXXXXXXXXXXXXXXXXXXXXXXX
だと26行目は
ZZZZZZZZZZZZZZZZZZZZZZZZZZAA
になってしまうぞ。
0809デフォルトの名無しさん
2008/03/26(水) 20:37:58[2] 問題文:5人のテストの点数をキーボードから入力し、合計と平均を表せ。
[3] 環境
[3.1] OS: Windows・Linux/
[3.2] コンパイラ名とバージョン:
[3.3] 言語: C
[4] 期限: 明日まで
初期的な問題ですがお願いします。
0810デフォルトの名無しさん
2008/03/26(水) 20:55:18#include<stdio.h>
int main() {
int i, test[5], sum = 0;
for (i=0; i<5; i++) {
printf("%d人目の点数を入力してください:", i+1);
scanf("%d", &test[i]);
sum += test[i];
}
printf("合計:%d 平均:%f\n", sum, (double)sum / 5);
}
0811デフォルトの名無しさん
2008/03/26(水) 23:19:000812デフォルトの名無しさん
2008/03/26(水) 23:25:25君は一年後自分のレスを思い出してこう言うだろう
「認めたくないものだな、自分自身の若さ故の過ちと言うものを。」
0813812
2008/03/26(水) 23:27:41コピペ元が間違ってた orz
「認めたくないものだな。自分自身の、若さ故の過ちというものを。」
0814デフォルトの名無しさん
2008/03/26(水) 23:55:53と言って欲しいんだろ?
0815デフォルトの名無しさん
2008/03/27(木) 00:01:02なんだこいつ・・・
0816デフォルトの名無しさん
2008/03/27(木) 00:07:280818デフォルトの名無しさん
2008/03/27(木) 01:08:390819デフォルトの名無しさん
2008/03/27(木) 02:17:54>>44
> /* 文字列の長さ */
> for(str_length=0; str[str_length]; str_length++) {}
ではなく
str_length = sizeof (str) - 1;
だと思うが。
0820デフォルトの名無しさん
2008/03/27(木) 02:20:36そもそもtest[5]はscoreでええがな
0821デフォルトの名無しさん
2008/03/27(木) 02:30:33わざわざ「文字列の長さ」と書いてあるんだから配列の大きさを基準にしちゃダメじゃないか?
0822デフォルトの名無しさん
2008/03/27(木) 09:03:35こいつもしかして、test[i]こそがシンタックスシュガーだということを知らないのでは・・・
0823デフォルトの名無しさん
2008/03/27(木) 10:49:45test[i]は*(test+i)のシンタックスシュガー
&test[i]は&*(test+i)のシンタックスシュガー
&*ってムダじゃね?ってことだろ。
0824デフォルトの名無しさん
2008/03/28(金) 14:09:520825デフォルトの名無しさん
2008/03/28(金) 14:17:260826デフォルトの名無しさん
2008/03/28(金) 14:29:03俺は個人的に好かない書き方だ
Cの配列とアドレッシングとの関連がわかってないのかな
0827デフォルトの名無しさん
2008/03/28(金) 15:00:27が、C++だと&a[i]とa+iの意味が違う事がある。(std::vector等)。
STL等のランダムアクセス可能なコンテナだと&a[i]は使えるけどa+iは使えない。
そうなるとCを使うときもC++の流儀に合わせて&a[i]と書きたくなる。
0828デフォルトの名無しさん
2008/03/28(金) 15:21:100829デフォルトの名無しさん
2008/03/28(金) 15:45:000830デフォルトの名無しさん
2008/03/28(金) 15:55:400831デフォルトの名無しさん
2008/03/28(金) 16:00:560832デフォルトの名無しさん
2008/03/28(金) 16:48:17ソース中の[をみれば配列にアクセスしている箇所を
testをキーワードにして検索したりしないでもすぐ探せる
保守しやすくなるからワザとやってるんじゃないの
0833デフォルトの名無しさん
2008/03/28(金) 16:52:58Cの配列とアドレッシングとの関連がわかっていることと
&test[i]と書くことは全く別問題。
0834デフォルトの名無しさん
2008/03/28(金) 22:46:33test + i ポインタtestからi * nずらしたアドレス
って感じだから前者の方がしっくりくるって人が多数派ににるんじゃない?
0835デフォルトの名無しさん
2008/03/28(金) 23:52:10testだけだとパッと見わかりにくいし。
0836デフォルトの名無しさん
2008/03/29(土) 04:23:24char buf[1024];
int size = sizeof(&buf[0]);
って書くってこと?
0837デフォルトの名無しさん
2008/03/29(土) 04:35:510838デフォルトの名無しさん
2008/03/29(土) 04:42:23何をしたいのか理解できない
0839デフォルトの名無しさん
2008/03/29(土) 14:17:421234567890123456789012345
こんな感じで1234567890123…を読み込まれた整数の個数だけ繰り返し表示するプログラムを作成する問題なのですが
誰か教えて頂けないでしょうか?
0840デフォルトの名無しさん
2008/03/29(土) 14:27:22[2] 問題文(含コード&リンク):>>839
[3] 環境
[3.1] OS:Windows xp
[3.2] コンパイラ名とバージョン:BCC Developer 1.2.21
[3.3] 言語:C
[4] 期限:[無期限]
[5] その他の制限:独学ゆえに聞ける人が居なくて困ってます
0841デフォルトの名無しさん
2008/03/29(土) 14:29:21あとは頑張れ。
0842デフォルトの名無しさん
2008/03/29(土) 14:30:16#include <stdio.h>
int main()
{
int n, i;
printf( "整数を入力してください:" );
scanf( "%d", &n );
for(i=1; i<=n; i++) putchar( '0'+i%10 );
return 0;
}
0843デフォルトの名無しさん
2008/03/29(土) 14:30:26聞ける人がいないのは孤独。
0844デフォルトの名無しさん
2008/03/29(土) 14:31:01勉強用に捻くれたコードにしてみた。
#include<stdio.h>
int main(void){
int n;
printf("整数を入力してください:");
for(scanf("%d",&n);n>0;n-=10)
printf("%.*s",n,"1234567890");
return 0;
}
0845844
2008/03/29(土) 14:31:36s/841/840
0846デフォルトの名無しさん
2008/03/29(土) 14:42:21上京したてで友達がいない中、予習してまして…
0847デフォルトの名無しさん
2008/03/29(土) 14:50:160848デフォルトの名無しさん
2008/03/29(土) 16:14:460849デフォルトの名無しさん
2008/03/29(土) 17:55:020850デフォルトの名無しさん
2008/03/29(土) 18:43:08もしそうならスレ立てしてそっちでやれよ
ついでに俺は前置きで
> こんなの書いても現段階だと悪影響にしかならん気はするぞ
って書いておいたんだがな
0851デフォルトの名無しさん
2008/03/29(土) 18:55:00どこに?
0852デフォルトの名無しさん
2008/03/29(土) 19:11:50> >>840 と >>844 は師匠と弟子か?
いや、まったく関係なし。
単に暇つぶしで適当かつ、それなりに捻くってコードを書いただけ。
真面目なコードは既に出てたし、こういう捻った書き方もあるよーってね。
#まぁぶっちゃけprintfの書式で遊んでみたかっただけなんだけど。
0853デフォルトの名無しさん
2008/03/29(土) 19:16:560854デフォルトの名無しさん
2008/03/29(土) 21:07:15そういうことを書くとちょっと変わった俺臭がきついから。
0855デフォルトの名無しさん
2008/03/29(土) 21:10:100856デフォルトの名無しさん
2008/03/29(土) 23:39:59自分も大学生時代にC言語の授業はあったけど、そこで習ったことだけじゃ通用せんが
必要なことは習っていた。その後、自分でライブラリを調べて、日ごろの使用目的に応じて
必要なプログラムを作るようになった。そうなるのが望ましい。
0857デフォルトの名無しさん
2008/03/30(日) 00:22:050858デフォルトの名無しさん
2008/03/30(日) 00:36:29単位がかかってるとか理解できないからもっと簡単にしてくれとかちょっとうざい
0859デフォルトの名無しさん
2008/03/30(日) 00:43:560860デフォルトの名無しさん
2008/03/30(日) 00:46:370861デフォルトの名無しさん
2008/03/30(日) 00:48:370862デフォルトの名無しさん
2008/03/30(日) 12:55:14[2] 問題文(含コード&リンク):() 指定文字列と一致する文字列が規定の文字列に存在するかどうかを2分探索法で探索するプログラム
[3] 環境
[3.1] OS: (Windows/Linux/等々) linux
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか) C
[4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか)3月31日AM9:00まで
[5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)特になし
上記のプログラムの作り方が分かりません。文字列は2つとも配列に格納してある状態です。よろしくお願いします。
0863862
2008/03/30(日) 12:57:51規定の文字列というのは2分探索法ですので aaabbcのように辞書順にソートされている1行の文字列です。
0864デフォルトの名無しさん
2008/03/30(日) 13:32:09---------------------
1| 1 2 3 4… 9
2| 2 4 6 8… 18
3| 3 6 9 12… 27
4| 4 8 12 16… 36
以下省略
と、いった感じの九九の表をforを使って作りたいのですが、どうしたらよいのでしょうか?
0865デフォルトの名無しさん
2008/03/30(日) 14:02:38{
int i, j;
const int max = 9;
printf(" |");
for (i = 1; i <= max; i++) {
printf(" %3d", i);
}
printf("\n--+");
for (i = 1; i <= max; i++) {
printf("----");
}
for (i = 1; i <= max; i++) {
printf("\n%2d|", i);
for (j = 1; j <= max; j++) {
printf(" %3d", i * j);
}
}
return 0;
}
0866デフォルトの名無しさん
2008/03/30(日) 15:06:39mainは適当に書いたから書き直したほうがいいかも
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6186.c
0867デフォルトの名無しさん
2008/03/30(日) 15:09:28二分探索には標準ライブラリ関数bsearchを使いました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp( const void* key, const void* elm )
{
return strcmp( (const char*)key, *(const char**)elm );
}
int main(void)
{
// 規定の文字列。辞書順にソートされていること。
static const char* const table[] = {
"abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz",
};
const char** hit;
char str[101];
printf( "検索文字列:" );
scanf( "%100s", str );
hit = (const char**)bsearch( str, table, sizeof(table)/sizeof(*table), sizeof(*table), cmp );
if( hit )
printf( "'%s'は%d番目に存在します。\n", str, hit-table );
else
printf( "'%s'は存在しません。\n", str );
return 0;
}
0868867
2008/03/30(日) 15:21:42#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp( const void* key, const void* base )
{
const char* key_str = (const char*)key;
return strncmp( key_str, (const char*)base, strlen(key_str) );
}
int main(void)
{
static const char base[] = "aaabbc"; // 規定の文字列
const char* hit;
char str[101];
printf( "検索文字列:" );
scanf( "%100s", str );
hit = (const char*)bsearch( str, base, strlen(base), 1, cmp );
if( hit )
printf( "'%s'は%d文字目から存在します。\n", str, hit-base+1 );
else
printf( "'%s'は存在しません。\n", str );
return 0;
}
0869デフォルトの名無しさん
2008/03/30(日) 18:03:32int x,y;
puts(" | 1 2 3 4 5 6 7 8 9\n------------------------------"
for(x=1; x<10; x++)
{
printf("%d | ", x);
for(y=1; y<10; y++)
printf("%d ", x * y);
}
0870デフォルトの名無しさん
2008/03/30(日) 18:08:440871デフォルトの名無しさん
2008/03/30(日) 20:50:16アルゴリズムの問題なのだから、bsearchを使うのはだめなんじゃないか?アルゴリズムを作って使う課題なのだろうし。
0872デフォルトの名無しさん
2008/03/31(月) 22:57:05std::vector<Hoge*>::reverse_iterator itr = v.rbegin() ;
while( false == v.empty() )
{
delete *itr++ ;
v.pop_back() ;
}
0873デフォルトの名無しさん
2008/03/31(月) 23:11:01ブロックごとに管理して100個使わなくなったら解放とかじゃないか
0874デフォルトの名無しさん
2008/03/31(月) 23:11:47(実装によりたまたま有効なままかもしれないけど)
↓でいいんじゃない。
while(!v.empty()) {
delete v.back();
v.pop_back();
}
0875デフォルトの名無しさん
2008/03/31(月) 23:14:51なので
while( ! v.empty() ){
delete v.back();
v.pop_back();
}
もしくは
for(std::vector<Hoge*>::reverse_iterator itr = v.rbegin();itr != v.rend();++itr)
delete *itr;
v.clear();
もしくは
std::for_each(v.rbegin(),v.rend(),boost::checkd_deleter<Hoge>());
v.clear();
あたりをどうぞ。
2番目か3番目がお勧め(3は要boost)
0876デフォルトの名無しさん
2008/03/31(月) 23:18:150877デフォルトの名無しさん
2008/03/31(月) 23:21:33v.empty()がtrueだけどメモリがreserveされてる話とは別。
vector<Hoge*>().swap(v);
てことだろうけど、これだとvの中のHoge*が指す先はリークする。
0878デフォルトの名無しさん
2008/03/31(月) 23:22:22'delete' のオペランドは非 const ポインタでなければならない
0879デフォルトの名無しさん
2008/03/31(月) 23:23:14vがconstなんだろ。それなら無理だ。
0880デフォルトの名無しさん
2008/03/31(月) 23:23:47後ろからサイズを小さくしていくならばresize()という関数あるけど駄目なの?
0881デフォルトの名無しさん
2008/03/31(月) 23:24:360882デフォルトの名無しさん
2008/03/31(月) 23:25:26元の質問読んでる?vector<Hoge*>の各要素が指す先をdeleteしつvectorをemptyにしたいって言ってるんだよ。
0883デフォルトの名無しさん
2008/03/31(月) 23:31:040884デフォルトの名無しさん
2008/03/31(月) 23:39:183番目はboost無くても数行で実装できるよね
http://www.google.com/search?q=for_each+delete
0885デフォルトの名無しさん
2008/03/31(月) 23:48:18うん。今回だとdeleteを適用する関数オブジェクト作るだけだしね。
0886デフォルトの名無しさん
2008/04/01(火) 16:21:58[2] 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6189.txt
[3] 環境
[3.1] OS:windowsXP
[3.2] コンパイラ名とバージョン: visual studio 2003
[3.3] 言語:C言語
[4] 期限:2008年4月2日午前8時
[5] その他の制限:なし
よろしくお願いします
0887デフォルトの名無しさん
2008/04/01(火) 23:25:37しかし、わかりません… だれか詳しい方教えてください…
先輩が5人、後輩が12人います。必ず先輩と後輩でペアを組みます。
先輩5人が、後輩を交代させ1日6回練習し、後輩を養成します。
組み合わせを決める際、不平等にならないよう、できるだけ同じ回数練習に参加できるようにしたいのです。
もし、練習回数が少なくなってしまった後輩は、つぎの日の練習を多めにします。
さらに、日ごとに練習場所が異なり(平たん、登り、下り)、
異なる練習場所ごとにも平等の回数にしたいのです。
みなさん、教えてくださいよろしくお願いします…
ここでの注文です
気軽に「こんなソフトあリませんか?」 Part.85 http://pc11.2ch.net/test/read.cgi/software/1206534091/431-
0888デフォルトの名無しさん
2008/04/02(水) 00:41:11スレ違いな宣伝スンナ
0889デフォルトの名無しさん
2008/04/02(水) 13:16:54Cの宿題じゃないね。
よってスレ違い。
0890デフォルトの名無しさん
2008/04/05(土) 14:29:28[2] 問題文(含コード&リンク):アーカイバユーティリティを作りなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2008年4月12日
簡単なアーカイバユーティリティ(圧縮無し可)を作りたいのですが、何から始めた方がいいのか全く分かりません。
制限としては、ユーザーが『xmkfs ファイル名』とタイプしたらアーカイブファイルを作成して。
『xcpin アーカイブファイル名 コピーするファイル名』とタイプしたらアーカイブファイルの中にファイルをコピー。
『xdir アーカイブファイル名』とタイプしたらアーカイブファイルの中に入ってるファイル名を表示する。
『xmore アーカイブファイル名 ソースファイル名』とタイプしたらソースファイルの中身を表示する。
『xcpout アーカイブファイル名 ソースファイル名』 とタイプしたらソースファイルを解凍。
このようなプログラムを作りたいです。
助けて頂けるとありがたいです。
0891デフォルトの名無しさん
2008/04/05(土) 14:50:22まずはアーカイブファイルの構成を考えてみ
0892デフォルトの名無しさん
2008/04/05(土) 20:11:42[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言語自体かじったこともなく、教科書見ても全然判らないです;
気づけば期限が今週迄で、自分の頭ではどこをどうすれば…という状態です。
期限が短すぎますが、手の空いてる方がいたら何卒よろしくお願いします;
(できれば、自分でも後からできるように簡単なプログラムで
お願いします…注文多くて申し訳ないです)
0893デフォルトの名無しさん
2008/04/05(土) 20:20:12>自分でも後からできるように簡単なプログラムでお願いします
無理。
0894デフォルトの名無しさん
2008/04/05(土) 20:51:34(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;
}
0895892
2008/04/05(土) 21:21:32�@入力された2つの整数の差の絶対値を出力するプログラムを作成せよ。
整数には負数を入力される場合も考慮する。
ただし、入力される数値は、整数の場合最大8桁までを有効とし、9桁以降を無視する。
負数の場合は、最大9桁までを有効とし、10桁目以降は無視する。
また次のプロトタイプ宣言を持ち、変数n1とn2の差の絶対値を戻す関数を使用すること。
【 int absolute(int n1,int n2); 】
誤字だらけで申し訳ないです;
>>894様
コンパイルしてみたのですが、エラーで実行できませんでした;
他にも手伝ってくれる方がいましたらよろしくお願いします。
0896デフォルトの名無しさん
2008/04/05(土) 21:42:03>コンパイルしてみたのですが、エラーで実行できませんでした;
何歳のおこちゃまか知らないけど、どんなエラーがでたかくらい書けよ
#include <math.h>
#include <stdlib.h>
#define LINE_MAX 256
これを追加すればエラーは無くなるかもな
LINE_MAXの値は適当だけど
0897デフォルトの名無しさん
2008/04/05(土) 21:42:16・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
0898デフォルトの名無しさん
2008/04/05(土) 21:44:410899892
2008/04/05(土) 22:10:57失念してました、度々申し訳ないです。>>1読み直してきます;
そして、エラーについてですがちゃんと動くようになったのですが、
警告 W8057 prc08.c 42: パラメータ 'argc' は一度も使用されない(関数 main )
警告 W8057 prc08.c 42: パラメータ 'argv' は一度も使用されない(関数 main )
と出てきますが、問題ないでしょうか?
そして�@にて、エラー仕様があったので追加させていただきます;
<エラー仕様>
「・整数以外が入力されたら、"整数以外"を表示し、終了。
・『−』のみ、または改行のみ入力されたら"-、又は改行のみ"を表示し、終了。」
自分焦りすぎですね…少し頭冷やしてきます。
>>898様
よく判りませんが、力がついたら言っておきます;
0900デフォルトの名無しさん
2008/04/05(土) 22:14:54>警告 W8057 prc08.c 42: パラメータ 'argc' は一度も使用されない(関数 main )
>警告 W8057 prc08.c 42: パラメータ 'argv' は一度も使用されない(関数 main )
日本語がわからないのか?使用されないって書いてあるじゃないか
int main(void)にすれば警告は消える
0901デフォルトの名無しさん
2008/04/06(日) 02:45:500902デフォルトの名無しさん
2008/04/06(日) 02:48:38矛盾していないよ
0903デフォルトの名無しさん
2008/04/06(日) 02:59:20#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;
}
0904デフォルトの名無しさん
2008/04/06(日) 03:37:02#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); }
0905デフォルトの名無しさん
2008/04/06(日) 04:07:27#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); }
0906890
2008/04/06(日) 05:15:33↑こういう形で始めていけばいいのでしょうか?
でも、この場合は元のファイルの情報などもアーカイブファイル先に追加出来るのでしょうか?
0907デフォルトの名無しさん
2008/04/06(日) 07:30:17これはコマンドではなく、その後ろのパラメータ、あるいはオプションでは?
0908デフォルトの名無しさん
2008/04/06(日) 07:39:24そんな糞雛形作る前に、アーカイブファイルの仕様を決めないとダメ。
仕様っていうのは例えば次みたいに決める(これは適当)
アーカイブファイル =
「各ファイルの情報」が順に並ぶ
ファイル終端は EOF
各ファイルの情報 =
ファイル名 (16 byte)
ファイルサイズ (16進数, 8 byte)
ファイルのデータ (ファイルサイズ分)
元のファイルの情報のうち,アーカイブに追加したいものは
ちゃんと仕様に取り込んでおかないといけない.
(上の例だと,大体 4 GB くらいまでの元ファイルのデータと,
英数字 16 文字までのファイル名しか保存できない)
ファイル名を任意の長さにしたり,ファイルサイズを任意にしたりしたければ,
仕様の段階で頭を使ってやる必要がある.
また,最終更新日時とかを保存したければ,OS やファイルシステムを考えて,
それなりに何とかする必要がある.
仕様をうまく設計しないと、>>890 の要求は満たせないかもしれない。
0909892
2008/04/06(日) 12:50:59警告文消えました、ありがとうございます。
>>903,>>904,>>905様
3つも同時にありがとうございますっ。これなら少し理解できそうです。
残りはこの3つ(�@訂正あり;)ですので、よろしくお願いします。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6196.txt
0910デフォルトの名無しさん
2008/04/06(日) 15:59:34>>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!!"); }
0911892
2008/04/06(日) 17:47:51またも解答、本当にありがとうございます。
期限も今日のみとなりましたので、残るところ�@と�Eですが、
時間のある方よろしくお願いしますー。
0912デフォルトの名無しさん
2008/04/06(日) 17:51:31[2] 問題文: グレイスケール画像(拡張子はpgm)から2値化画像(pbm)を作るプログラムを組め.
[3] 環境
[3.1] OS:linux
[3.2] コンパイラ名とバージョン:gcc,cc
[3.3] 言語:C
[4] 期限:今週中
[5] その他の制限: 特になし,出来るだけ判り易く
要するにpgmtopbmの動作が出来れば良いと思われます.
linuxの中にあるソース見たのですがちょっと良く解らなかったので
お願いに上がりました.
よろしくお願いします.
0913デフォルトの名無しさん
2008/04/06(日) 18:01:48>>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]); }
0914デフォルトの名無しさん
2008/04/06(日) 18:11:29できるだけわかりやすくってどれくらいだよ
ポインタは使うなとかそういう制限はあるのか?
0915デフォルトの名無しさん
2008/04/06(日) 18:24:590916デフォルトの名無しさん
2008/04/06(日) 18:40:28単純にコメントなどで読みやすいコードをって意味じゃね?
0917デフォルトの名無しさん
2008/04/06(日) 19:19:53#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;
}
0918917
2008/04/06(日) 19:22:37threshold=threshold*256/(maximum+1);
↓
threshold=threshold*(maximum+1)/256;
0919912
2008/04/06(日) 19:30:40>>916さんの仰る通り出来るだけ簡単で読み易いコードって意味で
判り易くと表現しました.
>>917さん
有難うございます.
試してみます
0920917
2008/04/06(日) 19:33:42#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;
}
0922デフォルトの名無しさん
2008/04/06(日) 19:53:23#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;
}
0923909
2008/04/06(日) 22:25:27お付き合いいただいてありがとうございます。�@の方で、
『警告 W8065 prc12-4.c 32: プロトタイプ宣言のない関数 'input' の呼び出し(関数 main )
警告 W8065 prc12-4.c 32: プロトタイプ宣言のない関数 'input' の呼び出し(関数 main )』
実行できたのですが、どうすればいいでしょうか?;
0924デフォルトの名無しさん
2008/04/06(日) 22:31:12int input(void);
0925923
2008/04/06(日) 22:58:22ありがとうございました、なんとか期限までに完成できました。
本当にありがとうございます。
また後日お世話になるかもしれませんが、その時はよろしくお願いします;
0926デフォルトの名無しさん
2008/04/06(日) 23:39:05[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] その他の制限:特になし
さっき別の問題で質問し,回答して頂いたばかりなのですがもう一問
出来ない問題があったので質問させて頂きます
宜しくお願いします
0927890
2008/04/07(月) 03:41:42他サイトのサンプルコードなどを頼りに↓のようなものを作ってみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6199.c
すみませんが、進め方として合ってるか見て下さるとありがたいです。
また、ファイル名だけを取り出そうとしたのですが、上手く表示されませんでした。
0928890
2008/04/07(月) 03:53:18↑の部分でファイルデータをアーカイブファイル先に保存出来てなかったので、それを修正したものを新たにアップしました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6200.c
0929デフォルトの名無しさん
2008/04/07(月) 23:19:59ざっくり作ってみた。
当方マカなんで拡張子やらの取り扱いがオカシイやもしれませんが悪しからず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6204.txt
0931デフォルトの名無しさん
2008/04/08(火) 03:08:22$ 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); }
0932デフォルトの名無しさん
2008/04/08(火) 04:01:10$ 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); }
0933デフォルトの名無しさん
2008/04/08(火) 19:10:250934デフォルトの名無しさん
2008/04/09(水) 01:01:37[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共々よろしくお願いします。
0935デフォルトの名無しさん
2008/04/09(水) 02:46:58> void main(int argc, char *argv[])
はずかしい間違いなのですが……。
0936デフォルトの名無しさん
2008/04/09(水) 02:48:25後出しのエラー仕様を>>913に追加したらええやん
if (n < 0 || n > 255) { puts("エラー"); exit(0); }
if (c < '0' || c > '9') { puts("エラー"); exit(0); }
if (n[0] == '\0') { puts("エラー"); exit(0); }
0937デフォルトの名無しさん
2008/04/09(水) 02:52:370938デフォルトの名無しさん
2008/04/09(水) 03:12:43>>936
$ gcc -o xdir xdir.c
xdir.c: In function `main':
xdir.c:2: warning: return type of 'main' is not `int'
何か問題あるの?
0939デフォルトの名無しさん
2008/04/09(水) 05:55:04標準的とされている。くどいようだが、一概には言えないのは、各個人でISO準拠ではない
スタイルでも問題のない環境が存在するから。とりあえず、幅広い環境で通用する
int main(void) あるいはそこに書かれているスタイルの引数の変数を宣言するのが望ましい。
というのは、1年以上前にこのスレで五月蝿いくらいに議論されたことがある。
さてと、久々に帰ってきた俺が再びこのスレでレスしちゃうよぉ〜。あれから腕を磨いた。
そうだな、スーパーサイヤ人になったとでも言おうか。界王拳が使えるだけのときと比べて
かなりレベルアップしたぜ?やるかい?うほっ?あっーー!
0940デフォルトの名無しさん
2008/04/09(水) 06:21:05ちょっと作ってみた。
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はもとがクソに見えたので、もとから少し変えた。
0941デフォルトの名無しさん
2008/04/09(水) 13:37:13二度と来んなw
0942940
2008/04/09(水) 15:50:05チョンボしてたんでちょっと修正。
× if (month < 0 || 12 < month) {
○ if (month < 1 || 12 < month) {
他にも変なとこあるかもしんない。そんときはごめん。
0943デフォルトの名無しさん
2008/04/11(金) 01:42:06[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));
説明が分かりにくいかもしれませんがお願いします。
0944デフォルトの名無しさん
2008/04/11(金) 01:50:56サンプルがどう見てもC++ですが……
つーか、有り得ない間違いがあるし。
0945940
2008/04/11(金) 01:56:13int 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));
}
}
}
0946940
2008/04/11(金) 02:09:06別に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;
}
0947デフォルトの名無しさん
2008/04/11(金) 02:22:24そんな感じで(10,10)〜(29,29)の範囲でしていただけないでしょうか?
0948940
2008/04/11(金) 02:44:34int 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));
}
}
}
0949デフォルトの名無しさん
2008/04/11(金) 03:45:570950890
2008/04/11(金) 14:12:20更に質問なのですが、アーカイブファイルに取り込んだファイルの情報に最終修正時刻を追加したいのですが、どうすれば良いでしょうか?
最終修正時刻の方は何とか自分でコードが書けたのですが、それを>>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
0951940
2008/04/11(金) 16:26:17一応作ってみた。
動かしてないんで期待通りか分からない。
修正箇所の目安程度に見て。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6219.c
ところで、この仕様ってそれぞれ別コマンド?
あとxcpoutの場合、解凍した後アーカイブ内にもとファイルが残ったままになるでOK?
0952デフォルトの名無しさん
2008/04/11(金) 20:04:08基本的には書き込むデータを増やしたなら読み込み時にも対応する位置に対応する処理を追加すればよいです。
すでに951(940)氏が出して下さっているので不要かもですが、
バグ修正含めちょこちょこ変更してみたので一応うpしときます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6221.txt
0953934
2008/04/12(土) 13:14:31解決しました。ありがとうございますー
>>940様
わざわざありがとうございます。ですが、元を使わなくていけなかったので;
あと、�@がコンパイルできたのですが、入力結果がでませんでした;
0954デフォルトの名無しさん
2008/04/12(土) 13:24:39[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
あと、文章構成見にくかったら言ってください。
0955936
2008/04/12(土) 13:38:54おめ。3つ目のは以下の間違いだったので今更だけど訂正
if (s[0] == '\0') { puts("エラー"); exit(0); }
あと、2進数変換は>>940氏のアルゴリズムのほうがエレガントなので
余力があるなら書き換えたほうが良さそう
0956940
2008/04/12(土) 14:17:59問題文に「�@0〜255の整数を入力し、数値に変換して unsigned char型配列に格納する。」
とあるので、0〜255を入力し終えるまで何も出力されないです。
そこら辺はソース見てもらった方がいいと思います。
0957>954�@
2008/04/12(土) 15:30:46int 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;
}
元の仕様には明記されていないんだが、エラー文字があった場合はエラーメッセージが何度も表示されないようにしてみた。
0958940
2008/04/12(土) 16:38:04http://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型に格納可能な範囲」の判定をどうすればいいのか分からなかったとです。
どうすればいいんですかね?
0959デフォルトの名無しさん
2008/04/12(土) 16:51:440961デフォルトの名無しさん
2008/04/12(土) 19:59:56> float 型に格納可能な範囲
FLT_MIN FLT_MAX
ttp://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
0962デフォルトの名無しさん
2008/04/12(土) 20:19:45一応できたけど、何で動いてるのかよくわからない。(笑
とくに3個目があってるかよくわからない。誤差を許容すると言うことなので誤差出まくりだけど大丈夫だよね。
提出するなら、一回検算してください。修正はご自分で!
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6230.zip
0963940
2008/04/12(土) 21:16:42とりあえず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で扱える範囲を考えないとダメっぽいですね。
0965デフォルトの名無しさん
2008/04/12(土) 22:48:550966953,954
2008/04/12(土) 22:54:22了解です。わざわざどもですー。
>>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 )
と、こんな感じで警告文が出るのですが問題ないでしょうか?
0967デフォルトの名無しさん
2008/04/12(土) 23:54:32(3) だけ解いてみた
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6232.txt
よかったらどうぞ
gcc で確認したから警告でるかもしれないけどw
0968962
2008/04/13(日) 01:56:58初期化時の値は大体つかってない。途中でかわってるはず。習慣なんでね。
一点だけ、EOFが現状-1だと気づかなくって、確認漏れなんだけど、
unsigned charでは比較できない。ので、intに変更してくだちい。
それだけかな?何で動いてるのかよくわかってないもんでね。。。
うごいててよかったよ。あっはっは〜。
0970966
2008/04/13(日) 16:09:28>>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で入力
0971967
2008/04/13(日) 17:48:29ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6235.txt
0972デフォルトの名無しさん
2008/04/14(月) 00:55:10[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
と出力されるのではなく、プログラムを終了するようにしたいのですが、どう追加すればいいのでしょうか?
0973デフォルトの名無しさん
2008/04/14(月) 01:12:39scanf("%d", &s);
}while(s<0 || s>=10000);
if ( s == 0 ) { return 0; }
0974デフォルトの名無しさん
2008/04/14(月) 01:32:49なんかめんどくさいことやりすぎじゃね?
#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;
}
0975デフォルトの名無しさん
2008/04/14(月) 01:43:05終了できました、ありがとうございます
0976デフォルトの名無しさん
2008/04/14(月) 12:57:40#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;
}
0977デフォルトの名無しさん
2008/04/14(月) 22:31:13[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
0978デフォルトの名無しさん
2008/04/15(火) 03:41:36ラベルと親の意味がわかりません
0979デフォルトの名無しさん
2008/04/15(火) 11:57:52ラベル付けとは根付き木を作ってそれを深さ優先探索では先行順に番号を振っていくことです。
幅優先探索では幅優先順に番号を振っていくことです
親とは根付き木を作ったとしたら自分の上にいるのが親です。
たぶんわかりにくいですがすいません orz
0980デフォルトの名無しさん
2008/04/15(火) 12:25:08なかなか必死だな
0981デフォルトの名無しさん
2008/04/15(火) 12:29:55明日までに出さなければいけないので必死なんです;;
0982デフォルトの名無しさん
2008/04/15(火) 14:27:14http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6245.c
サービスで幅優先探索も入れといた
0983デフォルトの名無しさん
2008/04/15(火) 20:05:08おぉ!どうもありがとうございます orz
助かりました
0984デフォルトの名無しさん
2008/04/15(火) 23:08:04C/C++の宿題を片付けます 105代目
http://pc11.2ch.net/test/read.cgi/tech/1208268461/
0985デフォルトの名無しさん
2008/04/16(水) 02:41:53[2] 問題文
配列を用いたスタックを用いて、C言語のプログラムに含まれる括弧
{と}、(と)、[と]
が文法上正しい位置にあるかどうかチェックし、全ての括弧が正しい位置にある場合は、
「正しい位置にあります」、1つでも間違っていたら「間違っている」と表示するプログラムを書け。
そのプログラムはファイルとして保存されており、ファイル名を入力すると読み込めるとする。
[3] 環境
[3.1] OS: Windows XP
[3.2] コンパイラ名とバージョン: BCC
[3.3] 言語:C言語
[4] 期限: 4月15日までにお願いします。
[5] その他の制限:
出来るだけ簡単な関数のみでお願いします。
逆ポーランド法と同じようにすればできるのでしょうか?
0986985
2008/04/16(水) 02:53:190987デフォルトの名無しさん
2008/04/16(水) 03:24:54文法上正しい位置にあるっていうのは、(1) 単に括弧がバランスしているっていう意味?
それとも、(2) Cの文法として受理されない括弧の使い方をしているものがないという意味?
また、(2)の場合は当然として、(1)の場合でも、コメントや文字列リテラル中の括弧はチェックの対象外でいいの?
0988デフォルトの名無しさん
2008/04/16(水) 03:44:27[2] 問題文(含コード&リンク):a[100][100]を宣言し、2重のfor文を用いて、a[0][0]に0+0を入れて、
a[0][1]に0+1を入れて、a[0][2]に0+2を入れて、a[1][2]に1+2を入れて、
・・・a[99][99]に99+99を入れるようなプログラムを作れ。次にこれらの
配列変数の値が赤色の値で、緑と青の値は0であるような画像を表示する
プログラムを作成しろ。
[3] 環境
[3.1] OS: (Windows/Linux/等々) Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語: (C/C++/どちらでも可 のいずれか)
[4] 期限: 4月16日午後9時までにお願いします。
[5] その他の制限: 習った単元はfor文、if文、1次元配列変数、2次元配列変数です。
基礎なのでできるだけ簡単なプログラミングでお願いします。
0989デフォルトの名無しさん
2008/04/16(水) 04:52:08画像表示に使うライブラリの指定とかないの?
0990デフォルトの名無しさん
2008/04/16(水) 05:23:39>>987さんへの回答がまだ出てませんが、とりあえず>>987さんの(1)の一番簡単なやつをつくってみました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6249.c
0991デフォルトの名無しさん
2008/04/16(水) 05:29:04すんません。リンクミスりました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6250.c
0992デフォルトの名無しさん
2008/04/16(水) 06:25:57ここでやってもらって得た単位は将来使い物になるかな?
0993デフォルトの名無しさん
2008/04/16(水) 06:31:42簡単なんだよこんなの
0994デフォルトの名無しさん
2008/04/16(水) 06:43:33このスレの存在意義は、他力本願な学生が血迷ってこっちにくることのないよう啓蒙してあげることにあります。
0995デフォルトの名無しさん
2008/04/16(水) 07:01:00簡単ならやってみたら?
画像表示の部分をどうするか明記されてないから、やりようがないわけだが。
0996993
2008/04/16(水) 11:11:16#define UNICODE
#include <windows.h>
char a[100][100];
LPCWSTR g_ClassName = L"GarbageClass";
LPCWSTR g_WindowName = L"Garbage";
void Paint(HWND hWnd)
{
HDC hdc;
PAINTSTRUCT ps;
int x, y;
hdc = BeginPaint(hWnd, &ps);
for(x = 0; x < 100; x++) {
for(y = 0; y < 100; y++) {
SetPixel(hdc, x, y, RGB((BYTE)a[x][y], 0, 0));
}
}
EndPaint(hWnd, &ps);
}
0997993
2008/04/16(水) 11:12:17{
switch(uMsg)
{
case WM_PAINT:
Paint(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}
return (0L);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hWnd;
MSG msg;
WNDCLASSEX wndClass;
int i, n;
for(i = 0; i < 100; i++) {
for(n = 0; n < 100; n++) {
a[i][n] = i + n;
}
}
0998993
2008/04/16(水) 11:13:02wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.lpfnWndProc = (WNDPROC)WindowProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = NULL;
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = GetStockObject(BLACK_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = g_ClassName;
wndClass.hIconSm = NULL;
if(RegisterClassEx(&wndClass) == 0) { return FALSE; }
hWnd = CreateWindowEx(WS_EX_APPWINDOW, g_ClassName, g_WindowName,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
0999985
2008/04/16(水) 12:34:42おそらく前者でよいと思います。
文字リテラルやコメントはプログラム中にないという前提でした。
申し訳ありません。
>>990
ありがとうございます。
わかrない部分がたくさんありますが、頑張ってみます!
ありがとうございました
1000990
2008/04/16(水) 12:57:01malloc()した領域をfree()しなかったり、fclose()し忘れてたりしたので、ちょっと修正しました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6251.c
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。