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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。気に入らない質問やその他や発言はスルーの方向で。

【質問者へ】
回答者の便宜のため、質問の際は以下を行うことを推奨します。
・質問は【質問テンプレ】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう.
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。
・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。
・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。

【質問テンプレ】
[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/
2デフォルトの名無しさん:2008/02/04(月) 23:35:07
2
3デフォルトの名無しさん: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」 ノ| .|
 (  ,ハ    ヽ _ン   人!      | ||ヽ、       ,イ| ||イ| /
,.ヘ,)、  )>,、 _____, ,.イ  ハ    レ ル` ー--─ ´ルレ レ´
4デフォルトの名無しさん:2008/02/05(火) 00:40:15
[1] 計算機B
[2] 正規分布に従う乱数を生成しなさい。
[3] 環境
 [3.1] OS: mac
 [3.2] gcc 3.4
 [3.3] 言語: C
[4] 期限: [2008年2月7日まで]
5デフォルトの名無しさん:2008/02/05(火) 01:21:26
Mersenne Twister
Box-Muller transform
6デフォルトの名無しさん:2008/02/05(火) 06:59:45
>>4

#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());
}
7デフォルトの名無しさん:2008/02/05(火) 17:53:37
[1] 授業単元:プログラミング
[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] その他の制限:特になし
  丸投げです。よろしくお願いします。
8デフォルトの名無しさん:2008/02/05(火) 19:11:00
>>1乙!
9デフォルトの名無しさん:2008/02/05(火) 22:28:23
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
     ビジュアルベーシックのWinAPI(C++)を使用して、テトリスを作る。
     矢印キーで移動、SPACEキーで回転。
     次に何が出るか、スコア、時間を同時に表示。
     (+αとしてスコアを保存し、ランキングも表示できる)
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:ビジュアルベーシックプロフェッショナル2003で動作。WinAPI。
 [3.3] 言語:C++
[4] 期限: 2008年2月10日(日)
[5] その他の制限:
     学校の課題なので、初心者に見えるようなプログラムでお願いします。
     丸投げですが、かなり急いでます。よろしくお願いします。
10デフォルトの名無しさん:2008/02/05(火) 22:43:48
>>9
i,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++];}
11デフォルトの名無しさん:2008/02/05(火) 22:45:07
>>9
なぜにそんな時間がかかりそうなのを残してるんだorz

あと、どの辺まで習ってる?
・WindowProc.
・SetTimer()
・メモリデバイスコンテキスト
・レジストリ or INIファイル
・MFC
etc.
12デフォルトの名無しさん:2008/02/05(火) 23:02:47
>>10
すみません。それはこのままデバッグすればいけますか?

>>11
WindowProcは習いました。SetTimerも説明は受けました。
メモリデバイスコンテキストも話は聞きました。
しかしMFCの意味が分からないです。
できればhttp://www13.plala.or.jp/kymats/study/game_other/SPACE_TETRIS/SPACE_TETRIS.gifみたいなものはできますか
13デフォルトの名無しさん:2008/02/05(火) 23:05:20
ビジュアルベーシックのWinAPI(C++)って何だよ。
14デフォルトの名無しさん:2008/02/05(火) 23:14:50
>>12
MFCは知らないなら無視してもいいかと。
画像の表示、キー入力はできるんだろ?
具体的に何がわからないんだ?
現状のまま丸投げするとおそらくさっぱりなコードが返ってくるぞ。
15デフォルトの名無しさん:2008/02/05(火) 23:17:14
>>13
MicrosoftVisualBasic2003のプロフェッショナルを俺の通っている高校で使用していて、
それのWinAPIを使った課題なんです。
なんて説明すればいいのかわからなかったんですが…。
16デフォルトの名無しさん:2008/02/05(火) 23:21:31
>>14
画面表示、キー入力は可能です。

わからないのはテトリスの落ちてくる、テトリミノのランダム化。
テトリミノの形設定。
一列並んだら消える。
上までいったらゲーム終了。
(+αだと、スコアの記録の仕方)

というテトリスの基本的部分の構造が全く分からなくて、チャートも書けない状況です。
17デフォルトの名無しさん:2008/02/05(火) 23:25:10
テトリスとかぐぐればいくらでもあるよね
18デフォルトの名無しさん:2008/02/05(火) 23:27:20
VisualStadioの間違いじゃまいか?

もし、VisualBasicでWindowsAPI使ったプログラム(C,C++関係なし)を作れ言われたら、俺わからん。
19デフォルトの名無しさん:2008/02/05(火) 23:29:31
>>17
ここ一週間くらいぐぐってたんですが、
コンパイル通らないんですよね。
あとは、知らない言語とか。

>>18
VisualBasicかもしれない…申し訳ないですが本当に初心者なんです。
WindowsAPIでC++です。
20デフォルトの名無しさん:2008/02/05(火) 23:31:09
>>19
まちがた。VisualStadioかもしれない。でした。
21デフォルトの名無しさん:2008/02/05(火) 23:33:14
>>19
VisualBasicはないだろ。変数宣言がdim i as integerがVB、int i;がC(C++)だ。

>>16
途中でもいいならソースアップした方がいい。

>わからないのはテトリスの落ちてくる、テトリミノのランダム化。
乱数つかうだけ

>テトリミノの形設定。
const staticとかで宣言するだけ

>一列並んだら消える。
>上までいったらゲーム終了。
テトリミノが固定されたときに全ラインにチェックかけるだけ

>(+αだと、スコアの記録の仕方)
スコアを別ファイルに保存するだけ
2221:2008/02/05(火) 23:34:29
日本語でおkになってた。
>途中でもいいならソースアップした方がいい。
中途半端でもいいから現状のソースがあるならアップした方がいい。

typoとかいうレベルじゃねぇorz
23デフォルトの名無しさん:2008/02/05(火) 23:48:54
>>22

手をつける場所が分からず、まだ何もできていない状況ですが。

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];
//====================================================================

24デフォルトの名無しさん: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:
25デフォルトの名無しさん:2008/02/05(火) 23:53:09
>>21

>テトリミノが固定されたときに全ラインにチェックかけるだけ
他は言っていることはわかるんですが、このチェック方法がわかりません。
26デフォルトの名無しさん:2008/02/05(火) 23:53:25
>>1にあぷろだ書いてるからそこにもってけw
27デフォルトの名無しさん:2008/02/05(火) 23:56:45
>>25
いろんな実装あるだろうけど、たとえばな・・・
フィールドにテトリミノ(の残骸)があるかどうかを確保する変数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ラインを消す処理+消えたとこより上を下にずらす処理
}
}
289:2008/02/05(火) 23:58:15
今あぷろだ何故かつながらないんです。
299:2008/02/06(水) 00:01:55
>>27

なるほど。
ありがとうございます。
考え方はわかった気がします。
309:2008/02/06(水) 00:25:28
>>21

ほとんど何も出来ていませんが。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6004.txt
31デフォルトの名無しさん:2008/02/06(水) 00:27:43
32デフォルトの名無しさん:2008/02/06(水) 01:55:19
>>31
ありがとうございました。
助かりました。
33デフォルトの名無しさん:2008/02/06(水) 02:32:38
[1] 授業単元:プログラミング
[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] その他の制限:特になし
  丸投げで申し訳ないです。よろしくお願いします。  
  
34デフォルトの名無しさん:2008/02/06(水) 03:35:15
>>33
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6009.txt

>>7よりもこっちが先だと思うんだけど。
35デフォルトの名無しさん:2008/02/06(水) 04:27:35
[1] 授業単元:プログラミング
[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] その他の制限:特にありません

よろしくお願いします。
369:2008/02/06(水) 10:16:56
37デフォルトの名無しさん:2008/02/06(水) 11:05:28
[1] 授業単元:情報処理演習
[2] 問題文(含コード&リンク):複素数の時粒、虚部の値をファイルから入力し、複素数の四則演算をファイルに出力するプログラムを作成せよ。
ただし演算部分は関数にして実装せよ。
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: (gcc
 [3.3] 言語: C++
[4] 期限:2月6日以内
[5] その他の制限: プログラムの構成は ファイルから読み込み、複素数の四則演算、別のファイルに書き込み

です。よろしくお願いします。
38デフォルトの名無しさん:2008/02/06(水) 12:23:43
>>37
時粒って何?

std::complexを使っていいの?
39デフォルトの名無しさん:2008/02/06(水) 12:26:05
>>36
APIなのか.Netなのかどっちなのかとw
409:2008/02/06(水) 17:54:24
>>39

APIだと思うんですが、教師の言ってる意味が日本語でおk状態です。
41デフォルトの名無しさん:2008/02/06(水) 21:28:50
>>34
遅くなってすみません。
本当にありがとうございました。
42デフォルトの名無しさん:2008/02/06(水) 22:11:27
[1] 授業単元:計算機入門
[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");

4342の続き:2008/02/06(水) 22:12:07
/* 配列の各要素のアドレスをfor文で表示する */
for(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文で表示するところがうまくいきません。
どなたかよろしくお願いします。
44デフォルトの名無しさん:2008/02/06(水) 22:23:10
>>42
/* 文字列の長さ */
for(str_length=0; str[str_length]; str_length++) {}

/* 配列の各要素のアドレスをポインタを利用して表示する */
p = &data[0];
while(*p)
{
printf("%p : %d\n", p, *p);
p++;
}
45デフォルトの名無しさん:2008/02/06(水) 22:39:19
>>44
助かりました。
本当にありがとうございました。
46デフォルトの名無しさん:2008/02/07(木) 07:59:52
前スレ埋めようよ
47デフォルトの名無しさん:2008/02/07(木) 14:13:20
[1] 授業単元:プログラミング
[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] その他の制限:特にありません

非常に困っております。よろしくお願いします。
48デフォルトの名無しさん:2008/02/07(木) 14:20:36
>>47
何が問題なんだ?
そのコードはちゃんと動くけど。
49デフォルトの名無しさん:2008/02/07(木) 14:21:38
>>48
え?プログラムが完成されてるってことですか?ごめんなさい、もう少しよく考えてから出直します
50前スレ798:2008/02/07(木) 15:15:32
[1] プログラミング論
[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
51デフォルトの名無しさん:2008/02/07(木) 20:49:34
[1] 授業単元:論文の途中で値を出す為に使います
[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] その他の制限:特にありません
52デフォルトの名無しさん:2008/02/07(木) 20:58:08
>>6
この rnd() はなんという乱数発生法ですか?

あと、どんな乱数でも多数加えると正規分布に近づくことは確かですが、12 回たして6引くというのは(よく知られてはいますが)あまり精度はよくありません。
53デフォルトの名無しさん:2008/02/07(木) 22:59:29
[1] 授業単元:プログラミング入門
[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] その他の制限:急ぎで申し訳ありませんが、困っているのでよろしくおねがいします。
54デフォルトの名無しさん:2008/02/07(木) 23:32:08
[1] 授業単元:プログラミング
[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] その他の制限:特になし
55デフォルトの名無しさん:2008/02/08(金) 01:11:59
56デフォルトの名無しさん:2008/02/08(金) 01:17:17
>>55
39行目くらいの
fprintf(outfp, "%s", pstart); を fputs(pstart, outfp);
に変えてください
(別にどっちでもいいんだけど、統一させないと気持ち悪いから
どうも、fprintfを使うのが癖になってるな)
57デフォルトの名無しさん:2008/02/08(金) 01:24:30
>>53 便乗でゴミソース。 一度置換した文字列をバッファに確保すべきだろうか?
#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;
}
58 ◆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] その他の制限: とくになし
59デフォルトの名無しさん:2008/02/08(金) 05:32:50
const CSize CLIENT_SIZE = {320, 240};
const 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;
}
}

こんな漢字か?
60デフォルトの名無しさん:2008/02/08(金) 08:10:23
>>55-57
ありがとうございます。助かります。
61デフォルトの名無しさん:2008/02/08(金) 12:59:33
>>54
課題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;
}
62デフォルトの名無しさん:2008/02/08(金) 13:55:53
>>54
課題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;
}
63デフォルトの名無しさん:2008/02/08(金) 14:19:27
>>54
// 課題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;
}
64デフォルトの名無しさん:2008/02/08(金) 14:51:08
>>54
// 課題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;
}
65デフォルトの名無しさん:2008/02/08(金) 15:54:00
>>50
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6020.cpp
アッカーマン関数0.05secは無理だった
66デフォルトの名無しさん:2008/02/08(金) 16:24:10
>>65
アッカーマン関数は、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
# あー気にいらね
67デフォルトの名無しさん:2008/02/08(金) 16:42:10
>>66
呼び出し回数は大して減らないって?
Ack(3, 12)なら、81923回の呼び出しで求まるし、一瞬だけど。
68デフォルトの名無しさん: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));
}
6966:2008/02/08(金) 16:59:11
やっと納得。
         m=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


以下同様に。

ソースは後で。
7066:2008/02/08(金) 17:02:37
がーん、ソース貼られてたw しかも、m=2についても解いてあるし。

>>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
7166:2008/02/08(金) 17:16:12
>>68
それがアリなら、これも追加しとこうぜ。
if(m==3) return (1 << (n + 3)) - 3;

>>70
いやだから、m = 1やm = 2について解いたりせずキャッシュのみで、
Ack(3, 12)は81923回で導き出せるんだって。

7266:2008/02/08(金) 18:10:54
やっと合点が。

>>71
アッカーマン関数は、その引き数に自身の結果が使われるからm * n 程度のキャッシュじゃダメだったのね。
取り敢えず、4x40000にしたら無事すんなり終わりましたわさ。

それにしても、mが0、1のときは一次式で2のときは2次式なのに、3でいきなり2の冪か。
m=4について解いたらとんでもない式になりそうですな。
73デフォルトの名無しさん:2008/02/08(金) 21:34:01
元々そういう関数だしな。
74デフォルトの名無しさん:2008/02/08(金) 22:23:16
[1] 授業単元:プログラミング
[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月のカレンダーしか表示されません。
これを何年何月を入力すれば、その年月のカレンダーが表示されるようにしたいです。
よろしくお願いします。
75 ◆TQgM1tAAxo :2008/02/08(金) 22:24:28
>>59
[エラー報告]
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] その他の制限: とくになし

なんどもすいません。
 
76デフォルトの名無しさん:2008/02/08(金) 22:36:21
>>75
全角スペースを使うな
77デフォルトの名無しさん:2008/02/08(金) 22:37:13
THEバカス
78 ◆TQgM1tAAxo :2008/02/08(金) 23:00:19
>>76
どうもすいません。
全角を消した結果でたエラーを載せます!

「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};
の文でエラーがでています!










79デフォルトの名無しさん:2008/02/08(金) 23:28:18
>>78
>>59 はコードの一部だから、あれだけでは動かないよ。
そもそも問題は、「〜アニメーションを作成せよ」なのか
「〜に書くべき記述を答えよ」なのか、どちらだ?
80デフォルトの名無しさん:2008/02/08(金) 23:34:51
>>78
まさかとは思うが、>59の一行目をコピーしていないって落ちじゃないよな?
81 ◆TQgM1tAAxo :2008/02/08(金) 23:53:28
>>80
1行目を記述してもエラーがでてしまいます(´・ω・`)

ちょっとエラー内容がかわったのでまた載せます!

「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などの関数やその他のものはそろっています。
キャラクターを上下左右に動かす方法は分かるのですが、
クリックされた場所に動かすという記述方法が分からなくて困っています(´・ω・`)
82デフォルトの名無しさん:2008/02/08(金) 23:56:29
まさかとは思うが、お前馬鹿だろw
83 ◆TQgM1tAAxo :2008/02/09(土) 00:04:35
>>82
下にキャラクターが進むときはOnTimerに
y+=10;(yはキャラクターのいるy座標値)
と記述すればうごくのですが、クリックしたとこにうごかすのがどうしてもできなくて・・(´・ω・`)
スムーズに動かず、いっきにクリックした位置に移動してしまったりの失敗の繰り返しです(´・ω・`)

どうしたら良いでしょうか?
ほんと頭悪くてすいません(´・ω・`)
84デフォルトの名無しさん:2008/02/09(土) 00:04:57
>>81
キャラクターをクリックされた場所に動かすという記述方法は分かるのですが、
onDrawなどの関数やその他のものが分からなくて困っています(´・ω・`)
85 ◆TQgM1tAAxo :2008/02/09(土) 00:09:43
>>84
どういうことですか?(´・ω・`)
どうしたら良いのでしょうか?(´・ω・`)
86デフォルトの名無しさん:2008/02/09(土) 00:13:45
一挙手一投足、全て教わらないとできないなら、最早他人から教えてもらう必要なんてないだろ。
87デフォルトの名無しさん:2008/02/09(土) 00:18:33
>>50
BAckermann関数
キャッシュのやつを作ってみたので一応添付
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6022.txt

ショートカットを加えると確保領域が少なくすむのは何故なんだろ・・・・
88デフォルトの名無しさん:2008/02/09(土) 02:28:13
昨日59を書いたものだが、まさかこんな事になってるとは…
OnLButtonUpと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
89デフォルトの名無しさん:2008/02/09(土) 02:46:43
>>88
それを>>58が理解できると思うか?
またエラーが出るって言ってくるのがオチだろ。
90 ◆TQgM1tAAxo :2008/02/09(土) 05:43:14
>>88
丁寧にありがとうございます!でも、もう一回考えて、ちょっと違う方法ですが自分で解決しました。
どうもありがとうございます

>>89
考えたらできたわ
91デフォルトの名無しさん:2008/02/09(土) 09:38:03
最初から考えろ馬鹿。
92デフォルトの名無しさん:2008/02/09(土) 12:29:51
すいません。 教えて下さい。

0x1234を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

93デフォルトの名無しさん: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++);
}
94デフォルトの名無しさん: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
95デフォルトの名無しさん:2008/02/09(土) 12:32:22
文が見づらくてすいません。m(_ _)m

どなたか解答をお願いいたします。
96デフォルトの名無しさん:2008/02/09(土) 12:35:15
97デフォルトの名無しさん:2008/02/09(土) 12:58:33
すいませんが、>>74に答えていただけませんか?
98デフォルトの名無しさん:2008/02/09(土) 13:17:07
>>97
・yearとmonthを入力できるようにする。
・1日の曜日を求める。
99デフォルトの名無しさん:2008/02/09(土) 13:29:41
>>98
ありがとうございます。えっと、つまり…どの部分をどう変えればいいんでしょうか…orz
100デフォルトの名無しさん:2008/02/09(土) 13:35:24
>>99
int year = 2008;
int month = 2;
int first_dow = 5; /* 1日は金曜日 */
を変えればいい。
year, monthはそれぞれscanf()か何かで入力すればいいし、first_dowは問題に書いてある通り。
>(課題では,前回のプログラムを使って1日の曜日を計算する)
つまり、「前回のプログラム」がないと作れない。
101デフォルトの名無しさん:2008/02/09(土) 13:37:59
>>100の優しさに発情した
102デフォルトの名無しさん: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)の解答群
ア 定数 イ 仮引数 ウ 元引数 エ 実引数 オ ポインタ変数
103デフォルトの名無しさん:2008/02/09(土) 14:04:51
>>102
(1)extern
(2)static
(3)extern
(4)return
(5)void
(6)int
(7)仮引数
(8)実引数
104デフォルトの名無しさん: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関数はファイルから読み込んだ文字を、まだ読んでいなかったものとし
て扱う。

解答群
ア 正しい イ 誤り

105デフォルトの名無しさん:2008/02/09(土) 14:08:55
どなたか 問7 問8の解答を教えていただけると ありがたいのですが..

106デフォルトの名無しさん:2008/02/09(土) 14:11:01
>>104
(9) ○ (10) (多分)× (11) × (12) (0がNULLと同等に扱えるから)○
(13) × (14) ○ (15) ○ (16) (なんか表現が微妙だが)○
107デフォルトの名無しさん:2008/02/09(土) 14:15:39
>>106
(12) について
fscanf は入力エラーのとき EOF を返す
108デフォルトの名無しさん:2008/02/09(土) 14:15:48
ungetcはストリームに戻すというイメージがある
109デフォルトの名無しさん:2008/02/09(土) 14:36:44
>>100
ありがとうございます!!本当に助かりました!
110デフォルトの名無しさん: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は全くの初心者で、本来はで基礎から勉強すれば良いのですが、すぐに
この部分だけのソースが欲しいのです。だれか、お助けください。
111デフォルトの名無しさん:2008/02/09(土) 14:46:49
>>110
sprintf(buffer, "%04d", data);
112110:2008/02/09(土) 14:55:51
>>111
ありがとうございます。こんな早く対応して頂けるなんて感謝です。
おかげさまで4桁の数字が表示されました。

ただ、プログラム全体としては、桁が増えた分動かなくなってしまいました。
もう少し、頑張ってみます。
今後とも、どうぞよろしくお願いします。
113デフォルトの名無しさん:2008/02/09(土) 14:55:58
>>110
{
int i;
for (i = 12; i >= 0; i -= 4)
*buffer++ = "0123456789ABCDEF"[(data >> i) & 15];
}
114デフォルトの名無しさん:2008/02/09(土) 14:56:41
問7

プログラムの説明

このプログラムの目的は、コマンドラインより入力されたビット列を15ビットごとに
パリティビットを付加し、16進数で表示することである。
コマンドラインから渡される引数には、ビット列のほかに偶数パリティ、奇数パリティ
を選択するパラメータがある。
ビット列は255ビット以内の任意の長さであり、15ビットの倍数に満たない場合は、
足りないビットには0を挿入する。
なお、コマンドラインの入力に間違いはないものとする。

コマンドラインの書式

プログラム△ビット列(任意の長さ)△パリティの指定

115デフォルトの名無しさん:2008/02/09(土) 14:59:55
パリティの指定
0 偶数パリティ
1 奇数パリティ

※「△」は1文字以上の空白文字を示す。

コマンドラインの例 (プログラム名が「toi7」の場合)
toi7 0101001100101010001010010010101011010 0

処理手順
@ コマンドラインより渡されたビット列を配列にコピーする。
A 配列に格納された文字列を、先頭から1文字ずつ取り出し以下の処理を行う。
・取り出した文字(ビット)の1の個数をカウントする。
・15ビットの数値に変換するために、変換後の数値を左に1ビットシフトし、数値
に変換した文字(ビット)とのビット演算を行う。
B15文字ごとに以下の処理を行う。
・変換後の数値を左に1ビットシフトする。なお、ビット列が15文字に満たない場合は、足りない分左にシフトする。
・カウントした1の個数から、パリティビットを付加する。偶数パリティであれば
1の個数が偶数になるように、奇数パリティであれば奇数になるようにパリティ
ビットを付加する。
・パリティビットを付加した変換後の数値を16進数で表示する。
116110:2008/02/09(土) 15:08:17
>>113
ありがとうございます。 4桁の数字が、ちゃんと表示されました。
ただ、10進数の表示をしたいのですが英字まで表示されてしまいます。
引き続き、アドバイス頂けた助かります。
ほんと、すみません。
117デフォルトの名無しさん:2008/02/09(土) 15:18:50
実行結果 (プログラム名が「toi7」の場合)
C:\>toi7 0101001100101010001010010010101010010 0
532B
1495
A401
※「C:\>」はコマンドプロンプトを示す。

118デフォルトの名無しさん:2008/02/09(土) 16:22:36
>>117
#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;
}
119デフォルトの名無しさん:2008/02/09(土) 16:24:15
>>118の続き
int 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;
}
できたから載せただけ。
120デフォルトの名無しさん:2008/02/09(土) 16:29:45
>>119
特定しましたよ。
121デフォルトの名無しさん:2008/02/09(土) 16:34:26
>>120
何を特定できた??
122デフォルトの名無しさん:2008/02/09(土) 16:36:01
>>115 入力チェックは一切していない
#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;
}
123デフォルトの名無しさん:2008/02/09(土) 17:43:15
[1] 授業単元:プログラミング入門演習
[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 どなたかお願いします。

124110:2008/02/09(土) 17:59:53
{
int i;
for (i = 12; i >= 0; i -= 4)
*buffer++ = "0123456789"[(data >> i) & 9];
}

アドバイスいただいた、プログラムを10進数表示させようと上のように書き換えたのですが
このように書くと0189しか表示されません。
こんな簡単な奴ふざけるなと思わせてしまって申し訳ないのですが
どうか、教えていただけないのでしょうか。
初心者のスレかくのが本来ですが、マルチぽくなるのでこのまますみません。
125デフォルトの名無しさん:2008/02/09(土) 18:14:58
>>124
data>>iで済むのは16進数だからであって、
10進数で同じ方法は考えないほうがいい。
126デフォルトの名無しさん:2008/02/09(土) 18:20:09
>>124
{
unsigned tmp;
for(tmp=1000;tmp>0;tmp/=10)
{
*buffer++=((data/tmp)%10)+'0';
}
}
127110:2008/02/09(土) 18:37:44
>>125>>126

アドバイスありがとうございます。無事に動作するようになりました。
ASMを勉強していてASMでの書式など有る程度把握出来てきたのですが
c言語は、書式がまるっきり分からず困っていました。
c言語は生活に十分必要な物だと思いますのでこれを機に勉強をしようとおもいます。

とても困っていたので、ほんと感謝の気持ちでいっぱいです。
ありがとうございました。
128デフォルトの名無しさん:2008/02/09(土) 19:32:03
>>117の続き

プログラム

/*パリティビットの生成*/
#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);
}
}
129デフォルトの名無しさん:2008/02/09(土) 19:44:13
>>128

すいません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]

です
130デフォルトの名無しさん:2008/02/09(土) 21:05:59
[1] 授業単元:プログラミング
[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] その他の制限:

計算式の記述が分かり辛いですが、どうぞよろしくお願いいたします。
131デフォルトの名無しさん:2008/02/09(土) 22:31:45
132デフォルトの名無しさん:2008/02/10(日) 01:19:11
>>131
ありがとうございます!
133デフォルトの名無しさん:2008/02/10(日) 02:10:32
>>114 >>115 >>117
プログラム >>128
解答群 >>129

すいませんm(_ _)m どなたか解答をお願いします。

134デフォルトの名無しさん:2008/02/10(日) 03:15:38
(42):ウ
(43):イ
(44):ウ
(45):ウ

但し(41)の答えが何なのか、これが分らない
135デフォルトの名無しさん:2008/02/10(日) 03:19:59
ごめん、(45)はエだ。

但し(41)の答えがn(ry
自分でやってくれ
136デフォルトの名無しさん:2008/02/10(日) 03:21:16
>>134
エ じゃないかな
137デフォルトの名無しさん:2008/02/10(日) 04:10:18
>>136
一つくらい自分でやらせようとしてたんだが…
138デフォルトの名無しさん:2008/02/10(日) 04:12:39
入門書に確実に載ってる問題を質問するようなヤツが考えるわけもない
ググってもすぐ分かるというのに
139デフォルトの名無しさん:2008/02/10(日) 10:34:58
すいませんm(_ _)m ありがとうございます。

(41)エ
(42)ウ
(43)イ
(44)ウ
(45)エ


これでOKでしょうか?

140デフォルトの名無しさん:2008/02/10(日) 11:03:41
#include <stdio.h>
main()
{
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個
@ABのprintfの表示は @がs Aがecond Bがhird
でいいですかね?
141デフォルトの名無しさん:2008/02/10(日) 11:35:41
>>123
これで合ってるのかな。srandがよくわからない。。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6028.c

>>140
合ってる
142デフォルトの名無しさん:2008/02/10(日) 13:18:18
>ポインタ配列zの要素数は19個
3個だろ
14354:2008/02/10(日) 15:24:52
答えてくれたみなさんありがとうございます!!
めっちゃかんしゃです。
144デフォルトの名無しさん:2008/02/10(日) 15:38:46
度々大変すいませんm(_ _)m どなたか解答をお願いします。
プログラム

/*語尾変換プログラム*/
#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;
145デフォルトの名無しさん:2008/02/10(日) 15:39:16
続き
char 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);
}
146デフォルトの名無しさん:2008/02/10(日) 15:40:31
(46)の解答群
ア 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)の答はどうなりますかね?
147デフォルトの名無しさん:2008/02/10(日) 16:16:12
>>146
うざいからうpロダ使ってくれないかな。
148デフォルトの名無しさん:2008/02/10(日) 17:03:18
[1] 授業単元:プログラミング
[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] その他の制限:

前回は本当にありがとうございました。
今回もよろしくお願いいたします。
149デフォルトの名無しさん:2008/02/10(日) 17:42:59
150デフォルトの名無しさん:2008/02/10(日) 18:09:40
[1] 授業単元:パターン認識
[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] その他の制限:
動的計画法についての課題です。問題が図表付きなので圧縮しています。
151デフォルトの名無しさん:2008/02/10(日) 20:25:53
>>149
ありがとうございました。
152デフォルトの名無しさん:2008/02/10(日) 21:05:23
[1] 授業単元:プログラミング
[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>で使える命令のみ
            一次元配列のみ
153デフォルトの名無しさん:2008/02/10(日) 21:10:05
[1]プログラミング
[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の中でそれらを呼び出すようにする

なす角θを計算する部分は成功しましたが(そこまでの完成版はリンクしたプログ
ラムを参照)、キーボード上から入力した時間をうまく表示することができません。出力は、

??:?? なす角:??°

とします。どうか宜しくお願いします。
154デフォルトの名無しさん:2008/02/10(日) 21:11:22
>>152
#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;
}
155デフォルトの名無しさん:2008/02/10(日) 21:24:02
>>154
自分の技量不足で申し訳ありませんが質問してもよろしいでしょうか?
関数の*pの*は何か意味があるのでしょうか?
156デフォルトの名無しさん:2008/02/10(日) 21:24:35
157デフォルトの名無しさん:2008/02/10(日) 21:24:35
>>153
void output(int s, int t, double r1)
{
printf("%d:%d なす角:(%.1f)°\n", s, t, (double)r1);
}
にしてh1とm1渡すだけじゃね?
158デフォルトの名無しさん:2008/02/10(日) 21:24:52
[1] 授業単元:プログラミング
[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] その他の制限:色々な処理方法があるそうですが、
  なるべくレベルが低い方法でよろしくおねがいします。
159デフォルトの名無しさん:2008/02/10(日) 21:27:27
>>155
間接参照。
160デフォルトの名無しさん:2008/02/10(日) 21:30:03
>>159
ありがとうございます!
161デフォルトの名無しさん:2008/02/10(日) 21:56:55
>>158
#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;
}
162デフォルトの名無しさん:2008/02/10(日) 22:35:42
163デフォルトの名無しさん:2008/02/10(日) 23:00:27
>>144
>>145
>>146

ですが
解答はいかがでしょうか...

携帯からで見づらくて大変すいません...m(_ _)m

164デフォルトの名無しさん:2008/02/10(日) 23:02:13
165デフォルトの名無しさん:2008/02/10(日) 23:15:13
さすがに携帯にうpろだはきつくね?
166デフォルトの名無しさん:2008/02/10(日) 23:15:22
153です。

157番さんのおっしゃる通りにしたら、「output関数における呼び出し時のパ
ラメータが足りない」というエラーが出ました。157番さんの通りにプログラム
を設計するなら、mainの中でoutputなどの各種呼び出しをどのようにすれば良い
のか教えて下さい。プログラミングの基本である自学自習を心掛けていますが
この呼び出し関数の設計などはあまり得意な方でないのでどうかお願いします。
167123:2008/02/10(日) 23:15:37
>>141
ありがとうございます。実行してみたのですが生成される乱数が全て0になってしまいます。
srand関数を使って乱数の種を定めた時のプログラミング例を載せてみます。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6036.c 
どうかお願いします。
168デフォルトの名無しさん:2008/02/10(日) 23:35:33
>>166
お前どうやって>>153まで自分で出来たんだ?
得意じゃないってレベルじゃねーぞ
output(h1, m1, show1);
169デフォルトの名無しさん:2008/02/10(日) 23:37:49
誰かの回答だろ
170153:2008/02/10(日) 23:57:48
正直に言うと今までに扱った内容を参考にしながらでした。
それでも不足部分は沢山あるのでそれを補えるよう努力しなければと思い
ます。

ちなみにコンパイルできました。ありがとうございました。
171デフォルトの名無しさん:2008/02/11(月) 00:13:35
質問!

エラーがでたわけではないのですが、VC++2003.NETで
ビットマップ画像をインポートして追加しようとしたのですが、
実行するとその画像が表示されません!
実行の際には画像が切り替わっている様子がうかがえるのですが、表示されないのです。
新規作成で追加するとちゃんと表示されるのですが・・。

どなたか原因分かる方いますか?
172デフォルトの名無しさん:2008/02/11(月) 00:13:39
double→int→doubleとか意味不明なことしてるし、
設計を見直すべき。
173デフォルトの名無しさん:2008/02/11(月) 00:17:52
>>146です

すいません 荒らしてしまって...

携帯からなんで うp無理みたいです...

なんかいろいろほんとすいませんでしたm(_ _)m

174デフォルトの名無しさん:2008/02/11(月) 00:21:45
>>167
「10 動的に確保したメモリの解放」
これが抜けてる以外は問題なさそうだけど。

試しに実行してみたら、ちゃんと乱数生成されてるし。
175デフォルトの名無しさん:2008/02/11(月) 00:30:32
>>174
pc環境とか関係するんですかね?とりあえず学内pcにファイルを移して実行してみます。
本当にありがとうございました。
17650:2008/02/11(月) 00:30:47
>>65〜73、87の書込みをしてくださった方々
一番難しい課題Bを解いていただき、ありがとうございましたm(__)m
177デフォルトの名無しさん:2008/02/11(月) 00:51:27
[1] 授業単元:プログラミング
[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] その他の制限:特にありません
178デフォルトの名無しさん:2008/02/11(月) 01:48:02
>>173
うpろだが使えないとしても、>>1読んでテンプレくらいは使って欲しいところ
まぁ推奨になってるからどうしてもテンプレは使いたくないってのなら止めないけど
179デフォルトの名無しさん:2008/02/11(月) 11:21:06
>>144
>>145
>>146
携帯からの投稿自体 無理がありました すいませんでした...m(_ _)m

できれば解答をいただけると幸いです..

180デフォルトの名無しさん:2008/02/11(月) 14:34:02
[1] 授業単元:
[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] その他の制限:

先生が、ヒントで「フラグを使うとできるかも」といってました!

よろしくお願いします!
181デフォルトの名無しさん:2008/02/11(月) 14:54:09
>>180
#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;
}
182デフォルトの名無しさん:2008/02/11(月) 18:40:08
>>180
#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;
}
183デフォルトの名無しさん:2008/02/11(月) 18:57:58
>>181
>>182
ありがとうございます!
できれば入力に
cin.getlineとか使うくらいの初歩のでもやってほしいんですが..(><)
入力だけでいくと
#include<iostream.h>

main()
{
char a[50] ;

cout<<"a=" ;
cin.getline(a,50) ;
}

こんな感じで・・
サーセン(・_・、)
184デフォルトの名無しさん:2008/02/11(月) 19:38:23
>>180

#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;
    }
}
185デフォルトの名無しさん:2008/02/11(月) 19:41:23
>>183
それなら>>180
cin >> s;

char sz[50]; cin.getline(sz,50); s=sz;
にすればいいが、
初歩というのは、もしかしてstringを使うなと言ってる?
186デフォルトの名無しさん:2008/02/11(月) 19:46:40
>>184
>>185

ありがとうございます!!


stringをならってません(・_・、)
ごめんなさい↓
187デフォルトの名無しさん:2008/02/11(月) 20:00:14
>>186
#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;
}
188デフォルトの名無しさん:2008/02/11(月) 22:32:23
[1] 授業単元: プログラム テスト
[2] 問題文 http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6038.txt
[3] 環境
 [3.1] OS: WindowsXP
 [3.3] 言語:C言語
[4] 期限: できれば、早いとありがたいです。


よろしくお願いいたします。

189デフォルトの名無しさん:2008/02/11(月) 22:44:53
[1] 授業単元:プログラミング
[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日の昼まで
190デフォルトの名無しさん:2008/02/11(月) 22:46:32
>>188
アウエイ
(50)は解なし。強いてあげればイか。
191189:2008/02/11(月) 22:48:29
すいません
>>189には不備がありました

課題1には二つ問題があるのですが
一つtxtファイルが入ってません
それを書き直したものにしますので少々待っててください
192デフォルトの名無しさん:2008/02/11(月) 22:58:36
[1] 授業単元:プログラミング
[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日としていますが出来ればなるべく早くお願いします
193デフォルトの名無しさん:2008/02/11(月) 23:07:15
>>192
どれも最近見た気がするが、これって何処の課題なんだろ。
最後の二つは、ちょっと前に俺がうpしたから間違いない。
194デフォルトの名無しさん:2008/02/11(月) 23:15:21
>>193
本当ですか
よろしければその解答を頂けないでしょうか
195デフォルトの名無しさん:2008/02/11(月) 23:18:41
>>194
ちょっと前にうpしたって言ってるじゃん。
ホントに欲しけりゃ、スレから探して持っていけばいいさ。
196デフォルトの名無しさん:2008/02/11(月) 23:30:16
>>195
ありがとうございます
4と5は解決しました
197デフォルトの名無しさん:2008/02/11(月) 23:36:55
アイムジャグラーちっとも勝てません。なぜでしょうか?
ttp://www.borujoa.org/upload/source/upload16700.lzh
↓参考ページ。
ttp://www.htv-net.ne.jp/~dark/suro%20aimu%20jagura-.html
198デフォルトの名無しさん:2008/02/11(月) 23:37:55
>>190さん
ありがとうございます。

まぁ結果的に2級は落ちましたが..

少しは勉強になったのでよかったです

皆さん いろいろ迷惑をかけましたがありがとうございましたm(_ _)m

199デフォルトの名無しさん:2008/02/11(月) 23:40:13
試験の問題だったのか。
この程度だと、あんまり取る意味なさそうな気も。
200デフォルトの名無しさん:2008/02/12(火) 00:09:02
>>199さん

確かにそうですよね..
C2級も取れないレベルなんて 俺ってなんなんだろう...

やっぱりバカなんだなぁ つくづく思います。
201デフォルトの名無しさん:2008/02/12(火) 00:40:36
【質問テンプレ】 通りに書き込まなきゃいけないと思うんですが
眠くてやばいんで誰か解き方のだけ速攻教えてください。

C言語で123の数値を合計して6とするにはどうすればいいんでしょうか?

202デフォルトの名無しさん:2008/02/12(火) 00:43:29
>>201
int sum=1+2+3;でおk
203デフォルトの名無しさん:2008/02/12(火) 00:46:27
204デフォルトの名無しさん:2008/02/12(火) 00:48:33
>>202
ありがとうございます。

その数値が入力されたものの場合はどうすればいいんでしょうか><
205199:2008/02/12(火) 00:48:33
>>200
いやいや、この程度とは言ったけど、
これを全く勉強せずに解ける人なんて居ないよ。

資格としての意味は薄いにしても、
1つの通過点にするのはいいんじゃないかな。
目標があると励みやすいし。

でさ、本当に2級を取得するだけの力をつけたいんだったら、
このスレで解答を求めたりするんじゃなくて、
自分で試行錯誤して辿り着く方が為になると思うんだけどな。


スレ違いなんでこの辺で。
206デフォルトの名無しさん:2008/02/12(火) 00:51:42
>>204
int sum = val / 100 + (val / 10) % 10 + val % 10;
207デフォルトの名無しさん:2008/02/12(火) 00:52:05
入力された文字列をatoiで変換→数値を合計みたいな問題でやり方がわからないんでヒントもらいたいです。

説明不足でほんとすみません。
208207:2008/02/12(火) 00:54:18
>>206

ありがとうございます。
209デフォルトの名無しさん:2008/02/12(火) 00:54:19
情報を小出しにするな。
210デフォルトの名無しさん:2008/02/12(火) 00:54:39
>>207
説明不足だと思うならちょっとくらい眠くてもテンプレに従えよ
211デフォルトの名無しさん:2008/02/12(火) 00:54:57
>>207
int sum = (str[0] - '0') + (str[1] - '0') + (str[2] - '0');
212207:2008/02/12(火) 00:55:23
>>206

ありがとうございます。
213デフォルトの名無しさん:2008/02/12(火) 01:00:18
!!!!>211さん 眠気がとびました!
そっか atoiを絶対使うと思い込んでいたからできなかったのか><

'0'から引けば結果は数値と同じっすもんね・・・
本当にありがとうございました。
214デフォルトの名無しさん:2008/02/12(火) 01:02:05
>>201 >>207
#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;
}
多分こういうことがやりたいんだろうと思って答えてみる
間違っててもそれは質問の仕方が悪いと思う
215デフォルトの名無しさん:2008/02/12(火) 01:09:38
150ですがどなたかお願いします・・・
216デフォルトの名無しさん:2008/02/12(火) 01:16:23
>>161-162
ありがとうございます。助かりました。
217デフォルトの名無しさん:2008/02/12(火) 03:07:47
>>150
どう表示したらいいか不明なので適当にやった
最小のものが見つかった時点で逐次表示

#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;
}
218デフォルトの名無しさん:2008/02/12(火) 15:32:39
>>192
課題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;
}
219デフォルトの名無しさん:2008/02/12(火) 15:38:30
>>192
課題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;
}
220193:2008/02/12(火) 16:59:52
221デフォルトの名無しさん:2008/02/12(火) 20:27:04
>>218
>>219
>>220
皆さんありがとうございます
これでなんとかなりそうです><
222デフォルトの名無しさん:2008/02/12(火) 21:21:05
先ほど質問スレで質問したのですが場違いだったようなので
こちらで質問したいと思います。

お時間がある方、ご協力いただけると幸いです。

先週からC言語について学び始めた高1です。
明日からプログラミングが学校の授業ではじまり
予習していたのですが、何度やっても思い通りの結果を表示できません

本当に基礎的な問題かも知れませんが、アドバイス、正答などいただけると幸いです。

1.5個の整数データを配列に代入し合計と平均を求めるプログラムをつくれ。
2.問1のデータの最大値を求めるプログラムをつくれ。
3.問1のデータを大きい順に並べ替えるプログラムをつくれ。

本当に程度の低い質問かもしれませんが
悩んでます><よろしくおねがいします。
223デフォルトの名無しさん:2008/02/12(火) 21:24:37
>>1
224デフォルトの名無しさん:2008/02/12(火) 22:06:18
>>222

#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は自分で考えましょう。
225デフォルトの名無しさん:2008/02/12(火) 22:27:32
[1] 画像処理
[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);
} } }
226デフォルトの名無しさん:2008/02/12(火) 22:44:17
C++/CLI ?
227デフォルトの名無しさん:2008/02/12(火) 23:12:51
C#?
228デフォルトの名無しさん:2008/02/12(火) 23:21:25
.net
229デフォルトの名無しさん:2008/02/13(水) 01:36:59
>>217
ありがとうございました。
230デフォルトの名無しさん:2008/02/13(水) 10:19:22
[1] 授業単元:プログラミング
[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] その他の制限:
期限間近ではありますが、よろしくお願いいたします
231デフォルトの名無しさん:2008/02/13(水) 10:44:46
[1] 授業単元:プログラミング
[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まで
その他の制限: 特になし
丸投げです。よろしくお願いします。
232デフォルトの名無しさん:2008/02/13(水) 13:50:42
233デフォルトの名無しさん:2008/02/13(水) 14:43:34
ひどいな
234デフォルトの名無しさん:2008/02/13(水) 14:47:34
ひどすぎるな
235デフォルトの名無しさん:2008/02/13(水) 14:54:57
>while(!feof(fp)){
> fscanf(fp, "%d", &temp);
> data[temp]++;
> }

>while(count <= 100)
236デフォルトの名無しさん:2008/02/13(水) 15:02:22
晒しage
237デフォルトの名無しさん:2008/02/13(水) 15:30:21
238デフォルトの名無しさん:2008/02/13(水) 16:19:12
239デフォルトの名無しさん:2008/02/13(水) 20:12:05

チョンのあやかり創価学会

偽善者が政治活動、公明党

ニセ仏教、騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや

カルトキチガイ・創価騙されバカ信者

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党
240デフォルトの名無しさん:2008/02/13(水) 20:44:17
>>232
>>238
期限間近のものを本当にありがとうございました。
241デフォルトの名無しさん:2008/02/13(水) 20:48:28
>>232は荒らしだから礼は言わなくてよし。
242デフォルトの名無しさん:2008/02/13(水) 21:01:17
>>241
今、実行できる環境がないのですが>>232はなぜ荒らしなのでしょうか。
243デフォルトの名無しさん:2008/02/13(水) 21:08:23
表面上問題文で要求された結果は返すけど、
拡張性が無く再利用できないアルゴリズム。
fclose()してない。
こんなの宿題で提出されたら俺なら赤点つける。
244デフォルトの名無しさん:2008/02/13(水) 21:14:18
>>243
荒らしのプログラムにも気付けない自分が情けないです…
詳しい説明ありがとうございました。
245デフォルトの名無しさん:2008/02/13(水) 22:04:07
宿題丸投げしてる時点で情けないけどな
246デフォルトの名無しさん:2008/02/13(水) 22:20:41
>>243
>>232読んでみたがこれで十分だろ
題意は満たしてるし、時間・空間計算量も小さくなるように組まれてるしな
拡張性について指定がない以上、こういうのも一つの解としてありだろ
247デフォルトの名無しさん:2008/02/13(水) 22:28:18
学生の宿題なんだからむしろ質素な方がいいと思うのですが
>>243さんは一体何のつもりなんでしょうか(苦笑
248デフォルトの名無しさん:2008/02/13(水) 22:36:48
ここはIDが出ないから自演が楽でいいなw
249デフォルトの名無しさん:2008/02/13(水) 22:42:48
>>246
題意満たしてるか?
250デフォルトの名無しさん:2008/02/13(水) 22:42:52
自演以外でいちいち擁護する奴なんていないしなw
251デフォルトの名無しさん:2008/02/13(水) 22:43:53
>>249
何か条件抜けてるか?
252デフォルトの名無しさん:2008/02/13(水) 22:48:30
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \   
     |┃     |    (__人__)     |     俺なら赤点つける
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \

253デフォルトの名無しさん:2008/02/13(水) 22:48:33
254デフォルトの名無しさん:2008/02/13(水) 22:54:02
>>251
合格者がちょうど100人の時にカウントがずれる。
<にすべき比較を<=にしてるという初心者のようなミス。
fclose()していない。

仮にあれが荒らしじゃないとすれば、無能であるという自覚の無い初心者。
ある意味荒らしよりたちに負えない。
255デフォルトの名無しさん:2008/02/13(水) 22:55:30
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \   表面上問題文で要求された結果は返すけど、
     |┃     |    (__人__)     |     拡張性が無く再利用できないアルゴリズム。
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
256デフォルトの名無しさん:2008/02/13(水) 22:57:38
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \   題意は満たしてるし、時間・空間計算量も小さくなるように組まれてるしな
拡張性について指定がない以上、こういうのも一つの解としてありだろ
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
257デフォルトの名無しさん:2008/02/13(水) 22:59:46
     |┃三        / ̄\
     |┃         |     | ←これなに?
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \ 
     |┃     |    (__人__)     | 
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
258デフォルトの名無しさん:2008/02/13(水) 22:59:47
>>232はダメだろ。
211回数えてるぞ。
259デフォルトの名無しさん:2008/02/13(水) 23:03:02
最近オプーナAAをよく見かけるな
260デフォルトの名無しさん:2008/02/13(水) 23:03:27
データ210個あるって言ってるのに配列101個分しか用意してないし。
何したいのかわからん。
261デフォルトの名無しさん:2008/02/13(水) 23:04:31
受験生全員が100位タイ以内に収まる場合にずっこける希ガス
262デフォルトの名無しさん:2008/02/13(水) 23:05:02
穴だらけじゃんwwwwwwwwwww
263デフォルトの名無しさん:2008/02/13(水) 23:06:28
>>260
それはお前がバカ
264デフォルトの名無しさん:2008/02/13(水) 23:06:59
>>260
それは点数による度数分布だからおk
0〜100以外の点数が来たらNGだが
265デフォルトの名無しさん:2008/02/13(水) 23:07:17
feofでend-of-fileの判定。
266デフォルトの名無しさん:2008/02/13(水) 23:13:22
まとめ
>>232
・今回与えられたデータではたまたま正常に動く
・不正なデータ(100点を超えたりマイナスだったり)に対する備えが無い
・偏ったデータ(全員が100点とか)で無限ループ
・100位以内が丁度100人の時に計算がずれる
・ファイルから点数を直接読み出してないから拡張性が無い
・↑のデータを利用して他の関数を書いてるから再利用できない
・fclose()してない

>>238
・パーフェクト

>>230は好きな方選んで提出したらいいんじゃね?
自力で組めなかったんだし粗悪なプログラムで赤点補習した方が将来のためかもしれないしね。
267デフォルトの名無しさん:2008/02/13(水) 23:14:52
>>266
バカがまとめんなよw
>>232で出る答えは間違ってるし、全員100点でも無限ループなんてしない。
268デフォルトの名無しさん:2008/02/13(水) 23:21:10
>>266
>>238も人数が210人未満のときに間違える。
269デフォルトの名無しさん:2008/02/13(水) 23:22:04
>>232の実行結果
合格者数:105人
合格者平均点:77.7723810点

>>238の実行結果
Success:104
Average:77
270デフォルトの名無しさん:2008/02/13(水) 23:33:34
どうして>>232の答えは間違うんでしょうか?
271デフォルトの名無しさん:2008/02/13(水) 23:34:26
>>270
プログラムが間違ってるからだね。
272デフォルトの名無しさん:2008/02/13(水) 23:37:40
>>270
ループ終了条件をfeofで判定してるため、最後の数を二重に数えてるから。
273デフォルトの名無しさん:2008/02/13(水) 23:37:52
烏賊じゃないんだ
274デフォルトの名無しさん:2008/02/13(水) 23:40:35
まあ>>238のプログラムも入力部分を関数化しろって条件満たしてないんだけどな。
275デフォルトの名無しさん:2008/02/13(水) 23:50:30
>>237
ありがとうございますm(_ _)m
276デフォルトの名無しさん:2008/02/13(水) 23:56:49
>>272
ありがとうございます。

while(!feof(fp))
{
fscanf(fp, "%d", &temp);
data[temp]++;
}



while(fscanf(fp, "%d", &temp) != EOF)
{
data[temp]++;
}

みたいにしたらいいのかな。
277デフォルトの名無しさん:2008/02/13(水) 23:58:10
そうだね
278デフォルトの名無しさん:2008/02/14(木) 00:10:08
[1] 授業単元:プログラミング
[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] その他の制限:特にないです
279デフォルトの名無しさん:2008/02/14(木) 00:14:35

チョンのあやかり創価学会

偽善者が政治活動、公明党

ニセ仏教、騙されバカ信者、池田犬作チョン大教祖様、さっさと死ねや

カルトキチガイ・創価騙されバカ信者

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党

カルト・キチガイ・偽善政治活動・公明党
280デフォルトの名無しさん:2008/02/14(木) 00:18:58
条件なのにできるってなんかおかしくね?
281デフォルトの名無しさん:2008/02/14(木) 00:40:44
>>276
fscanfを使うなら、
while (fscanf(...) == 1)
とするべき。
282デフォルトの名無しさん:2008/02/14(木) 00:50:47
>>278
「double max(double a,double b)関数をとり、引数aとbの大きいほうを返す関数」は、
double max_caller(double (*f)(double, double), double a, double b){
return (*f)(a, b);
}
でよろしいか?
283デフォルトの名無しさん:2008/02/14(木) 07:06:31
>282
いいですよ。
284デフォルトの名無しさん:2008/02/14(木) 09:53:12
>>281
なるほど、それだと読み込みエラーとかでもループを抜けられるんですね。
勉強になりました。ありがとうございました。
285デフォルトの名無しさん:2008/02/14(木) 11:39:45
>>278
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6051.txt
チェックあまりしてない。甘いところはご愛嬌。
286デフォルトの名無しさん:2008/02/14(木) 12:09:39
>>278
問題2
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6052.txt
これもチェックあまりしてない。甘いところはご愛嬌。
287デフォルトの名無しさん:2008/02/14(木) 18:04:30
「nステップによるある一回の酔歩における、格子点上の経路を画面に表示するプログラムを作成せよ。」
って課題が出たんですけど、誰か教えてください。
288デフォルトの名無しさん:2008/02/14(木) 18:19:45
>>287
>>1からやり直し
289デフォルトの名無しさん: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] その他の制限:なし
290デフォルトの名無しさん:2008/02/15(金) 14:45:36
急ですみませんが、(1)だけでもいいので、出来る方いらっしゃいましたらよろしくお願いします。

[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] その他の制限:
291デフォルトの名無しさん:2008/02/15(金) 15:11:20
>>290
(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
一口に酔歩って言っても定義はいくつもあるんだけど、
何の前提条件も無しでその問題文がだされたわけ?
292デフォルトの名無しさん:2008/02/15(金) 17:34:59
>>291
えっとその前の課題が「二次元格子上での酔歩における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における一様乱数を発生させる。
と書いてあって、その下に上記の課題が書いてあります。
293デフォルトの名無しさん:2008/02/15(金) 20:05:59
[1] 授業単元:プログラミング
[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] その他の制限:考察も書かないといけないので
         注訳等も入れてもらえると幸いです。
         また期限はギリギリの期限ですので出来るだけ
早く対応していただけると非常に助かります。
294デフォルトの名無しさん:2008/02/15(金) 21:59:30
>>293
元のプログラムがてんでダメダメだな。
295デフォルトの名無しさん:2008/02/15(金) 22:13:23
>>294
あれ、引用のコピペ失敗したかな(´・ω・`)、自分で動かした分には元のプログラムは動いたんだけど
296293 ◆klsLRI0upQ :2008/02/15(金) 22:19:36
>>294
サンプルプログラムの原文HTML化したものはありますけど
そちらをうpった方がいいでしょうか?
297デフォルトの名無しさん:2008/02/15(金) 22:26:43
>>295
67行目に変な文字が入ってるけど、ダメってのはそういう意味じゃない。
元のプログラムの作り自体にセンスが感じられないってこと。
298293 ◆klsLRI0upQ :2008/02/15(金) 22:28:41
>>297
なるほど、そういう事ですか><
299デフォルトの名無しさん:2008/02/16(土) 07:24:05
300デフォルトの名無しさん:2008/02/16(土) 10:45:37
>299
ありがとうございます
301_:2008/02/17(日) 08:34:24
     |┃三        / ̄\
     |┃         |     |
     |┃          \_/
 ガラッ. |┃            |        
     |┃  ノ//   ./ ̄ ̄ ̄ \       
     |┃三    /  ::\:::/:::: \     
     |┃     /  <●>::::::<●>  \ 
     |┃     |    (__人__)     | 
     |┃三   \    ` ⌒´    /      
     |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
302デフォルトの名無しさん:2008/02/17(日) 11:03:44
                三 |┃┃
            三    |┃┃
                  |┃┃
             ∧∧ ..|┃┃
          三 (  ;). |┃┃ピシャッ!
            /   ⊃.|┃┃
303_:2008/02/17(日) 11:52:13
      .. |┃三    ..   / ̄\
     ..  |┃        |     |
      .. |┃     ..    \_/
   ガラッ.. |┃           ..|        
     三 |┃            |    
  三    |┃  ノ//   ./ ̄ ̄ ̄ \
        |┃三    /  ::\:::/:::: \   
   ∧∧ ..|┃     /  <●>::::::<●>  \ 
三 (  ;). |┃     |    (__人__)     | 
  /   ⊃.|┃三   \    ` ⌒´    / 
 シュー    |┃三   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ \
304_:2008/02/17(日) 11:52:33
                三 |┃┃
            三    |┃┃
                  |┃┃
             ∧∧ ..|┃┃
          三 (  ;). |┃┃ピシャッ!
            /   ⊃.|┃┃
305デフォルトの名無しさん: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;
}
306デフォルトの名無しさん:2008/02/17(日) 15:57:43
//書き込み処理
fstream("ファイル", ios::out) << ob.input();
//書き込み処理終了
307デフォルトの名無しさん:2008/02/17(日) 16:06:25
>>306
ofstream使えよ。
308デフォルトの名無しさん:2008/02/17(日) 17:48:53
[1] 授業単元: Cプログラミング
[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言語のシグナルの送信に関するものです。
よろしくお願いします。
309デフォルトの名無しさん:2008/02/17(日) 18:10:27
シグナルハンドラとしてSIG_IGNを使う。
あと、シグナルハンドラの中では、非同期シグナルセーフな関数以外は呼び出さない方がいい。
310デフォルトの名無しさん:2008/02/17(日) 21:55:38
[1] 授業単元:C言語II
[2] 問題文(含コード&リンク)
  シェルを実装していますが、分からないのは入出力リダイレクションの処理です。
  たとえばプロンプトから

  $ cat 123 > textout

  と、入力して 引数の'>'(もしくは'<') で入出力を切り替える処理を考えています。
  どうすればいいのでしょうか?
[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc 3.4.4
 [3.3] 言語:C
[4] 期限: 2008年2月29日
311デフォルトの名無しさん:2008/02/18(月) 00:26:19
>>308
とりあえずsignal.hなるものの存在を初めて知った

で、<unistd.h>は「unix standard」。
ここまで来ると、Windowsの人間はまるでついていけない……
312デフォルトの名無しさん:2008/02/18(月) 02:30:54
>>308 [kill-main.c]
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>

pid_t pid;
void ctrlc(void){
kill(pid,SIGUSR1);
}

int main(){
unsigned int c;
if((pid = fork()) == 0){
execl("kill-child","kill-child",(char *)0);
perror("execl");
exit(EXIT_FAILURE);
}
if(signal(SIGINT,(void*)ctrlc) == SIG_ERR){
perror("sigint");
exit(EXIT_FAILURE);
}
do{
printf("Send signal?(C-c/n)\n");
while((c=getchar()) != EOF)
if(c != '\n')
break;
if(c == 'n')
exit(0);
}while(c != EOF);
}
313デフォルトの名無しさん:2008/02/18(月) 02:32:35
>>308 [kill-child.c]
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void siguser(void){
static int n = 0;
printf("Signal received %d times\n",++n);
if(n == 10)
exit(EXIT_SUCCESS);
}

int main(){
signal(SIGINT,SIG_IGN);
if(signal(SIGUSR1,(void *)siguser) == SIG_ERR){
perror("signal");
exit(EXIT_FAILURE);
}
for(;;){}
}

子まで書き換えないとならないのがミソだな
314デフォルトの名無しさん:2008/02/18(月) 04:08:11
>>312-313
御回答ありがとうございます。
SIG_IGNを使いシグナルを無視させることで無効化するんですね。
勉強になりました!ありがとうございます。
315デフォルトの名無しさん:2008/02/18(月) 14:14:22
[1] 授業単元:Cプログラミング
[2] 問題文(含コード&リンク):Cシェルを作成しなさい。
[3] 環境
[3.1] OS: Linux
[3.2] コンパイラ名とバージョン: gcc
[3.3] 言語: C
[4] 期限:2008年2月19日まで
[5] その他の制限: なし

C言語でシェルを作っているのですが、
>310さんと同じく'>'の入力リダイレクションの処理が分からないです。
自力で途中までは書いているのですが、キー入力の分割処理が上手く行きません。
void parseitファンクション内の処理がおかしいと思われます。

助けて頂けると幸いです。

ソースファイル↓
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6060.c
316デフォルトの名無しさん:2008/02/18(月) 16:43:12
誰か292頼みます
317デフォルトの名無しさん:2008/02/18(月) 18:15:57
>>316
問題が理解できないのでどうしようもない

まずnステップっていうのがわからない
そもそも、1ステップでどういう動きをするんだ?
ランダムで X 方向 or Y 方向に 1つ動くっていうのか、
それとも、X 方向にランダムでいくつ、Y方向にランダムでいくつって言う風に動くのか

あと表示のしかたも、各ステップ毎のX,Yの値をただ単に並べればいいのか、
図で見せるのかわからない
318デフォルトの名無しさん:2008/02/18(月) 22:56:21
>>315
void parseit 内で、
*params++ = command;
の後のパラメータ分文字を読み飛ばす処理内で、">"の処理をしているのが不味い

a.out > aaa
   ↑
ここでパラメータ分文字を読み飛ばす処理は終了するので、次のパラメータを探す処理に
移ると、次のパラメータは、">"になる

">" の処理もそのままだと、 ファイル名の前後に空白文字が入る可能性がある(問題ないのかもしれないけど)

あと、void parseit 関数の終わりの*params = '\0'; は、 *params = NULL; じゃね
319デフォルトの名無しさん:2008/02/19(火) 00:16:23
>>318
なるほど、そう言うのが原因なんですね。
確かにテストをすると空白らしくものがファイル名と'>'の前(おそらく)に入ってると思われます
となると、やはり新しいファンクションを増やした方がてっとり早いのでしょうか?
320デフォルトの名無しさん:2008/02/19(火) 00:59:51
>>319
横レスになるけど.
先に ">"の前後で文字列を切り分けてからコマンド部分をあらためて切り分ける方法もあるんじゃないかな。

標準関数を使っていいのなら切り分けはこんな感じ↓

char redirect[20]; // リダイレクト先
_Bool test_parse( char *command, char **param )
{
   _Bool ret = false;
   char cmd[256]; // コマンド部
   int result;
   // >の前後で文字列を切り分け
   result = sscanf( command, "%255[^>]%*[>]%19s", cmd, redirect );
   if( result > 1 ) {
      ret = true;
   }
   getToken( cmd, param ); // ここでコマンド部をパラメータと切り分ける関数を別に作って呼ぶ
   return ret;
}

こうするとローカル変数cmdとredirectにそれぞれ>の前後で切り分けた文字が入るはず。
ついでにretで1以外が入っていた場合はredirectにも代入があったことになるからフラグでそれを知らせてます。
321デフォルトの名無しさん:2008/02/19(火) 03:51:32
>>320
レス感謝です。
getTokenでparseitと同様の処理をさせれば良いのでしょうか?
322デフォルトの名無しさん:2008/02/19(火) 06:43:13
>>321
4時か、がんばってるねぇ…

とっくに寝てそうだけど、getTokenでparseitのparamsに入れていく部分の処理を入れればいいと思う。
元のソース見る限りだとredirectは特に同じことをしてなさそうに見えるから。
323デフォルトの名無しさん:2008/02/19(火) 06:54:35
試しに>>320の教えてくれたsscanfを使ってみたのですが、
未だに空白が付いて正しい結果を出しません。
もしかしたらメイン内でやったのがいけなかったのかもしれません。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6062.c
324デフォルトの名無しさん:2008/02/19(火) 07:09:34
あー

空白がつくのって
"a.out params > text.txt"
みたいなときに " text.txt"がredirectにはいるってこと?

VC++でコンパイルしたからGCCでは挙動違うのかな?

sscanfの処理を
sscanf( command, "%255[^>]%*[> \t]%19s", cmd, redirect );
って修正してもだめ?
325デフォルトの名無しさん:2008/02/19(火) 07:13:47
すみません>>322の通りにやると文字化けが生じてしまいます。
もしこれが解決出来れば、test_parseファンクションを使えると思うのですが…。
何か解決方法があったら教えてください。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6064.c
326デフォルトの名無しさん:2008/02/19(火) 10:37:19
無事に解決できました。
どうやら問題やはcmdの最後の部分に空白があったため、問題が起きていたようです。
なので、最後尾にNULLを追加したらリダイレクションが正常に完了しました。
>>318 >>320 >>322 >>324助言ありがとうございました。
327デフォルトの名無しさん:2008/02/19(火) 10:39:06
>>316
適当解釈。

#include <stdio.h>
#include <stdlib.h>
#define N 10

void suiho(int *x, int *y)
{
int r=rand()%4;
*x+=((r/2)*2-1)*(r%2);
*y+=((r/2)*2-1)*(!(r%2));
printf("(%d,%d)\n",*x,*y);
}

int main(void)
{
int i,x=0,y=0;
srand(time(NULL));
for(i=0;i<N;i++)suiho(&x,&y);
return 0;
}
328デフォルトの名無しさん:2008/02/19(火) 20:29:30
>>327
面白い解釈だ

神龍:どんな問題でも一つだけ聞き流してやろう
ってのが思い浮かんだ
329デフォルトの名無しさん:2008/02/19(火) 21:26:31
誰か終わってないリストチョーライ。
330デフォルトの名無しさん:2008/02/19(火) 22:00:26
[1] 授業単元: C言語
[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] その他の制限: 問題文にそって作る

お手数おかけしますが、よろしくお願いします。
331デフォルトの名無しさん:2008/02/19(火) 22:27:31
因数因数って引数だろ、「ひきすう」で変換すればちゃんと出てくるのに・・・
ってもやもやしながら読んでたらばおで噴いたwwwwwww
332デフォルトの名無しさん:2008/02/19(火) 22:37:55
構造体変数名がlist_tっていうのが違和感あるんだが,これって変数が
list_tって名前なんだよな?

xxx_tって普通,型名につける方法じゃないっけ?
333デフォルトの名無しさん:2008/02/19(火) 23:18:56
ば、ばお・・・ごめんなさいorz

>>332
問題文を確認したら構造体変数名はlist_tとありました。
これが誤っているとすると

typedef struct list{

} list_t;

って感じですかね?
334デフォルトの名無しさん:2008/02/20(水) 00:13:00
typedef struct list_t{}list;だろ
_tは普通使わないと思うけど
335デフォルトの名無しさん:2008/02/20(水) 00:15:26
>>334
へぇ 普通はそうなのか
普通って難しいな
336デフォルトの名無しさん:2008/02/20(水) 00:27:17
[1] 授業単元: プログラミング
[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] その他の制限: 
よろしくお願いします。
337デフォルトの名無しさん:2008/02/20(水) 01:03:12
[1] 情報セキュリティ
[2] 問題文(含コード&リンク):
C言語プログラムのファイルを読み込んで、バッファオーバーラン
の危険性を検出(修正)するサポートツール。
[3] 環境
 [3.1]Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限: 2月21
[5] その他の制限: なし
338デフォルトの名無しさん:2008/02/20(水) 01:07:57
さらっと書いてるけど>>337は相当むずかしくないか?
339デフォルトの名無しさん:2008/02/20(水) 01:11:45
gets()が検出できればおkだったりしてな
340デフォルトの名無しさん:2008/02/20(水) 01:16:50
つ lint
341337:2008/02/20(水) 01:25:54
* get * sprintf * strcat * strcpy * vsprintf
が検出できれば OKです
342デフォルトの名無しさん:2008/02/20(水) 01:28:57
先に書けよ
343337:2008/02/20(水) 01:33:14
すみません。
344デフォルトの名無しさん:2008/02/20(水) 04:14:35
・getってなんだよ。
・scanfはスルーかよ。
345デフォルトの名無しさん:2008/02/20(水) 04:23:51
>>337
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFMAX 1024

int main(int argc, char *argv[]) {

FILE *fp;
char buf[BUFMAX];
int line = 0;
if (argc < 2 || (fp = fopen(argv[1], "r")) == NULL) {
printf("Usage: a.out [assemble code file]\n");
exit(0);
}

while (fgets(buf, BUFMAX, fp)) {
++line;
if (!strcmp(buf, "\tcall\tscanf\n") ||
!strcmp(buf, "\tcall\tgets\n") ||
!strcmp(buf, "\tcall\tsprintf\n") ||
!strcmp(buf, "\tcall\tstrcat\n") ||
!strcmp(buf, "\tcall\tstrcpy\n") ||
!strcmp(buf, "\tcall\tvsprintf\n")) {
printf("find at line%d: %s", line, buf);
}
}

fclose(fp);
return 0;
}
こんな感じでいいのかな。アセンブリコードに対して検索した方が楽だよな。
346デフォルトの名無しさん:2008/02/20(水) 04:35:42
>>345
その発想はなかったわw
347337:2008/02/20(水) 07:49:57
ありがとうございます
348デフォルトの名無しさん:2008/02/20(水) 11:53:11
>>330
1問目
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6068.txt

構造体変数名はlist_tとする意図が汲み取れないが、それは無視して作った。
構造体のtypedefした名前をlist_tとするの間違いじゃなかろうか・・・
349デフォルトの名無しさん:2008/02/20(水) 12:13:13
>>330
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6069.txt

問題をそのまま書いた方が良いと思うよ・・・
350デフォルトの名無しさん:2008/02/20(水) 19:57:42
>>336
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6070.txt
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6071.txt
一応作ってみた
考え方が良く分からんから、まぁたぶん大丈夫だろう的なレベル
351デフォルトの名無しさん:2008/02/20(水) 20:47:15
>>348-349
ありがとうございます。
352デフォルトの名無しさん:2008/02/20(水) 21:23:03
>>350
ありがとうございます
353デフォルトの名無しさん:2008/02/22(金) 00:51:17
[1] 授業単元: プログラミング実習
[2] 問題文(含コード&リンク):

・リスト構造
アルファベットの文字列をいくつか読み込み、それを、アルファベット順にソートし、以下のコマンドが入力された場合、それぞれの命令を実行せよ。
条件として、リスト構造が使われていること、サブ関数の呼び出し(単純なものでもよい)が使われていること、malloc関数が使われていること。

p :入力された文字列を表示する。
a :指定された文字列をリストに追加する。(アルファベット順に並ぶように)
d :指定された文字列をリストに削除する。(不要になった記憶領域はfree()を使って開放すること。また、指定された文字列がリストに無い場合は、その旨を表示。)
q :プログラムを終了する。
? :使用可能なコマンドの一覧を表示する。
end:データ入力の終了

[3] 環境
 [3.1] OS:Linux
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C
[4] 期限:2月26日まで
[5] その他の制限:

こんな感じです。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6072.txt
できればなるべく簡単な方法でお願いします。
354353:2008/02/22(金) 00:54:56
ごめんなさい、訂正です。
× d :指定された文字列をリストに削除する。
○ d :指定された文字列をリストから削除する。
355デフォルトの名無しさん:2008/02/22(金) 02:55:06
>>353
BUFSIZE文字以上の入力があった場合に異常動作を起こす他、色々と問題・手抜きは抱えてるが少なくともその実行例は通る
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6073.c
356353:2008/02/22(金) 03:24:27
>>355
ありがとうございます。
しかし、まんまコピペでコンパイルが通りませんでした…
そしてNode型とかようわからん件…ごめんなさい低級で
とりあえず自分なりにいじってみます。ダメだったらまたくるかも。

357デフォルトの名無しさん:2008/02/22(金) 03:27:56
>>356
あぁ、VC++2008でコンパイルしたから気付かんかったけど
C99形式のコメント(//〜)を使ってるからそれかもしれん
その部分を全部消してみてくれ
358353:2008/02/22(金) 03:50:47
>>357
消してみましたが、やはり同じようです。
とりあえずvistaですが、bccでまんまコピペでコンパイルしてみた結果、以下が表示されました。

list.c:
警告 W8060 list.c 24: おそらく不正な代入(関数 insert )
警告 W8060 list.c 24: おそらく不正な代入(関数 insert )
警告 W8060 list.c 32: おそらく不正な代入(関数 insert )
警告 W8060 list.c 32: おそらく不正な代入(関数 insert )
警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode )
警告 W8060 list.c 56: おそらく不正な代入(関数 deleteNode )
エラー E2468 list.c 100: void 型の値は許されない(関数 appendProc )
警告 W8019 list.c 100: コードは効果を持たない(関数 appendProc )
エラー E2468 list.c 114: void 型の値は許されない(関数 deleteProc )
警告 W8019 list.c 114: コードは効果を持たない(関数 deleteProc )
エラー E2468 list.c 136: void 型の値は許されない(関数 main )
警告 W8019 list.c 136: コードは効果を持たない(関数 main )
*** 3 errors in Compile ***
359デフォルトの名無しさん:2008/02/22(金) 04:01:06
>>358
コメントを消した状態ならこっちではANSI C準拠の設定でgcc通る(警告は出る)以上分かりかねる
bcc捨ててくれとしか言い様がない

使用したgccは以下
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
360デフォルトの名無しさん:2008/02/22(金) 04:21:12
これはbccのバグっぽい
361デフォルトの名無しさん:2008/02/22(金) 04:24:08
多分三項演算子とfgetsの合わせ技でエラーになってんだろうな
bccだとvoid fgetsで定義されてるとかか?
362デフォルトの名無しさん:2008/02/22(金) 04:26:26
[1] 授業単元: 基礎プログラミング
[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文使いまくりでもいいので、簡単なプログラムにしていただけると助かります。
363デフォルトの名無しさん:2008/02/22(金) 04:37:40
>fgets(buf, BUFSIZE, stdin) ? 0 : exit(1);
364デフォルトの名無しさん:2008/02/22(金) 04:39:46
>>358
fgets(buf, BUFSIZE, stdin) ? (void)0 : exit(1);
これで回避できるみたいだが、よくわからんな。
bccの3項演算子の扱いが謎。
365デフォルトの名無しさん:2008/02/22(金) 04:46:17
voidとそうじゃないものを並べちゃいけないみたいだね。
void同士ならOKらしい。
366デフォルトの名無しさん:2008/02/22(金) 05:53:24
>>362
とりあえず適当
(1)
#include<stdio.h>
void num2roma(int num,const char roma[]){
    const int mod  = num % 10;
    const int div  = num / 10;
    const int mod5 = num %  5;
    int i;
    if(div)num2roma(div,roma+2);
    if(mod5==4){
        putchar(roma[0]);
        putchar(roma[mod/4]);
    }else{
        if(mod5!=mod)
            putchar(roma[1]);
        for(i=0;i<mod5;++i)
            putchar(roma[0]);
    }
}
int main(void){
    int num;
    while(scanf("%d",&num)==1){
        num2roma(num,"IVXLCDM");
        putchar('\n');
    }
    return 0;
}
367デフォルトの名無しさん:2008/02/22(金) 05:54:59
(2)
#include<stdio.h>
int main(void){
    int count[100];
    int i,j,h;
    for(i=0;i<100;++i){
        count[i] = 0;
    }
    for(i=0;i<30;++i){
        if(scanf("%d",&h) != 1){
            break;
        }
        ++count[h/5];
    }
    for(i=0;i<100;++i){
        if(count[i] != 0){
            printf("%d...%d%8d : ",i*5,i*5+5,count[i]);
            for(j=0;j<count[i];++j){
                putchar('*');
            }
            putchar('\n');
        }
    }
    return 0;
}
368デフォルトの名無しさん:2008/02/22(金) 18:01:06
>>362
>>366 はでかいミスがあった それは忘れてこっちを使ってくれ

(2) 3999までの正整数をローマ数字にする int2roman.cpp
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6075.txt
369デフォルトの名無しさん:2008/02/22(金) 19:32:04
ここのスレはソースをはってどこがおかしいか
おしえてくれるスレですか?

かなりながいソースなんですが。
370デフォルトの名無しさん:2008/02/22(金) 19:45:43
>>369
そりゃもう手取り足取り
どれだけ長いソースでも宿題であれば片付けるよ
それが2ちゃんクロリティ
371デフォルトの名無しさん:2008/02/22(金) 19:50:06
ただちょっと専門的な話だから
流れをかいたファイルといろいろこみの
tar.gz形式のファイルでうpします
あとで。
372デフォルトの名無しさん:2008/02/22(金) 19:53:24
>>371
教授から出されたような難解で困難な宿題?
373デフォルトの名無しさん:2008/02/22(金) 23:14:14
[1] 授業単元: 認識
[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] その他の制限:

おねがいします。わからないことがあれば聞きます。
374373:2008/02/22(金) 23:20:53
http://www12.axfc.net/uploader/18/so/Ne_12654.gz.html
こちらです

すいません。
375デフォルトの名無しさん:2008/02/22(金) 23:24:36
>>373
件のファイルが既にありません。
しかも、「実行ファイルを実行せよ」というのはかなり怪しいです。
ウィルスなら誰も手を出しません。
376373:2008/02/22(金) 23:35:20
//としてるとこは全部消してもらってもかまいません。
あとでみたらログチェックしたままのファイルでした
377デフォルトの名無しさん:2008/02/22(金) 23:47:07
誰もがDVIファイル読める環境にあると思うなよw
せめてPDFくらいは・・・
あと実行ファイルは誰も実行せんがな(´・ω・`)
378373:2008/02/22(金) 23:50:28
379デフォルトの名無しさん:2008/02/22(金) 23:53:25
DVIを読むためにいろいろと導入するのが理系の学生だと思うけどなぁ……
でも俺の周りでdvioutとかGhost Scriptとかまで入れてるのは二三人しかいないなぁ……
そもそもTeXすら入れてないってやつが多いし……
Linuxのパッケージ?にはUNIX派生のいろいろが入っているからいいんだろうけど……
380デフォルトの名無しさん:2008/02/23(土) 00:55:59
このスレって理系の学生が答えるスレだったっけ?
381デフォルトの名無しさん:2008/02/23(土) 00:58:44
>>378
そのファイル読んだけど、やってる処理に関する知識を持ってないから全く分からん
その点も説明して貰わんと、分かる人間しか答えられんぞ
382デフォルトの名無しさん:2008/02/23(土) 01:19:49
余計な文消して文消して
コメントをいれるようにしてもう一度うpします。
そっちのほうがわかるとおもうので。
383373:2008/02/23(土) 13:37:46
gaiyou.txtと図をいれてみました。pngもしくはjpg形式です。
お願いします。
http://www12.axfc.net/uploader/18/so/Ne_12711.gz.html
384デフォルトの名無しさん:2008/02/23(土) 16:16:36
チェックしてみようかと思ったが、
コンパイルすら通らずにエラーや警告出まくりなんで止めた。
385デフォルトの名無しさん:2008/02/23(土) 16:21:04
コンパイルはとおるけど
386デフォルトの名無しさん:2008/02/23(土) 17:21:51
>>384
ヘッダファイルをチェックしてみては?
Windowsには無くてLinuxにはある、っていうヘッダがたくさん含まれている可能性もある
387デフォルトの名無しさん:2008/02/23(土) 19:14:26
tarファイルって書いてあるのにgzなのが気になって仕方が無い
388デフォルトの名無しさん:2008/02/23(土) 19:27:17
uploader側で末尾のピリオド以降を拡張子と自動認識されてるんじゃないの
389デフォルトの名無しさん:2008/02/23(土) 19:52:27
それにしてもtar.gzファイルとかtgzファイルとか書き方があると思った
390デフォルトの名無しさん:2008/02/23(土) 23:02:52
宿題がこないね
391デフォルトの名無しさん:2008/02/23(土) 23:08:25
#include <stdio.h>
void main(void)
{
FILE *kadaip;
char buff[256];
int n;
printf("文字を入力してください!\n");
printf("(Enterを入力すると終了)\n");
scanf("%c",&n);
kadaip = fopen("C:\\kadai.txt","w");
if(kadaip != NULL)
{
gets(buff);
while(buff[0] !='\0')
{
buff [256]= fprintf(kadaip,"%c\n",n);
printf("文字を入力してください!\n");
printf("(Enterを入力すると終了)\n");
scanf("%c",&n);
gets(buff);
}
if(buff < 0)
printf("出力エラー!\n");
fclose(kadaip);
}
else
printf("openエラー入力エラー!\n");
}
全然わからなくて、とりあえず作ってみたのがこれです。間違いだらけだと思いますが教えていただけたら嬉しいです。
あと、プログラムの終了条件は文字データの入力がないときです。よろしくお願いいたします。
392デフォルトの名無しさん:2008/02/23(土) 23:09:55
[1] 授業単元:プログラミング
[2] 問題文:キーボードから入力した内容をファイルに保存して表示するプログラムを作りなさい。
[3] 環境
 [3.1] OS: WindowsXP
 [3.2] コンパイラ名とバージョン: visual stdio
 [3.3] 言語: C
[4] 期限:2月25日まで
[5]上のものです。間違って先にプログラムの方を投稿してしまいました。
環境等はこちらです。すみませんでした。
393デフォルトの名無しさん:2008/02/23(土) 23:22:40
>>392
#include <stdio.h>
int main(void)
{
FILE *kadaip;
char buff[256];
int n;

kadaip = fopen("C:\\kadai.txt","w");
if(kadaip != NULL)
{
printf("openエラー入力エラー!\n");
return 1;
}
while(1)
{
printf("文字を入力してください!");
printf("(Enterのみを入力すると終了)\n");
gets(buff);
if(buff[0] =='\0') break;
n=fprintf(kadaip,"%s\n",buff);
if(n<=0)
{
printf("出力エラー!\n");
break;
}
}
fclose(kadaip);

return 0;
}
394393:2008/02/24(日) 00:01:01
>>393 が間違ってたので訂正
if(kadaip != NULL)

if(kadaip == NULL)
395デフォルトの名無しさん:2008/02/24(日) 00:04:26
373ですけど
どうですかね?
バグはみつかりましたか?
396デフォルトの名無しさん:2008/02/24(日) 00:58:57
>>394
訂正のとおりに実行してみたら無事にできました。お早い返答ありがとうございました。
397デフォルトの名無しさん:2008/02/24(日) 01:54:24
398デフォルトの名無しさん:2008/02/24(日) 02:00:08
>>397
どれだよw
399デフォルトの名無しさん:2008/02/24(日) 02:09:19
400デフォルトの名無しさん:2008/02/24(日) 13:10:21
[1] 授業単元: プログラミング演習
[2] 問題文(含コード&リンク): 巡回セールスマン問題の厳密解を求めるプログラムを作成せよ
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン: VC 2008 Exp
 [3.3] 言語: どちらでも可
[4] 期限: 2/25 12:00 ごろ

動的計画法で求めようとしているのですが、最小コストは求まったものの
そのルートを求める方法がいまいちわかりません。

dist[a][b] には a -> b の距離が入っています (a->b = b->a)
n は巡回頂点数です

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6084.txt
401デフォルトの名無しさん:2008/02/24(日) 15:13:14
>>400
ちょっと質問

ソースとか全然みてないでいうんだが、問題文は「厳密解」になってるけど
動的計画法って「近似解」を求める方法じゃない?
402デフォルトの名無しさん:2008/02/24(日) 15:19:46
>>401
すまn
漏れの勘違いだったorz
403デフォルトの名無しさん:2008/02/25(月) 02:00:32
>>400
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6086.c

・cost のサイズがでかすぎで手元でコンパイル通らなかったので減らした
・n や dist や CITY_NUM の定義が分からなかったので適当に補間した

以後ソースを挙げるなら定義の部分も含めてくれ
実行可能であることが最も望ましい
404403:2008/02/25(月) 02:01:47
>>403
>コンパイル通らなかったので減らした
これは間違いで、コンパイルは通ったが実行時エラーが出たので減らした
405デフォルトの名無しさん:2008/02/25(月) 17:53:48
[1] 授業単元: プログラミング演習
[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の行で‖と‖の間が空白の場所は数値が入っておらず、演算子に対応してる位置だと思ってください。
また、大分長くなってしまってもいいので、なるべく簡単なプログラムでお願いします。
可能であればでいいので、何を目的とした部分なのか程度の注釈をいくつかつけてくださると助かります。
406デフォルトの名無しさん:2008/02/25(月) 20:57:34
[1] プログラミング
[2] 問題文長くなるので下に書くごめんなさい
[3] 環境
 [3.1] OS: Windows2000
 [3.2] すいませんわかりません
 [3.3]C 言語
[4] 期限: ([2008年2月26日まで] できるだけ早くお願いしたいです。
[5] 制限は特になし
機動及びmain関数(kin_main.c)
このプログラミングの実行ファイルの名称は(kintai)のする。起動時に因数として勤怠情報ファイルを引数を与える。
>kintai kin0004
引数なしで機動した場合には、ファイル名を入力するようにメッセージを表示させる。
>kintai
>勤怠情報ファイルパスを指定してください。

このプログラミングのmain関数。初期化処理(kin_init()),勤怠情報記録ファイル読み込み処理(kin_file_read()),
入力情報論理チェック機能(kin_logic_chk()),勤怠計算機能(kin_calc()),標準出力機能(kin_display),CSVファイル生成機能(kin_create_csv()),
を順次に呼び出し。各関数の戻り値がエラーの場合にはその時点でmain関数に戻る。プログラムを終了にするにはmain関数
出なければならない。エラー情報はいかに示す。

エラーディファイン       出力情報                  意味
ERR_INIT 初期化エラー                初期化関数内でエラー
ERR_FILE_ACCESS ファイルアクセスエラー          ファイルアクセスに失敗した場合
ERR_LINE_NUM_OVER 勤怠情報ファイル文字数オーバー  勤怠情報ふぁいるの1行分文字数が所定の値を超える場合
ERR_PARSE 勤怠ファイル構文エラー         勤怠情報記録の構文が誤ってる場合
ERR_TIME_LOGIC 論理チェックエラー             入力された勤怠情報に誤りがある場合
NG 内部処理エラー               上記のエラーに該当しない場合。


丸なげでごめん 
407デフォルトの名無しさん:2008/02/25(月) 21:04:29
>>406
勤怠情報ファイルのフォーマットもなしどうしろと?
丸なげどころか、情報がたりなすぎる
408デフォルトの名無しさん:2008/02/25(月) 21:19:28
>>407
すまんまだはじめたばっかで
フォーマットを検索してもわからん
でもこんな感じになるはずなんだ

  http://yutori.2ch.net/test/read.cgi/news4vip/1203862807/

>>4>>5
409デフォルトの名無しさん:2008/02/25(月) 21:24:18
>>408
見えない
なんで検索しないといけないのかも分からんよ
410デフォルトの名無しさん:2008/02/25(月) 21:26:18
>>406
とりあえずツッコミどころが満載だな……

・CSVファイル生成機能(kin_create_csv())でのエラーは捕まえないの?
・エラーを出すのなら、その逆として「●●の処理は成功しました」と順次表示していくと親切じゃない?
・NG→ERR_internal の方がかっこよくない?
・ERR_TIME_LOGICで、「一ヶ月の勤務日数が32日です」とか
 「終業時刻+残業時間が、退勤時刻を超えてる」とかも出したほうが親切じゃない?
411デフォルトの名無しさん:2008/02/25(月) 21:32:10
int main(int argc,char **argv){
  int Result=0;
  if(argc<2){
    puts("勤怠情報ファイルのパスを指定してください");
  }else{
    FILE *pFile=fopen(argv[1],"rb");
    if(pFile==NULL){
      printf("%s はオープンできないよ\n",argv[1]);
    }else{
      printf("%s をオープンしたよ\n",argv[1]);
      puts("閉じるよ");
      Result=kin_init();
      if(Result<0)printf("kin_init()が %d だと言ってる\n",Result);
すまんこんな感じになると思うんだ
412デフォルトの名無しさん:2008/02/25(月) 21:34:46
>>410
すごい親切だと思うけどどうやるかさっぱりわからん
413デフォルトの名無しさん:2008/02/25(月) 21:36:34
最初のif else 文からしてあやしい。
fopenを二回やることになるぞ

・引数ありで起動した場合
・引数なしで、ファイルパスを指定(入力?)する場合
414デフォルトの名無しさん:2008/02/25(月) 21:47:15
>>411のは昨日やってもらったやつなんだ
引数与えないと起動しないようにするらしい
kintai kin0004.txtをつけるなければきどうしないようにする
0004は日付が入るyymmでyyが西暦の下二桁mmが該当月
.txt入らないと起動しないようにするみたいなです
415デフォルトの名無しさん:2008/02/25(月) 21:53:12
>>414
「ファイル構文」という用語を持ち出すほどだから、
勤怠情報のファイルフォーマットはxmlくらいのものだと思った
CSV出力があるのなら、最初からCSV形式で勤怠情報のファイルフォーマットを策定すればいいんじゃない?

古い諺だが

  データ構造+アルゴリズム=プログラミング

と言うし。
416デフォルトの名無しさん:2008/02/25(月) 21:58:06
>>415
ありがと
でも初心者の俺にはさっぱり意味がわからん
417デフォルトの名無しさん:2008/02/25(月) 22:15:29
もしかして勤怠情報ファイルのフォーマットは決まってないのか?
418デフォルトの名無しさん:2008/02/25(月) 22:32:40
正直フォーマットって言葉がでてこないから決まってないです。
問題文にkintai kin0004.txtだった 。.txtぬけてたすまん
419デフォルトの名無しさん:2008/02/25(月) 23:22:08
週末、勢い込んでカレー作った。
たまねぎ炒めるところから始めて、
かなり気合入れて作った。
たまねぎの量、土日あわせて6玉。
うまかった。
でも今日の屁が死ぬほどくさい。
420デフォルトの名無しさん:2008/02/25(月) 23:27:19
余ったタマネギは犬猫に食べさせちゃだめだよ!!!

でも実験という名目ならいいのかな??
421デフォルトの名無しさん:2008/02/25(月) 23:33:19
だるいから嫌
422デフォルトの名無しさん:2008/02/25(月) 23:33:53
だるいから嫌
423デフォルトの名無しさん:2008/02/25(月) 23:35:56
だるいから嫌
424デフォルトの名無しさん:2008/02/26(火) 00:03:54
だるいから嫌
425デフォルトの名無しさん:2008/02/26(火) 02:25:49
>>405
多少問題文とやり方が違うし、あんま自信ないけど、一応できたのでうp
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6091.txt
426デフォルトの名無しさん:2008/02/26(火) 04:07:54
だるいから嫌
427デフォルトの名無しさん:2008/02/26(火) 07:14:34
>>425
乙です
ありがとう
428デフォルトの名無しさん:2008/02/26(火) 11:45:04
[1] 授業単元: C
[2] 問題文(含コード&リンク):
3次元配列を用いたカレンダー生成プログラム
任意の西暦年数nを与えて、n年のカレンダーを下記の仕様により、作成せよ。
 1)3次元配列day[12][6][7]を使用する。
 2)出力形式は
  1月 2月 3月 4月
  5月 6月 7月 8月
  9月 10月 11月 12月
 とする。
 3)うるう年にも対応させる。
[3] 環境
 [3.1] OS:MacOSX 10.5
 [3.2] コンパイラ名とバージョン:gcc 4.0.1
 [3.3] 言語:Cでお願いします。
[4] 期限:2/27に提出です。
[5] その他の制限:特にありません。できれば、配列に組み込む部分と出力部分には関数を使ってほしいです。
日を配列に組み込むところで、つまってしまい、どうにもならなくなってしまいました。
最終的には理解できるようにしたいので、簡単なコメントなどつけてくれると嬉しいです。
急ぎで申し訳ありませんが、よろしくお願いしますm(_ _)m
429デフォルトの名無しさん:2008/02/26(火) 12:11:46
わざわざ配列に入れる必要なんてないと思うけど
430デフォルトの名無しさん:2008/02/26(火) 12:32:22
[1] 授業単元: C++
[2] 問題文(含コード&リンク):
個人課題 )IDカードを読み込んだら、その番号を"IDList.txt"に出力せよ。

buf[]にはそれぞれ二桁の16進数が入ってるのですが、それを繋げて、
strとしました。このstrに入った値を"IDList.txt"に書き込んでいきたいのです。

略)
sprintf(str, "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]);

これ以降をよろしくお願いします。

※カードを読み込むたびにstrは変わります。

[3] 環境
 [3.1] OS:XP
 [3.2] コンパイラ名とバージョン:VS2005pro
 [3.3] 言語:C++
[4] 期限:特になし
[5] その他の制限:特になし
ド素人な課題で申し訳ないのですがよろしくお願いします。
431デフォルトの名無しさん:2008/02/26(火) 13:21:29
>>430
それ本当にC++の授業なのか?
C++の特色のひとつは、Cから格段に進化した文字列操作だぞ
432デフォルトの名無しさん:2008/02/26(火) 13:31:08
>>430
つーかそれ、FILE * fp = fopen("IDList.txt", "w")してsprintf(str, ...)をfprintf(fp, ...)にすればいいだけじゃん。
433デフォルトの名無しさん:2008/02/26(火) 13:55:13
>>431
C++の授業ではないのですが、C言語の授業の延長の授業で、
環境がC++だったんでそのように書きました、申し訳ありません。
確かにやっていることは++は含んで無いのだと思います。
>>432
ありがとうございます。
"a"にしたら望んでいた物になりました。
434デフォルトの名無しさん:2008/02/26(火) 16:43:10
[1] 授業単元: プログラミング演習
[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のコメント以下は実際に実行時間を計測して考察しろ的なものだと思うのですが、
どうやればいいのかいまいち分からないため簡単にでいいのでどうやればいいのか教えてください。
435デフォルトの名無しさん:2008/02/26(火) 18:53:38
>>434
これ問題文そのまま「コピペ」してるか?
436デフォルトの名無しさん:2008/02/26(火) 18:59:02
>>434
設問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でもみてね)
437400:2008/02/26(火) 20:51:48
>>403
ありがとうございます。
説明不足で余計なお手数をおかけしてしまい申し訳ありません。

確かに、double では静的確保に成功する配列サイズなのに、
int で同じ添え字の配列を確保しようとすると確かにクラッシュするようです。不思議ですね。
その点は malloc で動的確保することで無事に動作しました。
438438:2008/02/26(火) 21:23:50
>>428 行数制限のため入出力は関数にしなかったが。
#include<stdio.h>
int day[12][6][7];
int z(int y,int m,int d){
if(m<3)y--,m+=12;
return(y+y/4-y/100+y/400+(m*13+8)/5+d)%7;
}
int main(void){
int y,s,m,w,d;
while(1){
printf("y=");
scanf("%d",&y);
//格納
for(m=0;m<12;m++)
for(w=0;w<6;w++)
for(d=0;d<7;d++){
day[m][w][d]=w*7+d+1-z(y,m+1,1);
if(day[m][w][d]<1||day[m][w][d]>(z(y,m+2,1)-z(y,m+1,1)+7)%7+28)
day[m][w][d]=0;
}
//表示
for(s=0;s<3;s++)
for(w=0;w<6;w++,printf("\n"))
for(m=0;m<4;m++,printf(" "))
for(d=0;d<7;d++)
if(day[s*4+m][w][d]>0)
printf("%2d",day[s*4+m][w][d]);
else
printf(" ");
}
return 0;
}
439デフォルトの名無しさん:2008/02/27(水) 00:11:44
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
文字頻度と文字の連接頻度をカウントするプログラムを作成せよ。
尚、入力ファイルにhamlet3-1をWebからダウンロードして使い、tsv形式で結果を出力せよ。($./a.out hamlet3-1.txt > hamlet.tsv としてプログラムを実行)
‐処理
・入力ファイルを「読み込みモード」でオープンする
・ファイルの銭湯から1文字ずつ読み込みながら小文字にそろえて、'a'〜'z'の範囲にある場合は以下の処理を行う。
@'a'〜'z'の各文字g亜出現する頻度を計数する。
A連続する2文字の連接頻度をa-a,a-b,...z-zまで計数する。
途中にスペース、改行などアルファベットが入った場合は連接していないとする。
・計数結果を標準出力に出力
hamlet3-1
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] その他の制限:特にありません。
よろしくお願いします。
440デフォルトの名無しさん:2008/02/27(水) 00:17:52
[1] 授業単元:プログラミング演習
[2] 問題文:
空気中でつるされている銅球の温度変化は以下の式で求まる。

Cp・ρ((πd^3)/6)dT/dt=-πd^2((λ/d)Nu)(T-Tair)

周辺空気の温度Tair=300K、流速3m/sのときの銅球の温度変化を計算しなさい。
なお、t=0sで銅球の初期温度はT0=700K、銅球の温度分布は無視し、各物性値は500Kで計算のこと。
(Cp=1.03kJ/kgK、ρ=8813kg/m^3、λ=39.71×10^3W/mK、Nu=11.04)
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C++
[4] 期限: 2008年2月27日15:00
[5] その他の制限:使用したアルゴリズムは全て関数化する。
ルンゲクッタ法を使用

どうしてもわからないのですみませんがお願いします。
441デフォルトの名無しさん:2008/02/27(水) 00:26:00
>>440
微分方程式を解くのか?
442デフォルトの名無しさん:2008/02/27(水) 00:32:01
>>441
そうなんだと思います。
443デフォルトの名無しさん:2008/02/27(水) 01:23:12
[1] 授業単元:情報処理
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS: Windows
 [3.2]コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 2008年2月27日 12:00

2つの文字列A,Bに入力し、、
それぞれの文字列の先頭から順に一文字づつ抜き出し、
交互に出力するプログラムを作成しなさい。
Str関数を使用しない
例:
文字列Aにabcd
文字列Bに123456
と入力すると
出力結果 a1b2c3d456
が出力されるようにする。

よろしくおねがいします
444デフォルトの名無しさん:2008/02/27(水) 01:29:42
445デフォルトの名無しさん:2008/02/27(水) 01:31:44
>>444は間違い。
446デフォルトの名無しさん:2008/02/27(水) 01:38:15
447デフォルトの名無しさん:2008/02/27(水) 01:44:13
>>443
#include <stdio.h>

int main(void)
{
char bufA[32], bufB[32];
int i=0;

printf("文字列Aの入力:");
fgets(bufA, sizeof(bufA), stdin);
printf("文字列Bの入力:");
fgets(bufB, sizeof(bufB), stdin);
while(bufA[i] != '\n' && bufB[i] != '\n')
{
putchar(bufA[i]);
putchar(bufB[i]);
i++;
}
if(bufA[i] != '\n') puts(bufA+i);
if(bufB[i] != '\n') puts(bufB+i);
return 0;
}
448デフォルトの名無しさん:2008/02/27(水) 01:46:34
Str関数ってなんだろう。Str関数を作れって意味ではなさそうだし。
str〜関数を使えってことかな?
449デフォルトの名無しさん:2008/02/27(水) 02:15:44
450デフォルトの名無しさん:2008/02/27(水) 02:22:55
>>449
ああああああ!!!
そうか、そういうことか。
451443:2008/02/27(水) 02:27:24
>>447
すみません、書き忘れてましたorz
配列でなくポインタででした・・
>>448
strのとこはstrcpyとか使わないでということです。
452!= 447:2008/02/27(水) 02:48:15
>>451
bufA[i]←こういうのがあってはいけないってことかな?
ならば、

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
char *bufA, *bufB;
int i=0;

bufA=malloc(32);
bufB=malloc(32);
printf("文字列Aの入力:");
fgets(bufA, 32, stdin);
printf("文字列Bの入力:");
fgets(bufB, 32, stdin);
while(*(bufA+i) != '\n' && *(bufB+i) != '\n')
{
putchar(*(bufA+i));
putchar(*(bufB+i));
i++;
}
if(*(bufA+i) != '\n') puts(bufA+i);
if(*(bufB+i) != '\n') puts(bufB+i);
free(bufA);
free(bufB);
return 0;
}
453440:2008/02/27(水) 04:50:45
微分方程式は手計算で解いてみたんですがソースを作ってみても解が出てきません…
どうすればいいかもまったくわからないです…
どのような解法でもいいのでどなたか本当にお願いします。
454デフォルトの名無しさん:2008/02/27(水) 10:02:02
>>440
この温度変化の微分方程式の本質は

  dT(t)/dt = a * T(t) + b

という形になるはず。
この解は、微分しても同じ形の関数T(t)が出てくるので、

  T(t) = c * e^t

のように、指数関数になる、っていうのまではいいのか?
455デフォルトの名無しさん:2008/02/27(水) 10:15:33
>>454
それはよくないんじゃないか?
456デフォルトの名無しさん:2008/02/27(水) 10:18:02
>>453 ルンゲクッタ法を調べる
457440:2008/02/27(水) 10:58:22
>>454
そこまではわかったんですが…どのようにソースを作ればいいのかがわからないです。
ルンゲクッタ法を用いてやってみているんですが解が求まりません…
458デフォルトの名無しさん:2008/02/27(水) 11:01:17
>>446,449
ありがとうございます!
459デフォルトの名無しさん:2008/02/27(水) 11:02:55
>>457
ある程度できてるならソース張って添削してもらった方が早いと思うぞ。
460デフォルトの名無しさん:2008/02/27(水) 11:45:16
461デフォルトの名無しさん:2008/02/27(水) 11:47:16
>>454
T(t) = c e^t だったら温度が指数関数的に吹っ飛ぶことになるが
462440: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;
}
463440:2008/02/27(水) 12:44:34
>>462

*---- 関数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);として計算しています。
464デフォルトの名無しさん:2008/02/27(水) 14:31:19
[1] 授業単元: プログラミング
[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文など簡単な文を多めに使う感じにしてください。
プログラムでなく考察を要求してるところを横棒で区切りました。
そちらの方にも軽くヒントなどいただきたいです。
465デフォルトの名無しさん:2008/02/27(水) 15:53:39
>>440

Cp……銅の比熱(500K)
ρ……銅の密度(500K)
d……???
λ……熱伝達係数
Nu……ヌッセルト数


流速3m/s はどこで使うの?
d は何?
πd^2((λ/d)Nu) の部分は πdλNu と約分できそうだけど、ホントにこのままでいいの?
それともd^2ってのは二階微分を表してるの?
466465:2008/02/27(水) 16:39:07
>>440
そもそも、その銅球の半径は?
それがd?
467デフォルトの名無しさん:2008/02/27(水) 22:56:46
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
     コマンド ライン引数に指定されたファイルすべてに対して、 改行文字以外の各行を、
逆さまにして表示するプログラムを書いてください。
なお、対象のファイルには英数字などの半角文字のデータのみが入っているものとし、
漢字などの全角文字は含まれていないものとします。
[3] 環境
 [3.1] OS:Windows XP
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語:C
[4] 期限: 2008年2月28日 11:00
[5] その他の制限:
     1.文字列の最後の文字から先頭に向かって、順に 1 文字ずつ表示
(ただし、文字列の最後の文字が改行文字の場合、その次から始める)
2. 1 で改行文字があったならば、改行文字を表示

だれかよろしくお願いします
468デフォルトの名無しさん:2008/02/28(木) 00:26:20
// >>467
#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;
}
469デフォルトの名無しさん:2008/02/28(木) 00:43:38
>>464
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6103.txt

こんな感じかな?
再帰関数を使っているのであんまりサイズが大きい配列だとプログラムが異常終了するかも
あと時間の計測方法は知らん

適当にmain関数を使っていじってみて
470デフォルトの名無しさん:2008/02/28(木) 07:54:50
[1] 授業単元:プログラミング
[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] その他の制限:ありません

丸投げです。どなたかよろしくおねがいします。

471デフォルトの名無しさん:2008/02/28(木) 09:24:35
472470:2008/02/28(木) 09:35:36
>>470 ほんとうにありがとうございます。
質問なんですが問4のランダム抽選はどのように表示されますか?
473470:2008/02/28(木) 09:56:40
↑アンカーミスです。。
>>471 ほんとうにありがとうございます。 
474デフォルトの名無しさん:2008/02/28(木) 10:20:39
>>468 ありがとうございます。さっそくやってみたのですが、
test2.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' : 定義されていない識別子です。
と表示されるのですが…
475デフォルトの名無しさん:2008/02/28(木) 10:47:43
>>474
int ic;
for (ic = 1; ic < argc; ++ic) {

に変えたら?
476デフォルトの名無しさん:2008/02/28(木) 13:38:15
[1] 授業単元:プログラミング
[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時まで

もしよろしければどなたかお願いします。
477デフォルトの名無しさん:2008/02/28(木) 13:50:12
>>476
#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;
}
478デフォルトの名無しさん:2008/02/28(木) 14:10:59
>>477
早すぎるお仕事、ありがとうございました
479デフォルトの名無しさん:2008/02/28(木) 21:18:18
宿題マダー?
480デフォルトの名無しさん:2008/02/28(木) 21:29:27
では300Mのテキストファイルを速くブロックソートするプログラム作ってくれよ
昨日から作ってるけど速くならない
481デフォルトの名無しさん:2008/02/29(金) 00:31:48
[1] 授業単元:プログラミング
[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] その他の制限:
482デフォルトの名無しさん:2008/02/29(金) 00:56:15
>>480
どんな環境でどんなデータに対してどれだけ時間がかかるのが遅いって言うんだ?
基準をplz
483デフォルトの名無しさん:2008/02/29(金) 01:06:59
>>481
#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;
}
484デフォルトの名無しさん:2008/02/29(金) 01:11:21
>>482
全文字列を展開してソートした場合

#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";
}
485デフォルトの名無しさん:2008/02/29(金) 01:15:30
>>483
トン
486デフォルトの名無しさん: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] その他の制限: なし
  切羽詰って依頼します。よろしくお願いします。


487デフォルトの名無しさん:2008/02/29(金) 03:54:35
>>486
3)は、「中心点が原点に近いか」じゃなくて「重心が原点に近いか」じゃないの?
488デフォルトの名無しさん:2008/02/29(金) 07:58:42
重心の求め方がわからない?
各座標のx,yをそれぞれ足して3で割るだけじゃん。
489デフォルトの名無しさん:2008/02/29(金) 15:57:25
490デフォルトの名無しさん:2008/02/29(金) 17:06:38
>>484 多少は早いんじゃないかと思う。 20kで動かせないからわからないけど
#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; }
491デフォルトの名無しさん:2008/02/29(金) 17:30:14
>>490
あっ、インデックス保持してやないや
メモリの解放もわすれてるし・・・
どうも、ボケてるな
492デフォルトの名無しさん:2008/02/29(金) 18:18:41
486です。レス遅くなってしまったがありがとうございました。
493デフォルトの名無しさん:2008/03/02(日) 13:33:08
[1] 授業単元: プログラミング
[2] 問題文(含コード&リンク):
<四則演算機の作成>
テキストファイルから数式を読み出し、計算結果を別ファイル名で出力する。
数式には、+−*/()を含む。計算結果は整数とし、小数点以下は切り捨てる。

[3] 環境
 [3.1] OS:Windows
 [3.2] コンパイラ名とバージョン: gcc
 [3.3] 言語: C++
[4] 期限: 2008年3月3日10:00まで
[5] その他の制限:逆ポーランド記法に並び替えて計算するという手順で
プログラムを作成しなさいとの説明がありました。逆ポーランド記法に
並び替えるプログラムで詰まってしまい先に進めらなくなってしまいました。
丸投げなのですがよろしくおねがいします。
494デフォルトの名無しさん:2008/03/02(日) 16:00:36
[1] 授業単元:プログラミング
[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言語が大の苦手で、今遅れを取り戻そうとしているのですが。
期限が迫り、自分ではやってみるもののまったくわからないのでお願いします。
495デフォルトの名無しさん:2008/03/02(日) 16:09:41
これはひどいwwwww
496デフォルトの名無しさん:2008/03/02(日) 16:17:11
おい、だれかエスパーを呼んでくれ
497デフォルトの名無しさん:2008/03/02(日) 16:36:47
ぎゃぼー俺には解けそうにない
498デフォルトの名無しさん:2008/03/02(日) 17:34:48
この中に誰か授業に行った奴はいないのか!
499デフォルトの名無しさん:2008/03/02(日) 22:22:58
>>494
#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;
}
500デフォルトの名無しさん:2008/03/02(日) 23:03:31
個人で作成代行してくれるところってある?
雑誌の後ろらへんとか見てみたんだけどなかった、、、かといって会社に頼むとめちゃくちゃ高いし...
501デフォルトの名無しさん:2008/03/02(日) 23:11:24
それが宿題ならここで丸投げすればいい。
そうでないならそもそもスレ違い。
502デフォルトの名無しさん:2008/03/02(日) 23:23:03
宿題だが、難しいから探してる
スレ違いということなので、他で探してくる...orz
503デフォルトの名無しさん:2008/03/02(日) 23:53:26
いや、宿題ならとりあえずテンプレに沿って書いてみれば?
専門知識が必要だと厳しいかも知れんが、参考になりそうなサイトでの添付してくれれば
やさしいお兄さんが答えてくれる可能性はグンと上がると思うよ?
504デフォルトの名無しさん:2008/03/02(日) 23:55:16
>>502
前方後円墳の容積を求める宿題なら。。
505デフォルトの名無しさん:2008/03/03(月) 08:26:08
>>493
途中までです。仕事から帰ったら完成させます。すんません。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6112.txt
506デフォルトの名無しさん:2008/03/03(月) 09:58:24
507デフォルトの名無しさん:2008/03/03(月) 19:16:16
>>484
C言語で書いてみたんだが、まだ必要だったらレスplz

参考までに速度比較(速度調べるために遅いマシンで測定した)
>>484 のコードで 20000 の時 8.96 sec
書いてみたコード 20000 の時 0.11 sec
書いてみたコード 200000 の時 1.41 sec
508デフォルトの名無しさん:2008/03/03(月) 19:19:39
>505,506
493です、ありがとうございました。
直前で見ることができなかったのですが、
なんとか明日まで延ばしてもらえたので
ありがたくいただきます。
509デフォルトの名無しさん:2008/03/03(月) 19:53:44
>>504-504
ありがとう
でも前ちょっと聞いたんだけどスルーされちゃったから(キャプチャ関係)

ちょっと切羽詰ってて、やらなきゃいけないので
当然謝礼はちゃんと出しますのでやって頂ける方はメールください(捨てアドでいいので)
スレ違いすぎるのでとりあえずこれくらいで書き込みはやめます
よろしくお願いします
510デフォルトの名無しさん:2008/03/03(月) 20:36:52
>>493
もう書いてる人いるけどせっかくだから張ってみる。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6118.cpp
511デフォルトの名無しさん:2008/03/03(月) 20:58:44
素数を求めるC言語プログラミングを教えてください
条件が有りまして
for文のネストもしくはwhile文のネストを使ってなおかつgoto文を使って下さい
よろしくお願いします。
512デフォルトの名無しさん:2008/03/03(月) 21:01:18
>>511
>>1 を読んで書き直すか下のURLクリック
ttp://pc11.2ch.net/test/read.cgi/tech/1203343907/394
513デフォルトの名無しさん:2008/03/03(月) 22:08:59
「goto使え」って指定は初めて見たなw
514デフォルトの名無しさん:2008/03/03(月) 22:33:35
map<int, map<int, int>> hogehoge;
 ↑外側 ↑内側

これの内側のmapにデータがある時に外側のmapをclearした場合、内側のmapに格納してあるデータは自動的に解放されるのでしょうか?
515デフォルトの名無しさん:2008/03/03(月) 22:36:46
>>514
解放されます
というか、特定の型の場合だけ残すほうが難しいよ
516デフォルトの名無しさん:2008/03/03(月) 22:45:31
>>515
ありがとうございます。
感謝です。
いつもわざわざ内側をclearしてから外側をclearしていました。><
517デフォルトの名無しさん:2008/03/03(月) 23:07:59
>>510
おお、さらに書いていただけたとは・・。
ここまで短くなるものなのですね。自分で途中まで書いてたものが
えらく長かったので助かります。505-506の方のと両方参考にして
提出後自分で練り直してみたいとおもいます。

ありがとうございました。
518デフォルトの名無しさん:2008/03/04(火) 00:41:18
519デフォルトの名無しさん:2008/03/04(火) 02:05:34
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):()
for文を使用して、15パズルを作成せよ。
出来るなら経過時間も表示させること。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C++
[4] 期限: 2008年3月29日まで
[5] その他の制限:

学校の課題です。出来るところまでやってみたものをろだにあげてあります。
開始時にランダムにピースを配置するものと、正解判定、経過時間の表示が手付かずの状態です。
出来ればあれ(ろだ、6120.txt)に手を加える形で作って頂ければ助かります。
520519:2008/03/04(火) 02:08:50
ろだへのアドレスを貼り忘れました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6120.txt
です。
521505:2008/03/04(火) 02:19:22
>>493
当方で確認した環境は WindowsXP, 処理系は cygwin(gcc 3.4.4)です。
すでに他の方のすばらしいものがあり、私のもののメリットは皆無です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6121.txt
522デフォルトの名無しさん:2008/03/04(火) 02:20:54
>>519
まずは、パズル.bmpと、空きに、指定する、数字と、完成形を、示して、ください
523デフォルトの名無しさん:2008/03/04(火) 03:24:29
>>522
大変もうしわけありませんでした。
パズル.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)に書いてあるものと同じスタンダードなものです。
メイン関数の部分にオセロゲーム、と書いてありますが、そこは消し忘れですので気になさらないでください。

本当に申し訳ないのですが、「空きに指定する数字」というのがよくわからず……。
こちらの知識不足で、ご迷惑をおかけしますが、どういったことでしょうか。
524デフォルトの名無しさん:2008/03/04(火) 08:00:38
>>523
なにが判らないのか判らない。15パズルが、ピースを一つずつずらしていくパズルだと言うことは理解できているの?
先ずはWeb上にある15パズルを探してきて自分で動かしてみたら?
525デフォルトの名無しさん:2008/03/04(火) 12:51:42
>>524
一応、そのあたりのことは理解しているつもりなのですが……。

現状(6120.txt)では、キーボードの上下左右を押して、ピースをずらす、という段階までは作れたつもりなんですが
「ピースを順番どおりにきちんと並びかえたときに、どうやってそれを判定するのか」
「最初にどうやってピースがバラバラに配置された状態にすればいいのか」
の二つがわからなかったんです。
526デフォルトの名無しさん:2008/03/04(火) 13:14:32
>>525
きちんと並んだかどうかは、例えば1から15までのピースに1から15までの番号を振りブランクに0を振ったとして、
それらが1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0になったかどうかで判断すればいい。
初期位置は、解けないパズルになる可能性が合ってもいいなら、1から15までとブランクをシャッフルして配置すれば宜しい。
解けないパズルになってはいけないのなら、揃った状態からプログラム的にランダムにピースを操作するしかない。
527デフォルトの名無しさん:2008/03/04(火) 13:37:12
>>526
> 揃った状態からプログラム的にランダムにピースを操作するしかない。

本当?
528デフォルトの名無しさん:2008/03/04(火) 13:38:43
パリティを考慮して配置すればOK。でもめんどいw
529デフォルトの名無しさん:2008/03/04(火) 15:35:20
>>527の言うとおりに、揃った状態から盤面をランダムにする方がいいと思う
530デフォルトの名無しさん:2008/03/04(火) 16:04:17
>>526
if(masu[1][0]==1)&&(masu[2][0]==2)……という風にやっていけば大丈夫でしょうか。
ひとまずやってみます。アドバイス本当にありがとうございます。

ピース配置のほうも、助かりました。>>529さんも、ありがとうございます。
揃った状態から盤面をランダムにする、という方法でひとまずやってみたいと思うのですが……。
randを使用すれば良いんでしょうか。
531デフォルトの名無しさん:2008/03/04(火) 18:42:17
>>528
パリティが奇だったら最後の2ピースひっくり返すだけ。面倒でもないよね。
532528:2008/03/04(火) 19:35:34
私が確認するのが面倒なの!w
533デフォルトの名無しさん:2008/03/04(火) 19:39:34
>>530
15パズルなら、randで4まで出るようにして、それを空白のマスで行う、とか

1……空白マスの上を動かす
2……右を
3……下を
4……左を

ってな具合に
角と辺では別処理
534デフォルトの名無しさん:2008/03/05(水) 01:05:26
>>533
ありがとうございます。自分では考えもつきませんでした……。
戴いた助言どおりに進めてみることにします。
535デフォルトの名無しさん:2008/03/05(水) 04:56:30
>>519
簡単に作ってみた。C++詳しくないんで中身はほとんどCだけど。
元のソースはよくわからんかったので全く利用してませんが悪しからず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6123.cpp
536535:2008/03/05(水) 05:45:15
malloc()のとこ、型変えたのに直し忘れてた。
sizeof(unsigned char) ではなく sizeof(unsigned int) です。
537535:2008/03/05(水) 06:59:44
確認不足で申し訳ない。見直したら不具合が残ってたので訂正。
moveTest()の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; を加えて下さい。
538519:2008/03/05(水) 12:42:03
>>537
本当にありがとうございます。助かりました。
539デフォルトの名無しさん:2008/03/05(水) 22:29:19
>>531
すみません。15パズルのパリティの計算を教えてください。
540デフォルトの名無しさん:2008/03/05(水) 22:44:18
>>539
初期状態に、戻すように、入れ替えて、いけば、いい、
それが、偶数回の、作業か、奇数回の、作業か、という、意味
541デフォルトの名無しさん:2008/03/06(木) 00:05:03
[1] 授業単元:オペレーティングシステム
[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の値の代わりにそれを表示出来るようにさせたいです。
よろしくお願いします。
542デフォルトの名無しさん:2008/03/06(木) 00:17:11
>>541
各ビットの意味はmanページに書いてあるだろ。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/stat.2.html
例えばls -lがどう表示するのか知りたいならinfoにある。
スティッキービットなどを考慮しなくていいのなら、
drwxrwxrwx形式でdはディレクトリ、以下ユーザ、グループ、他人の、それぞれ読み込み、書き込み、実行許可。
そうそう、dの部分はシンボリックリンクやデバイスなどの場合はそれに合わせて変わるのも忘れずに。
543デフォルトの名無しさん:2008/03/06(木) 00:24:48
>>541
自力でそこまでできるんだったら、モードの表示も自力でできるだろう?
先頭の文字は、S_ISDIR(st.st_mode)ならば'd'、S_ISCHR(st.st_mode)ならば
'c'という風に表示すればいい。どう表示するかはman lsしてくれ。
残りの9文字は、st.st_mode & S_IRWXU ? 'r' : '-' のように一文字ずつ
出していけばいい。ただし、スティッキービットに注意すること。
544デフォルトの名無しさん:2008/03/06(木) 00:32:01
>>543
間違えた。st.st_mode & S_IRUSR ? 'r' : '-' だた。
545デフォルトの名無しさん:2008/03/06(木) 05:06:37
>>540
15パズルの任意の局面は、
(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)にする入れ替え操作は存在しない。(証明は簡単)
546デフォルトの名無しさん:2008/03/06(木) 05:54:00
>>519
亀レスだし、VCないからcursesライブラリ使ってだけど、できたからうpってみる
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6126.txt
547デフォルトの名無しさん:2008/03/06(木) 09:17:44
>>539
#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));
}
548519:2008/03/06(木) 10:14:55
まだ完成してはいないのですが、どうにか15パズルの課題、仕上げることが出来そうです。
>>546さん、>>547さん、
また、今まで助言を下さった方々、本当にありがとうございました。
549デフォルトの名無しさん:2008/03/06(木) 19:13:46
>>545
それを、あらかじめ、判定するという、話なんですが
550デフォルトの名無しさん:2008/03/06(木) 20:07:33
>>549
#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}};
とする
*/
551デフォルトの名無しさん:2008/03/06(木) 20:34:23
>>550
間違ってるな
552デフォルトの名無しさん:2008/03/06(木) 20:43:44
>>550
{{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,15,14,13}}を、与えると、1が、返ってきて、しまいましたが、、、
未完の、大作と、評価して、おきます
553550:2008/03/06(木) 21:50:12
>>550 の修正版 (完成した状態の定義は board_t board={{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,SPACE}}; とする)
#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);
}
554デフォルトの名無しさん:2008/03/06(木) 23:34:55
547 のほうが数段美しいな。非破壊的だし。
555デフォルトの名無しさん:2008/03/07(金) 00:52:37
[1] 授業単元: ひまつぶし
[2] 問題文(含コード&リンク):()

大きな川のこちらの岸辺に n 艘の船がある。
船 j は川を t_j 分で渡ることができる。

船を動かすとき、二艘繋いで動かすこともできる。
このときは、遅い船の時間だけかかってしまう。

こちらの岸辺にある船をすべて向こうの岸辺に
持って行くためにかかる最短時間を求めよ。

入力:
船の艘数 n (≦ 1000000)
各船が川を渡る時間 t_1, ..., t_n

出力:
最短時間

[3] 環境
 [3.1] OS: 問わず
 [3.2] コンパイラ名とバージョン: 問わず
 [3.3] 言語: どちらでも可
[4] 期限: 03/10 まで
[5] その他の制限: 特になし。
556デフォルトの名無しさん:2008/03/07(金) 00:57:38
>>555
全部、同時に、出港すれば、、、、
557デフォルトの名無しさん:2008/03/07(金) 00:58:45
全ての船が一斉に渡り始めればいいので、
t_1からt_nの中の最小値が答え。
558デフォルトの名無しさん:2008/03/07(金) 00:59:15
最大値だったw
559デフォルトの名無しさん:2008/03/07(金) 01:01:23
プログラム必要なしw
560555:2008/03/07(金) 01:07:34
条件の後出しですんません、船の運転手は 1 人です。

よくある問題設定なので書かなくても察してくれると思ってた・・・。
561デフォルトの名無しさん:2008/03/07(金) 01:09:32
甘いな、そんな素直に解釈するような連中だと思うのか?w
562デフォルトの名無しさん:2008/03/07(金) 01:13:16
2艘を繋いだり外したりする時間は考慮しなくていいのか?
563デフォルトの名無しさん:2008/03/07(金) 01:13:46
「二艘繋いで動かすこともできる。』と、いうのは、1+2=3という、意味ですか、それとも、1+1=2と、いう意味ですか?
564デフォルトの名無しさん:2008/03/07(金) 01:22:15
一番早い船に乗って、往復して一艘ずつ曳航すればいいのかな。
int 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);
}
565デフォルトの名無しさん:2008/03/07(金) 01:27:01
最後のところ訂正
else return std::accumulate(t, t+n, 0) + *std::min_element(t, t+n) * (n-2);
566555:2008/03/07(金) 01:28:44
>>565
船の速さが 1 2 5 10 のとき、その解法だと 19 になりますが
最適解は 17 です({1,2}, {1}, {5,10}, {2}, {1,2})
567デフォルトの名無しさん:2008/03/07(金) 01:35:27
それ以前に19になるか?
568555:2008/03/07(金) 01:44:05
実行して気づきました。問題文が不十分だったんですね。

> 遅い船の時間だけかかってしまう。
は、遅い船のスピードに支配される、という意味で使っていました。

ああ、もうぼろぼろ・・・
569デフォルトの名無しさん:2008/03/07(金) 08:37:08
キニスルナ(・∀・)
春休み中はスレも停滞するし、暇つぶしの問題は歓迎だろ。
ただ、2つの場所を種々の条件で移動する問題はなぞなぞの要素が強いと思われ。
570デフォルトの名無しさん:2008/03/07(金) 08:54:01
作業系の問題よりは暇つぶしにはいいんじゃねーの?
まあ俺はわからんけど
571デフォルトの名無しさん:2008/03/07(金) 13:10:30
個別の数値が決まってる奴はこの手のなぞなぞの定番だけど、一般化は考えたことなかったな。
少し考えてみようか。
解けない気がするけどw
572デフォルトの名無しさん:2008/03/07(金) 13:47:35
若干強引だけどこれでいけるか?

int 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);
}
}
573デフォルトの名無しさん:2008/03/07(金) 19:59:42
>>572
なんかちがわね? t[] = {1,3,4,4} のとき
そのプログラムだと 1 + 3*3 + 4 = 14 だけど
(1,3)->, <-(1), (1,4)->, <-(1), (1,4)-> で13 になるよ
574デフォルトの名無しさん:2008/03/07(金) 22:43:47
>>555
また、お前か
575デフォルトの名無しさん:2008/03/08(土) 01:34:16
>>555
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6128.txt
総当りでやってみた。100万艘とかは無理w
でもいろいろやってみると、以下が鉄則のようにみえる。
一、速い二艘を往復に使うべし
一、遅い方の船から二艘ずつを組にして渡るべし
576デフォルトの名無しさん:2008/03/09(日) 16:08:31
[1] 授業単元:プログラミング演習
[2] 問題文:データ構造スタックを用いた逆ポーランド電卓の作成
[3] 環境
 [3.1] OS: Windows
 [3.2] コンパイラ名とバージョン:bcc32
 [3.3] 言語: C
[4] 期限: 3月中

初心者です
四則演算が行える電卓を作りたいのですが、よろしくお願いします。
577デフォルトの名無しさん: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
578デフォルトの名無しさん:2008/03/10(月) 15:58:16
[1] 授業単元:プログラミング
[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
上は、自分でやったとこまでです。初心者なので訳が分からなくなってます。
あと、問題文が英語で本当にすみません。

579デフォルトの名無しさん:2008/03/10(月) 16:55:37
580デフォルトの名無しさん:2008/03/10(月) 21:11:36
>>579
ありがとう、夜勤から帰ったらためしてみる。まずは取り急ぎ
581デフォルトの名無しさん:2008/03/10(月) 22:57:24
>>576
当方の環境は WindowsXP, 処理系は cygwin(gcc 3.4.4) です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6134.txt
K&R2 4.3 よりも無駄に長く汚くなってしまいました。とりあえず、そっちを読んでください。
582デフォルトの名無しさん:2008/03/11(火) 01:55:05
583577:2008/03/11(火) 11:25:18
>>579
折角作って頂いたのに本当に申し訳ないんだが、enscoreコマンド実行時にリストの中身と計算過程の表示を省くには何処を削ればいいんでしょう?
処理個数が多くなりそうなので…。
584デフォルトの名無しさん:2008/03/11(火) 12:40:59
>>583
あれ?リストの中身表示、計算過程って表示されちゃってる?
#define DEBUG ってなってなければ、表示されない(プログラムの実行コードに含まれない)はずなんだけど・・・
コンパイラによってデフォルトで DEBUG ついちゃうのかな?

まぁ、#ifdef DEBUG 〜 #endif の間を削除しちゃえばいいさぁ〜
585デフォルトの名無しさん: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;
}
586デフォルトの名無しさん:2008/03/12(水) 13:18:17
>>585
スレ違い。
初心者歓迎スレでもSTLスレでもお好きな方ヘどうぞ。
587デフォルトの名無しさん:2008/03/13(木) 00:15:41
あー・・・春だなぁ。5〜6月までは、あんまりネタがないのかなぁ。
588デフォルトの名無しさん:2008/03/13(木) 02:20:40
今のうちに、C/C++とかアルゴリズムを勉強しておくといいんじゃね。
Structure and Interpretation of Computer Programs (SICP)辺りを読むのも良いかもな
589デフォルトの名無しさん:2008/03/13(木) 16:58:40
[1] 授業単元:プログラミング
[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の、約分処理と関数の呼び出し方がわかりません。
もしよければお願いします。
590デフォルトの名無しさん:2008/03/13(木) 17:07:56
>構造体タグには、typedefによってBUNSUという名前をつけて使用する。
は?
C++に構造体タグなんてありませんが。構造体名自体が型として使えるので、typedefする必要もありませんが。
591デフォルトの名無しさん:2008/03/13(木) 18:21:48
どっちかといえば期限無制限に突っ込むべきだろ
592デフォルトの名無しさん: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;
}
593デフォルトの名無しさん:2008/03/14(金) 00:31:46
>>592
ありがとうございました。
C言語をはじめたばかりですが、がんばっていこうと思います!
594デフォルトの名無しさん:2008/03/14(金) 00:54:42
[1] 授業単元:プログラミング
[2] 問題文(含コード&リンク):
VisualC++を使用して「はさみ将棋」を作成せよ。
テクスト、授業で配布したプリントのほかにも、自分で参考となる資料を集めて利用しても構わない。
[3] 環境
 [3.1] OS: WinXP
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C++
[4] 期限: 2008年3月28日まで
[5] その他の制限:特になし。ただ、出来るだけ平易な文で作っていただけると助かります。
595デフォルトの名無しさん:2008/03/14(金) 01:15:00
てst
596541:2008/03/14(金) 01:59:06
[1] 授業単元:オペレーティングシステム
[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などの部分を作成がまったく見当がつきません。
助けて頂けるとありがたいです、よろしくお願いします。
597デフォルトの名無しさん:2008/03/14(金) 04:50:33
>>593
ちょっと待て。
> [3.3] 言語:C++
>C言語をはじめたばかりですが、がんばっていこうと思います!
おまいさんは、何語を習っているのかさえ判っていなかったのか?
598 ◆nUWYoBn0RQ :2008/03/14(金) 16:48:25
助けてください。
課題で
c言語の文字列ソートで
char * month[]={"january" ,"february", "march","april","may","june","july"}
をアルファベット順にソートかつ大文字に変えて表示するやり方
がわかりません。
教えてください。今日までなので時間がありません。
お願いします
599サッカー:2008/03/14(金) 17:09:48
1] 授業単元:プログラミング
[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日まで

助けてください。
やり方が全くわかりません。
教えてください。
お願いします




600デフォルトの名無しさん:2008/03/14(金) 17:43:58
>>599
ほいよ
#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;
}
601600:2008/03/14(金) 17:46:38
わりい一行バグってた。cmpを置き換えてくれ
int cmp(const void*a,const void*b){return strcmp(*(char**)a,*(char**)b);}
602デフォルトの名無しさん:2008/03/14(金) 17:50:09
[1] 授業単元: プログラミング
[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] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々)
クラスの作り方がよくわかりません。
よろしくお願いします。
603サッカー:2008/03/14(金) 17:53:30
マジ天才です。
助かりました。
ありがとうございます。
604 ◆zCS1o.kilU :2008/03/14(金) 18:17:37
1] 授業単元:プログラミング
[2] 問題文 :mystrlen関数作成せよ。プロトタイプはint mystrlen (char*);
またmain関数からmystrlen関数を呼び出し自分の名前の長さを求め
      なさい。
  実行例「   ”山田太郎”は0008バイトです   」
[3] 環境
 [3.1] OS: windowsxp
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] strlen関数使用禁止

お願いします。



605デフォルトの名無しさん:2008/03/14(金) 18:27:16
>>604
好きなんどーぞ
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; 
606デフォルトの名無しさん:2008/03/14(金) 18:27:23
>>602
struct 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);
}
607 ◆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でお願いします。

お願いします
608デフォルトの名無しさん:2008/03/14(金) 18:44:19
>>604
当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6142.txt
609 ◆zCS1o.kilU :2008/03/14(金) 19:03:27
そうなんですか。
ありがとうございます。
610 ◆TJ9qoWuqvA :2008/03/14(金) 19:55:04
教えてください。
わからないよ〜。
最後にこれができないと
単位がもらえないよ。
611デフォルトの名無しさん:2008/03/14(金) 20:06:27
>>610
お前が誰だかわからないよ
612607:2008/03/14(金) 20:21:56
607
です。ありがとうございます。
もうひとつだけお願いがあります。1] 授業単元:プログラミング
[2] 問題文 :キーボードから西暦と月を入力するとカレンダーを
      表示するプログラムを作成せよ
[3] 環境
 [3.1] OS: windowsxp
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語
[4] 期限: できるだけ早くお願いします。
[5] scanf使用不可. fgetsでお願いします。

お願いします

613デフォルトの名無しさん:2008/03/14(金) 21:20:32
>>607
>>612
当方で確認した環境は cygwin/WindowsXP, 処理系はgcc3.4.4 です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6143.txt
614デフォルトの名無しさん:2008/03/14(金) 22:21:48
[1] 授業単元:プログラミング演習
[2] 問題文(含コード&リンク):データ構造・スタックの作成
[3] 環境
 [3.1] OS: windows vista
 [3.2] コンパイラ名とバージョン: bcc32
 [3.3] 言語: C
[4] 期限: できるだけ早く

http://www2.uploda.org/uporg1305086.txt
↑スタックとして、これを使用したいと思います。
しかし、整数しか扱えず、浮動小数点数のプッシュが行えません。
関数の返却値をdouble型に変更してみたり、確保する型の変更など
試してみましたが、うまくいきませんでした。

浮動小数点数を扱える様に変更をよろしくおねがいします。
615デフォルトの名無しさん:2008/03/14(金) 22:25:22
ksk
616デフォルトの名無しさん:2008/03/14(金) 22:39:38
>>614
当方で確認した環境はcygwin/WindowsXP, 処理系はgcc3.4.4です。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6144.txt
617デフォルトの名無しさん:2008/03/14(金) 22:47:22
>>616
614です。
ありがとうございます。
実行してみたところ、一か所エラーがでてしまいました。13行目ですが、
エラー E2034 13: 'void *' 型は 'double *' 型に変換できない(関数 StackAlloc(Stack *,int) )

処理系の違いによるものでしょうか。
何か対策がありましたら教えて頂けると助かります。
618デフォルトの名無しさん:2008/03/14(金) 22:49:54
>>617
元のファイルもコンパイルできなかったのかな?
619デフォルトの名無しさん:2008/03/14(金) 22:50:46
>>617
if ((s->stk = (double *)calloc(max, sizeof(double))) == NULL) {
でどうでしょうか?
620デフォルトの名無しさん:2008/03/14(金) 22:59:48
614です。

>>618
614のファイルでは、整数のみ扱える状態でコンパイル、実行が行えました。

>>619
実行できました。ありがとうございます。
本当に助かりました。
このスタックを用いてプログラムの作成を行うのですが、
また解らないことがありましたら、質問させていただけたらと思いますので
その際はよろしくお願いいたします。
621デフォルトの名無しさん:2008/03/14(金) 23:08:12
>>617
C++としてコンパイルしているだろ?
622607:2008/03/14(金) 23:21:48
613さんありがとうございます。たすかりました。
623デフォルトの名無しさん:2008/03/14(金) 23:33:12
614です。

>>617
拡張子を.cpp としてコンパイルしていました。
Cでコンパイルしたところ動きました。
ご指摘ありがとうございます。今後気を付けます。

>>619
訂正していただいたのにすみませんでした。
言語をCとせずにコンパイルしていたのが原因でした。
616が動作することも確認できました。

ありがとうございました。
624616:2008/03/15(土) 05:59:16
>>620
該当行は double のときは、calloc() -> malloc() に訂正しておいてください。
625デフォルトの名無しさん:2008/03/15(土) 07:40:55
>>596
後半だれてたから、読みづらいソースになってるかもしんないけど、
一応できたからうp。参考程度にどうぞ (間違ってたらごめんね)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6145.txt
626デフォルトの名無しさん:2008/03/15(土) 09:00:05
英文字A-Zに対して、異なる二つの文字ごとに得点が与えられているとします
最も得点が高くなる文字列を求めたい

例えば3文字で次のように得点が与えられていれば
AB 1
AC 5
BA 2
BC 3
CA 10
CB 1

BCA の得点13が最高得点
627デフォルトの名無しさん:2008/03/15(土) 09:02:50
英字(26文字)を、1-1000までの数字に置き換えても求められるプログラムがよいです
計算量が増えますから、総当たりが難しいです
628626:2008/03/15(土) 09:17:13
巡回セールスマンで最短を最長に変えたものと同じですね
距離をマイナス倍すれば(例えば10から引く)巡回セールスマンと一致しますね
629デフォルトの名無しさん:2008/03/15(土) 09:29:21
でももとの位置へ戻ってこなくて良いところが違いますが・・・
レンタカーやタクシーで巡回するようなものです
630541:2008/03/15(土) 10:48:04
>>625
ありがとうございます。
参考にさせて頂きます。
631デフォルトの名無しさん:2008/03/15(土) 11:06:09
>>626
同じ点(文字)を二度以上通ってもいいですか?
もし、いいなら単純な動的計画法が適用できる気が。
632デフォルトの名無しさん:2008/03/15(土) 11:13:59
>>631
おなじ文字を何度も使ったら値は無限に増えます
ACACACACA・・・・とか 一度だけの並べ替えにしてください
633デフォルトの名無しさん:2008/03/15(土) 11:17:26
>>632
ACA で終わりじゃないの?
634デフォルトの名無しさん:2008/03/15(土) 11:21:06
一度だけの使用で、最も高得点になるものを求めたいです
文字は全て使わなくても良いですが、全部使った方が高得点になります
635626:2008/03/15(土) 11:35:08
すみません 設定を間違えました 出直してきます
636デフォルトの名無しさん:2008/03/15(土) 12:01:14
[1] 授業単元:プログラミング
[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

お願いします。
637デフォルトの名無しさん:2008/03/15(土) 13:01:11
>>634
>文字は全て使わなくても良いですが、全部使った方が高得点になります
それは得点配分しだいじゃないか?
638デフォルトの名無しさん:2008/03/15(土) 20:00:13
>>636
STLのmapをCに移植すればいいんじゃね?
639デフォルトの名無しさん:2008/03/15(土) 20:03:22
リスト構造で実現しろって言ってるのに。
640デフォルトの名無しさん:2008/03/15(土) 20:08:23
>>639は出世しないタイプ
641デフォルトの名無しさん:2008/03/15(土) 20:29:04
>>638
これがマリー・アントワネットの力か……
642デフォルトの名無しさん:2008/03/15(土) 21:14:11
[1] 授業単元:プログラミング
[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の方が楽かもねぇ」と言われてもどっちもわからず・・・
643デフォルトの名無しさん:2008/03/16(日) 05:45:48
644642:2008/03/16(日) 06:50:08
>>643
6日かけてもロクにできなかったのに・・・ありがとうございます
ソース内容理解して説明できるよう頑張ります
645デフォルトの名無しさん:2008/03/16(日) 11:29:30
>>594
取り合えず動く程度の簡易なもの(非VC++)。
ルールはググって上2つぐらいをざっと見ただけなんでもしかしたら間違ってるかも。
役に立つか分かりませんが参考程度にどうぞ。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6150.txt
646594:2008/03/16(日) 15:41:04
>>645
本当にありがとうございます、助かりました。
参考にさせていただきます。
647sage:2008/03/16(日) 18:04:32
[1] 授業単元:プログラミング
[2] 問題文 :入力した西暦が閏年かどうか出力せよ
      閏年:4年に一度であり、100年に一度ではなく、400年に一度である
[3] 環境
 [3.1] OS: windowsxp
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語
[4] 期限: なるべく早く


よろしくお願いします
648デフォルトの名無しさん:2008/03/16(日) 18:23:04
>>647
#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;
}
649デフォルトの名無しさん:2008/03/16(日) 18:27:02
>>647
>[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;
}
650デフォルトの名無しさん:2008/03/16(日) 18:28:39
×char* toshi[]
○static const char * const toshi[]
651636:2008/03/16(日) 18:57:42
[1] 授業単元:プログラミング
[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の「」のに入っている処理の仕方がわかりません。
お願いします!
652デフォルトの名無しさん:2008/03/16(日) 21:55:52
>>636
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6153.txt
651より以前から作ったので適当に変えた箇所がある。
653デフォルトの名無しさん:2008/03/17(月) 00:54:00
>>650
>>649のままで良いんじゃね?こんな所で質問するような奴が
staticだconstを使ったら変に思われちまう。
654デフォルトの名無しさん:2008/03/17(月) 06:18:05
というか、そろそろうるう年の条件式を、効率の良いものにしない?
最初に y%4 == 0 で条件に合わないものはそれ以降は比較しないと。
それが通ったら y%100 != 0 || y%400 == 0 にすると。
655デフォルトの名無しさん:2008/03/17(月) 08:53:34
>>654
A || B はAが真ならBは評価されない。
A && B はAが偽ならBは評価されない。

Bの位置に関数呼び出しを入れたりするとA次第で実行されない、というのはよくバグの原因になる。
656デフォルトの名無しさん:2008/03/17(月) 08:53:55
[1] 授業単元:プログラミング
[2] 問題文 :英小文字をgetsで標準入力より配列テーブルへ入力する
      入力されたデータの個数と共に配列の先頭アドレスを関数 英大文字変換に渡す
      英大文字に変換されたデータをprintfで標準出力に出力する
      ただし、入力するデータの個数は最大10個までとする
      入力のときの表示は「str=」、出力のときの表示は「STR=XXX....X」とする
[3] 環境
 [3.1] OS: windowsxp
 [3.2] コンパイラ名とバージョン: VC 6.0
 [3.3] 言語: C言語
[4] 期限: 今日のお昼頃


よろしくお願い致します
657デフォルトの名無しさん:2008/03/17(月) 09:14:10
>>656
#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';
}
}
}
658デフォルトの名無しさん:2008/03/17(月) 09:15:36
>>655
だから何?閏年の条件式になんでそんな無意味な突込みを???
Bの位置に関数呼び出しをするような条件式じゃないからw
659デフォルトの名無しさん:2008/03/17(月) 09:20:20
>>658
>>654が言うような最適化はすでにされてるって意味なんだが。
660デフォルトの名無しさん:2008/03/17(月) 09:21:57
>>659
はぁ?ちゃんと読め。それから、数多く繰り返し実行をしてみろ。
明らかに4の倍数以外を400で割り切れるかまで条件判定しなくても済むから
処理時間に差が出ているんだが?
661デフォルトの名無しさん:2008/03/17(月) 09:24:10
わかった、ではその速度差が出ると言うコードを提示してくれ。
662デフォルトの名無しさん:2008/03/17(月) 09:27:20
int is_leap_year(int year)
{
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;
}
663デフォルトの名無しさん:2008/03/17(月) 09:28:19
>>661
いや、なんで自分で clock() を用いて検証しない?
何噛み付いてんの?理屈からして筋の通る理論に
無駄で間違った持論で噛み付かれても迷惑。
お前が理解していないとしか言いようがないんだが
664デフォルトの名無しさん:2008/03/17(月) 09:31:14
>>662
いや、だから違うって、なんで先に400で割り切れる条件判定をするんだ?
それが400年に1度で、更に4で割り切れない年も判定するのが無駄だって話なんだが・・・
まず4で割り切れなきゃ、100で割り切れない、または、400で割り切れるという条件判定に
持ち込まないという条件について述べているんだが?
665デフォルトの名無しさん:2008/03/17(月) 09:32:59
裏切り者の福留を許さない。
666デフォルトの名無しさん:2008/03/17(月) 09:39:22
return (year%400==0) || ((year%100!=0)&&(year%4==0));
return (year%4==0 && (year%100!=0 || year%400==0));
667デフォルトの名無しさん:2008/03/17(月) 09:44:42
ここであえて%100から試すのを提案する。

year % (year % 100 != 0 ? 4 : 400) == 0
668デフォルトの名無しさん:2008/03/17(月) 09:52:23
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6154.c
回数を多くすれば、些細なことだが無駄に気づくだろう
669デフォルトの名無しさん:2008/03/17(月) 10:02:13
>year%4==0 && (year%100!=0 || year%400==0)
測ってないけどこの形が最速じゃね。
670661:2008/03/17(月) 10:16:09
>>663
なんで私にレスするのか理解に苦しむ。
噛み付くも何も、>660が阿呆なことを言うから論破しようと思っただけなんだが。
671デフォルトの名無しさん:2008/03/17(月) 13:13:55
>>670
> 阿呆なこと
何が?そうやってアホとか相手を罵倒する発言、人間性を疑うよ。
言葉にはあんたの人間性がモロに露呈しているが、噛み付いているのが
あんただけって気づかない?そう、あんたが話題の本質を理解せずに
勘違いしているだけだろ。論より証拠。あんたもソースで示したら?
論点が食い違っていることが明白だから。
672661:2008/03/17(月) 13:15:34
>>671
このスレは、>661と>670しか書いていないんですが。
それとも、勝手に他人の発言を拡大解釈したがる阿呆ですか?
673656:2008/03/17(月) 13:17:10
>>657
ありがとうございます。助かりました
674デフォルトの名無しさん:2008/03/17(月) 13:17:56
>>669
理屈としてはそれでおk。
675デフォルトの名無しさん:2008/03/17(月) 13:19:19
>>672
あんたさすがに自分の勘違いを認めない上に、このスレに粘着しているのか。
未熟者がでしゃばると、お前みたいな墓穴を掘っても、更に何か言い訳をしたり
相手を否定して自分を押し切ろうとするから嫌われるんだよ。マジ、ソースを出せよ
gdgd言ってねーで。ごちゃごちゃとみっともないんだよ、言い訳するやつって。
676661:2008/03/17(月) 13:21:16
>gdgd言ってねーで。ごちゃごちゃとみっともないんだよ、言い訳するやつって。
いや、自己紹介しなくてもw
677デフォルトの名無しさん:2008/03/17(月) 13:21:50
>>655をもう一度読んでみな。いつ誰がBの位置に関数を呼び出す処理について
話を始めた?ここから勘違いを始めて、それについて必死に弁解する意味がないだろw
なのに、アホだの、なんだこの低俗な品のない奴は?まぁ、春休み中なんで、
どんな精神レベルの低い子供かは分かるが、こんなのがそのまま大人になったら面倒だな。
678661:2008/03/17(月) 13:25:35
おーい、>655はどこに行った?
あんたのレスに粘着されてるぞ〜w

まぁ、いきなり関数呼び出し云々を持ち出した>655も半端に知識をひけらかしたいだけに見えなくもないが。
言っていることは正しいだけに、場とタイミングを間違えたとしか言いようがないな。
恐らくは、安易に短絡構文を使ってデバッグに苦労した経験でもあったのだろう。

>>677
で、誰が何をどう勘違いして、どう弁解していると「あんたは」考えているのかな?
679デフォルトの名無しさん:2008/03/17(月) 13:50:49
言ってることは正しくてもコミュニケーション能力が不足していたら伝わらない典型だな。
別に君が相手側を説得することにメリットがあるわけでも無し、そろそろ放っておいたらどうよ。
どっちにとは言わんけど。
680デフォルトの名無しさん:2008/03/17(月) 13:51:37
議論なら他でやれカスども
681デフォルトの名無しさん:2008/03/17(月) 14:02:30
>>668

> 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) {
682デフォルトの名無しさん:2008/03/17(月) 14:46:59
うるう年の判定なんて別に高速じゃなくてもいいじゃないか。
683デフォルトの名無しさん:2008/03/17(月) 14:50:06
まぁ、事実上4年に一度で充分だしね。
# まさか、1900年や2100年を処理しなくてはいけないケースなんてそうそうないだろ。
684デフォルトの名無しさん:2008/03/17(月) 14:53:45
問題になるほど何回も何回も判定を行うなら、0〜3000くらいの判定表(0か1が入るintとかcharの配列)を作ってテーブル参照にするとか。
範囲外はいつものの方法でやるとして。
685デフォルトの名無しさん:2008/03/17(月) 15:00:48
発想は悪くないけど、無駄だから。
686デフォルトの名無しさん:2008/03/17(月) 16:23:50
はぁ・・・効率よく、無駄を省くという点が重要なのに、やれ自分にとって
必要あるないだの、何を基準に話を始めてんだ?
それが分かってないから、お前らはいつまで経っても
客観的な立場、意見が重要となる社会に出てまともに活動が出来ないんだよ。
路上じゃあんたらにとってそんなルールは必要ないとか都合が悪いとか言ってると
すぐに事故るぞ。自分が原因で。
687デフォルトの名無しさん:2008/03/17(月) 16:28:44
まともに議論できる奴はこのスレにはいないな。
所詮は宿題スレか。
688デフォルトの名無しさん:2008/03/17(月) 16:34:18
効率の基準が違うから〜♪
スレ違いはしょうがない〜♪
689デフォルトの名無しさん:2008/03/17(月) 16:36:06
宿題スレに何を期待してたんだ…
690デフォルトの名無しさん:2008/03/17(月) 17:24:37
>>668
かなり差が出るんだな。
正直、感動した。

>>681
もう少し詳しく
691デフォルトの名無しさん:2008/03/17(月) 20:02:49
400の倍数に該当しない、100で割り切れたときの判定が不十分か。
たまたまその前年が平年でleapを平年の値で受け継いでいるが。
692デフォルトの名無しさん:2008/03/17(月) 20:24:39
>>691
説明ありがとん。
つーか、自分の鈍さに絶望。
693648:2008/03/17(月) 22:17:07
俺が最初に4で割り切れるかを判定しなかったばかりに、スレがこんなことに!w
694デフォルトの名無しさん:2008/03/18(火) 00:19:46
[1] 授業単元:プログラミング
[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] 期限: 今日の朝まで

よろしくおねがいします
695デフォルトの名無しさん:2008/03/18(火) 00:33:20
>>694
#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;
}
696デフォルトの名無しさん:2008/03/18(火) 06:33:18
久しぶりにアイツが来たのかと思ったじゃねーかw
697デフォルトの名無しさん:2008/03/18(火) 07:03:53
>>654
過去スレでも似たような議論あったな。
int isLeapyear(int year)
{
return year%4 ? 0 : year % 100 ? 1 : year % 400 ? 0 : 1;
}
&&とか||使わないでこれで十分じゃね?
698デフォルトの名無しさん:2008/03/18(火) 07:31:13
えっと、4で割り切れても100で割り切れた場合の対処が不十分だったという指摘があったが・・・
とにかく、4の倍数に当たらないものまで、100で割り切れるかどうか、400で割り切れるかどうか
といった判定にまで持ち込まなければ、その無駄がかなり省けるというのは
繰り返す回数を増やして目に見える処理時間の差を出したコードを参照して頂ければお分かりになられるかと。
699694:2008/03/18(火) 07:43:30
>>695
ありがとうございます
700デフォルトの名無しさん:2008/03/18(火) 08:47:13
まぁ、それほど大きなロスではないが、関数を呼び出して値を返す仕組みと、
main関数の中に条件判定を入れて処理するのとでは、自分の環境で計測したところ、
1.7倍の差が出た。mainの中で判定した場合で1秒だと、関数を呼び出した方は1.7秒。
701デフォルトの名無しさん:2008/03/18(火) 09:05:24
まさかとは思うが、最適化しないで較べてないか?
702デフォルトの名無しさん:2008/03/18(火) 13:59:46
最適化しちまったら同じになってしまうだろう
703デフォルトの名無しさん:2008/03/18(火) 19:13:06
最適化して同じになるなら
コードが読みやすいほうが良いに決まってるだろ。
実用時は最適化するんだから。
704名無しです:2008/03/19(水) 22:00:09
[1] 授業単元:プログラミング
[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言語初心者なのでなるべく簡単にしてくれるとありがたいです.

リンクの張り方がわからず、問題文が長くなりお手数をかけて申し訳ありません。
どうぞよろしくお願いします。
705デフォルトの名無しさん:2008/03/20(木) 06:51:42
>>704
4.が意味不明。
ポインタを使わなければ任意で複数のエッジの表現はできない。
706名無しです:2008/03/20(木) 09:40:57
4について、領域を(配列を用いて)静的に確保するか,ポインタを用いて動的に確保するかの選択が必要です.
「静的」と「動的」とは,例えば配列 a[10]のように格納する領域が指定されているのを静的といい,
動的というのは問題によりその格納する領域が変化すると、説明されました

文章が稚拙でわかりにくいところが多々あるかもしれませんが、よろしくお願いします
707デフォルトの名無しさん:2008/03/20(木) 11:43:20
>>706
リストは動的に領域を確保しないと意味ないぞ。
目的が単にスタック、キューの実現なら、配列を使って実装できるけど、
リストを使うことが課題で決められているなら、動的に確保するしかない。
708デフォルトの名無しさん:2008/03/20(木) 11:52:50
多分リスト構造で表現するのと
ノード数Xノード数の2次元配列を使う表現の2種類を区別しろというこではなかろうか?
709名無しです:2008/03/20(木) 11:55:02
なるほど。課題でリストを使うようにと言われているので動的に確保したいです。
後出しになってしまってすいません。ご教授お願いします
710デフォルトの名無しさん:2008/03/20(木) 12:06:38
あとファイルのフォーマットがわからないと
後出しでファイルの入出力の仕様追加が発生すると困りそうだな。
711デフォルトの名無しさん:2008/03/20(木) 12:08:32
>>708
なんか俺もそう思うんだが、
>>704の1にはグラフデータを記憶する隣接リストの作成って書いてあるんだよな。
なんか余計分からなくなってきた…orz
712デフォルトの名無しさん:2008/03/20(木) 12:15:52
>>709
もう少し詳しい課題の内容が分からないと教えられないかも
713デフォルトの名無しさん:2008/03/20(木) 12:22:42
実は元教官の俺が言うのもなんだが、
ワザと曖昧な出題をして学生がちゃんと仕様を確定する的確な質問をするか。
頓珍漢な答えを提出するか。
曖昧さの中から考えられるすべてのケースを想定して複数回答を提出するか
というのを試したことがある。
714デフォルトの名無しさん:2008/03/20(木) 12:32:57
>>713
>>704が出された正確な課題で、わざと曖昧な課題にしてあるのなら
いくらでも作りようがあるけど、なんか単に課題が書ききれてないだけのような気が…。
715デフォルトの名無しさん:2008/03/20(木) 13:17:43
このスレのことをよく知っていて、わざと曖昧に出題してるとか…
716デフォルトの名無しさん:2008/03/20(木) 13:23:05
ちなみに713がどんな問題を出したのか気になる
717名無しです:2008/03/20(木) 13:47:10
たぶん>>708だと思います。
ファイルの入出力の仕様というのはfopenとかのことでしょうか?
「リスト構造」を基に「スタック」,「キュー」,およびグラフのデータ構造(隣接リスト等)を実現し,
アルゴリズムに従い,グラフ上を探索し,得られた探索木を出力してもらうプログラムの作成と課題には
書いてあるのですが、これじゃ情報不足でしょうか?
至らぬ文章力ですいません orz
718デフォルトの名無しさん:2008/03/20(木) 14:04:39
どこかに書いてあるなら、書いてあることすべて写して書き込めばいいのに
量が多いなら>>1のうpろだを使うとかして。
719名無しです:2008/03/20(木) 19:55:13
ファイル http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6158.txt
読み込むデータはこれを渡されました。
720名無しです:2008/03/20(木) 22:46:18
期限で3月20日20:00と書きましたが解けるまでやらなきゃいけないので
ぜひご指導お願いします  何度も書き込んですいません orz
721デフォルトの名無しさん:2008/03/20(木) 23:26:25
>>720
で、グラフの探索とのことですが、何を探索すればいいのでしょうか?
1: 2 3 4 5 10
とかあるのは、「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」という意味でしょうか?
そして、互いに一番遠い距離にあるノードの組を求めればいいのでしょうか?
何か情報をくださらないと、これだけでは私は解けないのです。
722名無しです:2008/03/21(金) 07:52:46
1: 2 3 4 5 10とあるのは、「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」
という意味です。
ファイル http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6159.txt
深さ優先探索を途中までやって間違っているやつを知り合いにもらいました。これを
書き直してわかりやすようにしてはもらえないでしょうか?  お願いします
723デフォルトの名無しさん:2008/03/21(金) 10:21:30
>>704
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6160.c
ごり押しで作ってたら、かなり汚いソースになってしまった
初心者には難しいと思うから、ほとんど参考にはならないと思うけど
だれもうpしてないので上げてきます
724デフォルトの名無しさん: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#だけどやってもいいか。という方いらっしゃいましたらお願いします。
725デフォルトの名無しさん:2008/03/21(金) 16:05:35
内容が変じゃないか?ここ作成依頼スレじゃないぞ
ぶっちゃけ知りたいこと課題に偽装しただけにしかみえない
726名無しです:2008/03/21(金) 22:17:45
>>704作って頂きありがとうございます。
ですがすいませんわからないです orz
>>722のやつを作り変えて簡単なプログラムを作れないでしょうか?
何度もお願いして悪いと思うのですがお願いします。
727デフォルトの名無しさん:2008/03/22(土) 13:16:37
未だに>>704の問題文が意味わからんのは俺だけ?

「ノード1 と隣接するのは、ノード2, 3, 4, 5, 10 である。」
これだけ求めたいのなら、ファイルから読み込んだデータを線形リストに格納して
ノード番号の位置のデータを参照するだけで済むだろう。
スタック、キューなんて使う必要ないし使いどころがないよな。
>>721のいうように互いに一番遠い距離にあるノードの組を求めるとか、そんな問題ならわかるが。
728デフォルトの名無しさん:2008/03/22(土) 13:37:49
729デフォルトの名無しさん:2008/03/22(土) 13:43:50
>>727
> 未だに>>704の問題文が意味わからんのは俺だけ?
本人も含めて誰もわかっていないのでは?

>>704からは、実装方法に関する制限は読み取れるが、
結局どういう問題を解きたいのかが示されていない。
730デフォルトの名無しさん: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 もそんな感じだ。
・グラフの連結成分分解って書いてあるからここは深さ優先を使うことになるはず。
731デフォルトの名無しさん:2008/03/22(土) 13:52:04
まとめるとこういうことだろう。

・両方向環状リストの実装
・上記を用いた、スタック、キュー、隣接リストの実装
・上記を用いた、深さ優先探索、幅優先探索アルゴリズムの実装(出力は探索木)
・上記を用いた、グラフの連結成分分解の実装

これ、何回かに分けて出された課題をまとめてやろうとしてるんじゃないの?
732名無しです:2008/03/22(土) 15:01:51
説明が下手でみなさんを混乱させてしまって本当に申し訳ありません。
>>731さんがまとめてることをしたいんです。こんなにわかりにくい説明で
理解してくださってありがとうございます。
733名無しです:2008/03/22(土) 19:43:43
>>731さんのを基にもう一度作ってもらうわけにはいかないでしょうか?
私が最初から>>731さんのように書けば良かったのですが、説明が下手なのと
理解力がないばかりに orz
734デフォルトの名無しさん:2008/03/22(土) 23:56:13
735733:2008/03/23(日) 00:03:31
>>734
リングリストなのに double ended はねーよ orz
736デフォルトの名無しさん:2008/03/23(日) 00:17:48
double circular linked list が正しい英語
737733:2008/03/23(日) 00:21:49
>>734 はバグってた

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6165.c
訂正内容
次の行を追加
list->next->prev=ret;
738デフォルトの名無しさん:2008/03/23(日) 06:55:06
>>733
>>737 を元にスタック実装して、グラフの連結成分分解を作ってみた
連結成分について考え方が間違ってたらすまん
できるかぎり簡単にしたつもり
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6166.c
739デフォルトの名無しさん:2008/03/23(日) 10:14:59
[1] 授業単元:プログラミング
[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] その他の制限: なし

レベルが違うような質問で申し訳ありません・・。
スレ違いでしたらスルーでお願いします。
740デフォルトの名無しさん:2008/03/23(日) 10:19:48
Javaの宿題スレにゴー
741デフォルトの名無しさん:2008/03/23(日) 10:34:10
>>740

ご親切にありがとうございました。
742デフォルトの名無しさん:2008/03/23(日) 17:05:36
なんだか和んだぞ。
743デフォルトの名無しさん:2008/03/23(日) 19:59:02
ナゴナゴ
744名無しです:2008/03/23(日) 22:19:32
みなさん>>704を解いて頂きありがとうございました。
745デフォルトの名無しさん:2008/03/24(月) 00:22:15
>>738
あぁ・・・ミスった
memset(adj, 0, sizeof(adj)*NODENUM*NODENUM); を
memset(adj, 0, sizeof(int)*NODENUM*NODENUM); に変えてね・・・
746デフォルトの名無しさん:2008/03/24(月) 04:54:50
[1] 授業単元:プログラミング
[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] その他の制限:なし
747デフォルトの名無しさん:2008/03/24(月) 06:15:00
教官からどう指示されたのか不明だが、
フローチャートは矢印で繋ぐだけじゃ不十分だよ。
748746:2008/03/24(月) 08:06:46
矢印だけではダメなのはわかっています、確かに不十分ですよね
それ以外は自分でんはんとかしようと思っているので・・・
ここではそれしか表現できなくて
749デフォルトの名無しさん:2008/03/24(月) 09:55:10
丸投げするか自分で全部やるかどっちかにしろよこんな簡単なもの。
この程度の物は矢印をまともに全部書いたらほとんどそれで答えじゃねーか。
750746:2008/03/24(月) 10:37:09
その程度すら分からないんです、スイマセン・・、丸投げでおねがいします。
751デフォルトの名無しさん:2008/03/24(月) 10:55:48
もう時間ないが、処理の流れはわかっているようだから
ソースにくどいほどコメント書いて、それを適切な四角で括って
矢印で繋げばいいんじゃねーの。
752デフォルトの名無しさん:2008/03/24(月) 12:35:40
○開始

◇センスの有無
↓あり    ↓なし
□合格処理□不合格処理
↓←───┘
○終了
753デフォルトの名無しさん:2008/03/24(月) 13:24:28
[1] 授業単元:プログラミング
[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

よろしくお願いします。
754デフォルトの名無しさん:2008/03/24(月) 13:31:41
>>753
超初心者の宿題だろう 自分で出来ないのかよ
755デフォルトの名無しさん:2008/03/24(月) 13:32:42
>>753
strcatと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;
}
756デフォルトの名無しさん:2008/03/24(月) 13:34:34
>>754
なんだと!テメこのやろー
ここがどこだか分かってるのか?
戦闘アドレス なめんなよ
757デフォルトの名無しさん:2008/03/24(月) 13:38:50
ああ、main部分も書くのか。じゃあこれを>>755の関数定義の下に付けといて。
(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));
}
758デフォルトの名無しさん:2008/03/24(月) 14:15:04
>>757
助かりました。
ありがとうございます。
759名無しです:2008/03/24(月) 17:44:14
>>704なんですが>>738で解いてもらったやつでプログラムの動作チェックを行ったら,
コンパイルすると「int main(int argc, char **argv){   /*argv main関数に引数を渡す*/」
でエラーが出てしまいます.
エラー表示は「'0x40'は認識できません」と「'0x81'は認識できません」の2つが出てしまいます.
後,幅優先探索と連結成分分解のプログラムは>>738には入ってないんでしょうか?
何度もレスしてすいません.どうかお力を貸してください.
760デフォルトの名無しさん:2008/03/24(月) 17:46:39
コメント以外のところに全角スペースがあるんだろ
761デフォルトの名無しさん:2008/03/24(月) 21:21:20
>>759
幅優先探索は入ってない
連結成分分解ってのが、つながってる点をまとめて表示することでないなら、
俺の連結成分の考えかたが間違ってる
762デフォルトの名無しさん:2008/03/25(火) 00:00:16
>>759
連結成分分解は、>>738で問題ない?
問題ないなら、幅優先探索での連結成分分解も作るけど
(キューの実装できれば深さ優先探索とほとんど処理変わらないから、
必要ないかもしれないけど)
763デフォルトの名無しさん:2008/03/25(火) 02:17:34
ちょっと面白い問題考えたから、みんなで解いてみてくれ。
Python で作ったプログラムで N < 10 までは試したけど、
発展問題についてはまだやってない。

基本問題:
例えば N = 8 としたときに
「この文章には0が1個、1が5個、2が3個、3が2個、
4が1個、5が2個、6が1個、7が1個含まれています」
という文章が生成されるとして、9以下の任意の自然数Nについて
もこのような文章を生成するプログラムを作れ。
解がない場合は「解なし」とする。

発展問題:
Nが10以上の時、解はあるだろうか?
764デフォルトの名無しさん:2008/03/25(火) 02:30:37
0から順に数えていき、値が更新されたら追加していけばいつか出来ると思うが
765デフォルトの名無しさん:2008/03/25(火) 02:46:44
基本問題がわからない
766デフォルトの名無しさん:2008/03/25(火) 02:50:48
>>765
文書中に現れる文字をカウントして正しい文書にする
767デフォルトの名無しさん:2008/03/25(火) 02:54:58
もし解があることがわかれば総当たりでやればいつか解けるので
いつでもとけるのかどうかを考えればよい
768デフォルトの名無しさん:2008/03/25(火) 02:55:46
>>765
正しい自己言及文を生成する問題。
「」の中の数字の数と文章の内容を確認すれ。
769デフォルトの名無しさん:2008/03/25(火) 03:04:03
0、1、・・・N-1と並べて、
0の個数をカウントしてそれを記録
次に1の個数をカウントして記録 もしその個数に0が現れれば0を更新
それにも1が現れれば1の個数を更新
・・・・
無限に値が更新される事はなく次へ進めるとは思う

たとえば0が現れるのは桁上がりが現れるときだから(何度か更新を繰り返したとすると)
一度に0がいくつも増えなくては行けなくなりいつか停止すると思う
770デフォルトの名無しさん:2008/03/25(火) 03:07:45
解ありをちゃんと説明してくれれば後は簡単なんだ だれか頼む
771デフォルトの名無しさん:2008/03/25(火) 03:14:53
「1が1個」
  ↓
(あ、1の数が変わった。更新しよう)
  ↓
「1 が 2 個」
  ↓
(あ、1の数が1個にもどった。更新しよう)
  ↓
無限ループ。

772デフォルトの名無しさん:2008/03/25(火) 03:17:33
解無しも有るのか・・・
773デフォルトの名無しさん:2008/03/25(火) 03:25:48
nがn個ってなったら駄目なんだな 
そうなる所はカウントを保留しておき個数が変化するのを待ってカウントするか
簡単にはできそうにないね
巡回セールスマンと同じ種類では?

774871:2008/03/25(火) 03:27:12
(さっき Python スレで突っ込まれた)
ちなみに、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"という部分文字列の数」という解釈にしようと思う。

775デフォルトの名無しさん:2008/03/25(火) 03:29:53
N=1は解あるだろ
0が1個じゃないの?
間違えている?
776デフォルトの名無しさん:2008/03/25(火) 03:31:13
N=2 0が1個、1が2個では? どこか間違えている?
777デフォルトの名無しさん:2008/03/25(火) 03:31:36
N以上が現出するとダメらしい。
778871:2008/03/25(火) 03:34:29
「0が1個」
だと、0については言えてるけど、
1について言及が無いので美しくない(俺的に)
できれば文章中に出てくる全ての数字について言及させたい。
だから <N 以上の数を使わない>てルールをつけたんだ。


779デフォルトの名無しさん:2008/03/25(火) 03:34:50
そしたら総当たりの有限時間では解判定は出来るんだな
その制限を外した場合は>>771のような無限ループは発生するのだろうか?
780デフォルトの名無しさん:2008/03/25(火) 03:44:13
N以上が現れない場合でも、簡単には求められないよな
試行錯誤か、全パターンを生成して文書チェックするかくらいで
いずれにしても時間がかかる 
例えばN=1000を一日以内に解くプログラムとかは作れないんじゃないか?
781デフォルトの名無しさん:2008/03/25(火) 04:38:11
0が1個、1が12個、2が3個、3が2個、4が1個、5が1個、6が1個、7が1個、8が1個、
9が1個、10が1個、11が1個、12が2個、13が1個、14が1個。
782デフォルトの名無しさん:2008/03/25(火) 04:57:56
>>781
その文章中の0は2個ありそうだ。
例えば11という数字があった場合、1として2個で11として1個と数えるのか、
それとも11という塊になっている場合は1としてはカウントしないのか。
783デフォルトの名無しさん:2008/03/25(火) 04:59:50
111は、1が3つ、11が2つ、111が1つ
ですよね
784デフォルトの名無しさん:2008/03/25(火) 05:01:08
こういう問題の場合数えないのが普通だと思うけど。
785デフォルトの名無しさん:2008/03/25(火) 05:04:00
異なるものがいくつあるのか正しく求めるのが正解のはずだ
783が正解
786デフォルトの名無しさん:2008/03/25(火) 05:14:04
数値の組み合わせ(順序数, 順序数と個数自身を含めた個数)について無矛盾にする問題とみなすか、
文章から得られる全ての部分文字列の集合内の数値に相当する要素の個数について無矛盾にする問題とみなすか。
787デフォルトの名無しさん:2008/03/25(火) 05:18:23
これはやる意味ないと思っている 
巡回セールスマンと同じく多項式時間では解けないというやつと思う
プログラム作るだけ時間の無駄と思っている
788デフォルトの名無しさん:2008/03/25(火) 11:22:49
0が2 1が8  2が3 3が3
4が1 5が1 6が1 7が1
8が2 9が1 10が1
789デフォルトの名無しさん:2008/03/25(火) 11:25:04
一般Nで解けるソースはりつけてよ
790デフォルトの名無しさん:2008/03/25(火) 11:53:54
const int N = <整数>
std::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); }

791名無しです:2008/03/25(火) 12:20:30
流れを切って申し訳ありません
>>704の問題ですが
>>738さんのでやると連結成分分解のプログラムの動作を確認できるんですけど,ずっと同じ出力結果なんです。
出力結果の数字が何を指しているのかわからないのでどのような意味なのか教えてもらえないでしょうか?
幅優先探索での連結成分分解もよくわからないので作っていただけないでしょうか?
よろしくお願いします
792デフォルトの名無しさん:2008/03/25(火) 13:42:01
>>789
間違ってるかもしれないし、厳密解でもない
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6174.c
793デフォルトの名無しさん:2008/03/25(火) 15:38:35
763って個数の合計はN*2に決まってるんだから
対数時間で計算出来そうにみえるけど
ナップザック系とは関係なくないか
794デフォルトの名無しさん:2008/03/25(火) 16:26:33
>>763
面白いな
795デフォルトの名無しさん:2008/03/25(火) 20:59:56
コード貼るならここがいいよ
ttp://codepad.org
実行結果までやってくれる
796デフォルトの名無しさん:2008/03/25(火) 21:48:06
[1] 授業単元:プログラミング言語
[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つが分かりません。よろしくお願いします。
797796:2008/03/25(火) 21:49:55
申し訳ありません。OSと言語のこと忘れてました。
OSはwindowsで言語はC言語です。
798デフォルトの名無しさん:2008/03/25(火) 21:55:15
>>796
一問だけ解いてみた
#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;
}
799デフォルトの名無しさん:2008/03/25(火) 22:01:47
>>763
やってみたけど問題としてはツマンナイ答えしかでないっぽいよ。
いいアルゴリズム探す気力なくなったの途中でやめました..
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6178.c
800デフォルトの名無しさん:2008/03/25(火) 22:08:22
>>799
対応しているのは N=10 まで?
801799:2008/03/25(火) 22:10:25
10行目まちがえた。適当でごめん
× if( c[ a[ i ] ] != 1 )
○ if( c[ i ] != 1 )
802デフォルトの名無しさん:2008/03/25(火) 22:13:38
800
N=19ぐらいまで。それ以上でも正解は同じパターン一個っぽい。
(のでそれ以上追求するのやめました。)
803796:2008/03/25(火) 22:16:38
>>798
ありがとうございます。putchar使えば良かったのですね。
804デフォルトの名無しさん:2008/03/25(火) 22:18:17
>>802
N=11 のときに 0 と 1 の個数が違うんだが…
805デフォルトの名無しさん:2008/03/25(火) 22:28:36
>>796
下の奴適当にやってみた
曜日を調べるのは「C言語 曜日」でぐぐって一番上の奴使った
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6179.txt
806デフォルトの名無しさん:2008/03/25(火) 23:14:47
>>800のやつを貼付けてみた。
ttp://codepad.org/3hP8x4xd
807デフォルトの名無しさん:2008/03/25(火) 23:32:13
>>791
全部のグラフで同じ出力結果になるってこと?
出力結果はただ単に、到達可能な点をまとめて{ }で囲んで表示してるだけ
出力結果が何を指しているのか分からないってことは、
>>738のプログラムがあってないってことなんで、幅優先探索は作れない
808デフォルトの名無しさん:2008/03/26(水) 10:24:33
>>796
1番目の問題の表示例は
AZZZZZZZZZZZZZZZZZZZZZZZZZZ
BBYYYYYYYYYYYYYYYYYYYYYYYYY
CCCXXXXXXXXXXXXXXXXXXXXXXXX
の間違いか?
AZZZZZZZZZZZZZZZZZZZZZZZZZZZ
BBYYYYYYYYYYYYYYYYYYYYYYYYYY
CCCXXXXXXXXXXXXXXXXXXXXXXXXX
だと26行目は
ZZZZZZZZZZZZZZZZZZZZZZZZZZAA
になってしまうぞ。
809デフォルトの名無しさん:2008/03/26(水) 20:37:58
[1] 授業単元: プログラミング演習
[2] 問題文:5人のテストの点数をキーボードから入力し、合計と平均を表せ。
[3] 環境
 [3.1] OS: Windows・Linux/
 [3.2] コンパイラ名とバージョン:
 [3.3] 言語: C
[4] 期限: 明日まで
初期的な問題ですがお願いします。
810デフォルトの名無しさん:2008/03/26(水) 20:55:18
>>809
#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);
}
811デフォルトの名無しさん:2008/03/26(水) 23:19:00
test+iでええやん。
812デフォルトの名無しさん:2008/03/26(水) 23:25:25
>>811
君は一年後自分のレスを思い出してこう言うだろう
「認めたくないものだな、自分自身の若さ故の過ちと言うものを。」
813812:2008/03/26(水) 23:27:41
おれは今自分自身の過ちを後悔している
コピペ元が間違ってた orz

「認めたくないものだな。自分自身の、若さ故の過ちというものを。」
814デフォルトの名無しさん:2008/03/26(水) 23:55:53
ガノタ乙
と言って欲しいんだろ?
815デフォルトの名無しさん:2008/03/27(木) 00:01:02
>>812-813
なんだこいつ・・・
816デフォルトの名無しさん:2008/03/27(木) 00:07:28
それより>>811の解説してくれ
817812:2008/03/27(木) 00:18:13
>>816
シンタックスシュガーを知ったばかりなので使いたがっている状態
818デフォルトの名無しさん:2008/03/27(木) 01:08:39
糖衣構文でええやん。
819デフォルトの名無しさん:2008/03/27(木) 02:17:54
ところで、
>>44
> /* 文字列の長さ */
> for(str_length=0; str[str_length]; str_length++) {}

ではなく
str_length = sizeof (str) - 1;

だと思うが。
820デフォルトの名無しさん:2008/03/27(木) 02:20:36
>>811
そもそもtest[5]はscoreでええがな
821デフォルトの名無しさん:2008/03/27(木) 02:30:33
>>819
わざわざ「文字列の長さ」と書いてあるんだから配列の大きさを基準にしちゃダメじゃないか?
822デフォルトの名無しさん:2008/03/27(木) 09:03:35
>>817
こいつもしかして、test[i]こそがシンタックスシュガーだということを知らないのでは・・・
823デフォルトの名無しさん:2008/03/27(木) 10:49:45
>>816
test[i]は*(test+i)のシンタックスシュガー
&test[i]は&*(test+i)のシンタックスシュガー
&*ってムダじゃね?ってことだろ。
824デフォルトの名無しさん:2008/03/28(金) 14:09:52
糖衣だろうがなんだろうが &test[i] なんて書き方はしねーよ
825デフォルトの名無しさん:2008/03/28(金) 14:17:26
それが、&test[i]の方が多数派だったりするんだよw
826デフォルトの名無しさん:2008/03/28(金) 14:29:03
確かに&test[i]って記述はよく見かけるね
俺は個人的に好かない書き方だ
Cの配列とアドレッシングとの関連がわかってないのかな
827デフォルトの名無しさん:2008/03/28(金) 15:00:27
俺はCだと基本どうでもいい。所詮、構文糖。
が、C++だと&a[i]とa+iの意味が違う事がある。(std::vector等)。
STL等のランダムアクセス可能なコンテナだと&a[i]は使えるけどa+iは使えない。
そうなるとCを使うときもC++の流儀に合わせて&a[i]と書きたくなる。
828デフォルトの名無しさん:2008/03/28(金) 15:21:10
vectorで&a[i]なんて何に使うんだ?
829デフォルトの名無しさん:2008/03/28(金) 15:45:00
char*を要求する関数を呼び出すときとか
830デフォルトの名無しさん:2008/03/28(金) 15:55:40
char*ならstd::string使えよ・・・
831デフォルトの名無しさん:2008/03/28(金) 16:00:56
非constのchar*が必要なとき
832デフォルトの名無しさん:2008/03/28(金) 16:48:17
&を見れば定義をみないでもアドレスであることがわかる
ソース中の[をみれば配列にアクセスしている箇所を
testをキーワードにして検索したりしないでもすぐ探せる
保守しやすくなるからワザとやってるんじゃないの
833デフォルトの名無しさん:2008/03/28(金) 16:52:58
>>826
Cの配列とアドレッシングとの関連がわかっていることと
&test[i]と書くことは全く別問題。
834デフォルトの名無しさん:2008/03/28(金) 22:46:33
&test[ i ] 配列testのi番目の要素のアドレス
test + i ポインタtestからi * nずらしたアドレス
って感じだから前者の方がしっくりくるって人が多数派ににるんじゃない?
835デフォルトの名無しさん:2008/03/28(金) 23:52:10
&test[i]って書き方はあまりしないけど、&test[0]って書き方なら結構するな
testだけだとパッと見わかりにくいし。
836デフォルトの名無しさん:2008/03/29(土) 04:23:24
>>835
char buf[1024];
int size = sizeof(&buf[0]);
って書くってこと?
837デフォルトの名無しさん:2008/03/29(土) 04:35:51
オッス、オラC言語歴10年、もっとオラがwktkするような宿題を依頼してくれYO!
838デフォルトの名無しさん:2008/03/29(土) 04:42:23
>>836
何をしたいのか理解できない
839デフォルトの名無しさん:2008/03/29(土) 14:17:42
整数を入力してください:25
1234567890123456789012345


こんな感じで1234567890123…を読み込まれた整数の個数だけ繰り返し表示するプログラムを作成する問題なのですが
誰か教えて頂けないでしょうか?
840デフォルトの名無しさん:2008/03/29(土) 14:27:22
[1] 授業単元:
[2] 問題文(含コード&リンク):>>839
[3] 環境
 [3.1] OS:Windows xp
 [3.2] コンパイラ名とバージョン:BCC Developer 1.2.21
 [3.3] 言語:C
[4] 期限:[無期限]
[5] その他の制限:独学ゆえに聞ける人が居なくて困ってます
841デフォルトの名無しさん:2008/03/29(土) 14:29:21
printf("%u", n%10);

あとは頑張れ。
842デフォルトの名無しさん:2008/03/29(土) 14:30:16
>>839
#include <stdio.h>
int main()
{
int n, i;
printf( "整数を入力してください:" );
scanf( "%d", &n );
for(i=1; i<=n; i++) putchar( '0'+i%10 );
return 0;
}
843デフォルトの名無しさん:2008/03/29(土) 14:30:26
独力で学習することが独学。
聞ける人がいないのは孤独。
844デフォルトの名無しさん:2008/03/29(土) 14:31:01
>>841
勉強用に捻くれたコードにしてみた。
#include<stdio.h>
int main(void){
    int n;
    printf("整数を入力してください:");
    for(scanf("%d",&n);n>0;n-=10)
        printf("%.*s",n,"1234567890");
    return 0;
}
845844:2008/03/29(土) 14:31:36
おっとアンカミス
s/841/840
846デフォルトの名無しさん:2008/03/29(土) 14:42:21
ありがとうございます!
上京したてで友達がいない中、予習してまして…
847デフォルトの名無しさん:2008/03/29(土) 14:50:16
勉強用に、の意味がわからない
848デフォルトの名無しさん:2008/03/29(土) 16:14:46
勉強用に捻くれたコードを提示すると、捻くれた知識が身に付くだけだぞ。
849デフォルトの名無しさん:2008/03/29(土) 17:55:02
と、捻くれた人が言ってます
850デフォルトの名無しさん:2008/03/29(土) 18:43:08
>>840>>844 は師匠と弟子か?
もしそうならスレ立てしてそっちでやれよ
ついでに俺は前置きで
> こんなの書いても現段階だと悪影響にしかならん気はするぞ
って書いておいたんだがな
851デフォルトの名無しさん:2008/03/29(土) 18:55:00
>って書いておいたんだがな
どこに?
852デフォルトの名無しさん:2008/03/29(土) 19:11:50
>>850
>>840 と >>844 は師匠と弟子か? 
いや、まったく関係なし。
単に暇つぶしで適当かつ、それなりに捻くってコードを書いただけ。
真面目なコードは既に出てたし、こういう捻った書き方もあるよーってね。

#まぁぶっちゃけprintfの書式で遊んでみたかっただけなんだけど。
853デフォルトの名無しさん:2008/03/29(土) 19:16:56
勉強用に、って自分の勉強のことか
854デフォルトの名無しさん:2008/03/29(土) 21:07:15
変なコードを書くときは、一々捻くれたとか書かないでそのまま書く。
そういうことを書くとちょっと変わった俺臭がきついから。
855デフォルトの名無しさん:2008/03/29(土) 21:10:10
いよいよCにすら関係なくなってきたぞ
856デフォルトの名無しさん:2008/03/29(土) 23:39:59
まぁ、ぶっちゃけ、これらを習って最終的に何を作る目的があるのか?
自分も大学生時代にC言語の授業はあったけど、そこで習ったことだけじゃ通用せんが
必要なことは習っていた。その後、自分でライブラリを調べて、日ごろの使用目的に応じて
必要なプログラムを作るようになった。そうなるのが望ましい。
857デフォルトの名無しさん:2008/03/30(日) 00:22:05
まあここに来るのは「プログラムの宿題マンドクサ。誰かにやってもらおう」って人だから、望むべくもないかもね。
858デフォルトの名無しさん:2008/03/30(日) 00:36:29
それくらいの人の方がうれしい
単位がかかってるとか理解できないからもっと簡単にしてくれとかちょっとうざい
859デフォルトの名無しさん:2008/03/30(日) 00:43:56
何でも良いから宿題かもん
860デフォルトの名無しさん:2008/03/30(日) 00:46:37
ひまなら project Euler でもやってれば
861デフォルトの名無しさん:2008/03/30(日) 00:48:37
おおやってみるdクス
862デフォルトの名無しさん:2008/03/30(日) 12:55:14
[1] 授業単元:アルゴリズム
[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つとも配列に格納してある状態です。よろしくお願いします。
863862:2008/03/30(日) 12:57:51
↑書き忘れました。
規定の文字列というのは2分探索法ですので aaabbcのように辞書順にソートされている1行の文字列です。
864デフォルトの名無しさん:2008/03/30(日) 13:32:09
 | 1 2 3 4… 9
---------------------
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を使って作りたいのですが、どうしたらよいのでしょうか?

865デフォルトの名無しさん:2008/03/30(日) 14:02:38
int main()
{
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;
}
866デフォルトの名無しさん:2008/03/30(日) 15:06:39
>>862
mainは適当に書いたから書き直したほうがいいかも
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6186.c
867デフォルトの名無しさん:2008/03/30(日) 15:09:28
>>862
二分探索には標準ライブラリ関数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;
}
868867:2008/03/30(日) 15:21:42
>>863を把握していなかった。修正。
#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;
}
869デフォルトの名無しさん:2008/03/30(日) 18:03:32
>>864
int 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);
}
870デフォルトの名無しさん:2008/03/30(日) 18:08:44
871デフォルトの名無しさん:2008/03/30(日) 20:50:16
〉〉868
アルゴリズムの問題なのだから、bsearchを使うのはだめなんじゃないか?アルゴリズムを作って使う課題なのだろうし。
872デフォルトの名無しさん:2008/03/31(月) 22:57:05
C++ のSTLのvectorで、要素の最後から開放していくのはこんな感じであってますか?

std::vector<Hoge*>::reverse_iterator itr = v.rbegin() ;
while( false == v.empty() )
{
delete *itr++ ;
v.pop_back() ;
}
873デフォルトの名無しさん:2008/03/31(月) 23:11:01
基本的に領域の開放は無理だろ swapでやるしか無いのでは?
ブロックごとに管理して100個使わなくなったら解放とかじゃないか
874デフォルトの名無しさん:2008/03/31(月) 23:11:47
constでない操作を呼び出した時点でiteratorは無効になる。
(実装によりたまたま有効なままかもしれないけど)
↓でいいんじゃない。

while(!v.empty()) {
delete v.back();
v.pop_back();
}
875デフォルトの名無しさん:2008/03/31(月) 23:14:51
pop_backした際にiteratorが無効になるので駄目。
なので
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)
876デフォルトの名無しさん:2008/03/31(月) 23:18:15
上のソースで、一つずつ領域解放出来るの??? swapしか出来ないと思ってたけど
877デフォルトの名無しさん:2008/03/31(月) 23:21:33
解放しようとしているものを取り違えている。
v.empty()がtrueだけどメモリがreserveされてる話とは別。

vector<Hoge*>().swap(v);
てことだろうけど、これだとvの中のHoge*が指す先はリークする。
878デフォルトの名無しさん:2008/03/31(月) 23:22:22
delete v.back();

'delete' のオペランドは非 const ポインタでなければならない
879デフォルトの名無しさん:2008/03/31(月) 23:23:14
>>878
vがconstなんだろ。それなら無理だ。
880デフォルトの名無しさん:2008/03/31(月) 23:23:47
>>877
後ろからサイズを小さくしていくならばresize()という関数あるけど駄目なの?
881デフォルトの名無しさん:2008/03/31(月) 23:24:36
vector<int> v(10000); だが・・・
882デフォルトの名無しさん:2008/03/31(月) 23:25:26
>>880
元の質問読んでる?vector<Hoge*>の各要素が指す先をdeleteしつvectorをemptyにしたいって言ってるんだよ。
883デフォルトの名無しさん:2008/03/31(月) 23:31:04
そういうことね
884デフォルトの名無しさん:2008/03/31(月) 23:39:18
>>875
3番目はboost無くても数行で実装できるよね
http://www.google.com/search?q=for_each+delete
885デフォルトの名無しさん:2008/03/31(月) 23:48:18
>>875
うん。今回だとdeleteを適用する関数オブジェクト作るだけだしね。
886デフォルトの名無しさん:2008/04/01(火) 16:21:58
[1] 授業単元:プログラミング
[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] その他の制限:なし

よろしくお願いします
887デフォルトの名無しさん:2008/04/01(火) 23:25:37
二人三脚練習のペアの組合わせを自動的にしたいんです…
しかし、わかりません… だれか詳しい方教えてください…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

すみませんが、進め方として合ってるか見て下さるとありがたいです。
また、ファイル名だけを取り出そうとしたのですが、上手く表示されませんでした。
928890:2008/04/07(月) 03:53:18
連投すみません。
↑の部分でファイルデータをアーカイブファイル先に保存出来てなかったので、それを修正したものを新たにアップしました。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6200.c
929デフォルトの名無しさん:2008/04/07(月) 23:19:59
>>890
ざっくり作ってみた。
当方マカなんで拡張子やらの取り扱いがオカシイやもしれませんが悪しからず。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6204.txt
930890:2008/04/08(火) 02:37:57
>>929
ありがとうございます。
参考にさせて頂きます。
931デフォルトの名無しさん:2008/04/08(火) 03:08:22
>>890

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

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

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

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

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

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

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

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

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

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

int i,j;

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

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

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

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

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

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

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

myDC.SetPixel = test_func;

myDC.SetPixel(0, 0, 0);

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

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

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

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

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

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

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

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

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

> float 型に格納可能な範囲

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

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

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

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

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

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

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

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

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

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

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

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

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