トップページ⇒tech
1001コメント418KB

お兄ちゃんの宿題、私が答えるよ

レス数が1000を超えています。これ以上書き込みはできません。
0001麻衣NGNG
お姉ちゃんのレスがいっぱいになったから新しいスレ作るね♪
これからは私がお兄ちゃんの宿題手伝ってあげる。
でもあんまり詳しくないから分からないこといっぱいあるから
みんも一緒に考えてね。
お願い。

↓ お姉ちゃんのスレ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=972032579

0002デフォルトの名無しさんNGNG
がんばれよ。
0003デフォルトの名無しさんNGNG
「麻衣」って名前は倉木麻衣を想像させられるから
萎えるなぁ。
0004デフォルトの名無しさんNGNG
まいちゃんはいくちゅでちゅかぁ?

などと書く自分の馬鹿さ加減に鬱....
0005研究中?NGNG
コンパイルすると「予期せぬEOFが検出されました。」という
エラーメッセージが出ます。
これはどういう意味なんでしょうか?
0006麻衣ちゃんじゃないけどNGNG
1.{}がつじつまあってないから。
2.ファイルフォーマットがプラットホームと
あってない(<CR><LF>とか)から。

のどっちかだとおもいます。
0007名無しさん。NGNG
>5
まんまじゃん。
てのじゃ駄目?
0008デフォルトの名無しさんNGNG
#if 0とか
やって
#endif
が無い場合とかもあるね。
まいちゃんもよくやるよ。
0009研究中?NGNG
どうやら閉じカッコ"}"がひとつ少なかったみたいです。
ありがとうございました。
0010人生にもif文を・・・NGNG
if(){
}
else{
}
を使う場合、ifの処理の中身は少なくて、elseに
主な処理がくるって邪道かな?
0011デフォルトの名無しさんNGNG
Sを開始記号とする文法を以下のように定める.
  S→aB|bA
  A→a|aS|bAA
  B→b|bS|aBB
このとき,列aaabbabbbaの最左導出を求めよ.

っていう課題なんだけど,全然わかりません.
0012デフォルトの名無しさんNGNG
>11
普通にソートじゃん?
0013デフォルトの名無しさんNGNG
整数nを0,1,2,3〜10と変化させたとき、
どれかひとつでもx<n<yを満たすならループから抜け、
全てのnについて満たさないときはxとyを表示させるという
サブルーチンを作りたいです。

for,if,goto等をいろいろ組み合わせたのですが、望む結果が得られません。
どのような構造にすればいいのかアドバイスをお願いします。
0014デフォルトの名無しさんNGNG
for(n=0 ; n<=10 ; n++)
{
  if(n>x && n<y)
  {
    break;
  }
}
if(n==11)
{
  printf("x=%d y=%d" , x , y);
}
001513NGNG
レスありがとうございます。
質問なんですが、n=0ではじめのif文の条件を満たして
いないと、次の処理の流れはどこに行くのでしょうか?
(二つ目のif文か、それともn=1での比較か)

それにしてもすごくスッキリしているんですね。
自分の書いたソースは見にくくって・・・。
0016デフォルトの名無しさんNGNG
if を満たしたときは for のループを抜ける。
for を抜けるのは for が n<=10 を満たさなくなったとき
または始めの if を満たし break で for を抜けたとき
for を抜けたときは n は11になってる。
if の break で抜けたときは n は if を満たしたとき(10以下)になってる
2番目の if で n を調べ for で抜けたか if(break) で抜けたかを判定
001713NGNG
>forを抜けたときはnは11になってる
n<=10 という条件に反するように感じるのですが
いいのですか?
0018横から補足NGNG
>>15
n==0のままnが<=10かをチェックし、n++
nは1になりもう一度if(n>x && n<y)チェック
0019デフォルトの名無しさんNGNG
>>forを抜けたときはnは11になってる
>n<=10 という条件に反するように感じるのですが
>いいのですか?

ちょっと表現が変だった。
for は n<=10 の間ループしてる。
つまりループを抜けたときは n は 11 になってる。ってこと。
break で抜けたときは n は 10以下。
分かる?
002013NGNG
やっと意味が分かりました。ループを抜けた際の
nの値が重要なんですね。少し勘違いしていました。
14さん、補足してくださった方、どうもありがとうございました。
0021麻衣NGNG
おねぇちゃんのスレッドに答える人はお姉ちゃんじゃないといけないみたいなルールがあったから、準じるね♪

>>11
文脈自由言語とかだよね。ここだとスペースが省略して表示されちゃうんで木がかけないんだけど、文字列を左から見ていくと最初に来るのはaだよね。
初期状態はSで最初にaが来るのは

S->aB

のルールだから、Sは左の子にa、右の娘にBを持つノードになるのね。
で、次の文字を見ると、やっぱりaなの。
Bの状態で一番左にaが来るのは、

B->aBB

のルールだから、このBは左の娘にa、真ん中の娘にB、右の娘にBを持つノードになるの。
仮に真ん中の娘をBB1、右の娘をBB2と名前を付けてあげると、
今の状態をディレクトリで表してあげるとこんな感じ。

S\a    終端記号なのでここまで
S\B\a  〃
S\B\BB1
S\B\BB2

で、BB1は終端記号じゃないからBB1の本来の状態、Bで次の文字を見てあげるの。そうするとやっぱりaだから、

S\a
S\B\a
S\B\BB1\a
S\B\BB1\BBB1
S\B\BB1\BBB2
S\B\BB2

になるの。 区切るね。
0022麻衣NGNG
>>21の続きね

で、次にBBB1を処理してあげるの次の文字はbだから、BBB1は

B->b
B->bS

のどっちか。ここで、bの次の文字からSを構成できるかどうかを考えるの。
構成することが出来なかったら、BBB1は

B->b

のルールを適用、できたら、

B->bS

ね。あとはこの繰り返し。

がんばってね、おにいちゃん&hearts;

#ネカマってよくこれを持続できるなぁ・・・。
002321=22NGNG
てか、このルールって衝突起こしてない?
・・・ちぇっきんぐ

$ bison test.y
test.y contains 4 shift/reduce confilicts.

$
0024お姉さんNGNG
麻衣ちゃん、新スレつくってくれてさんきゅ@hearts;
これからもよろしくね!
0025デフォルトの名無しさんNGNG
データをprintfで出力せずに、なんとか.datみたいなファイルに
出力するにはどうすればいいの?
0026デフォルトの名無しさんNGNG
>>25
ちなみに言語はCね。
C++では教えてもらったんだけど。
0027麻衣NGNG
>>25
FILE  *fp;
char  fname[32], str[32];

fp = fopen( fname, "wt" );
fprintf( fp, "%s", str );
fclose(fp);

fname,strにはなにか文字列を入れてね♪
でも、リダイレクトじゃダメなのかな?
0028デフォルトの名無しさんNGNG
32という数字は何を表すのかな?
そもそもリダイレクトってな〜に?&hearts;
0029麻衣 NGNG
>>28

32に深い意味はないの。
2,4,8,16,32,64のような倍々してしまうコンピュータ病なの。

リダイレクトとは、DOSで
dir > ファイル名
をしたらdirだけしたら画面に表示されるのがファイルに出力されるの。

おわかりになられて?
0030麻衣NGNG
>>28
32は適当なバッファサイズだよ♪
足りなければ大きくしてねっ☆ ていうか、多分足りないかな?
必要なバッファサイズを決めるのも設計の一部だから頑張ってね♯
あと、上の例では入ってないけどfpの結果がNULL(エラー)の場合の対処も必要だよっ∬

リダイレクトはプロセスの出力結果を他のプロセスやファイルに渡すことかなぁ��
ex1)
 ls -l > ls.log
 "ls -l"の結果を"ls.log"というファイルに格納する
ex2)
 rm * < yes
 "rm *"に"yes"から入力を渡しつづける
0031デフォルトの名無しさんNGNG
>>30
ls -l rmってUNIXコマンド?
0032麻衣NGNG
うん
ていうか、この麻衣はDOS知らない☆
0033デフォルトの名無しさんNGNG
計算結果(double型)の値をprintfとfprintfで表示&ファイルに出力
するのですが、桁数がばらばらでとっても見づらいです。
十の位から、小数点以下9桁まで表示させたいのですが
どうすればいいのでしょうか?
0034デフォルトの名無しさんNGNG
>>33
ヘルプでprintfのフォーマット調べろや。%sは文字列、とかそういうやつな。
0035麻衣NGNG
%02.9lf
0036麻衣NGNG
ごめん てへっ まちがっちゃったぁ

%12.9f だよ
0037デフォルトの名無しさんNGNG
ありがとうございました。
またヨロシクね。
0038麻衣をチンしました。NGNG
いままで度胸がなくってできなかったんだけど遂に!遂にやりました!
想像以上の効きめです!
失禁脱糞対策にあらかじめ中のみえるビニール袋に閉じこめて500Wでまずは30秒にTRY!
小娘とはいえコンビニ弁当より重いんだし余裕かなと思ったんだけど・・・
たった12秒で袋を蹴破りでてきました。目が逝っちゃってたのでとりあえず出してあげました。
犬みたいにハアハア出し入れしている舌は真っ赤です。顔を近づけてみたら吐く息が
すっごく熱くてビックリ!耳もすっごく熱くなってて真っ赤でした。やっぱ肉の薄い部分だからかな。
案の定、中で失禁しちゃってました。失禁は日課なのですっかり慣れて手袋もせず処理しました。
いつもなら罰として更に厳しい愛の鞭を与えるんだけど、今日は頑張ったのでご褒美に
乾燥エサを10粒もあげました。3日間なにも与えてなかったので腹が減っていたのか
ガツガツ喰ってました。まだ手や足の末端の肉の薄い部分は熱くなってます。
だいぶ回復してきたので手足耳をカーテンに糸で縫いつけて大の字型に宙づりにしてます。
また失禁しやがりました。むかついたのでエアガンを乱射してます。 ヘ(^^ヘ)(ノ^^)ノ
0039麻衣NGNG
あぁっ、もう学期が終わって宿題が出てなかったりして?
しくしく(涙)
0040デフォルトの名無しさんNGNG
6角形のマス目(ヘクス)を使った戦争もののシミュレーションゲームとかで、
盤上の駒をクリックすると、その駒が移動できる範囲が示されますよね。
あれって、どういうアルゴリズムなんでしょうか?

障害物を考慮しないなら、その駒の移動能力の最大値を到達距離として、
その内側を全部カバーすればいい、っていうのはわかるんですが。

途中に障害物があると、それを迂回させないといけないわけで、
うーん、どうすりゃいいのかな。どなたかわかる方います?

スレ違いかもしれませんが、よろしくお願いします>麻衣ちゃんズの皆さん
0041デフォルトの名無しさんNGNG
>>40
動的計画法という手法のいい練習問題でしょう。
ちょっと大げさだけれど、グラフを使うといいかもしれません。
説明は面倒なので、グラフの場合はアルゴリズムとデータ構造スレで、
動的計画法の場合は「ナップザック問題」で検索をかけてみてください。
0042デフォルトの名無しさんNGNG
>>40 & >> 41
思いつきだけど、再帰使うような感じになるのかな?
自分に移動できる量を持たせて6方向検索で再帰かければ
簡単な気がする。

思いつきだから あんまり突っ込まないでね。
0043デフォルトの名無しさんNGNG
>>42 それでいいいんじゃない
4方向で考えてみた

/* 移動範囲(x,y:座標 move:移動力)
void movement(int x, int y, int move)
{
  int mp; /* 移動力 */
  if(getMoveFlag(x,y)) return; /* 既にチェックされていたら終了 */
  mp = getCost(x,y); /* 移動コスト取得 */
  mp = move - mp;
  if(move < 0) return; /* 移動力がなくなれば終了 */
 
  setMoveFlag(x,y); /* 移動可能フラグ?をON */
  movement(x - 1, y, move); /* 上方向のチェック */
  movement(x + 1, y, move); /* 下方向のチェック */
  movement(x, y - 1, move); /* 左方向のチェック */
  movement(x, y + 1, move); /* 右方向のチェック */
}

こいつを6方向に拡張すればいい
0044麻衣NGNG
ちなみにヘクスって普通の四角マスマップに変換できるんだよ☆
上下左右、右斜め上、右斜め下の六方向に移動できる四角マスマップを表示上で奇数列をずらしてるだけと思えばわかるよね。
004542NGNG
>麻衣
ヘクス1つが6方向への参照をもつオブジェクトとして
作るってのはあんまり意味無いかな?
平面っていう制限がとれたりとか・・・・

これも思いつきだからキツいつっこみはかんべんしてね。
0046麻衣NGNG
>>45
内部でどう作るかは自由だと思うよ。麻衣は表示上の話をしただけのつもりなの。

たしかに、その方が作らなくて良い部分のヘクスは作らないですむもんね。
004740NGNG
ナップザックは知っていましたが、動的計画法というのは知りませんでした。調べてみます。ありがとう>41

>43
実は、似たようなアルゴリズムは自分でも考えたんです。それで、結論としては
>if(getMoveFlag(x,y)) return; /* 既にチェックされていたら終了 */
これがマズいってことになりまして。

例えば、以下のようなマップがあるとします。左上のSからスタートして、9でできた島を迂回し、洞窟の
奥のG(ゴール)を目指します。数字は、そのマスに移動するのに必要なコストをあらわし、最初の時点で
持っている移動力13から引き算していき、0になったら動けなくなります。簡単にするために、
4方向移動だけで斜め移動はなしです。

S551999
199211G
1991999
1111999

時計回りで島を迂回するコースを先に検索させてしまうと、洞窟の入り口の2で力尽きます。ここでこのマス
にフラグが立ってしまうので、その後、反時計回りで迂回するコースを検索させてもだめなんです。もちろん、
先に左回りを検索させればそんなことにはなりませんけど、どちらを先に検索したらいいかなんて、
コンピューターには期待できません。全体が見えてないと判断できないですから。

しかも、たいていの場合、ゴールまでに複数のルートがあるときは一番移動コストが少ないのをユーザーに
提示したいわけです。結局、まともに解こうとすると、
1) 移動コストを無視したときの最大移動距離範囲内にある全てのマスを選ぶ。
2) それぞれのマスについて、考え得る全ての組み合わせの経路を調べる。
3) その中で、最も移動コストが少ないルートを記憶させておく。
これを、(1)の全てのマスについてやる必要があるんです。
ここで41さんが紹介してくれた「ナップザック問題」の解き方が応用できるんですが、
それは要するに「総当たり」です。あるマスを使うか使わないかを判断して全ての組み合わせを
考慮するわけで、移動できる最大範囲内に10個マスがあれば2^10ですから1024通り。20個マスが
あれば百万通りです。とてもゲームに使えるアルゴリズムではないです。

でも、わりにショボいマシンのゲームでもこの手の機能ってインプリされてますよね。きっとなんかうまい手が
ありそうな気がするんで、それで質問してみたんです。うーん、麻衣ちゃんの手には余る質問だったかな?
0048麻衣NGNG
うわぁ長いね。
ひとつだけヒントあげるね。
一度通過したところは、フラグ立てるんじゃなくて、
移動コストを書き込んでおけばしあわせになれるよ。
0049デフォルトの名無しさんNGNG
procedure SiawasenoKatati
const
 SX = 1;
 SY = 1;
 GX = 7;
 GY = 2;
 Map: array[0..5,0..8] of Integer = (
  (-1,-1,-1,-1,-1,-1,-1,-1,-1),
  (-1, 1, 5, 5, 1, 9, 9, 9,-1),
  (-1, 1, 9, 9, 2, 1, 1, 1,-1),
  (-1, 1, 9, 9, 1, 9, 9, 9,-1),
  (-1, 1, 1, 1, 1, 9, 9, 9,-1),
  (-1,-1,-1,-1,-1,-1,-1,-1,-1)
  );
var
 Cost: array[0..5,0..8] of Integer;
 x, y, RootCount: Integer;
 Root: array[0..99] of TPoint;
 procedure sub(x,y: Integer; tcost: Integer);
 begin
  if Map[y,x] >= 0 then begin
   if Cost[y,x] > Map[y,x] + tcost then begin
    if Map[y,x] + tcost > 13 then Exit;//移動力超えたらヤメ
    Cost[y,x] := Map[y,x] + tcost;
    if (GX = x) and (GY = y) then Exit;//ゴール着ならヤメ
    sub(x,y-1,Cost[y,x]);
    sub(x+1,y,Cost[y,x]);
    sub(x,y+1,Cost[y,x]);
    sub(x-1,y,Cost[y,x]);
   end;
  end;
 end;
begin
//コストクリア
 for y := 0 to 5 do
  for x := 0 to 8 do Cost[y,x] := 999;
//コスト書き込み
 Cost[SY,SX] := Map[SY,SX];
 Sub(SX,SY-1, Cost[SY,SX]);
 Sub(SX+1,SY, Cost[SY,SX]);
 Sub(SX,SY+1, Cost[SY,SX]);
 Sub(SX-1,SY, Cost[SY,SX]);
//移動力13の範囲
 for y := 0 to 5 do
  for x := 0 to 8 do
   if Cost[y,x] >= 1 and Cost[y,x] <= 13 then
    FillRect(...);
//ゴール→スタートの最短経路
 x := GX;
 y := GY;
 Root[0].x := x;
 Root[0].y := y;
 RootCount := 1;
 while (Cost[y,x] > Map[SY,SX]) do begin
  if Cost[y,x-1] < Cost[y,x] then Dec(x)
  else if Cost[y+1,x] < Cost[y,x] then Inc(y)
  else if Cost[y,x+1] < Cost[y,x] then Inc(x)
  else if Cost[y-1,x] < Cost[y,x] then Dec(y)
  else break;//到達不可能
  Root[RootCount].x := x;
  Root[RootCount].y := y;
  Inc(RootCount);
 end;
end;
005040NGNG
ああっ、わかりました。目からウロコが滝のように!!

単なるフラグではなく移動コストを書き込んでおいて、再度そのマスにたどりついたら
現在までの移動コストと比較して、もし小さければ上書きしてしまえばいいのか。
麻衣ちゃん48が言ってるのは、サブ手続きの3行目と5行目のことですね!

最短経路を求めるのも、スタートからではなく、逆にゴールからたどることで、たった
ひとつの最適解を簡単に求められますね。これもスマート、お見事です。

すごい、すごいよ。ぼくはしあわせになったよ! ありがとう、みんな! ありがとう麻衣ちゃん49!!・・・って、自分までネタキャラになりきってどうする。つーか、本当にありがとうございます>49
一緒に考えてくれた他の麻衣ちゃんズの皆さんにも感謝。またよろしくお願いします。
0051デフォルトの名無しさんNGNG
49の最短経路の部分がおかしいと思うのは俺だけか?
0052デフォルトの名無しさんNGNG
>>51
4方向のうち一番コストの少ないのを選ばないといけないと思われ
005349NGNG
>>51 >>52
その通り!修正しといてね>40

procedure FuSiawasenoKatati
0054デフォルトの名無しさんNGNG
1週間で一億円作って来いゴラァ!
0055デフォルトの名無しさんNGNG
マネーゲームIIですら、1ヶ月で一億円だぞ。勘弁してくれ。
0056父ですNGNG
生まれた日から今日までの経過日数を出力するプログラムの
1〜6までを答えなさい。また間違った部分を訂正しなさい。
って問題がでたんだけど分かりません教えて下さい!

#include <studio.h>
int kikan(int y1,int m1,int d1,int y2,int m2,int d2);

int main(void)
{
int tyear, tmonth, tday, year , month, day;
printf("今日は?");
scanf("%d %d %d", &tyear, &tmonth, &tday);
printf("生年月日は?");
scanf("%d %d %d", &year, &month, &day);
printf("今日はあなたが生まれて%d日目です。\n",�@);
return (0);
}

int kikan(int y1,int m1,int d1,int y2,int m2,int d2);
{
int tndays; /*西暦元年から今日までの経過日数 */
int ndays; /*西暦元年から誕生日までの経過日数 */
if(m1 = 1){
y1 = �A ;
m1 = �B ;
}
tndays = 365*y1 + y1/4 - y1 / 400 + 306 * (m1 + 1) / 10 + d1 - 428;
if(m2 = 2){
y2 = �C ;
m2 = �D ;
}
ndays = 365*y2 + y2/4 - y2 / 400 + 306 * (m2 + 1) / 10 + d2 - 428;


return (�E);
}
0057名無しさんNGNG
>>56
まず、何も見ずに自分で考えてプログラム書いてみたら?
それから問題見直すと、簡単に解けると思われ
0058デフォルトの名無しさんNGNG
>if(m1 = 1){

写しまちがってねえ?
0059デフォルトの名無しさんNGNG
チャタリングの効果的な除去を教えて?
0060デフォルトの名無しさんNGNG
>>56
オレもif条件の中が二つとも間違ってるに1票。
しかし==にしたとしてもおかしい気が。<=2じゃないのか?
0061デフォルトの名無しさんNGNG
studio.h?
0062デフォルトの名無しさんNGNG
>>59
3接点スイッチにDフリップフロップ回路かますのが理論的には理想
でもたかがスイッチ一つにそこまでは普通しない。
CRで適当にごまかせ。
006359NGNG
>>62
CRってなに?
006462ではないがNGNG
>>63

抵抗器とコンデンサじゃないの?
006559NGNG
>>64
あーそういうこと
ハードの改造は技術部にイヤだといわれたので、無しです。
006659NGNG
あれこれ考えるのが面倒だったのでサンプリングしてandを取った。
てゆうかだ、ハード部の連中いつかぶっとばしてやる
0067制御屋さんNGNG
真の制御屋さんは図面から求められる仕様を理解できる。
0068デフォルトの名無しさんNGNG
>>59

スイッチなら規定時間の間、条件を満たしていればOKにすればいいんじゃない?
おいらは、10msec毎にサンプリングして、6回同じ条件ならOKにしている。
もしA/D入力だったら、フィルター処理を追加してみれば。
  int dAd[2]; // dAd[0] = 前回値, dAd[1] = 今回値
dAd[0] = ( dAd[0]*15 + dAd[1] ) / 16;
フィルターの乗数は追随速度やカッティング周波数にあわせて調整してくれ。
0069デフォルトの名無しさんNGNG
60msってユーザに反応が遅いと思われないですか?
押された時は早く反応し、離された時はゆっくり
反応するようにすべきです。
0070デフォルトの名無しさんNGNG
>>61
スタジオ じゃないだろ
stdio.h のことかい?
007168NGNG
>>69
60msecで遅いと言われたことはないです。
とくに連打するようなスイッチはありませんので。
もしかすると、業界が違うのかな?
こちらは家電系です。
0072デフォルトの名無しさんNGNG
>>71 松下?
0073デフォルトの名無しさんNGNG
>>56

#include <stdio.h>
int kikan(int y1,int m1,int d1,int y2,int m2,int d2);

int main(void)
{
  int tyear, tmonth, tday, year , month, day;

  printf("今日は?");
  scanf("%d %d %d", &tyear, &tmonth, &tday);

  printf("生年月日は?");
  scanf("%d %d %d", &year, &month, &day);
  printf("今日はあなたが生まれて%d日目です。\n",
      kikan(tyear, tmonth, tday, year, month, day));
  return (0);
}

int kikan(int y1, int m1, int d1, int y2, int m2, int d2)
{
  int tndays;  /*西暦元年から今日までの経過日数*/
  int ndays;   /*西暦元年から誕生日までの経過日数*/
  if(m1 <= 2){
    y1 = y1 - 1;
    m1 = m1 + 12;
  }
  tndays = 365*y1 + y1/4 - y1 / 400 + 306 * (m1 + 1) / 10 + d1 - 428;

  if(m2 <= 2){
    y2 = y2 - 1;
    m2 = m2 + 12;
  }
  ndays = 365*y2 + y2/4 - y2 / 400 + 306 * (m2 + 1) / 10 + d2 - 428;

  return(tndays - ndays);
}
007468NGNG
>>72
そうだったらいいのにね。
007569NGNG
>>71
これ以上は書けません。
スマソ
0076父ですNGNG
57,58、60、73さん。ありがとうございます。
おかげで合格しました。
0077麻衣NGNG
>>68
ええとね、2回同じだったらでいいと思うよ
http://www.infoeddy.ne.jp/~tensyo/prog/ALGO.HTM#CHAR1

というか今まで2回同じだったらの方法でダメだったことないよ
0078デフォルトの名無しさんNGNG
>>77
どんなスイッチで経験があります?
マイクロスイッチやシートキーとかでも大丈夫でしたか?
0079デフォルトの名無しさんNGNG
>>77
バネ付でびよんびよん のスィッチだったので2回ッくらいじゃ
全然駄目でした。つーわけで10ms間隔8回くらいのandです。
0080麻衣NGNG
うん。シートキーやマイクロスイッチでもOK
でも10mS毎じゃダメ
メカスイッチのチャタリングは70msはあるから25〜40mS毎に見て2回ね
ようはさ、2度押しにならない事と
火花パチパチノイズで間違わない事がうまくいったらいいの
0081デフォルトの名無しさんNGNG
2次微分による輪郭抽出をすると元の画像はどういうふうな画像になるのですか?
0082デフォルトの名無しさんNGNG
元の画像は変わらないのでは?
008368NGNG
集計
  >>68 10msec   6回   タクタイルスイッチ、カーボンと基盤パターンを接触させるスイッチ
  >>80 25〜40msec 2回   マイクロスイッチ、シートスイッチ
  >>79 10msec   8回 バネ付でびよんびよんのスィッチ

タクタイルスイッチとマイクロスイッチはあまり変わらないので、
おれのやり方(>>68)が一番効率悪い模様。
50〜80msecの一致時間を必要とすることでは意見が一致。
008479NGNG
>>80
>メカスイッチのチャタリングは70msはあるから
そんなにあったのね。10ms×8回でよかったというのは
はだか戦隊ぎりぎりセーフだったってとこですか・・・
何はともあれ、ありがとう!
ほんとに女の子なら今度結婚しよう!
0085麻衣 NGNG
ええとね、バウンドって100mSでもホントはあるの
片方しか複数確認しないと100mS連続で見てもきびしいのよホント
OnOn とOfOffでチェックするから オーケって感じ

お兄ちゃんと結婚なんて考えくない
0086デフォルトの名無しさんNGNG
ゴム接点式の抵抗値が不安定な信号に対しては
双方向ポートに抵抗1本(100KΩ)付けて、
・前回の入力値を常時は出力
・入力する直前に入力ポートにして直後に読み込む
という方法も1チップでは良く使われる。

抵抗値と、入力ポートの寄生容量とでCRを構成
ハイインピータンスにしてから実際の入力迄の時間でシュミット特性
を出すという手法だ。
0087デフォルトの名無しさんNGNG
回路と組み合わせるなら
スイッチキャパシタを使う
http://www.infoeddy.ne.jp/~tensyo/prog/TMP47.HTM
みたいな方法が一番シンプルで安全確実、調整容易
しかも壊れ難い
0088デフォルトの名無しさんNGNG
>>81
一次元で説明すると、1次微分(-1,1)は傾き、
2次微分(1,-2,1)は傾きの変化だよ。
元の輝度 0 0 0 1 5 9 10 10 10
1次微分 0 0 1 4 4 1 0 0 0
2次微分 * 0 1 3 0 -3 -1 0 *
0089コロ助子ちゃんNGNG
スイマセン…アホゥなC++歴一ヶ月の初心者です
が、宿題でどうしてもとけないのがあるんです。
ax^2+bx+c=0
ケース1(a=3,b=12,c=39)、
ケース2(a=3,b=0,c=-28.83)、
ケース3(a=2,b=10.6,c=13.44)、
3のケースについての解を求めよ
これをifを使って
if (b*b-4*a*c > 0)
{
}
if (b*b-4*a*c == 0)
{
}
if (b*b-4*a*c < 0)
{
}
ってな感じで解きたいんです…後、3っつの
ケースの答えを同時に出すにはループを使う
しかないと思うんですが…よく詳しい使い方
が解りません(泣)。誰か助けて〜!
0090デフォルトの名無しさんNGNG
a = 3; b = 12; c = 39;
if (..) {...
}

a = 3; b = 0; c = -28.83;
if (..) {..
}

って感じで、バカ正直に3回書いておけ。
人には自分にあったレベルというものがある。
変に背伸びして、格好つけようとするんじゃない。
0091デフォルトの名無しさんNGNG
>>89
高校の問題でしょうか。
普通はガウス(ジョルダン)の消去法を使うと思うのだが。
0092デフォルトの名無しさんNGNG
ガウスの消去法で二次方程式を解く方法は、俺は知らんな。
少なくとも、高校レヴェルではなかろう。
0093デフォルトの名無しさんNGNG
>>91
それって、連立方程式?
0094麻衣NGNG
そういう時は関数を使おう。
 ただ、返したい値が二つになるよね?

 おにいちゃんは複素数は知ってる? 知らないかな?
 知らないとすると、この場合、答えの他に、答えが何個あるかどうも返したいんだとするね?
 どこでBOOLが定義されてるかどうかは調べてね

int answer(double a , double a, double a, double *x1,double *x2)
{ double D=b*b-4*a*c ;
  if(D>0){
  *x1= ここは自分で埋めてね;
  *x2= ここは自分で埋めてね;
  return 2;
  }else
  if(D==0){
  *x2=*x1= ここは自分で埋めてね;
  return 1;
  }else return 0;//解が無い
}

このanswerをどう使うかは宿題だあ
0095麻衣NGNG
あちゃぁ てへっ失敗だあ
×int answer(double a , double a, double a, double *x1,double *x2)
○int answer(double a , double b, double c, double *x1,double *x2)

ついでだから答え書く
void printAns((double a , double b, double c)
{ double x1,x2;
 switch(answer(a,b,c,&x1,&x2))
 {
case 0: printf("%s\n","答えがありません");break;
case 1: printf("%s %15.3f\n","答えがひとつあります",x1);break;
case 2: printf("%s %15.3f %15.3f\n","どちらかが答えです->",x1,x2);break;
 }
}
int main()
{
printf("%s","最初の問題は "); printAns( 3 , 12 , 39);
printf("%s","2番目の問題は "); printAns( 3 , 0 , -28.83);
printf("%s","最後の問題は "); printAns( 2 , 10.6 , 13.44);
return 0;
}


それから、>>91さんは無視してもOK
 あまり読まずに連立1次方程式の問題と勘違いしちゃったのかな
0096デフォルトの名無しさんNGNG
>>94
a = 0の場合、 a = b = 0の場合は?
# そこまで要求されてるかどーかは知らないが
0097麻衣NGNG

   , ――
 γ∞γ~  \
 人w/ 从从) )   / ̄ ̄ ̄
  ヽ | |┬ イ |〃 <  >>96 こめけえヤツ
  `wハ~ ^ ノ)   \___
   / \`「
0098お局NGNG
>>97
あら、その細かいことが実際にプログラミングするときに大きな問題になることを
ご存じのうえでおっしゃってるのかしら?

確かに宿題の回答としては96さんのおっしゃる指摘は細かすぎるかもしれないわ。
アタシも94のコードは学校の宿題の回答レベルとしては十分だと思うしね。

でも、プログラムを組む上で重要な考え方を提示してくださっている96さんの
発言に対して「こめけえヤツ」とは、ずいぶんなおっしゃいようじゃなくって?
少なくとも教育的配慮には欠けるといわざるを得ないし、技術者としてミスを
指摘されたときの模範的な応対とは言えないと思うんだけど、いかが?

それともアタクシなんかには想像もつかないような高尚なお考えをお持ちで、
わざと97のような発言をなさっているんでしょうか?
もしそうだとしたらごめんあそばせ。その場合は、できれば後学のためにも
その高尚なお考えをぜひとも御開陳願いたいものだわ。
0099デフォルトの名無しさんNGNG
おれの妹をいぢめるな
0100デフォルトの名無しさんNGNG
このネカマ野郎
0101デフォルトの名無しさんNGNG
怒った麻衣ちゃんもかわいいから許してあげようよ〜
0102麻衣NGNG
もっち、2次方程式の解を求めろ! って問題ならべつじゃん。

んでも、課題はa,b,cが与えられてるのよ。
で、中間的に関数を使った方が簡単だよって話だよ。

ライブラリにしとけば後から使えるとかの話ならさあ、
複素数に対応してから後じゃない?
0103デフォルトの名無しさんNGNG
標準入力から任意の文字数の行を入力する、完璧なルー
チンを作りたいんだけど、どうすればいいの?

fgets を使うんだろうけど、これは文字数をあらかじめ
指定しないといけないよね。最終的には一続きの文字列
として取り出したいの。

ああ、でもこのルーチンを使うと呼び出した先で
malloc しちゃうのかあ。それも気持ち悪いなあ。

というわけで、みんなこの辺りをどうやって解決してる
の?答えてくれたらお兄ちゃんがいっしょにお風呂に入っ
てあげるよ。
0104麻衣NGNG
お風呂はおにいちゃんとは嫌! パパと入るもん

☆fgetsして\nがないならmalloc/realloc
☆コルーチンにして順次処理し1行分のバッファを不要にする
☆メモリマップファイルにしてメモリから読む
0105デフォルトの名無しさんNGNG
>>103
>>104
fgetcしながらバッファを増やしていけよ。
0106麻衣NGNG
そういう方法もあるよね。でも、fgetsが使えるならそっち優先しちゃおうよ
0107お局NGNG
アタシは単純に「サブルーチンを作ったら、その動作条件を明示するべきだ」という話題だと
思ってるんだけど、麻衣ちゃんのご高説では、ライブラリとか、複素数対応なんていう
要件拡張の話が突然でてきて、ちょっと理解に苦しむわ。もう少しアタシみたいなバカにも
わかるように説明していただけないかしら?

assertをたったひとつかふたつ書くことが、そんなに面倒なのかしら?
それともアタシには見えないけど、コードにはきちんとコメントが書いてあるのかしら?
プログラミングを始めたばかりの人に、プロの正しい習慣を示すことと、プロとしては
あまり適切でない応対を見せることの、どちらが宿題のアドバイザーとして求められる
姿なのかしら?

それに、複素数に対応することと、環境によってはプログラムがクラッシュすることを
避けることの二つに優先順位をつけるときに、前者が優先するっていうのも、アタクシ
のような古い人間には大変興味深い価値観だわ。

それとも、もしかして麻衣ちゃんは素人に毛が生えたレベルのプログラミングで満足で、それ
以上のレベルに行く気はないってことかしら。
それならそれでもいいんじゃないかしら。いつまでも半人前扱いで、ちゃん付けで呼ばれる
なんていう屈辱的な状況に耐えられそうにないから、アタシはゴメンだけど。

お目汚し失礼。お忙しいでしょうから、特に反論はいただかなくても結構よ。ごめんあそばせ。
0108デフォルトの名無しさんNGNG
おれの妹をいぢめるな
0109デフォルトの名無しさんNGNG
このネカマ野郎 
0110>107NGNG
なんか独り善がりなひとだなぁ。そんな大袈裟なもんかい?

>教育的配慮に欠ける
なんだそら?よくもそこまで邪推できるもんだ。
だれもそんなことで影響受けやしないし、技術者の姿勢云々なんて発想は
しやしない。洒落や愛嬌の範疇じゃん。

>それに、複素数に対応することと、環境によってはプログラムがクラッシュすることを
>避けることの二つに優先順位をつけるときに
この発想は変だよね。優先順位をつけるなんてありえないもの。
プログラムがクラッシュしないのは絶対条件であって、何かとトレード
オフなんてできるわけ無いじゃん。
ましてプログラムに要求された機能とクラッシュ云々は何の関係もない。

>前者が優先するっていうのも
そもそも誰もそんな事言ってないし。

こめけえヤツ(笑
0111麻衣NGNG
えとね、麻衣にしたら a=0なんて方が要件拡張にみえちゃうっていってるの!
だって要件は >>89 だよ。

それにさあ、ここでなんでassertの話が出るの?
assertで止まるのと除算エラーで止まるのとそんなにちがうの? みかけいっしょじゃん!
だいいち除算エラーでクラッシュするような環境って何?
そんなばかちんなマシンって宿題につかうの?

a=0で x1=-c/bを返したら多少汎用に近くなるのはたしかだけど、
中途半端な汎用性は麻衣キライ!
0112お局NGNG
あら、楽しくなってきたわね。本題からは関係ないからsageね。

>>110
書き込みを拝見すると新人さんではないとおもうので、独り善がりにそう仮定させていただくわ。

新人がプログラムを書いたとするわね。で、アナタがそのプログラムをレビューして不適切に思える
箇所があったとするわ。そのミスを指摘して、新人に「こめけえヤツ」という旨のことを言われた
とするわね。そういう新人さんをアナタはどう思う?
そしてもしその新人さんは「学校の先生はミスを指摘されたときに、そういう対応をしていました」
と弁明したとするわね。そういう先生をアナタはどう思う?
アタシだったら、その先生の応対は教育的配慮に欠くと思うわ。

>だれもそんなことで影響受けやしないし、技術者の姿勢云々なんて発想は
>しやしない。洒落や愛嬌の範疇じゃん。
アナタはそう思ったのね。アタシはそう思わなかったのよ。
アナタはアタシのことを独り善がりひとと評してくださったけど、もしその評が当たっているとするなら、
アナタも独り善がりなひとになるわけね。もちろん相手にわざわざ指摘するくらいなので、自覚はお有りだと
思うけど。

>プログラムがクラッシュしないのは絶対条件であって、何かとトレード
>オフなんてできるわけ無いじゃん。
>ましてプログラムに要求された機能とクラッシュ云々は何の関係もない。
あら、まったくその通りよ。アタシの主張を繰り返していただいてありがとう。

ご存じの通り、引用してくださっている部分の書き込みは、102の麻衣ちゃんの書き込みに対する反論の
つもりなのよ。
アタシは102の麻衣ちゃんは「クラッシュするのを避けるより先に、複素数に対応するべきだ」という旨の
発言をしていると解釈したのよ。読解力のないアタシが勘違いしていたらごめんあそばせ。

というわけで
>そもそも誰もそんな事言ってないし。
アタシは102で麻衣ちゃんがそうおっしゃっていると解釈しているわ。

>こめけえヤツ(笑
お褒めにあずかり光栄だわ。今後もよろしくお願いいたします。
0113お局NGNG
>>111
お忙しいでしょうにわざわざご回答くださってありがとう。

>えとね、麻衣にしたら a=0なんて方が要件拡張にみえちゃうっていってるの!
繰り返しになるけど、学校の宿題の回答としては、a=0の場合を考慮しなくても充分だと思うわ。

麻衣ちゃんももちろんご存じだとは思うんだけど、長い間いろいろなプログラムを組んでいると、
過去に再利用するとは思っていなかったようなサブルーチンを使うことって結構あるのよ。
だからその時に備えておくことはプログラマとしては良い習慣だと思うのね。

それに96のような指摘は仕事上でコードをレビューしてもらっていればわかってくださると思うけど、
非常にありがたい指摘なのよ。問題が発生する前に、バグを指摘してくれたわけでしょ?
その指摘に対して、97のような応対をするのはプログラマとしては望ましいものとは、アタシは
思わないのよ。
掲示板に書いたコードに対するバグ指摘に対して97のような応対をするだけなら、わざわざ指摘する
必要もないと思うわ。だけど初心者向けの教えてあげるスレで、講師役の方がああいう応対をするの
には、ちょっと苦言を呈したくなったのよ。


>それにさあ、ここでなんでassertの話が出るの?
>assertで止まるのと除算エラーで止まるのとそんなにちがうの? みかけいっしょじゃん!
あら、こんなに明らかなことをバカのふりをして質問するってことは、アタシのことを試してくださって
いるのね。

サブルーチンの引数をチェックするassertを入れることで、サブルーチンの動作条件、責任範囲が明確に
なるわ。もしassertがなくて除算エラーで止まった場合には、呼び出し側に問題があるのか、サブルーチン側に
問題があるのかがすぐにはわからないわ。
0114お局NGNG
続きを書かせていただくわ。

具体的にはアタシだったら94のコードは、96の指摘を受けた後には、以下のように修正すると思うの
(本当は数値誤差も考慮するべきだけど、そこはちょっと違う話だから置いておくわ)。
int answer(double a, double b, double c, double *x1,double *x2)
{
 assert( a!=0.0 );
 (以下そのまま)

こうやって記述してあれば、この answerが将来再利用されて、a=0で呼び出されたときにはassertで停止する、
つまりa=0を入れて呼び出した側が悪いことがすぐにわかるわ。
除算エラーで止まった場合には、answerのバグなのか、呼び出す側の使い方が悪いのかは明確じゃないわよね。
ずいぶんちがわないかしら? assertで止まることと除算エラーで止まることは。


>中途半端な汎用性は麻衣キライ!
あら、アタシも中途半端な汎用性はキライよ。気が合うわね。
そういう中途半端な汎用性を要求されないためにも、サブルーチンの動作条件を明確にするassertを使用する
べきなんじゃないかしら。
0115麻衣NGNG
   , ―'
 γ∞γ~  \
 人w/ 从从) )  / ̄ ̄
  ヽ | | l  l |〃 <  ん〜わかった ごめん
  `wハ~ ーノ)   \__
   / \`「


でも、将来再利用を考えるなら別の設計にするな麻衣は
0116デフォルトの名無しさんNGNG
試合に勝って勝負に負ける頭でっかちなお局であった。
0117舞NGNG
みんなダメ よぉっく >>89を見て! 課題は C++なんだから

class SecondCurve {
double a,b,c; //y=a*x*x+b*x+c
public:
double getD(void){return b*b-4*a*c; };
double getX1(void){double d=getD(); return (-b+sqrt(d))/a/2.0; };
double getX2(void){double d=getD(); return (-b-sqrt(d))/a/2.0; };
SecondCurve(double aa,double bb,double cc){ a=aa;b=bb;c=cc;};
};
class err{};
int _matherr(struct _exception *e){ throw err();}

int main()
{
struct pclass:SecondCurve {
 pclass(double a,double b,double c):SecondCurve(a,b,c){};
  void print()
   {
    try{ cout << getX1() <<" ";}catch(...){};
    try{ cout << getX2() <<" ";}catch(...){};
   cout << endl;
   }
  }  d1( 3 , 12 , 39)
    ,d2( 3 , 0 , -28.83)
    ,d3( 2 , 10.6 , 13.44);
  d1.print();
  d2.print();
  d3.print();
}
0118デフォルトの名無しさんNGNG
このネカマ野郎 
0119お局NGNG
>>115
ご理解いただけてうれしいわ。宿題回答がんばってちょうだい。
0120デフォルトの名無しさんNGNG
んー、ネカマじゃなくて、本物のオカマさんたちですよ。
「お局」なんていうハンドルネームを、デブオタが考え付くとは思えない。
北島パヤ(マヤではない)なんていうキーワードに反応するはず(w
0121デフォルトの名無しさん NGNG
>120

オカマ発見!
0122全員落第!NGNG
// ちゃんと判別式が負のときを考慮しろよ!!
#include <complex>
#include <math.h>
#include <iostream.h>

// 二次方程式 "A*x*x + B*x + C = 0" を解く。戻り値は解の個数。
int quadratic_equation(double A, double B, double C,
      double_complex &x1, double_complex &x2) {
 if (A != 0) { // A が非ゼロなら、通常の二次方程式。
  // 方程式を "x*x - 2*b*x + c = 0" の形式に変換する。
  double b = -B / 2 / A, c = C / A;
  double d = b*b - c; // 判別式 D / 4
  if (d >= 0) {
   // 計算誤差を避けるため、絶対値の大きい解を先に求める。
   x1 = (b > 0) ? b + sqrt(d) : b - sqrt(d);
   // もう一方の解は、解と係数の関係で求める。
   x2 = c / x1;
  } else { // 判別式が負の場合、複素解。
   double imag = sqrt(-d);
   x1 = double_complex(b, imag);
   x2 = double_complex(b, -imag);
  }
  return 1 + (d != 0);
 } else if (B != 0) { // AがゼロでBが非ゼロの場合は、通常の一次方程式。
  x1 = -C / B;
  return 1;
 }
 return 0; // 不定または不能。
}

int main() {
 double coef[3][3] = { {3, 12, 39}, {3, 0, -28.83}, {2, 10, 13.44} };
 for (int i = 0; i < 3; i++) {
  double   a = coef[i][0], b = coef[i][1], c = coef[i][2];
  double_complex x[2];
  int nx = quadratic_equation(a, b, c, x[0], x[1]);
  cout << "方程式: " << a << "*x*x + " << b << "*x + " << c << " = 0"
    << " の解は、" << nx << "個。" << endl;
  for (int j = 0; j < nx; j++) cout << j << "個目の解: " << x[j] << endl;
 }
 return 0;
}
0123麻衣NGNG
さて、次いってみよー♪
0124デフォルトの名無しさんNGNG
>>98
そんなに怒るこたぁないと思うが同意だね。

「2次方程式の解を求める」関数を作り、
その関数を使って目的を達成させるのであれば、
関数は、どんな引数を与えても、
それに対応した答えを返すべき。
96の言う通り、あらゆる可能性で動作するように、
int answer() を変えるべきでしょ。
細かいどころか、このくらい普通だと思うね。

でもさ、他人のコードをコピーして
課題を済まそうとする奴に
そこまで教える必要ないでしょ。
90は極論過ぎると思うけど(^^;
0125全員落第!NGNG
>>124
すべての可能な引数に対し考慮しろって言うのは、素人の発言。
動作を保証する前提条件というのが、通常はある。たとえば、NULLポインタは不可とかな。
あと、assertを入れればいいというのは、大嘘、または素人の発言だ。
assertは、デバッグ用にコンパイルしたときだけが有効なので、
ライブラリ用にコンパイルされたオブジェクトには、assertは入らないと思っていい。

いずれにせよ、この程度の宿題で問題にするほどの事ではないな。
それより、例題には明らかに複素数の解を持つ例が含まれているので、
それをサポートするのは、宿題であっても必須だ。
0126デフォルトの名無しさんNGNG
>>107 〜
assert はどうだろう?
assert 使うよりは、122のように
a=0で、明確に処理を分けた方がいいと思うんだけど。
エラー出るの分かってるのに、その中で処理しないのはどうかと。

>> 89
ま、とにかく、C++ やる前に、C 勉強してください(藁
0127デフォルトの名無しさんNGNG
124=126っすよ。

>>125
>すべての可能な引数に対し考慮しろって言うのは、素人の発言。

うーん。書き方がまずかったか。
俺は、係数のことに対して言いたかっただけなんだが。
つまり「どんな係数であっても、答えを返す」
べきだってことを言いたかったのよ。
もちろん、動作保証は引数が
 double A, double B, double C
である場合で問題無しです。だから
「NULLポインタは不可」。当然でしょ。

>それより、例題には明らかに複素数の解を持つ例が含まれているので、
>それをサポートするのは、宿題であっても必須だ。
同意。あと「不定・不能」の判別もね。
0128全員落第!NGNG
つーかですな。関数化とか、ライブラリ化とか、
ウザい事ぬかすから、>>122みたいに面倒なコードになるのよ。
これだって、不定と不能の区別とか、A=0と重根の区別ができない。

プログラムなんて、与えられた条件で動けばいいのだから、
今回の条件ならば、>>90のやり方でいいと思って、俺は90に書き込みしたんだがな。
0129全員落第!NGNG
>>103
こんな感じかな。動くかどうかは知らない。っていうか、もう寝る。
#include <stdio.h>

/*
* 指定入力から、一行読みこむ。バッファは必要なだけ内部で確保する。
* 返り値は読みこんだ文字数。改行文字も(あれば)読みこむ。
* 1文字も読まずにファイル終端となったときは、0を返しバッファは確保しない。
* エラー時には-1を返す
*/
int fgetline(FILE *fp, char **line) {
int sz = 80, cc = 0, c;
char *lp = malloc(sz);
*line = lp;
if (lp == NULL) return -1;
while ((c = fgetc(fp)) != EOF) {
if (sz <= cc) {
lp = realloc(lp, sz += 80);
if (lp == NULL) free(*line);
*line = lp;
if (lp == NULL) return -1;
}
lp[cc++] = c;
if (c == '\n') break;
}
lp[cc] = 0;
if (cc == 0) {
free(lp);
*line = NULL;
} else {
lp = realloc(cc + 1);
if (lp != NULL) *line = lp;
}
return cc;
}
0130全員落第!NGNG
布団の中で、バグ発見。0の重根を持つときに問題ありでした。
というわけで、修正版↓。

> // 計算誤差を避けるため、絶対値の大きい解を先に求める。
> x1 = (b >= 0) ? b + sqrt(d) : b - sqrt(d);
> // もう一方の解は、解と係数の関係で求める。
> x2 = (x1.real() != 0) ? c / x1.real() : x1;
0131デフォルトの名無しさんNGNG
麻衣 VS お局 について 麻衣に1票

1、 a=0なら2次方程式じゃない

2、a=0はゼロ除算例外が出る。>>94の関数スタイルなら
  assertで確認すべきは x1,x2のポインタの方

3、assertはプログラムを異常終了させる。 3つ答えを求めようと
  して最初にassertを踏んだら3つとも答えは出ない。 それより
  例外を出すべき

4、算術的にはa=0以外にも aが小さくbが極端に大きい時には
  オーバーフローエラーが出る場合もある。それだけを言うの
  は片手落ち

5、そもそも、教育を言うなら まず誉めるべし。
  頭の回る子供は特に誉めるべし。
  誉めれば勝手に次の課題でそれくらいはやってくる
0132麻衣NGNG
それはもう オナカいっぱ〜い だよ
0133お局NGNG
あらあら、一晩たったら違う方向に育っているわね。楽しいわ。

まず論点の確認ね。
アタシの元の主張は「ミスを指摘されたら素直に認めて修正しましょう」ってこと。98を
ご覧になってね。この点については麻衣ちゃんとはある程度意見の一致をみたから(111,113,115)、
特にもう言うことはないわ。

で、いまみなさんが盛り上がっているのは、2次方程式の解を求める関数の望ましい書き方は
どうあるべきか? という話題よね。

だからアタシの認識では、131の「麻衣 VS お局」という書き方はあまり適当ではないと思うわ。
アタシがassertを入れるべきだ、という主張をしたのは、ミスを指摘された場合に最低限するべきこと
の一例として示しただけだからよ。
うーん、たしかに107の書き方を見ると「assertを入れろ」という指摘に見えるかもしれないけど、
いちおう他の選択肢も挙げてあるわよね。オカマったらしいイヤミのオブラートに包んであるけどね。
みなさんの読解力を信頼していてよ。ほほほ。
0134お局NGNG
続いてるのよ。

で、アタシたちの話題から派生した別の話題であるところの、2次方程式の解を求める関数の
望ましい書き方はどうあるべきか? という話題にも厚かましく加わらせて頂くわ。

この話題はサブルーチンの望ましい書き方はどうあるべきか、というより大きな問題でもあるわね。
アタシは元の話題ではこっちの問題を論じているつもりだったので、まずこれについて意見を述べさせて
いただくわ。

極端なひとつの考え方としては、どんな状況でも適切に動作するようにサブルーチンを記述すべきだ、
というものがあるわね。どんな計数の組み合わせでも、double変数にstd::numeric_limits<double>::max()
が渡されても、返り値を返すためのポインタが無効なアドレスを指していたときにも動くサブルーチン。
ステキ、うっとりしちゃうわね。
でも、この要求は一般には非現実的に高すぎるわ。設計実装に時間はかかるし、まずテストケースが膨大に
なるでしょうし、コードサイズも実行速度も各種のチェックに費やされて大きくなるでしょうね。

逆の極端の考え方としては、いま要求されているギリギリ最低限の状況で動作するサブルーチンを記述
すべきだ、というものがあるわね。移植性なんて考えない、いま動けばそれで良し。包括的なテスト
ケースなんて必要なし。男らしいわね。
でも、このやり方では高い品質と生産性は望めないわね。仕様は必ず変わるし、プログラムは必ず
修正されるんだから、モジュールが増えてゆくにしたがってとれにくいバグに汚染されてゆくでしょう。
アタシも若い頃はよくやったわ。

もちろろんみなさんもご存じのとおり、現実には上のふたつの中間をとることになるわね。
どっちよりの中間をとるかは、その時々で判断することだから、ここでは論じないわ。
でも、記述したサブルーチンが、どっちよりの中間をとったかは、記録しておかなくちゃいけないと
思うの。そうしないと、本来ならしなくて良いチェックを呼び出し側でしちゃったり(この場合は単に実行時間の
ロスが発生するわね)、本来ならしなくてはならないチェックを呼び出し側でしなかったり(この場合は
クラッシュするかもしれないわ)、ということが発生するからよ。

そして、その責任範囲の記録方法としては、assertは優れた方法だと思うわけ。根拠は113-114に書いたとおりよ。
0135お局NGNG
続いてるのよ。

2次方程式サブルーチンでは、最初に提示された解はa=0に対応していなかったわ。そして状況から判断して
a=0の場合にも正しい答えを返す必要はないと思ったの。だから、このサブルーチンはa=0に対応していない
ということを明示するためのassertを追加するのが、この場合は適切な対応だと思って提案したのよ。
ご理解いただけたかしら?

ただ、2次方程式の解を求めるくらいなら、122さんなどが示して下さったように、全ての(正確にはほとんどの)
係数の組み合わせで適切に動作するコードを書くのは難しくないかもしれないわ(ほとんどというのは、
たとえばaが非常に0に近く、b,cが非常に大きな数の場合はオーバーフローを起こすかもしれないわよね)。
だからウダウダ言わずに、122さんのようなコードを書くのも良いと思うわ。
0136お局NGNG
ついでに偉そうにみなさんの意見への所感を書かせていただくわ。

>>124 =126
ご賛同いただいてありがとう。
おっしゃるように、2次方程式では122さんのようなコードを書いちゃって良いと思うの。
エラーでるのはわかってるけど、対応するのはものすごくたいへん、かつ、いまは必要ないときにはassertする
のがいいんじゃないかしら、というのがアタシの意見よ。いかが?

>>125
ずいぶんと自信がおありね。うらやましいわ。
アタシが実務で触れてきたライブラリには、デバッグモードで、つまりassertを含めてコンパイルした開発時に
使うライブラリコードと、リリースモードで、つまりassertを含めずコンパイルしたライブラリコードがついてきた
ものだけど、錯覚だったのかしら。分野によっても違うのかしらね。
アタシのまわりとは大きく異なる常識をご丁寧にご教授下さって、どうもありがとう。

>>128 =90
潔くて好きよ。

>>131
1.そのとおり。問題はその確認をサブルーチンと呼び出し側のどちらでやるかでしょ?
assertを入れるのはそれを明示するひとつの方法だと思うって話なのよ。
2.ポインタの非NULL確認はやってもいいと思うわ。
3.例外を出すというのは、つまりa=0の場合に対応するのは呼び出し側の責任にしよう、ということね?
それなら、呼び出し側がサブルーチンコールの前にa=0のチェックをして、このルーチンを呼ばないように
するべきじゃないかしら。
4.おっしゃるとおり。その点については114で触れているわよね? 論点がぼやけるので明示しなかったのよ。
5.アタシは教わる側のことを論じた覚えはないので、これはアナタがここで新たに提案なさっていることね?
「それくらい」ってなんのことかよくわからないので、所感は述べられないわ。ごめんあそばせ。

アタシの意見に賛成しないことはわかったけど、麻衣ちゃんの意見に賛成する根拠を教えて下されば幸いですわ。
0137お局NGNG
長々とごめんなさいね。年寄りは話が長くなるもんだと思って勘弁してやってちょうだい。

はい、次のかたどうぞ。
0138麻衣NGNG
はっきり言って ウザイ!

どうして要件ではない a=0について書かなかった事がミスなの?
麻衣がごめんってあやまったのはそのことじゃないよ。
>>97でチャカした書き方した事についてあやまったの!

それは別にして、
麻衣はa=0についてassert入れるようなのは大嫌いなの!
実行結果で例外投げればいいじゃん!

それに、汎用にするならテンプレート使うべぇし!
ベクトルや行列渡せるようにね
0139デフォルトの名無しさんNGNG
お局さん、ごめん長すぎて読む気になれない.
0140>麻衣NGNG
判ってると思うけど、
テンプレート使う場合は解の公式は使わないで
ニュートン法とか直接数値解法使うようにね〜

まあsqrtを定義してもいいけどさ
0141お局NGNG
あらあらまぁまぁ、この程度でウザイだなんて、近頃の若い子は忍耐力が足りないわね。
カルシウムが足りないのかしら。小魚や牛乳をちゃんと採ってちょうだいね。

>どうして要件ではない a=0について書かなかった事がミスなの?
アタシは、そのことについて糾弾する気はもう無いわ。アタシが不適切だと思った97の
書き込みについては謝っても頂いているので、解決ずみよ。他のみなさんはどうか知らないけど。

みなさんがassertがキライかどうかはどうでもいいわ。お好きになさい。例外投げたければ、
それもいいんじゃないかしら。なんども言うように宿題レベルではどっちでもいいと思うしね。
assertはアタシのスタイルを述べたまでよ。


それから「お局」ってハンドルからわかるように、若いオンナに見られる「ちゃん付けでわざと
自らを半人前扱いさせる」っている態度が鼻につくの。だから半分は難癖つけただけよ。
簡単にいえばイビリね。
アタシはオンナノコが大嫌いなオカマなの。ちなみにオトコノコは好き、オトコとオンナはふつうよ。
クソオカマの嫌みったらしい書き方も、細かいことにこだわってるのも、そういうこと。138で
その目的も達したみたいだから、アタシの当初の目的は全て達成されたわ。みなさまご協力
ありがとうございました。

ああ、140にさらに補足させていただくと、ニュートン法なんかを使うときには、解の推定初期値を
与えないとうまく動かないわよ。n次式の解を求めるルーチンを書くのは大仕事。詳しくは
数値計算の専門書をご覧になってね。
アタシだったら、恐くてそんな汎用化は考えられないわ。よっぽど自信がおありになるのね、
麻衣ちゃんは。若いって恐いもの知らずでいいわね。うらやましいわ。

ではみなさんごきげんよう。ババァは引っ込むので、麻衣ちゃんにご用のある次の方、どうぞ。ほほほ。
0142>お局NGNG
誰も望んでないのによくもまぁダラダラと…

このまま行ってもスレの趣旨とずれるのは目に見えてるし、やりたきゃ別スレ立ててやれば?
「もの知りお局の自己顕示スレッド」
なんてどう?

しかし負けず嫌いもそこまで行くと見苦しさを通り越して哀れだね。
下手くそなオカマキャラまで立てて、まったく情けないというかなんというか…
0143デフォルトの名無しさんNGNG
2次式を今度はn次式に仕様拡張してる・・・・
0144デフォルトの名無しさんNGNG
>>673
「こめけえヤツ」ってのも大人気無いよね。
\_ ____________________/
   |/
         ∧_∧
   Ψ     (∀・  )
   □     (∩∩  ) チョットネ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0145デフォルトの名無しさんNGNG
うざいのは長文だからじゃなくってS/N比が低いから。オカマノイズあっち逝け。
0146デフォルトの名無しさんNGNG
ということで、まったりと始めますか(わら
0147デフォルトの名無しさんNGNG
ちゃんと根拠をあげて主張しているので勉強になる。今後も
このスレで突っ込んでほしいのー>お局

0148デフォルトの名無しさんNGNG
>> 147
それは嫌。お局の発言はうざいだけだし。
あの程度の主張・知識はそこらに腐るほどころがっているよ。

そのうえここでまで見たくないって感じ。お腹一杯だって。

現実世界の”粘着いちゃもん・解説男”を見ているようで気分悪いよ。

0149デフォルトの名無しさんNGNG
「嫁VS姑!!」って感じでおもしろい。
麻衣ちゃん萌え〜
0150147NGNG
>>148
そうかなー。まあ各人の好みだから仕方がないけど、例えば
Kernighan & Pike の「プログラミング作法」を読んで学ぶのも
いいけど、キャラを演じつつ プライドをかけてやりあってるのを
見て、なおかつ勉強になる、ってのも俺は楽しいなー。
0151デフォルトの名無しさんNGNG
スレタイトル見ろよ。
宿題解決スレだろ?

何でそこまで一般化にこだわるかね。
0152デフォルトの名無しさんNGNG
>>151
暇だからでしょう。
0153デフォルトの名無しさんNGNG
ま、脱線してるのは確かだね〜。
喧嘩しないで、マターリ逝きましょうや。
俺、お局ファンだから、別スレ立てよや。
ねくすと宿題かもん、ということで麻衣がむばれ。
0154デフォルトの名無しさんNGNG
お局だがなにか聞きたいことある?スレか?
0155ageNGNG
なんか典型的オタクの一人しゃべり(悦に入る)みたいでイタイぞ>お局
0156デフォルトの名無しさんNGNG
しかしそのキャラは好きなので時々かき回しに来てほしいぞよ。
0157デフォルトの名無しさんNGNG
>>154
お局の「ちょっとひとこといいかしら?」
ってのはどう?なかなかナイスなキャラだとおもいます。両方がんばって欲しい。
0158麻衣NGNG
ageちゃうよ♪
0159デフォルトの名無しさんNGNG
regex のユニコードバージョンを自作しろという宿題がでました
麻衣ちゃんどうか作り方を教えてくだちぃ
0160>159NGNG
charの所を全部wchar_tとかにすればおしまいってわけにはいかんの?
んで、モジコード変換部は入り口と出口に書くってカンジで。
0161麻衣NGNG
>160
宿題でそんなコード提出したら怒られちゃうと思うの。
厨房は向こう行っててね(はぁと
0162159NGNG
>>160
rxのソース眺めてみたんですが
英語のコメントで理論もよくわからないんです
すみませんがよろしければ理論レベルから教えて下さい (涙)
0163麻衣NGNG
内部表件にコンパイルするのが条件なのかなぁ?
0164160>161NGNG
つーかこの方法、よく仕事で使ってますが。
文字列処理でガイジンの作ったライブラリを使う事ってあんまりないけどね。
修正に要する工数や問題は少なかったよ。
まあ、おれはまいちゃんじゃないしね。
他にどんな方法があるっちゅうのよ、いもうとよ・・
0165160>162NGNG
大学や専門生なら正規表現関係の本、図書館や購買で手に入らん?
日本人が書いたやつも2、3冊あると思うが。
あと、こういったライブラリは、まず使ってみて動作を把握する事からしないと移植なんて無理だよ。
0166159=162NGNG
>>163
構造が理解できるようなれば良いらしいです
NFAと最適化は組むように言われています

>>165
図書館には使い方の本はあったのですが組み方の本は置いてませんでした
組むには本読まないと組めないでしょうか?(難しいかな)
0167デフォルトの名無しさんNGNG
そしてスレ停止
0168デフォルトの名無しさんNGNG
ごめそ、ちょっとtestね。
< > &lt; &gt;
0169デフォルトの名無しさんNGNG
#if&nbsp;!defined(_SAMPLE_STREAM_)
#define&nbsp;_SAMPLE_STREAM_

#if&nbsp;_MSC_VER&nbsp;&gt;&nbsp;1000
#pragma&nbsp;once
#endif&nbsp;//&nbsp;_MSC_VER&nbsp;&gt;&nbsp;1000

#include&nbsp;&lt;Sstream&gt;
#include&nbsp;&lt;windows.h&gt;

class&nbsp;sample_buf&nbsp;:&nbsp;public&nbsp;std::basic_stringbuf&lt;char&gt;
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;sample_buf()&nbsp;:&nbsp;std::basic_stringbuf&lt;char&gt;(std::ios_base::out)
&nbsp;&nbsp;&nbsp;&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;~sample_buf()&nbsp;{}
protected:
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;int&nbsp;sync()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;表示動作
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
};

class&nbsp;sample_stream&nbsp;:&nbsp;public&nbsp;std::basic_ostream&lt;char&gt;
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;sample_stream()&nbsp;:&nbsp;std::basic_ostream&lt;char&gt;&nbsp;(&amp;_db)&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;virtual&nbsp;~sample_stream()&nbsp;{}
&nbsp;&nbsp;&nbsp;&nbsp;
protected:
&nbsp;&nbsp;&nbsp;&nbsp;sample_buf&nbsp;_db;
};

#endif

というコードを書いたんですけど、VCで

{
&nbsp;&nbsp;sample_stream smp;
&nbsp;&nbsp;smp << "test" << endl;
}

でsample_buffer::sync()を通過するのに、何故か友人のBCBだと通過しないそうです。
家にBCBが無いので、なんで通過しないのかわかりません。

どうか教えてください。
0170169NGNG
おもわずsageちゃったので、age!!
0171デフォルトの名無しさんNGNG
麻衣ちゃんage
0172麻衣NGNG
やってみたよ。
単に、endlが定義されてないってでたよ
0173169NGNG
あ、endlはstd名前空間で宣言されてますんで、
使う前に、
using namespace std;
していただけるか、もしくは、endlに名前空間決定子(だっけ?)を付けて、
smp << "test" << std::endl;
としてください。
0174169NGNG
あげ〜♪
0175169NGNG
失敗失敗(^^;
0176麻衣NGNG
呼ばれるのは OStream 内の basic_ostream からだけど

 VC++は  flush() で pubsync()が呼ばれる

 BCBでは ちょっと複雑で追いかけるのはメンドクサイ

フリーのBCB55落として自分でおいかけてよね
0177169NGNG
あ、説明不足でした。

一応追ってみることはってみたんです。(人に聞く前に試してみないと某水野になっちゃう(藁))
でも私にはVCのHP版とBCBのRougeWave版の、動作の相違点を見つけられなかったんです。

とりあえず、stringstreamではオブジェクトを作ったときに、stringstream用のstreambuffer、basic_stringbufferを自分に登録します。
この状態でstringstream >> std::endlを実行すると、 stringstream.flush() が実行されて、最終的にbasic_stringbuffer.syncが実行されるみたい。

というわけでsample_streamもこの方式に従って作ったんですけど、残念ながらBCBでは
sample_stream >> std::endlをしても sample_buffer.sync()をカスリもしなかったんです。

自宅にBCBは持っていませんし、まさか人のBCB環境に「これテストしてくれる〜?」って改造したSTLを渡すわけにも逝かないので、麻衣ちゃんに聞いてみようかな?と思った次第です。
0178デフォルトの名無しさんNGNG
ハノイの塔を再帰処理で作るには作ったのですが
なんでこれでハノイの塔ができるのか理解できません
そもそもどのような処理を行っているんでしょうか?
厨房な質問で申し訳ありませんが宜しくお願いします
0179埋NGNG
>>178
なんで自分で理解できてないプログラムを組めるのだ〜?ま、いっか。

n枚のハノイの塔だったら、やってる処理はこれだけ。
 ・小さい n-1 枚を別の棒に移す <-- ☆
 ・一番下のデカいヤツを空いてる棒に移す
 ・さっき動かした n-1 枚をデカいのの上に全部移す <-- ☆

☆印の部分は今度は n-1枚のハノイの塔問題なので、再帰で行けるのサ。
0180デフォルトの名無しさんNGNG
>>177 フリーのBCB55にはちゃんと STLは入っているよ
http://www.borland.co.jp/cppbuilder/freecompiler/index.html

デバッカもあるから落として コンソールアプリででも試したらいいんじゃないの?
0181デフォルトの名無しさんNGNG
でも、テンプレートの中までトレース出来ないでしょ

テンプレートを展開してくれるツールでもないと、デバッカ使えないんじゃないの?
0182169NGNG
なんとか出来ましたー。
0183デフォルトの名無しさんNGNG
(1)「氏名をローマ字で入力し、アルファベット順に出力する。
なお、氏名は14文字以内、忍従は50人以内とする」
(2)この名簿の作成をリスト構造を用いた処理に変更せよ

っと言う問題が解けません・・・・
言語はCです
分かる方本当に答え教えて下さい お願いします

0184デフォルトの名無しさんNGNG
にんじゅう・・・
0185デフォルトの名無しさんNGNG
>>183
どこがわからないんだ?

うっ、こう書くと煽りだな(^^;;;

つまりー、わからない理由は何よ?
「リスト構造がわからない」とか「入力作業がわからない」とかあるだろ?

そこら辺をきちんと整理しないで言われると凄く答える気をなくすんだよ。
0186麻衣NGNG
1番は配列を使えって事だよね? 1番は大丈夫だよね?

2番だけなら
struct nameList:;
struct nameList { nameList *next; char name[15];} * Top=NULL;


void Input(char *name)
[
struct nameList *q=NULL;
struct nameList *p=Top;
struct nameList *new=malloc(sizeof *p);
 while(p!=NULL){
  if( comp(p->name,name) ) brealk;
q=p;
p=p->next;
 }
new->next=p;
if(p==NULL)p=Top; else p->next=new;
}

ちょっとネムイ テストしてない ごめん おやすみ
0187デフォルトの名無しさんNGNG
C++になれてると「newは演算子では?」と思っちゃうな(^^;

おいらもねよう・・・。
0188183NGNG
1番も分かりません・・・・
ライブラリ関数でやるのかなぁって思ってたんですが・・・・
リスト構造使う前の一番から分からなくて・・・・
初心者何で・・・
入力作業は、gets関数で一行全部を出すようにすればいいのかなぁって
思ってたんですよ 参考書にライブラリ関数でs1とs2のような二文字の
入れ替えのがあったんでそれも使うのかなぁって思って・・・・
>>186
これってC言語ですか?
僕じゃ読む事出来ないです・・・・
0189185NGNG
全部答えちゃうとアレだから、方針だけ。

最初に名前の配列と、名前へのポインタの配列を作るんだよ。
とりあえず、人数が50人以内ってあるから、要素数は50で良いだろ。

最初にすることは名前の読み込み。
これは50回、getsを繰り返せばオッケー。
入力が""だったらその時点で名前の読み込みを終える。

でもって、名前のポインタの配列を初期化。
ポインタの配列の1番目のポインタは、名前の配列の1番をさして、
ポインタの配列の2番目のポインタは、名前の配列の2番をさして、
・・・っていう風にしてやる。

つぎに、ポインタの指し示している名前を比較するようにしてクイックソート。
クイックソートは省略。

最後にポインタの配列を1番から終わりまで表示して終わり。
0190183NGNG
ありがとうです
今日結構考えたんですけど、どうも思い描けなくて
明日起きたらもう一回考えてみます
分からなかったらまた来ます・・・・・
0191模範解答(藁NGNG
>>183
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct member_tag{struct member_tag *next;char name[15];} member;
int main(void){member m[50],*top=0;char buf[256];{int i;for(i=0;(i<50)&&
gets(buf);++i){member *p=top,*q=&m[i],**r=&top;q->next=0;sscanf(buf,"%14s",
q->name);while(p&&(strcmp(p->name,q->name)<=0?1:(q->next=p,0)))p=*(r=&(p->next));*r=q;}}
{member *p=top;while(p){printf("%s\n",p->name);p=p->next;}}return EXIT_SUCCESS;}
0192191NGNG
MacOS X のソースコードを読んでみたいです。
ダウンロードできる所教えて下さい。
0193麻衣NGNG
いや〜ぁ〜ぁ 186 は無かった事にして! 恥ちぃ
0194188NGNG
違うスレでも書いたのですが・・・・・
データの入れ替えの仕方がやっぱり分かりません・・・・
僕の書いたプログラムを一度見て下さい 見難いかも知れませんがお許しを
#include <stdio.h>
#include <string.h>

main()
{
char name[50];
int i=0,s,n=0;
do{
printf("氏名を入力して下さい\n");
gets(name);
s=strlen(name);
if(s>14)
printf("14字以内の名前を入力して下さい\n");
i++;
}while(i<50&&*name!='0' );
return(0);
}
0195埋NGNG
>>194
まだ全然入れ替え云々まで達してないよぉ…

キミの書いたソースの変数 name は何を表す変数のつもり?
name[0] が一個目の名前、name[1] は二個目…ってする予定なんだろうけど、
それなら char name[50][15]; だね。

で、gets するたびに違う場所に名前を保存しなきゃいけないわけだから、
gets( name[i] );
ってやる。(…てゆーかこのままじゃ、15文字以上入れられたらバッファオーバーフローするなぁ(汗。ま、いいか。 )
0196194NGNG
なるほど・・・・難しいです・・・・
明日までにか完成したい・・・
>>195さんありがとうございます

交換法か・・・・
0197194NGNG
>>195さんが言ってたように直したのですが
while文の終了条件の「0」を実行中に入れても
終わりません・・・・何が間違っているのか教えて下さい お願いします
0198埋NGNG
>>197
終了条件って *name!='0' ←コレ?
とーぜんこのままじゃダメだからね。

ようするにやりたいのは、「直前に入れた名前が 0 だったら終了」でしょ。
そうなる用に考えてみ?

# あと、この流れのままだと14文字より長いの入力されたときの対処が面倒そうだから、
# とりあえず完成するまではそーゆー事態は気にしないことにしちゃえば?ダメ?(^^;
0199197NGNG
はい 今考えていたのですが、上手くいかなかったので
それを気にしない事にしようかと・・・・(^^;
後、終了条件「−1」をすればいいんですよね???
そうしたら終了する事出来ました 何か嬉しかったです 感謝です
やっとここまでこれた・・・後は最難関の交換・・・・
0200191NGNG
俺のプログラムは最悪だが(w、動くぞ。ためしてみ。

何かアルゴリズムの本持ってるかな。なれないうちは
図を丁寧に書いて(できればメモリ図まで書く)理解したほうがいいよ。
ソートは標準関数を使うほうが一番楽だけど
バブル、インサート、シェル、クイックいろいろあるから
そこから頭に入れよう。
0201埋NGNG
>>191
どーせなら7行に納めろや(w

…ナンチテ
0202199NGNG
>>200
はい ありがとうございます これはリスト構造使ってますよね?
僕その前でつまずいていまして・・・・ 今軽く動いたのでミスチェックお願いします
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

main()
{
char name[50][15];
int i=0,j,s,n=0;
printf("氏名を入力して下さい\n");
do{
gets(name[i]);
s=strlen(name[i]);
if(s>14)
printf("14字以内の名前を入力して下さい\n");
qsort( name, n, 15, strcmp );
i++;n++;
}while(*name[i-1]!='0');
for( j=0; j<n; j++ )
printf( "%d %s\n", j+1, name[j] );
return(0);
}
実行すると、左側の数字で「0」と後、四人の名前を入力すると次の番号の「5」
ってのが現れてしまいます。 後一つ、終了条件でリターンキーで終了にしたい
場合はどうすればいいんでしょうか?
0203191NGNG
>>201
#includeきつい(w
達人ならqsort自前で7行いけるかも
0204デフォルトの名無しさんNGNG
>>202
5がでるのは正しくない入力(0)のときもnが加算されてるから
じゃないでしょうか。リターンキーで終了するなら s == 0 で
だめかなぁ・・(たぶん)

#ちなみにソートするなら最後にかけたほうがいいですね
0205202NGNG
>>204
s==0で駄目でした・・・・
一つ入力してリターン押すだけで終了してしまいます・・・・
0206202NGNG
あっ s!=0で出来ました
0207202NGNG
今度は例えば5人入力したら、プラス二人分の数字が出てしまう・・・
0208埋NGNG
>>207
最新版はコッチ?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893&st=475&to=475&nofirst=true

・qsortはループの外に
・リターンで終了の方は if( s==0 ) break; にして、
 while() の中身には50人で終了って方の条件を書いておく
・s>14 だったら i++ やら n++ はしない
・ループ後の謎の n++ は何?

かな。
0209207NGNG
>>208
指摘された部分を直して、一応は完成する事が出来ました
ありがとうございます
次はこれをリスト構造を使って書き直さないと・・・・
うぅ・・・・・
0210202NGNG
>>191さんのプログラム何ですが、僕には少し難しいんですね
q->next=0;sscanf(buf,"%14s",q->name);
{member *p=top,*q=&m[i],**r=&top;q->next=0;sscanf(buf,"%14s",
q->name);while(p&&(strcmp(p->name,q->name)<=0?1:(q->next=p,0)))p=*(r=&(p->next));*r=q;}}
{member *p=top;while(p){printf("%s\n",p->name);p=p->next;}}return EXIT_SUCCESS;}
この辺りなんですが、ほとんど理解出来ません
リスト構造と言うのを理解していないんですが・・・・
大変申し訳ないのですが、もう少し僕のプログラムに沿って簡単になりませんか・・・
ホント厚かましいですね・・・・
0211191NGNG
>>210
説明だけね. (qsortでリストっていうのはなんだか違うような気が少しするので)

麻衣ちゃんすれなので.
多分、読むの嫌になると思うので麻衣が少しゆっくり解説するね.
大枠は、データ入力しながら昇順のリストをつくって、リスト順に出力してます.

構造体 member_tag (typedef as member) はリストとなるポインタと名前をいれる
器です. ポインタ next は、次の名前を入れた member_tag を指します.
そして先頭を指すために top があります.

top->[nextが次を指す,name]->[nextが次を指す,name]->...

終端の next は null です. リストが空のときは top が null . (初期状態)


次はコード.

while((n<50)&&gets(buf)) { ... }

↑n が今取り込む行の番号を指していて, 入力は行単位で 0 .. 49 行まで(n<50).
50 行以上になればループを終了. 一行に何文字入力されるかわからないけど
とりあえず 256 文字までとして、行バッファ buf(行データ入れる場所)に
いれます. もし処理する行がないなら gets(buf) は null になりループ抜けます.

p=top;q=&m[n];r=&top;

↑p はリストの先頭を指します. null なら空ですね. q は今入れる行番号 n に
対応する member を指します. r は今指してる q をどこに入れようかっていう
場所.

q->next=0;sscanf(buf,"%14s",q->name);

↑q の next を null にして(これが終端になるかもしれないから) q の name に
buf から 14 文字分まで取り込んで入れます. これで一行が 14 文字より多くても
大丈夫です.
0212191麻衣NGNG
while(p&&(strcmp(p->name,q->name)<=0?1:(q->next=p,0))) p=*(r=&(p->next));
*r=q;

↑まず p を見ます. これは今注目してるリスト上での行になります. (先頭から
辿っています) もし、今見てるところが無いなら p は null なのでループを抜けます. 最初はリストができていないので null です, そのまま抜けますが, r は
top を指しているのでここに q が書き込まれて top の内容は q を指すように
なります. q の next は 0 なのでリストができています.

p が null じゃないなら, 次に p の名前と q の名前を比べます.
これは, q の入る場所を探しているんです. もし p のほうがアルファベット順に
小さいか、等しいなら 0 以下の値になるので, p にリストの次を指してもらって
リストの最後になるまで ( p = p->next が 0 ) 繰り返します.
ここで, 繰り返すときに r が p->next を指すように変更してるところに注目して
下さい. ループを抜けたとき, r は最後に見た p の next に変更されているので
*r = q; で p の next が q を指すようになるんです.

         ↓これは q よりアルファベット順で大きい(strcmp>0)
[next,name]--&gt;[next,name]--&gt;[next,name]--&gt; ...
↑ r は前に見た member, ここの next を指す
       ↑ q をここに入れるときは *r = q になればいい.

strcmp>0 のときにすることがあとひとつ残っています.
q の next が次の member を指すようにすること. すでに p は q より大きいので
これは q->next=p したら良いです. あとは続ける必要ないのでループを抜けます.
(strcmp(p->name,q->name)<=0?1:(q->next=p,0))

この繰り返しでリストが出来ていきます.
0213191麻衣NGNG
p=top;while(p){printf("%s\n",p->name);p=p->next;

あとは, top が先頭の member を指し、その next が順に次を指していく
(next が null になったら終わり)リストができているので,
p に先頭を指すようにして(p=top) p が null でない間、名前の表示し
(printf("%s\n",p->name);)、次を見る(p=p->next;)を繰り返して
終わりです.

ごちゃごちゃしてますが、リスト構造の基本はつなげていくことです.
a --&gt; b --&gt; c --&gt; ... こんな感じに.
あとはあなたの学習に期待します.
0214191NGNG
うざくてスマ>all
0215デフォルトの名無しさんNGNG
      ,一-、
     / ̄ l |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ■■-っ < んなーこたーない
    ´∀`/    \__________
   __/|Y/\.
 Ё|__ | /  |
     | У..  |
0216210NGNG
ありがとうございます
今一度読んだのですが、何度も読まないと僕の頭では
理解できないみたいなので、何度も読んで理解してみます。
残り三日でどこまでやれるか分からないのですが
とりあえず、出来る所までやって会社に提出しようと思ってます
全部で10問あるのですが、上のは9番で、それまでの奴の
フローチャートもこれから書かないといけないので出来るかどうかは
僕の努力次第って事ですね。
0217埋NGNG
>>216
フローチャート書く方を先にやっとくべきなんじゃないかなぁ、と、ふと思ってみたり。

ま、頑張ってね☆
0218210NGNG
あっそうですかね・・・・
とりあえず、出来るだけ頑張ってみます・・・・
学生生活最後と言うか、社会人前の残りの時間に
遊べないのは少し憂鬱ですが、今までやってなかった自分が
悪いからしょうがないや・・・・
0219デフォルトの名無しさんNGNG
210はそもそもポインタが判っていないに一票
0220210NGNG
ポインタですか・・・・
言っている意味は分かっているつもりなんですが・・・・
どうなんでしょうかね・・・・
0221デフォルトの名無しさんNGNG
年度終了上げ
0222デフォルトの名無しさんNGNG
麻衣たん‥‥ハァハァ
0223デフォルトの名無しさんNGNG
ウハウハ
0224デフォルトの名無しさんNGNG
仮想メソッドのオーバーライドをしている関数を「多態」の概念を使わずに説明する方法を教えてください。
30分以上悩んでるけど、うまい説明が思いつかない。
0225デフォルトの名無しさんNGNG
>>224

「ここは処理をカスタマイズしているんだよ」とでもいえば?
あとは自分で考えよう。

っていうか多態抜きでそんなこと説明して意味あるの?
0226デフォルトの名無しさんNGNG
バイトの仕様書でねー・・・。
難しい言葉使うなゴルァ!!とか言われたんだよ・・・。鬱。
0227デフォルトの名無しさんNGNG
じゃあ、噛み砕いてあげればいいんじゃないの?
「言葉」と「概念」はレベルが違う
0228デフォルトの名無しさんNGNG
>>224ではないけれど。
そのかみ砕きかた、私も知りたいなぁ♪
0229デフォルトの名無しさんNGNG
行いたい動作を指定すると、いくつかある処理の中から適切なものが自動的に
選ばれて実行されます。
以前の手法では、どの処理が適切な処理なのか、プログラマがひとつひとつ
確認して指定する必要がありました。その確認処理が自動化されたので、
ミスが減少し、品質の高いプログラムが作成しやすくなりました。

とか
0230デフォルトの名無しさんNGNG
すばらしい!>>229
でもそれでもまだ「難しい」と言われるかも。
噛み砕き方なんてどうでもいいんよ。
自分が「多態性」を使う時のイメージを使えば。

それにしても、224ってバイト君で、
会社でのチームリーダーかなんかにそういうこと言われたのかな?
だとしたら相当・・・
0231デフォルトの名無しさんNGNG
なんとかだまくらかしてオーケーもらったよ・・・。
さんくすあろっと ふぉー おーる♪
0232質問厨房NGNG
コードの途中のアドレス知る方法ってあります?VC++で。
関数の先頭アドレスとかは普通に判るんで、そこからnバイト〜とかやっていても、
途中のコード変えたりコンパイルオプション変えたりするとズレますよね。
自己書き換えっつっても、AIとかじゃなくて、プログラムサイズ縮小狙ってます。
0233232NGNG
よー考えたら、アドレス知りたいとこで関数へのポインタ使えば
解決ですね。厨房カキコすみません。
0234デフォルトの名無しさんNGNG
>>232
せいぜいデバッガで追うくらいしかないんでは?
最適化かけたら元のソースと一対一対応なんてつかないし。
0235デフォルトの名無しさんNGNG
麻衣ちゃん元気?
0236デフォルトの名無しさんNGNG
460・・・
0237麻衣NGNG
>235

新学期がはじまってから、麻衣はクラブ活動が忙しくて。
0238デフォルトの名無しさんNGNG
NP-completeな問題がO(N^6)で解けるっていうウワサ、ほんと?
0239デフォルトの名無しさんNGNG
>>227
1行目はともかく2行目には激しく同位体。
そんなに「概念」が嫌いならプログラマ/ソフトハウスなんざ
たたんじまえって感じ。小難しいもん(大難しくはないが(笑))を
避けて通れる畑じゃないっしょ。
0240デフォルトの名無しさんNGNG
わけのか分からんすれが上がってる

負けるな麻衣ちゃんage
0241デフォルトの名無しさんNGNG
麻衣ちゃんにはお世話になったのでage
0242デフォルトの名無しさんNGNG
さがってるのでage
0243コロコロNGNG
私の学校で出ている課題について教えてください。できれば、コード記述でお願いします。

 課題 文字列操作

 <処理概要>
入力ファイルに入っているランダムな文字列を読み込んで編集する。
 入力ファイル名  \public\C言語応用\課題02\input.txt

入力ファイルの内容

 io4@5ovgiq@w340 9tn@q0mikanb924 rwijra;o4 aestrawberryut@90
240strawberry9t animikanrja ddg fvbananaxjfringogqworiadf;
amomolkjtcwieroutstrawberry34t7vv
dsgfoiuto sdrgovq@4r q0awitflksjd;f
laumikanwett errgt thhbcvbasf fitu@qo4rfachocolateaaarffvnxdkjfq23
sdfgi oq34itu aqeurgvksjd q9bananau4 tue ggsjdgoiumomoq349tifvk
asrgmomoio uweringoorigporegf
asdmomofg sjd;fmikanligurin@qa94it kwjegfr:bananaa ergtqaegr
dfgi oeoitgu;fldkgj b9wu44tlgkjjlksvdjgfsmikanadfg
oiupqoi34 ta;lkdf j;lakjdfg0987 bjlhbxcvblkj
;lkjchocolateroigeurrgssdmomoffkjahljhringoglar+ j;lkj4rti

 <詳細仕様>
    入力ファイルの内容は、ランダムな小文字のアルファベット文字列からなり、
    1行の文字数は揃っていない。これを1行ずつ読み取り、次の編集を加えて
    1行を20文字に揃えて標準出力する。加える編集項目は、以下の通り。

1.文字列"ringo"を発見したら、"APPLE"に変換し、発見回数を数える。
2.文字列"mikan"を発見したら、"ORANGE"に変換し、発見回数を数える。
3.文字列"momo"を発見したら、"PEACH"に変換し、発見回数を数える。
4. 文字列"banana"を発見したら、後ろに"cake"を付ける。
5. 文字列"strawberry"を発見したら、後ろに"cake"を付ける。
6. 文字列"chocolate"を発見したら、後ろに"cake"を付ける。
7. 1〜6以外の文字列の場合は、"."(ピリオド)を出力する。

   例えば、入力ファイルの1行目にq0mikanb924という文字列があるが、
  この"mikan"の部分が"ORANGE"に変わる。他の文字はピリオドになる。


  【結果の表示例】

  ・・・・・・・・・・・・・APPLE・・
  ・・・・・ORANGE・・・・・・・PE
  ACH・・・・・・bananacake・
  ・・・・・

 ringoの出現回数は、1回
 mikanの出現回数は、1回
 momoの出現回数は、 1回
 bananaの出現回数は、1回


 以上が課題の内容です。ご託宣お願い致します。
いろんなスレに顔出してすみません。ただ、非常に切羽詰まってます。
0244デフォルトの名無しさんNGNG
>>243
ここ参照
http://user.memberz.to/active/idol/
0245ぐひひNGNG
>>243
小一時間もあればできそうだな・・・
エコアイスのエッチな絵を30枚持ってきたら
作ってあげますよ。
0246デフォルトの名無しさんNGNG
>>245
そんな、微妙にマイナーなキャラクタの絵を要求するなよ……。
0247デフォルトの名無しさんNGNG
>>243
文字列操作はここ参照すべし
ttp://green.jbbs.net/shop/80/uramono.html
0248名無しさん@おなかいっぱいNGNG
>>243
c++でstringが使えるなら即できそうだね。
0249ぐひひNGNG
>>246
すまないね。
メジャーどころで、ななかのエッチな絵なら20枚で作ってあげよう

文字列操作よりも文字列比較だな。
対象の文字列を編集するのでなく、次々とコピーしていくような
構成にするのがよかろう。
0250ぐひひNGNG
ジョジョのえっちな絵でもいいぞ!

参照元をさすポインタを char *p;
出力先を指すポインタを char *q;
とすると、
strcmp( 比較文字列 ,*p) == 0 なら
strcpy( q, 入れ替え文字列 ); q=q+strlen(入れ替え文字列);
そうでなければ *q++=*p++;
これを繰り返す感じだな。
0251ぐひひNGNG
とっととエッチなのモッテコイヨ! 超メジャーなところで、
ラブひな のならいくらでもあるだろ?それ30枚でいいよ。

>>250で少し間違えてたな。
>そうでなければ *q++=*p++;
設問ではここは *q++='.'; にすべきだったね。
で、ここまでで十分作れると思うんだけど、
なんか質問ある?1質問につきエロ絵5枚要求するが。
0252デフォルトの名無しさんNGNG
>これを1行ずつ読み取り、次の編集を加えて
一行ずつでないと駄目なの?
全部読み込んで、改行を削除した方が簡単になるけど。
0253ぐひひNGNG
>>252
それが課題の必須条件ならしょうがないな。
>>243よ、先生に聞いたほうがいいぞ。
女教師ならその写真はここに掲載しろ。
もっとも、一行づつ読んでもまとめて読んでも手間は
そんなに変わらないけどな。めんどくさくなるけど
0254246NGNG
>>250
strcmp() だと、比較する文字数を指定できないのでダメだと思うが……ネタ?

でさ >>243 はエコアイス、ななか(って誰?)、ラブひな、ジョジョか、どれで
も良いけど絵は用意できたのかい? 俺の手元には、動くコード用意できて
るけど。

一部分抜粋

struct trans_table {
  const char *t_src;
  const char *t_dst;
  int t_srclen;
  int t_count;
} table[] = {
  { "ringo",    "APPLE",     0, 0 },
  { "mikan",    "ORANGE",     0, 0 },
  { "momo",     "PEACH",     0, 0 },
  { "banana",    "bananacake",   0, 0 },
  { "strawberry",  "strawberrycake", 0, 0 },
  { "chocolate",  "chocolatecake", 0, 0 },
  { NULL,      NULL,      0, 0 }
}, *transp;
char buf[BUFSIZ];

for (transp = &table[0]; transp->t_src != NULL; ++transp)
  transp->t_srclen = strlen(transp->t_src);
/* ここは秘密 */
for (transp = &table[0]; transp->t_src != NULL; ++transp)
  printf("%sの出現回数は%d回\n", transp->t_src, transp->t_count);

>>245-253
ヴァカ学生相手には sage で頼む。
0255デフォルトの名無しさんNGNG
>>243
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991155027&st=51&to=51&nofirst=true
書くべきスレを間違えたら、あやまりましょう。(^^;
0256sageるNGNG
>>255

>>1
>これからは私がお兄ちゃんの宿題手伝ってあげる。
0257デフォルトの名無しさんNGNG
>>256
このスレッドについての話じゃなくて、コロコロが「賢い勉強法は?」
スレッドで >>244 に対してコメントつけてることを指摘してると思われ
0258コロコロNGNG
>>254さん 大変ありがたいのですが、私のレベルを超えたプログラム
で、説明できず、パクリだと思われてしまいます。
私は、低レベルなのでそれに即したプログラムでお教え願えないでしょうか。
また、fgetsなんかを使うのでしょうか?
0259デフォルトの名無しさんNGNG
いい加減にしとけよ>258
0260デフォルトの名無しさんNGNG
この程度の問題も出来ないのなら、才能無いから学校なんかやめた方がいいぞ。
0261デフォルトの名無しさんNGNG
>258
この問題は、
・文字列とポインタ
・ファイル入出力
の2つをマスターしてないと解けないし、解法を説明されても理解できない。
自分が低レベルなら基礎から勉強し直せ。
0262デフォルトの名無しさんNGNG
>>243
プリンターに出力して、手動で置き換えた後、
カンピューターに入力する。
0263デフォルトの名無しさんNGNG
コロコロ君。ハンドルはタコなのかい(w
サッカーばかり見てないで勉強しろよっ!
0264ぐひひNGNG
>>258
おい! エッチな絵はまだか?!

ファイルの読み込みと、文字列の変換とは別に考えろよ
0265デフォルトの名無しさんNGNG
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893&st=973&to=974&nofirst=true
既に答えでてるじゃん。
0266デフォルトの名無しさんNGNG
それをそのまま出したら誉めてやるけどな
0267デフォルトの名無しさんNGNG
誉めてくれるってよ! やったじゃん。
0268デフォルトの名無しさんNGNG
>>264 ここ参照
http://www.ucatv.ne.jp/~spitznao/itimatu.htm
0269ぐひひNGNG
>>268
Σ(゚д゚lll) ショック !
そんな電波ページみせるなよ・・・
0270>>コロコロNGNG
汎用性が全くなく、変数名も適当ですが、サルでも、
分かるように書いたので、足りない所は自分で作って下さい。
尚、このようなマルチポストは、二度としないように。
#include <stdio.h>
#include <string.h>

char *mygets ( FILE *fp ) {
static char buf[260] ; size_t n ;
memset ( buf , '\0' , sizeof(buf) ) ;
if ( fgets ( buf , sizeof(buf) , fp ) ) {
n = strlen ( buf ) ;
if ( n && buf[n-1] == '\n' ) { buf[n-1] = '\0' ; }
if ( n && buf[n-1] == '\r' ) { buf[n-1] = '\0' ; }
return ( buf ) ; }
return ( NULL ) ; }

size_t myputs ( char *p , size_t n , size_t m ) {
while ( n ) {
if ( m < 20 ) { printf ( "%c" , *p ) ; p++ ; m++ ; n-- ; }
else { printf ( "\n" ) ; m = 0 ; } }
return ( m ) ; }

int main ( int argc , char *argv[] ) {
FILE *fp ; char *p ; size_t n ; size_t m ; size_t l ; int ringo ;
ringo = 0 ; n = 0 ;
fp = fopen ( "input.txt" , "r" ) ;
while ( p = mygets ( fp ) ) {
m = 0 ; l = strlen ( p ) ;
while ( m < l ) {
if ( !memcmp ( p+m , "ringo" , 5 ) ) {
n = myputs ( "APPLE" , 5 , n ) ; m += 5 ; ringo++ ; }
else if ( !memcmp ( p+m , "banana" , 6 ) ) {
n = myputs ( "bananacake" , 10 , n ) ; m += 6 ; }
else { n = myputs ( "." , 1 , n ) ; m++ ; } } }
fclose ( fp ) ;
printf ( "\n\n--------------------\n" ) ;
printf ( "ringoの出現数は%d\n" , ringo ) ; }
0271デフォルトの名無しさんNGNG
>>269
もう遅いです。貴方は障られました。
0272デフォルトの名無しさんNGNG
>>270
いや、それは・・・ハッ!
コロコロのレベルに合わせたってことか! 納得の出来栄えだぜ!
0273270NGNG
訂正。

char *mygets ( FILE *fp ) {
static char buf[260] ; size_t n ;
memset ( buf , '\0' , sizeof(buf) ) ;
if ( fgets ( buf , sizeof(buf) , fp ) ) {
n = strlen ( buf ) ;
if ( n && buf[n-1] == '\n' ) { buf[n-1] = '\0' ; n-- ; }
if ( n && buf[n-1] == '\r' ) { buf[n-1] = '\0' ; }
return ( buf ) ; }
return ( NULL ) ; }

ちなみに、この関数の最初の名前はsarugetsだったりする。(謎)
0274254NGNG
>>258
ほら、残りな。これが理解できないようだと話にならんので、気合入れて理解するか、
首を吊るか好きな方を選択してくれ。

それと >>254 で指定した絵は、ちゃんと見つけて URL 報告するよう。

#include <stdio.h>
#include <string.h>
#define NELEM(x)  (sizeof(x) / sizeof(x[0]))

void
translate(FILE *fp)
{
  struct trans_table {
    const char *t_src;
    const char *t_dst;
    int t_srclen;
    int t_count;
  } table[] = {
    { "ringo",    "APPLE",      0, 0 },
    { "mikan",    "ORANGE",    0, 0 },
    { "momo",    "PEACH",     0, 0 },
    { "banana",   "bananacake",   0, 0 },
    { "strawberry", "strawberrycake", 0, 0 },
    { "chocolate",  "chocolatecake", 0, 0 },
    { NULL,      NULL,        0, 0 }
  }, *transp;
  char buf[BUFSIZ];

  for (transp = &table[0]; transp->t_src != NULL; ++transp)
    transp->t_srclen = strlen(transp->t_src);

  while (fgets(buf, NELEM(buf), fp) != NULL) {
    const char *p = &buf[0];
    while (*p != '\0') {
      for (transp = &table[0]; transp->t_src != NULL; ++transp)
        if (strncmp(p, transp->t_src, transp->t_srclen) == 0) {
          ++transp->t_count;
          fputs(transp->t_dst, stdout);
          p += transp->t_srclen;
          goto done;
        }
      putchar(*p++ == '\n' ? '\n' : '.');
    done:
      ;
    }
  }
  putchar('\n');
  for (transp = &table[0]; transp->t_src != NULL; ++transp)
    printf("%sの出現回数は%d回\n", transp->t_src, transp->t_count);
}
0275デフォルトの名無しさんNGNG
2行にまたがる単語はありですか?
例えば、下のringoとか。
aljfnri
ngoenad
0276デフォルトの名無しさんNGNG
>>275
とうぜんアリだろうな。要改造かな。
0277デフォルトの名無しさんNGNG
ttp://fine-goal.virtualave.net/paimomi.jpg
0278デフォルトの名無しさんNGNG
約束の報酬です。
http://cocoa.2ch.net/test/read.cgi?bbs=linux&key=989345217
0279デフォルトの名無しさんNGNG
エココって、東北電力だかのマスコットでせう?
0280コロコロNGNG
>>270さん
>>274さん
すいません。よく理解できません。1行読み込みをどうすればいいかだけでも
教えてくれないでしょうか。
0281くNGNG
学校の課題です。誰か教えてください。

成田空港の駐車料金は以下のようになっています。最初の一時間は500円、一時間を
越えて6時間までは30分ごとに250円ずつ加算、6時間を越えて72時間までは30分ごと
に30円ずつ加算、ただし、6300円が上限、72時間を越えると12時間ごとに900円ずつ
加算されます。たとえば11時間駐車すると500+2500+300円になります。年月日つき
の入庫時刻と現在時刻を入力して駐車料金を表示するプログラムを書きなさい。

これって月や年が変わると以上に面倒なんですが、誰か教えてくれませんかね?
0282記憶でコピペNGNG
>>281
秒にしてから計算しろ
0283デフォルトの名無しさんNGNG
分に換算

  分  円
〜0060 500
〜0360 (p /30) *250
〜3660 3000 + (( p-360 ) /30) *30
〜4320 6300
〜    6300 + (( p-4320 ) /720) *900
0284デフォルトの名無しさんNGNG
>>280
……せめて、聞く前に絵を見つけてくる程度の誠意は見せろよ。
0285デフォルトの名無しさんNGNG
>>280
本気で聞いてるのなら、そこら辺の入門書でも読みなさい。
ネタだったらウザイから、もうやめれ。
0286デフォルトの名無しさんNGNG
>>265
のリンク先にワラタ。
0287デフォルトの名無しさんNGNG
ところで>>270>>273は260文字目と261文字目にまたがる単語は検出できないのでは?
0288デフォルトの名無しさんNGNG
>>287
コロコロネタは飽きた
0289コロコロNGNG
>>270さん

申し訳ないのですが、 mygets関数とmyputs関数がどういった処理をしているか
お教え願えないでしょうか。
0290デフォルトの名無しさんNGNG
>>281

#include <stdio.h>
#include <time.h>

int str2int( char *tmp )
{
char buf[3]={0};
strncpy(buf,tmp,2);
return atoi(buf);
}

int gettime( char *timestr )
{
struct tm tmtime={0};
tmtime.tm_min =str2int(timestr+8);
tmtime.tm_hour=str2int(timestr+6);
tmtime.tm_mday=str2int(timestr+4);
tmtime.tm_mon =str2int(timestr+2)-1;
tmtime.tm_year=str2int(timestr+0)+100;
return mktime( &tmtime );
}
0291デフォルトの名無しさんNGNG
>>281

>>290 つづき

main(int argc, char **argv)
{
int p;
int result = 0;

if( argc<3 ) {
printf("usage: $ park <start> <end>\n YYMMDDHHmm\n");
exit(0);
}

p = (gettime(argv[2])-gettime(argv[1])) /60;

result = (p< 60) ? 500 :
(p< 360) ? (p /30) *250 :
(p<3660) ? 3000 + (( p-360 ) /30) *30 :
(p<4320) ? 6300 :
6300 + (( p-4320 ) /720) *900 ;
printf("result= %d\n",result);
}
0292デフォルトの名無しさんNGNG
>>281

>>291 つづき

使い方

park <駐車開始時間> <駐車終了時間>

時間の表記は 年年月月日日時時分分
2001年6月8日11時45分 は 0106081145
0293デフォルトの名無しさんNGNG
>>281

>>291 つづき
エラーチェックは省いてある。
計算があっている保証も無い。
解説はしない。

理解し修正し自分を磨け。
0294デフォルトの名無しさんNGNG
にせんねんもんだいは?
0295デフォルトの名無しさんNGNG
>>294
んなもん考慮してないよ
てゆーか、2037年だか38年だかで狂う
0296デフォルトの名無しさんNGNG
あるファイルがビットマップかテキストファイルか実行ファイルか
を拡張子以外で識別する方法をVC++を使って作れといわれたのですが
まったく方法が思い浮かびません。
よろしければ知恵を貸してください。
0297デフォルトの名無しさんNGNG
>>296
先頭にヘッダがあるからそれをみればいいらしい
0298まこNGNG
すみませんがどなたか教えてください。
oracleのSQL*PlusをCシェルに埋め込むとき、

sqlplus username/password @SQL文の書いてあるファイル

ってやりますよね。
このときこのファイルのwhere文とかが変動性があって、
パラメータで渡したいときってどうしたらいいんですか?

sqlplus username/password @SQL文の書いてあるファイル 引数

みたいなことして、
その引数をSQLファイルの中でARGVとかで
取り出す方法を探してるんですが。
なかなかマニュアルとかみてもわかんないんです。
新米プログラマのわたしに
SEからされたいぢわる宿題・・・(;;)
0299デフォルトの名無しさんNGNG
checktermと(unix上で)入力して実行すると
文字列の中から特定の文字列を検索してヒット数とその文字列を
表示するプログラムが出題されたんですが・・・
1.checkterm return
2.文字列を入力 例.abacabcada
3.検索する文字列を入力 例.a#a(#はワイルドカードで、任意の文字)
4.出力 3 aba aca ada

↑こんな感じです。文字列の字数に制限はありません。
初心者で恐縮ですが全く手順が思いつかないので
どなたか力を貸してください、宜しくお願いします。
0300299NGNG
↑あ、C言語の課題です、失礼しました。
ご教授お願い致します・・・
0301デフォルトの名無しさんNGNG
>>299=300
思い付いたのは思い付いたんだけど、めちゃくちゃ
泥臭くてダサイ、というわけではなくて、ほんとに
何も思い付かないの?
0302299NGNG
>>301
main(int argc, char *argv[])
を用いることは分かるんですが、本当にアルゴリズムが浮かんでこないです。
すいません、ポインタ習ったばかりの厨房です・・・
0303デフォルトの名無しさんNGNG
>>299-300 >>302
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991726421&nofirst=true&st=16&to=16
0304まこNGNG
298です。
調べたらちょっとわかったんですよね。
&(アンパサンド)で変数扱いできるんですね。

301,303読んでそーだなぁ、他人にお願いする前に
自分のできることしつくせっっっって反省しました。
まだちょっとわかんないとこあるんですが
自前で頑張ってみますぅ。
0305デフォルトの名無しさんNGNG
このスレの存在意義まで否定すんなよ(w
0306デフォルトの名無しさんNGNG
>>305
要は向学心の有無なのよ。
ハナからやる気無くて、それでも単位は欲しくて、「コード書いてください」
なんて言ってる奴は氏ねってこと。

自分で考えて考えて、どうしても引っかかってることがあって助けを求めて
くるなら差し伸べる手は惜しまないよ。
0307デフォルトの名無しさんNGNG
>>304
稀に見る向学心溢れる若人よ。youはきっと伸びる
0308デフォルトの名無しさんNGNG
>>299
ところで仕様の質問なんだけど、検索文字列で
a##a は書式として許される?
a#b は?
a# は?
#a は?
# は?
a は?
0309299NGNG
>>303,>>306
そうですね、考え抜かずに結論だけ得ようとする姿勢だったかも知れません。
失礼しました。
結構ギリギリまで粘ったつもりでしたが…今夜12時が提出期限なので
それまでもう少し考えてみます。

>>308
はい、全て許されます。順序や字数に制限はありません。
0310299NGNG
あげちゃった…申し訳ない
0311デフォルトの名無しさんNGNG
perlみたいにメタ文字にするキャラクタを変更出来るようにすればいいかもね。
('#'自体を含めたい場合とか)
仕様をまず考えないと。
・#は0個以上の任意の文字
・連続する# -> 1つの#と等価
と見なすとか。
0312デフォルトの名無しさんNGNG
あと、#が最長一致なのか最短一致なのかもわからんと。
最長一致 検索文字列 "b#d" 被検索文字列 "abcdefabcdef"
-> "bcdefabcd"
最短一致 検索文字列 "b#d" 被検索文字列 "abcdefabcdef"
-> "bcd"
他には、複数見つかった場合どうするのか、とか。
0313ぐひひNGNG
>>299
暇つぶしに作ったよ。
"AI止ま" または "ラブひな" のエッチなCGを20枚進呈してくれたら
あげるよ。
0314299NGNG
レスありがとうございます。
>>311-312
1つの#に任意の文字1つが入ります。#が連続する場合は連続する任意の文字が入ります。
この場合最短一致で、複数見つかったときは全て出力します。

先週の課題「文字列20文字(入力)の中から5文字の文字列(入力)を
検索し、ヒット数を出力」するプログラム(下記)が理解できていれば
出来るらしいですが、入力文字数無制限をどう表現するか?
ポインタ変数をどのように用いるか?まだ見えてこないです…
main()
{
char moji[20];
char find[5];
int answer=0;
int i,j,k,l=0;

gets(moji);
gets(find);

for(i=0;i<=15;i++){
if(moji[i]=find[0]){
for(j=1,k=i+1;j<=4;j++,k++){
if (moji[k]==find[j])l++;
if(l==4)answer++;
}
l=0;
}
}

printf("%d\n",answer);
}
0315299NGNG
>>313
ありゃ?作って下さったんですか!
けど当方モーコラ位しか持ってないんですよね…
0316ぐひひNGNG
>>314
なんだ、もうあるじゃん。じゃ、それをベースに話そう。
文字数の制限をとっぱらうか。とりあえずヒントの羅列〜

char moji[1000]={0};
char find[1000]={0};
int mojimax,findmax;
入力
mojimax=strlen(moji);
findmax=strlen(find);
for(i=0;i<mojimax-findlen;i++){

こんな感じか。
それと、三次元の絵はだめだぞ。二次元の絵を持ってこなゃ。
0317ぐひひNGNG
>>315
ところで仕様についてさらに質問なんだけど、
検索結果は、個数を先に表示するの?それとも後で?
それによって面倒くささが違ってくるんだけど。
0318299NGNG
>>316-317
ありがとうございます。えっと、個数が先だったと思います。

2次元ですか…すいませんがあげ方も知らないし、
http://www.muvc.net/subeman/index4.htm
http://www2.tomato.ne.jp/~sugar/mangalink.htm
こっから探したほうがいいかと思います…
まあどっちにしろ期限に間に合いそうに無いので一晩じっくり考えてみます
0319ぐひひNGNG
全角スペースは半角スペース2個に置き換えてくれい

main()
{
 char moji[1000]={0};
 char find[1000]={0};
 char temp[1000]={0};
 int answer;
 int i,j;
 int mojimax,findmax,tempmax;

 gets(moji);
 gets(find);
 mojimax=strlen(moji);
 findmax=strlen(find);
 tempmax=0;
 answer=0;

 for(i=0;i<mojimax-findmax+1;i++){
  for(j=0;j<findmax;j++){
   if(moji[i+j]!=find[j] && find[j]!='#')break;
  }
  if(j==findmax){
   strncpy(&temp[tempmax],&moji[i],findmax);
   temp[tempmax+findmax]=' ';
   tempmax=tempmax+findmax+1;
   answer++;
  }
 }

 printf("%d %s\n",answer,temp);
}
0320ぐひひNGNG
>>318
ごめん。先走った。すまん。
別のスレに書いとくつもりでここに書いちゃった。

kとかlとか変なifとか捨てちゃったから
ばれそうだと思ったら適当に直してくれ。

でも、自分で最後まで考えてね。
あと、リンクありがと!これからじっくり ぐひひ
0321299NGNG
>>320
どうもありがとうございました。吟味させて頂きます。
講義ではmain(int argc, char *argv[])という引数を用いるらしいので
もしかしたら却下される恐れもありますが、その時は自分で考えます。
0322ぐひひNGNG
>>321
最後まで付き合ってあげよう。
main( int argc, char **argv)
{
 char *moji,*find;
 moji=argv[1];
 find=argv[2];
て感じかな。こっちの方が1000文字超えたらとか考えずに済んで気が楽だ。
あと、temp[]に詰めてるあたりは今回の要求仕様に特化したもので
' 'の代わりに'\0'をつめて、それぞれの先頭アドレスを別のポインタ配列に
入れて他のなんかに使うてのが普通なんでそこんとこもついでに吟味しよう。
0323270NGNG
>>ALL
板を汚してごめんなさい。
>>コロコロ
これで分からなければ、あきらめて下さい。

char *mygets ( FILE *fp ) ;
fp = 検索対象のFILE型へのポインタ
buf = 検索対象のバッファ(260文字)
n = fpから1行読み込んだ文字列の長さ

fpから1行読み込んだ結果がNULLでなければ
行末の改行コードを削除しバッファへのポインタbufを返す
1行読み込んだ結果がNULLならばNULLを返す

size_t myputs ( char *p , size_t n , size_t m ) ;
p = 出力する文字列へのポインタ
n = 出力する文字列の数
m = 現在表示している行の位置(出力を20字に成型)

ポインタpからn文字を現在表示位置mから表示し終了位置mを返す

int main ( int argc , char *argv[] ) ;
fp = 検索対象ファイルのFILE型へのポインタ
p = 検索対象のバッファへのポインタ
n = 現在表示している行の位置
m = 検索対象の位置
l = 検索対象の長さ
ringo = ringoの出現回数
0324299NGNG
>>322
わざわざ済みません、感謝します。
コードがあれば何とか理解にこぎつけられそうです。

http://www.marimo.sakura.ne.jp/~rare/top.htm
特定のパロディのCGならこっから探して提供すればよかったかな…
でもどれがAI止ま・ラブひなのキャラとか分からないので
CG現物が提示できなくてすいません。
0325デフォルトの名無しさんNGNG
麻衣を出せや、(゚д゚)ゴルァ!
0326麻衣 2ndNGNG
呼んだ? 今日から私がお答えするわ♥
でも報酬が用意されてないと答える気にならないかも。
報酬はモチロン! エッチなCGよ♥
0327バカプログラマNGNG
ツリー表示を自作したいと思っています。
いまどき便利なツールが出てるからそんなの作らなくていいじゃん、
と周りからは言われましたが、
どういうアルゴリズムで作られているのか知ってみたいのです。
ネットで検索したところ、再帰を使うらしいところまではわかったのですが……。
麻衣ちゃん教えて♥
(麻衣ちゃんじゃなくても可)
0328麻衣 2ndNGNG
>>327
まずは報酬を提示してね♥ ぐひひ♥
そもそも、なにをツリー表示させたいの?
0329麻衣 2ndNGNG
環境も書いてね
0330名無しさんNGNG
再帰の他に何か特別なアルゴリズムが必要だとは
思えんが・・・。
0331328NGNG
ファイルの大きさをツリー上に表示したいのですが
なにか参考になるプログラムを作ってもらえませんか
0332バカプログラマNGNG
>麻衣ちゃん
Windowsのエクスプローラー風のツリー表示です。
今Javaを勉強しているのでJavaです。
アプレットでやりたいので、
Swing使えやゴルァってのは出来ればなしでお願いします。
エクスプローラーツリー表示の考え方だけでもよいです。

報酬は
?ttp://www.18teens.com/haken001/index2.html
おまけ
?ttp://www.kai10.com/ksk/cgi-bin/img-box/img20010607021602.jpg
0333デフォルトの名無しさんNGNG
@
0334デフォルトの名無しさんNGNG
@@
0335麻衣 2ndNGNG
>>332
ごめん。アプレットはよくわからないから、それ以外で助言ね。

戻り値を適当なスタックか配列につめるようなクラスを作って、
ファイルを開いて一覧をにスタックに積みつつ
ディレクトリがあったら自分自身を呼び出す・・・
再帰ってやつね。 グーグルで調べられるかもね。

あと、これ以上の助言は二次元の絵を持ってきてからね。
三次元の絵はダメ、絶対ダメ。
0336mutoNGNG
1行目に1,2行目に1 2,3行目に1 2 3,.....,n行目に1 2 ... nを表示するプロ
グラム(下のような感じ)はどうやるんですか?スーパー初心者なもんで…。

1
1 2
1 2 3
0337デフォルトの名無しさんNGNG
宿題デスカ?

int i,j;
for(i = 0 ; i < 行数; i++){
for(j = 0 ; j<i ; j++){
printf("%d ",j+1);
}
printf("\n");
}
0338ぐひひNGNG
>>336
main(int argc,char **argv){ int i,j; for(i=0;i<atoi(argv[1]);i++){ for(j=0;j<=i;j++)printf("%d ",j+1); printf("\n");}}
報酬ちゃんと持ってきてよ。
0339ぐひひNGNG
>>337
むう・・・やはり、報酬が手に入るまではバグ入りで公開しといた方が
いいってことなのか・・・今度からそうします。
0340デフォルトの名無しさんNGNG
>>339
というか、あなたウザイです。
教えるなら教える、放置するなら放置するで態度決めてください。
同じネタで長々とスレ使われるとテンポが悪くてかないません。
0341ぐひひNGNG
>>340
態度は決まってるんだけど・・・なんかまずかったか?
0342デフォルトの名無しさんNGNG
>>341
名前がいけないのでしょう。
”由美子”あたりにすれば?
0343トルチョックNGNG
>>337
それだと例えば4行表示させるとすると実行結果は
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
てな具合にならんか?
俺わからんぞこれ…
0344デフォルトの名無しさんNGNG
#include<stdio.h>
#include<stdlib.h>

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

int i,j;

if(argc != 2){
printf("引数が足りません\n");
exit(1);
}

for(i = 0;i < atoi(argv[1]);i++){
for(j = 0;j < i+1;j++){
printf("%d",j+1);
}
printf("\n");
}

return 0;
}
0345sageるNGNG
10 i = 0
20 i = i + 1
30 for j = 1 to i : print j; : print " "; : next j
40 print : ' 改行
50 goto 20
0346デフォルトの名無しさんNGNG
#include <iostream.h>
int main(int argc, char* argv[])
{
for(int i=1;i<6;i++){
for(int j=0;j<i;j++){
cout<<j+1;
}
cout<<"\n";
}


}
0347デフォルトの名無しさんNGNG
>>340=337
じゃねぇの?
マジでミスッちゃったのを指摘されてキレたんでしょ
0348バカプログラマNGNG
麻衣ちゃんありがとう。
残りの報酬はこれでどうですか?

結構癒し系
www.ssi-n.com/~spare/color-index1.html
0349わかりませんNGNG
キーボードから順に数を入力し、0が入力されたら、前回の0からそれまでに入力
された数の合計を表示する、というプログラムを書きなさい。例えば
0,1,4,-1,0,3,2,0,5,-5,0という数が入力されたら、表示されるのは
4 5 0
となるように。

最後に表示させるにはどうしたらよいのですか?
すんませんこんな簡単な問題で
0350sageるNGNG
10 result = 0;
20 input a;
30 if a = 0 then print "result : "; print a : goto 10
40 result = result + a;
50 goto 10
0351sageるNGNG
訂正

10 result = 0;
20 input a;
30 if a = 0 then print "result : ";: print a : goto 10
40 result = result + a;
50 goto 20
0352麻衣 2ndNGNG
>>349
先生にこのまま提出したら往復ビンタを5回はされそうだけど・・・

#include <string.h>
main(int argc,char **argv)
{
char *p;
int r,t=0,f=0;
p=strtok(argv[1],",");
while(p){
if(0==(r=atoi(p)))if(f){printf("%d ",t);t=0;}else f++;else t+=r*!!f;
p=strtok(0,",");
}
printf("\n");
}
0353麻衣 2ndNGNG
>>348
javacが壊れちゃったからもうちょっと待ってね。
0354麻衣 2ndNGNG
>>352 の使い方例と出力例
$ ./a.out 124,0,234,-34,0,5,5,5,0,0,3
200 15 0
って感じ
でも、出題はCじゃなさそうだし、報酬のエッチな絵はいらないわ
0355麻衣 2ndNGNG
うわ、ださ! はずかしいとこ3つも発見
ちょっと鬱かも・・・
0356nanasiNGNG
sort-marge アルゴリズムで名簿をアルファベット順に並べ帰る場合の
総計算時間(計算量)を求めよ。
って問題がわかりません。教えてください
0357デフォルトの名無しさんNGNG
君が実際に紙の上で並べ替えをやってみて、
その時間をストップウオッチで計ってみればいいんだよ。
0358nanasiNGNG
いやそういうことじゃないような...
そういう問題なの?
0359デフォルトの名無しさんNGNG
サンプル数を変えながら何回もやれば、
サンプル数に比例とか二乗に比例とかわかるかもね。
0360デフォルトの名無しさんNGNG
本屋でアルゴリズムの本を立ち読みしなさい。
大抵の本には載ってます。
0361デフォルトの名無しさんNGNG
宿題です。誰か解いてください。

課題
seiseki1という名前のファイルにキーボードから入力した10人分の成績(整数)
を格納するプログラムおよび格納した成績を読み出して画面に表示するこのプロ
グラム

俺がやった分
main()
{
int record[11]; /*成績表*/
int count; /*数えるための変数*/
FILE *fp;
char inp_fname,out_fname; /*書き込む際のファイルネームと開く際のファイルネーム*/

printf("ファイル名を入力せよ>>");
scanf("%s",inp_fname);

fp = fopen(inp_fname,"w");

if(fp == NULL){
printf("そのファイルは存在しません。\n");
getch();
exit(0);
}

/*1人りずつ成績を入力、 ファイルに書き込んでいく*/
for( count=1; count<11; count=count+1){
printf("%d人目の成績を入力せよ >>",count);
scanf("%d",&record[count]);
fprintf(fp,"%d",record[count]);
}

fclose(fp);

fp = fopen(seiseki1,"r");

fclose(fp);

getch();
exit(0);
}

これでファイルに書き込めてるでしょうか?
このあとに”開きたいファイルを入力せよ”として最初に作ったファイルと同じなら
インプットしたデータをだーっと出したいのですが、どうもうまくいきません。
お助けください。
0362デフォルトの名無しさんNGNG
>>361
ポインタの勉強をイチからやり直せ。
scanfのリファレンスを良く見直せ。
そもそも「文字」と「文字列」の違いを理解しろ。
0363麻衣 2ndNGNG
>>361
その1 ファイル名用バッファは十分な大きさのchar型の配列にすること
その2 fopenで書き込み属性でファイルを開くと、ファイルがない場合は
     自動生成するから、そのエラーメッセージ文は不適切
その3 ファイルに書き出すときも改行すること
その4 変数seiseki1ってなんだゴルァ♥
この4点を直せばファイルに書き出すところまではOKね
0364デフォルトの名無しさんNGNG
>>361
書き込み
head -10 > seiseki1

表示
cat seiseki1
0365361NGNG
>>362
ポインタはなぜか次の課題となってます。とりあえず意識しないでやれってことらしいです。
fgetcとfputcが文字でfscanfとfprintfが文字列と認識してますが違います?

>>363
1・何度か書き直してファイル名を入力しないタイプとかも試してたので忘れてました。
配列は理解してますので大丈夫です。
2・なる。了解しました。"r"の時につければよいのですね。
3・for内のfscanf分ですね。了解しました。
4・これは次のデータを読み出すをファイル名の入力無しバージョンを作ってたときの
ごみです。消し忘れました。

>>364
見たことないので勉強しなおします。

皆さんレスどもです。引き続きよろしく。
0366361NGNG
ファイルの書き込みのみですが書き直しました。多分あってると思います。
main()
{
int record[11]; /*成績表*/
int count; /*数えるための変数*/
FILE *fp; /*ファイルポインタ*/
char inp_fname[50]; /*書き込むファイルネーム*/

printf("ファイル名を入力せよ>>");
scanf("%s",inp_fname);

fp = fopen(inp_fname,"w");a

/*1人りずつ成績を入力、 ファイルに書き込んでいく*/
for( count=1; count<11; count=count+1){
printf("%d人目の成績を入力せよ >>",count);
scanf("%d",&record[count]);
fprintf(fp,"%d",record[count]);
}

fclose(fp);


getch();
exit(0);
}

次は”開きたいファイル名を入力せよ”として、if分を使ってファイルがあれば
ファイルの内容を表示して、ファイル名が違ったら”存在しません”としたいです。

if(inp_fname == out_fname)として条件に合うならinp_fnameを開ければよいのですが
実行までいって、内容を表示させるファイル名を入力すると強制終了がかかってしまいます。
char型を==で比べることがまずいと思うのですが,どうすればよいでしょうか?
0367デフォルトの名無しさんNGNG
文字列を比較するにはstrcmpって関数が必要なんだけど、
課題のレベルを考えるとそこまで求めていないと思います。

単にout_fnameのファイルを開いてみて、
エラーが出たら存在しませんってことではダメなのでしょうか。

久々に向上心のある宿題君が居て嬉しいです。
プログラムが面白くなるまで頑張ってください。
0368デフォルトの名無しさんNGNG
あ、でもforとか配列とかは習ってるのか。
じゃぁ比較もループで作れってことなのかな……?
0369361NGNG
>>367 >>368
strcmpっていう関数ははじめてみました。まだ習ってません。

とりあえず、ファイル名を比べずファイルの内容を表示するプログラムまで作ってみます。
0370デフォルトの名無しさんNGNG
stat()でいいじゃん。
0371デフォルトの名無しさんNGNG
っと、課題からすると、書き込みと表示のプログラムは別でいいんじゃないの?
0372デフォルトの名無しさんNGNG
fopen()の後ろに余分なaがついてるよ。
あと、fprintfは改行なりなんなりのデリミタいれとかないと、読むとき大変。
もしくは、バイナリで書きだすとかさ。
0373361NGNG
>>370
stat()も習ってないっす。
>>371
別にした場合、それを呼び出す知識とか必要っぽいので今回は無しで・・
>>372
ボソミスでした。改行も入れときます。

とりあえず、明日提出なのでファイル名を比べないバージョンで作りました。
ありがとうごいました。以下は参考までに。
main()
{
int inp_record[11],out_record[11]; /*成績表*/
int count; /*数えるための変数*/
FILE *fp; /*ファイルポインタ*/
char inp_fname[50]; /*書き込むファイルネーム*/

printf("ファイル名を入力せよ>>");
scanf("%s",inp_fname);

printf("\n");

fp = fopen(inp_fname,"w");

/*1人りずつ成績を入力、 ファイルに書き込んでいく*/
for( count=1; count<11; count=count+1){
printf("%d人目の成績を入力せよ >>",count);
scanf("%d",&inp_record[count]);
fprintf(fp,"%d\n",inp_record[count]);
}

fclose(fp);

printf("\n\n<<%sの内容>>\n",inp_fname);

fp = fopen(inp_fname,"r");
/*ファイル内容の表示*/
for( count=1; count<11; count=count+1){
fscanf(fp,"%d",&out_record[count]);
printf("%d人目の成績は>>%d\n",count,out_record[count]);
}

fclose(fp);

getch();
exit(0);
}
0374麻衣NGNG
#include <stdio.h>
#include <conio.h>
#define NUMBERS (10)

int main( int argc, char *argv[] )
{
 int inp_record[NUMBERS], out_record[NUMBERS]; /*成績表*/
 int count; /*数えるための変数*/
 FILE *fp; /*ファイルポインタ*/
 char inp_fname[50]; /*書き込むファイルネーム*/

 /*ファイルを開く*/
 printf( "ファイル名を入力せよ>>" );
 scanf( "%s", inp_fname );
 fp = fopen( inp_fname, "wb" );
 if( fp == NULL ){
  printf( "ファイルが開けません[]\n", inp_fname );
  return -1;
 }
 printf( "\n" );

 /*1人りずつ成績を入力、 ファイルに書き込んでいく*/
 for( count=0; count<NUMBERS; count++ ){
  printf( "%d人目の成績を入力せよ >>", count+1 );
  scanf( "%d", &inp_record[count] );
 }
 fwrite( inp_record, sizeof(int), NUMBERS, fp );
 fclose(fp);

 /*ファイルを開く*/
 printf( "\n\n<<%sの内容>>\n", inp_fname );
 fp = fopen( inp_fname,"rb" );

 /*ファイル内容の表示*/
 fread( inp_record, sizeof(int), NUMBERS, fp );
 for( count=0; count<NUMBERS; count++ ){
  printf( "%d人目の成績は>>%d\n", count+1, out_record[count] );
 }
 fclose(fp);

 getch();
 return 0;
}

えへへ、すっきりした? お兄ちゃん♥
0375コロコロNGNG
>>270さん 大変お久しぶりです。おかげさまで大部分ができました。
ただ、出力表示結果が記述のようになり、出現回数は合っているのですが、
表示は正しく出力されませんでした。例えばinput.txtの1行目にはmikanが
あるのですが、それが、表示されていません。いろいろ試してみたのですがうまく
いきませんでした。どうしたら、完璧な出力ができるのでしょうか。
お分かりの方はぜひ、アドバイスしていただけないでしょうか。
ちなみにこの問題は>>243にあります。


出力表示結果
....................
...bananacake.......
.........PEACH......
.......PEACH......AP
PLE.............PEAC
H........ORANGE.....
..................ba
nanacake............
....................
....................
...ORANGE...........
....................
....................
.chocolatecake......
......PEACH.........
APPLE...............

--------------------
ringoの出現数は3
mikanの出現数は5
momoの出現数は5
bananaの出現数は3
strawberryの出現数は3
chocolateの出現数は2
Press any key to continue
0376デフォルトの名無しさんNGNG
>>375
そこまで出来ているなら、作ったものを書き込んで、
何が間違っているかを聞いた方が吉。
0377お兄ちゃんのアソコl、私が舐めるよNGNG
これからは私がお兄ちゃんのアソコ舐めてあげる。
でもあんまり詳しくないから分からないこといっぱいあるから
みんも一緒に舐めてね。
お願い。
0378デフォルトの名無しさんNGNG
嫌だ
0379デフォルトの名無しさんNGNG
ま、ま、まッ、麻衣ちゃん、
ぼ、ぼ、ぼっ、ぼくと付合って欲しいんだな。
0380麻衣NGNG
嫌だ
0381デフォルトの名無しさんNGNG
「ファイル中の単語を出現位置(行)をすべて表示するプログラムをつくる.
ファイル名は「java ... ファイル名」で実行する時に指 定できるようにする.
前提知識
AVL木
関数としての見方: AVL木ではなくMapを使っ てもよい.
StreamTokenizer
StreamTokenizerのnに対して, n.eolIsSignificant(true);を実行しておくと, 改行が来るたびに
n.ttype == StreamTokenizer.TT_EOL となるので,何行目かカウントできるようになる」

という宿題が出ました。
どうしたらいいのやら、全くわからず困っています。
メールでもレスでもいいのでどなたかどうか教えてください。
0382デフォルトの名無しさんNGNG
全くっつってもナニが分からんのか全く分からん(?_?)
全部作れってか?
とりあえず、自分で作ってみて、ソースあぷして、それからだよ。
0383デフォルトの名無しさんNGNG
class kadai_4 {
public static void main() {
int num = 1;
Vector bar = new Vector();
Map x = new TreeMap();

try {
FileInputStream inp = new FileInputStream(filename);
InputStreamReader f = new InputStreamReader(inp);
BufferedReader b = new BufferedReader(f);
StreamTokenizer s = new StreamTokenizer(b);
s.eolIsSignificant(true);
while(s.nextToken() != StreamTokenizer.TT_EOF){
if(s.ttype == StreamTokenizer.TT_EOL) num++;
if(s.ttype == StreamTokenizer.TT_WORD){
System.out.println(s.sval + " at " + num);
if(m.containsKey(s.sval)){
bar = (Vector)(x.get(s.sval));
}
else {
bar = new Vector();
}
bar.add(new Integer(num));
x.put(s.sval,v);
}
}
}catch(Exception e){
System.out.println("Exception" + e);
}
}
トークンの切り出しまではできたのですが、mapにどうやってもちこんんでいけばいいのかわかりません。
0384デフォルトの名無しさんNGNG
>>383
>ファイル中の単語を出現位置(行)をすべて表示する
ってんだから、{"WORD", [1,4,5,10] } ちゅうふうに、単語と
出現位置(vector) を Mapする。
JAVAは詳しくないから、C++でいうと、map< string, vector<int> > mapsとして、
単語の出現によって、 maps[word].push_back( line ); する。
 あとは、最後にmapsを巡回して、表示すればいいだけ。
0385デフォルトの名無しさんNGNG
>>383
最初の bar = new Vector() はいらんだろ。そのあと必ず捨ててるし。
mとかvとかいきなり出て来てるのを除けばだいたいよさそうだが、
すでにputしてあるVectorを毎回putすることもないだろ。

  if (x.containsKey(s.sval)) {
    bar = (Vector)(x.get(s.sval));
  }
  else {
    bar = new Vector();
    x.put(s.sval, bar);
  }
  bar.add(new Integer(num));
0386コロコロNGNG
何とか自分なりに変えてみて文字の変換はうまくいったのですが
改行ができませんでした。(20文字で改行)どうしたら改行できるのでしょうか。
出力結果とコードを載せますので適切なアドバイスをお願いします。

 出力結果
......................ORANGE.................strawberrycake........strawberrycak
e......ORANGE..........bananacake...APPLE...........PEACH............strawberryc
ake............................................ORANGE...........................
......chocolatecake............................................bananacake.......
.........PEACH.............PEACH......APPLE.............PEACH........ORANGE.....
..................bananacake....................................................
...ORANGE....................................................chocolatecake......
......PEACH.........APPLE...............

--------------------
ringoの出現数は3
mikanの出現数は5
momoの出現数は5
bananaの出現数は3
strawberryの出現数は3
chocolateの出現数は2
Press any key to continue

 コード
#include <stdio.h>
#include <string.h>

char *mygets(FILE *fp ){ static char buf[260]; size_t n;
memset( buf , '\0' , sizeof(buf) ); if(fgets(buf,sizeof(buf),fp)){
n=strlen(buf); if(n&&buf[n-1]=='\n'){ buf[n-1] = '\0';n--;}
if(n&&buf[n-1] =='\r'){ buf[n-1] = '\0';} return(buf);} return(NULL);}
size_t myputs(char *p,size_t n,size_t m){
while(n){ if(m<20){ printf("%c",*p);p++;n--;}
else{ printf("\n");m=0;}} return(m); }
void main(int argc,char *argv[]){ FILE *fp; char *p;size_t n;size_t m;size_t l;
int ringo=0,mikan=0,momo=0,banana=0,strawberry=0,chocolate=0; n=0;
fp=fopen("C:\\input.txt","r"); while(p=mygets(fp)){ m=0;l=strlen(p);
while(m<l){ if(!memcmp(p+m,"ringo",5)){ n=myputs("APPLE",5,n);m= m + 5;ringo++;}
else if(!memcmp(p+m,"mikan",5)){ n =myputs("ORANGE",6,n);m = m + 5;mikan++;}
else if(!memcmp(p+m,"momo",4)){ n =myputs("PEACH",5,n);m = m + 4;momo++;}
else if(!memcmp(p+m,"banana",6)){ n =myputs("bananacake",10,n);m = m + 6;banana++;}
else if(!memcmp(p+m,"strawberry",10)){ n =myputs("strawberrycake",14,n);m = m + 10;strawberry++;}
else if(!memcmp(p+m,"chocolate",9)){ n =myputs("chocolatecake",13,n);m = m + 9;chocolate}
else{n=myputs(".",1,n);m++;}
}
}
fclose(fp);
printf("\n\n--------------------\n");
printf("ringoの出現数は%d\n",ringo);
printf("mikanの出現数は%d\n",mikan);
printf("momoの出現数は%d\n",momo);
printf("bananaの出現数は%d\n",banana);
printf("strawberryの出現数は%d\n",strawberry);
printf("chocolateの出現数は%d\n",chocolate);
}

ちなみにinput.txtは243に書いてあります。
0387デフォルトの名無しさんNGNG
マルチステートメントだらけで、見辛い。
まずはそこから直せ。
0388デフォルトの名無しさんNGNG
>>386
myputs()のif (m < 20)のブロックに++mが抜けてる。

ていうか汚すぎ。indent通さなきゃ読めん、こんなの。
0389コロコロNGNG
>>388さん m++ を入れるとこのような出力になります。

 出力表示結果
....................
...bananacake.......
.........PEACH......
.......PEACH......AP
PLE.............PEAC
H........ORANGE.....
..................ba
nanacake............
....................
....................
...ORANGE...........
....................
....................
.chocolatecake......
......PEACH.........
APPLE...............

--------------------
ringoの出現数は3
mikanの出現数は5
momoの出現数は5
bananaの出現数は3
strawberryの出現数は3
chocolateの出現数は2
Press any key to continue
0390デフォルトの名無しさんNGNG
>>386
if(!memcmp(p+m,"chocolate",9))の後のブロックが
chocolateで終わってるのに、それでコンパイラを通ったの?
何か、違うものをコンパイラしてませんか?
ちなみに、chocolate++;で、m++;を入れて試してみらた、
Borland C++とLSI-Cでは、全部表示されましたよ。(^^;

追伸
まさかとは思いますが、自分の環境でも、同じような所まで、
画面からあふれていたので、それで、表示されていないと思ったとか…?
0391388NGNG
>>390
chocolate++は直したんを忘れてが、
ちょうど25行だから単にスクロールしただけだろう。
ファイルにリダイレクトしてエディタででも見れ。>>389

それより、いきなりcore吐いたんでよく見たら、
入力ファイル名決め打ちでおまけにエラーチェックもしてねーし。
ってどうでもいいか宿題程度に。
0392コロコロNGNG
>>391さん
リダイレクトとは何でしょうか。
エディタを見るとはどういうことでしょうか。
詳しく説明していただけないでしょうか。
よろしくお願いします。
0393デフォルトの名無しさんNGNG
391じゃないけど。
普通にコマンドラインからプログラムを実行すると、
どんどん表示されていってそのうちスクロールして消えていったりしますが、
画面に表示させるかわりに、ファイルに保存するという方法があるんです。

foo

というコマンドの場合、

foo > bar

のように>に続けてファイル名を書くことによって、
結果をファイル(この場合はbar)に保存することができます。
0394デフォルトの名無しさんNGNG
この子ヘルプが無い環境で作業してるのかしら?
参考までに、どんな環境で作業しているか聞いてみたいもんだわ。
0395デフォルトの名無しさんNGNG
>>393
あのう、標準エラー出力はどうやってロギングするんですか?
0396麻衣 2ndNGNG
>>395
2> よ
0397麻衣 3rdNGNG
unixの場合、シェルによって変わる可能性あるよ。
cshなら>&だね。
0398デフォルトの名無しさんNGNG
shell < con > con 2> con
かな?
0399デフォルトの名無しさんNGNG
>>398
入力と出力を同じファイルにしてどうするよ。
それでうまくいくのはcmd.exeだけだ。
0400マジレスさんNGNG
英文を書くのに便利なプログラムお願いします
頭文字は大文字(ピリオドの次が大文字)
当然最初は大文字
英語以外はダメ
ほかは小文字
単独のiは大文字(I)
連続のスペースは1つ分にする
などです
なんかflagをたてるそうです
Cでお願いします
できますかね?
0401デフォルトの名無しさんNGNG
無理!!
0402デフォルトの名無しさんNGNG
>>400
某大学の宿題に酷似してるんだけど気のせいか?
まぁ、そのガッコのやつはフィルタとして作れって感じだったが。
0403>>400NGNG
ispell
0404デフォルトの名無しさんNGNG
フィルタじゃなくてCでってことは、エディタをつくんなきゃいけないの?
Unix? Win?
0405デフォルトの名無しさんNGNG
400
Unixです。フィルタってよく分かりません(調査中)
>>402
スレタイトル「お兄ちゃんの宿題、私が答えるよ」だし(笑)
文字判定するところのヒントだけでいいです。
0406デフォルトの名無しさんNGNG
flag = 0;
while (ファイルの終わり) {
  文字を読む;
  if (flag) {
    大文字にして出力;
    flag = 0;
  }
  else {
    そのまま出力;
  }
  if (条件) {
    flag=1;
  }
}

「条件」のとこは自分で色々考えれ。
0407デフォルトの名無しさんNGNG
age
0408デフォルトの名無しさんNGNG
次のプログラムは、プログラムの中でデータを作成し、棒グラフ・折れ線グラフを表示させたものである。データをあるファイル(sample)から読み込んでグラフを表示させるようにプログラムを変更してみよ。これができなかったら、プログラマー失格だよ?(藁  ソースはちゃんと貼ってね。import java.awt.Color;

public class Ex71a{
public static void main(String[] args){
int MAX = 1000;
int Y_MAX = 101;
if(args.length!=0 && Integer.parseInt(args[0])!=0){
int num=Integer.parseInt(args[0]);
int array[][]=new int[num][2];

for(int i = 0;i<num;i++){
array[i][0]=i;
array[i][1]=(int)(MAX*Math.random())%Y_MAX;
}

DrawBar(array);
DrawGraph(array);
}
}
public static void DrawGraph(int[][] array){
int MAX=100;
int FrameX = 600;
int FrameY = 300;
TurtleFrame f = new TurtleFrame(FrameX@`FrameY);
Turtle m = new Turtle();
f.add(m);

int AxisXO = FrameX*1/4;
int AxisYO = FrameY*3/4;
int AxisXL = FrameX/2;
int AxisYL = FrameY/2;

DrawAxis(m@`array.length@`AxisXO@`AxisYO@`AxisXL@`AxisYL);
m.up();m.moveTo((int)(AxisXO)@`(int)(AxisYO)@`0);

m.setColor(Color.black);
m.down();
for(int i =0;i<array.length;i++){
m.moveTo((int)(AxisXO+(double)(array[i][0]*AxisXL)/array.length)@`
(int)(AxisYO-(double)(array[i][1]*AxisYL)/MAX)@`0);
}
m.up();m.moveTo((int)(AxisXO)@`(int)(AxisYO)@`0);
}
public static void DrawAxis(Turtle m@`int xMax@`int AxisXO@`int AxisYO@`int AxisXL@`int AxisYL){
m.up();m.moveTo((int)(AxisXO)@`(int)(AxisYO)@`0);
m.setColor(Color.red);
m.up();m.moveTo((int)(AxisXO)@`(int)(AxisYO)@`90);
m.down();m.fd(AxisXL);
m.up();m.rt(180);m.fd(AxisXL);
m.down();m.rt(90);m.fd((int)AxisYL);
m.up();m.rt(180);m.fd((int)AxisYL);
m.rt(180);
0409デフォルトの名無しさんNGNG
for(int i = 0;i<=xMax;i++){
m.up();m.moveTo((int)(AxisXO+(double)(i*AxisXL)/xMax)@`(int)(AxisYO)@`0);
m.down();m.moveTo((int)(AxisXO+(double)(i*AxisXL)/xMax)@`(int)(AxisYO-AxisYL/20)@`0);
}
for(int j = 0;j<=10;j++){
m.up();m.moveTo((int)(AxisXO)@`(int)(AxisYO-(double)(j*AxisYL)/10)@`0);
m.down();m.moveTo((int)(AxisXO + AxisYL/20)@`(int)(AxisYO-(double)(j*AxisYL)/10)@`0);
}
m.up();m.moveTo((int)(AxisXO)@`(int)(AxisYO)@`0);
}
public static void DrawBar(int[][] array){
System.out.println("データを表示します:#を10、*を1とします、");
System.out.println("データ番号、データ、図形による表示");

for(int i = 0;i < array.length;i++){
System.out.print(array[i][0] + " " + array[i][1] + " ");
int countA = array[i][1]%10;
int countB = (int)(array[i][1]/10);
for(int j=0;j<countB;j++)
System.out.print("#");
for(int j=0;j<countA;j++)
System.out.print("*");
System.out.print('\n');
}
}
}
0410デフォルトの名無しさんNGNG
もひかひて、カンマが化けるんかいな。
,,,,,
0411デフォルトの名無しさんNGNG
>>408
そういう低脳な煽りはこの板の住人には逆効果だ。
俺は「プログラマ」なので「プログラマー」失格でも別にイイや。とか。
0412デフォルトの名無しさんNGNG
失格で結構
0413デフォルトの名無しさんNGNG
「プログラマー」なら喜んで失格になりたいヽ(´ー`)ノ
0414デフォルトの名無しさんNGNG
>>408
真っ先にお前が失格だな。
0415デフォルトの名無しさんNGNG
マルチポスト宿題教えてクンの季節がまたきたか…
期末試験?
0416デフォルトの名無しさんNGNG
Javascriptで配列を使っているのですが、
表示された数の個数の求め方がよくわからないので、やりかた教えて下さい。

<html>
<head>
<script language="JavaScript">
<!-- Code hiding from here
function sam01(){
a=new Array();

for(i=2;i<=25;i++){
a[i]=0;
}
for(k=2;k<=25;k=k+2){
a[k]=1;
}
for(i=2;i<=25;i++){
if(a[i]==0){

document.write(i+"<br>");
}
}
}

// -->end of script
</script>
</head>

<body>


<script language="JavaScript">
<!-- Code hiding from here
sam01();
// --> end of scirpt
</script>
</body>

</html>

↑
これで表示される数(3〜25)の個数(表現がよくわからないですが)を求める方法です。
よろしくお願いします。
0417麻衣NGNG
>>416
レスが遅れてごめんね、お兄ちゃん。
お風呂入ってたの。
でね、JavaScriptは捨てていいよ♪
0418デフォルトの名無しさんNGNG
>>416
数えてみりゃいいじゃん。要するに3〜25の奇数の数だろ。
0419デフォルトの名無しさんNGNG
FORTRAN77で8桁の10進数を2進数化して表示するプログラムで悩んでいます。
ずーと考えていましたが、全く分かりません。
誰か教えてください。お願いします。
0420麻衣NGNG
>>416
a=new Array();
の後ろに
var c=0;

document.write(i+"<br>");
の後ろに
c++;

sam01()の閉じる直前に
document.write("display count:"+c );

でどうかな?
でもJavaScriptはネット関係の板に逝った方がイイよ
0421デフォルトの名無しさんNGNG
プログラマー板はクッキーが必要になったね。
麻衣ちゃんはクッキー好き?
0422デフォルトの名無しさんNGNG
a.length()
0423400NGNG
ピリオドの次の文字を大文字にするにはどうしたらいいですか?
ピリオドを判定するやり方は分かりますが,その次の文字を大文字にする
やり方が分かりません.
0424デフォルトの名無しさんNGNG
>>423
アッパーカット
0425デフォルトの名無しさんNGNG
>>423
if( ch == 'a' ) ch = 'A';
if( ch == 'b' ) ch = 'B';
if( ch == 'c' ) ch = 'C';
...
0426デフォルトの名無しさんNGNG
tuupper()
0427423NGNG
>>425
普通に大文字にするのは分かります
配列を使って,for文で文字列をみています。
0428デフォルトの名無しさんNGNG
>>427

for(i = 0; str[i] != 0; ++i ) {
 if( str[i] == 'a' ) str[i] = 'A';
 if( str[i] == 'b' ) str[i] = 'B';
 if( str[i] == 'c' ) str[i] = 'C';
 ...
}
0429デフォルトの名無しさんNGNG
>>428

for(i = 0; str[i] != 0; i++ ) {
 switch(str[i]){
  case 'a': str[i]='A'; break;
  case 'b': str[i]='B'; break;
  case 'c': str[i]='C'; break;
 ...
 }
}
0430423NGNG
>>428
ifでピリオドを判定してstr[i+1]とかやればOK?
0431デフォルトの名無しさんNGNG
>>430
なんだよ。結局全部きくつもりかい(^-^;

自分なりに考えたコードでもあげれば、やさしい人が添削してくれるかもよ。
0432430NGNG
if(str[i]=='.' && str[i+1]>='a' && str[i+1]>='z' ){
str[i+1]-='a'-'A';
}
こんなかんじ?
0433初心者ANGNG
>>432
void upperi(char *p)
{
while(*p)if(*p++=='.')if(*p>='a'&&*p<='z')*p++=*p+'A'-'a';
}

main( int argc,char** argv )
{
upperi(argv[1]);
printf("%s\n",argv[1]);
}

$ ./a.exe test.test.aaaaa.ZZZ.zza
test.Test.Aaaaa.ZZZ.Zza
0434デフォルトの名無しさんNGNG
>>432
こうかな。

if(s[i]=='.') {
 s[i+1] = toupper(s[i+1]);
}
0435デフォルトの名無しさんNGNG
432だが俺間違ってる?
0436初心者ANGNG
>>435
間違ってはいない。
ただ、このあとポインタ(i)をどれだけ増やす?
'.'を判定した時点でもう次にフォーカスを移すべき(i++すべき)で、
さらにa〜z内であることがわかった時点で次に移れる。
もしa〜z内でなければ、'.'であるかもしれないからi++はできない。
単純に処理後常にi++してもいいが、それじゃあ華が無い。

>>434
お題に沿ってない。
0437デフォルトの名無しさんNGNG
>>435
小文字の判定がバグってないか?
0438デフォルトの名無しさんNGNG
だれか>>419に答えてやれよ
0439432NGNG
>>438
未熟ものだから分かりません。暇があれば考えます
>>437   
間違えです。
if(str[i]=='.' || str[i+1]>='a' && str[i+1]>='z' ){
str[i+1]-='a'-'A';
}
こうですよね?
0440初心者ANGNG
>>439
if(str[i]=='.' && str[i+1]>='a' && str[i+1]<='z' ){
0441デフォルトの名無しさんNGNG
>>439
小文字の判定はこうなんじゃ?

if(str[i]=='.' && str[i+1]>='a' && str[i+1]<='z' ){

(こういう判定は標準関数を使うのが正解だと思うけど)
0442デフォルトの名無しさんNGNG
>>419
もーフォートラン忘れた。
   I = 12345678
 10 IF I.EQ.0 GOTO 999
  IF (I MOD 2) 999,20,30
 20 0を表示
   GOTO 40
 30 1を表示..FORMAT文忘れた。
 40 I = I / 2
   GOTO 10
999 END
で、下から上に読むと2進数
0443432NGNG
if(str[i]=='.' && str[i+1]>='a' && str[i+1]<='z' ){
だとピリオド且つ小文字ってなってピリオド且つ小文字の文字なんてなくない?
0444デフォルトの名無しさんNGNG
>>443
もう一度コードをよく見直してください。
0445デフォルトの名無しさんNGNG
>>439
なんでみんな先にピリオドみるの?
void upperi(char *p){
  while( *ptr ){
   ptr++;
   if( 'a' <= *ptr && *ptr <= 'z' && *(ptr-1) == '.' ){
     *ptr += 'A'-'a';
   }
  }
}

while(*p)if(*p++=='.')if(*p>='a'&&*p<='z')*p++=*p+'A'-'a';
}
0446初心者ANGNG
>>443
「対象文字がピリオド かつ 次の文字が'a'〜'z'の範囲内」なので問題ない。
わかりやすく書くと
if(str[i]=='.' && (str[i+1]>='a' && str[i+1]<='z') ){
となるが、&&は論理積なので()は捨てても問題ない。
0447445NGNG
あら、こぴぺのゴミが...:)
0448デフォルトの名無しさんNGNG
>>445
英文だとアルファベットは頻繁に出てくるがピリオドの出現頻度は低い。
if文は条件の成否がはっきりした段階で判定を打ち切るから、
ピリオドを先に調べれば、その段階で処理が切られて実行速度があがる。
0449432NGNG
ピリオド∩小文字とは違うの?
0450初心者ANGNG
>>448
>>445さんのコードを借りるなら、評価順序が
while(*p++)if(*(p-1)=='.'&&'a'<=*p&&*p<='z')*p+='A'-'a';
なら問題ないってことね。でも、一度足してから引いてる分冗長か。
while(*p)if(*p++=='.')if(*p>='a'&&*p<='z')*p+++='A'-'a';
ならほんのちょっぴり(2,3ステップ)早い。(最後だけ少し直した)
0451初心者ANGNG
>>450
最適化かけたら全然変わりませんでした。すみません。
0452デフォルトの名無しさんNGNG
つうか速度求める問題じゃないでしょ。速度だけなら
テーブル使う。++使ってるとバグだすでしょ。

while(*p)if(*p++=='.')if(*p>='a'&&*p<='z')*p++=*p+'A'-'a';

これ、最後の文字が'.'だったらどうするの?って俺もバグってたけど。
もっと正しく、きれいに書くか。

void upperi(char *ptr){
  for( ptr++ ; *ptr ; ptr++ ){
    if( 'a' <= *ptr && *ptr <= 'z' && *(ptr-1) == '.' ){
      *ptr += 'A'-'a';
    }
  }
}
これで正しいかな?よさそうな気がする。
0453デフォルトの名無しさんNGNG
>>452
すまん。おおうそ。正しく動作します。
0454初心者ANGNG
>>452
最後の文字が . でも大丈夫だよ。ぎりぎりで。
0455デフォルトの名無しさんNGNG
ちょっと質問。
n次のパスカル行列を出力するプログラムなんですけど。
行列の成分をA(x,y)と置いてA(x+1,y+1)=A(x+1,y)+A(x,y+1)で計算させるのが普通だと思うのですが・・・
行列のカタチに出力させるのがいまいちわかりません。
printfにfor(x=0,x<=n,++x)とか使ってもいいんですかね?
0456学生NGNG
KL展開のプログラムがわかりません。
固有値ベクトルのプログラムはできたのですが。KL展開のプログラムを使って
近似の次元をあげて、2乗誤差の変化をみることが目的です。だれか教えてください。
0457デフォルトの名無しさんNGNG
は?
0458デフォルトの名無しさんNGNG
、下のCプログラムを書き換えてpivot=0やとても小さい数でもちゃんと計算できる
ように下のプログラムを完全なものに
したいのですが・・・
どうやったらいいのですか?
ここをこうかえる、というように具体的に教えて下さい。
マジでお願いします。

#include <stdio.h>
#define IMAX 3
#define JMAX 4


double array[IMAX][JMAX]={

{ 2, 1,-1, 5 },

{-3, 3, 2, 1 },

{ 1,-2,-2,-1 },

};


void PrintMat(void){
int i,j;
for(i=0;i<IMAX;i++){
for(j=0;j<JMAX;j++){
printf("%5.2f ",array[i][j]);
}
putchar('\n');
}
putchar('\n');
}


void SweepOut(void){
int i,j,axis;
double pivot,aik;
for(axis=0;axis<IMAX;axis++){
pivot=array[axis][axis];
for(j=axis;j<JMAX;j++){
array[axis][j]/=pivot;
}
for(i=0;i<IMAX;i++){
if(i!=axis){
aik=array[i][axis];
for(j=0;j<JMAX;j++){
array[i][j]-=array[axis][j]*aik;
}
}
}
}
}


main(){
PrintMat();
SweepOut();
PrintMat();
}
0459デフォルトの名無しさんNGNG
>>458
いったい何箇所書き込まれてるんだ?
0460ヴァカNGNG
sybaseの全データベースと全テーブルとストアドプロシジャーを
バックアップするスクリプト(Bシェル)書かなきゃいけないんですけど、まったくもって分かりません。
bcpを使うらしいのですが、bcpで全データや全テーブルを指定する方法があれば
なんとかなりそうなのですが、その方法が分かりません。
もしくは、変数か何かで指定するfor文とかなのでしょうか。
助けてください。帰れません…。
0461デフォルトの名無しさんNGNG
>>460
cp -Rp xxx xxx
0462ヴァカNGNG
Sybaseに関する質問です。

以下のテキストファイルを用意し
+-- AAA ------------------------------------------+
use jpubs
go
select 'bcp '+name+' out '+name+'.txt -c -Uxx -Pxx'
from sysobjects where type = 'U'
go
+-------------------------------------------------+

[sybase@hoge sybase]$ isql -Uxx -Pxx -i ./AAA -o ./BBB

とした時の出力ファイルBBBが↓のようになります。
+-- BBB ------------------------------------------+

bcp 著者 out 著者.txt -c -Uxx Pxx

bcp 出版者 out 出版者.txt -c -Uxx Pxx

bcp 著作権料 out 著作権料.txt -c -Uxx Pxx

bcp 販売 out 販売.txt -c -Uxx Pxx

bcp 販売詳細 out 販売詳細.txt -c -Uxx Pxx

bcp 著者タイトル out 著者タイトル.txt -c -Uxx Pxx

bcp タイトル out タイトル.txt -c -Uxx Pxx

bcp 店舗 out 店舗.txt -c -Uxx Pxx

bcp 割引 out 割引.txt -c -Uxx Pxx

bcp 著者肖像 out 著者肖像.txt -c -Uxx Pxx

bcp 宣伝 out 宣伝.txt -c -Uxx Pxx

(11 rows affected)
+-------------------------------------------------+


AAAの3行目の部分(bcp '+name+' out '+name+'.txt -c -Uxx -Pxx)が
実行されていないので、これを実行させるのはどうしたら良いのでしょうか?


'!!bcp〜〜
(bcp〜〜
(!!bcp〜〜
`bcp〜〜
`!!bcp〜〜

等いろいろ試してみたのですが出来ません…。
どうかお助けください。お願いします。
0463デフォルトの名無しさんNGNG
PASCAL言語で二次方程式の解(虚数・重解含む)を求めるプログラム
を教えていただきたいです。。
0464デフォルトの名無しさんNGNG
>>463
リアル厨房?
公式に値放り込んで計算すれば?
0465デフォルトの名無しさんNGNG
要素数が50の整数型配列bにおいて、b[k+1]をb[k]へ転送するプログラムを作成しなさい。
という問題があるんですがわかりません。何方か教えてください。
0466いじわるな人NGNG
>>465
for(k=50;k>=0;k--)b[k]=b[k+1];

バグをふたつ盛り込んだので、自分で直せ
0467いじわるな人NGNG
>>466
ひとつだった
0468いじわるな人NGNG
やっぱふたつだ
0469いじわるな人NGNG
いや、ぜんぜんだめだ
0470デフォルトの名無しさんNGNG
memmove( &b[0], &b[1], sizeof(int)*(50-1) );
0471デフォルトの名無しさんNGNG
int* c = (int*)b - 1;

c[0]は見ちゃイヤン。
0472471NGNG
逆ダッタ
int* c = (int*)b + 1;

c[49]は見ちゃダメヨ。
0473デフォルトの名無しさんNGNG
宿題ネタが氾濫してきたのであげとこう
0474C言語一週間目NGNG
「1〜50の任意の整数を元にする2つの集合に対して
その和集合・積集合を求めるのをつくれ」

ってやつなんだけど、これやる考え方って配列と場合分けでいいですか?
図書館で調べたけどわからなくて。
0475デフォルトの名無しさんNGNG
場合分け入らないでしょ。

配列とループだけよ
0476デフォルトの名無しさんNGNG
場合分けは要るでしょ。
0477デフォルトの名無しさんNGNG
任意の正数の抽出で場合分けか?
でも、それも書き方でイランような気が。

俺、問題を読み間違えてる?
0478デフォルトの名無しさんNGNG
#include <stdlib.h>

#define N  100

int main()
{
  int i;
  int array[2][N];
  int sum[N];
  int mul[N];

  for (i = 0; i < N; i++)
  {
    array[0][i] = (rand() % 50) + 1;
    array[1][i] = (rand() % 50) + 1;
    sum[i] = array[0][i] + array[1][i];
    mul[i] = array[0][i] * array[1][i];
  }
  return 0;
}
0479C言語一週間目NGNG
>>477
例えば
1つ目の集合 1,2,3,5
2つ目 1,3,4
とキーボードから入力させて、その和集合積集合を、です。

言葉が足らなくてすみませんでした。
0480JavaNGNG
public void printOr(int[] a, int[] b) {

  int[] temp = new int [ 50 ];

  for ( int i = 0; i < temp.length; i++ ) {
    temp[i] = 0;
  }

  for ( int i = 0; i < a.length; i++ ) {
    temp[a[i]-1]++;
  }

  for ( int i = 0; i < b.length; i++ ) {
    temp[b[i]-1]++;
  }

  for ( int i = 0; i < temp.length; i++ ) {
    if ( temp[i] > 0 ) { // 積集合なら > 1
      System.out.println(i);
    }
  }

}
0481JavaNGNG
System.out.println(i+1); だ
鬱
0482デフォルトの名無しさんNGNG
キーボードから文字をCtrl-Dで終了するまで読み取り、
アルファベット、数字、その他に分類してそれぞれの数を数えて、
表示するプログラムを作る方法を教えてください。
改行文字も「その他」で数えます。
0483PascalNGNG
program setTest;

 type
  theSets = set of 1..50;

 var
  a, b, c, d: theSets;

begin

 a := [1, 2, 3, 5];
 b := [1, 3, 4];

 c := a + b;
 d := a * b;

end.
0484デフォルトの名無しさんNGNG
長くてすみません、質問です
カレントディレクトリにある *.LOG ファイル全てを、終端から
8行だけ残して縮めたいんですが、
`ls -1 *.LOG | sed 's/\(.*\)/tail -8 \1 > tmp.LOG ;\\mv tmp.LOG \1/'`
とやっても失敗します。
バッククウォートで囲まれた部分の変換は
tail -8 aaa.LOG > tmp.LOG ;\mv tmp.LOG aaa.LOG
tail -8 bbb.LOG > tmp.LOG ;\mv tmp.LOG bbb.LOG
tail -8 ccc.LOG > tmp.LOG ;\mv tmp.LOG ccc.LOG
みたいな感じになって、うまくいっているのですがバック
クウォートで囲むとダメです。
結局、バッククウォートをはずしてリダイレクトでコマンド
イメージをファイルにとって、それをシェル起動しています。
もっとスマートにやるにはどうしたらいいんでしょうか。
アドバイスお願いします。
0485デフォルトの名無しさんNGNG
xargv
0486デフォルトの名無しさんNGNG
#include<stdio.h>
#include<ctype.h>

int main(void)
{
int alpha = 0;
int digit = 0;
int etc = 0;
char ch;

while((ch = getchar()) != EOF){
if(isdigit(ch)){
digit++;
}
else if(isalpha(ch)){
alpha++;
}
else{
etc++;
}
}
printf("alpha=%d\n",alpha);
printf("digit=%d\n",digit);
printf("else=%d\n",etc);
return 0;
}
0487>486NGNG
返事嬉しいのですがなんか今、私がやってるプログラムは
#include <stdio.h>
void main(void)
から始まるのなんですよ。
0488デフォルトの名無しさんNGNG
なんのこっちゃ
0489デフォルトの名無しさんNGNG
#!/bin/sh
for i in *.LOG ; do
tail -8 $i > tmp.LOG
mv tmp.LOG $i
done
0490デフォルトの名無しさんNGNG
#include<stdio.h>

void main(void)
{
int alpha = 0;
int digit = 0;
int etc = 0;
char ch;

while((ch = getchar()) != EOF){
if('0' <= ch && ch <= '9'){
digit++;
}
else if('a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z'){
alpha++;
}
else{
etc++;
}
}
printf("alpha=%d\n",alpha);
printf("digit=%d\n",digit);
printf("else=%d\n",etc);
}
0491デフォルトの名無しさんNGNG
>>489
うはー、こうやるのですか。
なんか今まで、変なやり方ばっかりしてたような気がします。
基本がなってませんね、鬱。
ありがとうございました。
0492デフォルトの名無しさんNGNG
>>490

int ch ;
0493デフォルトの名無しさんNGNG
>>492
thanks!
0494C言語一週間目NGNG
475以降の答えてくださった皆さんありがとうございました。
0495デフォルトの名無しさんNGNG
こんな課題が出たんですけどアドバイスお願いします。

次の処理をおこなうプログラムをポインタを用いて作成

1 キーボードから任意の文字数の半角英数字を読み込む。但し、20文字以内。

2 入力した文字列の中に" / " がある場合には" / "までも文字列とその先頭アドレス
及び、" / "を除く残りの文字列とその先頭アドレスを次の行に表示する。

3 " / "のない場合には前半と後半が同じ文字数または前半が1個だけ多くなるように
文字列を分割して同様に表示する。

で、いまのところテキスト等を参考にしてできたプログラムは


main()
{
char inp_moji[20]; /*入力する文字列*/
char *a_p,*b_p; /*ポインタ変数*/

printf("分割したい文字列を入力せよ >> ");
scanf("%s",inp_moji);

a_p = inp_moji;

b_p = inp_moji;

while(*b_p != '/' && *b_p != '\0')
b_p++;
if(*b_p == '/'){
*b_p = '\0';
b_p++;
}

printf("前半の文字列は>>%s\t 文字列の先頭アドレスは>>%d\n",a_p,*a_p);
printf("後半の文字列は>>%s\t 文字列の先頭アドレスは>>%d\n",b_p,*b_p);

getch();
exit(0);
}

なんですが、文字列の先頭アドレスを表示する方法はこれであってるでしょうか?
ためしに適当に実行してみて3桁の数字が出たのですが前半のアドレスより
後半のアドレスが低くなることがあり、違う気がします。アドバイスおねがいします。
0496デフォルトの名無しさんNGNG
printf("前半の文字列は>>%s\t 文字列の先頭アドレスは>>%ld\n",a_p,a_p);
printf("後半の文字列は>>%s\t 文字列の先頭アドレスは>>%ld\n",b_p,b_p);
か、
printf("前半の文字列は>>%s\t 文字列の先頭アドレスは>>%p\n",a_p,a_p);
printf("後半の文字列は>>%s\t 文字列の先頭アドレスは>>%p\n",b_p,b_p);
かな?
0497デフォルトの名無しさんNGNG
さげちった。
0498デフォルトの名無しさんNGNG
あーあと、char inp_moji[20];だと、'\0'入れると19文字しか入らないな。
char inp_moji[21];だね。
それと、
scanf("%20s",inp_moji);
ってやっといたほーがよさげ。
0499デフォルトの名無しさんNGNG
char inp_moji[20+1];
のほうが意味わかりやすいな。
ほんとは#defineしとくといいんだけど。
0500デフォルトの名無しさんNGNG
っつか、文字列分割(3)のろじっくが入ってないな、これ。。。
0501shigeNGNG
こうやってPerlユーザが馬鹿にされて、コケにされて、侮辱されて、(当然のことだ)
顔を真っ赤にして耐えている姿を想像するだけで俺の気分は爽快になる。

Ruby万歳。俺にこんな快楽を与えてくれたRubyに幸いあれ。
0502デフォルトの名無しさんNGNG
お兄ちゃんのアソコl、私が舐めるよ
0503デフォルトの名無しさんNGNG
数の物品の買物をします。物品の単価(1個の値段)と個数の2つのデータの
組を Ctrl-D で終了するまで読み取り、最後に各々の物品の単価と個数、合計
金額を1行でわかりやすく表示せよ。また全ての総合計金額、消費税額、税込
み合計金額を表示しなさい。消費税の計算は最後に1回だけ行う。

表示例
入力データ
98 10
198 5
158 1
Ctrl-D
番号 単価 個数 合計
1 98 10 980
2 198 5 990
3 158 1 158
合計金額 2128
消費税 106
税込み合計 2234

このプログラム分かる人!!教えて!!!早急に!!!
0504訂正ですNGNG
表示例
入力データ
98 10
198 5
158 1
Ctrl-D
番号 単価 個数 合計
1 98 10 980
2 198 5 990
3 158 1 158
合計金額 2128
消費税 106
税込み合計 2234
0505?????NGNG
できるだけ
#include <stdio.h>
void main(void)
から始めてくれると嬉しいです。
0506??????NGNG
できるだけ
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
extern int main(int argc, char **argv, char **endp)
から始めてくれると嬉しいです。
0507デフォルトの名無しさんNGNG
endpってなんじゃい。
0508デフォルトの名無しさんNGNG
>>503
クラスの友達に見せて貰うなりした方が良いと思うぞ
完璧なリストを提出したら逆にバレると思われ(藁
0509506NGNG
>>507
envpの間違い(笑
0510>486NGNG
>508
クラス全員違う問題だから。
0511デフォルトの名無しさんNGNG
>>510
できた!
エッチなCGを持ってきたらコピペしてあげる
0512デフォルトの名無しさんNGNG
>>510 そうなのか

#include <stdio.h>
void main(void){
 int bangou=1,tanka,kosuu,goukei,soukei=0;
 char buffer[10000]="番号\t単価\t個数\t合計\n";
 while(scanf("%d %d",&tanka,&kosuu)==2){
  goukei=tanka*kosuu;
  sprintf(buffer,"%s%d\t%d\t%d\t%d\n",buffer,bangou,tanka,kosuu,goukei);
  bangou++;
  soukei+=goukei;
 }
 printf("%s総合計\t%d\n消費税\t%d\n税込\t%d\n",buffer,soukei,(int)(soukei*0.05),(int)(soukei*1.05));
}
まあこんなんで動くけど、まだ習ってない部分があったらスマソ
0513デフォルトの名無しさんNGNG
返事嬉しいです!!
だけどsprintfとかchar buffer[10000]とか習ってないのがいっぱいです。
0514デフォルトの名無しさんNGNG
なんかプログラムには1次元配列を使わないといけないらしいんだけど。
0515デフォルトの名無しさんNGNG
構造体はやりましたか?

構造体の配列?
0516デフォルトの名無しさんNGNG
いや。まだやってませんね〜
0517デフォルトの名無しさんNGNG
>>514
んじゃ、その課題の方針と思われる方法で

#include <stdio.h>
int main(void){
 int bangou,saidai_bangou,goukei,soukei=0,tanka_hairetsu[10000],kosuu_hairetsu[10000];

 for(bangou=1;bangou<10000;bangou++){
  if(scanf("%d %d",&tanka_hairetsu[bangou],&kosuu_hairetsu[bangou])!=2)break;
 }
 saidai_bangou=bangou;

 printf("番号\t単価\t個数\t合計\n");
 for(bangou=1;bangou<saidai_bangou;bangou++){
  goukei=tanka_hairetsu[bangou]*kosuu_hairetsu[bangou];
  printf("%d\t%d\t%d\t%d\n",bangou,tanka_hairetsu[bangou],kosuu_hairetsu[bangou],goukei);
  soukei+=goukei;
 }
 printf("総合計\t%d\n消費税\t%d\n税込額\t%d\n",soukei,(int)(soukei*0.05),(int)(soukei*1.05));
}
0518デフォルトの名無しさんNGNG
printf("総合計\t%d\n消費税\t%d\n税込額\t%d\n",soukei,(int)(soukei*0.05),(int)(soukei*1.05));
この部分をもっと初段な感じしてもらうと嬉しいんですが。
あと¥tも今だ習ったことありませんね〜
0519デフォルトの名無しさんNGNG
んじゃ、最初の int に shouhizei,zeikomigaku, を加えて
shouhizei=soukei*0.05;
zeikomigaku=soukei+shouhizei;
printf("総合計 %d\n消費税 %d\n税込額 %d\n",soukei,shouhizei,zeikomigaku);
と表示すれば分かり易いかな

\t は表示を見やすくするためのものなので、普通にスペースで置き換えて大丈夫です
まあ正しく動くかどうかよりも、ちゃんと流れを追えるかどうかの方が重要だあね
0520デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void){
 int bangou,saidai_bangou,goukei,soukei=0,tanka,kosuu,shouhizei,zeikomigaku;

 for(bangou=1;bangou<10000;bangou++){
  if(scanf("%d %d",&tanka_hairetsu[bangou],&kosuu_hairetsu[bangou])!=2)break;
 }
 saidai_bangou=bangou;

 printf("番号 単価 個数 合計\n");
 for(bangou=1;bangou<saidai_bangou;bangou++){
  goukei=tanka*kosuu;
  printf("%d,%d,%d,%d\n",bangou,tanka,kosuu,goukei);
  soukei+=goukei;
 }
 shouhizei=soukei*0.05;
 zeikomigaku=soukei+shouhizei;
 printf("総合計 %d\n消費税 %d\n税込額 %d\n",soukei,shouhizei,zeikomigaku
}
これでやればできるんですよね?
0521訂正NGNG
if(scanf("%d %d",&tanka,&kosuu)!=2)break;
0522デフォルトの名無しさんNGNG
1次元配列の課題なんだから配列使わにゃダメでしょ
変数配列を使わないんだったら >>512 みたいにしないと
0523デフォルトの名無しさんNGNG
要するに 520(+521) だと全く動かないってことね

517 の表示部(printf 関数)だけを自分好みに変更すればヨロシ
時間があるなら一度コンパイルして試してみることをオススメ
0524デフォルトの名無しさんNGNG
>522
忠告ありがとう!!助かった〜。
0525デフォルトの名無しさんNGNG
最近お姉さんを見ませんが、どうなさったのでしょう?
0526デフォルトの名無しさんNGNG
>>525
嫁に行きました。
0527デフォルトの名無しさんNGNG
Σ(゚д゚lll)ガーン 
0528デフォルトの名無しさんNGNG
#include <stdio.h>
void main(void){
 int bangou,saidai_bangou,goukei,soukei=0,tanka_hairetsu[10000],kosuu_hairetsu[10000],shouhizei,zeikomigaku;

 for(bangou=1;bangou<10000;bangou++){
  if(scanf("%d %d",&tanka_hairetsu[bangou],&kosuu_hairetsu[bangou])!=2)break;
 }
 saidai_bangou=bangou;

 printf("番号\t単価\t個数\t合計\n");
 for(bangou=1;bangou<saidai_bangou;bangou++){
  goukei=tanka_hairetsu[bangou]*kosuu_hairetsu[bangou];
  printf("%d\t%d\t%d\t%d\n",bangou,tanka_hairetsu[bangou],kosuu_hairetsu[bangou],goukei);
  soukei+=goukei;
 }
shouhizei=soukei*0.05;
zeikomigaku=soukei+shouhizei;
printf("総合計 %d\n消費税 %d\n税込額 %d\n",soukei,shouhizei,zeikomigaku);
}
これでコンパイルしたんですが
In function `main':
3: parse error before character 0241
5: `bangou' undeclared (first use this function)
5: (Each undeclared identifier is reported only once
5: for each function it appears in.)
5: parse error before `)'
11: `saidai_bangou' undeclared (first use this function)
11: parse error before `)'
17: `zeikomigaku' undeclared (first use this function)
17: `soukei' undeclared (first use this function)
17: `shouhizei' undeclared (first use this function)
と表示されたんですがどうしましょう???
0529デフォルトの名無しさんNGNG
全角スペース消せ
0530デフォルトの名無しさんNGNG
全角スペースって_ここの部分ですよね?
消してもできないんですけど・・・
0531知りたがり矢NGNG
「整数型の配列a[100]にキーボードから入力された整数を順に格納する。
ただし、0が入力されれば、そこで終わる。その後、配列aの内容を順に
出力するプログラムを作れ。」って問題教えてください。これできんと
単位が危ない・・・

どうぞ、よろしくお願いします。
0532デフォルトの名無しさんNGNG
>>530

#include <stdio.h>
void main(void){
int bangou,saidai_bangou,goukei,soukei=0,tanka_hairetsu[10000],kosuu_hairetsu[10000],shouhizei,zeikomigaku;

for(bangou=1;bangou<10000;bangou++){
if(scanf("%d %d",&tanka_hairetsu[bangou],&kosuu_hairetsu[bangou])!=2)break;
}
saidai_bangou=bangou;

printf("番号\t単価\t個数\t合計\n");
for(bangou=1;bangou<saidai_bangou;bangou++){
goukei=tanka_hairetsu[bangou]*kosuu_hairetsu[bangou];
printf("%d\t%d\t%d\t%d\n",bangou,tanka_hairetsu[bangou],kosuu_hairetsu[bangou],goukei);
soukei+=goukei;
}
shouhizei=soukei*0.05;
zeikomigaku=soukei+shouhizei;
printf("総合計 %d\n消費税 %d\n税込額 %d\n",soukei,shouhizei,zeikomigaku);
}
0533デフォルトの名無しさんNGNG
>>531
それができないとは・・・
そんなやつに単位はあげられないよ。
きちんと学んでくれ。
0534デフォルトの名無しさんNGNG
>>531
え?問題を教えればいいの?

「整数型の配列a[100]にキーボードから入力された整数を順に格納する。
ただし、0が入力されれば、そこで終わる。その後、配列aの内容を順に
出力するプログラムを作れ。」

これでいいかな?カンニングしてるみたいで気が引けるけど。
0535デフォルトの名無しさんNGNG
10 DIM a[100]
20 c = 0
30 if c = 100 goto *inputend
40 input "整数を入れてね", n
50 a[c] = n
60 if n = 0 goto *inputend
70 c = c + 1 : goto 30
80 *inputend
90 for a = 0 to c
100 print c, "番目の数 : ",a[c]
110 next
120 end

goto のラベルの扱いはこれで良いんだっけか?
あと、配列の要素番号の扱いも忘れたよ・・・。
0536知りたがり矢NGNG
C言語でお願いします。「整数型の配列a[100]にキーボードから入力された整数を順に格納する。
ただし、0が入力されれば、そこで終わる。その後、配列aの内容を順に
出力するプログラムを作れ。」って問題教えてください。これできんと
単位が危ない・・・

どうぞ、よろしくお願いします。
0537知りたがり矢NGNG
あえて言うと、for,while,do while 文でお願いします。
0538デフォルトの名無しさんNGNG
>>537
貴方のように自分で全く考えない人に単位を与えるという
ことは、それだけ社会に多大な迷惑をかけるということで
す。申し訳ありませんが、教える気には全くなりません。
0539先生NGNG
>>536
特別サービス!

main()
{
 int a[100],count;
 count=input_dim(a);
 output_dim(a,count);
}

input_dimは配列aにキーボードから入力された整数を順に格納する。
ただし、0が入力されれば、そこで終わる。戻り値は入力された要素数。
output_dimは配列aの内容をcount分だけ順に出力する。
for,while,do whileは自由に使ってくれ!
0540知りたがり矢NGNG
あんたには聞いてへんわ。
0541知りたがり矢NGNG
ありがとうございます。>>539
0542初必者NGNG
ナイスだ先生。面白かったよー。
0543デフォルトの名無しさんNGNG
親切なようでむごい539がスキ♥
0544デフォルトの名無しさんNGNG
ひょっとして奴はテストもしないで提出する気だろうか。。。
0545知りたがり矢NGNG
いや、テストしたっすよ。全然でけへん
0546デフォルトの名無しさんNGNG
>>545
エラーの内容を書いてもらわないと答えようがないよ
0547ヴィジュアルC++NGNG
--------------------構成: 2ch煽り - Win32 Release--------------------
コンパイル中...
2ch煽り.cpp
C:\Documents and Settings\逝って良し\My Documents\cs\2ch煽り\2ch煽り.cpp(9) : error C2065: 'input_dim' : 定義されていない識別子です。
C:\Documents and Settings\逝って良し\My Documents\cs\2ch煽り\2ch煽り.cpp(10) : error C2065: 'output_dim' : 定義されていない識別子です。
C:\Documents and Settings\逝って良し\My Documents\cs\2ch煽り\2ch煽り.cpp(11) : warning C4508: 'main' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
cl.exe の実行エラー

2ch煽り.obj - エラー 2、警告 1
0548初必者NGNG
今日一日Cの本と格闘しなさい。その上でどういう
コードを書いて、どう上手くいかなかったのかを報
告してください。それならまだ教える気にもなるか
もしれません。

#539をみておかしいとも思わないようならCの知識
#以前の問題ではあるが。なーんも考えてないって
#ことだぞ。

あと、マジで殆どの皆は君のために言ってるってこ
とを忘れずに。
0549デフォルトの名無しさんNGNG
>>547
ユーザー名 逝って良し ってのがベネ
0550知りたがり矢NGNG
#include <stdio.h>

void main(void);
{
int i;
int a[100]

for(i=0;i<100;i++){
printf("a[%d]",i);
scanf("%d",&a[i]);
}

自力ではここまでしかわかりません。0を入力したら、そこで終わり、
その後、配列aの内容を順に出力するプログラムがわかりません。
0551デフォルトの名無しさんNGNG
>>550
もし入力が0ならばループ抜ける
0552デフォルトの名無しさんNGNG
i=0;do{printf("a[%d]",i);scanf("%d",&a[i]);}while(a[i++]);
for(i=0;i<100&&a[i]==0;i++)printf("%d ",a[i]);
0553まちがったNGNG
i=0;do{printf("a[%d]",i);scanf("%d",&a[i]);}while(a[i++]);
for(i=0;i<100&&a[i];i++)printf("%d ",a[i]); printf("\n");
0554初必者NGNG
>>553
a[100]に番人立てないと不味いんじゃ?
ゼロクリアされてれば良いけど。
0555デフォルトの名無しさんNGNG
i=0; do{ print〜; scanf〜; i++; }while(a[i-1]!=0&&i<99);
a[i]=0; i=0; while(a[i]!=0){ print〜; i++; }
漏れならこうだけど a[99]まで使う方法が思いつかんな
0556デフォルトの名無しさんNGNG
>>555

i<99 ?
0557まちがったNGNG
i=0;do{printf("a[%d]",i);scanf("%d",&a[i]);}while(a[i]&&99>i++);
for(i=0;i<100&&a[i];i++)printf("%d ",a[i]); printf("\n");
0558デフォルトの名無しさんNGNG
>>556
教育的配慮
0559デフォルトの名無しさんNGNG
>>556
i<100 にしたら減点対象

>>557
最初の while の a[i] と i++ の処理順は全ての処理系で一意なんだっけか
0560sageNGNG
処理系により異なる可能性があるよ
0561デフォルトの名無しさんNGNG
>>559
言語仕様として、問題ないよ。
0562デフォルトの名無しさんNGNG
どっちだよ。まぁ>>561っぽいけど。
0563デフォルトの名無しさんNGNG
560 と 561 は、どっちが正しいんだ?

いや、どっちが正しいかはひとまず置いとくとして
採点する先生がどっちが正しいと思ってるか、だな
0564デフォルトの名無しさんNGNG
過剰なマルチステートメントはヤメロってことで
ファイナルアンサー?
0565デフォルトの名無しさんNGNG
>>564
今回のは笑えたからベネ
0566sageNGNG
ごめん。
&&の前で式が一度完了するから、
つまり、処理順は一定。
561のいうとおりだった。
0567デフォルトの名無しさんNGNG
式が一度完了するって、経験則でなく言語仕様によって定められてるん?
だったら >>555 は無視しておくんなまし
0568デフォルトの名無しさんNGNG
>>567
式が一度完了する、ってのは言語使用レベルでは定められてないかと。
(まあ一般的なコンパイラならそこで切ってくれるけど。多分)

どうころんでも、i++ が実行されるのはカッコ内の評価が完了してから
だから問題なし。
0569デフォルトの名無しさんNGNG
て優香、なんかこんなの真剣になってみんなで顔つき合わせるような話題じゃないと思うが。
いってみれば、隔離スレなんで、とっとと正解書いてお引取り願うというのはどうか?
0570sageNGNG
http://www.catnet.ne.jp/kouno/c_faq/c3.html#5
http://www.catnet.ne.jp/kouno/c_faq/c3.html#8
あたりが論拠。

ISOなんかのホントの仕様については調べてない
0571デフォルトの名無しさんNGNG
>>564
つーか、アルゴリズムを示すのにマルチステートメントも何もねー
0572デフォルトの名無しさんNGNG
え、そう? 見づらい表記は机上デバグのミスに繋がると思うけど。
0573557NGNG
マルチステートメントって俺のこと?
面倒だったから適当に書いただけだぴょん

つーか、仕様を満たしつつも、丸コピーはさせたくねーときって
どうしてもわざとへんてこりんに書いちゃう癖があってね・・・
0574デフォルトの名無しさんNGNG
>>568
>i++ が実行されるのはカッコ内の評価が完了してから
は嘘じゃない? i=1; if(i++ && printf("%d",i)); で 2 が表示されるよ

左から順に評価され結果が得られたら完了、というのは K&R の 2.6 で納得
0575デフォルトの名無しさんNGNG
なんか書こうと思ったけど、そういう仕様の部分で悩む
のは不毛なんで、やめた。評価順序とか使わなくて
Basicでも正しく動作するように書けるんだから、
そうしたら?いろんな意味で正しくない?
冗長に書くのは悪くないと思うよ。
0576デフォルトの名無しさんNGNG
Basic でも、ってどういう意味?
0577sageNGNG
難しく書くのはやめといた方がいいよね。

でも、人の書いたコードのバグを探るときとか
こういう変なの読めないと出来ないことあるね。
0578デフォルトの名無しさんNGNG
Cで順列を表示するプログラムを作りたいのですが、
誰か教えて下さい。
0579デフォルトの名無しさんNGNG
>>578
意味不明
順列?

宿題なら自分でやれよ。
0580デフォルトの名無しさんNGNG
>>579
ソートしたいんじゃないの?
0581sageNGNG
>>580
宿題だろうけどソートじゃないだろ。

int i;for(i=0;i<65565;i++)printf("%d,");
0582Pythonで・・・NGNG
#!/usr/bin/python
'''
このプログラムは 10,11,12,...20 までの数字について

10*10*10 + 11*11*11 + 12*12*12 + ...+ 20*20*20

を計算します。このプログラムを変更し1094から始まりその2倍に終る数字2188
について

*1094*1094*1094 + 1095*1095*1095 + ...+ 2188*2188*2188

を計算してください。


ということをとある事情でしなければいけないのですがパイソンがよくわかりません。
どなたかよろしければ教えていただけませんでしょうか?
よろしくお願いいたします。
0583デフォルトの名無しさんNGNG
1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536
0584デフォルトの名無しさんNGNG
>>575
Cの評価基準になれるとBasicでエラー起こすことあるよ。
Basicは(全部そうかはしらんけど)式は全部評価する。
0585デフォルトの名無しさんNGNG
あっあっだめだよお兄ちゃん。そこ関係ない。
0586デフォルトの名無しさんNGNG
>>584
ようするに言いたかったのは「ショートサーキット評価しない言語でも」
ということでBasicはその例として挙げたってだけ?
0587デフォルトの名無しさんNGNG
そうそう。それだけだけど、かなり移植に悩むことがあるよ。
無意味かな?
0588sageNGNG
移植じゃなくて
簡単に分けて書いても
って意味では?
0589デフォルトの名無しさんNGNG
   ,/^ヽ‐一^\
   / __´_∀_`_)
 . | //ノ/ ノ ノ \)
  |ハ|( | ∩  ∩|)|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヾ从ゝ_▽_从  < おにいちゃんおはよう!私が宿題をやっておいたよ☆
   /丶 d V bノ ̄|⊃ \____________________
   | ハ'\A/ ノ ̄
   (___)_  8   |
  ||^| |_ __ヽ
 「 ̄ ̄ ̄|||_|
 L____」||_ |_
     |___)_)
0590デフォルトの名無しさん NGNG
教えてくださいお願いします。

問題
学生の名前と一つの科目の試験の成績をメンバとする構造体を
作り、さらにライブラリ関数rand()を使ってそれを30個(学生
30人分)集めた配列として初期化する。(hint1.c を参照)
試験の成績の降順に整列して出力せよ。
hint1.c
#include <stdio.h>
#include <stdlib.h>

#define SIZE 30


/* ここに何が入るか? */


void gen_str(char s[], int n); /* pro3-10-7.c を参照 */
void print_dat(struct student x[], int n);

int main(void)
{
struct student group[SIZE], w;
int i, j, max;

for (i = 0; i < SIZE; i++) {
gen_str(/* ここに何が入るか? */, rand() % 5 + 6);
/* ここに何が入るか? */ = rand() % 101;
}

printf("整列前:\n");
print_dat(group, SIZE);


/* ここに何が入るか? */


printf("整列後:\n");
print_dat(group, SIZE);

return(0);
}


/* ここに何が入るか? */


void print_dat(struct student x[], int n)
{
int i;

for (i = 0; i < n; i++)
printf("%-15s%4d\n", x[i].name, x[i].point);
}
0591デフォルトの名無しさんNGNG
>>590
ふざけんな!
〜を参照 ってのを全部ここにもってこい!
0592デフォルトの名無しさんNGNG
無理矢理ヒストグラム作ってソートとかやろうと思ったけどやめた。
0593590NGNG
pro3-10-7です↓
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void gen_str(char s[], int n);

int main(void)
{
char x[11], y[11];
int z;

gen_str(x, 10);
gen_str(y, 10);
printf("文字列1:%s\n", x);
printf("文字列2:%s\n", y);

z = strcmp(x, y);
if (z < 0)
printf("文字列1は文字列2より前。\n");
else if (z == 0)
printf("文字列1と文字列2は等しい。\n");
else
printf("文字列1は文字列2より後。\n");

return(0);
}

void gen_str(char s[], int n)
{
int i;

for (i = 0; i < n; i++)
s[i] = rand() % 26 + 'a';
s[i] = '\0';
}
0594デフォルトの名無しさんNGNG
   ,/^ヽ‐一^\
   / __´_∀_`_)
 . | //ノ/ ノ ノ \)
  |ハ|( | ∩  ∩|)|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヾ从ゝ_▽_从  < おにいちゃん、そんなのも分からないの?使い物にならねープログラマー。
   /丶 d V bノ ̄|⊃ \____________________
   | ハ'\A/ ノ ̄
   (___)_  8   |
  ||^| |_ __ヽ
 「 ̄ ̄ ̄|||_|
 L____」||_ |_
     |___)_)
0595590NGNG
>>594
おにいちゃんじゃないですよ
0596デフォルトの名無しさんNGNG
>>595
お兄ちゃんじゃん
0597デフォルトの名無しさん NGNG
だめかな・・・
0598中途半端くんNGNG
>>590
最初のここに何か
studentという構造体の定義
要素は名前用バッファと得点
と、ソートする関数の宣言

次のここに何か
i番目の生徒構造体の名前

次の次のここに何か
i番目の生徒構造体の得点

次の次の次のここに何か
ソートする関数の呼び出し

次の次の次の次のここに何か
ソートする関数の実体
0599デフォルトの名無しさんNGNG
>>590
それ、うちの大学の期末課題…

こーゆーこというのもアレだけどさぁ、あの程度の授業解らないの
なら止めるか来年頑張った方がいいと思うよ。
0600デフォルトの名無しさんNGNG
>>599
どこの大学?都道府県名だけでいいから教えてくれへん?
0601デフォルトの名無しさんNGNG
>>599
あんたの言うとおりだよ。ちと目がさめたよ。
しかしなんだな、同じ大学の学生がいるかなと少しは思ってたけど
まさか本当にいるとはね(藁
0602デフォルトの名無しさんNGNG
>>590
見にくいデス
0603デフォルトの名無しさんNGNG
大学の期末課題って....
大学ってこのレベルなの?ちなみにどこ?
0604デフォルトの名無しさんNGNG
>>601
そか。基本さえ解っていればすぐ解る程度だから頑張れゃ。

>>599,603
まぁ文系のドキュソ大だから。
関西で、外見だけは異常に綺麗な大学、つーたらだいたい絞れるよ。
0605デフォルトの名無しさんNGNG
>>604
   ,/^ヽ‐一^\
   / __´_∀_`_)
 . | //ノ/ ノ ノ \)
  |ハ|( | ∩  ∩|)|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヾ从ゝ_▽_从  < もしかして、京都産業大学か?
   /丶 d V bノ ̄|⊃ \____________________
   | ハ'\A/ ノ ̄
   (___)_  8   |
  ||^| |_ __ヽ
 「 ̄ ̄ ̄|||_|
 L____」||_ |_
     |___)_)
0606デフォルトの名無しさんNGNG
http://www.traffimagic.com/WIP15MMKOQA/B000147/comein/WIP

http://www.traffimagic.com/WIP15MMKOQA/B000213/comein/WJH

http://www.traffimagic.com/WIP15MMKOPA/B000191/comein/WJF

http://www.traffimagic.com/WIP15MMKOPA/B000073/comein/WJT

http://www.traffimagic.com/WIP15MMKOCA/B000143/comein/WIP

http://www.traffimagic.com/WIP15MMKOCA/B000103/comein/WJT

http://www.traffimagic.com/WIP15MMKOSA/B000125/comein/WIP

http://www.traffimagic.com/WIP15MMKOSA/B000209/comein/WJT
0607デフォルトの名無しさんNGNG
   ,/^ヽ‐一^\
   / __´_∀_`_)
 . | //ノ/ ノ ノ \)
  |ハ|( | ●  ●|)|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ヾ从ゝ_▽_从  < もしかして、京都産業大学か?
   /丶 d V bノ ̄|⊃ \____________________
   | ハ'\A/ ノ ̄
   (___)_  8   |
  ||^| |_ __ヽ
 「 ̄ ̄ ̄|||_|
 L____」||_ |_
     |___)_)
0608デフォルトの名無しさんNGNG
京産ヨリモ ドキュソ ダヨ...

そういえばもうレポートの提出日は過ぎてるな。
>>590は結局できたんだろうか。
0609デフォルトの名無しさんNGNG
宿題がさっぱりわかりません。助けてください。明日(水曜)提出日なんです。
課題 2個の整数を入れ替える関数を用いてバブルソートに基づいて10個の整数を昇順に並び替えるプログラミング。
フローチャートはわかってます。見にいくですが以下の通りです。ソートするexchという関数を作るってのがメインです。

strat
----------
|
-----
ループ1
i=0から9
----------
|
----------
入力
hyo[i]
----------
|
----------
ループ1
----
|
-----
ループ2
i=8から0
----------
|
-----
ループ3
j=0からi
----------
|
0610デフォルトの名無しさんNGNG
| --------------
/分岐
/hyo[j] > hyo[i]
/---------------- N-------
|Y |
----------------------- |
|exch(hyo[j],hyo[j+1]| |
----------------------- |
| |
|<--------------------------
----------
ループ3
----
|
----------
ループ2
----
|
-----
ループ4
j=0から9
----------
|
----------
入力
hyo[i]
----------
|
----------
ループ4
----
|
---------
END

改行が多いと出たので2つに分けさせてもらいました。よろしくおねがいします。
0611デフォルトの名無しさんNGNG
>>609 endで終わってるって事はpascalかい?

だったら交換はこう書くのが作法さ

procedure exch(var x,y:integer);
begin
x:=x+y;
y:=x-y; //x+y-yだからxになるよ
x:=x-y;//x+y-xだからyになるよ
end;
0612デフォルトの名無しさんNGNG
メインはフローチャートの通りならこうだろうね。

var i,j:integer;
var hyo[0..9]:integer;
begin
 for i:=0 to 9 do begin
  write(i,' =');
  readln(hyo[i]);
 end;

 for i:=8 downto 0 do
 for j:=0 to i do
  begin
  if hyo[j]> hyo[i] then exch(hyo[j],hyo[j+1]);
 end;
 for i:=0 to 9 do write(hyo[i]);
end.

さあ、これが動くのかなあ・・・
0613609NGNG
>>611
すんません。C言語です。このスレC限定じゃなかったのですね。申し訳ないです。

一応自分でやったとこまで。
main()
{
int hyo[10];
int i,j;

for(i=0; i<10; i=i+1){
printf("%d個目の数字を入力せよ>>",i+1);
scanf("%d",&hyo[i]);
}

for(i=8; i>0; i=i-1){
for(j=0; j<i; i=1+1){
if( hyo[j] > hyo[i]){


getch();
exit(0);
}
授業で習ったことで、メイン関数を先に書くと1つ制約?が出るらしいので、個人的にはexch関数を先に書きたいです。
0614デフォルトの名無しさん NGNG
どなたかこんな宿題解いてみてもらえませんか??
もうさっぱりです。明後日,提出日なんです。
pent minoのすべての可能な配置を数えて1,101,201・・・・
番目の解を出力するプログラムを作れ。ただしfield(pent minoを
配置する盤のサイズは60マスで形は自由とする。)
どーかお願いいたします。
0615デフォルトの名無しさんNGNG
pent minoって何?
0616デフォルトの名無しさん NGNG
ペントミノは5つの正方形からなる駒です。
これを60マスにすきまなく埋めていくプログラムをつくりたいんです。
バックトラックを使うらしいのです。。。
0617デフォルトの名無しさんNGNG
>>614
解くだけなら全数あたるのつくれ。
多分何年もかかると思われるが、正解は正解なはずだ。
それ以外はそれぞれの状態の状態空間を持っていて、
遷移せなあかんのだが、おそらく614さんには無理っぽい。
(ごめんね)
あとは、問題のスキをついて、超簡単な問題に変形しろ。
ペントミノの形を全部シンプルにするとかね。
0618デフォルトの名無しさんNGNG
 つまり、60個のタイルからなる任意の形の図形を、5マスずつ12個に分割
するプログラムを書くということか。。。

んん、時間ないからプログラム書いてられないが
1.左上からスタート
2.ある一つの方向に進む。(もし駄目だったら再帰的にここに戻ってきて別の方向に進む)
  動いたところをマークする
3、5マス動いたら
 3.1 今まで動いたところで分割されている領域を調べ、そこで分割した領域のサイズが
    5の倍数でないところがあったら、失敗。一つ前に動いたところに戻り、別の方向に
    進む。この時一歩前が全ての方向に進んでいたら、もう一歩前に戻る。
 3,2 まだ移動してないところに移動して2へ

こういう風にやれば可能?
あまり考えないで書いてるけど
0619デフォルトの名無しさんNGNG
追記
 年のため、2の途中で進むところがなくなったら当然失敗ね。一歩前に戻りましょう。
0620デフォルトの名無しさんNGNG
あと、蛇足だけど
高速化したければ、今埋められてる部分をキーにして、残りの分割パターンが
どういうのがあるか、というハッシュテーブルを使うのが吉。
 まあ、一日でそこまでできないだろうけど。
0621デフォルトの名無しさんNGNG
60マスって形は自由ってのは長方形以外もあるという事?

長方形なら 60=2*2*3*5 だから
1x60,2x30,3x20,4x15,5x12,6x10 の6通り

ペントミノは12通り
1x5
□□□□□

2x3
□□  □  □
□□□ □□□

2x4
□       □    □□ 
□□□□ □□□□   □□□

3x3
□      □     □  □    □    □ 
□      □   □□□ □□□ □□□ □□
□□□ □□□   □    □      □   □□
0622デフォルトの名無しさんNGNG
たぶん問題は、この12個を全て1個づつ使って
 3x20,4x15,5x12,6x10 の4通りの箱に詰めるというんじゃないの?
0623デフォルトの名無しさんNGNG
んー、だとすると100個以上も解のパターンあるかな?
60マスを12*5にわけるって解釈でいい気がするけど。
0624デフォルトの名無しさんNGNG
回転をどうするかにもよるけど数千通り解があるでしょ
0625617NGNG
だから、きちんと解こうとすると1日では無理っぽい。
スキル次第だけど、回答を出すという目的で最適化するなら、
出題の甘いところをつくしかないと思うのだが。
ちゃんと解くのはバックトラックっなんて考えないで、
縦型探索で、破綻したときにその枝探さないようにすればOK。
状態空間を差分で積んだりするテクはあると思うが力任せが
吉。あ、プログラム毎に100番目とか絶対試さないと思うから
手作業で2種類解を作って、全探索プログラム書いてもいいかも。
0626デフォルトの名無しさんNGNG
60マスというのは12*5とか1つだけに絞っていいみたいです。
やっぱりこのプログラムは長いんですかねー?60マスというのは12*5とか1つ
0627デフォルトの名無しさんNGNG
で 言語は何? C? C++ ? Pascal? Java?
0628デフォルトの名無しさんNGNG
Cです。
0629デフォルトの名無しさんNGNG
まずはデータの持ち方を考える事だね
2次元はややこしいから、1次元で考える事にしてみる

当然全部のペントミノに番号を振って
6*10に絞るなら
□□□□□    A:0,1,2,3,4

□□  □  □  B:0,1,10,11,12  C:0,2,10,11,12
□□□ □□□

てな調子で配列にして、回転、反転も最初にリストしとく
0,1,2,10,11 の回転は ,0,1,10,11,20,1,10,11,12,1,10,11,20,21 てな感じね
全部リストしたら、
ソートして重複があったら消去しとく
これを サイズ60の1次元配列にどう収めるという問題だから
左端には、先頭がゼロの要素しか持って来れない
たとえば、C:0,2,10,11,12を持ってきたら 0,2,10,11,12番地にCと書く C空C空空・・・てな調子
空き番地の先頭1番地から見ると次の空きは2だから
リストから先頭が0で2番目が2のもの、先頭が1で2番目が3のものを探す
これは見つからないからバックトラックして・・・
0630デフォルトの名無しさんNGNG
置く場所を 6x12 ではなくて、(6+4+4)x(12+4+4) 個にしたら
どうかな。んで外側はあらかじめ埋めとく。こうすりゃ
範囲チェックしなくていいと思うんだけど。
0631デフォルトの名無しさんNGNG
#include <stdio.h>
const _YS=10;
struct _ptm { char n ;char d[5];
int maxx(void){int x=d[0]%_YS; for(int i=1;i<5;i++)if(d[i]%_YS>x)x=d[i]%_YS;return x;};
int maxy(void){int y=d[0]/_YS; for(int i=1;i<5;i++)if(d[i]/_YS>y)y=d[i]/_YS;return y;};
void dbg_print()
 { char dd[60]={0,};
  for(int i=0;i<5;i++)dd[d[i]]=n;int mx=maxx();int my=maxy();
  for(int y=0 ;y<=my;y++)
  {for(int x=0;x<=mx;x++) if (dd[x+y*_YS] )putchar(n);else putchar(' ');puts("");
  }
 }
};
int ptn=12; //全部の回転と反転したパターンの個数
_ptm pt[12*4*2]={
{'I',{0,1,2,3,4}},
{'L',{0,1,2,3,10}},
{'F',{0,1,2,3,11}},
{'D',{0,1,2,10,11}},
{'C',{0,1,2,10,12}},
{'M',{0,1,11,12,13}},
{'N',{0,10,11,12,22}},
{'W',{0,10,11,21,22}},
{'V',{0,10,20,21,22}},
{'X',{1,10,11,12,21}},
{'G',{1,10,11,12,22}},
{'T',{1,11,20,21,22}},
} ;
_ptm rot(_ptm &pt)
{ _ptm r;r.n=pt.n;
int my=pt.maxy();
 for(int i=0;i<5;i++)
  r.d[i]=(pt.d[i]%_YS)*_YS +(my - (pt.d[i]/_YS));
  return r;
}
_ptm rev(_ptm &pt)
{ _ptm r;r.n=pt.n;
int my=pt.maxy();
 for(int i=0;i<5;i++)
  r.d[i]=(pt.d[i]%_YS) +(my - (pt.d[i]/_YS))*_YS;
  return r;
}

void add(_ptm p)
{int i,j;
for(i=0;i<ptn;i++)
  { for(j=0;j<5;j++)
    {
    if (p.d[j]>pt[i].d[j])goto next;
    if (p.d[j]<pt[i].d[j])
     {
      for(j=i;j<ptn;j++){_ptm w=pt[j];pt[j]=p;p=w;};
      pt[ptn++]=p;
      return;
     }
    }   return;
  next:;
  }   pt[ptn++]=p;
}
0632デフォルトの名無しさんNGNG
んで、618,621どっちの解釈が正しいの?
0633デフォルトの名無しさんNGNG
void init(){
for(int i=0 ;i<12 ;i++)
   { _ptm r=pt[i]; add(rev(r));
  r=rot(r);add(r);add(rev(r));
  r=rot(r);add(r);add(rev(r));
  r=rot(r);add(r);add(rev(r));
 }
}
0634デフォルトの名無しさん NGNG
なるほど!!分かります。
でも、具体的にはどうしよう。どうすれば。
0635?f?t?H???g???????NGNG
いえ6*10の長方形ですみたいです。
さっき先生にきいてきました。
ほとんどの生徒が解けてないそうです。
0636デフォルトの名無しさんNGNG
ああっ 変な名前になってしまった。
すいません。みなさん。
0637デフォルトの名無しさんNGNG
>>635
いや、12種類のタイル使う必要があるかという話
0638デフォルトの名無しさんNGNG
はい。
12種類のペントミノを使って6*10のマスを
埋めるプログラムです。
0639デフォルトの名無しさん NGNG
あまりに分からないのでネット上で手本がないか
探してみたんですけどバックトラックを使ったプログラムは
ありませんでした。
0640デフォルトの名無しさんNGNG
addの修正ね
void add(_ptm p)
{int i,j;
for(j=0;j<4;j++)
for(i=j;i<5;i++)
{if(p.d[j]>p.d[i]){int w=p.d[i];p.d[i]=p.d[j];p.d[j]=w;};
}
0641デフォルトの名無しさんNGNG
bool check(_ptm p,int a,char *m)
{ if(p.maxx() + (a%_YS) >= _YS) return false;
for(int i=0;i<5;i++) if( p.d[i]+a>=60|| m[p.d[i]+a]) return false;
return true;
}
void poke(_ptm p,int a,char *m)
{ for(int i=0;i<5;i++) m[p.d[i]+a]=p.n;
}
struct base{
_ptm pt[64];
char m[60];
base::base (){for (int i=0;i<60;i++)m[i]=0;};
int zp(){int i;for(i=0;i<60;i++)if(m[i]==0) return i;return i;};
void dbg_print()
{ char *p=m;
for(int x=0 ;x<60/_YS;x++)
{for(int y=0 ;y<_YS;y++,p++) if(*p)putchar(*p);else putchar(' ');puts("");
}
}
} ;
int n=0;
void func(base b,int no,int st)
{
poke(b.pt[no] , st , b.m);
char c= b.pt[no].n;
for(int i=0;i<ptn ;i++)if (b.pt[i].n==c)b.pt[i].n=0;

int zp=b.zp();
if(zp>=60) {
b.dbg_print();printf("%5d\n",n++);
return ;
}
int y0=zp%_YS;
for(int i=0;i<ptn ;i++)
if (b.pt[i].n)
{int yc= b.pt[i].d[0];
if(y0>=yc)
if(check(b.pt[i],zp-yc,b.m) ) func(b,i,zp-yc);
}
}
0642デフォルトの名無しさんNGNG
int main(int argc, char* argv[])
{
base b;
init();
for(int i=0;i<ptn ;i++)b.pt[i]=pt[i];
for(int i=0;i<ptn ;i++)
{
if(check(b.pt[i],0,b.m) ) func(b,i,0);
else break;
}
puts("end");
getchar();
return 0;
}
これでおわり
0643デフォルトの名無しさんNGNG
どこからどこまでがしっかりした答え
なのかよくわからないんです。
場所を丁寧におしえてもらえませんか?
馬鹿ですみません。
0644デフォルトの名無しさんNGNG
さあ? めんどくさいから 自分で探して 自分でバグも取ってね

とりあえずサービス

void init(){
for(int i=0 ;i<12 ;i++)
{ _ptm r=pt0[i];
add(r);add(rev(r));
r=rot(r);add(r);add(rev(r));
r=rot(r);add(r);add(rev(r));
r=rot(r);add(r);add(rev(r));
}
printf(" ptn=%5d\n",ptn);
}
0645デフォルトの名無しさんNGNG
ようするに、左上から、12個のピースを順に置きながら
全部の組み合わせを試して、いけばいい 再帰的に

次を調べる( 状態, ピース , 詰める場所)
{
 ピースを嵌める(状態, に ピース 詰める場所)
左上に、残ったピース全てを置いてみて
if(置けるなら)
  次を調べる(状態,ピース,場所)
}
となる。 原理は総当りだから簡単だよ
0646デフォルトの名無しさんNGNG
次から618のやり方ね。make_field()とcomplete()を書き換えればどんなフィールドにも
対応できるかと。
バックトラックをきっちり使ってるが。
0647デフォルトの名無しさんNGNG
#include<stdio.h>

int a[60][60]; /* フィールドを表す配列。1のとこのみ配置可能 */
int b[60][60];
int c[60][60];
int p,s;

/* フィールドの形決定。形変えたければここを変える。今回は10*6 */
int make_field(){
int k,l;
for(k=0;k<60;k++){
for(l=0;l<60;l++){
if(k<10 && l<6){
a[k][l] = 1;
}else{
a[k][l] = 0;
}
}
}
}

/* 初期化 */

int init_field(){
int k,l;
for (k = 0; k < 60; k++) {
for (l = 0; l < 60; l++) {
b[k][l]=a[k][l];
}
}
}
0648デフォルトの名無しさんNGNG

int large_of_field(int x, int y){
int ans;
ans = 1;
if(x<0 || y<0 || x>=60 || y>=60) return 0;
if(c[x][y] != 1) return 0;
c[x][y]=0;
ans = ans + large_of_field(x - 1, y);
ans = ans + large_of_field(x + 1, y);
ans = ans + large_of_field(x, y - 1);
ans = ans + large_of_field(x, y + 1);
return ans;
}

/* これからどうがんばっても不可能な形に分断されてないか */
int check_field()
{
int k, l, ks, ls, breakflag,cc;
for(k=0;k<60;k++){
for(l=0;l<60;l++){
c[k][l] = a[k][l];
}
}

do{
breakflag = 1;
for(k=0;k<60 && breakflag;k++){
for(l=0;l<60 && breakflag;l++){
if(c[k][l] == 1){
ks = k;
ls = l;
breakflag = 0;
}
}
}
if(breakflag) return 1;
cc = large_of_field(ks, ls);
if(cc % 5 != 0) return 0;
}while(1);
}
0649デフォルトの名無しさんNGNG

int backtrack(int x, int y, int d){
if(x<0 || y<0 || x>=60 || y>=60) return 0;
if(b[x][y] != 1) return 0;
b[x][y]=p;
if(d==5){
start_piece();
b[x][y] = 1;
return 1;
}
backtrack(x-1,y,d+1);
backtrack(x,y-1,d+1);
backtrack(x+1,y,d+1);
backtrack(x,y+1,d+1);
b[x][y] = 1;
return 1;
}

int complete(){
int k, l;
s++;
if((s-1)%100 == 0){
for(k=0;k<10;k++){
for(l=0;l<6;l++){
if(b[k][l] == 0) {
putchar('#');
}else{
putchar(95+b[k][l]);
}
}
printf("\n");
}
printf("\n");
}
}
0650デフォルトの名無しさんNGNG
int start_piece(){
int k,l,ks,ls,breakflag;
if(!check_field()) return 0;
p++;
for(k=0;k<60 && breakflag;k++){
for(l=0;l<60 && breakflag;l++){
if(b[k][l] == 1){
ks = k;
ls = l;
breakflag = 0;
}
}
}
if(breakflag){
complete();
p--;
return 1;
}
backtrack(ks, ls, 1);
p--;
return 1;
}

main(){
make_field();
init_field();
p = 1;
s = 0;
start_piece();
}
0651デフォルトの名無しさんNGNG
まあ、がんばって解読してくれ
0652デフォルトの名無しさんNGNG
解読できません。どなたか助けてーください。
0653デフォルトの名無しさんNGNG
>>652
それ以上言うと死ぬほど叩かれるよ。
0654デフォルトの名無しさんNGNG
http://www2.to/05F

http://www2.to/03F

http://www2.to/01F
0655デフォルトの名無しさんNGNG
分かりました。こんなにお世話してもらってどうも
すみませんでした。ありがとうございました。
0656デフォルトの名無しさんNGNG
上のプログラムを実行させてみて気づいたが、
あまりに答え多すぎるんで、やっぱ全てのパーツを一回ずつ使う
んだろうなぁ。
0657デフォルトの名無しさんNGNG
#include <stdio.h>
const _XS=12; //10,12,15,20
struct _ptm { char n ;int d[5]; int mx,my;
int maxx(int XS){int x=d[0]%_XS; for(int i=0;i<5;i++)if(d[i]%XS>x)x=d[i]%XS;return mx=x;};
int maxy(int XS){int y=d[0]/_XS; for(int i=0;i<5;i++)if(d[i]/XS>y)y=d[i]/XS;return my=y;};
 void dbg_print()
 { char dd[60]={0,};
  for(int i=0;i<5;i++)dd[d[i]]=n;int mx=maxx(_XS);int my=maxy(_XS);
  for(int y=0 ;y<=my;y++)
  {for(int x=0;x<=mx;x++) if (dd[x+y*_XS] )putchar(n);else putchar(' ');puts("");
  }
 }
};
const _XS0=10;
_ptm pt0[12]={
 {'I',{0,1,2,3,4}},
 {'L',{0,1,2,3,10}},
 {'F',{0,1,2,3,11}},
 {'D',{0,1,2,10,11}},
 {'C',{0,1,2,10,12}},
 {'M',{0,1,11,12,13}},
 {'N',{0,10,11,12,22}},
 {'W',{0,10,11,21,22}},
 {'V',{0,10,20,21,22}},
 {'X',{1,10,11,12,21}},
 {'G',{1,10,11,12,22}},
 {'T',{1,11,20,21,22}},
} ;
_ptm rot(_ptm &pt)
{ _ptm r;r.n=pt.n;
 int my=pt.maxy(_XS0);
  for(int i=0;i<5;i++)
   r.d[i]=(pt.d[i]%_XS0)*_XS0 +(my - (pt.d[i]/_XS0));
    return r;
}
_ptm rev(_ptm &pt)
{ _ptm r;r.n=pt.n;
 int my=pt.maxy(_XS0);
  for(int i=0;i<5;i++)
   r.d[i]=(pt.d[i]%_XS0) +(my - (pt.d[i]/_XS0))*_XS0;
    return r;
}
bool check(_ptm p,int a,char *m)
{ if(p.mx + (a%_XS) >= _XS) return false;
  for(int i=0;i<5;i++) if( p.d[i]+a>=60|| m[p.d[i]+a]) return false;
   return true;
}
void poke(_ptm p,int a,char *m)
{   for(int i=0;i<5;i++) m[p.d[i]+a]=p.n;}
0658デフォルトの名無しさんNGNG
struct base{
int  ptn;
 _ptm pt[64];
 char m[60];
 base::base (){for (int i=0;i<60;i++)m[i]=0;};
 int zp(){int i;for(i=0;i<60;i++)if(m[i]==0) return i;return i;};
 void dbg_print()
 { char *p=m;
   for(int x=0 ;x<60/_XS;x++)
  {for(int y=0 ;y<_XS;y++,p++) if(*p)putchar(*p);else putchar(' ');puts("");
  }
 }
void del(char c)
{int i,j;
 for(i=j=0;i<ptn;i++)
   if(pt[i].n!=c)pt[j++] = pt[i];
  ptn=j;
}
void add(_ptm p)
{
  for(int i=0;i<5;i++)
   {
    int x= (p.d[i]%_XS0);
    int y= (p.d[i]/_XS0);
    if (y>=60/_XS) return ;
    if (x>=   _XS) return ;
   p.d[i]=y*_XS +x;
   }
  p.maxx(_XS);  p.maxy(_XS);
 int i,j;
 for(j=0;j<4;j++)
 for(i=j;i<5;i++)
  {if(p.d[j]>p.d[i]){int w=p.d[i];p.d[i]=p.d[j];p.d[j]=w;};
  }
 for(i=0;i<ptn;i++)
   {  for(j=4;j>=0;j--)
       { if (p.d[j]>pt[i].d[j])goto next;
         if (p.d[j]<pt[i].d[j])
         {
            for(j=i;j<ptn;j++){_ptm w=pt[j];pt[j]=p;p=w;};
            pt[ptn++]=p; pt[i].dbg_print();puts("");
           return;
         }
       }  return;
   next:;
   }  pt[ptn++]=p;  p.dbg_print();puts("");
}
void init(){
ptn=0;
for(int i=0   ;i<12   ;i++)
  { _ptm r=pt0[i];
            add(r);add(rev(r));
   r=rot(r);add(r);add(rev(r));
   r=rot(r);add(r);add(rev(r));
   r=rot(r);add(r);add(rev(r));
  } printf(" ptn=%5d\n",ptn);
 }
} ;
0659デフォルトの名無しさんNGNG
void func(base b,int no,int st)
{
 poke(b.pt[no] , st , b.m);
b.del(b.pt[no].n);

int zp=b.zp();
 if(zp>=60) {
 b.dbg_print();printf("%5d\n",n++);
 return ;
 }
int x0 = zp%_XS;
for(int i=0;i<b.ptn ;i++)
if (b.pt[i].n)
{ int xc= b.pt[i].d[0];int zp0=zp-xc;
 if(60 <= b.pt[i].d[5-1]+zp0) break;
 if(x0 >= xc)
 if(_XS > b.pt[i].mx+x0-xc)
 if(check(b.pt[i],zp0,b.m) )  func(b,i,zp0);
}
}

//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
base b;
b.init();
for(int i=0;i<b.ptn ;i++)
{
 if(b.pt[i].d[0]==0)
 if( check(b.pt[i] , 0 , b.m ) ) func(b,i,0);
}
    return0;
}
0660デフォルトの名無しさんNGNG
こりゃあC++じゃないのか? Cにしては違和感ありすぎのソースだが?
0661ダメ人間NGNG
初めて書き込みします。
静的スライスのプログラムを作りたいんですがどのように作ったらいいでしょうか?
静的スライスはプログラムから(v(変数名)、s(文))に影響を与える文を
以下の2つの関係を使って抜き出すものです
・CD関係
     ・文aが条件文である
     ・文bの実行は文aの結果に依存する
    以上の2つの条件を満たしたとき文aから文bにCD関係があるという
   EX  s:  if(c<0)
t: a=4;
u: b=5;
tからs,uからsにCD関係がある
・DD関係
     ・文aで変数vを定義している
     ・文bで変数vを参照している
     ・文aから文bへ実行可能なパスが少なくともひとつは存在し、かつ
      そのパスにおいて文aから文bの間に変数vを定義している文が存在しない
    以上の3つの条件が満たされたとき文aから文bへDD関係があるという
ex 1: a=3;
2: if(c<0)
3: a=6;
4: printf("%d",a);
文3から文4へDD関係がある。文1もc>=0のとき文4に定義が到達するので
     文1から文4へDD関係がある。
例えば下のプログラムの(a,11)に関するスライス
1: #include<stdio.h>
2: main(){
3: int a,b,c;
4: scanf("%d",&a);
5: scanf("%d",&b);
6: scanf("%d",&c);
7: if(c<0)
8: a=5;
9: else
10: b=4;
11: printf("%d",a);
12: printf("%d",b);}
結果
1: #include<stdio.h>
2: main(){
3: int a,b,c;
4: scanf("%d",&a);
5:
6: scanf("%d",&c);
7: if(c<0)
8: a=5;
9:
10:
11: printf("%d",a);
12: }
プログラムの書いたファイルを読み込んで静的スライスを出力したいんですが
どうしたらよいでしょうか?よろしくお願いします
0662ダメ人間NGNG
少し書き足りなかったです。
DD関係のところなんですが「以上の3つの条件が満たされたとき
文aから文bへ変数vに関してDD関係がある」が正しいです。
例のところでも変数aに関してです。
あとCD関係の例なんですがif(c<0){ です。
{ が抜けてました。
あと(v(変数名)、s(文))に関するスライスとは、(v(変数名)、s(文))
からCD,DD関係を逆にたどって到達できる文の集合です。
(a,11)の例だと
8から11に変数aについてDD関係がある。
7から8にCD関係がある
6から7に変数cについてDD関係がある
あと
4もc>=0のとき11に定義が到達するので
変数aに関してDD関係がある
よって結果のとおりになります
よろしくおねがいします
0663デフォルトの名無しさんNGNG
マルチステートメントやgotoは無視でオケ?
0664ダメ人間NGNG
goto文は無視でオッケーです。
マルチステートメントってなんですか?
すいません、あんま詳しくないので。
よろしくお願いします
0665ダメ人間NGNG
あとifのほかにもちろんwhile文も条件文になります。
0666ダメ人間NGNG
> EX  s:  if(c<0)
> t: a=4;
> u: b=5;
> tからs,uからsにCD関係がある
if{ が正しいです。あとtからs,uからsではなくて,
「sからt,sからuにCD関係がある」が正しいです、すいません。
もしif{ の{ がなかったら「sからtにCD関係がある」になります
0667デフォルトの名無しさんNGNG
前処理として文法解析が必要だと思うが、
どの程度作ればいい?
Cの文法を完全にこなす必要があるとすると、ちと面倒。
課題の前提として用意してあると助かるが、
そこまで出題者が考えているか…
0668デフォルトの名無しさんNGNG
たとえば>>661の例で
4行目のscanf("%d",&a); が変数aを定義していると言うことは、
簡単には分からないと思うが。
その判断処理はあらかじめ用意されているのなら、
手頃な課題だと思うので、そう期待したいところ。
0669ダメ人間NGNG
スライスでは「変数aを定義する」とはa=・・となる文です。
結局scanf("%d",&a)もaに値を代入する、つまりa=・・となるので
定義している文となります。参照するとは・・=aという文章です。
printf("a",%d)も結局aを参照しているので参照している文になります。
0670ダメ人間NGNG
>Cの文法を完全にこなす必要があるとすると、ちと面倒。
デフォルトの名無しさんレスありがとうございます。
完璧なのをつくっていただけるならうれしいです。
自分はどうやって手をつけていいかまったく分からないんです。
go to文、continue文、break文がないプログラムを読み込んで
静的スライスが出力されればいいです。
もう1例書いときます
0671ダメ人間NGNG
1 #include<stdio.h>
2 int a,b,c,d;
3 int Square(int x)
4 {
5 return(x*x);
6 }
7 int Cube(int x)
8 {
9 return(x*x*x);
10 }
11 void main(){
12 printf("Squared Value?");
13 scanf("%d",&a);
14 printf("Cubed Value?");
15 scanf("%d",&b);
16 printf("Select!! Square:0 Cube:1);
17 scanf("%d",&c);
18 if(c=0)
19 d=Square(a);
20 else
21 d=Cube(b);
22 if(d<0)
23 d=-1*d;
24 printf("%d",d);
25 }
0672ダメ人間NGNG
(d、24)に関する静的スライス結果
1 #include<stdio.h>
2 int a,b,c,d;
3 int Square(int x)
4 {
5 return(x*x);
6 }
7 int Cube(int x)
8 {
9 return(x*x*x);
10 }
11 void main(){
12
13 scanf("%d",&a);
14
15 scanf("%d",&b);
16
17 scanf("%d",&c);
18 if(c=0)
19 d=Square(a);
20 else
21 d=Cube(b);
22 if(d<0)
23 d=-1*d;
24 printf("%d",d);
25 }
0673ダメ人間NGNG
23,21,19→24(DD関係)
19、21→23(DD関係)
22→23(CD関係)
19、21→22(DD関係)
18→19、21(CD関係)
17→18(DD関係)
13→19(DD関係)
15→21(DD関係)
よってこの場合は実質プログラム全部です
0674ダメ人間NGNG
あと条件文も参照ということになります。
下の例だと文2でcを参照している
1から2へ変数cに関してDD関係がある
1 scanf("%d",&c);
2 if(c=0)
3   d=3;
while文も同様です
1 i=1;
2 while(i<10){
3 i++;
4 a=a+1;}
この場合は1から2、3から2へ変数iに関してDD関係があるとなります
よろしくお願いします
0675デフォルトの名無しさんNGNG
ダメみたいだね
0676デフォルトの名無しさんNGNG
ぱっと聞いて「めんどくさそー」って印象が先に出ちゃう課題だからねぇ・・・
0677デフォルトの名無しさんNGNG
こういう問題は分解して単機能単位で聞くのがベストだよな。
問題まったく読んでないけど。
0678デフォルトの名無しさんNGNG
ペントミノ みたいに、単純に面白そうなら 多少めんどくさくても答えは出るんだけどねえ

単にめんどくさいだけじゃなあ
0679デフォルトの名無しさんNGNG
ペントミノ は >>621 のレスが大きいよな 視覚的にさ
0680デフォルトの名無しさんNGNG
ファイル名を入力して
ファイルの大きさ(バイト数)を出力するプログラムって
どうやって作るんですか?
0681デフォルトの名無しさんNGNG
print -s $ARGV[0];
0682デフォルトの名無しさんNGNG
チョット話をかえていい?

最近出た入門用 and 1品物 組込みに便利な奴

OAKS16 \5,400
http://www.oaks-ele.com
http://www.rakuten.co.jp/tsukumo/435956/444341/
 制限有だけどCコンパイラ・デバッカも付属
 RAM10KB、フラッシュ128KB

AKI-H8/3664タイニーマイコンキット 1キット \2,800.
http://www.akizuki.ne.jp/new.html
フラッシュ32KB  RAM2KB

どちらも1チップマイコンだから超小型、ADCも内臓
0683682NGNG
ありゃ、スレ間違いだ
0684デフォルトの名無しさんNGNG
>>681
shigeに荒らされるぞ!!
0685ダメ人間NGNG
>前処理として文法解析が必要だと思うが、
>どの程度作ればいい?
go to 文などがない簡単なプログラムを読み込んで出力できるのでいいんでお願いします
どうしても提出しなきゃならないので・・・・・・。
0686ダメ人間NGNG
まずCD関係とDD関係をプログラムから解析するにはどうしたら
いいんでしょうか?
0687デフォルトの名無しさんNGNG
>>686
そういうときはさ、>>661を参照、とか、せめて何かポインタ示さないと
誰もついてこないし解答もヒントもくれないぞ(大爆笑)
0688ダメ人間NGNG
>>687
あんま書き方とか分かってないのですいません
0689デフォルトの名無しさんNGNG
>>686
 CD関係は、普通にif文みつけて、括弧が及ぶ範囲調べればいいんでは?
 DD関係については、まずフロー解析してフローのグラフを作らないといけ
ないと思う。
18行目からは19行目と21行目に飛ぶ可能性があるという感じで。
で、ある変数について調べていく。
このとき使われる部分から上で作ったグラフを再帰的に逆に辿っていき、
定義されている部分まで辿っていくことで、DD関係を見つける。

もちろんこれをやる前には字句・構文解析、はしないといけないが。
0690デフォルトの名無しさんNGNG
689の追記。
 DD関係みたいな話は、コンパイラではレジスタの割り振りとかのためにしないと
いけない話だから、コンパイラ関係の本を読んでみるのもいいかもしれない。
 上で言ったやり方よりも、もうちょっとエレガントなやり方ものってる。
0691デフォルトの名無しさんNGNG
>>686
一度も使われていない変数を参照した場合とかは、どうするんだ?
0692デフォルトの名無しさんNGNG
再帰的下向き構文解析では、左再帰性をもつ生成規則を扱うことができない理由
とはなんでしょうか?
0693デフォルトの名無しさんNGNG
>>692
http://www.rts.soft.iwate-pu.ac.jp/lab/system-A/2000/lesson-7/093/note/mondai4.html
0694692NGNG
>>693
ありがとーー、大好き!
0695testNGNG
test
0696ダメ人間NGNG
>>689
レスありがとうございます。
CD関係とDD関係をエッジ、文をノードとする有向グラフをつくり、スライシング基準
(v,s)(どの文{s}のどの変数{v}に関するスライスをもとめるか?)のノードから逆に
有向辺をたどって得られるノードの集合が求める静的スライスなんですが、
これをプログラムでどうやって書いたらいいかがさっぱりなんです。
0697ダメ人間NGNG
>>689
「あるプログラムを読み込んでCD関係やDD関係を解析する」
ということをCまたはJAVAでどう書いたらいいんでしょうか?
相当長いプログラムになるんでしょうか?
0698ダメ人間NGNG
追記
「あるCのプログラムを読み込んで・・・」
です。
0699デフォルトの名無しさんNGNG
C言語で二つの任意の集合を入力して和集合と積集合を表示させるプログラムを教えてください。
範囲は1から50までです。

例えば A=1,3,5,6,10,20
   B=1,4,5,8,9,15, と入力すると
和集合:1,3,4,5,6,8,9,10,15,20
積集合:1,5,10,15 と表示されるようにしたいのです。
お願いします。
0700デフォルトの名無しさんNGNG
http://www.megabbs.com/program/index.html
0701デフォルトの名無しさんNGNG
>>699
1 配列(a[],b[],flag1[51],flag2[51])を用意する。
2 入力された文字列を正しく配列(a,b)に格納する。
3 aとbの配列の要素に応じてflag1,flag2を変化させる。
4 flag1,flag2の結果を表示する。
5 その他。
プログラムの流れを簡単に区切ると、こんな感じになると思うので、
これで、分かる部分だけ作って、分からない部分は、
作った部分を全て明かしてから、改めて聞くと吉。
0702デフォルトの名無しさんNGNG
ファイルマージと同じで、双方をソートしておいて
それぞれのトップを比較しては小さい方を読む 方法で頑張れ>>699
0703デフォルトの名無しさんNGNG
>>699
入力を格納するところが一番面倒そうな気がするけど、
入力はどうやって与えられるの?
標準入力から、A=1,3,5,6,10,20
という風に入力されるん?
0704デフォルトの名無しさんNGNG
>>699
入力はソートされていると考えて良いのか?
1,3,10,5,6
とかみたいな入力もあり?
0705デフォルトの名無しさんNGNG
>>696 >>697
相当長いです。
でてくる命令全てについて、プログラムを書かないといけないわけですから。

まず、ifやfor等の分岐となるものについての解析が必要です。
このとき、ifがtrueならばどこにとぶのか、elseならどこにとぶのか、
など、何行目→何行目へと飛ぶという流れをつかまなければいけません。
このとき、この行はif分だとか、そういう構文解析をしないといけないので、
その辺がやたらダルいです。
何行目→何行目というのは、エレガントではないですがm行のプログラムを
読むなら、m*mの配列を用意して、飛ぶかもしれない、飛ばないかもしれない、
という形で表現してもいいでしょう。逆に辿るときに簡単ですので。

また、各行について、その行で定義されてる変数、及びその行で使われている
変数というのを解析しないといけないと思います。これもめんどくさいので、
変数の種類をnとしたら、m*nの配列を用意して、無関係、定義、使用という
情報を記憶するのがいいかと。

ここまで下準備ができたら、あとは>>699に書いたように、バックトラック
しながら逆に辿るだけでいいとは思いますが・・・

 とりあえず、構文解析が面倒ですよね。構文解析はコンパイラの本に色々
のっています。・・とてもじゃないけど、ここで説明できる内容ではないので・・
0706デフォルトの名無しさんNGNG

ネットでの音楽配信サービスなどで「視聴することはできるがコピーすることはできない技術」みたいなのがありますが本当にコピーできないんですか?
デジタルデータをPCにダウンロードしているので簡単にコピーを作れそうな気もするんですが実際どうですか?
個人的にはコピーできないなんてあり得ないと思ふのですが・・・
別にコピーしようなんて気はありません。
だってMP3派なんだもん(笑)
0707デフォルトの名無しさんNGNG
>>706
たとえばリアルプレーヤーなんかのストリーミングとかでせうか
0708デフォルトの名無しさんNGNG
>>706
がんばれば絶対できないというものはないと思います。
ただ、そういうツールを作って配布すると違法になるかも
0709デフォルトの名無しさんNGNG
>>706
707でも出てるリアルプレイヤーのストリーミングも、
技術的にはファイルに落とすことは可能だろう。というかそういうツールあったし。
0710デフォルトの名無しさんNGNG
あったけど訴えられて配布中止になったような気がする。
0711デフォルトの名無しさんNGNG
#include<stdio.h>
main()
{
int a=25,b=14,c=16,d=11;
a+=b;
c*=d;
b=c%a;
d&=b;
printf("%d %d %d %d\n",a,b,c,d);
}
誰かこの問題でb=c%a;の出し方教えて・・・。
a,cは足し算と掛け算だから簡単に解けたけど
bは意味が解からない。(なんでb=20になるの?)
誰か詳しい人教えて。
0712デフォルトの名無しさんNGNG
>>711
割り算が分からないところをみると小学生か?

c *= d の計算後の時点では、a = 39, b = 14, c = 176, d = 11
% は余りを求める演算子なので、
c / a = 176 / 39 = 5 ... 20
よって b = c % a = 20
0713デフォルトの名無しさんNGNG
>>712
ありがとう。本当に解からなかったんだ。
0714712NGNG
やば。割り算間違えてる。
176 / 39 = 4 ... 20 ね。

>>713
参考書読めば書いてあるでしょ。
0715699NGNG
レスありがとう。
>>704
入力は1,3,5,10,6のような入力もありです。
0716デフォルトの名無しさんNGNG
とりあえず、a[51], b[51]って配列作って、最初全部に0いれておいて
Aにnが含まれているか否かを、a[n]が1か0かで表すようにすると
ソートしなくていいから楽だと思われ。
0717デフォルトの名無しさんNGNG
http://www.cyborg.ne.jp/~univers/scun/order/order.html
お聞きしたいのですが、上記のようなページを作りたいのですが、
どのようにしたらよいのでしょうか?
0718デフォルトの名無しさんNGNG
>>717
CGIとsendmailが使えるサーバを確保して、cgiをかじったことある
人間を見つけて頼む。
もしくは、どこかのcgi解説ページにいって少しperlのお勉強をした
後に、メール送信フォームのサンプルcgiを見ながら自分で改造する。
0719デフォルトの名無しさんNGNG
俺に仕事として出してくれ。
つーか、宿題か、それ?
0720デフォルトの名無しさんNGNG
sendmailまでいるかな?
0721デフォルトの名無しさんNGNG
麻衣を出せや(゚д゚)ゴルァ!
0722デフォルトの名無しさんNGNG
>>721
夏休みなので旅行に行っている模様。
0723麻衣NGNG
>>699
こんなかんじ?

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

#define N_ELEMENTS 50
#define ARYSIZE(x) (sizeof(x) / sizeof(x[0]))

typedef enum {
OutOfSet,
inA,
inB,
inAandB,
} ElementState;

void get_element(int set[], int size, ElementState state, char []);

int main(void)
{
int set[N_ELEMENTS + 1] = { OutOfSet };
int element;
char buf[BUFSIZ];
int i;

printf("Aの要素を入力してください。:");
gets(buf);
get_element(set, ARYSIZE(set), inA, buf);
printf("Bの要素を入力してください。:");
gets(buf);
get_element(set, ARYSIZE(set), inB, buf);

printf("AとBの積集合:");
for (i = 1 ; i <= N_ELEMENTS; i++)
if (set[i] == inAandB)
printf("%d ", i);
putchar('\n');
printf("AとBの和集合:");
for (i = 1; i <= N_ELEMENTS; i++)
if (set[i] != OutOfSet)
printf("%d ", i);
putchar('\n');

return 0;
}
0724麻衣NGNG
つづき

void get_element(int set[], int size, ElementState state, char buf[])
{
int n;

while (*buf) {
while (isspace(*buf))
buf++;
for (n = 0; isdigit(*buf); buf++)
n = n * 10 + *buf -'0';
if (n >= size) {
fprintf(stderr, "%d : 数字が大きすぎます。\n", n);
exit(1);
}
set[n] += state;
}
}

入力ぶぶんがあんましよくないね。scanf つかおうと思ったけどうまくいかなくて
こんなのにしちゃった。
0725デフォルトの名無しさんNGNG
アイ
マイ
ミー
マイン?
0726デフォルトの名無しさんNGNG
アインス
ツヴァイ
ダァライ
フィアー?
0727孫悟空NGNG
アー
ミー
マー
0728麻衣NGNG
あれぇ、ひさしぶりにがんばったのに失敗しちゃった! >>724

>>while (isspace(*buf))

これじゃ空白をよみとばすだけで','が来たらとまっちゃうね…。

while (!isdigit(+buf))

に変えといて…。 うつだしのー…
0729麻衣NGNG
>>728
>>+buf
じゃなくて
*buf

ごめんね。
0730デフォルトの名無しさんNGNG
麻衣って倉本麻衣?
0731デフォルトの名無しさんNGNG
アー
メー
マー
0732デフォルトの名無しさんNGNG
>>729
麻衣ちゃーん。
0733麻衣NGNG
はーい。 >>732
なぁに?
でも今お母さんとおやつのプリン作ってて手がはなせないの。
またあとでね。ごめんなさい。
0734デフォルトの名無しさんNGNG
#include<stdio.h>
main()
{
int m=5, n=10, p=8, i;
float x = 2.5, y=5.5, z=7.0, f;
i = x+y+z;
f = y*n + n/p;
p += (float) m+n;
x -= (int)y + (int)z;
m += n/y;
printf("%d %d %d %d %d \n",i, f, p, x, m);
}
この解き方が解からないよ〜。
誰か救済措置を・・・。
i=15,f=0, p=107822560, x=23, m=0
どうしたらこんな値が出力されるの?
0735デフォルトの名無しさんNGNG
つっこみどころがありすぎ。とりあえずこんなところか?

#include<stdio.h>
main()
{
int m=5, n=10, p=8, i;
float x = 2.5, y=5.5, z=7.0, f;
i = x+y+z;
f = y*n + (float)n/(float)p;
p += m+n;
x -= (int)y + (int)z;
m += (float)n/y;
printf("%d %f %d %f %d \n",i, f, p, x, m);
}
0736デフォルトの名無しさんNGNG
それでなんでこの値になるの?
i=15までは解けたがそれ以外の解き方が
全くわからんのだけど・・・。
f=0, p=107822560, x=23, m=0...ってどう計算すれば
この値になるの?
答えの解き方が知りたいのだが・・・。
0737デフォルトの名無しさんNGNG
解き方ってなんだよ。
解いてるのはコンピュータであってあんたじゃないだろ。

printf の書式指定がおかしいから表示される値が狂ってるだけ。
0738デフォルトの名無しさんNGNG
麻衣ちゃん、ありがとう。
0739デフォルトの名無しさんNGNG
ネカマ人生まっしぐら!
0740デフォルトの名無しさんNGNG
http://www.muvc.net/kpgy/man.html
0741デフォルトの名無しさんNGNG
答えはi=15,f=56,p=23,x=-9.5,m=6だったよ。
printの書式が%dじゃなく%fだったとは・・・。
だから答えが間違っていたのか。
m=6になんでなるの?
0742デフォルトの名無しさんNGNG
>>741
+=って記号の意味はわかってる?
float(10)/5.5 = 1.…となって、m += でmがintなので、intに
キャストされて、切り捨てられて1になるから、
m += 1で6。
0743デフォルトの名無しさんNGNG
>742
ありがとうです。
解けました。
まだまだヒヨッコなのでスマンです。
0744デフォルトの名無しさんNGNG
2001/06/30 00:05, 0
2001/06/30 00:20, 1
2001/06/30 00:35, 6
2001/06/30 00:50, 0
2001/06/30 01:05, 0
2001/06/30 01:20, 2
2001/06/30 01:35, 0
2001/06/30 01:50, 1

上記の記述があるファイル名をtmpall.logファイルとします。

ここからが質問です。
このファイルの1番右の数字だけをsortして、MaxとMinの値を調べるシェルを作りたいのですが、上記の結果ですと、Max=6 Min=0 です。

OSはAIX シェルはKシェルです。
ご教授よろしくお願いいたします。
0745デフォルトの名無しさんNGNG
環境限定しすぎじゃ
UNIX板でも行け
0746デフォルトの名無しさんNGNG
http://homepage2.nifty.com/katuya/index.html
0747デフォルトの名無しさんNGNG
>>744
Shell scriptをシェルと略す奴って
JavaScriptをJavaと略す奴よりタチ悪いよな
0748デフォルトの名無しさんNGNG
>>744
オライリーのkronシェル本はもちろんもってるよね?
http://www.oreilly.co.jp/BOOK/ksh/
0749デフォルトの名無しさんNGNG
>>747 禿同
0750お厨腐人NGNG
>>744
あら、あたくしC便器幼虫の夏厨でござ―ますし
Cしか存じ上げませんことよ♪
#include <stdio.h>
#include <limits.h>
#define FILENAME "tempall.log"
int main(void)
{
 FILE *fp;
 int max = 0, min = INT_MAX, n;
 if ((fp = fopen(FILENAME, "r")) == NULL) {
  fputs("failed to open file!", stderr); return 1;
 }
 while (fscanf(fp, " %*d/%*d/%*d %*d:%*d, %d ", &n) != EOF) {
  max = n > max ? n : max; min = n < min ? n : min;
 }
 printf("max = %d\nmin = %d\n", max, min);
 return 0;
}
こんなのいらないですって? おーほっほっほっほっ呆。
覚えたてでカキたくてたまらないのでございますのことよ♪
おーほっほっほっほっ呆。 では、御免あさ―せっ♪
0751デフォルトの名無しさんNGNG
>>744
#!/usr/bin/ksh
echo `awk '{print $3}' tmpall.log | sort | tail -1`
echo `awk '{print $3}' tmpall.log | sort | head -1`

ダメ?
0752>>751NGNG
もちっとまじめにやると
NR==1{max=min=$3}
max<$3{max=$3}
min>$3{min=$3}
END{print "min",min," max",max}
だな
0753デフォルトの名無しさん01/08/28 18:22ID:uEuk16aY
このプログラムで最大、最小値、中央値を求めたいのですが、
このプログラムにはなにが不足しているのでしょうか?

#include <stdio.h>

main()
{
int score, i, j, n=0, data[100], work;

do{
printf("%d件目のデータを入力してください。(終了時は-99999)",n+1);

scanf("%d", &score);

if(score!=-99999){
data[n++]=score;
}
}while(score!=-99999);

for(i=0; i<n-1 ;i++){
for(j=i+1; j<n; j++){
if(data[i]<data[j]){
work=data[i];
data[i]=data[j];
data[j]=work;
}
}
}
}
0754デフォルトの名無しさん01/08/28 19:03ID:HEWceQCw
>>753
return
0755デフォルトの名無しさん01/08/28 19:17ID:NX00pcOM
わらた。
>753のプログラムは昇順にソートするプログラムっぽいので(詳細は見てない)
処理の最後で

最小値=data[0]
最大値=data[n-1]
中間値=data[n/2]

を出力すれオケー?
ただし、n=0の例外と要素数が偶数の時の処理は別途考慮の必要がある。
0756デフォルトの名無しさん01/08/28 19:18ID:NX00pcOM
あー、中間値って平均値じゃなくて所謂中間値のことだよね?
0757デフォルトの名無しさんNGNG
>>744
コマンドラインから一発で逝くぞ。Shellscript にしても構わんが。
$ sort +2 tmpall.log | sed -n "1p;$p"
0758デフォルトの名無しさんNGNG
麻衣はどこ逝った?
0759デフォルトの名無しさんNGNG
麻衣ちゃんは、Keyヲタな教師に拉致られてしまいました。
0760デフォルトの名無しさんNGNG
ヒロインが欲しかったのか
0761デフォルトの名無しさんNGNG
double型の数字列を標準関数を使わないで16進数の文字列に
変換する方法を教えて下さい。int型だとsprintfで変換
できるんですけど・・・
0762麻衣NGNG
麻衣わかんな〜い
>>761
ばいなりぃのいめーじのまま16進数にしたいの?
それとも値を整数部と少数点以下に別けたいの?

たとえば 1.5 を 0x0001.80000 のようにしたいって事?
0763麻衣NGNG

   , ―'
 γ∞γ~  \
 人w/ 从从) )  / ̄ ̄
  ヽ | | l  l |〃 <  ちゃんと言語書いてね >>761
  `wハ~ ーノ)   \__
   / \`「

少数点以下1桁を16進にしたいんだったら
16倍して、整数部を1桁分16進数にするのを繰り返せばいいよ
x=0.9なら
16*0.9=14.4 -> 'E'を出力 x=0.4
16*0.4= 6.4 -> '6'を出力 x=0.4
16*0.4= 6.4 -> '6'を出力 x=0.4
  ・・・くりかえし・・・
0764デフォルトの名無しさんNGNG
すいません。C言語です。double型の変数にint型で入りきらない
桁数の数値が入っていて、それを16進数の文字列に変換したいんで
すよ。sprintfだと第3引数がint型だから変換できるんですけど・・・
小数値は考慮しないでいいです。
0765デフォルトの名無しさんNGNG

   , ―'
 γ∞γ~  \
 人w/ 从从) )  / ̄ ̄
  ヽ | | l  l |〃 < じゃ考え方だけ
  `wハ~ ーノ)   \__
   / \`「

Frexp を使うと 指数部と仮数部に別けられるからさ -> M*2^E
指数部 を E=E4*4+R4 と分解しちゃおう
 E4=E/4;R4=(E%4)
すると、
  M*2^E4*4+R4 = M*2^R4 * 16^E4
 つまりE4桁の16進数になるから

x=M*2^R4;
for(i=0;i<=E4;i++)
{ int ix=x; //整数部をixに取り出す
 printf( "%1X",ix); //整数部を16進数で印刷
 x-=ix; //xの少数点以下のみをxに
 x*=16.0;
}
0766デフォルトの名無しさんNGNG
>>765
OSがDOS_IRMXなのか、算術関数が使えません。
自作の関数で求める方法を教えて下さい。お願いします。
0767デフォルトの名無しさんNGNG
   , ――
 γ∞γ~  \
 人w/ 从从) )   / ̄ ̄ ̄
  ヽ | |┬ イ |〃 <  ホントにないの?
  `wハ~ ^ ノ)   \___
   / \`「

frexpは絶対内部で使ってる筈だよ。
includeとライブラリースあるならgrepしてみようよ

無いなら 1/16を繰り返して int幅に収まるまで小さくしてから
回数をE4にして
残りを>>765の方法でやればいいと思うよ
0768デフォルトの名無しさんNGNG
C言語で文字列をスペースごとに区切って、
それぞれをポインタの配列に入れる関数は
どうやって作ったらいいですか?
0769デフォルトの名無しさんNGNG
>>768
そこに書いてあるとおりの関数を作ればいいと思うYO!
0770デフォルトの名無しさんNGNG
>769はあんまりだけど、何処が分からないのか書かないと麻衣ちゃんも答えてくれないだろう、きっと。
0771デフォルトの名無しさんNGNG

while(*p)
{
 while(*p==' ') if(*p++ == 0 ) return ; ;
 arrayp[i++]=p;
 while(*p!=' ') if(*p++ == 0 ) return ;
}
0772デフォルトの名無しさんNGNG
        ,. -─- 、
     ,r‐v'6,.     ヽ
.    /,r'`i ヲ,/ノノ}ノ、}ノ))
.    ノノ.  ! l(| ィfl fl |ノ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ,ゝ、 lフノ  < つぎのかたどうぞ
        /^レヽーヽ、    \_______
         / .∧_〉 ゚ .〉,
0773デフォルトの名無しさんNGNG
>>768
strtok使えば?
0774デフォルトの名無しさんNGNG
VC++を使っている初心者ですが
ヘッダをインクルードするにはどうすればいいのでしょう?

test.c
#include <test.h>

main()
{
int a, b, c;
a = b + c;
.
.
.

――――――――――――――――――
test.h
#define ABC 10
#define SIZE 100
―――――――――――――――――――
実行…
fatal error C1083: インクルード ファイルがオープンできません。'test.h': No such file or directory
0775デフォルトの名無しさんNGNG
>>774
<test.h> を "test.h" にしてみそ。
0776デフォルトの名無しさんNGNG
>>775
ありがとうございます。きちんと動作しました。
でも、どうしてなんでしょ?
0777デフォルトの名無しさんNGNG
>>776
コンパイラは <test.h> というのを見つけると、標準ヘッダの
ディレクトリを見に行く(include っていうディレクトリがあるハズ)。

"test.h" を見付けたときには、同じディレクトリの test.h を見に行く。
(同じディレクトリというのは、この場合 test.c が置いてある
ディレクトリという意味)
0778デフォルトの名無しさんNGNG
>>777
よく分かりました。
かさねて、ありがとうございます。
0779デフォルトの名無しさんNGNG
C言語ですが、コマンドラインって実際どうすれば使えるの?
プログラム名、プログラムの起動ってなに?
―――――――――――――――――――
 渡されたプログラム仮引数を順に表示するプログラムである。
プログラム名(ファイル名)はprintpとする。
【プログラム】
#include <stdio.h>

main(int argc, char *argv[])
{
int i;
printf("argc = %d\n\n", argc);
for (i = 1; i < argc; i++) printf("parameter%1d %s\n", i, argv[i]);
}
―――――――――――――――――――
【プログラムの起動】
printp tokyo shinbashi shinagawa kawasaki yokohama
0780デフォルトの名無しさんNGNG


1 3 5 7 □ 10 □
上の数列(?)はある規則によって並んでいます。
□の中に当てはまる数字を答えなさい。
また、その規則も答えなさい。

誰か教えて〜??
0781デフォルトの名無しさんNGNG
月の30日の日じゃないの?
答えは左から8、12.
0782デフォルトの名無しさんNGNG
31日だった。
0783名無しさんNGNG
宿題ってわけじゃないんですが・・・・柴田望洋の本で
|1 2 3|
|4 5 6|
と
|1 5|
|5 3|
|8 1|
の積を求めるのを書きなさいっていうのがあるんですが.どうやれば
いいでしょう?
i,j,k各々について3回の,3重ループで計算するのだと思うのですが
最後の詰めが良くないのか,手計算でやったのと違う結果になります.
0784デフォルトの名無しさんNGNG
>>783
手で計算するのと同じ手順をプログラムにやらせてはどうか?
0785デフォルトの名無しさんNGNG
>>782
頭悪いのでもっと詳しく教えて下さい!
0786名無しさんNGNG
>>784
いわれてみればその通りなんですけど・・・それをどうCで表現するか
っていうのが問題だったりします.
783の行列で前者,後者をmx,my
mz=mx*myとして
for(i = 0; i < 3; i++){
for(j = 0; j < 3; j++){
for(k = 0; k < 3; k++){
mz[i][j] += mx[i][k]*my[k][j];
}
}
}
こんな風にしてみたんですが,これだとmxが2行3列,myが3行2列なので
一概にi,jを3回ループにしてしまうとmxで2行,myで2列しかない部分に
ついても3回目を怒ってしまっているような気がするのですが....
0787デフォルトの名無しさんNGNG
>>786
全くそのとおりです。
i,jどちらかを2回ループにしましょう。
どちらが2回かは自分で考えてね。
0788デフォルトの名無しさんNGNG
>>787
オイオイ… "どちらか" じゃないだろ…。
2行3列 の行列 と 3行2列 の行列の積は 何行何列 の行列 になる?
そこらへんからよく考えてみてちょ。 >>786
0789779NGNG
なんとか自分で分かりました(多分)。
VC++を使ってプログラムをビルド-実行してたので、何のことだか分からなかったのですが
これはコマンドプロンプトから実行したときに意味を持つのですね(多分)。
0790デフォルトの名無しさんNGNG
C言語でchar型配列をatof関数でdouble型に変換すると演算誤差
が出てしまいます。小数値を丸めるにはどうしたらいいでしょうか。
0791デフォルトの名無しさんNGNG
>>790
数学の本の誤差丸めに関する項を読んで、その手順をプログラムに
やらせればいいよ。
0792デフォルトの名無しさんNGNG
>>761
double型でもsprintfで変換できない?
0793デフォルトの名無しさんNGNG
>>792
誤差丸めの話をしてるんだからsprintfは関係ないだろ。
0794トシ@矢田亜希子&水野美紀NGNG
キーボードから順次入力された正の整数を、 0が入力されるまで、配列に順番に格納し、次に、ある1つの正の整数を与えると、それが何番目に入力された整数であるかを表示するプログラムを作成せよ。
例えば、次のような実行例となるようにせよ。


数字(1)を入力してください 43
数字(2)を入力してください 25
数字(3)を入力してください 7
数字(4)を入力してください 123
数字(5)を入力してください 0
見つけたい数字を入力してください 7
7は3番目に見つかりました
見つけたい数字を入力してください 55
55は見つかりませんでした
見つけたい数字を入力してください 0
それではプログラムを終了します

以上


お願いします。(ペコペコ)
(出題:旧帝大1回生理系の課題の一部)
0795デフォルトの名無しさんNGNG
マルチすな
0796トシ@矢田亜希子&水野美紀NGNG
C言語です。
0797デフォルトの名無しさんNGNG
>>794
わざと分かりにくく書いたりして...

/****** ここから ******/
#include <stdio.h>

#define NUMS 100 /* なんで100なんだろうね。理由はないね */
#define TRUE (1 == 1) /* まあ理屈っぽい */
#define FALSE (!TRUE)

int input(char* prompt, int arg) {
  int x;
  char buf[200];  /* ここの200にも深い意味は無い。 */

  do {
    printf(prompt, arg);  /* こういうことをする奴は嫌われることもある*/
    gets(buf);
  } while (buf[0] == '\0'); /* 空の入力はやり直し;余計なお世話かもな */
  x = atoi(buf); /* sscanf(buf, "%d", &in); が好きならそれで */
  return x;
}

main() {
  int nums[NUMS];  /* nums[0] は使わない */
  int j, in;
  for (j = 1; j < NUMS && (nums[j] = input("数字(%d)きぼーん", j)) != 0; j++)
    ;

  while (in = input("どれじゃゴルァ", -1)) {  /* 2番目の引数 -1 は意味無し*/
    int k;
    int found = FALSE;
    for (k = 1; k < j; k++) {  /* nums[j] まで探すが、ミソ? */
      if (nums[k] == in) {
        printf("%d は %d番目だな\n", in, k);
        /* 一個見つけただけで安心していいならbreakしてもいいな */
        found = TRUE;
      }
    }
    if (!found) {
      printf("%d なんてシラネーヨ\n", in);
    }
  }
  printf("逝ってよし!...って逝くのは漏れか\n");
}
/****** ここまで ******/
0798デフォルトの名無しさんNGNG
>>797おもしろい!コメント読むと何故かムカムカしてくる!
0799デフォルトの名無しさんNGNG
>>797
実際に会社でこういうコメント付ける奴いるよ
そのまま引き継ぐなや
うんざり。
0800デフォルトの名無しさんNGNG
つーか、おまえか?
会社やめてくれ>>797
0801 NGNG
ネタニマジレス、カコワルイ
0802デフォルトの名無しさんNGNG
ある高校の科と学年とクラスを入力したら、
そこの担任の先生の名前が出力されるプログラムを作りたいのですが・・・。
C言語でお願いします。
0803麻衣もどきNGNG

   , ―'
 γ∞γ~  \
 人w/ 从从) )  / ̄ ̄
  ヽ | | l  l |〃 <  名前はだれが入力するの? >>802
  `wハ~ ーノ)   \__
   / \`「
0804802NGNG
プログラムを作る人が入れるみたいです。

A B C D E
1 2 4 2 4 4
2 3 4 2 4 5
3 3 3 2 4 5

上が科で左が学年、中がクラスの数です。
説明不足&下手ですいません。
0805デフォルトの名無しさんNGNG
こういう事なんでしょ?

 クラス数一覧
学| 科   目
年| A B C D E
--+---------------
1 | 2 4 2 4 4
2 | 3 4 2 4 5
3 | 3 3 2 4 5

ユーザーインターフェースの希望は?
0806802NGNG
その通りです>>805

ユーザーインターフェースの意味が良く分からないです。
すいません。
0807デフォルトの名無しさんNGNG
UI(ユーザインターフェイス)を
考慮しないとこんな↓ことになります。
http://www.geocities.co.jp/SiliconValley-Oakland/8192/
0808デフォルトの名無しさんNGNG
むちゃ長い…でもせっかく作ったんでうぷする。参考にして>>802
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define DEPARTMENTS 5
#define GRADES 3
#define CLASSES 5

void read_data(char * [][GRADES][CLASSES]);/* 担任名のデータを外部ファイルから読み込む */
int input_prompt(char *, int, int);

int main(void)
{
 int department, grade, class_no, cont;
 char *teachers[DEPARTMENTS][GRADES][CLASSES] = { NULL }, *res;

 read_data(teachers);
 do {
  puts("検索条件を入力してください。");
  department = input_prompt("学科(A=1 B=2 C=3 D=4 E=5):", 1, DEPARTMENTS);
  grade = input_prompt( "学年(1 〜 3) :", 1, GRADES);
  class_no = input_prompt( "クラス(1 〜 5) :", 1, CLASSES);
  if ((res = teachers[--department][grade-1][class_no-1]) != NULL)
   printf("%c科%d年%d組の担任は%s先生です。\n", department + 'A', grade, class_no, res);
  else
   puts("そのクラスのデータはありません。");
  cont = input_prompt("続けますか? YES=1 / NO=0:", 0, 1);
 } while (cont);
 return 0;
}
0809デフォルトの名無しさんNGNG
/* つづき */
int input_prompt(char *prompt, int low, int high)
{
 int res;

 do {
  printf("%s", prompt);
  scanf("%d", &res);
 } while (res < low || res > high);
 return res;
}

#define FILENAME "dat.txt"/* 担任名データの入った外部ファイル名 */
void read_data(char *teachers[][GRADES][CLASSES])
{
 FILE *fp;
 char department;
 int grade, class_no;
 char name_buf[BUFSIZ], *name;

 if ((fp = fopen(FILENAME, "r")) == NULL)
  puts("cannot open file!"), exit(1);
 while (fscanf(fp, "%c,%d,%d,%s", &department, &grade, &class_no, name_buf) != EOF) {
  department -= 'A';
  if ((name = malloc(strlen(name_buf) + 1)) == NULL)
   puts("failed in malloc!"), exit(1);
  strcpy(name, name_buf);
  teachers[department][grade-1][class_no-1] = name;
 }
 fclose(fp);
}
/* dat.txt の書式 : 学科,学年,クラス,担任名
  例 : C 科1年2組担任がしぃ先生で、D 科2年3組担当がギコ先生の場合、
    C,1,2,しぃ
    D,2,3,ギコ
  というふうに記述する。*/
0810802NGNG
ちょっと難しかったですが、参考になりました。
本当にありがとうございました。
0811かなNGNG
どなたかマージソートで重複を削除する
プログラムを教えていただきませんでしょうか??
0812デフォルトの名無しさんNGNG
>>811
Rubyはクソです。ゴミ箱逝きです。

いじょ
この発言をコピペしていただければ幸いです。
0813デフォルトの名無しさんNGNG
>>811
マージソート自体は理解できてるの?
マージ(併合)するときに、
比較した2つの要素が同値なら一方を捨てる、
という風にしていけばいいんじゃないかな…?
0814813NGNG
自分でも作ってみたんだが、重複を削除した分、要素を前に詰めるという
部分で悩んで、結局、出来上がったのが以下の関数。
(ソート対象の説明がなかったんで、取り敢えず int 配列のソートにした)

機能:与えられたint の配列を、重複する値を削除しながら、昇順にソート。
引数:int src[]……ソートしたい配列の先頭要素へのポインタ。
   int size ……その配列の要素数。
   int dst[]……ソート後の要素の格納場所の先頭を示すポインタ
         (再帰呼出する際に、削除分のずれを修正するために
          必要なパラメータ。最初の呼び出しでは、src[] と
          同じ値を入れておけばよい。)
返値:重複削除後の要素数。

                      長くなるんでコードは次に。
0815813NGNG
#include <string.h>
#define TEMPSIZE 1000
static int Temp[TEMPSIZE];
int distinct_msort(int src[], int size, int dst[])
{
 int half, border, former, latter, i;

 if (size < 2)
  return size;

 half = size / 2;
 border = distinct_msort(src, half, src);
 size = border + distinct_msort(src + half, size - half, src + border);

 memcpy(Temp, src, sizeof(int) * border);
 former = i = 0;
 latter = border;
 while (former < border && latter < size)
  if (Temp[former] < src[latter])
   dst[i++] = Temp[former++];
  else if (Temp[former] > src[latter])
   dst[i++] = src[latter++];
  else {
   dst[i++] = Temp[former++];
   latter++;
  }
 while (former < border)
  dst[i++] = Temp[former++];
 while (latter < size)
  dst[i++] = src[latter++];

 return i;
}

引数の dst[] がどうも不恰好なんで、
もっといいやり方知ってる人の意見キボーン。
0816デフォルトの名無しさんNGNG
今月のゲームラボにプレステ2の画像の吸い出し方が載ってたんでやってみようと思ったのですがさっぱり分かんないです。
>>808や>>815の事をC言語って言うんですか?
これを何に打てば良いんですか?
ワードパッドでしょうか?
初心者ですいませんが教えて下さい。
0817デフォルトの名無しさんNGNG
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998403891
こっちに逝け。答えてくれるかどうかは知らんけど。
0818デフォルトの名無しさんNGNG
>>816
まったくの初心者なんだね…。
「ゲームラボ」だったら、Webページに質問専用の掲示板があるから、
そこで質問してみれば?
http://www.sansaibooks.co.jp/glabo
0819デフォルトの名無しさんNGNG
ギャンブルの「KENO」 で どのBETが一番当たりやすいですか?
0820デフォルトの名無しさんNGNG
>>819
http://www.lvtaizen.com/casino/keno/html/keno04.htm
http://www.lvtaizen.com/casino/keno/html/keno05.htm

これで不足なら、もうちょっとどういう問題か詳しく書いてくれ。
0821デフォルトの名無しさんNGNG
C言語でガウスの白色雑音を出力するの教えてください。
お願いします。
0822デフォルトの名無しさんNGNG
>>821
randomizeとrandを調べろ
0823819NGNG
>>820
どうもありがとうございます。勉強になりました。
後は、どの数字(1−80)が出やすいか分かりますか?
8個掛けの場合でお願いします。
0824デフォルトの名無しさんNGNG
>>823
あのページ見ても理解できないならやめとけ。
そもそも出る数字に偏りがあるならあのページの解説は成り立たない。
0825821NGNG
>>822
本当にありがとうございます。バッチリわかりました。
これって知っていて当たり前の事なんですか?
0826デフォルトの名無しさんNGNG
>>825
ホワイトノイズは知っていても「乱数」という言葉は知らないのか?
その言葉さえ知っていれば調べるのは容易だと思うが。
0827デフォルトの名無しさんNGNG
ガウス分布にするなら rand だけのキーワードでは不足する人も多いというのに
821 はそれで足りるんだから イイ!
0828デフォルトの名無しさんNGNG
C++の問題です、なにぶん初心者でして
参考になる本などあれば教えて頂きたいです・・・。

1.二つの数をインプットしそれをx,yの読み込んで
和差積商を計算するプログラム

2.1つの数をインプットし読み込んで
その数の二乗、三乗を計算するプログラム
0829デフォルトの名無しさんNGNG
>>828
http://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-NIPS=997460009X
0830デフォルトの名無しさんNGNG
>>828
コンパイラは何を使いますか?といってもわからないか・・・
大別してUnix上でよつ使うやつ、Windows上でよく使うやつ、
があるけど、どっちかな?
0831デフォルトの名無しさんNGNG
32
0832掛け算(C言語)NGNG
#include <stdio.h>
main()
{
int i,j;
for ( i=1 ; i<=9 ; i++ )
{
for (j=1 ; j<=9 ; j++ )
{
printf("%3d",i*j);
}
printf("\n");
}
}
0833828NGNG
>>829 明日書店で探してみます、どうもです
>>830
OSはwindows2000なのですが...
0834デフォルトの名無しさんNGNG
>>833
OSはWindows2000なのですが...
cygwinを使ってます。エヘ
0835デフォルトの名無しさんNGNG
>>828 隣の学生に聞いたほうが早いのでわ?
0836学生サンNGNG
#include
void main(void){
int you,i;

srandom(time());

printf("===じゃんけんゲーム==="\n");
printf("1:グー 2:チョキ 3:パー\n");

i=random() % 3 +1;
printf("ジャンケンポン:");
scanf("%d",&you);

printf("あなた:%d,わたし%d\n",you,i);

if((you==1&&i==2)||
(you==2&&i=3)||
(you==3&&i=1))
{
printf("あなたの勝ちです。\n");
}
else if(you==i)
{
printf("あいこです。\n");
}
else{
printf("あなたの負けです。\n");
}
}
このなかにwhile文を入れたいんですがどこにどんなふうに入れればいいのか
まったくわかりません!!だれか教えて下せ〜!!
0837デフォルトの名無しさんNGNG
>>836
あのどうゆうふうにしたいの?
・3回戦
・3回負けたら終了
・1,2,3以外を入力したら終了
・その他
目的によってwhileはつかいかたが違うよね!
0838デフォルトの名無しさんNGNG
#include <stdio.h>

main()
{
union longdata{
unsigned long ldata;
unsigned long uchar[4];
}LongData;

LongData.ldata = ('D' << 24) | ('C' << 16) | ('B' << 8) | ('A');

printf("0x%x\n", LongData.ldata);
printf("%c ", LongData.uchar[0]);
printf("%c ", LongData.uchar[1]); ←warning C4700: 値が割り当てられていないローカルな変数 'LongData' に対して参照が行われました。
printf("%c ", LongData.uchar[2]);
printf("%c ", LongData.uchar[3]);
printf("\n");
}

実行結果
0x44434241
A フ フ フ
Press any key to continue
0839838NGNG
 共有体の部分でつまずいた。
LongData.uchar[1] には B が入ってるはずなのですが…。
0840デフォルトの名無しさんNGNG
>>839
>LongData.uchar[1] には B が入ってるはずなのですが…。

uchar なんて名前をつけるから、「`unsigned long' uchar[4]」と
宣言しているのを見落とすんだろうね。
0841デフォルトの名無しさんNGNG
>>838
unsigned long uchar[4];
は
unsigned long ldata;
と同じメモリ空間を共有していないよ。
unsigned long uchar[4];
は4バイトのデータが格納されているメモリの先頭アドレスへのポインタです。
わかる?
0842841NGNG
すみません私間違ったこといっていたー。
0843841NGNG
>>840
の人が言っているのが正しいです。
型が間違っているということです。
私が>>841で言ったことは無かったことに。(鬱
0844838NGNG
サンクス
見落としてました。
0845学生サンNGNG
>837
ごめんなさい。初心者なもんで。
3回負けて終了のほうがいいですね。
0846デフォルトの名無しさんNGNG
>>学生サン
#include
void main(void){
int you,i;
int lost=0;/*追加*/

srandom(time());
printf("===じゃんけんゲーム==="\n");
while(lost<3)/*追加*/
{
printf("1:グー 2:チョキ 3:パー\n");

i=random() % 3 +1;
printf("ジャンケンポン:");
scanf("%d",&you);

printf("あなた:%d,わたし%d\n",you,i);

if((you==1&&i==2)||
(you==2&&i==3)|| /*比較では==を使おう*/
(you==3&&i==1)) /*比較では==を使おう*/
{
printf("あなたの勝ちです。\n");
}
else if(you==i)
{
printf("あいこです。\n");
}
else{
printf("あなたの負けです。\n");
lost++;/*追加*/
}
}
}/*追加*/

こんな感じでどう?
0847デフォルトの名無しさんNGNG
あっ忘れてた。
#include <stdio.h>
って感じにしてね。
0848デフォルトの名無しさん NGNG
教えてください。
あるカードの束(card)をある枚数(cut)ぶん上から取ります。
取ったカードの束をA,残ったカードの数をBとします。
A,Bのそれぞれ下から一枚カードを取り、重ねていきます。
重ねてできた山をCとします。card = 1001,cut = 100の時
Cがcardと同じならびになるのは何回シャッフルした時でしょう?
シャッフルする時は必ずAの束から取る事にします。
答えを1秒以内に出せるプログラムを組みましょう。
という問題です。自分でやった時は5分もかかって答えが出ました。
なんせ初心者なもので・・・
皆さん教えてください、お願いします。
0849デフォルトの名無しさんNGNG
「同じならび」とはどういうことですか?
「シャッフル」とはどういう操作ですか?
定義がよくわかりません。すみません。
0850デフォルトの名無しさんNGNG
>>849
えーと、同じならびとは、上から0〜1000まで順番に
並んでるカードがcardで、トランプのカットを行った
時のように上からA枚分とって、そのまま横に
置いたのがA,残ったのがBです。んで、Aの一番下、Bの
一番下、またAの一番下・・・というふうに置いていき、
AかBの余ったほうをそのままCの一番上に重ねるって
ゆーのがシャッフルです。言葉足らずですみません。
0851学生サンNGNG
>847
実行したんですけどなんかsrandomっていうのが駄目らしくてエラ−が出たんですけど
どうしたらいいんでしょうか?
0852デフォルトの名無しさんNGNG
ん?わかりません。すみません。

問題の原文もしくは、あなたのプログラムを見せてください。
0853学生サンNGNG
#include <stdio.h>
void main(void){
int you,i;
int lost=0;/*追加*/

srandom(time());
printf("===じゃんけんゲーム===\n");
while(lost<3)/*追加*/
{
printf("1:グー 2:チョキ 3:パー\n");

i=random() % 3 +1;
printf("ジャンケンポン:");
scanf("%d",&you);

printf("あなた:%d,わたし%d\n",you,i);

if((you==1&&i==2)||
(you==2&&i==3)|| /*比較では==を使おう*/
(you==3&&i==1)) /*比較では==を使おう*/
{
printf("あなたの勝ちです。\n");
}
else if(you==i)
{
printf("あいこです。\n");
}
else{
printf("あなたの負けです。\n");
lost++;/*追加*/
}
}
}/*追加*/
0854デフォルトの名無しさんNGNG
>>851
srandomという関数がダメな理由は
・必要なライブラリがインクルードされていない。
・処理系によってはsrandだったりします(OS依存の処理系依存)

のうちのどちらかと思います。
OSは何ですか?
0855デフォルトの名無しさんNGNG
>>850
ん?わかりません。すみません。

問題の原文もしくは、あなたのプログラムを見せてください。
0856デフォルトの名無しさんNGNG
>>854
3個所ほど突込んでいい?
0857デフォルトの名無しさんNGNG
>>856
なに?3人も相手しなきゃなんないの?
日本語間違っている?
0858デフォルトの名無しさんNGNG
>>857
typoです。

>>854
srandはANSIで定義されてます。
OS依存なら処理系依存になるのでOS依存の処理系依存なんてありません
そもそも必要なライブラリもなにもありません。
0859デフォルトの名無しさんNGNG
>>858
そうですかsrandは無条件で使えるということですね。
srandomについては知っていますか?
またtimeについては知っていますか?
0860854NGNG
とりあえずsrandomはsrandと置き換えてください。
randomもrandと置き換えてください。
timeについては・・・・((OS依存の処理系)依存では?)
0861sageNGNG
突っ込みどころが多すぎる。
ボケのスピードも速すぎる。
0862854NGNG
>>861
なんか知らんけど初心者に教えるよりも、
私のボロを叩くほうが好きみたいね。
処理系をC言語処理系と言い換えさせてもらいます。
0863854NGNG
>>851
Windows系OS上のC++Builderなどの場合
#include <stdlib.h>
#include <time.h>
をインクルードし
srandom(time()) をrandomize()と置き換えてください。
random()をrand()に置き換えてください。

UNIX系OS上のgccなど場合
srandom(time()) をsrand(time())と置き換えてください。
random()をrand()に置き換えてください。
ただしUNIX環境では動作テストはしていないので動かないかも(-_-;)
0864デフォルトの名無しさんNGNG
>>849= >>850 は、もう、解決したのだろうか?
自分もやってみたんだけど、単純にシュミレートするやり方では、
1秒で答えを出すのは、無理だった。(1分位で、12025860回という
答が出たんだけど、この答で合ってる?)
まず、数学的な巧い解法を見つけて、それをコーディングするという
風にしないといけないんだろうけど…一日考えたが、さっぱりわからん。(´Д`;)
もし解決したんだったら、考え方のヒントだけでも教えて…m(__)m
0865デフォルトの名無しさんNGNG
>>864
本人ではないが、考え方を。
この方法で試しに組んでみたけど、同じ答えが1秒以内にでたよ。
欲しければ、ソースみせます。

例えば、「0」というカードに着目してみる。
そうすると、0というカードは最初一番下にあって、次に下から2番目にあって・・・
と言うふうに一回シャッフルするごとに、移動していく。でn回シャッフルした
ときに初めて元の場所に戻ってきたとする。このときに、0というカードはnの周期
で動いていることになる。これからの動き方はずっと一緒。
だから、この段階で、k*n回シャッフルした後だけを見ればいいことがわかった。

 で、最初の状態でl番の位置にあったカードが、n回シャッフルした状態にm番の
位置にあったとする。そうすると、当然n回シャッフルした状態でl番での位置に
あったカードは、2n回シャッフルしたときには、m番の位置にありますよね。
ですから、n回シャッフルしたときにカードの位置がどう変化するかというマップ
を作っておけば、n回シャッフルした結果がすぐわかります。
これを利用して、n回, 2n回・・・と調べていきます。
このとき0以外の別のカード、例えば1に注目して、これが元の位置に戻ってくる
かをチェックし続けます。これで、例えば n回のシャッフルをt回したときに元に
戻ってくるなら、0と1というカードの組み合わせの周期はk * n回だということ
がわかります。ですので、同様にk * n回のシャッフルのマップを作って・・・
と以下同様です。
0866864NGNG
>>865
おぉ、ありがとうございます!
周期性を発見して、無駄を省けばいい訳ですね…。理解できた…と、思います。
教えていただいたやり方で、これから組んでみます!
0867849NGNG
>>864-865
ありがとうございました。自分でもいろいろ考えたんですけど、
さっぱりわけわかりませんでした。865さんのやりかたで再度
考えてみます。
0868デフォルトの名無しさんNGNG
麻衣ちゃんの優しさで802を包んで下さい。
0869802NGNG
僕のちんこしゃぶっtれ
0870やばいよ・・NGNG
二次元配列の宿題が出されました。問題は十行十列の
二次元配列aをメモリ上の連続した領域へ行方向に格納するとき、
a(5,6)が格納される場所の番地はどれか。ここで番地は
十進数表示とする。ちなみにa(1,1)の時の番地は100、101です。
答えは200以下になるらしいのですが・・。
0871デフォルトの名無しさんNGNG
>>870

>答えは200以下になるらしいのですが・・。

は?なんで?番地、ってのの意味がわからんのだが。
バイト単位なの?
配列ってのが何の型なのか良くわからんのだが。
アドレス的にいけば、4バイトとして4*2^8程度ずつ
増えていく気がするんだが。

>ちなみにa(1,1)の時の番地は100、101です。

なんで番地が二つあるの?
よくわからんが、a(2,1)が101、って意味なのか?
(5-1)*10+(6-1)+100とかか?
これなら200以下だが。
0872 NGNG
>>870
どんどん問題の条件がかわってるじゃねーか!
本当に宿題なのか?あー?
逝ってよし!

>元質問スレ なかに、プログラム質問すれのリンク先も見ておいてほしい
http://piza2.2ch.net/test/read.cgi/tech/1003286513/
08731NGNG
http://fruit.gaiax.com/home/akira3094/main
0874デフォルトの名無しさんNGNG
Hotmailサーバーって今落ちてない?
0875デフォルトの名無しさんNGNG
vcで、ウィンドウがないプログラムについてのってるHPとかしりませんか?
ウィンドウがないとはラジオみたいなかたちのウィンドウをつくりたいのです。
0876デフォルトの名無しさんNGNG
プログラマとしての表現力0だな(´д`;)
0877デフォルトの名無しさんNGNG
>875
ないのかあるのかどっちだ。まず国語の宿題をやれ。
0878デフォルトの名無しさんNGNG
>>875

糞スレ立てられるよかここで答える方がよさげなので、
がんばってそちらの意図を推測すると、

http://www.kumei.ne.jp/c_lang/sdk2/sdk_125.htm

こういうのでどうだ?
これってVC++って訳じゃないが、まあ十分だろう。

ただこれ、宿題なのか?スレ立てるまでも無い質問スレの方
が適切、な気がするが。
0879KNGWUNGNG
遺伝的アルゴリズムを用いた複数経路探索のプログラムをC言語で書きたいのですが書けません。教えてください。書いてください。
0880デフォルトの名無しさんNGNG
総当たりで書いてゴマかせ
0881デフォルトの名無しさんNGNG
>>880
ワラタ
0882デフォルトの名無しさんNGNG
ttp://kyu.pobox.ne.jp/softcomputing/ga/ga1.html

これだけ読めば組めそうじゃない?
やった事無いけど。
0883デフォルトの名無しさんNGNG
さすがにこれだけでは無理でわ。
素直に書店に行くのが吉。
0884デフォルトの名無しさんNGNG
>>879  問題をもうちょっと具体的にしたほうがいいよ
0885884NGNG
ああ、あっちから移動して来たんだね
 まず経路をどう表現したいのか? そして経路データはどう入力するのか?
 あたりからやってみたら?
0886KNGWUNGNG
ダイクストラ法では複数の解候補を一度に表示するのは無理なので、遺伝的アルゴリズムをつかって、一度に複数の解候補を検索しようというプログラムがほしいんですけど・・・・ 
0887デフォルトの名無しさん NGNG
J/n  nが0のときはプログラムの実行を停止
    アキュムレータの値が0以上のときはn番地に分岐
    アキュムレータの値が0未満のときは何もしない
A/n アキュムレータの値とn番地の内容とを加えて
    その結果をアキュムレータに格納
B/n アキュムレータの値からn番地の内容を引いて
    その結果をアキュムレータに格納
L/n n番地の内容をアキュムレータに格納
T/n アキュムレータの内容をn番地に格納
R/n 入力装置から入力した内容をn番地に格納
W/n n番地の内容を出力装置に出力
S/n アキュムレータの内容をnビット左にシフトする
    最下位の桁には0を埋める

以上の命令で、2つの値を入力し、それらのビットごとの論理積をとった
値を出力するプログラムを書け、ってことなんですが。
御教授よろしくおねがいします。
0888デフォルトの名無しさんNGNG
値って整数型(4バイト)?
0889デフォルトの名無しさんNGNG
8ビットです。すみません
0890デフォルトの名無しさんNGNG
最初は
R/1
R/2
だと思うです。
0891デフォルトの名無しさんNGNG
例)

0番地:R/8
1番地:L/8
2  :J/8
3  :B/8
4  :B/8
5  :T/8
6  :T/8
7  :W/8
8  :J/0

このプログラムを入力して実行すると、0番地値の入力待ちになります。
また、2進数8ビットで数値は表現されます。
このプログラムだと、入力された値の絶対値を出力するので、
11111111(−1のことです)を入力すると00000001が出力されます。

説明不足ですみませんでした。
0892デフォルトの名無しさんNGNG
訂正)
0番地:R/8
1番地:L/8
2  :J/8
3  :B/8
4  :B/8
5  :T/8
6  :W/8
7  :J/0

でした。
入力された値は8番地に記憶されます。
0893デフォルトの名無しさんNGNG
何度も書きこんですみません。

プログラムをそのまま教えてもらえなくても、論理積を上の命令の
動作で計算するにはどうすればいいのかのヒントだけでもいただけないでしょうか
0894デフォルトの名無しさんNGNG
>>892
これって0以上の値を入れたら、2番地の分岐で8番地に飛んじゃうと
思うんだけど、いいの?
0895デフォルトの名無しさんNGNG
また訂正)
0番地:R/8
1番地:L/8
2  :J/6
3  :B/8
4  :B/8
5  :T/8
6  :W/8
7  :J/0


でした。ほんとに何度もごめんなさい。
0896デフォルトの名無しさんNGNG
J/6ってW/8に飛んじゃうんじゃないの?
よくわからん。
0897デフォルトの名無しさんNGNG
>>896
それはいいでしょ。
0以上なら8番地に格納されてる入力値を
そのまま6番地で出力。
絶対値出力プログラムなんだから、動作的にあってる。
0898デフォルトの名無しさんNGNG
>>896
絶対値を出すプログラムだからいいんじゃないの?
正の値だったらそのまま出力するだけだよね。
0899デフォルトの名無しさんNGNG
はい、その通りです。
私の説明不足でした、>>896さんごめんなさい
0900デフォルトの名無しさんNGNG
6ビット左シフトして、足す事により、
最下位ビットの論理積がが0か1か判断出来るけど。

01  11  10  00
01  11  10  00
--  --  --  --
10  10  00  00
0901896NGNG
ああ、理解。右シフト無いの?
0902デフォルトの名無しさんNGNG
nビット目が1か0かは、8-nビットの左シフトで判定できるね。
条件分岐が0以上か負かだから、最上位までビットをシフトさせちまえば
判定はできる。
あとはこれをひたすら繰り返すのか?
なんか、めんどくさいな。
0903デフォルトの名無しさんNGNG
あっ! そうか、 最上位ビットが1なら負なんだ。
0904デフォルトの名無しさんNGNG
はい、左シフトのみです
0905デフォルトの名無しさんNGNG
>>903
これもまた説明不足でした。
負の数は2の歩数形式で表現します。
(必要ないかと思いますが、正の数を反転させて1を足すと
その数の負になります。00000010(2)なら11111101+00000001
=11111110(-2)です)
0906デフォルトの名無しさんNGNG
足し算と引き算だけで論理積は求められないのでしょうか?
0907デフォルトの名無しさんNGNG
902の方法で原理的にはもう出来てるが、、、、
すげーめんどくないか?それ。
二つの数字全部についてやってくの?
しかもほとんどnoop。
効率的な定石、みたいなのないの?こういうのって。
0908デフォルトの名無しさんNGNG
麻衣を出せ
0909デフォルトの名無しさんNGNG
>>906
単純にはいかなそう。
902の方法で、1ビットづつ判定はできるから、
それで2つの入力値の同じ桁が両方1ならその桁は1
ということを8ビット分ループさせれば一応答えは出そう。
めんどくさい。
0910デフォルトの名無しさんNGNG
>>900 >>902でのレスで少し兆しが見えた気がします。
nビット目が1か0かを調べるには、8−nビット左シフトして、J/nを使えば
1なら負と判別するので、わかりそうですね
0911デフォルトの名無しさんNGNG
>>887
値1
値2
ループカウンタ:00000001(2進)
結果:00000000(2進)
を用意

1.値1、値2が両方負なら結果に+1
2.値1、値2ループカウンタ、結果、2倍(左シフト、n+n)する

1と2をループカウンタが0になるまで繰り返す。

ループカウンタはシフトでカウントする必要はないけどね。
0912デフォルトの名無しさんNGNG
俺馬鹿だからわかんないんだけど、この計算機って定数扱えないよね。
判定したあとの結果の保管ってどうやるの? 右シフトもないし...
0913912NGNG
(ごめん、途中でなげちゃった。)
記憶域の初期値は実行前に設定できる前提でいいのかな。
0914デフォルトの名無しさんNGNG
>>911
>2.値1、値2ループカウンタ、結果、2倍(左シフト、n+n)する
2.値1、値2、ループカウンタ、結果を、2倍(左シフト、n+n)する
0915デフォルトの名無しさんNGNG
とりあえずリテラルが使えないので、
B/8
B/8
とか駆使しないと駄目なんだね。面倒だ。
00000001
が必要だから、どうにかして作らんといけないんだろうな。
Jたくさん使って、入力から
10000000とか作って、
引き算駆使して
00000001作るのか?なんか終わってるな。
0916デフォルトの名無しさんNGNG
>>912
結果の保管はT/n命令でn番地にできるよ。
保管に右シフトは関係ないんじゃない?
0917912NGNG
いや、そういう意味じゃなくて、915のいうように1を作らなきゃいけないでしょ。
で、右シフトがあれば、判定終了時には最上位ビットがなにかはわかっているから
右シフトと引き算あたり使って1なり0を作れそうだよね。
0918デフォルトの名無しさんNGNG
左に7シフト、
もしマイナスなら、0から引いて0111111が作れる。
そうじゃなければ6シフト、以下同様で、結局01111111
は作れる(か全部0)
これが出来れば11111110が作れて00000001が作れるかな?
でもすごく面倒。
もっといい方法があるのかなぁ。
0919912NGNG
なんか舌足らずだなおれ。えーっと保管の前に保管する対象である0なり1を作る必要があるよね。ってことで。sage
0920916NGNG
>>917
なるほど理解した。
しかしそこまで求められる問題なのだろうか?

現実にこんな処理系があったら人間に入力させる前に
初期化させるよなぁ。
0921デフォルトの名無しさんNGNG
>>919

ビットマスクとして00000001さえ作れれば、
それを条件判定のたびにビットシフトしていって、
論理積条件が成立した桁のときだけ、ビットマスクの値を結果に足す
ってやればいいでしょ。
0922921NGNG
ごめん、このレスいらないかも(汗
0923デフォルトの名無しさんNGNG
レス、ありがとうございます。
ここをみながら私も考え中です。

また、説明不足です。
定数は扱えます。
左の番号はメモリの番地なので、00001111という定数が使いたいときは
適当な番地、たとえば10番地に00001111と入れておきます。
メモリに直接命令を組み込んでおいて、上から順にプログラムを読んでいきます。

たとえば、

0:w/5
1:L/5
2:A/5
3:T/5
4:W/5
5:00000001

とプログラムすれば
0番地を読んだときに5番地の内容である00000001を出力して
4番地まできたときには、それまでに5番地の内容が書きかえられているので
00000010が出力されます
0924デフォルトの名無しさんNGNG
>>923
なら、問題はすべて解決したぞ。
あとはがんばって、プログラムしてくれ。
0925915=918NGNG
先にいってよ!
真面目に考えチャターヨ
0926デフォルトの名無しさんNGNG
ありがとうございます。いただいたヒントでがんばってみます!
0927デフォルトの名無しさんNGNG
>>925
ほんっとに、ごめんなさい。
反省しています。これからは、ちゃんと整理してから書きこむようにします。
すみませんでした。
0928925NGNG
そんな恐縮されても困る(藁
0929麻衣NGNG
   , ―'
 γ∞γ~  \
 人w/ 从从) )  / ̄ ̄
  ヽ | | l  l |〃 <  一件落着!
  `wハ~ ーノ)   \__
   / \`「
0930麻衣NGNG
   , ―'
 γ∞γ~  \
 人w/ 从从) )  / ̄ ̄
  ヽ | | l  l |〃 <  補足:ループカウンタの終了条件も負かどうかだよ。
  `wハ~ ーノ)   \__
   / \`「
0931デフォルトの名無しさんNGNG
0:R/X 15:B/o1 Z:00000000
1:R/Y 16:T/ss X:
2:L/X 17:J/2 Y:
3:S/ss 18:J/0
4:J/19 19:L/aa
5:L/Y 20:S/o1
6:S/ss 21:T/aa
7:J/19 22:L/ss
8:L/Z 23:B/o1
9:A/aa 24:T/ss
10:T/Z 25:J/3
11:L/aa 26:J/0
12:S/o1 o1:00000001
13:T/aa aa:00000001
14:L/ss ss:00000111(7)
0932デフォルトの名無しさんNGNG
0:R/X    15:B/o1 Z:00000000
1:R/Y    16:T/ss X:
2:L/X    17:J/2 Y:
3:S/ss 18:J/0
4:J/19 19:L/aa
5:L/Y 20:S/o1
6:S/ss 21:T/aa
7:J/19 22:L/ss
8:L/Z 23:B/o1
9:A/aa 24:T/ss
10:T/Z 25:J/3
11:L/aa 26:J/0
12:S/o1 o1:00000001
13:T/aa aa:00000001
14:L/ss ss:00000111(7)
0933デフォルトの名無しさんNGNG
なんかみにくくてすみません。

出力命令入れるの忘れましたが、Zに論理積が入るようにしました。
(定数、変数は番地を書くとわかりにくいと思い、記号で書きました)
一番左のビットが1だと負と判断されるのを利用してみました。
(負の場合は分岐せずに次に進みます。)

o1は1が入っていて、変化することはありません。
aaは論理積が1の場合にZに書きこむために使います。
ssにははじめ7が入っていて、左シフトさせるために使います。
aa,ssは一回処理が行われるたびに変化します。aaは一つ左にシフト
ssは-1されます。

8〜18番地まではX,Yのあるビットが共に1のときのみ通過します。
19〜26番地はどちらか一方でも0の場合に通過します。
0934デフォルトの名無しさんNGNG
どうでしょうか。
いただいたアドバイスをもとに考えてみました。
おかしな所があった是非だめだしをよろしくお願いします。
0935デフォルトの名無しさんNGNG
これはRISCか?(藁
0936デフォルトの名無しさんNGNG
ssって変数ですよね? なら、

3:S/ss

の様な使い方はできないと思うのですが。
S/n アキュムレータの内容をnビット左にシフトする
    最下位の桁には0を埋める
0937デフォルトの名無しさんNGNG
000:R/900
001:R/901

002:L/900    // al := [900];
003:J/100    // if al >= 0 then goto 100;
004:L/901    // al := [901];
005:J/100    // if al >= 0 then goto 100;

006:      // al := [904];
007:      // al := [801 + al]; // ←これが出来ない
008:      // al := al + [902];
009:      // [902] := al;

100:L/900    // al := [900];
101:S/1     // al := al shl 1;
102:T/900    // [900] := al;
103:L/901    // al := [901];
104:S/1     // al := al shl 1;
105:T/901    // [901] := al;

110:L/904    // al := [904];   // カウンタ
111:B/801    // al := al - 1;
112 T/904    // [904] := al;
113:J/002    // if al >= 0 then 002;


700:W/902
701:J/0     // 終了

800:00000000
801:00000001
802:00000010
803:00000100
804:00001000
805:00010000
806:00100000
807:01000000
808:10000000

900:値A
901:値B
902:0d
903:801d
904:7d
0938デフォルトの名無しさんNGNG
>>879 が解決したら新スレたててね。 >麻衣


まず897は解決したい最短経路をはっきりさせなさい

巡回セールスマンも最短経路と呼ぶけど、ダイクストラ法の使える最短経路とは
難しさのレベルが違うんだから
0939デフォルトの名無しさんNGNG
こんなのどう?

00:R/X X番地に値1を代入
01:R/Y X番地に値2を代入
02:L/X 値1をアキュムレータに格納
03:J/09 論理積が0になるなら09番地に分岐
04:L/Y 値2をアキュムレータに格納
05:J/09 論理積が0になるなら09番地に分岐
06:L/Z 結果をアキュムレータに格納
07:A/aa 結果+1
08:T/Z 結果を更新
09:L/ss ループカウンタをアキュムレータに格納
0A:A/ss ループカウンタ+ループカウンタ
0B:J/18 ループ終了(ループカウント=0)なら18番地に分岐
0C:T/ss ループカウンタを更新
0D:L/X 値1をアキュムレータに格納
0E:A/X 値1+値1
0F:T/X 値1を更新
10:L/Y 値2をアキュムレータに格納
11:A/Y 値2+値2
12:T/Y 値2を更新
13:L/Z 結果をアキュムレータに格納
14:A/Z 結果+結果
15:T/Z 結果を更新
16:L/aa 1をアキュムレータに格納
17:J/02 02番地に分岐
18:W/Z 結果を出力装置に出力
19:J/00 実行停止

X番地 値1
Y番地 値2
Z番地 結果(初期値:00000000)
aa番地 定数1(初期値:00000001)
ss番地 ループカウンタ(初期値:11111111)
0940質問した本人NGNG
>>936
そうだー!
できませんよね。ありがとうございます
0941デフォルトの名無しさんNGNG
以下 解答してください

問2
a = 5+(6+(7+b));

をコンパイルした結果はどうなるかを、自分の頭で考えて示せ。

a = 0+(1+(2+(3+(4+(5+(6+(7+b)))))))-(0+(1+(2+(3+(4+(5+(6+(7+b))))))));

は、どうなるだろうか? 自分が、どのように考えて、その結果を出したのか、そして、それをアルゴリズムにするにはどうすれば良いのかを考えよう。

ヒント
まず式を木の形に書いて、構造を調べる
push, pop を使ってスタックを使う方法もある

実際のコンパイラの出力と比較してみよう。


--------------------------------------------------------------------------------

問2
上のプログラムをIntel CPU上で、gcc -O -S test.c を使ってコンパイルすると最適化がかかる。最適化した場合としない場合で、どのような違いが出るか? (ヒント diff を使うと簡単...)
問1で、これらの結果を実際のアセンブラで実行しテストするには、どうすれば良いか考えて実行せよ。

これらの命令が実際に生成されるCのソースコードを考えて、それをコンパイラに通し、実際に命令が生成されることを確認せよ。(ただし、データのアドレスは、変わっても良いとする)
0942デフォルトの名無しさんNGNG
以下 解答してください

問

HSPで

2 + 7 * 2

をコンパイルすると結果は18となる。

では、HSPがどのように考えて、その結果を出したのか、
そして、それをアルゴリズムにするにはどうすれば良いのかを
自分の頭で考えて示せ。
0943質問した本人NGNG
 0:R/X
 1:R/Y

 2:L/X
 3:J/9(最上位ビットが0の場合JUMP)
 4:L/Y
 5:J/9

 6:L/Z(6〜8で共に1の場合そのビットに1を書きこむ)
 7:A/o2
 8:T/Z

(9〜17の操作ではo2を右に1ビットシフトさせるために、左に7ビットシフトさせています)
(左に消えたら、右に出てくるようになっています)
 9:L/o2
10:A/o2
11:J/13
12:A/o1
13:T/o2
14:L/o3
15:B/o1
16:T/o3
17:J/9

(18〜23ではX、Yの値を左に1ビットシフトさせます)
18:L/X
19:S/1
20:T/X
21:L/Y
22:S/1
23:T/Y

(24〜25で右シフトのときに使ったループカウンタ(o3)を元に戻します)
24:L/o4
25:T/o3

(26〜28で全体のループカウンタである(o5)を更新します)
26:L/o5
27:B/o1
28:T/o5

29:J/o5(o5が0以上ならJUMP、負なら出力して終了)
30:W/Z
31J/0

 X:
 Y:
 Z:0000 0000
o1:0000 0001
o2:1000 0000
o3:0000 0110
o4:0000 0110
o5:0000 0111
0944質問した本人NGNG
どうでしょうか?
0945デフォルトの名無しさんNGNG
Delphiで書くとこんなかんじ。

 function GetAnd(A, B: ShortInt): ShortInt;
 var
  I, AddValue, ReversedResult: ShortInt;
 label
  AndLoop, ShiftA, ReverseLoop, ShiftB;
 begin
  ReversedResult := 0;
  AddValue := 1;
  I := 7;
 AndLoop:
  if A >= 0 then goto ShiftA;
  if B >= 0 then goto ShiftA;
  ReversedResult := ReversedResult + AddValue;
 ShiftA:
  A := A shl 1;
  B := B shl 1;
  AddValue := AddValue shl 1;
  I := I - 1;
  if I >= 0 then goto AndLoop;

  // ReversedResult には上位・下位ビットが逆の AND 値が入っているので、
  // ビットを入れ替える。
  Result := 0;
  AddValue := 1;
  I := 7;
 ReverseLoop:
  if ReversedResult >= 0 then goto ShiftB;
  Result := Result + AddValue;
 ShiftB:
  AddValue := AddValue shl 1;
  ReversedResult := ReversedResult shl 1;
  I := I - 1;
  if I >= 0 then goto ReverseLoop;
 end;
0946デフォルトの名無しさんNGNG
>>943
29:J/o5 は、不可能と思われ。
あと、結果を最上位ビットから順に入れようと
思わないで、>>939のようにするほうが楽。
>>939は、くせがあるけど、間違ってはいないと
思うので、一度じっくり解析してみたら?
0947デフォルトの名無しさんNGNG
>>943
o2の初期値が 10000000なので、al は 0 のままで、12行目は実行されないほでは?

 9:L/o2 al := o2 + o2; // al := 0
10:A/o2
11:J/13 if al >= 0 then goto 13;
12:A/o1 al := al + o1;
13:T/o2 o2 := al; // o2 := 0

14:L/o3
15:B/o1
16:T/o3 o3 := o3 - 1;
17:J/9 if o3 >= 0 then goto 9;
0948デフォルトの名無しさんNGNG
リアルタイムのストリーミング放送って、
送られるデータの全データ長はどの程度になってるんでしょう

ある程度の時間で区切った大きなデータを何度も送ってやるのか、
それとも小さなデータを絶え間無く送りつづけてやるのか
0949デフォルトの名無しさんNGNG
>946
29:J/o5
は
29:J/2
の間違いと思われ。
0950デフォルトの名無しさんNGNG
2 + 7 * 2 が 18 になっていいのだろうか?
0951デフォルトの名無しさんNGNG
>>950
演算子の優先順位がないんだろきっと。(2+7)*2
0952948NGNG
誤爆だったことに今ごろ気付きました
すみません・・・・・・
0953デフォルトの名無しさんNGNG
入社前研修が自主学習で勉強してその成果として何か作って来いでした。
何かアイデアください。
0954デフォルトの名無しさんNGNG
>953
何の会社かによる。
0955デフォルトの名無しさんNGNG
業務系PG採用です。
と言っても業務の知識なんかないから、
適当なアプリ作るくらいしか思いつきません。
0956デフォルトの名無しさんNGNG
>955
銀行とかそんなの?
0957デフォルトの名無しさんNGNG
>>953
その会社を舞台にした人生ゲーム。
その会社の経営シミュレーションゲーム。
その会社の社長の顔が流れるスクリーンセーバー。
その会社で起こった殺人事件に巻き込まれた新入社員が犯人を見つけるアドベンチャーゲーム。
0958デフォルトの名無しさんNGNG
>>957
本格推理アドベンチャー「新入社員殺人事件」プレイ希望
0959あNGNG
デフォルトの名無しさん :01/10/22 19:30
以下 解答してください

問2
a = 5+(6+(7+b));

をコンパイルした結果はどうなるかを、自分の頭で考えて示せ。

a = 0+(1+(2+(3+(4+(5+(6+(7+b)))))))-(0+(1+(2+(3+(4+(5+(6+(7+b))))))));

は、どうなるだろうか? 自分が、どのように考えて、その結果を出したのか、そして、それをアルゴリズムにするにはどうすれば良いのかを考えよう。

ヒント
まず式を木の形に書いて、構造を調べる
push, pop を使ってスタックを使う方法もある

実際のコンパイラの出力と比較してみよう。


--------------------------------------------------------------------------------

問2
上のプログラムをIntel CPU上で、gcc -O -S test.c を使ってコンパイルすると最適化がかかる。最適化した場合としない場合で、どのような違いが出るか? (ヒント diff を使うと簡単...)
問1で、これらの結果を実際のアセンブラで実行しテストするには、どうすれば良いか考えて実行せよ。

これらの命令が実際に生成されるCのソースコードを考えて、それをコンパイラに通し、実際に命令が生成されることを確認せよ。(ただし、データのアドレスは、変わっても良いとする)
0960デフォルトの名無しさんNGNG
>>959 宿題ならなんでもって言ってもさあ、そいつはさあ

  ”自分の頭で考えて示せ” だしなあ・・・

正直、カッタルイ問題だしさあ、
 せめてどれかアセンブラ出力出して、何か自分のコメント言ってみろよ
0961懐かしいコピペを貼ってみるテストNGNG
掲示板をアプリケーションウィザードだと勘違いしてる偽学生諸君、君らは
何のために親のスネをかじって学校に行ってるのか? 将来就きたい職業
に向けて職能を身につけるためではないのか?
課題を丸投げして「動くようにしてください」なんてやってると君らの頭には
何も残らない。職能なんか身に付かない。考える必要がないから。
それでは君らのためにならない。いや、この際君らのことはどうでもいい。
何も知らずに高い学費を払っている親御さんが不憫だし、なによりも
そーやって単位を取得して「●●大学工学部情報工学科卒」なんて履歴書
もって 入ってこられると、俺達現場の人間が非常に困る。
頼むから向学心がないならさっさと単位をあきらめて別の道を選べ。
それでも課題をやって欲しかったら学校名と学籍番号を書いてくれ。
早急に人事に連絡しておくよ。「こいつが来ても追い返せ」とね。
0962デフォルトの名無しさんNGNG
>953
 この板用の過去ログ検索システム作ってみたら?
 SQL使うDBでやると即戦力になるんじゃない?
0963学生サンNGNG
#include
void main(void){
int you,i;

srandom(time());

printf("===じゃんけんゲーム==="\n");
printf("1:グー 2:チョキ 3:パー\n");

i=random() % 3 +1;
printf("ジャンケンポン:");
scanf("%d",&you);

printf("あなた:%d,わたし%d\n",you,i);

if((you==1&&i==2)||
(you==2&&i=3)||
(you==3&&i=1))
{
printf("あなたの勝ちです。\n");
}
else if(you==i)
{
printf("あいこです。\n");
}
else{
printf("あなたの負けです。\n");
}
}
このプログラムを以下のようにしてください。
1:勝敗をカウントし、先に3勝した方が勝ちとします。
2:ジャンケンの手は整数に置き換えて入力する。例えば
  グーは1、チョキは2、パーは3、それ以外は入力エラー
  とし、再度入力するものとします。

このような問題が出たんですけど、どうしたらいいんでしょうか?
誰か教えてください。
0964デフォルトの名無しさんNGNG
>>963
書いてあるとおりにすればいいと思います。
0965デフォルトの名無しさんNGNG
とりあえず2の第一条件は既に満たしてると思う。
0966デフォルトの名無しさんNGNG
そろそろ次スレか?

>1:勝敗をカウントし、先に3勝した方が勝ちとします。

勝敗カウントする変数用意(ここではa,bとする。実際はまともな名前で)して、
それで
while((a < 3 ) && ( b < 3)){
処理
}

という感じにする。

>それ以外は入力エラーとし、再度入力するものとします。

do{
scanf("%d",&you);
もしyouが判定外ならエラーメッセージ
}while(判定内じゃない限り);

って感じでどう?
0967学生サンNGNG
>966
それをどこの部分にいれればいいんですか?
0968デフォルトの名無しさんNGNG
>>967 ぎゃふん(倒
0969学生サンNGNG
すみません・・・。初心者なもんで。
0970デフォルトの名無しさんNGNG
>>969
初心者だから何?甘ったれんなよ。
>>966でわからないなら単位落として学校やめろ。
0971デフォルトの名無しさんNGNG
>969
自らが習ってきたことに答えはあるはず。
与えられた教材や資料から己の頭で考えることを覚えろ。
0972何番目かの麻衣NGNG
もういいじゃない。
 つまらない問題なんだしさ、さっさと終らせて次いこ

#include <stdio.h>
#include <stdlib.h>
int main(void){
int c1=0,c2=0;
int you,i; randomize();
printf("===じゃんけんゲーム===\n");
while(c1<3&&c2<3){
printf("あなた%d回と私%d回:1:グー 2:チョキ 3:パー\n",c1,c2);
i=random(3) +1;
you=0;while((unsigned)(you-1)>3){char buf[100];printf("ジャンケンポン:");
fgets(buf,80,stdin);sscanf(buf,"%d",&you);}
printf("あなた:%d,わたし%d\n",you,i);
if((you==1&&i==2)||(you==2&&i==3)||
(you==3&&i==1)) {printf("あなたの勝ちです。\n");c1++;
}else if(you==i){printf("あいこです。\n");
}else{printf("あなたの負けです。\n");c2++;}
} return 0;
}
0973何番目かの麻衣NGNG
で、次も麻衣で行くの? 優しいお姉さんに戻るの?

この麻衣はスレたてすぎたらしいから誰かお願いね
0974デフォルトの名無しさんNGNG
このスレで円満にまたーりするには、
(1)努力している姿勢(フリ)を見せる。
(2)丸投げしているように見せない。
ってのは重要だね。ちなみに単位を落として教授に泣きつきに行くときも
これは大切。せめて、テストの解答をレポートとしてまとめ持参し、「俺は単位を
得るに値する学力をつけた」フリをすること。もちろん、先方はすべてお見通し
だが、ただ「ごめんなさい、ごめんなさい」では教授としてもいかんともしがたい。
がんばれ、969
0975学生サンNGNG
実行したんですけど失敗しました。
っていうかまだ習ってないのがいっぱい使われてる・・・。
0976兄NGNG
新スレ
http://piza2.2ch.net/test/read.cgi/tech/1003838158/
0977何番目かの麻衣NGNG
そうそう、
乱数の部分は フリーのBCB55でコンパイル出来るように直してあげたからね
0978何番目かの麻衣NGNG
お兄ちゃんご苦労様 >> 976
0979 NGNG
age
0980初めてですNGNG
例えばtest.cというプログラムを実行したとき、その中で実行された文だけを,
たとえばkakidasi.txtに書き出していくプログラムって
どのように書いたらいいんでしょうか?
よろしくお願いします
0981デフォルトの名無しさんNGNG
test.c を実行にあわせて動作した一行を書き出すって事か?
0982デフォルトの名無しさんNGNG
文が変だ。
1行ごと実行を追いたいなら printf で足りると思う。実行時に
test.exe > kakidasi.txt
ってやれば充分でしょ。
0983デフォルトの名無しさんNGNG
>>980
デバッグ目的なら、ブレークはってステップ実行してほしい。
0984デフォルトの名無しさんNGNG
新スレ
http://piza2.2ch.net/test/read.cgi/tech/1003838158/
0985デフォルトの名無しさんNGNG
この職って会社のどんな事に役立ってるのですか?
まだ社会人ではないのでまったく想像できません。
ソフトってものはどんなものなのか・・・・・?
それが何の役に立つか何を作っているのか・・・・・?
みなさん教えてください。
0986デフォルトの名無しさんNGNG
>>980
archie ctrace

manual page:
http://www.sun.co.jp/forte/developer/documentation/mr/manpages/man1/ctrace.1.html
0987デフォルトの名無しさんNGNG
>>985
旧スレ上げてるようなやつには死んでもわからない。
0988初めてですNGNG
レスたくさんありがとうございました。
書き方が変でした。実行を一行ごとに追っていって
実行された文を例えばkakidasi.txtに
書き出したかったんです。
それで「実行し、実行された文を書き出す」
ためにどれくらいの時間がかかったかを最終的に
知りたいんですが・・・・・。
0989キリ番ゲッターNGNG
1000間近スレッド発見
0990キリ番ゲッターNGNG
1000狙うからな
かくごしろよ>ALL
0991キリ番ゲッターNGNG
いいかROMよ

俺様が1000取ったら ウラビデオ さしあげます
0992キリ番ゲッターNGNG
1000だ

1000を持って来い

ははは
0993キリ番ゲッターNGNG
ウラビデオ配布場
http://www.megabbs.com/cgi-bin/readres.cgi?bo=douga&vi=991411619&rm=100
0994キリ番ゲッターNGNG
もちろん邪魔したら
ウラビデオは
配布中止でーす  hehehe
0995キリ番ゲッターNGNG
つーことで
1000狙う!!!!!!

hahaha
0996キリ番ゲッターNGNG
もうすぐだ
がんばるぞ
0997キリ番ゲッターNGNG
1000は美しい数字
俺様がもらう
0998キリ番ゲッターNGNG
伝説のスレッド age
0999キリ番ゲッターNGNG
やっとこさ
リーーーーーーーーーーーーーーーーチ


わおおおおおおおおおおおおお
1000キリ番ゲッターNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。