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

宿題見てやるよ

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
カワイイ弟のために宿題を見てやろう。
ただし、「考え方」を教えてやるから「答え」は自分で見つけろよ。

麻衣スレ
http://piza2.2ch.net/test/read.cgi/tech/982853418/
0002デフォルトの名無しさんNGNG
>>1
女の身内と交代してください。( ● ´ ー ` ● )
0003デフォルトの名無しさんNGNG
Scilabでのニュートン法のアルゴリズム教えて
0004tiger bookNGNG
以下 解答してください

問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のソースコードを考えて、それをコンパイラに通し、実際に命令が生成されることを確認せよ。(ただし、データのアドレスは、変わっても良いとする)
0005デフォルトの名無しさんNGNG
お願いします。

問
3×3魔方陣の左上のマスに値を一つ入れたとき
他の値を入れてくれるプログラムを作成せよ。

総当り方式だと90行ぐらいになってしまうので、
エレガントに2〜30行ぐらいで作りたいです。
ヒント下さい。
0006デフォルトの名無しさんNGNG
>5
3×3でしょ?
総当たりでも、90行にはならないと思うけど。

対角線の和も、行・列の和と等しくないといけないの?
それとも、対角線の和はどんな値でもいいの?
0007デフォルトの名無しさんNGNG
魔法人に入れる値は1〜9?
0008デフォルトの名無しさんNGNG
>>5
行って、ソースの行?
こういう問題ってシンプルに解いた方がソースは短くなるから、
総当り方式が一番ソースは短くなると思うけどね。
で、どうなんだろうと試しに書いてみたけど、読みやすく書いて
50行くらい。20〜30行にするとかなり読みにくくなりそう。

 あと、>>6 で触れてくれてるけど左上を固定しちゃうと、入れる数
によっては解がないみたいね。
0009デフォルトの名無しさんNGNG
この程度の問題解けない厨房が
ここで適当に答え書き写して単位もらって
いずれ開発会社に入ってくるのかと思うと気が重いよ。
0010デフォルトの名無しさんNGNG
>いずれ開発会社に入ってくるのかと

入社前にテストでもやってはじけばいいじゃん。
0011デフォルトの名無しさんNGNG
>>4
 これは、考え方を教えてと言われても非常に困るし、解答書いて
しまっても意味ないしなぁ。どの程度わかってるの?
 問一については式木を作って、それから変換してみろとヒント程度
の事しかいえない。
 問二に関しても同じだなぁ。
gcc -O -S test.c
gcc -S test.c
 で出てくる、二つのtest.s を比較してみて、その違いがどういう意味を持つのか・・
考えてみろ・・としか。

 いずれにしろ、ぱっとこういう問題張られても答えようが無い。どこがわからない
か書いてくれ。もしどこがわからないかわからないくらいわからないのなら、単位取
得あきらめろ。
 ってことで。
0012デフォルトの名無しさんNGNG
>>6
>>7
1〜9までの数で、全ての列の和が15になる一般的なやつです。

>>8
ソースです。
解がないときは「無し」と表示する感じです。

>>9
一応解けたんですが、もっといい解き方を学びたいので。

総当り方式と公式みたいのものを使う2通りがあるそうです。
適当に関数作ってif,for使いまくって総当りしたら、
100行近くなってしまって・・・。
1〜9の値を重複判定するときになにかいい方法はありますか?
0013デフォルトの名無しさんNGNG
>5
対角線の和は考慮しない、なんちゃってなやつなら、こんな風に
作れるぞ。
なんちゃってだから、こんなん提出したら、おこられるかもな。
全角の空白使ってるから、半角の空白に変換してくれ。


#include <stdio.h>

void main(void)
{
  int i, j, n;
  int a[7][7] = {{0, 0, 0, 0, 0, 0, 0},
          {0, 0, 0, 0, 0, 0, 0},
          {0, 0, 6, 1, 8, 0, 0},
          {0, 0, 7, 5, 3, 0, 0},
          {0, 0, 2, 9, 4, 0, 0},
          {0, 0, 0, 0, 0, 0, 0},
          {0, 0, 0, 0, 0, 0, 0}};
  int x[10] = {0, 3, 2, 4, 4, 3, 2, 2, 4, 3};
  int y[10] = {0, 2, 4, 3, 4, 3, 2, 3, 2, 4};

  printf("input n: ");
  scanf("%d", &n);

  if (x[n] == 3) {
    for (i = 2; i < 5; i++) { a[i][5] = a[i][2]; }
  }
  if (x[n] == 4) {
    for (i = 2; i < 5; i++) { a[i][1] = a[i][4]; }
    x[n] = 1;
  }
  if (y[n] == 3) {
    for (i = 1; i < 6; i++) { a[5][i] = a[2][i]; }
  }
  if (y[n] == 4) {
    for (i = 1; i < 6; i++) { a[1][i] = a[4][i]; }
    y[n] = 1;
  }
  for (i = y[n]; i < y[n] + 3; i++) {
    for (j = x[n]; j < x[n] + 3; j++) { printf("%2d", a[i][j]); }
    putchar('\n');
  }
}
00145NGNG
12=5です。
0015デフォルトの名無しさんNGNG
>12
あ、「解なし」って表示することもある、ってことは、対角線の
和も考慮するわけね。
はよーそれを言えっちゅうの。
0016デフォルトの名無しさんNGNG
>>13
あらかじめ答えを書いておいて、それを回転させるのか(汗)
それは・・いいのか? さすがにまずいだろう・・・
0017デフォルトの名無しさん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、それ以外は入力エラー
  とし、再度入力するものとします。

誰か教えて〜〜〜。。。
0018デフォルトの名無しさんNGNG
>16
そう。なんちゃってプログラムだからね(汗
13の方法はタテ・ヨコの和は保存されるけど、対角線の和は保存
されないから、12の要求を満たしてないらしい。
0019デフォルトの名無しさんNGNG
>>12
 さすがに100行はかからないと思う。
 1〜9の重複判定は、サイズ9の配列作って、その数を使っているか使って
いないかを0か1かで記憶しておくのが素直だと思われます。
0020デフォルトの名無しさんNGNG
>>12
 あと、総当りの1パターンを作るのはバックトラックをするのが素直
だと思われます。
00215NGNG
>>13
回転・・・ですか。
でもある意味いい方法でしょうね。
3×3が結局1通りしかないとわかっていれば・・・。

>>19
その方法を最初に思いついて関数として使いました。
でも重複判定+総当りif,for羅列でなぜか100行・・・。

>>20
バックトラックですね、調べてみます。

皆様ありがとうございます。
まだC++始めて3週間ですので・・・。
0022デフォルトの名無しさんNGNG
ほらよ。完璧。

#include <stdio.h>
#define SQ 3 //一辺
#define COUNT SQ*SQ

int flag=0xFFFF,x[COUNT];

void foo(int d){
 int i,j,a,b;
 if (d==COUNT){
 for ( i=a=0; i<SQ; i++) a+=x[i];
 for ( i=b=0; i<SQ; i++) b+=x[i*(SQ+1)]; if (b!=a)return;
 for ( i=b=0; i<SQ; i++) b+=x[(SQ-1)*(1+i)];if (b!=a)return;

 for ( j=0; j<SQ; j++){
  for( i=b=0; i<SQ; i++) b+=x[i+SQ*j]; if(b!=a)return;
  for( i=b=0; i<SQ; i++) b+=x[i*SQ+j]; if(b!=a)return;
 }

 for (i=0;i<COUNT;i++)
 {
  printf("%d",x[i]);
  if (i%SQ==SQ-1) printf(" ");
 }
 printf("\n");
 return;
}
for (i=0;i<COUNT;i++)
 if (flag & (1<<i) ){
  flag &= ~( 1<<i );
   x[d]=i;
   foo(d+1);
   flag |= (1<<i);
  }
}

void main(){
 foo(0);
}
0023デフォルトの名無しさんNGNG
こんなんは?
順列の生成方法を、奥村晴彦著、C言語による最新アルゴリズム事典、
ISBN 4-87408-414-1の119ページからぱちって来た。

#include <stdio.h>
#define N 9

int check(int a[])
{
  if ((a[0] + a[1] + a[2] == 15) &&
    (a[3] + a[4] + a[5] == 15) &&
    (a[6] + a[7] + a[8] == 15) &&
    (a[0] + a[3] + a[6] == 15) &&
    (a[1] + a[4] + a[7] == 15) &&
    (a[2] + a[5] + a[8] == 15) &&
    (a[0] + a[4] + a[8] == 15) &&
    (a[2] + a[4] + a[6] == 15)) { return 1; } else { return 0; }
}

void perm(int a[], int n, int i, int j)
{
  int k;

  a[i] = j;
  if (j == N) {
    if (a[0] == n && check(a)) {
      putchar('\n');
      printf ("%d %d %d\n", a[0], a[1], a[2]);
      printf ("%d %d %d\n", a[3], a[4], a[5]);
      printf ("%d %d %d\n", a[6], a[7], a[8]);
    }
  }
  else {
    for (k = 0; k < N; k++) {
      if (a[k] == 0) { perm(a, n, k, j + 1); }
    }
  }
  a[i] = 0;
}

void main(void)
{
  int i, n;
  int a[N];

  printf("input n: "); scanf("%d", &n);
  for (i = 0; i < N; i++) { a[i] = 0; }
  for (i = 0; i < N; i++) { perm(a, n, i, 1); }
}
0024デフォルトの名無しさんNGNG
こんどこそOK
#include <stdio.h>
#define SQ 3 //一辺
#define COUNT SQ*SQ
int flag[9]={1,1,1,1,1,1,1,1,1},x[COUNT];
void foo(int d){
int i,j,a,b;
if (d==COUNT){
for ( i=a=0; i<SQ; i++) a+=x[i];
for ( i=b=0; i<SQ; i++) b+=x[i*(SQ+1)]; if (b!=a)return;
for ( i=b=0; i<SQ; i++) b+=x[(SQ-1)*(1+i)];if (b!=a)return;
for ( j=0; j<SQ; j++){
for( i=b=0; i<SQ; i++) b+=x[i+SQ*j]; if(b!=a)return;
for( i=b=0; i<SQ; i++) b+=x[i*SQ+j]; if(b!=a)return;
}
for (i=0;i<COUNT;i++){
printf("%d",x[i]);
if (i%SQ==SQ-1) printf(" ");
}
printf(" : (%2d)\n",a);
return;
}
for (i=0;i<COUNT;i++)
if (flag[i]){ flag[i]=0; x[d]=i+1; foo(d+1); flag[i]=1; }
}
void main(){ foo(0); }
002523NGNG
俺、正直、22のプログラムが何やってるのか、ぱっと見じゃ全然わからねー。
逝ってきます…。
0026デフォルトの名無しさんNGNG
/* シンプルに。*/
#include <stdio.h>
int flag[9]={1,1,1,1,1,1,1,1,1},x[9];

void foo(int d){
 int i,j,a,b;
 if (d==9){
  if (x[0]+x[1]+x[2]!=15)return;
  if (x[3]+x[4]+x[5]!=15)return;
  if (x[6]+x[7]+x[8]!=15)return;
  if (x[0]+x[4]+x[8]!=15)return;
  if (x[2]+x[4]+x[6]!=15)return;
  if (x[0]+x[3]+x[6]!=15)return;
  if (x[1]+x[4]+x[7]!=15)return;
  if (x[2]+x[5]+x[8]!=15)return;  printf("%d%d%d,%d%d%d,%d%d%d\n",x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7],x[8]);
  return;
 }
 for (i=0;i<COUNT;i++)
  if (flag[i]){
   flag[i]=0;
   x[d]=i+1;
   foo(d+1);
   flag[i]=1;
  }
}

void main(){
 foo(0);
}
0027デフォルトの名無しさんNGNG
>>17
何行目まで理解できてる?
どこでつまづいたか言ってみよ。
0028デフォルトの名無しさんNGNG
”C言語らしく”代入演算子やインクリメントを多用すると、
わかりにくいプログラムになるので注意しましょう。
0029デフォルトの名無しさんNGNG
>>17
ってゴルァ! その1行目は何だよ。やる気うせる〜。
00305NGNG
>>22,24,26
完璧ですね・・・。30行ぐらいしかないですね。すごいです。
これですっきりさせることができそうです。ありがとうございました。
関数の中でその関数を使う方法があるとは目からウロコでした。
そうすればforで関数を終わらせることなく計算できますね。
勉強になりました。

>>23
参考になりました。ありがとうございます。
00315NGNG
>>22,24,26
気になった点が一つあるのですが・・・。
if(flag[i]){
  flag[i]=0;
  ・
  ・
}
の部分のif(flag[i]){}
は何に対して条件分岐をしているんですか?
始めて見る書き方なので教えてください。
0032デフォルトの名無しさんNGNG
if(flag[i]!=0)と等価
Cのifには常に暗黙の!=0が付く。と考えておけばよい
00335NGNG
>31
調べたらわかりました。
if(flag[i]==1)の略だったんですね。
くだらない質問してすみません。
0034デフォルトの名無しさんNGNG
>>33
ノータリン
flag[i]が2でも flag[i] は真じゃボケ
0035デフォルトの名無しさんNGNG
CでJavaとかのクラスの構造の真似をしようと思ってます。

で、そこそこある程度できたんだけど、
どうしてもtry節の模擬がうまくいきません。

マクロでうまく隠蔽したいんだけど、
どんな手法が考えつきますか?
0036デフォルトの名無しさんNGNG
無理無駄無意味なことはやめておけ
http://www.sage-p.com/index2.html
0037デフォルトの名無しさんNGNG
http://www.sage-p.com/process/cool.htm
0038ネタですNGNG
#include <time.h>
#include <stdlib.h>
#define TIMES 1000000
int a[]={1,2,3,4,5,6,7,8,9};
void dump(int a[]);
int check(int a[])
{
  if ((a[0] + a[1] + a[2] == 15) &&
      (a[3] + a[4] + a[5] == 15) &&
      (a[6] + a[7] + a[8] == 15) &&
      (a[0] + a[3] + a[6] == 15) &&
      (a[1] + a[4] + a[7] == 15) &&
      (a[2] + a[5] + a[8] == 15) &&
      (a[0] + a[4] + a[8] == 15) &&
      (a[2] + a[4] + a[6] == 15)) { return 1; } else { return 0; }
}
void make_random(int a[]){
  int i,j;
  int swap;
  for(i = 0;i < 9;i++){
    j = rand()%9;
    swap = a[j];
    a[j] = a[i];
    a[i] = swap;
  }
}
void set_start(int a[],int index,int val){
  int i;
  int temp;
  for(i = 0;i < 9;i++){
    if(a[i] == val){
      temp = a[index];a[index] = val;a[i] = temp;return;
    }
  }
  
}
void dump(int a[]){
  int i;
  for(i=0;i < 9;i++){
    printf("%d ",a[i]);
  }
  printf("\n");
}
int main(){
  int start_index,val,i;
  int j;
  val = 1;
  start_index =3;
  srand(time(NULL));
  for(i=0;i < TIMES;i++){
    make_random(a);
    set_start(a,start_index,val);
    if(check(a)){
      dump(a);      return 1;
    }
  }
  printf("may be error\n");
  return 1;
}
0039デフォルトの名無しさんNGNG
>>37
うひゃ。読みにくいけどためになるページですね!
でもtry〜catchあたりがいまいち載ってないですね
0040デフォルトの名無しさんNGNG
ふつー longjmp
004139NGNG
>>40
longjmpはよく分からなかったので最初から逃げてました。
googleだと引っかかりすぎて難しいです。
いいサイトがあったら教えてください。
なければ自分で勉強します。
0042デフォルトの名無しさんNGNG
>>37
いきなり
> クラスは、構造体の発展形です。
とか結構イタいがな。
0043デフォルトの名無しさんNGNG
>>42
でも、Java知らん人を3日で戦力にしろっていう
上司命令がきたら オレでもこう教えるよ。
面倒くさいし、局所的に見れば間違ってないし。
0044デフォルトの名無しさんNGNG
>>17
それって、以前ゲーム専門学校の宿題スレで俺が出した
仕様では…

まだやってたのか、それ。
00455NGNG
>>34
うわー恥ずかしい・・・。
適当に自分でいじってみて1は通って0は通らなかったから
==1だと思ってしまった・・・。真だったんですね。
ノータリンです逝ってきます。
0046ふざけるなNGNG
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
麻衣を出せ
0047デフォルトの名無しさんNGNG
麻衣は嫁に行きました。
0048デフォルトの名無しさんNGNG
麻衣タンの妹降臨キボンヌ
0049美衣NGNG
じゃあ、親戚の私でいいですか?

CとJavaならお任せよ♥
0050美衣NGNG
とりあえず、ageます。
質問がなければこのまま下がります〜
0051デフォルトの名無しさんNGNG
Cで「1秒ごとに処理をする」ってどうやりますか?
0052デフォルトの名無しさんNGNG
int count_sec;

void initialize_timer(){
 int t=time();
 while (t==time());
 for (count_sec=0; t==time(); count_sec++);
}

void wait(int sec){
 for (int i = 0 ; i <= count_sec; i++);
}
005351NGNG
>>52 産休
0054デフォルトの名無しさんNGNG
>>52
それだったら、

void wait(int sec){
 for ( int t = time(); t + sec >= time(); ;
}

だけでよいのでわ。。。
 
0055美衣NGNG
busyループなんて使っちゃ駄目よ。
ライブラリ使うならsleepとか使わなきゃ。
0056デフォルトの名無しさんNGNG
>>52-54
痛すぎる・・・
005751NGNG
>>56
痛くない解答をお願いします
0058デフォルトの名無しさんNGNG
>>56
プリエンティブなマルチタスク環境ならいいんじゃなーい?(無責任)
005956NGNG
>>57
>>55に回答があるだろうが。
0060デフォルトの名無しさんNGNG
>>58 よくねーよプンスカ!
アプリのCPU使用率の制限かけられる立派なOS使える奴
ばっかりじゃねんだよ。
0061デフォルトの名無しさんNGNG
さすが宿題スレだ。
レベルが低いのがぞろぞろいる。
0062あああNGNG
S={N 個の整数|それぞれ異なる整数}の中から 中央値に近い
k個の整数 (k<=N)(k closests to the median)を探し出す
プログラムを書きなさい。
0063デフォルトの名無しさんNGNG
>>62
1. ソートする。M=N/2番目(奇数なら切り上げ)が中央値。
2. {M - k/2番目...M + k/2番目}が求める整数の集合。
(kが奇数なら、M - k/2 - 1番目とM + k/2 +1番目のうち、
M番目に近い方を解に含める。)
0064無学ですまんNGNG
中央値ってのは、最小値と最大値の中間?
006563NGNG
まちがえた。
1. 昇順にソートする。M=N/2番目(Nが奇数なら切り上げ)が中央値。
中央値をmedとし、ソート結果をa[0]..a[N-1]とする。

for (low = high = M; high - low < k; ) {
 if (low == 0) {
  high++;
 } else if (high == N - 1) {
  low--;
 } else if (med - a[low - 1] < a[high + 1] - med) {
  low--;
 } else {
  high++;
 }
}
a[low], a[low + 1], ..., a[high]が解。
0066oooNGNG
ありがとうございます。
が、、、ひとついい忘れました。
ソートを使わずにアルゴリズムが O(N)になるようにするには?
0067デフォルトの名無しさんNGNG
今日教授から出された宿題で、来週の月曜には提出しないといけません。

1.美衣の年齢
2.美衣の身長・体重
3.美衣の3サイズ
4.美衣の経歴
5.美衣の好きなもの・嫌いなもの

よろしくお願いします。
0068デフォルトの名無しさんNGNG
宿題、教えてください。
加算、減算、乗算、除算を行う関数を定義し、それらを呼び出すmain関数を作成しなさい。関数の名前を決めるための参考として、加減乗除の英語名を示します。
加算 addition 減算 subtraction 乗算 multiplication 除算 devision
0069無学ですまんNGNG
>>68

int a(int a, int b)
{
 return a+b;
}
int s(int a, int b)
{
 return a-b;
}
int m(int a, int b)
{
 return a*b;
}
int d(int a, int b)
{
 return a/b;
}
int main()
{
 a(1,1);
 s(1,1);
 m(1,1);
 d(1,1);
 return 0;
}
0070デフォルトの名無しさんNGNG
>>62
ソートしなけりゃ無理な気がするが・・・・。
ビンソートならO(N)。
Sの最大値、最小値は分からないの?
0071デフォルトの名無しさんNGNG
>>69
ありがとうございました!
0072デフォルトの名無しさんNGNG
int add(int a, int b)
{
 return a + b;
}

int subtr(int a, int b)
{
 return a - b;
}

int multi(int a, int b)
{
 return a * b;
}

float dev(int a, int b)
{
 return a / (float) b;
}

int main(int argc, char *argv[])
{
 printf("add(1, 2) = %d\n", add(1, 2));
 printf("subtr(3, 4) = %d\n", subtr(3, 4));
 printf("multi(5, 6) = %d\n", multi(5, 6));
 printf("dev(7, 8) = %f\n", dev(7, 8));

 return 0;
}
0073デフォルトの名無しさんNGNG
ちょっとまてよ。だれもCなんてかいてないだろ。C++
かもしれないだろ。

class CInt{
 int value;
 operator '+';
 operator '-';
 operator '*';
 operator '/';
}
007467NGNG
急いでるんで、誰かおながいします。
0075デフォルトの名無しさんNGNG
>>67

こっちできけ
http://piza2.2ch.net/test/read.cgi/tech/982853418/l50
0076デフォルトの名無しさんNGNG
>>62≠>>66かも知れないけど面白そうなので。

Nが偶数なら、
配列の両端から順次2つの値を比較していって
上半分に値の大きい物を集める。
で、上半分の中で値が一番小さい物が中央値。

Nが奇数の場合は
「中央を除いた下半分の最大値」
「中央の値」
「中央を除いた上半分の最小値」
を使ってごちゃごちゃやってれば出来そうな気がする。
それから問題の後半はまだ分からないです。

BASICの例
200 ' 中央値を得る
210 for i=1 to int(N / 2)
220  if a(i) > a(N-i+1) then swap a(i), a(N-i+1)
230 next
240 '
250 med = a(int(N/2))
260 '
270 for i=int(N/2) to N
280 if med > a(i) then med = a(i)
290 next
007776NGNG
あ、全然間違ってるかも。
0078デフォルトの名無しさんNGNG
>>62

void find_min_max(int *data, int count, int *min, int *max)
{
 int i;

 *max = *min = data[0];
 for (i=1; i<count; i++){
  if (*max < data[i]) *max = data[i];
  if (*min > data[i]) *min = data[i];
 }
}

int find_median(int *data, int count)
{
 int i,median,max,min,delta,mean;

 find_min_max(data, count, &min, &max);
 mean = (max + min)/2;
 delta = abs(data[0] - mean);
 for (i=1; i<count; i++)
  if ( delta > abs(data[i] - mean) ){
   median = data[i];
   delta = abs(data[i] - mean);
  }
 return median;
}

これを前提として…

median = find_median(data, count);
for (i=0; i<count; i++)
 if ( data[i] < median )
  printf("%d\n", data[i]);

とすればOK
0079デフォルトの名無しさんNGNG
>>72
>>73
ありがとうございました!
Javaだと、どうなるんでしょうか?
008076NGNG
>>78
それだとmeanの値に一番近い数値を求めているだけの様な...
0081デフォルトの名無しさんNGNG
え、ちがうの?
この問題って、
(データの最大+データの最小)÷2 よりも小さい値を
全て抜き出せって意味じゃないの?
0082デフォルトの名無しさんNGNG
>>81
ちゃうよ。
中央値っつったら、順に並べて真ん中に来る値のことだろ。
0083デフォルトの名無しさんNGNG
なんだ。メディアン値のことか…
0084デフォルトの名無しさんNGNG
>>67
他に言い忘れてることないだろな、コ゛ルァ!
O(N)って無理じゃないか?
O(NK)でも良いのか?
0085デフォルトの名無しさんNGNG
/* ソートしないアルゴリズム */


/* upper を超えない最大の値を返す */
int find_max(int *data, int count, int upper)
{
int i,max;

max = data[0];
for (i=1; i<count; i++)
if ( max < data[i] && data[i] <= upper)
max = data[i];
return max;
}


/* lower を下回らない最小の値を返す */
int find_min(int *data, int count, int lower)
{
int i,min;

min = data[0];
for (i=1; i<count; i++)
if ( min > data[i] && data[i] >= lower)
min = data[i];
return min;
}


int find_median(int *data, int count)
{
int i, upper, lower;

upper = MAX_INT;
lower = -MAX_INT;
while ( upper > lower ){
upper = find_max(data, count, upper);
lower = find_min(data, count, lower);
}

if ( upper == lower )
return upper;
else
return ???;
}
008681=83=85NGNG
O(N)って何のこと?
O(NK)とは?
0087デフォルトの名無しさんNGNG
訂正。
if ( max < data[i] && data[i] <= upper)
は
if ( max < data[i] && data[i] < upper)
ね。それと

if ( min > data[i] && data[i] >= lower)
は if ( min > data[i] && data[i] > lower)
ね。
0088デフォルトの名無しさんNGNG
>>86
計算量のオーダーも知らないやつがアルゴリズム語ろうとするなよヲイ(w
0089デフォルトの名無しさんNGNG
>>86
オーダ
O(N)だと処理速度はNに比例。
O(NK)だと処理速度はN*Kに比例。
009086NGNG
>>88
どうして?
0091デフォルトの名無しさんNGNG
てことは、Log N に比例するならば
O(Log N) って書くのね。理解。
0092デフォルトの名無しさんNGNG
>>90
オーダ知らんかったらアルゴリズムの評価なんかできねえだろ。
0093デフォルトの名無しさんNGNG
オーダは知っているがO(N)という
書き方はしらなんだ。すまんな。
0094デフォルトの名無しさんNGNG
>>93
つかそれ以外の書き方しらんのだけど。
0095デフォルトの名無しさんNGNG
この職って会社のどんな事に役立ってるのですか?
まだ社会人ではないのでまったく想像できません。
ソフトってものはどんなものなのか・・・・・?
それが何の役に立つか何を作っているのか・・・・・?
みなさん教えてください。
0096デフォルトの名無しさんNGNG
>>95
それ、なんの宿題?
0097デフォルトの名無しさんNGNG
>>96
ごめん
宿題じゃありません_(._.)_
ちょっと質問したのですが
やっぱりいいです
0098デフォルトの名無しさんNGNG
この職?プログラマのこと?

プログラマ=プログラムをする人、プログラム技術を持っている人
と定義するならば、そもそもパソコンなんぞ誰も
使えない気が…
0099デフォルトの名無しさんNGNG
>>95
どんな会社を想定してるのか。
SI会社におけるプログラマは稼ぎ頭というか戦闘部隊というか。
それ以外の会社では小間使いというか後方支援ちおうか。
0100デフォルトの名無しさんNGNG
>>84
o(NK)で、できる?
中央値ってO(N)で求められたっけ?
0101デフォルトの名無しさんNGNG
>>85はO(N^2)ですか?
0102デフォルトの名無しさんNGNG
>>101
O(N^2)だ。「中央値に最も近いk個」というのも満たしてない。
0103デフォルトの名無しさんNGNG
うーん、結局ビンソートなのかな。
0104デフォルトの名無しさんNGNG
ビンソートってよく知らないんだけど、どういうの?
0105デフォルトの名無しさんNGNG
ビンラディンとなにがちがうの?
0106デフォルトの名無しさんNGNG
>105
ヒゲ
0107デフォルトの名無しさんNGNG
>>103
でも「ソートしない」が条件らしいぜ?
それに、「整数」というだけで、他に条件ないとしたらダメだろ。

>>104
ビンソート知らない人は、質問する側に回りなさい。
「ビンソートとは何か」という宿題なら教えてあげる。
0108デフォルトの名無しさんNGNG
>>107
すみません、書き込んだ後、検索して理解しました。
0109デフォルトの名無しさんNGNG
まずk=1のspecial caseから考えよう。
つまり中央値を求めるだけ。
キーの範囲が限定されてないとして、
これってO(N)でできる?
0110デフォルトの名無しさんNGNG
O(N * log N)かな。メジアンだけです。

100 N = 100: Nbox = 10
110 dim a(N), slot(Nbox)

..配列に値を入れる。

200 gosub getMinMax
210 max = max + 1  '念の為、1つずらしておく
220 midN = int((N +1)/ 2)
230 repeat
240  delta = (max - min ) / Nbox
250  gosub clearSlot
260  gosub fillSlot
270  gosub selectSlot
280  max = min + delta * (slotN + 1)
290  min = min + delta * SlotN
300 until memberN = 1
310 gosub getMedian
320 print "median " ; median
330 end

400 getMinMax:
410 min = a(1): max = a(1)
420 for i=1 to N
430  if min > a(i) then min = a(i)
440  if max < a(i) then max = a(i)
450 next
460 return

500 clearSlot:
510 for i=0 to Nbox
520  Slot(i) = 0
530 next
540 return

600 fillSlot:
610 for i=1 to N
620  j = int((a(i) - min) / delta)
630  if j >= 0 and j <= Nbox then Slot(j) = Slot(j) + 1
640 next
650 return

700 selectSlot:
710 sum = 0: i=-1
720 repeat
730  i = i + 1
740  sum = sum + Slot(i)
750 until sum > midN
760 SlotN = i
770 midN = midN - (sum - Slot(SlotN))
780 memberN = Slot(SlotN)
790 return

800 getMedian:
810 for i=1 to N
820  if a(i) >= min and a(i) < max then median = a(i)
830 next
840 return
0111デフォルトの名無しさんNGNG
>>107
>「整数」というだけで
値は重複しないらしいです。
0112 NGNG
Permitation; 6P3 の全ての組み合わせの数字を表に出したいです。
それらの数字は小さい順になるように表にしたいです。[例:{1,2,3}
{1,2,4}{1,2,5}{1,2,6}{1,3,2}]
よろしくお願いします。
0113デフォルトの名無しさんNGNG
メディアン。
何度かリトライするのでオーダー不明。(テストでは3回リトライしていた。)
--------
var
 median, midN, i, countS, countL: integer;
--------
begin
 median := a[1];
 midN := (N + 1) div 2;
 i := 1;
 repeat
  if a[i] < median then
   countS := countS + 1;
  if a[i] > median then
   countL := countL + 1;
  if countS >= midN then
   begin
    median := a[i];
    countS := 0;
    countL := 0;
    i := 1;
   end;
  if countL >= midN then
   begin
    median := a[i];
    countS := 0;
    countL := 0;
    i := 1;
   end;
  i := i + 1;
 until i > N;
 writeln('Median = ', median);
end;
0114デフォルトの名無しさんNGNG
>>113
ごめん、読んでて頭痛くなってきた(汗
適当に一個決めて、上と下に何個あるか数えるのね。
えっとオーダーは、O(N^2)というべきか、それとも永遠に終わらない可能性も
あるから、O(+∞)というのがいいのか。
0115113NGNG
って、適当ってわけではないか。
だんだん近づいていくのか。・・・いくのかな?
0116113NGNG
間違ってますね。テストしたデータでたまたまうまく行っただけでした。
見つからない時は無限ループにはまってしまうし。
0117デフォルトの名無しさんNGNG
>>112
非再帰版

#include <stdio.h>

void main(){
int i1,i2,i3;

for (i1=1; i1<=6; i1++)
for (i2=i1+1; i2<=6; i2++)
for (i3=i2+1; i3<=6; i3++)
printf("%d %d %d\n",i1,i2,i3);
}
0118デフォルトの名無しさんNGNG
>>112
Del厨で失礼。
出力も手抜き

program Permitation;

{$APPTYPE CONSOLE}

uses
 SysUtils;

procedure PrintResult(
 var Result : array of integer;
 const Length : integer
 );
var
 i : integer;
begin
 for i := 1 to Length do begin
  Write (Result[i],' ');
 end;
 Writeln;
end;

procedure PermitationSub(
 const Items:integer ;
 const Length:integer ;
 const CurrentLength:integer ;
 var Result : array of integer
 );
var
 i,j : integer;
 used : boolean;
begin
 for i := 1 to Items do begin
  used := false;
  for j:= 1 to CurrentLength do begin
   if Result[j]=i then begin
    used := true;
    break;
   end;
  end;
  if used then continue;
  Result[CurrentLength+1] := i;
  if CurrentLength+1 < Length then begin
   PermitationSub(Items,Length,CurrentLength+1,Result);
  end else begin
   PrintResult(Result,Length);
  end;
 end;
end;

var
 Result : array[0..6] of integer;
begin
 PermitationSub(6,3,0,Result);
end.
0119デフォルトの名無しさんNGNG
>>117
1,3,2 とかが出ないような…
0120117NGNG
失礼。コンビネーションでした。
0121 NGNG
>>66
少し考えてみたけど、O(N)でいきますね。
アルゴリズム示します。

(1)まずメディアンを求める。
(1-1)配列a[m]の中から小さい法からl個目を抜き出す関数f(a,m,l)を考える。
  これに、m = N, l = N / 2を入れればいい。
(1-2)m個の数字を、その中のある数字を閾値にそれ以上(big)と以下(small)にわける。
(1-3)小さい方がs個だったとする。
(1-3-1) s < lなら、小さい方にメディアンがある。f(small,s-1,l)を呼び出す
(1-3-2) s > lなら、大きい方にメディアンがある。f(big, m-s, l-s)を呼び出す。

(2) 全ての数字について(1)で求まったメディアンとの差の絶対値を求める。
 これで、この差の絶対値から小さい方からk個抜き出すという問題に置き換わった。

(3)(1)と同様に大きいほう、小さい方にわけていく。これは、小さい方からk個目を
求め、その呼び出し関数のsmallに入っている数字は全て、小さいほうからk個の中に
入っていることになる。

計算量を検証します。
(1)上手く1/2ずつ絞り込めていけば。
N + 2/N + 4/N + 8/N + ..... = 2N
で計算できますので、O(N)。
まあ、実際にそんな上手くはいかないでしょうが、クイックソートがO(nlog(n))
の計算量というのと一緒ですね。

(2)N個の絶対値求めるだけなので、O(N)
(3)(1)と同様にO(N)
0122 NGNG
>>112
問題がよくわからないんだけど、小さい順ってどういうこと?
左側の数字から順にkeyにして小さい順ってこと?
0123デフォルトの名無しさんNGNG
>>121
不等号の向きが違う気がするけど、おおむね合ってそう。
in-placeで入力配列を分割していけば、クイックソートと
2分探索を組み合わせたようなコードになるね。
0124デフォルトの名無しさんNGNG
>>66の問題をヒープソートの応用でやる人はいないかな?
上位いくつかを求めるには効率的なんだけれど>ヒープ
0125デフォルトの名無しさんNGNG
#include <stdio.h>
void main(void)
{
char c;
int sa;
sa='a'[-�@-]'A';
printf("\n文字を入力してください");
scanf("%c",[-�A-]);
if(c>='A'[-�B-]c<='Z'){
c+=[-�C-];
printf("小文字 → %c\n",c);
}
else if(c>='a'[-�D-]c<='z'){
c-=sa;
printf("大文字 → %c\n",c);
}
}



-----------
大文字は小文字に小文字は大文字に変換するやつなんだけど
�@〜�Dには何が入るんだ?
0126125NGNG
やっぱいいやわかった。
0127デフォルトの名無しさんNGNG
>>124
121のやり方だと最悪O(N^2)だが、ヒープを使えば
最悪O(N log N)にできるね。最良でもO(N log N)だが。
0128デフォルトの名無しさんNGNG
>>122 その通りです。小さい順でした。言葉が足りず申し訳無いです。
0129デフォルトの名無しさんNGNG
>>129
i1, i2, i3を変数としますね。
i1を1〜6の範囲でループさせます。その中で
i2を1〜6の範囲でループさせます。さらにその中で
i3を1〜6の範囲でループさせます。
そして、そのループの中で
i1, i2, i3が全て異るかどうか判定し、異なれば
i1, i2, i3の順に表示する。

というプログラムを書けば大丈夫です。
教育的配慮から、ソースは書きませんので、わからないことがあったら
きいてください。
0130デフォルトの名無しさんNGNG
ありがとうございます。やってます。
0131デフォルトの名無しさんNGNG
おしえてください!Cで、
たとえばint x = 1000;をストリングとして出したい場合(char*型として)、
どうしたらよいのですか??
0132デフォルトの名無しさんNGNG
itoa
0133デフォルトの名無しさんNGNG
sprintf
0134131NGNG
やった!
なるほど、sprintfでできました。
ありがとうございました!
0135デフォルトの名無しさんNGNG
>>134
メモリに出力するときは確保した領域内に
収まるように注意して
気づかないうちに他の領域を壊したり
Segmentation fault の原因になるから
013667NGNG
まだ>67の回答を頂いてないので、おながいします。
0137デフォルトの名無しさんNGNG
>>136
1.6ヶ月
2.52cm、4900g
3.25cm、27cm、27cm
4.実は麻衣の子
5.森永のミルクは口に合わないらしく明治のを飲ませると喜ぶ。
013867NGNG
ありがとうございます。
これでゼミに逝けます。
0139デフォルトの名無しさんNGNG
おしえてください!Cで、
アドレスを指定してその領域の内容を表示するには
どうしたらよいのですか??
short *p;
p=12;
printf("%d",*p);
などではエラーが出てしまいます
0140デフォルトの名無しさんNGNG
>>139
値を入れる実体がないぞ。

short i;
short *p;

i = 12;
p = &i;
printf("%d", *p);
0141139NGNG
>>140
ありがとうございます!
ポインタもっとべんきょうします。
0142牡蠣フライNGNG
JAVAです。
指定した元ファイルから
指定した先のファイルへの
コピーの仕方教えてください。
0143デフォルトの名無しさんNGNG
>>142
http://javacenter.sun.co.jp/java-sample/java.io/java_io_01.html
0144牡蠣フライNGNG
>>143
どうもです。
わざわざBuffereReaderとPrintWriterを
使ってコピーするにはどしたらいいでしょうか。
0145 NGNG
>>144
http://java.sun.com/docs/books/tutorial/essential/io/filestreams.html
0146145 補足NGNG
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/io/BufferedReader.html#BufferedReader(java.io.Reader)
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/io/PrintWriter.html#PrintWriter(java.io.Writer)
0147牡蠣フライNGNG
>>145 >>146
どうもです。参考になりましたが、やっぱりわからないとこがあります。

private Vector readfile (String fileName vector lines)
provate boolen writefile(String fileName)この2つを使って
コピー元ファイルからコピー先ファイルをテキストファイルにコピー。

private Treefile readfile (String fileName)を使って
テキストファイルより任意の人数分の番号、名前、住所を読み込んで
コマンドオプションから受け取った番号に該当する情報を画面表示。

この2つを教えてください。
夜遅くですがなにとぞよろしくお願いします。
0148147 訂正NGNG
問題間違えました。正しくはこちら。

private Vector readfile (String fileName vector lines)
provate boolen writefile(String fileName)この2つを使って
コピー元ファイルからコピー先ファイルをテキストファイルにコピー。

private Treemap readfile (String fileName)を使って
テキストファイルより任意の人数分の番号、名前、住所を読み込んで
コマンドオプションから受け取った番号に該当する情報を画面表示。

この2つを教えてください。
夜遅くですがなにとぞよろしくお願いします。
0149デフォルトの名無しさんNGNG
provateってなに?
boolenってなに?
0150148 再訂正NGNG
>>149
質問してるのにしっかり問題すらあけなくてスミマセン。

private Vector readfile (String fileName vector lines)
private boolean writefile(String fileName)この2つを使って
コピー元ファイルからコピー先ファイルをテキストファイルにコピー。

private Treemap readfile (String fileName)を使って
テキストファイルより任意の人数分の番号、名前、住所を読み込んで
コマンドオプションから受け取った番号に該当する情報を画面表示。

よろしくお願いします。
0151デフォルトの名無しさんNGNG
>>148
そのメソッドの定義がよくわからんが、
private Vector readfile (String fileName)
private boolean writefile (String fileName, Vector lines)
の間違いじゃないか?だってたぶん、
readfile=filenameを名前とするファイルの内容を読み込み、新しいVectorオブジェクトに格納して返す
writefile=filenameを名前とするファイルにlinesの内容を書き込む
だろ?

なんにもわかっとらんとみなす。1から勉強おし。
0152名無しNGNG
>>128
茨木俊秀、アルゴリズムとデータ構造、昭晃社、1989。P92
各列、各列の中央値による行のソートをされた
5*(n/5)行列に分解してn/4個を除去する方法を取るらしい。
正直ぜんぜん分からん・・・・鬱だ
0153151NGNG
すまん。なんか違うようだな。
それにしても writefile の引数がファイル名だけってのが謎だ。

一体どういうクラスなんだ?定義をぜんぶ出さんとわからんぞ。

…いやまて、手で打ち込んでタイプミスしてるってことは、
問題は印刷物でしか与えられてないのか?
0154スミマセンNGNG
>>151
そのとおりです。
甘えるつもりはないんですが、ほんとになんもわっかてないっす。
今、周りに追いつくので必死なので、
こんな単純な間違いにも気づかない厨房です。

どうかあきらめずに救いの手を。
0155151NGNG
>>154
>こんな単純な間違い
って結局どこがちがったんだ?それともちがわないのか?
ともかく、どういう問題かが伝わってくるまで手が出せんぞ。
0156スミマセンNGNG
>>153
こちらこそスミマセン。

テキストファイルの読み込み、書き込みの
資料を紙一枚いただいただけです。
問題に関しては2問合わせて4行程度です。

問1の問題は、その2つのメソッドの定義と
2つのファイル名をコマンドオプションから受け取る。
ぐらいしか、情報はありません。
問2の問題も、コマンドオプションからファイル名を
取得せよとのことです。

まだJAVAをはじめて一週間しかたっていなのですが、
よろしくお願いします。
0157156NGNG
>>155
単純な間違いとはタイプミスのことです。
すみません。

BufferedReaderとBufferedWriterを
問題の前に説明を受けました。
(2つ合わせて10分ぐらい)
あとtry catch を4回使うとも言ってました。
0158151NGNG
まず、メソッド writefile の定義が謎だってことをわかれ。

ファイルに書き込みをするってことは、
「<あるファイル>に<ある内容>を書き込む」
というふうに、投入口と品物がないと成立しない。

その引数リストでは、どうやって書き込むべき<内容>を指定するのか、
がわからん。

もし長くなければ、writefile の定義を書いてみれ。
0159151NGNG
まてよ?これまでの話をそーごーすると、
どうやら「readfile」「writefile」とかいうメソッドは、
呼び出し方だけ定義されていて、内容は自分で埋めなきゃいけないのか?
0160デフォルトの名無しさんNGNG
なんか見てておもろい。
がんばれ151と156。
0161156NGNG
>>158
言われていることは分かるのですが、
問題にはテキストファイルの内容
(ファイル名はコピー元txt(メモ帳に"あああ"と書いたもの)
とコピー先txt2)をコピーしろとしか書いてないので定義と
言われてもこんなことしか分かりません。
0162デフォルトの名無しさんNGNG
>>牡蠣フライ
まず、問題を一字一句間違いなくこの掲示板にカキコしてみ。
答えてやるから。
0163156NGNG
>>159
はい。
呼び出し方しか決まっていません。
すみません。説明が小出し小出しに
なってしまっていて。
0164デフォルトの名無しさんNGNG
>>158
読み込んだテキストを String の Vector のインスタンス変数で持つんでないの?
0165151NGNG
>>161
なんか講義自体が雑だって言いたいのか?そりゃそうかもしれんが、
おまえの説明もちんぷんかんぷんだ。特に writefile/readfile以降、
不正確な言い回しが目立つ。

>問題にはテキストファイルの内容
>(ファイル名はコピー元txt(メモ帳に"あああ"と書いたもの)
>とコピー先txt2)をコピーしろとしか書いてないので

だから言っとくが、それだけならもうわかってるんだろ。

本当は「それだけしか書いてない」じゃなくて、
「writefileとreadfileを使え」とか「BufferedReaderとPrintWriterを使え」
とか、うるさい条件がついてんじゃなかったのか?

はっきりさせろよ、伝わってないんだから。
0166156NGNG
コマンドオプションよりコピー元ファイルとコピー先ファイルを受け取り
テキストファイルの内容をコピーするプログラムを作成しなさい。

とにかく習ったものだけでプログラムをつくれとのことです。
BufferedReaderとPrintWriter writerを習いました。
0167156NGNG
>>165
すみません。
言葉が軽率でした。
0168151NGNG
>>166
じゃあ、writefileとかreadfileとかはなんだったわけ?
0169156NGNG
>>168
問題をやる前に

private Vector readfile (String fileName)
private boolean writefile (String fileName, Vector lines)

この2つを使ってやってみろ、という指示が出ました。
0170デフォルトの名無しさんNGNG
ほれ

import java.io.*;

public class FileCopy
{
public static void main(String[] args)
{
String from, to;
BufferedReader reader = null;
PrintWriter writer = null;

if (args.length != 2) {
System.err.println("usage: java FileCopy file_from file_to");
return;
}

from = args[0];
to = args[1];

try {
String line;

reader = new BufferedReader(new FileReader(from));
writer = new PrintWriter(new FileWriter(to));

while ((line = reader.readLine()) != null) {
writer.println(line);
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
reader.close();
writer.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}
0171デフォルトの名無しさんNGNG
インデントバージョン

import java.io.*;

public class FileCopy
{
  public static void main(String[] args)
  {
    String from, to;
    BufferedReader reader = null;
    PrintWriter writer = null;

    if (args.length != 2) {
      System.err.println("usage: java FileCopy file_from file_to");
      return;
    }

    from = args[0];
    to  = args[1];

    try {
      String line;
    
      reader = new BufferedReader(new FileReader(from));
      writer = new PrintWriter(new FileWriter(to));

      while ((line = reader.readLine()) != null) {
        writer.println(line);
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
    finally {
      try {
        reader.close();
        writer.close();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
  }
}
0172151NGNG
>>169
それって
「本問題を解く<前>に、練習として〜を使ってまずやってみろ」
なのか?わからんぞイヤマジデ
まあいいや、どのみち使うってことだな。

で、そのふたつを完成させてから、それを組み合わせてコピーするってわけな。
わかった。

じゃあまず。。
0173151NGNG
あ、終ってた(w
0174151NGNG
>>170-171は Vector readfile (String)とか使ってないけどいいのか?
どうよ?>156
0175156NGNG
>>170-171
丁寧にありがとうございます。

>>151
本問題です。
使って頂きたいです。
よろしかったらお願いします。

private Treemap readfile (String fileName)を使って
テキストファイルより任意の人数分の番号、名前、住所を読み込んで
コマンドオプションから受け取った番号に該当する情報を画面表示。

もし、よろしければこちも希望。
0176デフォルトの名無しさんNGNG
コミュニケーション能力の重要性を改めて認識させてくれたエビフライ事件であった。
0177デフォルトの名無しさんNGNG
>>175
まず、その番号、住所などが書かれたテキストファイルの
フォーマットを示せよ。
0178デフォルトの名無しさんNGNG
>private boolean writefile (String fileName, Vector lines)

こんなメソッドを作れって指示する教官はJavaのことを
よくわかっていないので、習うのをやめれ。
0179151NGNG
>>175
引っ張っといて悪いが、そろそろ風呂入って寝たいので
ひとこと。

readfileについて:
writefileの「lines」っていう引数名から察するに、
一行を一要素としてファイル全体をVectorオブジェクトに格納していくんだよな。
それ想像できるか?できないならいえよ。

それには「BufferedReaderから一行ずつ読み込む」ってことと、
Vectorオブジェクトの扱い方がわかってればできるはずだよな。

で、どっちがわかんないのかは知らんが、とりあえず
とにかくそこんとこAPIドキュメントを読め。

Javaはじめて一週間ってことは、ひょっとして基本的な構文の理解から
すでにあやしいのか?そこまではちょっとな。。
0180151→風呂NGNG
>>178
それはすでに暗黙の前提。たしかに156は不幸ではある。
0181156NGNG
>>177
すみません。
問題の意味もよく分かっていないので
テキストファイル自体にどのように番号、名前、住所を
書き込んだらよいのかも分かっていません。
メモ帳にそれらをずらずらっと書き込んだらよいのでしょうか。
ファイル名はTXT3にしようと考えています。
0182156NGNG
>>151
長い時間ありがとうございました。
"もうめんどうくせぇ"
と思いでしょうが、また次の機会もよろしくお願いします。
基本的な構文をきちんと復習します。
本当にありがとうございました。
0183デフォルトの名無しさんNGNG
ほれ
import java.io.*;
import java.util.*;
public class Address
{
public static void main(String[] args)
{
String num;
TreeMap map;
String[] item;

if (args.length != 1) {
System.err.println("usage: java Address [number]");
return;
}
num = args[0];
try {
map = readfile(addressFile);
if (!map.containsKey(num)) {
System.out.println("no such number");
return;
}
if ((item = (String[]) map.get(num)) != null) {
System.out.println("number: " + num);
System.out.println("name: " + item[0]);
System.out.println("addr: " + item[1]);
}
else {
System.err.println("no value defined");
}
}
catch (Exception e) {
e.printStackTrace();
}
}
private static TreeMap readfile(String file)
throws FileNotFoundException, IOException
{
BufferedReader reader;
TreeMap map;
StringTokenizer st;
String line;
reader = new BufferedReader(new FileReader(file));
map = new TreeMap();
while ((line = reader.readLine()) != null) {
String num;
String[] item = new String[2];
st = new StringTokenizer(line, ",");
num = st.nextToken();
item[0] = st.nextToken();
item[1] = st.nextToken();
map.put(num, item);
}
return map;
}
private static String addressFile = "TXT3";
}
0184デフォルトの名無しさんNGNG
5,あいうえ太郎,東京都3
6,あいうえ花子,東京都3
1,山田太郎,東京都1
2,山田花子,東京都1
3,砂糖太郎,東京都2
4,砂糖花子,東京都2
0185デフォルトの名無しさんNGNG
インデントバージョン

import java.io.*;
import java.util.*;
public class Address
{
  public static void main(String[] args)
  {
    String num;
    TreeMap map;
    String[] item;
  
    if (args.length != 1) {
      System.err.println("usage: java Address [number]");
      return;
    }
    num = args[0];
    try {
      map = readfile(addressFile);
      if (!map.containsKey(num)) {
        System.out.println("no such number");
        return;
      }
      if ((item = (String[]) map.get(num)) != null) {
        System.out.println("number: " + num);
        System.out.println("name: " + item[0]);
        System.out.println("addr: " + item[1]);
      }
      else {
        System.err.println("no value defined");
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  private static TreeMap readfile(String file)
    throws FileNotFoundException, IOException
  {
    BufferedReader reader;
    TreeMap map;
    StringTokenizer st;
    String line;
    reader = new BufferedReader(new FileReader(file));
    map = new TreeMap();
    while ((line = reader.readLine()) != null) {
      String num;
      String[] item = new String[2];
      st = new StringTokenizer(line, ",");
      num = st.nextToken();
      item[0] = st.nextToken();
      item[1] = st.nextToken();
      map.put(num, item);
    }
    return map;
  }
  private static String addressFile = "TXT3";
}
0186156NGNG
>>183-185

ありがとうございました。
基本をまずはしっかり復習して
がんばりたいと思います。

本当にありがとうございます。
0187112ですNGNG
どうも今いち、わからないです。どなたか、今一度お教えください。
よろしくお願いします。
0188 NGNG
>>187
とりあえず、自分で書いたコードみせてみ。
間違ってるところ教えてやるから。
0189デフォルトの名無しさんNGNG
C++で画面を100×100に分割し、指定されたブロックから指定された
ブロックまでの経路の全通りを作るプログラムを作りたいのですけど
経路の全通りを作る部分がわかりません。教えてください。
ただし一度通過したブロックは通過できない、経路は最短距離
ではない、です。
こんな感じです
●○○○○○○
○○○○○○○
○○○○○○○
○○○○○●○
○○○○○○○
○○○○○○○
↓4回、→5回、↑一回って経路も必要なのです。
0190デフォルトの名無しさんNGNG
>>189
迷路をスネークパターンで生成する技術が応用できますね。
0191デフォルトの名無しさんNGNG
100×100で最短経路以外も含めると総数が膨大になりそうな予感。
0192デフォルトの名無しさんNGNG
>>191
あたりまえだろ?
これはその総数を計算で求めるんじゃないの?
0193デフォルトの名無しさんNGNG
>>192
総数でいいんだよね?
全通りを「作る」って書いてあるが・・
0194189NGNG
経路そのものがほしいのです。
総数は膨大になると思いますが・・・
0195デフォルトの名無しさんNGNG
>>194
本当に100×100?
0196デフォルトの名無しさんNGNG
>>194
 というか、100×100での経路の全通りを求めるのが宿題なの?
 もし、それが宿題の自分なりのアプローチの1プロセスだとしたら、
そのアプローチの仕方はまずいと思う。
0197189NGNG
100×100でなくてもよいのですが、
「こういうアルゴリズムで作っていく」
というのが教えてほしいのです。
0198デフォルトの名無しさんNGNG
>>197
そういうことだったら。って、言葉で上手くできる自信ないが一応試みてみます。
基本的には再帰。で、一度通ったところは配列作ってチェックしていく。

とりあえず、めんどくさいのでグローバルに定義されている二次元の配列aに、
x,yを通ったか通ってないかを、1か0かで保持しているとしましょう。
また、今までの経路を何か配列か何かにつめてとおきましょう。

地点x,yから、ゴールまでの全ての経路を求める関数f(x,y)を考えるとします。

f(x,y)では、次のような処理をします。
(1)そこがゴールならば、今までの経路が答えの一つなので、それを保持します。
 で、一つ前に戻ります(return)。

(2)そこがゴールでないなら、
(2-1) 今居る地点を「通ったと記憶します」(a[x][y]=0)。また経路の配列にも
    記憶します。
(2-2) 上、右、左、下、それぞれについて。
選んだ隣接ブロックが存在して、そこにはまだ行ったことがないなら
ax,ayにその隣接ブロックの場所を入れてf(ax,ay)を呼び出します。
(2-3) 一歩もどります。その前に、今いる地点を「通っていない」状態に戻し
   ます(a[x][y]=0)、あと経路の配列も一つ戻します。で、return

これで、適当な初期化してfを呼び出せば大丈夫です。
0199198NGNG
補足。

高速化するために枝狩りした方がこの場合はいいと思います。
fを呼び出すたびに、「現在の地点からゴールまでたどり着く
可能性があるか」を判定し、それがなければreturnするのが
いいかと思います。
0200198NGNG
>(2-1) 今居る地点を「通ったと記憶します」(a[x][y]=0)。また経路の配列にも
    記憶します。
a[x][y]=1ですね、わかると思うけど。
0201デフォルトの名無しさんNGNG
しかしな、15x15でも、やってみたら4千万通り以上の経路があったぞ。
(40116600通り)

100x100の全ての経路を数えるだけでも一筋縄では行かない。
まして、全部プリントしたら、一生かかっても終わらない。
0202189NGNG
>>198-201
どうもありがとうございました。
15×15で4千万通り以上ですか・・・
ちょっと考え直してみます。
0203デフォルトの名無しさんNGNG
>>189
http://www.google.com/search?as_q=%83o%83b%83N%83g%83%89%83b%83N
0204デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/prog/1004278856/147-
誰かめんどうみてやれや。
0205五目並べNGNG
まずは終了判定部分、つまり石が5個並んだ事をチェックする部分を書いてみればいいんじゃないかな。
あとはおのずと道が開けていくと思うんたげど。
0206デフォルトの名無しさんNGNG
>>205
まあ、そうだねぇ。まず盤面を表すクラスを作って、その中で、3、4,5が何個あるか
を判定するメソッドを書いてみるあたりからはじめるのがよいかねぇ。
0207デフォルトの名無しさんNGNG
連珠の特殊なルールはストラテジパタンですか…。
0208デフォルトの名無しさんNGNG
PROLOGで、OX(まるぺけ)ゲーム作るんですが。
O-O
XX-
---
って状態で、Oが次の手をどう打つかっていうのを、
move([[o,-,o],[x,x,-],[-,-,-]], o, B)
と与えると、Bに [[o,-,o],[x,x,o],[-,-,-]] を代入する
みたいなのを作りたいんです。

「i 行目に x が2つ並んでなかったら」とか
「i 列目に x が2つ並んでたら」とかいうロジックを
どうやって書いたらいいっすか。
0209デフォルトの名無しさんNGNG
>>208
いろんなやり方あるが

count([Item|Rest], Item, N):-!, count(Rest, Item, M), N is M + 1.
count([_|Rest], Item, N):-!, count(Rest, Item, N).
count(_, _, 0).

futatsu(List, Item):-count(List, Item, 2).

とか使うと簡単では?

3x3なら羅列してもできちゃうけど。
0210デフォルトの名無しさんNGNG
○の次の手は[[o,o,o],[x,x,-],[-,-,-]] ではないのか?
0211デフォルトの名無しさんNGNG
>>152の
>各列、各列の中央値による行のソートをされた...

というのは>>128あての(順列を求める問題の)回答ではなくて
「ソートせずに中央値を求める」方の問題の回答ですね
これですか。

 ttp://www-or.amp.i.kyoto-u.ac.jp/members/ibaraki/algo.shtml

4. 整列のアルゴリズム  の
「第p要素を選ぶSELECT」

 ttp://www-or.amp.i.kyoto-u.ac.jp/members/ibaraki/shokodo/select.c

全体をソートするのでなくてグループに分けてソートして
それらの中央値を集めて...
なにかやってるみたいですね。
0212 NGNG
>>211
その、ソースちらっと眺めんですが、何してるのかよくわからんっす(^^;
誰かしっかり読んだ方解説お願いできませんか?
0213212NGNG
って、理解(^^;
>>121
のやり方で、基準とする要素を適当に選ぶのではなく、中間値
の中間値を採用するってこと・・ですよね、多分。
 で、最悪でO(N^2)になるのをさけると。
0214デフォルトの名無しさんNGNG
>>152
Median のアルゴリズムは情報系の学生には常識だと思ってたけど,
結構知らない人が多いみたいだね.
ちなみに,茨木先生の本に書いてある5個ずつに分けるアルゴリズムよりも,
徳山先生が情処かどっかに解説書いてたサンプリングによる方法の方が平均的
には圧倒的に速くて実用的.こっちを勉強しなよ.
0215208NGNG
>>209
ありがとうございます。
これから試してみます。なるほどなぁ。

>>210
鬱氏。
0216デフォルトの名無しさんNGNG
最悪の場合はO(n^2)になっちゃうが、
>>121 の考え方をHaskellで素直に書くとこんな感じだね。
すごく楽だ。

nearest_to_median :: Int->[Int]->[Int]
nearest_to_median k list =
 map snd (nth_smaller k distance)
  where distance = [(abs(x - median), x) | x <- list]
     median = last (nth_smaller (length list)/2 list)

-- 小さい方からn個を求める。
nth_smaller n list :: Int->[Int]->[Int]
nth_smaller n (m:more)
 | n == 0   = []
 | otherwise  = if (length left) < n then
           left ++ m:(nth_smaller n - (length left) - 1 right)
          else
           nth_smaller n left
          where left = [x | x <- more, x < m]
             right = [x | x <- more, x >= m]
0217216NGNG
× nth_smaller n list :: Int->[Int]->[Int]

○ nth_smaller n list :: (Ord a) => a->[a]->[a]
0218デフォルトの名無しさんNGNG
>>214
 サンプリングを取るっていうのは、適当に何個か抜き出して、そのMedianを採用
するってこと? この場合何個抜き出せばいいかっていうことに対して何か指針は
あります?
 最悪値をo(n)に抑える為に、要素を定数で割った数だけサンプリングすることに
なるんでしょうか。
0219デフォルトの名無しさんNGNG
引数が現在の局面で返り値が次の局面という評価関数を作るのか。
面白いね。

手続き指向で考えると、盤面を配列に持って手が進むごとに代入によって変化
していく作りになりがちな気がする。っていうかそんな風に作った。
ちょっと工夫が足りなかったと反省。
0220デフォルトの名無しさんNGNG
>>216
再帰的なプログラムって関数型言語で書くと綺麗にかけるねぇ。
0221超初心者の名無しさんNGNG
>>1さんへ
弟ではなく、妹ですがどうぞ、力を貸してください。
3問あるのですが、この問題が試験に出るそうなので、どうかお願いします。

/*
演習課題1.配列と整数nを与えて、その配列の先頭からn個の要素の和を
求める関数テンプレートを定義しなさい。

ヒント:整数配列の和を求める関数

int arraySum(int a[], int n)
{
int s = 0;
for (int i = 0; i < n; i++)
s += a[i];
return s;
}

*/

#include <iostream>
#include <conio>
using namespace std;

//関数テンプレート



int main(void)
{
int a[] = { 1, 2, 3}; //大きさ3の整数配列の例
double b[] = { 4.5, 6.7}; //大きさ2の実数配列の例

cout << arraySum(a, 3) << endl; // 出力は6。 arraySum<int>と書いても同じ。
cout << arraySum(b, 2) << endl; // 出力は11.2。arraySum<double> 〃

cout << "\Press any key to continue... ";
getch();
return 0;
}
0222超初心者の名無しさんNGNG
続きです。お願いします。
演習課題2.要素の型をクラスパラメータとした、2次元ベクトルクラステンプレート
を定義しなさい。


参考:要素がdouble型の2次元ベクトルクラスの定義

class Vec {

friend ostream &operator<<(ostream &os, const Vec &v); //フレンド関数の宣言

private:
float x, y;

public:
Vec(double xx = 0, double yy = 0) //コンストラクタ
{
x = xx;
y = yy;
}

Vec operator+(const Vec &b) const // メンバ関数として、+演算子を多重定義
{
return Vec(x + b.x, y + b.y);
}

};
ostream &operator<<(ostream &os, const Vec &v)
{
os << "(" << v.x << ", " << v.y << ")"; // フレンド関数として<<を定義
return os;
}

*/

#include <iostream>
#include <conio>
using namespace std;

//クラステンプレートの定義



int main(void)
{
Vec<int> intVecA(1, 2), intVecB(3, 4), intVecS; //整数ベクトル
Vec<double> doubleVecA(1.1, 2.2), doubleVecB(3.3, 4.4), doubleVecS;
//実数ベクトル
intVecS = intVecA + intVecB;
doubleVecS = doubleVecA + doubleVecB;

cout << intVecS << endl; //出力: (4, 6)
cout << doubleVecS << endl; //出力:(4,4, 6,6)

cout << "\Press any key to continue... ";
getch();
return 0;
}
0223デフォルトの名無しさんNGNG
てんぷれーと<たいぷねーむ てぃー>
てぃー あれい_さむ(てぃー *あ、いんと ん)
{
 てぃー さむ=0;
 ふぉー(いんと い=0;い<ん;い++) {
  さむ+=あ「い」;
 }
 りたーん さむ;
}
0224超初心者の名無しさんNGNG
さらに続きです。

/*
問題3 スタックのデモプログラム
文字列を入力し、1文字ずつスタックに入れて、逆にスタックから1文字ずつ
取り出すことによって、逆順の文字列を出力するプログラムを作りなさい。
文字列型は使用しないこと。

ヒント:空白を含めて、行末まで1文字ずつ読む部分は次のように記述する
for (;;) { //無限ループ
char ch = cin.get();
if ( ch == '\n' )
break;
// ここで、chをスタックに入れる;
}
*/

#include <iostream>
#include <conio>
#include "stack_tp_l.h"
using namespace std;

int main(void)
{


cout << "\n\nPress any key to continue... ";
getch();
}
これから、私もできないなりに勉強をします。
お願いします。
0225デフォルトの名無しさんNGNG
>>221-224
もう答え書いてあるも同然…
C++とかSTLの本買って嫁嫁。
0226デフォルトの名無しさんNGNG
template<class T>
class Vec {
private:
T m_x, m_y;

public:
Vec(T x=0, T y=0) : m_x(x), m_y(y) { }
Vec operator+(const Vec& rhs) const
{ return Vec(m_x + rhs.m_x, m_y + rhs.m_y); }
friend ostream &operator<<(ostream& lhs, const Vec& rhs)
{ lhs << "(" << rhs.m_x << ", " << rhs.m_y << ")"; return lhs; }
};
0227デフォルトの名無しさんNGNG
stack<char> stk;

stk.clear();

for (;;) { //無限ループ
 char ch = cin.get();
 if ( ch == '\n' ) {
  break;
 }
// ここで、chをスタックに入れる;
 stk.push(ch);
}

while ( !stk.empty() ) {
 cout<<stk.pop();
}

// 初めてSTL使ったんだけど、これで合ってる?
0228214NGNG
>>218
n 個の要素から K 番目に大きい要素を取り出すアルゴリズムは以下の通りです.
1. √n 個のサンプルをデータからランダムに選ぶ.
2. サンプルをソートして,K/√n - 2√√n 番目に大きいサンプル x と,
K/√n + 2√√n 番目に大きいサンプル y を求める.
3. n 個の要素から,y より小さなデータを全て破棄する.K 個未満になって
しまったら 1. からやり直し.
4. その中で x より小さなデータを全て選ぶ.K 個以上になってしまったら
1. からやり直し.
5. y 以上 x 以下のデータをソートして,大きい方からデータを選び,
全体で K 個目選ばれるまで続ける.
6. 終了

上記のアルゴリズム中,ステップ 3., 4. で失敗して 1. からやり直す確率は
4% 以下らしい(チェルノフの不等式より).だから,1.〜4. を繰り返す回数は
平均すれば約 1.04 回.全体に対する処理は全て O(n) で,√n 個のサンプルに
対する処理は O(√n log n).全体に対する処理がさほど多くないので速いと
いうのがこのアルゴリズムの売り.

チェルノフの不等式の他の応用例としては,テレビの視聴率調査が分かりやすい
かな?たった数千軒のサンプルで数千万世帯の推測がかなり高い確率であっている
ということは,チェルノフの不等式が保証してくれます.

参考文献:
徳山豪, "ランダムアルゴリズムの話題から", 電子情報通信学会誌, vol.77,
no.9, pp.957-967, 1994. (いくつか細かいミスがあります.要注意.)
0229218NGNG
 詳しい解説ありがとうございます。

 細かいところで、5番の処理で残ったデータ数mに対しo(mlog m)になるのが
気になりましたが、可能性としてはこのmが√nより大きいオーダになってしまう
ことがあるとしても、現実的には、4√nくらいを中心に散らばるから問題ない
ということですね。 気になるなら再帰的にやればいいのかな。

 勉強になりました。
0230デフォルトの名無しさんNGNG
sum=1/2~n-1 nの値を入力し答えを出力するプログラムを完成させなさい。


どのように考えればいいのでしょう?
0231デフォルトの名無しさんNGNG
>>230
問題文の意味不明。もう少しわかりやすく書け。
話はそれからだ。
0232デフォルトの名無しさんNGNG
えーと、
1
__
n-1
2 nに整数値を入力してこの式の答えを出力させなさい

但し
1 1
___ __
0   -3
2 , 2   などにも対応させること、ということです。
0233デフォルトの名無しさんNGNG
ずれまくり・・・欝

2のn-1乗ってしたかったんですが・・。
0234デフォルトの名無しさんNGNG
>>230
nの入力を促す
  ↓
2の(n-1)乗を計算する
  ↓
結果を表示する
  ↓
(゚Д゚)ウマー
0235デフォルトの名無しさんNGNG
>>230
double func(int n)
{
return pow(0.5, (double)n - 1.0);
}
0236名無しですけどNGNG
�@自然対数の底eを求めるプログラムを作成する。
 自然対数の底eは、無限級数eにより次のように定義される。
 e≒1+1/1!+1/2!+1/3!+1/4!+…+1/n!

�Aライプニッツの公式により、円周率の近似値を求めるプログラムを作成
 しなさい。
ヒント…マイナスとプラスになる項を別々に考えると楽。

さっぱりわかりません。教えてもらえませんか?
0237デフォルトの名無しさんNGNG
#include <math.h>
void main()
{
printf("�@: %lf\n", M_E);
printf("�A: %lf\n", M_PI);
}
0238デフォルトの名無しさんNGNG
>>236
とりあえず何がわからないか整理しろ。
以下の項目それぞれについて「わかる」か「わからない」か答えてみろ。
1.自然対数
2.底
3.無限級数
4.n!
5.自然対数の底eの求め方
6.ライプニッツの公式
7.円周率
8.近似値
9.マイナスになる項、プラスになる項
10.円周率の近似値の求め方
0239236ですけどNGNG
1〜10まではわかるのですが、プログラムの仕方がわかりません。
いろいろ本とかで調べたのですが、どうしてもエラーがでて・・・
どこが間違ってるのかさえもわかりません。
0240デフォルトの名無しさんNGNG
>>239
エラーの出る部分を載せてみ。
0241236ですけどNGNG
上の�Aの問題ですが、
円周率=4(1/1-1/3+1/5-1/7+1/9-1/11+…-1/47+1/49)を使わなきゃみたいなんですよ。
それで
main(){
int i,j,k,l,m,sum=0i
for (i=1;i<=49;i=i+4)
sum+=i;
for (j=3;j<47;j=j+4)
k=1/i;
l=-(1/i);
m=4*(k+1);
printf("%d\n",m);
}
といれました。どこが間違ってるんでしょうか?
0242236ですけどNGNG
追加…結果円周率3.181とでなきゃいけないみたいです。
0243デフォルトの名無しさんNGNG
>>241
まず数学の勉強をやり直した方が…
これはプログラム以前の問題…
0244236ですけどNGNG
やっぱり・・・涙
もうちょっとがんばってみます。ありがとうございました。
0245236ですけどNGNG
やっぱ教えてください。初めてなのでC言語自体がよくわかりません。
0246236ですけどNGNG
2行目の0iは0;です。5行目の47の前に=を追加してください。
7行目のiはjです。8行目の1はlです。間違えまくってすみません。
0247デフォルトの名無しさんNGNG
>>241
int では、その計算はできません。float か double にしなさい。
0248デフォルトの名無しさんNGNG
>>241
sumは何に使ってるの?
0249デフォルトの名無しさんNGNG
>>241
for文は { } を使って範囲を明確にする方が良いです。そうしなさい。
↓こんな感じで

for( ; ; ){

}
0250236ですけどNGNG
>>248
sumはちょっと自分でもわけわからず使ってました。
>>249
わかりました。やってみます。
0251236ですけどNGNG
>>247
すいません。見落としてました。
floatでやってみます。
0252デフォルトの名無しさんNGNG
>>251
修正したら、またソース載せな。
0253遭難中NGNG
教えてもらえますか?
0254デフォルトの名無しさんNGNG
まず。
main関数の
struct bodyStr *body;

と、

do{
data[i]=readbody(num);
}while(body[i++].a);

を説明せよ。何をやってるのか自分で整理しろ。
0255デフォルトの名無しさんNGNG
あともう一度ソースアップして、ここで。
0256デフォルトの名無しさんNGNG
問題文もね
0257遭難中NGNG
すいません、解決しました
0258デフォルトの名無しさんNGNG
ほんとかいな。ま、いいけどな。
0259デフォルトの名無しさんNGNG
パスカルで線形リスト来週までに書いて来い、だとよ…
当方、ポインタ、レコードわからんのですが
0260デフォルトの名無しさんNGNG
とりあえず考え方教えてほすぃ( ゚д゚)
今までクイックたらマージたらしか書いてないのに無理だ(;´Д`)
0261デフォルトの名無しさんNGNG
いみわからん
0262デフォルトの名無しさんNGNG
>>259
でも実際、ポインタとレコードが分からんかったら線形リストは無理じゃん?
0263デフォルトの名無しさんNGNG
>>262
今必死に理解しようとしているところ…

データを格納しようとするとき、新たに動的にレコード型の変数を作成する。
レコード型の最後だったやつのポインタの部分を新しく作ったレコード型の変数を指すようにする。
新しく作ったレコード型変数のポインタの指すところをnilにする。
適当なタイミングでデータを格納する。

…これでいい?
0264デフォルトの名無しさんNGNG
>>263
OK!
0265259NGNG
だが書けんっ
(`□´)くわ〜っ(`□´)くわ〜っ
0266デフォルトの名無しさんNGNG
>>259
型とデータの定義あたりは出来るかな?
0267デフォルトの名無しさんNGNG
>>263
struct list_t {
  void *data;
  struct list *next;
};
> データを格納しようとするとき、新たに動的にレコード型の変数を作成する。
struct list_t list1; /* list1が最後のリストとする */
struct list_t list2;
> レコード型の最後だったやつのポインタの部分を新しく作ったレコード型の変数を指すようにする。
list1.next = &list2;
> 新しく作ったレコード型変数のポインタの指すところをnilにする。
list2.next = NULL;
> 適当なタイミングでデータを格納する。
list2.data = malloc(sizeof(data));
memcpy(list2.data, &data, sizeof(data));

# C言語だけどな...
0268259NGNG
type
charString =packed array [1..20] of char;
ptr =^item;
item =record
next:ptr;
word:charString;
end;

こんなもんかな…
0269259NGNG
って半角スペースは続けては打ったら潰れるんだった…鬱
0270259NGNG
何度もスマソ…
>267
Cわからん…すまん…馬鹿だから
0271デフォルトの名無しさんNGNG
>>259
お、すげー。出来てるじゃん。

そしたら線形につなげる事はとりあえず置いといて、
itemをひとつ確保した後、そこに何かデータを入れてみて。
varブロックも含めて書いてね。
0272デフォルトの名無しさんNGNG
var ch:char;
   word:charString;
   length:inetger;

begin
repeat
 read(ch)
 until (ch in ['A'..'Z','a'..'z','.']);
 word[1] := ch;
 while (ch in ['A'..'Z','a'..'z']) do
  begin
   length := length+1
   if length <= 20 then
 word[length] := ch;
   read(ch)
  end
end;

>271
…一応…でも不安だ…
    
0273デフォルトの名無しさんNGNG
C言語の質問なんですが、fgetsで受け取った文字列を配列に一文字ずつ
入れるにはどうすればいいですか?
0274デフォルトの名無しさんNGNG
>>273
配列に入れる。
//MSDNからコピペ
FILE *stream;
char line[100];

if( (stream = fopen( "fgets.c", "r" )) != NULL )
{
 if( fgets( line, 100, stream ) == NULL)
  printf( "fgets error\n" );
 else
  printf( "%s", line);
 fclose( stream );
}
0275デフォルトの名無しさんNGNG
つーか>273がなにを悩んでいるのか、マジ疑問。
0276273NGNG
>>274
できました。ありがとう。

>>275
実は初心者なんです。
0277名無しさんNGNG
>>276
[プログラム板] お勉強ページ 勝手にリンク 第2版
http://pc.2ch.net/test/read.cgi/tech/967778156/
そのレベルならば上のスレに参考になるサイトがいっぱいあるよ。
0278デフォルトの名無しさんNGNG
質問する奴よぉ。
最低限、質問の意味がこちらにわかるように書いてくれよな。
お前らの質問の仕方を見てるとよぅ、こんなに日本語が不自由な奴ら
じゃ、プログラムなんてできなくて当たり前、としか思えねえよ。

な、とにかく、質問の意味がこちらにわかるように書いてくれよな。
そこんとこ夜露死苦。
0279デフォルトの名無しさん NGNG
>宿題見てやるよ
見ていらねえよ! オマエに分かるのかボケ プ
0280デフォルトの名無しさんNGNG
>>278
質問する奴自身が
問題の意味を理解してない場合なんかは
仕方ないような気もする…。
0281デフォルトの名無しさんNGNG
> 見ていらねえよ!

日本語<以下略>
0282デフォルトの名無しさんNGNG
>>280
そんな奴は無視でいいと思われ。
0283271NGNG
>>272
う、すまぬ、書き方が悪かったみたいだ。
由緒正しいPascalだと文字列の扱いがそんなに面倒になるのかな。
課題に「リストは文字列を保持すべし」という指定があるのかな。
もし無いなら、単純に整数値をひとつだけ保持する、という風に変えた方が
本筋を見失わないと思うんだけど。(後から直してもいいけど)

type
 listPtr = ^item;
 item = record
  data: integer;
  next: listPtr;
 end;

という事にして
item型の領域をひとつ確保して、そのdataフィールドに値を設定する、
というのをやってみて欲しいんだけど。
0284259NGNG
ぐ…友達に騙された…まだ期限は先だ…
>283
頑張りますわ…一応、リストの先頭を削除したり、見つかった文字列を先頭にもってきたり
と、多彩な問題…(;´Д`)
0285271NGNG
大丈夫そうですね。んじゃ、がんばって。
0286デフォルトの名無しさんNGNG
>>284
(1)リストへのアイテム追加
(2)リストからアイテムを取り外す
(3)目的のアイテムがリストのどこにあるか探索
の3つの操作を作れば、あとはこの組み合わせでたいていのことはできるぞ。
0287 NGNG
例文 :This is a pen.->Uijt jt b qfo.
上の文はアルファベットを1文字後ろにずらしているんですが引数の文
字がアルファベットだったら1文字後ろにずらした文字を返し、そうで
なかったら、そのまま返す関数を定義する。それを使ってキーボードか
ら入力した英文テキストを暗号化するプログラムを誰か教えてくれーー。
あとデータの終りはEOF(ctrl-d)で判断するようにしたいんですが。
0288デフォルトの名無しさんNGNG
配列aを昇順にソートして表示したいのですが、何も表示されません。
よろしくたのみます。
#include<stdio.h>

int main()
{
char a[5];
char b;
int i,j;

a[0]='9';
a[1]='3';
a[2]='2';
a[3]='1';
a[4]='8';

for(j=0;j<5;j++){
for(i=0;i<5;i++){
if(a[i]>a[i+1]){
b=a[i];
a[i]=a[i+1];
a[i+1]=b;
}
}
}
printf("%s\n",a);
}
0289デフォルトの名無しさんNGNG
>>288
その1:i=4 のときに i+1 で a[5] にアクセスしてしまう。i のループは for(i=0;i<4;i++) にしとかないと。
その2:printf で表示するときに、文字列 a に終端を示す '\0' がない。最後に追加しとかないと。
0290デフォルトの名無しさんNGNG
>>287
はい、例によってどこが解かりませんか。

1.キーボードから例文テキストを入力する
2.アルファベットだったら1文字後ろにずらした文字を返し、そうで
なかったら、そのまま返す関数
3.2の関数を使ってテキストを暗号化する
4.暗号化したテキストを出力する

それから、EOFは Ctrl-D じゃないです。
0291デフォルトの名無しさんNGNG
>290
2.3ですね
0292288NGNG
>>289
できました。いやぁ、助かりましたよ。
0293デフォルトの名無しさんNGNG
>>290
EOFは
MS-DOSなら、ctrl-z
UNIXなら、ctrl+d
じゃないっけ?
0294290NGNG
>>291
じゃあとりあえず2から。
その関数は、引数は暗号化前の文字で、戻り値は暗号化後の文字だから、
char f(char c)
{
}
って感じだろうか。この中に

引数の文字がアルファベットだったら1文字後ろにずらした文字を返し、そうでなかったら、そのまま返す

という処理を、自力で書けない?やってみそ。
0295290NGNG
>>293
そーだっけ。ごめ。
0296デフォルトの名無しさんNGNG
速攻試したら成功しました。
教えてくれてありがとう。
0297デフォルトの名無しさんNGNG
>>294
初心です。

char f(char c)
{ char cr
int cs=(int)c
  if ((cs >= 65 && cs <= 90) ||(cs >= 97 && cs <= 122)){
if (cs=90||cs=122){
cs-=25
}else{
cs++
}

} else {

cs=0



}

if (cs=0){
cr=c
}else{
cr=(char)cs
}


return cr}
0298297NGNG
すいません。

} else {

cs=0

} //←ここに括弧足りませんでした。

}
0299297(M)NGNG
ボコボコにして欲しいage.
0300デフォルトの名無しさんNGNG
>>297
>  if ((cs >= 65 && cs <= 90) ||(cs >= 97 && cs <= 122)){

文字コードを直接書かない。マクロ使う。is〜で始まるマクロを調べよ。

>if (cs=90||cs=122){

このままだとcsに代入してしまう。

あと、後ろにずらすなら%演算子を使った方が賢い。
使い方は自分で調べよ。
無駄な変数とかがあるのはマアイイヤ。
0301デフォルトの名無しさんNGNG
とりあえず、行末にはセミコロン付けような。
あと、関数の先頭で{の直後に変数宣言するのはやめような。
んでもって、数値で判定するのは見難いから'a'とか'Z'とかにしような。
if(cs=0){は常に真になるから==にしとこうな。
関数最後の}も改行してから書こうな。

上を直してからもう一回書いて下さい。見難くて解析する気も起きません。
0302297(M)NGNG
>>300
ありがとうございます。
興奮して"=="を忘れました。。。マクロも勉強します。

ここってこういう事をするスレなんですかね。(ワカラナイ・・)
そうだとありがたいです。また来たいです。それでは。
0303デフォルトの名無しさんNGNG
>>302
基本的に「わからないから答えクレ」というスレではないことは確か。
0304デフォルトの名無しさんNGNG
本来は麻衣ちゃんと戯れるスレでした。
0305デフォルトの名無しさんNGNG
#include <stdio.h>

int hanbetu(int a,int b);

main()
{
int a,b;
printf("小さい数字は %d です",hanbetu(scanf("%d",&a),scanf("%d",&b)));
}

int hanbetu(int a,int b)
{
if(a<b)
return a;
else
return b;
}

↑このコードが期待したとおりに動きません。
#include <stdio.h>

int hanbetu(int a,int b);

main()
{
int a,b;
printf("小さい数字は %d です",hanbetu(2,3));
}

int hanbetu(int a,int b)
{
if(a<b)
return a;
else
return b;
}
↑これなら動きます。
0306297(M)NGNG
char f(char c)
{
   char cr ;
   int cs=(int)c ;

  if ((cs >= 'A' && cs <= 'Z') ||(cs >= 'a' && cs <= 'z')){
    
      if (cs==90||cs==122){
           
            cs-=25 ;

      }else{

        cs++ ;

      }

  } else {

    cs=0 ;

  }

   if (cs==0){

     cr=c ;

   }else{

     cr=(char)cs ;

   }

   return cr;
}

すいませんでした。>>301
0307デフォルトの名無しさんNGNG
自己レス。
ひょっとして、hanbetu 関数には引数としてscanf関数は入れられないのでしょうか?
schemeならできるのに...
0308デフォルトの名無しさんNGNG
>307
scanfのプロトタイプを参照しよう
0309デフォルトの名無しさんNGNG
if (cs==90||cs==122){
が直ってないんじゃ、片手落ちだよ。
0310デフォルトの名無しさんNGNG
hanbetu()は
(a>b)?a:bで済むな
0311デフォルトの名無しさんNGNG
C でwait かけるにはどうしたらいいの?
0312デフォルトの名無しさんNGNG
(a<b)?a:bだった。
0313297(M)NGNG
>>309
ほんとにすいません。両手落ちです。
ところでint型の変数に'A'って数値で代入できるんですね!
御指摘ありがとうございました。
0314デフォルトの名無しさんNGNG
>311
sleep()
0315デフォルトの名無しさんNGNG
>313
う〜ん、ホントは(int)'A'が正しいと思うよ。コンパイラに文句いわれないなら別にいいけど。
0316デフォルトの名無しさんNGNG
OS依存(マジレス)
>>311
0317デフォルトの名無しさんNGNG
>>310
最初の内は ? : なんて無理に使う必要ないんじゃない?
ifで書けるんだから。
無理して使おうとすると>>312のようになる。
0318デフォルトの名無しさんNGNG
> scanfのプロトタイプを参照しよう
プロトタイプでは無くて仕様だな。
scanf()の戻り値は格納に成功した入力フィールドの数を返し、
ファイルエンドを読み込んだ場合にはEOFを返す。
よって、scanf("%d",&a)は入力が数値だったら1,
数値でなかったら0を返す。
0319デフォルトの名無しさんNGNG
scanfは読み取った数字の個数を返すのじゃないのかい?
0320319NGNG
ごめん、かぶった
0321デフォルトの名無しさんNGNG
>>315
C言語の場合、'A' の型はintだからキャスト不要だよ。
0322デフォルトの名無しさんNGNG
>>318
なるほどぉ。
だから何を入力しても1しか返ってこなかったんだ。
ありがとう。
0323デフォルトの名無しさんNGNG
>>315
> ホントは(int)'A'が正しいと思うよ。
C++なら'A'はchar型、Cなら'A'はint型
0324デフォルトの名無しさんNGNG
>>316
Windows2000でやってます。
ところで、Cってコンソールレベルでの互換性があるってきいたけど、waitは違うの?
0325297(M)NGNG
>>315
ありがとうございます。そうするようにします。
M欲求が満たされました。
0326デフォルトの名無しさんNGNG
>>324 少なくともCの標準関数にはwait()は無いです

それからコンソール入出力とwait()となんの関係がありますか?
タスク(スレッド?)関係の関数と思いますが。
0327デフォルトの名無しさんNGNG
>>316 >>324 >>326
だから、sleep()だって
0328デフォルトの名無しさんNGNG
エラー E2268 b.cpp 6: 未定義の関数 'sleep' を呼び出した(関数 main() )

ってなりますが。
0329デフォルトの名無しさんNGNG
>>324
C標準でウェイトかけるなら、clock関数で時間を計測しながら希望の時間が経過するまでループ待ち・・・かな。
0330デフォルトの名無しさんNGNG
>>327 少なくとも C の標準関数には sleep() は無いです。
0331デフォルトの名無しさんNGNG
>sleep()
それは"windows.h"に毒されすぎですか?(w
Cでやるなら329が普通
0332デフォルトの名無しさんNGNG
>>327 >>331
Win32API なら sleep() ではなく Sleep() だが。
0333デフォルトの名無しさんNGNG
>>329
それはさすがにちょっと…。
この程度で許してもらえんかね。

#ifdef _WIN32
# include <windows.h>
# define sleep(sec) Sleep((sec)*1000)
#else
# include <unistd.h>
#endif

int main()
{
sleep(1);
}
0334デフォルトの名無しさんNGNG
>>333
BeOSとMacとDOSもよろしく
0335デフォルトの名無しさんNGNG
ハッシュテーブルの最大サイズを素数にしたほうが良い、という理由を
論理的(数学的)に説明できる方はいますか?

最大サイズが多因数で構成されていると、余りを求めるときに偏りができる
というのは「直感」として理解できるんですけど、うまく言葉で表せません。
0336デフォルトの名無しさんNGNG
>>335
ハッシュに変換する前の元データの偏りは
周期性というか特定の数の剰余に偏りがあるだろ?
例えばShiftJISコードとか。
そういう偏りはハッシュに変換するとどうなる?
0337デフォルトの名無しさんNGNG
>>236
もう遅いかもしれないけど、自然対数の底の方は1年の頃課題で
出たなあ。今見たら、まだ残ってたよ。
但し、1年の前期に作ったものをそのまま載せたので、
一部形式が変であまり良いプログラムじゃないけどね。

#include<stdio.h>
main()
{
double a,b,c;
a=1;
c=0;
for(b=1; b>=1e-15; b/=a) {
++a;
c+=b;
}
printf(" e=%.13f\n",c+1);
}
0338デフォルトの名無しさんNGNG
教えてください!abcと入力したらbcdと表示する
プログラムなんですが
#include<stdio.h>
#define MAX 80
void main(void){
char in[MAX];
int i;
scanf("%s",&(in[MAX]));
for(i=0;in[i]!='\0';i++){
in[i]+=1;

}
printf("%s",in);
}
だと実行時にエラーになってしまいます
0339デフォルトの名無しさんNGNG
age
0340デフォルトの名無しさんNGNG
すみません。JAVAなんですけれども、自然数nに対し奇数なら3倍して1をたし、偶数なら
2で割る。これを繰り返し、(結果が1になるまで、)この数列を表示する。というプログラムを
書けという問題ですが、例えばn=5なら、
5,16,8,4,2,1 と表示されるようにしたいんですけど、実行すると
最後が"1,"となってしまいます。どのようにプログラムを書けば良いのでしょうか。
0341デフォルトの名無しさんNGNG
>>340
数と一緒に「,」を出さないで、次に進むときに「,」を出す
0342デフォルトの名無しさんNGNG
>>338
× scanf("%s",&(in[MAX]));
○ scanf("%s",&(in[0]));
0343デフォルトの名無しさんNGNG
>>338
sacnf のフォーマッタは %s でいいのか?
文字列と文字の違いはわかってるか?
非常に紛らわしいところではあるが、
その辺り解説書を読み直してこい。
0344デフォルトの名無しさんNGNG
>338
×scanf("%s",&(in[MAX]));
○scanf("%s",in);
0345デフォルトの名無しさんNGNG
>338
scanf("%s",&(in[MAX]));
が変。
scanf("%s", in);
でよろし。
でも、scanfじゃなくて、fgetsとかを使う方がいいかと思う。
0346343NGNG
失礼。フォーマッタよりも受け皿の方が問題だったな。
>>342 が正しい。
入れ違いになった上にミスしていてスマソ

ただ、C言語の文字列の取り扱いを理解していないのは確かだと思われるので、
ちゃんと勉強するように。
0347デフォルトの名無しさんNGNG
怒涛の毎分レスだ(藁
0348338NGNG
みなさん有難うございます
scanf("%s",&(in[MAX]));
では80番目からいれていくことになってしまいますね
あとinは&in[0]おんなじことを意味しているんですよね
0349デフォルトの名無しさんNGNG
>>348
はい、そのとおりです。
0350たけちゃんNGNG
FORTRANで乱数を表示させて円周率を求める問題なんですけど、
なにぶん初心者が頭抱えてやってるもので、上手く動きません。
何がおかしいのかな?んんー
dimention xcod(1000000), ycod(1000000)

write(6,201)
read(5,101)n
if(n.gt.1000000.or.n.le.1) stop

ix=n*9+9
call ranu2(ix,xcod,n,icon)
write(6,202) icon
ix=ix+9
call ranu2(ix,ycod,n,icon)
write(6,203) icon

icount=0
do 10 i=1,n
r=sqrt(xcod(i)**2+ycod(i)**2)
if(r.lt.1.0) icount=icount+1
10 continue

pi=float(icount)*4.0/float(n)
write(6,204) pi
stop

201 format(' Input N, max=1000000 (i10)')
202 format(' ICON for X =',i5)
203 format(' ICON for Y =',i5)
204 format(' Simulated PI=',e15.7)
101 firmat(i10)
end

subroutine ranu2(ix,a,n,icon)
real*4 a(n)
real*8 x

if(n.lt.1.or.ix.ilt.0) go to 8000
x=dfloat(ix)/2147483648.d0
do 10 i=1,n
x=x*32771.d0+0.574890473391860723d0
x=x-dint(x)
10 continue

ix=x*2147483648.d0
icon=0
return

8000 icon=30000
return
end

お願いします。
0351350NGNG
>>350
0352質問NGNG
これ↓でなんで行数がカウントできるのか、わかりません。

/* linect.c */
#include <stdio.h>
#include <stdlib.h> /* exit */

main()
{
FILE *fin;
char buf[256];
char filename1[20];
int ct; /* 行数カウント用 */

printf("入力ファイル名=");
gets(filename1);

fin=fopen(filename1,"r");
if(fin == NULL){
printf("%sがオープンできません.\n",filename1);
exit(1);
}

ct=0;
while(fgets(buf,256,fin) != NULL){
++ct; /* 行数カウントアップ */
}
printf("%d lines\n",ct); /* 行数の表示 */

fclose(fin);
}
0353デフォルトの名無しさんNGNG
fgets って1行読み込むって関数だよね?
「1行」って、バックスラッシュnまで、ってこと?
0354デフォルトの名無しさんNGNG
上のコードだと、fgetsが戻ってくるのは、
・255文字まで読んだとき
・'\n'を読んだとき
・EOF
のいずれか。'\n'はbuf内に書き込んで返される。
行の長さが255文字以下だとすれば、上のコードで行数を数えることができる。
0355 NGNG
p-codeとマシン語の見分け方は?
0356質問NGNG
C っていろんな型あるよね。
メンドイから、ぜんぶ long doubleで宣言すればいいんでないの?

余計なこと考えずにすむし、バグも減る。
0357デフォルトの名無しさんNGNG
ポインタもlong doubleにするの?
演算誤差でアドレスが数バイトずれたりして(w
0358デフォルトの名無しさんNGNG
>340
ループ終了後に、"\b "を出力させるというインチキも有り。
リダイレクトされると厄介だが。
0359デフォルトの名無しさんNGNG
>>356
文字列は long double の配列か?
チト無理があると思われ。
0360デフォルトの名無しさんNGNG
>>356
論理演算ができないよ…
036182NGNG
>>356
実数型は丸め誤差で狂うから、余計なバグを生み出すかも。
0362361NGNG
名前82て間違え。スマソ
0363デフォルトの名無しさんNGNG
GAを用いた経路探索のプログラムを作りたいのですが、ダイクストラ法のプログラムにGAのプログラムを組み込むというか、入れてしまえばいいんでしょうか?? ダイクストラ法のプログラムは出来ているんです。あとは、どうやってGAを用いるかなんです。助言お願いします。 
0364デフォルトの名無しさんNGNG
 経路探索って、最短経路問題?
 ダイクストラ法で出来てるんなら、もうそれ以上何もする必要ないのでは。
 この問題の意図は、収束が遅くてもいいからGAでやってみろってことでしょ、
多分。
 とりあえず、なんらかの経路選択手法を遺伝子として持って、適応関数はかかる
距離みたいなので、やるのかな。うーむ。
0365デフォルトの名無しさんNGNG
GAを使ってなにをしたいのかをまず考えれ。
今動いているダイクストラ法のなにが問題で、GAによってどう解決したいのかを
明確にすれ。
そして、その問題点を解決するのにGA以外の有効な手段かないかどうかを検証すれ。

コーディングうんぬんはその後だ。
0366canNGNG
あっ そうですね。それをかかないと。 GAだと一回で複数の解候補が見つけられるじゃないですか! そうすれば、再検索の時間を短く出来ますよね。 ダイクストラ法だと再検索に時間がかかるということで、GAを使って、複数の最短経路候補を出したいのです。
0367デフォルトの名無しさんNGNG
>>366
 GAは、一回で複数の解候補がみつかるとか、そういう話ではない。
解候補をたくさんつくって、その中からいいものを残して、そして
いいものに似たものを作る。で解の集合をだんだんしぼりこんでいく。
だから、解の候補が100個ある集団があるのなら、100個分の処
理をしないといけない。結局、ダイクストラ法で何回も再探索をかけ
るのと一緒。複数の最短経路を求めたいのだったら、二つの最短路を
選べる局面にきたら、その局面を記憶して、バックトラックかけた方
が絶対効率的。
 GAっていうのは解探索の手法だが、できるだけ局所解に陥らないよ
うにして次善の解を探す手法。ダイクストラ法とは直行する考え方だと思
うし、アルゴリズミックに解けるならそっちの手法を取るのがよろし。

 ってことで、課題の出題者の意図が今一つ、つかめなかったり。
0368canNGNG
確かに、1ついいものを残していくなんですけど、それに準ずる解候補も記憶というかしとけば、再検索をかけたときにすぐに次の候補がだせるじゃないですか。 複数の最短経路に準ずる解を一度にだせるように、GAを使いたいのですが・・・・・。
0369デフォルトの名無しさんNGNG
そういう研究は既に山ほどある.文献調べたまへ.GA 云々以前の問題だな.
0370デフォルトの名無しさんNGNG
>>368
そんな解候補残しておきたいだけなら、GA使う必要ないやん。
0371370NGNG
>>368
あと、もう一つ。
別にGAは一つだけ次世代にいいものを残しておくわけではないです。
とりあえず、まずGAの利点と欠点を勉強した方がいいと思われ。
0372独習NGNG
class test {
public static void main(String args[]) {
// 配列の宣言,割り当て,初期化
int size = args.length;
double data[] = new double[size];
for(int i = 0; i < size; i++)
data[i] = Double.valueOf(args[i]).doubleValue();
// 配列のソート
for(int i = 0; i < size - 1; i++) {
for(int j = i; j < size; j++) {
if(data[j] > data[i]) {
double temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}
}
// 配列を昇順に表示する
for(int i = 0; i < size; i++)
System.out.print(data[i] + " ");
System.out.println("");
}
}
//配列のソート から //配列を昇順に表示する の間の部分が考え方わかりません。
お助け下さい。お願いします。
0373デフォルトの名無しさんNGNG
>>372
「バブルソート」で検索してみなされ、
0374デフォルトの名無しさんNGNG
パールで聞きたい事があります。
他のCGIで作った変数の値を別のCGIの中に
とりこむにはどうしたらよいのでしょうか。
REQUIREを使うと、そのCGIが実行されてしまいます。
欲しいのは、あくまで変数だけなんです。
よろしくお願いします。
0375独習NGNG
なんとなくわかりました。
もうちょっと検索して調べて見ます。
>>373さん、ご親切に有難う御座いました。
0376デフォルトの名無しさんNGNG
>>374
「作った」変数とは、具体的には?
ユーザにエディットさせるために、ソース内で変数に値を代入しているの?
それとも、二つのCGIを並列に動かして。。ってこと?
0377デフォルトの名無しさんNGNG
>>374
CGIパッケージの名前:変数名
で取り出せる
0378デフォルトの名無しさんNGNG
>>376
たとえば、複数のサイトのアクセスログをとりますよね。
それでその値をまとめて一つのCGIに出力したいんです。
それにはそれぞれのサイトのカウント数を
そのCGIに渡さないと出力できないですよね。
それでそのカウント数だけを使いたいんですが・・・
0379デフォルトの名無しさんNGNG
>>378
一度ファイルに吐き出して、そのファイルをマージするCGI書きなされ。
0380デフォルトの名無しさんNGNG
>>379
それはデータファイルにそれぞれのカウント数を書き込んで
まとめて出力するCGIからそのファイルを読み出すことですよね。
なんかそれでできそうな気がします。
やってみます。
ありがとうございます。
0381デフォルトの名無しさんNGNG
連立方程式の解を求めるプログラムなんですが
アルゴリズムがさっぱり思いつきません
助けてー
0382デフォルトの名無しさんNGNG
>>381

行列式にしてGaussの消去法使え。
0383デフォルトの名無しさんNGNG
さっぱりわからん
0384デフォルトの名無しさんNGNG
>>381
「アルゴリズムを思いつく」のは無理だろう。
0385デフォルトの名無しさんNGNG
>>382
ありがとう!
線形代数の教科書捨てて無くてよかった
0386デフォルトの名無しさんNGNG
Excel上でvbaを使って、
「2分探索法」のプログラムを組みたいのですが。

「2分探索法」のアルゴリズムは理解しているのですが、
それに合った、vbaのコードがさっぱり、わかりません。

どなたか、アドバイス頂けたら幸いなのですが。

当方、プログラム厨房です。

よろしく、お願いします。
0387デフォルトの名無しさんNGNG
>>386
さっぱりわからないと、アドバイスのしようが・・・。
とりあえず、どの辺までプログラムというかVBAわかってるの?
変数ってわかる?
If文の使い方ってわかる?
DO..LOOPステートメントの使い方とかわかる?
エクセルのセルの値の参照の仕方ってわかる?
0388デフォルトの名無しさんNGNG
↓このプログラムが期待した通りに動きません。
へぼいところをつっこんでください。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i,n;
n=-1;
srand((unsigned)time(NULL));

i=rand();

while(n!=i){
printf("数字を入力すれ\n");
scanf("%d",n);

if (n>i)
printf("もっと小さい数だよ\n");
else if(n<i)
printf("もっと大きい数だよ\n");
else
printf("正解\n");
}
}
0389デフォルトの名無しさんNGNG
scanf() 調べたまへ.使い方間違ってる.
0390デフォルトの名無しさんNGNG
ぐは。
&n だった。
ご指摘ありがとうございました。
0391デフォルトの名無しさんNGNG
>>390

ただ付ければいいと覚えないでくださいね。
ちゃんとポインタの勉強もしてくださいね。
0392デフォルトの名無しさんNGNG
>>391
了解しました。
0393デフォルトの名無しさんNGNG
>>387さん
386です。レス遅くなり、すみません。

変数ってわかる?
>If文の使い方ってわかる?
>DO..LOOPステートメントの使い方とかわかる?
>エクセルのセルの値の参照の仕方ってわかる?

すべて、わかります。
今、自分で「2分探索」に必要なメソッドやプロパティ
の有無を調査中です。
が、どうやら、ないみたいです。

このような状態です。
0394デフォルトの名無しさんNGNG
>>393
えっと・・・
今一、目的がみえないんだけど。
2分探索を自分で実装するという宿題ではないの?

とりあえず、A1...Anに値が入っていて、昇順にソートされていると
しましょう。このとき、ある値xを2分探索で探したいと。
このとき、調べるべき範囲は、A1 - Anなので、二つの変数作って
min = 1
max = n
などとしておきましょう。
で、minとmaxの平均をtとします。
で、Atのセルの値と、xを比較します。
そうして、xの方が小さければ、max = t - 1として
xの方が大きければ min = t + 1として、
また同じことすればいいです。
で、xと一致したらそこで終了。

この処理は、>>387 で書いた4つのことがわかっていれば書けますよね?
0395デフォルトの名無しさんNGNG
>>394
宿題ではなくて、卒論になります。
ちなみに当方、文系です。

頂いた指示をもとに、やってみます。

出来次第、報告します。
ありがとうございます。
0396デフォルトの名無しさんNGNG
卒論かあ。謝辞に「2ちゃんねる」とか書くのかな。それとも参考文献かな。
きみの大学の図書館で読める?
0397デフォルトの名無しさんNGNG
C言語の分割コンパイルの質問です
#include<stdio.h>
#include"test1.h"
func1()
{
for(i=0;i<3;i++){
printf("%s\n",a[i]);
}
}
/*test1-1.c終わり*/
#include<stdio.h>
#include"test1.h"
func2()
{
for(i=0;i<3;i++){
printf("%s\n",b[i]);
}
}
/*test1-2.c終わり*/
#include<stdio.h>
#include"test1.h"
int main()
{
func1();
func2();
}
/*test1-3.c終わり*/
char a[]={"a","b","c"};
char b[]={"d","e","f"};
int i;
/*test1.h終わり*/
このファイルを分割コンパイルすると
/usr/bin/ld: multiple definitions of symbol _a
/var/tmp/ccgpaaaa.o definition of _a in section (__DATA,__data)
/var/tmp/cciuaaaa.o definition of _a in section (__DATA,__data)
/usr/bin/ld: multiple definitions of symbol _b
/var/tmp/ccgpaaaa.o definition of _b in section (__DATA,__data)
/var/tmp/cciuaaaa.o definition of _b in section (__DATA,__data)
/var/tmp/cckzaaaa.o definition of _a in section (__DATA,__data)
/var/tmp/cckzaaaa.o definition of _b in section (__DATA,__data)
というエラーがでます。よろしくお願いします。
0398デフォルトの名無しさんNGNG
そのtest1.h、複数のファイルでincludeしてるでしょ。
そうすると多重に展開されて aとbが多重に実体を作ろうとする。
それでエラーがでる。

aとbの実体は、ヘッダじゃなく.cで作って、
test1.hには
extern char a[];
extern char b[];
としておけばよい。

あと、インクルードガードもしといたほうがよいな。
0399デフォルトの名無しさんNGNG
あと、
int i;
はグローバルで持たずに、各関数でローカルにもったほうがよい。
というかそれが普通。
0400398=399NGNG
よくよく見れば、いろいろおかしいところ多いね。
a[],b[]の配列はcharの配列だから
char a[] = {'a','b','c'};
char b[] = {'d','e','f'};
じゃなきゃ、まずい。

それからfunc1と2でのprintf出力がおかしい。

文字と文字列、シングルクオートとダブルクオートの使い方、
ちゃんと理解してる?
0401397NGNG
>>400
/usr/bin/ld: Undefined symbols:
_a
_b
というエラーがでてまだできないです。
文字と文字列、シングルクオートとダブルクオート
の使いかたはわかっているのですが、ちょっとまちがえてしまいました。
いやーおはずかしい。
ところで、インクルードガードってなんですか?
0402397NGNG
401の書き方だと、たぶん誰もわからないと思うので
明日また全文のせようと思います。
その時はまたよろしく頼みます。失礼しました。
0403デフォルトの名無しさんNGNG
extern はしたけど、実体を確保したCファイル用意を忘れたに一票。
test.h:
extern char a[];
test.c:
char a[] = "abc";
0404質問NGNG
stdio.h に printf の定義が書いてあると聞いたので、stdio.hの中をのぞいて見ましたが
int printf(const char *, ...);
これしか書いてありません。
0405デフォルトの名無しさんNGNG
>>404
宣言と定義の違いがわかるまでK&Rを復唱。
0406デフォルトの名無しさんNGNG
>>401
インクルードガードってのは、ヘッダファイルの先頭と末尾に
#ifndef _test1_h_
#define _test1_h_
.....(test1の内容)......
#endif /* _test1_h_ */
のように#ifndef〜#endifを入れること。…のはず。(w
たぶんこれのことを言ってるんだと思ったんだけど、インクルードガードという言葉は初めて
聞いたもので。あってる? >>398

これをやっとくと、ヘッダファイルの依存関係が複雑になってきて同じファイルを2回以上
インクルードすることになってしまった場合に、同じ宣言が二重に行われるのを防ぐことができる。
0407397NGNG
昨日の続きの分割コンパイルの質問です
#include<stdio.h>
#include"test1.h"
void func1(i)
{
extern char a[],b[];
for(i=0;i<3;i++){
printf("%c\n",a[i]);
}
}/*test1-1.c終わり*/
#include<stdio.h>
#include"test1.h"
void func2(i)
{
extern char a[],b[];
for(i=0;i<3;i++){
printf("%c\n",b[i]);
}
}/*test1-2.c終わり*/
#include<stdio.h>
#include"test1.h"
int main()
{
char a[]={'a','b','c'};
char b[]={'d','e','f'};
int i;

func1();
func2();
}/*test1-3.c終わり*/
extern char a[];
extern char b[];
/*test1.h終わり*/
これをコンパイルすると
/usr/bin/ld: Undefined symbols:
_a
_b
というエラーがでます。ではよろしくお願いします。
0408デフォルトの名無しさんNGNG
>>407
variables 'a' and 'b' should be defined as global variable in test1-3.c
0409397NGNG
>>408
なぜ英語なのかよくわからんが、まぁいいや。
例えばどういうふうにですか?
0410デフォルトの名無しさんNGNG
変数のスコープというのがよく分かっていないのでは?
mainの中で定義したa, bは、mainの外からは見えないよ。
0411デフォルトの名無しさんNGNG
適当に直して動作確認したんだけど、ふと疑問が。
void func1(i)
void func2(i)
で i の型を書いてないが動作する。
そっちのほうが謎だ。
0412397NGNG
で、結局どうすればいいのですか?
0413デフォルトの名無しさんNGNG
>>397
a,bの定義をmainの外に出せ。
上手くいったtest1-3.oとエラーがでたtest1-3.oを
nm -gp test1-3.oで比べろ。

実行までは行くだろうが、func1,func2を直さんと及第点はとれんぞ。
0414デフォルトの名無しさん NGNG
javaアプレットを複数作ったのですがそれをチェックボックスとボタンで選択できるようにするには
ドウすればいいのでしょうか?
0415デフォルトの名無しさんNGNG
>>414
 いまいち、何をしたいかよくわからないが、チェックボックスの内容に
したがって表示するJavaアプレットを切り替えたいってこと?
 だったら、Java Scriptあたりで、ボタン押したらチェックボックスに従い
対応するページにジャンプさせるようにするとか。
0416デフォルトの名無しさんNGNG
>>415
あ、ありがとうございます。
そういう方法もありますね。
0417デフォルトの名無しさんNGNG
ガーベッジこれ苦ションの実装のしかたおしえて
0418 NGNG
>>417
単純な、stop and mark&sweepでいい?
0419デフォルトの名無しさんNGNG
>>411
単に古いK&Rタイプの定義とみなされてintになってるだけ
0420418NGNG
>>417
とか、思いつつcopying GCが一番実装はしやすいか。


これは、同じサイズのヒープ領域を二つ作って交互に使う方式。

まず、処理をとめて。
それで、ルートセットから順にたどっていきます。
で、たどり着いたオブジェクトをその段階でもう一方のヒープ領域にコピーします。
コピーしたときは、今オブジェクトが置いてあった位置に次のコピー先書きます。
こうすることで、別のオブジェクトがそのオブジェクトを指していたときに、リンクを
張り替えることができます。

で、次にそのオブジェクトが指しているオブジェクトを読みに行きます。
ここで、どんなに深く読んでも、その呼び出し先をスタックに積んでいたりすると厄介
なので、子オブジェクトを読みにいくときに、現在のオブジェクトから子オブジェクトを
さしているポインタを、一時的にさらにその親オブジェクトを指すようにします。
こうすることで、たどっていって戻っていくとき用にスタックを用意しておく必要がなく
なります。

こうやって、深さ優先でどんどんもぐっていって(ローカリティを考慮すると、深さ優先
だとよくないという議論もありますが無視)、すでにコピーされたオブジェクトに辿りつ
いたら、コピー先のポインタに置き換えて、戻ります。戻ったときはポインタをコピー先
のポインタに書き換えるのをお忘れなく。

とか、書きつつ、これを読んでわかるわけないよな、とか思ったり。
0421デフォルトの名無しさんNGNG
- アルゴリズム -
- アルゴリズム -

1つの平面上にn個の点があったとします。このとき、以下の条件を満たす多角形を求めたいのですが、
どのようにアプローチすればよいでしょうか。

条件1 凸型多角形である
条件2 多角形の内側に全ての点が存在する(「内側」には境界線上も含む)
条件3 多角形の頂点には、必ず点が存在する。


つまり、板にn個の釘が打ち付けられていて、
その釘を全て含むように輪ゴムを巻きつけたときにできる形です。

尚、多角形は頂点座標の配列で指定します。



条件1 凸型多角形である
条件2 多角形の内側に全ての点が存在する(「内側」には境界線上も含む)
条件3 多角形の頂点には、必ず点が存在する。


つまり、板にn個の釘が打ち付けられていて、
その釘を全て含むように輪ゴムを巻きつけたときにできる形です。
0422デフォルトの名無しさんNGNG
簡単に考えると
1 バウンディングボックスを考える
2 境界上の任意の点を始点とする
3 現在の点から内側に向かって最も右側の点を求める
4 その点を次の点として始点に戻るまで3を繰り返す

これだとn個の点でm角形ができるときにO(nm)なんだが、
もっと効率いい方法あるかな。
0423デフォルトの名無しさんNGNG
全ての点で外積をチェック。内点が多いほど速い
0424421NGNG
>>422

全ての点を含む最小の矩形を考える。

上の辺(y座標の値が小さい方)に接する任意の点を選び、これを始点とする。

「基準の角度」をゼロにセットしておく。
「始点」を「基準点」とする。

基準点と任意の点の成す角度(始点から右に伸びる半直線を基準0度とし、
始点を中心に時計回りを正の角度、反時計回りを負の角度とする)
が最も「基準の角度に近く」、かつ「基準の角度よりも大きい」点を選び、これを次の基準点とする。

基準点が最初の点に戻るまでこれを繰り返す。


…という感じですか。
0425398NGNG
>>406 そう、そうれがインクルードガード。俗称だけどね。
ちなみにCの規格ではアンスコで始まる名前は予約語なので、
#ifndef TEST1_H_INCLUDE 〜
とかにしたほうがいい。
結構違反しちゃうんだけどね。

>>397 はコンパイルできたのかな?
参考書があるなら「変数のスコープ」「グローバル変数」「ローカル変数」
っていうキーワードを調べて勉強するとよい。
0426422NGNG
>>423
よく分かんなかったんだが、全ての点からどことどこに向かう外積?

>>424
という感じ。
0427デフォルトの名無しさんNGNG
>>424
それだと、最初に最小矩形調べる必要ないんじゃない?
始点はY座標のもっとも小さいものを選べばいいと思うけど。
0428428NGNG
JAVAの質問です。助けてください。

//////////////////////////////////////////////
import java.io.*;

class Sample{
:
:
public static void main(String[] args){
              :
keyboard1 r3=new keyboard1();
r3.show();
}
}

class keyboard1{
void show(){
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
try{
String up=input.readLine();
:
:
}catch(IOException e){
System.out.println(e);
}
}
}
////////////////////////////////////////////////
な感じに書いてコンパイルは通るんですけど、
Exception in thread "main" java.lang.NoClassDefFoundError: Sample
って実行エラーがでます。何かヒント下さい。
直訳すると、メインでクラスが意義されていないエラー?
0429デフォルトの名無しさんNGNG
>>428
ソースはちゃんと、Sample.javaで保存した?
javac Sample.java
java Sample
と、最初のSはちゃんと大文字にした?
0430428NGNG
>429
してます。文字コードとかは関係ないですよねぇ〜(win2k)
class keyboardやってないプログラムで動いてたんで
その辺の関連があやしいと睨んでるんですが。
0431428NGNG
ちなみに全文だしちゃうと
////////////////////////////////////////////////
import java.io.*;
class Sample14{
int upperHem,lowerHem,height;
Sample14(){
setSize(10,5,8);
}
Sample14(int up,int low,int h){
setSize(up,low,h);
}
void setSize(int up,int low,int h){
upperHem=up;
lowerHem=low;
height=h;
}
float getArea(){
return (upperHem+lowerHem)*height/2;
}
public static void main(String[] args){
System.out.println("-----引数なし-----");
Sample14 r1=new Sample14();
System.out.println("r1.upperHem="+r1.upperHem);
System.out.println("r1.lowerHem="+r1.lowerHem);
System.out.println("r1.height="+r1.height);
System.out.println("r1.getArea()="+r1.getArea());
System.out.println("-----引数あり-----");
Sample14 r2=new Sample14(4,10,7);
System.out.println("r2.upperHem="+r2.upperHem);
System.out.println("r2.lowerHem="+r2.lowerHem);
System.out.println("r2.height="+r2.height);
System.out.println("r2.getArea()="+r2.getArea());
System.out.println("-----キーボード入力-----");
keyboard1 r3=new keyboard1();
r3.show();
}
}
class keyboard1{
void show(){
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
try{
System.out.print("上辺の値(整数)を入力してください:");
String up=input.readLine();
int upperHem = Integer.parseInt(up);
System.out.print("下辺の値(整数)を入力してください:");
String low=input.readLine();
int lowerHem = Integer.parseInt(low);
System.out.print("高さの値(整数)を入力してください:");
String h=input.readLine();
int height = Integer.parseInt(h);
float menseki=(upperHem+lowerHem)*height/2;
System.out.println(menseki);
}catch(IOException e){
System.out.println(e);
}
}
}
0432428NGNG
です。インデント反映されてなくて読みにくいかも知れないですが
お願いします。

ってか、外部クラス使うこんな感じでいいんでしょうか(汗
0433429NGNG
>>430
うーん、もう一度きくけど、
Sample14.java で保存して
javac Sample14.java
java Sample14
ってやったんだよね?
こっちだと、コンパイルできて実行できたからなぁ。
あとは・・・クラスライブラリへのパスはしっかり通ってる?
0434429NGNG
>>431
あと、どうでもいいけど
float menseki=(upperHem+lowerHem)*height/2;
だと、まず整数計算してからfloatにキャストするから、小数点以下は
切捨てられちゃう。
0435428NGNG
まじですか・・・当方JAVA1.3.1_01なんすけど・・・

クラスライブラリというとさすんでしょうか?
Java.io.で・・・
java\binには通ってます。
0436428NGNG
↑何をさすんでしょうかの間違い。です。
調べてみたんですが、エラーの内容からして
http://www.atmarkit.co.jp/fjava/onepoint/java/jv_jcmd.html
見る限り、クラスライブラリへのパスが通ってないって指摘で
あたりっぽいです。

>434
は/2.0にすればたしか問題ないですよね。
0437421NGNG
>>426
>>427
すべての点同士で角度を調べるという事は、ひたすらアークタンジェント使う事になりますよね。
すごく時間のかかるような…
とりあえず、この方向で作ってみます。どうもありがとう。
0438デフォルトの名無しさんNGNG
Cでかけざん九九表を作る宿題が出ました。
forとか使ってなんとか数字の列は作れました
しかし表がつくれなくて困ってしまいました
Cでの表の作り方を教えて下さい
0439デフォルトの名無しさんNGNG
>>438

#include <stdio.h>

main()
{
int i,j;

printf(" 1 2 3 4 5 6 7 8 9\n");
for(i=1; i<=9; i++){
printf("\n%2d ",i);
for(j=1; j<=9; j++){
printf("%4d",i*j);
}
}
puts("\n");
}
0440428NGNG
>433

保存はSample14.javaでちゃんとしています。
実行時に作業ディレクトリ
cd /d F:\My Products\JAVAで移動して...
javac Sample14.java
で、ワーキングディレクトリにSample14.classとkeyboard1.class
が出来まして、、、
java Sample14でやはり...
Exception in thread "main" java.lang.NoClassDefFoundError: Sample14
です(T_T)

F:\My Products\JAVA>echo %classpath%
D:\jdk1.3\bin;
と通ってます。

文字コードはS-JISでもやってみましたが駄目でした。
0441勉強中NGNG
配列を使って(ほとんど配列)コマンドオプションから任意に入力した
年月、一月分を表示するカレンダーを作成しなさい。

この問題のヒントをお願いします。二次元配列は禁止だそうです。

お願い君で申し訳ないです。どうかよろしく。
0442デフォルトの名無しさんNGNG
>>441
なんで禁止なのか。
その問題を出したやつはアホなので金玉を蹴っ飛ばしてやれ。
0443デフォルトの名無しさんNGNG
>>439
返信ありがとう御座います
その辺まではわかるのですが宿題では九九表なのでこんな感じの完成図なのです
技術ナシなので3×3表で
 1 2 3
11 2 3

22 4 6

33 6 9

これにさらに表のセルも入れたいのです
頭痛いです。。。
私には無理なのでお願いします。
0444デフォルトの名無しさんNGNG
>>442
金玉はないかもしれん。
0445デフォルトの名無しさんNGNG
>>443
Excel でやればいいじゃん。

>444
タマ無しか。
じゃあ、このへん読んで、実践しとけ。
http://sports.2ch.net/test/read.cgi?bbs=budou&key=1003730842
0446428NGNG
>429さん

java -classpath . Sample14で解決しました。

Java VMって、クラスパスを自動的にカレントディレクトリに指定
するはずですし、java Sample14で動くと思っていたのですが・・・???

>Java VMは次のように、クラスを3段階に分けて検索します。
>1.ブートクラスパスを検索する
>2.エクステンション(拡張)ディレクトリ中のJARファイルを検索する
>3.“クラスパス”を検索する

何か関係あるのかなぁ・・・?同じような環境になったかた、解決
された方いますか?
0447デフォルトの名無しさんNGNG
>>455
ですよねExcel使ったほうが早いと思います
なんでCでやらせるんだろう…。
セル無しで出してみようかと思います
ありがとう御座いました。
0448デフォルトの名無しさんNGNG
>>441
俺なら「そんな創造性のない課題に答える意味はない」というレポートを
証明付きで提出するね。
0449428NGNG
自己レスですが

>446

強引ですが、Classpathに.;とカレントディレクトリの指定を追加して
解決。

>436
は2.0fですね^^;まだ、Cの癖がぬけきれてません。
warnigじゃなくerrorとはさすが型変換厳しいにゃーっと。
0450デフォルトの名無しさんNGNG
>>449
1.3辺りでカレントディレクトリは明示的にクラスパスに記述しなきゃいけなくなった。
セキュリティの問題かね。
0451デフォルトの名無しさんNGNG
>>441
どこに配列を使うんだ?
0452デフォルトの名無しさんNGNG
>450

そういうことなんですかー謎が解決してすっきりしました。
じゃあ、糞して寝ます。
0453デフォルトの名無しさんNGNG
>>451
一週間7日で一次元、一ヶ月に4-5週で一次元、合わせて二次元、かと。

>>441
カレンダークラスでも使えば?
http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/GregorianCalendar.html
0454451NGNG
ツェラーの公式で曜日を算出して表示するだけじゃないの?
0455デフォルトの名無しさんNGNG
>>454
ツェラーの公式って何ですかと聞かれるに 1Duke
0456デフォルトの名無しさんNGNG
>453

>441って
二次元配列禁止らしいじゃん(笑。
Cでしょ〜?大変そうだね。

[3][6]でやるとかでないんでしょー

2001年12月
1 土  
2 日  
3 月  
4 火  
5 水  
6 木  
7 金
とかでいいんでねーの。
にしてもそれ、クラスでも参照しないとかなりめんどいね。
あとはその公式とやらネットで調べて、うるう年に対処して
終りでは〜。
0457デフォルトの名無しさんNGNG
でも、カレンダーってこれ言わないか(w
月:1 火:2とかふって、公式から出た1日の曜日を考慮しつつ、
7つ表示したら改行とか?

どこの大学何だろー。いかなくてよかったYO!
掛け算九九の問題が可愛くみえるねぇ〜(笑
0458デフォルトの名無しさんNGNG
ツェラーの公式で一日の曜日求めて、空白でパディング。
ループで一日ずつ出力しながら(day % 7) == 6)のとき改行。
0459457NGNG
つか、>441 JAVAスレにマルチポスト・・・
あとは自分でやれやー
0460デフォルトの名無しさんNGNG
>>459
マルチポストっつーかJavaスレから移動してきたみたい。
0461スーパー暇NGNG
//#include <string.h>
#include <stdio.h>

int cd[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char wd[]="日月火水木金土";

int y=2001;
int m=11;

int vd;
int gap;
int gap1;
int gap2;

void main()
{
int i;
//月のついたちの曜日を得るために標準との差をもとめる。曜日は0〜6に対応

gap1=0;
for(i=0;i<m-1;i++)
{
gap1+=cd[i];
}
//1996.1.1と、y年.1.1の差を求める。
gap2=(y-1996)*365+((y-1993)/4)*1;//+1はうるう年の分

gap=gap1+gap2;

vd=gap%7+1;

//wd[vd*2];//月のついたちの曜日

printf("%4d年%2d月\r\n",y,m);
printf("日月火水木金土\r\n");
for(i=0;i<vd;i++)printf(" ");

for(i=0;i<cd[m-1];i++){
printf("%2d",i+1);
if((i+1+vd)%7==0)printf("\r\n");
}
}
0462スーパー暇NGNG
ぉお、あとはとっととコマンドライン対応にしてくれ
0463デフォルトの名無しさんNGNG
うるう年の2月29をプリントすることも追加してくれ
0464デフォルトの名無しさんNGNG
いや、これはCOMつかって、excelに書き出せ、ってことだよ。
きっと(w

あと、int index(x,y) 的関数を用意すれば、
配列は一次元でも二次元のアクセスができると思うけど。
0465デフォルトの名無しさんNGNG
>>441

int main(int argc, char **argv)
{
char cmd[256];
sprintf(cmd, "cal %s %s", argv[1], argv[2]);
return system(cmd);
}

charの一次元配列を使っているので出題の条件は満たしているはず。
なんちゃって。
0466422NGNG
>>437
いや、前の点から現在の点へ向かうベクトルと、現在の点から各点へのベクト
ルの外積を使えばatanはいらない。>>423はこう解釈してOK?
最初の点では外側に向かうベクトルを適当に与えておけば酔。

>>427
そだね。
0467437NGNG
>>466
うーん、外積をどのように利用するのでしょう...
0468デフォルトの名無しさんNGNG
>>421
それは「凸包」(convex hull,convex closure)を求める問題ですね。
さんざん研究されているアルゴリズムなので、検索すれば良いアルゴリズムが
見つかります。普通に組めば O(n logn)です。
研究されている分野は「計算幾何学」(computational geometry)です。
0469デフォルトの名無しさんNGNG
煽りがなくてうれぴーんだけど、俺はいまだに
どうやったら2次配列を使えるのかがわからん。。

外周を求めるのは、まぁ、はじめにx座標なりy座標
なりの最小あるいは最大の点を選び出し、(それは
ひとつの頂点ではあるはず)あと、x座標かy座標で
ソートもしとけばあとあと便利だけど、そーしておいて
順次となりの頂点を、内積つーかコサインつかって
時計回りなり半時計回りなりにもとめるのが分かりやすい
と思うYO.あとは区画を区切って区画の大きさに注意
しながらやる方法とかあるとおもう。めんどうけどな。
0470デフォルトの名無しさんNGNG
if(y=うるう年)cd[1]+=1;だ。(追加)
うるう年のカレンダの時だけ2月以降ひとつずれるのじゃ
0471デフォルトの名無しさんNGNG
ちなみにcdはcounts of the month.
wdはday of the week.
vdは(assigned)value of the day
ひまだったつーことでよろしく
0472デフォルトの名無しさんNGNG
counts of the days in the monthダ
0473デフォルトの名無しさんNGNG
argc ってなんですか?
0474 NGNG
>>473
argvの数。
0475457NGNG
>470

作ったんだけど、うるう年テストしてないや...
2000年、2月でいいんだっけ?
0476デフォルトの名無しさんNGNG
うるう年は4年に一回、それで充分。
どーせ2100年には俺は生きてない。
0477457NGNG
1996だった(笑。

ってことで・・・
>461のソースにネットに落ちてた関数足して
20分ぐらい、、、で、継ぎ接ぎしてみた。
0478457NGNG
#include <stdio.h>

int GetDayOfWeek(int,int,int);
int cd[12]={31,28,31,30,31,30,31,31,30,31,30,31};

void main()
{
int i,year,month,week;
char szWeek[7][3]= {"日","月","火","水","木","金","土"};
printf("year,monthを入力しろや、ゴルァ!!\n例) 2001,10な感じだ(゚д゚)! \n");
printf("注) errorでたらCtrl+Cでもスレ or エラー処理書いとけ。\n");
scanf("%d,%d",&year,&month);
week=GetDayOfWeek(year,month,1);
printf("\n%4d年%2d月\n",year,month);
printf("日月火水木金土\n");

for(i=0;i<week;i++){
printf(" ");
}

if((year%4==0 && year%100!=0)||year%400==0){
cd[1]+=1;
}

for(i=0;i<cd[month-1];i++){
printf("%2d",i+1);
if((i+1+week)%7==0)
printf("\n");
}
}

// ツェラーの公式より
int GetDayOfWeek(int y, int m, int d)
{
// 1582 年 10 月 15 日以降でないと計算できない!
if (y*366+m*31+d < 1582*366+10*31+15)
return 7;

// 1 月か 2 月のときは、去年の 13 月、14 月として計算
if (m==1 || m==2)
{
y--;
m+=12;
}

return (y + y/4 - y/100 + y/400 + (13*m+8)/5 + d) % 7;
}
0479457NGNG
あ、二次元配列使ってた(笑。
その行いらねーし。
0480デフォルトの名無しさんNGNG
すいません、お願いします、まったくの初心者です。
分割法の問題です。

/* quick sort */
void quicksort(int a[], int left, int right)
{
int i;
if (right > left) {
i = divide(a, left, right); /* 振り分け処理 */
a[left]..a[i-1] 部分の分類(quicksortの再帰呼び出し)
a[i+1]..a[right] 部分の分類(quicksortの再帰呼び出し)
}
}

基準値(pivot)を使うみたいです。
分割を行なうとき、振り分け処理プログラム中のdivide関数を用意しなければ
ならないみたいです

このquicksort関数、及びdivide関数中の日本語部分をプログラムし作成せよ
というのが問題です。

プログラミングを覚えるコツはあるのですか?
0481 NGNG
>>480
コツは、量書くことです。
とりあえず、人に聞いてもいいから、理解して書くこと。
本に載ってるソースで何をやってるか理解して、書き直すだけでも違う。

で、その問題だけど。どの程度わかっているか言ってくれないと。
配列はわかってる?
クイックソートってどういうものかはわかってる?
0482480NGNG
配列はなんとなく・・・
クイックソートとかはよくわからないんです。
分割法自体をまだ理解してません
0483481NGNG
>>482
クイックソートは・・・まあ検索して調べて。
簡単にいうと、ある敷居をきめて、それ以上のグループと、それ以下のグループ
を作って、それぞれのグループでまた二つにわけて・・って感じで順に並べていく。

分割法っていうのが何さしてるか、その辺の用語わからないんだけど。
多分、下のような事をやらせたいのかな。頑張って書いてみる。
この場合、例えば配列に
1638492750
と入っていると。で、これを、左側に例えば4以下、右側に5以上を
入れたいと思うわけです。
とりあえず、左から順に調べましょう。
1638492750
↑
まず、1を見ます。これは5以下だから、このままにしましょう。
1638492750
 ↑
次に6を見ます。これは5以上ですね。
このとき、一番右から順に見ていって、最初の4以下のものと入れ替えます。
このときは、0。ですので、0と5を入れ替えます。
1038492756
 ↑       ↑
まあ、また右側から全部チェックするのはバカらしいので、
6までは全部5以上だということを示すため、6をチェック
しときます。
さて、また0の右から順に4以下のものを探していきます。
8がみつかりました。では、こんどは6の左から順に左へ4以下の
ものを探していきます。2がみつかりますね
1038492756
   ↑  ↑
ここで、2と8を入れ替えます。
1032498756
   ↑  ↑
で、また、左から5以上のもの、右から4以下のものを探していきます。
つまり、左と右から順に矢印を真ん中にもっていくのですが、この矢印
が重なったら、その段階で終了です。
1032498756
    ↑↑
 (順序が入れ替わってる)
で、この矢印の間がグループの区切りです。
これで、二つのグループに分割できました。

....って、わかりにくい説明でしたね。
意地悪してるわけでなく、こういうの文字で説明するの難しいってことで
許してください・・・。
0484481NGNG
ぐあ、ずれまくってる。
ブルーだ。
0485481NGNG
しかも、検索したら説明しているページを見つけてしまった。
余計にむなしい。
ttp://www.cs.u-gakugei.ac.jp/~miyadera/LECTURE/SortAnim/ExAlgorithm5.html
0486デフォルトの名無しさんNGNG
469にクイックソートを利用
すると速くなるよね
つーか漏れはそゆこと考えてたのだ
0487デフォルトの名無しさんNGNG
C++を触り始めたばかりなのですが、
Cと構文は似たようなもんだと思って
たんですが、ところどころ違うところ
があって戸惑ってます。
最初にscanf使ってエラーが出て何で?
と思ったぐらいの初心者です。
C++でのプログラムなんですが、モードが
2つあって1つはキーボードで打った文字を
ファイルに書き込む。もう一つはそのファイルを
読み込んで表示させるです。
Cはある程度分かっています。
C++の考え方の触りの部分を勉強中です。
自分に興味の無い言語覚えるのって辛いです。
ASPとかVBは覚えやすいんですけど。
CとかJAVAって難しくないですか?
言語覚えるこつとかあるんですか?
ひたすら組むしか無いですよね。
質問ばかりですみません。
よろしくお願いします。
0488デフォルトの名無しさんNGNG
僕ははっきり言ってCとC++なんてキニシナイけど
プログラム結構かけてるよ
ちなみに僕のバイブルはいまだにC(!=C++)
のやつで、実習と応用の2冊しかないけど負けずに
ばんばっているのサ
0489デフォルトの名無しさんNGNG
>>488
それも1つの選択だね
0490デフォルトの名無しさんNGNG
////////////////////////////////////////
//標準入力からファイルへ書き込み
// argv[1] に出力ファイル名を渡す
///////////////////////////////////////
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
if(argc<2) return -1;
fstream fout;
string str;
fout.open(arg[1],ios::out);
for(;;){
cout << "> ";
cin >> str;
if(str=="exit")
break;
fout << str <<endl;
}
fout.close();
return 0;
}

////////////////////////////////////////
//ファイルから標準入力へ出力
// argv[1] に入力ファイル名を渡す
///////////////////////////////////////
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
if(argc<2) return -1;
string str;
fstream fin;
fin.open(argv[1],ios::in);
while(fin >> str){
cout << str <<endl;
}
fin.close();
return 0;
}
0491490NGNG
入力と出力でプログラム分けちゃった。
1こめの方は、exitって入力すると終了です。
2こめのコメントの「標準入力」は「標準出力」のまちがい。
0492487NGNG
親切にありがとうございます。
しかもむちゃ早いレスで驚いてます。
やっぱ言語ってめげずにがんばるしか
ないですね。
やれるだけやってみます。
0493デフォルトの名無しさんNGNG
IF EXIST calc.bas n88basic e:gpib | more
IF EXIST calc.bas run"calc"

って言うのをバッチファイルにしてcalc.basと同じフォルダに入れて
バッチファイルをダブルクリックしたのですが、1行目しか実行されません。
何がいけないのでしょうか?
DOSプロンプトで直接入力すれば実行できるのですが。
0494490NGNG
とりあえず、コンソールベースのアプリなら、
streamとstringを覚えると、なにかと楽です。
でも、この2つは結構、奥が深いので完全に理解しようとするとハマります。
最初は使い方のお約束だけ覚えて、使うのがよいね。
0495デフォルトの名無しさんNGNG
fstreamもstringも、この際構造体なの?
どこにも宣言がないけどインクルードファイルに入ってるの?
0496490NGNG
よくよく見ればアレじゃだめです。修正版です。

////////////////////////////////////////
//ファイルから標準出力へ
// argv[1] に入力ファイル名を渡す
///////////////////////////////////////
#include<iostream>
#include<fstream>
using namespace std;

const int BufferLength = 256;

int main(int argc, char *argv[])
{
if(argc<2){
cout << "you must input filename!!" << endl;
return -1;
}

fstream fin;
char buf[BufferLength];
fin.open(argv[1],ios::in);
for(;;){
fin.getline(buf,BufferLength);
cout << buf << endl;
if(fin.eof() || fin.bad())
break;
}
fin.close();
return 0;
}
0497490NGNG
しまった、いんちき英語メッセージ消し忘れた(藁
固定長配列はなんとなく美しくないのでstringクラスとかつかおうかと思ったけど、
結局こっちの方がシンプルにかけそう。

ちなみに490は何がダメだったかというと、fstreamの>>演算子はスペースやタブ
を区切り文字として捨ててしまうので、出力結果がファイルの内容とは違ってしまう
というところでした。
0498490NGNG
>>495
構造体ではないです。
fstreamクラスは、fstream.hとfstreamで定義されてる。

cin,coutはistream,ostream型のオブジェクト。これは確かtypedefされてる
んで実際に定義されてるclass名はまた違う。iostream.hとiostreamを見れば
わかるはず。

stringクラスは、stringファイルの中で定義されています。このファイルがは
さらにヘッダをインクルードしているんだけど、cygwinのg++とVC6では、
インクルードしているファイルが違ってた。
いずれにしても、stringクラスはバリバリのtempleteクラスなのでソースか
ら理解するのはかなりキビシイ。素直にマニュアル読むべし。

ところで>>496は strstreamを使うとスマートにかけるかもしれない。
うーん、実は漏れもstreamは使いこなしてないね。トホホ
0499490NGNG
487を読み直して気になったんだけど、
この程度のプログラムは、Cで書いてもC++で書いてもどっちがいいという
ものでもない。
Cがある程度わかってて、C++は全然わかんないというならCの方がいいかも。
scanfのエラーなんてのはCレベルでの問題だし。
C++やるにしてもCの基礎は重要だから、Cの標準ライブラリでこの程度の
ことはできるようにしといたほうがいいよ。

余計なお世話かもしれないけど・・・
0500490NGNG
つーわけど、今回はちょっと先走ってしまったカモ。
お騒がせしました。


500ゲット(藁
0501質問NGNG
int って16bitの環境と32bitの環境があるけど、ソースを公開してる人は、
「これは32bitの環境用のソースです」
とかわざわざ書いてないような気がします。
0502デフォルトの名無しさんNGNG
>>501
動作確認したコンパイラなんかをドキュメントに書いたりするよな。
0503デフォルトの名無しさんNGNG
>>501
つーか、intの幅が違ったら動かなくなるようなコードを何の注釈もなく
配ってるような奴のソースを喜んで使わない。
0504487NGNG
一度自分で考えて作ってみたんですが、
C++にCの命令を混ぜて作りました。
fgetsとかfputsとか使って。
昨日教えて頂いたサンプルを一度
走らせてみたんですが、エラーが
出て自力では見たことのない命令
が多くて直しきれませんでした。
今はCとC++の違いを勉強しています。
coutとcitも慣れると便利です。
0505デフォルトの名無しさんNGNG
>>501
どっちかというと今の時代16ビットの方が珍しいので、
何も書いてなかったら32ビットで、16ビットの場合は明記する
と考えて良いのでは。
0506神NGNG
だれか縦型探索についてプログラムを交えながら
わかりやすく説明してください。
0507デフォルトの名無しさんNGNG
>>506
 プログラムと言われても、どんな問題を解きたいかわからないと
書きようがない。
 まず、何がわからないかを明らかにしてくれ。
0508 NGNG
>>506

取りあえずデータ木でも示してやろうと思ったが2木か多木かも書いてない。
大学行くのやめなさい。
0509神NGNG
とりあえず3人の人食い人種と3人の宣教師が船で川を渡るやつ
教えてください。
0510_NGNG
>>509
大工生

左から宣教師、人喰い、船。

331 000
310 021
321 010
300 031
311 020
110 221
221 110
020 311
031 300
010 321
021 310
000 331

簡単。
0511デフォルトの名無しさんNGNG
縦形探索 :
隣接行列 adjacent[i][j],1<=i<=n,1<=j<=n が与えられたとき,
グラフの連結成分(つながった部分)ごとに,番号の1番若い点から出発して縦型検索
でたどり,点の番号を書き並べる。隣接行列 a[i][j]は点i,jが線でつながっていれ
ばa[i][j]=1,そうでなければ a[i][j]=0である。たとえば隣接行列が
a[1][2]=a[2][1]=a[2][3]=a[3][2]=a[1][3]=a[3][1] =a[2][4]=a[4][2]=a[5][7]=a[7][5]=1
他=0 であったとすると,出力は 1: 1 2 3 4 2: 5 7 3: 6 となる
0512_NGNG
>>511
問題丸写しか。
「質問」の意味を取りあえず辞書で調べなさいな。
0513511NGNG
そこら辺にのってた解説のコピペ。
0514511NGNG
問題じゃない。
0515デフォルトの名無しさんNGNG
>>509
とりあえずいけるところまで行って、だめだったら引き返す。
この繰り返し。

今の問題だったら、ためしに一人宣教師船に載せるするとー
あーだめだー。じゃあ次はー、って感じで進めてくのかな。
無限ループに注意。
0516教えてくださいNGNG
numread = fread(&chr,sizeof(char),1,fp);

プログラムがここにぶつかったとき(たぶん)に、

セグメント例外 (コアダンプしました)

という表示がされて、止まってしまいます。
何ででしょう。たすけてください。
0517デフォルトの名無しさんNGNG
>>516
特におかしいようには見えないよ。
一応考えられるのは、
・chrがchar型でない
・fpが、正しくない(ファイルオープンに失敗してるとか)
0518デフォルトの名無しさんNGNG
numreadの実体がないとか。
0519デフォルトの名無しさんNGNG
chrが実はconst charだったとかいう可能性もあるかも。
でも多分、fopen()のエラーチェックをちゃんとやってなくて実はopenできて
ないとかではないかな?
0520デフォルトの名無しさんNGNG
もしくは自分でfread()を作ったことを忘れてるか
0521516NGNG
>>517、518、519

レス本当にありがとうございます。

解決しました。
単に開くファイルの名前が間違っていただけでした。
ホントにすみません。
これからは、もう少し粘ってから質問します。
0522神NGNG
縦型探索についていろいろ教えてくださった方々。
助かりました。ありがとうございます。
0523神NGNG
たびたび申し訳ありません。
やっぱり、宣教師と人食い人種のやつの
プログラムの作り方教えてください。
って言うか作ってください。
お願いします。
0524デフォルトの名無しさんNGNG
>>523
ここの>>1を100回復唱して留年しろ。
0525教えてNGNG
学校の宿題でVBAの問題が出たんですけど全然わかりません。教えてください。
問題1
 3つの整数a,b,cを受取り、それをa�I2(2乗)+bx+c=0としてxの解を求める関数「二次方程式」を作れ。
 2つの解のうち、いずれか一方を返せばよい
  ヒント 解の公式を適用する平方根は関数Sqrを使用する
問題2
 セル範囲を2つ引数にし、対応するセルの値がすべて同じなら1を、一つでも違うなら0を返す関数「比較」を作れ。
  ヒント Function 比較(c1, c2)
       ここで、セル1つずつを比較する
      End Function
0526デフォルトの名無しさんNGNG
>>523
Prologで作ったのならもっているぞ。
0527 NGNG
>>523
 とりあえず、作った。でもここには載せません。
 締め切りギリギリまで努力してください。
 で、その努力の跡が見られ、それでも尚完成してなかればここに
ソース載せます。
(つまりは未完成でもいいから自分で書いて、載せてみろということ)
0528デフォルトの名無しさんNGNG
>>525
何がわからないのかくらい書いたらどうだ。
それすらわからないならおとなしく単位落とせ。
0529教えてNGNG
>>528 全くわかんない
0530デフォルトの名無しさんNGNG
>>529 全くわかんない
0531教えてNGNG
>>529 やっぱりね
0532神NGNG
>>527
あなたが本当に作ったのなら頑張りますが
期限まで頑張らせといて最終的に無視とかいうのだけはやめて欲しいです。
本当に作ったのなら証拠を見せてください。
0533527NGNG
>>532
んなこといわれてもなぁ。。
どうすれば信じる?
0534デフォルトの名無しさんNGNG
>>532
あなたが本当に自分の力で宿題を解くのなら協力しますが、
模範解答を出させておいて最終的に丸写しとかいうのだけはやめて欲しいです。
本当に自分で考えるなら証拠を見せてください。
0535デフォルトの名無しさんNGNG
>>533
相手にすんなよ(w
0536527NGNG
331 000
220 111
321 010
300 031
311 020
110 221
221 110
020 311
031 300
010 321
111 220
000 331
021 310
とりあえず、実行結果はこうだけど。
0537デフォルトの名無しさんNGNG
>>532
ワラタ(w
宿題丸投げして証拠を見せろと来たか(w
こういう奴を卒業させる必要ねえぞ。
0538デフォルトの名無しさんNGNG
 別に、この人に限ったことじゃないけれど、
 あくまで、宿題を手伝ってあげるスレであって、代わりにやって
あげるスレでないことは理解して欲しいものです。
0539デフォルトの名無しさんNGNG
「宿題見てやるよ」だからねぇ
「宿題やってやるよ」スレッドでも建てるか?
0540デフォルトの名無しさんNGNG
>>539
教育的配慮上、やめた方がいいと思う。
丸写しじゃ本人の為にならんよ。
0541デフォルトの名無しさんNGNG
丸投げ他力本願厨房は塗装工になってもらうほかないね。
http://www.asahi.com/national/update/1120/020.html
0542デフォルトの名無しさんNGNG
>>540
本人のためというか、そういう奴が卒業して近くに就職して来る可能性は
充分ある。卒業証書を持ってくる以上履修していて然るべき事をまた教え
直すのは無駄。あくまで自分へのフィードバックだと思って丸投げ厨を
無視すべし>プロ各位
0543神NGNG
実はこれが宿題というのは嘘です。
僕はただ単に人工知能に興味があって独学で勉強してる文芸学部の一年生です。
最近、将棋のAIを作りたくなっていろいろ本を読んで勉強していたんですが、
何から手をつけていいのかわからなくて
とりあえず縦型探索とかいうのを実際に作ってみよう
と言うふうに思いましてここに書き込んだ次第です。
今縦型探索という所でつまってますがそこは基本的な部分なので
多分ここがわかれば横型探索やヒューリスティック探索とか言うのも
プログラムは組んでいけると思います。
なので、(忙しければ大体でいいので)プログラムの作り方を教えてください。
(できればわかりやすく・・・。)
0544デフォルトの名無しさんNGNG
>>543
 まずは、プログラムの勉強からはじめてください。それが第一。
 本読んで全く理解できないなら、ここで説明受けても理解できるはず
ありません。せめて、わからない部分書いてくれないと対処できません。
 あと、横型探索は、縦型探索より遥かに(実装するのが)難しい(面倒)です。
 将棋とかのプログラムについては結構知っていますが、総合的なプログラム
能力が必要となります。
 いずれにしろ、地道にCの勉強からはじめることをお勧めします。
そうすれば、縦型探索くらい簡単に理解できると思います。
0545デフォルトの名無しさんNGNG
宿題の質の低さ、ってのも問題あると思うけど
実際の業務でそんな宿題以下のつまらない仕様とかも
よくある話で、無茶な社内規定やコーディング規約に
縛られてプログラミングしてる人も多いと思う。

ヘンテコリンな宿題は、結構 頭の体操にもなるし
丸投げしてもらったのを解いて、答えを小出しにして
もがく学生を眺めるのも それはそれで面白い。
0546デフォルトの名無しさんNGNG
趣味でやってるんなら言葉なんて後からついてくるもんだよね。
「あ、今まで俺がやってた事を縦型探索っていうのか」みたいな感じで。
何も分かってないうちから用語を振り回しているだけっていうのも...
0547デフォルトの名無しさんNGNG
>>545
たまに大嘘を混ぜておくとより効果的だね。
一見動いてるように見えて明らかなバグを仕込んでおくとか、口頭諮問で
絶対答えられないようなコードを書いてやるとか。
0548_NGNG
クソ大学の三年生程度なら解けてしかりの問題。
クソ大学の三年生が言ってるんだから間違いない。
もう一回やり直しな。
0549デフォルトの名無しさんNGNG
>543の言葉を信じるとして
趣味で将棋のプログラムが作りたいならとりあえず
合法的な手をピックアップする事からはじめて
それらの中から初めは乱数で手を選ぶだけでも面白いと思うよ。
めちゃくちゃ弱いプログラムになるだろうけど、それはそれで面白いと思う。
あるいは選んだ手の中でコマの損得を計算して一番有利なものを選んでみるとか。
そうすると次は一手先を読んで同じ事をして...
ほら、先が見えてきましたね。
0550デフォルトの名無しさんNGNG
【社会】考えるより、暗記する勉強が好き 中学生調査 11/20
http://news.2ch.net/test/read.cgi?bbs=newsplus&key=1006242655
1 名前:猫汁φ ★ 投稿日:01/11/20 16:50 ID:???
暗記する勉強が好きという生徒は、考える勉強が好きという生徒の2倍。
通信教育大手のベネッセコーポレーション(本社・岡山市)が全国の中学生を対象にした
アンケート結果で、こんな姿が見えてきた。公立中では来春から生徒の自主性を重視した
「総合的な学習の時間」が本格的に始まるが、長年続いてきた「勉強=暗記」という意識は
そう簡単に変わりそうにない?(16:33)

http://www.asahi.com/national/update/1120/020.html
ソース続きは>>2


2 名前:猫汁φ ★ 投稿日:01/11/20 16:51 ID:???
今年5〜6月、全国の公立中学生約2500人を対象に調査した。

勉強方法を二分し、どちらに当てはまるかを尋ねると「暗記しようとする」との回答が67%で
「出来るだけ考えようとする」(30%)の2倍以上だった。

「分からないところはどうするか」には、「友達に聞く」が64%に上り「自分で考える」(34%)を
大きく引き離した。具体的な勉強方法では「分からない時には辞書を引く」は3人に1人。
「図鑑や辞典で調べる」は10人に1人だけだった。

公立小中学校で来年度から本格的に始まる「総合的な学習の時間」は
数字による成績評価もなく、従来の教科ではカバーしきれなかった
「自ら学び、考え、主体的に判断する能力」(文部科学省)を育てるのが目標だ。
多くの学校ではすでにカリキュラムに組み込み、実施している。

しかし、同社は「効率を追求する受験勉強の意識が根強く残っている」と分析。
「自分で考えようとする姿勢が子どもの間に根付くには、当分かかるのではないか」とみている。
(16:33)
http://www.asahi.com/national/update/1120/020.html
だから教えて君が多いのか…
0551デフォルトの名無しさんNGNG
友達に聞くことはいいことだし、必要なことだと思う。
友達に聞いて「なるほど」と思うことは、考えることと同じ。
でもレポートの丸写しはいけない。為にならない。

暗記は、テストという要素のぞけば、語学以外はそんな重要じゃない気がする。
考えているうちに自然と覚えるのが理想。
暗記できなくても、「あー、昔こんなのやったっけな」って思うだけでも違う。

 で、何を言いたいかというと、わからない事を人に聞くのはいい事だから、
別にこのスレで質問するのを遠慮することはないと思う、ということ。
 でも、あくまで何がわからないか、ということがわかるレベルまでは、自分
で考えないと意味は無いし、誰も教えてくれない。
0552デフォルトの名無しさんNGNG
英語だって暗記なんかしないよ。
わからない単語がでてきたら、辞書で調べる。
昔だったら、紙の辞書。いまなら、電子辞書やオンライン辞書。
で、決して覚えようとしない。代わりに理解する。理解したら忘れる。
しばらくしてまたその単語に出会うと忘れているので、また辞書を引く。
これを14回繰り返すと、自然に覚える。わざわざ覚えようと努力する必要はない。

一番大事なのは、理解すること。理解できれば、いつか覚える。
0553デフォルトの名無しさんNGNG
英語の学習に電子辞書つかうのはお勧めできないよ。
紙の辞書引いてる時にはほかの項目も目に入るから、
なんとなく語彙が増えてくんだよ。
0554デフォルトの名無しさんNGNG
>>552
でも、単語が出てきたときに暗記するよう努力した方が上達早いと思うよ。
特にしゃべったり聞いたりするときには、パッとでてこないと辛い。
ボキャブラリーには理解も何もないでしょう。
言葉の意味を覚えてるか覚えてないか。
0555デフォルトの名無しさんNGNG
覚えるって、いったい何を覚えるのか。
例えば、Theを辞書で引けば意味や用法が30くらい載っている。それらを全部覚えるのか。
それとも、現在でてきたストーリーの中で使われている一部の意味だけ覚えるのか。

用法や意味がたくさんあっても、その語のイメージは一つしかない。そのイメージを把握するのが大切。
その元になる根本的なイメージからいろんな派生的な意味が出てくる。

何か長文を読んでいて、その中で、こういう意味でこの語が使われた。
こういうイメージをもつ、これが理解する、ということ。

英語デキナイ君は、ここを勘違いして暗記しようとしてしまう。だから就職しても height をハイトと発音したり width にいたっては「幅」とか逝ってごまかしたりする。

また、年中、「さっさとXXの日本語訳だせや!」
「●●英語版しかないんだ、、鬱」
とか泣き言いっとる。

だいたい、記憶とは、必要な情報は記憶し、必要ない情報は忘れる、というふうに寝てるあいだに海馬でフィルターかけて勝手に行う作業だよ。
「記憶しよう!」とがんばるのは
「心臓を動かそう!」
と一生懸命になってるのと同じ。

小学生の時期に、変な塾に通ってたやつに多い。子供なんてバカだから、恐怖心で煽れば怖くて必死になって覚える。
スパルタ式というやつだ。体育会系の講師が大声で怒鳴りまくる。こういう塾は最悪だ。
0556デフォルトの名無しさんNGNG
height はハイトでよかったね。スマソ。
0557デフォルトの名無しさんNGNG
>>553
同意。
例文がいっぱい載っている辞書がいい。
0558デフォルトの名無しさんNGNG
電子辞書の方が絶対いい。
例文を読んでいて、わからない単語があったら、jumpボタン一発で飛べる。

紙だといちいちメモしてひきなおさないといけない。
一度電子辞書を使ったら、二度と紙には戻れない。
政府は税金を使って、生徒一人に電子辞書一台与えるべきだ。
0559デフォルトの名無しさんNGNG
まー電子辞書で英語教育を受けた人間が出てこないとホントの
とこはわかんないんだろうけどさー、
「頻出英単語○○○」みたいなの使ってる奴よりも、きちんと辞書を引いてた
奴の方が、確実に英語が読み書きできてたぞ。
0560デフォルトの名無しさんNGNG
>>555
 趣味で英語の小説とか読んでるけどさ、辞書なしで読むんで
わからない単語とか読み飛ばしていっちゃうから、新たにボキャ
ブラリは付かない。たまに単語わからないと文章が意味わからない
時には辞書ひいたりするけど、それでもやっぱ全然身に付かない。
 そこで、少し文章読むのとめて、「ああ、これってこういう意味
で、こういう使い方するんだ」と思い、覚えようと努力すること。
これが結構重要なんじゃないかな、と最近思ってるわけです。
0561デフォルトの名無しさんNGNG
>>560
あなたの言っている「覚える」という意味は、私の言っている「理解する」と同じことです。


あと、わかんない単語がでてきたら、絶対に見逃さないですぐに辞書引いてください。
紙ベースのときは、24時間辞書持ち歩くので重くて大変だった。
電子辞書は軽くていいね。ポケットに入る。
0562デフォルトの名無しさんNGNG
好きなことは覚えるの早いから、コンピュータに関するドキュメントを
読むに限る。
0563デフォルトの名無しさんNGNG
紙の辞書見た方がいいってのは同意。
ポルノ小説の原書読むのに俗語辞典とか引いて目的外の項目に目がとまって
予定外にハァハァしてしまったり(w
0564デフォルトの名無しさんNGNG
その点ではLinuxはハウツーの文書がまとまって存在するから、
英語の勉強になった。
0565デフォルトの名無しさんNGNG
>>561
 ただ、語学と、数学やプログラムとの決定的な違いは、語学の場合は
覚えてないといけないことってのが多い。
 数学で公式忘れたり、プログラムで命令忘れたりしても調べてればなん
とかなる。でも、読むときはともかく、しゃべってるときとか、聞いて
る時には、辞書なんて調べてられない。「何度も繰り返しやってれば、
そのうち覚えるさ」的ではダメで、いちいち覚えようと努力する貪欲さ
がないと、語学はダメだと思うのです。
 その点他のものと区別しないといけないだろうってことで言いたかっ
たわけですが、板違いなのでsage。
0566デフォルトの名無しさんNGNG
表現力でカバーする
0567デフォルトの名無しさんNGNG
プログラムと直接関係無いけど、なんかいい感じ。
0568デフォルトの名無しさんNGNG
 変に貧困なボキャブラリーで言いまわすより、ニュアンスが微妙に
違っても暗記した単語を使った方が通じやすいと思うよ。
 もちろんイントネーションまで含めてしっかり暗記しないといけな
いけどね。
0569デフォルトの名無しさんNGNG
なんだかんだ言っても、最後はボディーランゲージ。
日頃からコンパで、ジェスチャークイズやっとけ。
0570kNGNG
標準入力から50単語、3行以上の英文テキストを読み込み、
以下を標準出力に書き出すプログラムを作成して下さい。
ここで単語間の区切りは、スペース、タブ、コンマ、ピリオド改行のいずれかであるとし
、入力の終了はEOF(^d)とします。

(1)テキスト中のそう単語数、総文字数、単語あたりの平均文字数を求め、
    出力する。

(2)テキスト中の各文字(A〜Zの全26文字)の出現回数を求め、その一覧を
    出力する。

(3)テキスト中の英字を出現回数の降順に並べ、出力する。

(4)テキスト中の1文字単語、2文字単語、3文字単語・・・
   の出現回数を求め、その一覧を出力する。

(1),(2)はできました。(3)、(4)がわかりません
0571デフォルトの名無しさんNGNG
>>570 言語はなによ?
(3) (2)が出来たなら、その出力を文字順じゃなくて出現回数順にしてみろ。
(4) (1)で単語にわけるのは出来てるだろ。その単語の文字数をindexにして
(2)と同じようにやってみればいいんじゃないか?
0572デフォルトの名無しさんNGNG
Ruby房の出番ですよ
0573デフォルトの名無しさんNGNG
Ruby房向けの宿題だな
0574デフォルトの名無しさんNGNG
C++(Cでもいいのかも)でファイルの行数を出力するプログラムを教えてください

改行までが一行だそうです
0575デフォルトの名無しさんNGNG
>>574
ftp://ftp.ne.jp/GNU/textutils/textutils-2.0.tar.gz
ほれ。

textutils-2.0/src/wc.c な (藁
0576エッチマンNGNG
>>574
main(int argc,char** argv){
int fd,c,num=0;
fd=open(argv[1],O_RDONLY);
while(read(fd,&c,1)>0)if(c=='\n')number++;
printf("%d\n",number);
}
動くかもしれないし動かないかもしれない
0577 NGNG
>>576

戻り値省くのあんまり非推奨。
0578デフォルトの名無しさんNGNG
>>577
それ言ったら、openだって、標準じゃないし。
0579デフォルトの名無しさんNGNG
>>572-573
ほい。もっと短くできるかも。

---- wc.rb
#!/usr/bin/env ruby
words = ARGF.read.split(/[\s\t,\.]/)

#1
puts "1)"
h = Hash.new(0)
words.each{|w| h[w] += 1}
puts wc = h.keys.size
puts cc = h.keys.join.size
puts cc.to_f / wc

#2
puts "2)"
h2 = Hash.new(0)
words.join.each_byte{|c| h2[c.chr.downcase] += 1}
ary = h2.to_a.select{|l,c| /[a-z]/ =~ l}
ary.sort{|a,b| a[0] <=> b[0]}.each{|l,c| puts "#{l}:#{c}"}

#3
puts "3)"
ary.sort{|a,b| b[1]<=>a[1]}.each{|l,c| puts "#{c}:#{l}"}

#4
puts"4)"
h3 = Hash.new(0)
h.keys.collect{|w| w.size}.each{|s| h3[s]+=1}
h3.to_a.sort{|a,b| a[0]<=>b[0]}.each{|s,c| puts "#{s}:#{c}"}
0580エッチマンNGNG
>>579
rubyの動く環境なら、それこそwcくらい動くんじゃないかと
思うんですけど、外部コマンドを呼び出すのは美徳に反しますか?
0581デフォルトの名無しさんNGNG
>>580
行数数えるだけならね。579 は 570 のプログラム。

テキストファイルの行数を数えるスクリプトなら一行で済む。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/14491
0582デフォルトの名無しさんNGNG
Cでも1行。
int main(void) { int c, i=0; while((c=getchar()) != EOF) if (c=='\n') i++; printf("%i\n", i); return 0; }
0583C++NGNG
#include <iostream.h>
int main(){char c;int i=0;while(cin.get(c))if('\n'==c)i++;cout<<i<<endl;return 0;}
0584質問NGNG
条件演算子って仕事で使っていいの?
b=a>0 ? 1 : 0;
みたいなやつ。
0585デフォルトの名無しさんNGNG
>>584 K&Rには仕事には使うなと書いてありましたが何か?
0586デフォルトの名無しさんNGNG
2chでの質問の仕方をマスターしました。

基本的に、ネタっぽい口調で質問すると、ネタっぽく答えてくれます。
この質問の仕方で有益な情報を得られる確率は実に80%を超える。

高圧的な態度や初心者(厨房)丸出しは晒されます。
0587デフォルトの名無しさんNGNG
>>582と>>583を見ると、
if(c=='\n') と if('\n'==c) の違いがあるね。意味はおなじだが。
条件式からすると前者のほうが自然のような気がするのは折れだけ??
0588デフォルトの名無しさんNGNG
>>586
初心者でも、謙虚な姿勢で質問すれば晒されない。
ただ、板違いは晒される。
0589デフォルトの名無しさんNGNG
>>587
「==」を「=」とtypoした時、if (c='\n')だとエラーにならないけど
if ('\n'=c)ならエラーになるので、後者のスタイルで書く人もいるよ。
どっちのスタイルがいいかはC言語の初期から論争が繰り広げられているので
かかわらないのが吉。
0590デフォルトの名無しさんNGNG
>>589
ほとんど、決着のついた論争でしょう。
if (c=='\n') こう書くほうが、圧倒的に多数派。
0591 NGNG
いっそif(c - '\n' == 0)とか。
これもc - '\n' = 0はエラーだし。
可読性は消滅するが・・・。
0592デフォルトの名無しさんNGNG
演算子は利用禁止。

#define eq(a,b) ((a)==(b))


is ( eq(c, 'n') )
0593デフォルトの名無しさんNGNG
>>592
(・∀・)イイ!鴨
0594デフォルトの名無しさんNGNG
定数で宣言
const char c;
0595すきーまーNGNG
Cってequal関数ないの?
0596デフォルトの名無しさんNGNG
MOV AL,[c]
CMP AL,'\n'
JE  xxxxxx

MOV AL,'\n'
CMP AL,[c]
JE  xxxxxx

MOV AL,[c]
SUB AL,'\n'
JE  xxxxxx

変わらん・・・
0597 NGNG
つか、=と==を間違えるか?
普通のプログラマなら、何年かに一回あるかどうかだろ。
こんなバグ。
仮に間違えたとしても、警告でるし。
0598デフォルトの名無しさんNGNG
マクロを組んで、
= を赤、
==を青
で表示させるといいよ。
0599デフォルトの名無しさんNGNG
>>598
賢い上にカッコイイ!
0600デフォルトの名無しさんNGNG
600ゲットオォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0601質問NGNG
ビットフィールドのところを読んでいます。
「どんな小さなビット数で済むようなデーターも、それを表現するためには、8ビットを消費してしまうのが普通です。1ビットで済むデーターであっても8ビットを使ってしまいます。そこで、nビットで済むデーターなら、nビットを割り当てよう
という機能が追加されました。」
と書いてますが、そんな細かいことまで気にする必要はあるのでしょうか?
私にマシンにはメモリー512MBのってますよ?
0602納豆NGNG
問「入力した10個の数値を大きい順に順位を表示するプログラムを作成しなさい。
その際、同じ数値が入力された場合は順位を同じにして同順処理を行うこと。
例 12,34,23,65,45,788,65,67,1,99
表示 No1=788 No2=99 No3=67 No4=65 No4=65 No6=45 No7=34 No8=23 No9=12 No10=1

入力部はできたんですが・・・
0603デフォルトの名無しさんNGNG
>>602
ようするに、ソートして出力する、ってこと?
a[0],a[1].a[2].a[3].a[4].a[5],a[6],a[7],a[8],a[9] にそれぞれ数値を格納する。
a[0] と a[1] の大きさを比べる。a[0]>=a[1]だったら、a[1]>=a[2] を比べる処理に移る。
a[0]<a[1]だったら、a[0]とa[1]の数値をスワップする。そしてまた a[0] と a[1] の大きさを比べる。
0604デフォルトの名無しさんNGNG
>>601
むかしむかし、あるところに、128KBしかメモリのないパソコンがありました。
0605デフォルトの名無しさんNGNG
>>604
いいなあ
PV-7は8kだったよ
0606デフォルトの名無しさんNGNG
VRAMとか。RGB 5bitずつ割り当てて16bit modeなんてあるし。
0607デフォルトの名無しさんNGNG
フルカラーモードと16bitカラーモードでは明らかにスピード違うし。(ゲームとか。)
0608デフォルトの名無しさんNGNG
>>603
要するに、となりあう2つを比較して、大きい方を左側に入れ替える
のを繰り返すということだね。
入れ替えが起こらなくなったら、終了
0609デフォルトの名無しさんNGNG
なんてバブリーな。
0610デフォルトの名無しさんNGNG
(1) n個の配列(data[0]〜data[n-1])について、適当に基準となる添字 i(一般的にi=n/2)を定める。
(2) i より左側には data[i] より小さな値が、
(3) i より右側には data[i] より大きな値がくるように並び替える.

i より左側(data[0]〜data[i-1])について、(1)-(3)の処理を行う
i より右側(data[n+1]〜data[n-1])について、(1)-(3)の処理を行う
0611仕様書無しさんNGNG
>>602
とりあえずアルゴリズムの入門書一冊買え。
一通り読んどくだけでも、問題にぶつかったときに、解決法を
思いつきやすく(というか思い出しやすく)なるぞ。
0612デフォルトの名無しさんNGNG
その前に情報科学の入門書だな
0613質問NGNG
レジスタってなんで速いの?
0614デフォルトの名無しさんNGNG
レジスタだから
0615質問NGNG
#include <stdio.h>
int main(void)
{
   int a;
   printf("%d",a);
}

このソースをコンパイルして実行したときに、何が表示されるか予想して当てることはできますか?
0616デフォルトの名無しさんNGNG
CPUと直結してるから。
メモリは余計な所をいろいろ通るから遅いの。
0617デフォルトの名無しさんNGNG
>>615
普通は無理。
0618デフォルトの名無しさんNGNG
構文解析について解説しているいいサイト、知りませんか?
Pascalで任意の入力式に対して真理値表を描くプログラムを
組んでいるのですが、その任意の入力式をどうプログラムで
処理できる形に変えるか悩んでいます。
0619質問NGNG
4次元以上の配列tって仕事で使う?
0620デフォルトの名無しさんNGNG
>>619
なぜいきなり4次元なのか。
その質問には>>619の思い込みがたんまりと染み込んでる気がするの。
0621デフォルトの名無しさんNGNG
二次方程式の解を求めるプログラム教えてください
0622デフォルトの名無しさんNGNG
ちなみに、3,4,5次までやるのが宿題です
でも2次でつっかえてます
0623質問NGNG
continue;
って、その回の処理をスキップする命令なのだから、
skip;
と改名したほうがいいと思いますが?
0624デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void)
{
   int a;
+  printf("%d",a);
   printf("%d",a);
}

これで予測可能
0625デフォルトの名無しさんNGNG
>>623
いまさら改名されると逆に迷惑。
0626デフォルトの名無しさんNGNG
二次だろうが三児だろうが以下の方法で求められるだろバカ。

L = -2>>15
U = +2>>15
D = 10000
A = 0

do{
x の値を L から T まで D づつ変化させる
関数 f(x) がもっともゼロに近くなったときの X を A に記録
L = A - D
U = A + D
D /= 10
} ( D が 機会εを上回っている間 )
0627デフォルトの名無しさんNGNG
longの範囲に解が無い時ってどうするんだろうね
0628デフォルトの名無しさんNGNG
>>626
それじゃあ、解が一個しか求まらない気がするが。
3次以上の場合、解があるのに、求まらない場合もある。

>>621-622
二次方程式ときたいだけなら、解の公式使いなされ。

でも、これじゃあ3次以上は応用できない。
「ニュートン法」を使いなされ。
詳細については「ニュートン法」で検索しなされ。
0629628NGNG
ちょいフォロー。
ニュートン法もやっぱ一つしか解が求まらないから、
その求まった解を使って、次数を下げて再計算する。
0630628NGNG
って、別にニュートン法とかその辺が本質でないな(汗

えっと、前の二つのレス忘れてもらって。
まず、極大値・極小値を全部求める。つまり微分して解を求めるのだが。
この極値を求めるのは次数が一つ下がるから、再帰的にやればよい。
で、極値が全部もとまったら、そのときのf(x)の値を全部計算して、
+から−に変化しているところを探す。
 そうすると、その間に解が一つだけあることがわかるから。
その区間を細かく区切っていって、+から−に変化してるところに
解があるんだから、だんだん範囲を絞り込んでいけばいい。
0631デフォルトの名無しさんNGNG
>>631
それくらい、Q&A読んでから書け。とにかく自分で調
べようとしないで脊髄反射で書くから「頭悪い」とか言われてしまうん
だよ。分からないことをできるだけ自分で調べることは、勉強の基
本だろ、勉強が嫌いな奴にはまともなゲームなど作れない!
 これは楽譜も読めないのに曲が書けるというより厳しい事実だぞ。
0632>>631NGNG
再帰!
0633デフォルトの名無しさんNGNG
>>615
それってさ、環境にもよるけどさ、セキュリティーホールなんだよね
ハッカーと呼ばれるような人たちはこれを利用して解析したと聞く
0634383NGNG
↑セキュリティーホールっすか!?
0635デフォルトの名無しさんNGNG
なるほど初期化してなければ他人の研究を盗めるかも知れんな
0636514NGNG
マジで困っています。cに詳しい方、助けてください!!
6000個のデータが入ったテキストファイルを1000個のデータ(double)の入った6つのテキストファイルに分割したいのですが、やり方がわかりません。
元のファイル名はdata.txt、新たに作られるファイルはそれぞれdata1.txt,data2.txt,data3.txt....という名前をつけなければいけません。
どなたか達人の方、教えてください。
お願いします。
0637デフォルトの名無しさんNGNG
>>636

他スレで514と名乗るもんじゃないよ。
0638デフォルトの名無しさんNGNG
perl でも使え。
0639デフォルトの名無しさんNGNG
>636
data.txtをバッファに入れ、
1バイトづつ調べ、1000個目の","の位置までを、
data1.txtにコピーすればいい。

最後の","は削除しておこう。
0640デフォルトの名無しさんNGNG
>>639

ああそうか。なにも','を取り除いて書き込まなくてもいいのか。
0641636NGNG
みなさんありがとうございました。
問題解決しました!!
0642デフォルトの名無しさんNGNG
あってる?

void write1000(FILE* src, char* filename)
{
 FILE *dst;
 char c;
 int count;

 count = 0;
 dst = fopen(filename, "w");

 for(;;)
 {
  c = getc(src);

  if (c == EOF)
  {
   fclose(dst);
   return;
  }

  if (c == ',')
  {
   count++;

   if (count == 1000)
   {
    fclose(dst);
    return;
   }
  }

  putc(c, dst);
 }

}

void main(void)
{
 FILE *src;
 src = fopen("data.txt", "r");
 write1000(src, "data1.txt");
 write1000(src, "data2.txt");
 write1000(src, "data3.txt");
 write1000(src, "data4.txt");
 write1000(src, "data5.txt");
 write1000(src, "data6.txt");
 fclose(src)
}
0643shNGNG
>>636
for i in 1 2 3 4 5 6; do
head -${i}000 < data.txt | tail -1000 > data$i.txt
done
0644質問NGNG
Cって関数のデフォルト引数って無いの?
0645デフォルトの名無しさんNGNG
>>644

デフォルト引数って何?
0646デフォルトの名無しさんNGNG
こういうやつ? C99 にはあるよ。
void f(int i=0)
{
}
0647646NGNG
ごめん、訂正。なかった。
0648デフォルトの名無しさんNGNG
国家試験とかで使われる受験番号ってユニークなの?
今データベース設計してる段階なんだけど、そこら辺がよく分かんない。
0649デフォルトの名無しさんNGNG
>>645
無いね。
0650デフォルトの名無しさんNGNG
相手(社団法人とか)もデータベース処理しているはずなので、
ユニークだと思うけどな。つーか、受験番号に重複があったら、
新聞沙汰だと思うが。
0651デフォルトの名無しさんNGNG
翌年同じ受験番号が振られるってことはあるかもよ。
0652648NGNG
>>650 >>651
どっちだろう。
0653質問NGNG
BDOS って何の略?
0654デフォルトの名無しさんNGNG
どういうコンテキストで出てきたのか言わないと、
マイナーな略語は意味不明
0655shNGNG
Bogus Dirty Obsolete Shit
0656デフォルトの名無しさんNGNG
これです。

「システムコールはアセンブラで行うのが基本ですが、C言語からも呼ぶことができます。
C言語ではこれをBDOSコールと称しています。」
0657デフォルトの名無しさんNGNG
書いてることにいろいろ間違うがあるけど、推測するに、
BIOSの書き間違いみたいな感じかと。
0658デフォルトの名無しさんNGNG
http://www1.nisiq.net/~cpulot/Dicb.htm#D

BDOS
Basic DOS
基本DOS
0659デフォルトの名無しさんNGNG
Basic Disk Operation System call ...?
Bridge to DOS かとも思ったけど...
0660デフォルトの名無しさんNGNG
かぶった(w
0661デフォルトの名無しさんNGNG
>>656
いったい何十年前の本を掘り起こして来た。
0662質問NGNG
(15×8)−(11×7÷2)をCASL2でサブルーチン使ったときの
プログラムを誰か出してください
0663デフォルトの名無しさんNGNG
>>662
まず、>>1 をよく読みなされ。
それから、どう聞くべきか考えなされ。
とりあえず、何がわからないのかは、最低限書きなされ。
0664662NGNG
CASL2やったこと無いから全部わからんのです。
0665デフォルトの名無しさんNGNG
じゃあ、まずやってみなさい。
0666デフォルトの名無しさんNGNG
dspプログラムわかる人いますか?
0667デフォルトの名無しさんNGNG
>>662
 CASL2で検索するといっぱい解説ページでてくるんで、適当に選んで
勉強しなされ。
 で、読んでてわからない部分あったらここで質問すれば答えてくれ
る人はいると思う。
0668デフォルトの名無しさんNGNG
>>666
くみこに訊け
http://pc.2ch.net/test/read.cgi/tech/988084737/
0669666NGNG
>668
ありがとです。
聞いてみました。
0670662NGNG
サブルーチン使うとSET ERRORと出て、15*8がすでにできないんですけど
0671Kusakabe YouichiNGNG
>>670: 662 wrote:
> サブルーチン使うとSET ERRORと出て、15*8がすでにできないんですけど
15*8 じゃなくて
15*8にすれば通ったりして:)
0672らららNGNG
超難問です。

全加算回路をNANDゲートだけで作りなさい。しかしゲートの数は10個以下にすること。
そして、論理式を簡単化した式と途中の式も記せ。
注:2入力NANDゲートのみ

いままでこの問題の最高記録、NANDゲート数8です。
0673名無しさんNGNG
>>672
機械・工学板行きな.
0674デフォルトの名無しさんNGNG
>>672
入出力の桁数が指定されてないけど。
0675デフォルトの名無しさんNGNG
全加算器はキャリー入出力付きの1ビット加算器
0676デフォルトの名無しさんNGNG
数学が苦手でもこの業界でやっていけますでしょうか?
高度な数学知識がなくても四則演算だけできればよいと
思いますが、どんなときに必要になるのでしょうか?
0677デフォルトの名無しさんNGNG
>>676
画像や音声などの信号処理系では数学の知識は必須。
プログラミング全般で言えば数学のセンスが必要。
ここでいうセンスとは、問題を適切な定理やアルゴリズムを使って論理的に証明する能力のこと。

ま、今それがなくても鍛えることは可能。
良い環境の会社に入ることだね。
0678デフォルトの名無しさんNGNG
>>675
NAND3個
0679676NGNG
>>677
こんな遅い時間にありがとうございます。
そんなに難しいアルゴリズムでなければ理解できますが、
画像や音声のなど処理は専門の知識が必要ということですね。
とりあえずは巷に出回っているようなフリーウェアのようなんを
作ってみようと考えていますので、難しい数学知識はいらない
ですよね。いろいろ勉強してみたいと思います。
0680デフォルトの名無しさんNGNG
>>675
下位からのキャリーと二系統の入力、系3系統を入力として、
出力+キャリー出力の、3つの出力ってことになるのかな。

・・・最小必要数求めたいなら全探索するプログラム書いた方がはやいかもな。
0681デフォルトの名無しさんNGNG
・・・二つの出力ですね(汗
0682amoNGNG
javaで π(パイ)の計算方法を教えてください。
注意;↓の方法

π=4− 4/3 + 4/5 + 4/7 +・・・・4/9999
和の方法がわかりません。わかる方?。
0683デフォルトの名無しさんNGNG
あちこちに書くんじゃねーよ、馬鹿。
0684デフォルトの名無しさんNGNG
pi=4.0 - 4.0/3.0 + /*中略*/ 4.0/9999.0;
0685デフォルトの名無しさんNGNG
 ∞
2 Σ { 1/(2k-1) }
 k=1
0686デフォルトの名無しさんNGNG
つーか>>682の式からしてすでに間違っちょる。
0687デフォルトの名無しさんNGNG
乗算のチューリングマシン教えてください!おねがいします。
0688ななしNGNG
乗算のチューリングマシン教えてください!おねがいします。
0689デフォルトの名無しさんNGNG
>>688 数学板に行け
0690デフォルトの名無しさんNGNG
誰か教えてください。
C言語でscanfを使うのはよくないって話を聞いたんですが、どうなんでしょう?
誰か説明してくれませんか?
0691デフォルトの名無しさんNGNG
>>690
書式指定かつ行単位でパラメータを得るのでエラー処理が柔軟にできない。
行儀のいい入力だけとは限らないからね。
俺はコードは長くなるが getchar 使ってる。

http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.1.6.html
http://aoki2.si.gunma-u.ac.jp/Hanasi/Algo/letsc/4-body.html
0692デフォルトの名無しさんNGNG
C++をはじめたばっかなんで、くだらない質問なんですけど、
文字列の入れ替えを行うswap関数を作りたいのですが、
void swap(char *&x, char *&y)
と、宣言して関数組んだら関数使うときは
char a[len]="nanika";
char b[len]="doreka";
swap(a,b);
でいいんですか?
0693デフォルトの名無しさんNGNG
宿題教えてください。
620年〜680年に起こった出来事で、大化の改新以外に5つ上げろって言われてるんですが、
だれか教えてください。何かありませんか?
0694デフォルトの名無しさんNGNG
>>692
とりあえず、質問するときはageてください。

えっと、ポインタって参照渡しできるのかな・・。
何か出来ないような気がします。
型定義するか、参照渡しをあきらめるしか道がないような気がしますが、
もし、間違ってたらご指摘ください>識者の方

>>683
http://www.aura-press.com/scriba/index/tl-03.html
ここから適当に選んでください。自分だったら
630 第一回遣唐使
652 第一回の班田終わる
663 白村江の戦い
670 最初の全国的戸籍、庚午年籍が作られる
672 壬申の乱
あたりを選ぶ。
0695デフォルトの名無しさんNGNG
629 唐の玄奘がインド旅行へ出発
632 マホメット没
642 ササン朝ペルシャ滅亡
653 コーラン成立
661 ウマイヤ朝成立
0696デフォルトの名無しさんNGNG
>>692, >>694

> void swap(char *&x, char *&y)

こういう定義は出来ますが、この関数に

> char a[len]="nanika";
> char b[len]="doreka";
> swap(a,b);

これは渡せません。
0697デフォルトの名無しさんNGNG
>>693-695
ワラタ。ちゃんと答えるなよ。
0698デフォルトの名無しさんNGNG
>>692

素直に
void swap(char *x,char *y)
としたら?
0699デフォルトの名無しさんNGNG
>>698
それって良く無くない?
オレなら文字数も一緒に渡したいかも
0700デフォルトの名無しさんNGNG
>>699

文字数なんて渡す必要ある?
0701デフォルトの名無しさんNGNG
>>700
だってさー \0 が出てこなかったら怖いじゃん。
0702 NGNG
するなら
void swap(char **x,char **y)
としない?
0703デフォルトの名無しさんNGNG
>>701

それはその関数を使う奴が悪いよ。
例えば、strcpy()は文字数なんて渡さないよ。
0704デフォルトの名無しさんNGNG
>>703
まーそれもそうだね
0705デフォルトの名無しさんNGNG
>>702

なんで?
0706sageNGNG
C++ なら文字列に char じゃなくて string の方が
0707702NGNG
>>705
いや
void swap(char **a, char **b){
 char *temp;
 temp = *a;
 *a = *b;
 *b = temp;
}
こういうことしたいのかな、と。
問題をとり間違ってたらすまん。
0708あぼーんNGNG
あぼーん
0709デフォルトの名無しさんNGNG
void swap(string& x,string& y)
0710デフォルトの名無しさんNGNG
>>708
いろんなところで宣伝してるね。
うっとうしいからやめてね♪
0711情けない・・すみませんNGNG
本当に困った。javaのバブルソートのプログラムが書けない。
昇順に並べ替えるだけなのに・・。困りました。
0712デフォルトの名無しさんNGNG
>>709
正解。
0713デフォルトの名無しさんNGNG
>>711
んで、どこでつまってるのよ。
0714デフォルトの名無しさんNGNG
>>711
バブルソートってなんだっけ?
こういうのだっけ?
m[M]とかだと
for( i=0;i<M-2;i++)
{
 for( j=i;j<M-1;j++)
 {
  if( m[j]>m[j+1] )swap(&m[j],&m[j+1]);
 }
}
こんな感じ?
0715デフォルトの名無しさんNGNG
宿題君?>>711
0716デフォルトの名無しさんNGNG
>>715
そりゃ、宿題スレならそうなんじゃないか?
0717デフォルトの名無しさんNGNG
うーむ。削除はやいな。
0718デフォルトの名無しさんNGNG
宿題スレだから合ってるのか・・・。逝ってきます・・・。
0719デフォルトの名無しさんNGNG
>>709
それだったらこうじゃない?

string x = "aaaaa";
string y = "bbbbb";
x.swap(y);
0720デフォルトの名無しさんNGNG
>714
>  if( m[j]>m[j+1] )swap(&m[j],&m[j+1]);
ここが違うような……。
m[j] -> m[i]
0721デフォルトの名無しさんNGNG
>>720
バブルだからいいんじゃないの?
0722カオリネコNGNG
ファイルを読み込んでその行数を数えよ。という問題です。なんとなくfgetsを用いる気もするのですが、わかりません。
0723デフォルトの名無しさんNGNG
>>722

ファイルの内容を全てバッファに入れて、'\n'の数を調べて1を引けばいいんじゃない?
0724723NGNG
1を引くんじゃなくて1を足す。
0725デフォルトの名無しさんNGNG
>>722
このスレの580近辺をみなさい。
0726デフォルトの名無しさんNGNG
>>722
よっしゃ!日本語Cで書いてやる

main(引数)
{
 int a=0;
 ファイルオープン
 while(cに一文字読み込み == 成功)
 {
  if(c=='\n')a++;
 }
}
0727デフォルトの名無しさんNGNG
>>726

行数は改行文字の数+1だよ。
0728デフォルトの名無しさんNGNG
最後が改行だったら?
0729デフォルトの名無しさんNGNG
>>728

最後が改行でも、最後の行が空行になるだけでしょう?
0730デフォルトの名無しさんNGNG
改行
EOF<-これは行?
0731デフォルトの名無しさんNGNG
>>730

うん。

もし、行としないのなら、もっと処理を複雑にしないと。
0732デフォルトの名無しさんNGNG
ファイルの終端の前に必ず改行をいれる習慣があるから
最後の改行を行とは思わなかった。
0733デフォルトの名無しさんNGNG
便乗質問なんだけど、EOFって何?
DOSの頃から使ってるのにいまいち意味がよく分からない。
EOFの後も読み込むソフトと読み込まないやつの両方が有るけど、
「ここまでがテキスト」っていう紳士協定みたいな物?

ほんとのEnd of FileはEOFが無くても検出出来るでしょ?
0734デフォルトの名無しさんNGNG
>>733
そうです。紳士協定です。薬師丸弘子です。

つーか、基本的に無いものと考えといて、もしもあっても
パニックにならないように書けばいいのです。
0735デフォルトの名無しさんNGNG
>>731
ごめん。日本語C アップデートしました。
main(引数)
{
 int a=0;
 ファイルオープン
 while(一行読み込み == 成功)
 {
  a++;
 }
}
0736733NGNG
>>734
やっぱ、そうなんだ。サンクスコ
歴史的な理由でEOFが入ったテキストは存在するけど、
今では敢えて使わない物なんだよね?
0737デフォルトの名無しさんNGNG
便利だからよく使う。特に「普通」のファイルでないデバイスから
の入力では。
0738デフォルトの名無しさんNGNG
>>734
それは紳士同盟。
0739Kusakabe YouichiNGNG
>>736 733 wrote:
> 歴史的な理由でEOFが入ったテキストは存在するけど、

ないですよ:)

その昔CP/Mでは、「ファイルのサイズ」っていう属性がなかったので、
テキストファイルでは末尾に0x1aつけてたので、そういうファイルが
あっても対応できるようにしていた初期のMS-DOSのエディターなどでは
意識してたけど、それとEOFは別物です。
EOFってのはファイルに入っているわけじゃあないです。
0740デフォルトの名無しさんNGNG
>>738
やっとツッコミが入ったよ! 俺ひとりだけかと思った。
やーい年寄り!(お互い様です)
0741デフォルトの名無しさんNGNG
逃亡者を警察が捕まえようとしている、という設定で
ものすごく広いボードの上で逃げ回ります。

逃亡者は自分を中心とした5×5マスの視界を持ちます。
そんで警察を視界内に見つけたら警察から遠ざかるように逃げます。

この「見つける」っていうのと「遠ざかる」っていう表現で
上手いのが思いつきません。
どなたかお願いします。
0742デフォルトの名無しさんNGNG
自分を中心とした、っていうのは
(x,y)=(1,1)〜(5,5)の(3,3)に自分がいるっちゅーこってす。

あるいは逆に、自分を中心として
x=i-2〜i+2
y=j-2〜j+2
の視界を持つって事です。
0743デフォルトの名無しさんNGNG
>>741
見つける ってのは自分を中心とした5×5マスの中に警察がいるということ
遠ざかる ってのは 上のほうに見つけたら下へ、右に見つけたら
左へ、下に見つけたら上へ、右に見つけたら左へ移動するということ
0744デフォルトの名無しさんNGNG
言い忘れました。すいません。
逃亡者は1ターンで上下左右1歩ずつしか動けませんが
斜め方向も見れることになるわけです。

・斜め右上に見つけた場合に左・下どちらかランダムに動く
あるいは
・同時に警察2人(以上)を視界内に捉えた場合、
その2人(以上)から同時に遠ざかるような動きをさせたいのですが、
その表現のし方が…。
1人の場合は確かに警察がいる場所と逆の方向に
(ランダム選択で)動かせばいいというのはわかるのですが。
0745デフォルトの名無しさんNGNG
>>744
ためしに4方向に動いてみて
警察がいなくなる方向を調べて
0746デフォルトの名無しさんNGNG
>>744
警察だって、斜めに動けないんだよね?
だったら、警察との街区距離(x軸方向の差とy軸方向の差の和)が大きくなる
方に逃げればいい。二つ以上いる場合は、街区距離の最小値が最大になる方向
に逃げればいい。
0747デフォルトの名無しさんNGNG
>>744
警官→自分ベクトルの和を求めてその角度の方向に逃げる
0748747NGNG
よく考えるとダメか。
警官→自分ベクトルを求めて、長さを逆数にして、
その和の方向に逃げる。でどうだ
0749デフォルトの名無しさんNGNG
ベクトルを算出するのは手間だと思うんですよ。
マス目で移動してるわけなので自分は
746さんのおっしゃるとおり街区距離(っていうんですか?)の
考え方でいいと思ってたんですが…上手く行かず…。

>>746
2人以上の場合はその全ての街区距離が最大になる方向へ
動くと言うことは、
警察が左右から同時に現れたとしても
それで大丈夫なんですか?
ちょっと考えてみます。
(いずれ犯人は捕まるので、そこ袋小路になった時に
 どういう処理をすればいいのかが困っています)
0750746NGNG
>>749
遅レスですが、もう理解してもらえたでしょうか。
一応書いてみます。

左右同時に現れたときは、上か下へ行くことになりますよね?
上、左、右、下、それぞれ動いたときに各警察との街区距離(マンハッタン距離
という方が一般的かな)を求めます。そして、一番近い警察との距離が最大に
なるようなものの中から一つ選びます。もしも、一番近い警察との距離が最大に
なる逃げ方が複数あるときは、二番目に近い警察との距離が大きい方を選びましょう。

●○△○●
(●=警察、△=犯人)
としますと、左か右に逃げると、一番近い警察との距離は1になりますけど、
上かしたに逃げると3になりますよね?
0751デフォルトの名無しさんNGNG
お願いします。
任意の文字列を入力すると逆に表示するプログラムを作成(ABCと入力するとCBAと表示する)
0752デフォルトの名無しさんNGNG
お願いしますです…
上下4マスの十字型の視界範囲がある戦士(座標(x、y))がいて
(斜めは見えません)
敵が視界内にいる、というのを判定したあとに
フラグを立てる、というところまでのプログラムを教えていただけますか。
0753デフォルトの名無しさんNGNG
>>751

#include <stdio.h>

int main()
{
char s[256];
int i;
gets(s); //fgetsを使う方がよい
for(i = strlen(s)-1; i >= 0; i-- ) {
putchar(s[i]);
}
putchar('\n');
return 0;
}
0754753NGNG
#include <string.h>

↑これ、忘れてた。
動作確認はしてないので、バグがあったら、自分で直してね。
0755デフォルトの名無しさんNGNG
ポインタやってるのですがこれが宿題なのです
■文字列の中に特定の文字が含まれている数を出力するもの
(reとeを入力すると2を返す)
0756751NGNG
とても早い返答ありがとうございます☆
とても助かります。
0757デフォルトの名無しさんNGNG
>755
意味がわかりまへん。
0758デフォルトの名無しさんNGNG
>>755
main(int argc,char** argv)
{
 int a=0;
 char *p;
 p=argv[1];
 while(*p!='\0')if(*p==argv[2][0])a++;
 printf("%d\n",a);
}
こんな感じ? 何分だ?
0759デフォルトの名無しさんNGNG
4分もかかった・・・宇津田詩嚢
0760デフォルトの名無しさんNGNG
>>758
pのインクリメントは?
0761デフォルトの名無しさんNGNG
>>760
おっと。適当なところに入れてクレイ。

まー他人の宿題だしな。オレたちゃヒントだけ出して
あとは茶でもすすってりゃーいいと思うのよ。
それがこのスレの本来あるべき姿だと思うのよ。
0762デフォルトの名無しさんNGNG
なんかちがわない?
0763デフォルトの名無しさんNGNG
>■文字列の中に特定の文字が含まれている数を出力するもの
>(reとeを入力すると2を返す)
reとeを竜力すると1を返すんじゃないの?
題意からはそういう風にとれるんだが。
勘違いならスマソ。
0764デフォルトの名無しさんNGNG
>>763
入力はOS聞くの面倒だったから省いた
だって面倒くさいんだもん
0765デフォルトの名無しさんNGNG
だいだい>>758のプログラムも意味不明だよ。
argv[2]は一文字目しか見ないのか?
0766765NGNG
あ、勘違いしてた。スマソ。
0767(- -)NGNG
main(int argc,char *argv[])
{
 int a=0,b=0,c=0,ans=0;
 char *p=argv,ap='特定文字';

for(a=0;a<argc;++a,p=argv[a])
while(*p)
if(ap==*p++)ans++;
 printf("%d\n",ans);
}
0768(- -)NGNG
main(int argc,char *argv[])
{
 int a=0,ans=0;
 char *p=argv,ap='特定文字';

 for(a=0;a<argc;p=argv[++a])
  while(*p)
   if(ap==*p++)ans++;
 printf("%d\n",ans);
}
0769デフォルトの名無しさんNGNG
>char *p=argv
なんだこりゃ
0770デフォルトの名無しさんNGNG
s に含まれる文字 c をカウント

int ch_count(const char *s, int c)
{
   int n;

   for (n = 0; *s; s++)
       n += *s == c;

   return n;
}
0771デフォルトの名無しさんNGNG
std::count(s, s+strlen(s), c); //for C string
std::count(s.begin(), s.end(), c); //for C++ std::string
0772デフォルトの名無しさんNGNG
>>770
あまり感心できないプログラム
BooleanのTrueが1であるという規定はC言語にはない。
↓改良

int ch_count(const char *s, int c)
{
   int n = 0;

   while (*s) {
       if (*s++ == c) n++;
   }
   return n;
}
0773デフォルトの名無しさんNGNG
>>772
> BooleanのTrueが1であるという規定はC言語にはない
規格書読んだ?
0774692NGNG
初歩的なswap問題にお答えくださってありがとうございました。
お返事おそくなりましてすいませんでした。
とりあえず、色々とやってみた結果、変数をポインタで宣言して、
さらに参照渡しする前に、メモリの動的割り当てやったらあの形式でできました。
ただ、アホみたいなプログラムなんです。ダメだしよければしてください。

const int max = 64;
void main()
{
char *a, *b;
a = new char[max];
b = new char[max];
// aとbに文字を入れる処理
swap(a, b);
}

void swap(char *&x, char *&y)
{
char temp[max];
strcpy(temp, x);
strcpy(x, y);
strcpy(y, temp);
}
0775デフォルトの名無しさんNGNG
>>773
どこに書いてある?しりたいです。

そういえば昔、MSXベーシックだと 真は-1だったね
0776デフォルトの名無しさんNGNG
Cでは、偽が0、真が0以外とされている。

例え真が1だとしても、>>770のプログラムは感心しない。
Booleanの1と数値の1をごっちゃにしている。
こんなプログラムは、業務では拒否される。
0777デフォルトの名無しさんNGNG
>>776
トリッキーなコード スレッドなら問題なし。
アーキテクチャ依存上等!コンパイラ依存上等!

つーのはおいといて
実務じゃ使わないが、それでも前任がヴァカだと
よくこうやって書かれてるからな・・・
保守の際、「このコードは多分こういう意図だろう」
ということを読み取るために必要な知識ではある。

拒否はされるが必要な知識ではあるわけだ。
0778デフォルトの名無しさんNGNG
>>774
折れなら、関数 swap の中身は

{
  int i;
  char tmp;

  for (i=0; i<max; i++,x++,y++) {
    c = *x;
    *x = *y;
    *y = c;
  }
}

と書く。理由は、定数 max が 1000000 だったら困るから
0779デフォルトの名無しさんNGNG
>>778
char tmp ではなく、char c に訂正
0780デフォルトの名無しさんNGNG
>>774
stringクラスは却下?

>>719みたいに、楽なのに。
0781デフォルトの名無しさんNGNG
>>780
あればね
0782770NGNG
>>772
http://www.catnet.ne.jp/kouno/c_faq/c9.html#2 参照のこと。
まあほめられた書き方じゃないことには同意するけど。
0783デフォルトの名無しさんNGNG
>>782
>組み込みの演算子によってブー ル値が産み出されるときは、1か0であることが保証されている

まあマメ知識として覚えとこう
0784デフォルトの名無しさんNGNG
>>781
いまどきstrcpy()が使えて、stringが無いC++処理系なんてイヤ過ぎる。
0785デフォルトの名無しさんNGNG
>>784
今でもCとC++のライセンスが別々になってる処理系もあるって事で。
0786Kusakabe YouichiNGNG
In article >>778, 778 デフォルトの名無しさん wrote:

> >>774
> 折れなら、関数 swap の中身は
>
> {
>   int i;
>   char tmp;
>
>   for (i=0; i<max; i++,x++,y++) {
>     c = *x;
>     *x = *y;
>     *y = c;
>   }
> }
>
> と書く。理由は、定数 max が 1000000 だったら困るから

数バイトの場合もmax回ループするのですね。
0787デフォルトの名無しさんNGNG
>>775
C99 の規格書でよければ 6.5.9 Equality operators の semantics に書いてある。
比較の結果は 0 or 1 で型は int まで決まってる。

>>776
> こんなプログラムは、業務では拒否される。
同意。知ってるのと実際に使うのは別問題。
0788デフォルトの名無しさんNGNG
>>787
> 比較の結果は 0 or 1 で型は int まで決まってる。
なんで比較の結果を_Boolにしなかったんだろうね。
rationale見ても書いてないし。
0789デフォルトの名無しさんNGNG
>>774
> void swap(char *&x, char *&y)

参照で渡す必要全然ないじゃん。
0790デフォルトの名無しさんNGNG
ポインタ交換したらいいってオチ?
0791デフォルトの名無しさんNGNG
C は文字列とバイト列が曖昧だからねえ>>786 文字列と読めば変だけどバイト列かもしれないし
0792Kusakabe YouichiNGNG
In article >>791, 791 デフォルトの名無しさん wrote:

> C は文字列とバイト列が曖昧だからねえ>>786 文字列と読めば変だけどバイト列かもしれないし

べつに「あいまい」なわけじゃあなくって、
文字列はただのバイト列にすぎないっていうだけでしょ?
「\0」で終わりを識別するバイト列のための標準関数はそろってるし、
""をつかったリテラルにもつくとかそういうのがあるだけで。
0793デフォルトの名無しさんNGNG
>>792

> 文字列はただのバイト列にすぎないっていうだけでしょ?

この時点で、全然だめだね、君。本物のセンセイに教わってきなさい。
0794デフォルトの名無しさんNGNG
matlab教えてください
0795デフォルトの名無しさんNGNG
DB設計でテーブル1のA列をPRIMARY KEYに設定して、
テーブル2でA列にFOREIGN KEYを張るのは普通だろうけど、
このFOREIGN KEYを張った列自体をPRIMARY KEYに設定するのって
設計上おかしいですか?

テーブル2の方で、FOREIGN KEYを張った列ともう一つの列を組み合わせて
PRIMARY KEYを作りたいんです(2列でユニークに)
0796デフォルトの名無しさんNGNG
>>794
何を?
0797デフォルトの名無しさんNGNG
銀行の窓口で,US $ から日本円へ両替するとき
(キーボードからは,ドルの金額を入力する)に,
銀行員が支払うのに適当な紙幣,硬貨の組み合わせを表示するプログラムを作成せよ.
なお,最初に為替レート(例: 1 $ =120 *現在118〜122)
を入力し,その値を使って繰り返し窓口で計算できるものとする.

という課題で
/*課題4*/
#include<stdio.h>

main()
{
int score1,score2;
int a;

printf("何$換算しますか?");
scanf("%d", &score1);
printf("現在1$=何円ですか?");
scanf("%d", &score2);

a=score1*score2;

int y10000,y5000,y2000,y1000,y500,y100,y50,y10,y5,y1,y;

y=a;
y10000=y/10000;
y=y%10000;
y5000=y/5000;
y=y%5000;
y2000=y/2000;
y=y%2000;
y1000=y/1000;
y=y%1000;
y500=y/500;
y=y%500;
y100=y/100;
y=y%100;
y50=y/50;
y=y%50;
y10=y/10;
y=y%10;
y5=y/5;
y=y%5;
y1=y;

printf("\n");
printf(" 一万円札 五千円札 二千円札 千円札\n");
printf("紙幣の枚数 %5%5%5%5\n",y10000,y5000,y2000,y1000);
printf(" 五百円玉 百円玉 五十円玉 十円玉 一円玉\n");
printf("硬貨の枚数 %5%5%5%5%5\n",y500,y100,y50,y10,y1);
}

という風に作ったのですが,16行目がどうしてもうまくいきません,
いい方法はないでしょうか?
0798デフォルトの名無しさんNGNG
16行目ってどこよ
0799デフォルトの名無しさんNGNG
798>
早速レスありがとうございます。
int y10000,y5000,y2000,y1000,y500,y100,y50,y10,y5,y1,y;
です。
0800デフォルトの名無しさんNGNG
>>799
int a;
の次の行に移動させたら?
0801Kusakabe YouichiNGNG
In article >>797, 797 デフォルトの名無しさん wrote:
> という風に作ったのですが,16行目がどうしてもうまくいきません,
> いい方法はないでしょうか?

ほんとうに「どうしても」うまくいかないんだったら、いい方法はないでしょうね。
じっさいには「どうしても」じゃないのでは?
0802デフォルトの名無しさんNGNG
「うまくいかない」とは具体的にどういう事なのかくらい書け。
0803797NGNG
800>
int a;のあとに移動させたところ,
結果は,ここでは宣言できない(関数main)
とエラーはかわりませんでした。

801>自分なりに熟考してみたのですが・・・。

802>すみません,言葉が足りませんでした。
上記のとおりです。
0804デフォルトの名無しさんNGNG
>>803
コンパイルできたぞ。結果は変だが。
0805797NGNG
804>
レス,ありがとうございます。
すみません,そのコンパイルは,
797のソースでやられたのでしょうか?
0806デフォルトの名無しさんNGNG
>>797 をコピペして、あと最後のprintfの%5が連発してるところは%5dに直してコンパイルして正常に実行された。
0807797NGNG
どうもありがとうございました。
無事コンパイルできました。
本当にお世話になりました。
0808デフォルトの名無しさん NGNG
ちゃんと動いてるから、printfの%5→%5dにして適当に\tで揃えとけ
0809デフォルトの名無しさんNGNG
ありゃ、お茶のんだだけなのに・・ 良かったね
0810名無しだゴルァNGNG
#include <igraph.h>

void main(void)
{
int x1=300,y1=100,x2=400,y2=200;

SetBkMode(OPAQUE);
SetLineStyle(PS_SOLID,2);
SetLineColor(CL_BLACK);
SetFillColor(RGB(0,0,255));
SetFillStyle(BS_HATCHED,HS_BDIAGONAL);
Ellipse(x1,y1,x2,y2);
printf(" Σ(゚д゚lll)")
printf(" 逝ってよし")
}
0811↑NGNG
どこがダメ?
0812デフォルトの名無しさんNGNG
>>811

最後の二つの文の末尾に;がついていない。
0813↑NGNG
サンクス。やっと逝ける・・・
0814デフォルトの名無しさんNGNG
C ってなんで、配列の境界をチェックしないのですか?
  int a[2];
 a[0] = 0;
 a[1] = 1;
 a[2] = 2;

エラー:a[2] は宣言されていません。
とかでてきてもいいと思う。
0815デフォルトの名無しさんNGNG
int a[2]; の場合は a[2] までは参照してもいいのよ。
でもね、値は保証されないの。
もちろん、書き込みはダメよ。

ナニが言いたいかというとね・・・どーでもいいじゃん、ってこと♥
0816デフォルトの名無しさんNGNG
参照できねぇって。
保証されてるのは&a[2]というポインタは有効だということまで。
0817Kusakabe YouichiNGNG
In article >>815, デフォルトの名無しさん/815 wrote:

> int a[2]; の場合は a[2] までは参照してもいいのよ。

本気にする人がいそう...。
0818Kusakabe YouichiNGNG
In article >>814, デフォルトの名無しさん/814 wrote:

> C ってなんで、配列の境界をチェックしないのですか?
>   int a[2];
>  a[0] = 0;
>  a[1] = 1;
>  a[2] = 2;
>
> エラー:a[2] は宣言されていません。
> とかでてきてもいいと思う。

思うだけなら自由です。
0819Kusakabe YouichiNGNG
In article >>816, デフォルトの名無しさん/816 wrote:

> 参照できねぇって。
> 保証されてるのは&a[2]というポインタは有効だということまで。

え? 参照しなくても範囲外の「アドレスをとる」のさえ規格では保証されていないですよ。

たとえばa[-1]は、代入や参照しなくても、
それのアドレスとして何かにつかう(たとえば引数で渡す)ってのも
保証されないはず。
0820デフォルトの名無しさんNGNG
>>817
あらあら。
天下のvoidさんも勉強不足のご様子ね。
もう一度K&Rをよくご覧になってはいかが?
0821普通のPC使いNGNG
WindowsMediaPlayerでストリーミング放送を聞いているんですが、
たまにネットの環境によって接続が切断されてしまいます。

エラーがでて受信そのものが中断されてしまうんですが、
中断されたら再度、自動的に配信サーバにアクセスするようにさせたいのですが、
こういったことはWSHなどではできないのでしょうか?
(エラー表示がでてきたら、それに反応して再接続するような形)

*ちなみに32Kbpsで配信されている局です。
当方、ADSL。
0822Kusakabe YouichiNGNG
In article >>820, デフォルトの名無しさん/820 wrote:
> あらあら。
> 天下のvoidさんも勉強不足のご様子ね。
> もう一度K&Rをよくご覧になってはいかが?

K&Rじゃなくて規格書のほうをみてますが?
0823デフォルトの名無しさんNGNG
>>820
ま、このことを知ってる人は少ないし、
コンパイラとかライブラリを書くようなことをしなければ
知らずにすむからね。

Nifty あたりの規格書マニアが見たら喜びそうな話だ。
0824デフォルトの名無しさんNGNG
>>823
確かに。fj.comp.lang.c あたりで熱く議論されていたような気がする(w
#しかし、この程度のことを知らないようだと今いる void タン は偽者かねぇ。

配列に関しては int n[2]; と定義したら &n[0], &n[1], &n[2] までは有効なポインタ値を
返すことが保証されている。ただし &n[2] に関してはポインタ値は使えるけど、n[2] を
読み書きするとアウト。

たぶん、この仕様は

int n[2];
register int *p;

for (p = &n[0]; p < &n[2]; ++p)
  // do something with p

みたいなコードの動作を保証するためだろうね。積極的にこんなコードを書くことは少
ないと思うけど、頭の片隅に置いておくと役に立つかもね。
0825Kusakabe YouichiNGNG
In article >>824, デフォルトの名無しさん/824 wrote:

> >>823
> 確かに。fj.comp.lang.c あたりで熱く議論されていたような気がする(w
> #しかし、この程度のことを知らないようだと今いる void タン は偽者かねぇ。

っていうか「知らないことにしたい」わけですか? :)
0826デフォルトの名無しさんNGNG
>>824
void の >>815 へのツッコミは正しいだろ。
>>815 は a[2] は読み書き可能だが値は不定とほざいてるんだから。
0827デフォルトの名無しさんNGNG
>>825
ま >>819 みれば、そう書いてあるからね(あれが本人かどうかは知ら
ん)。プログラマー板の隔離スレにコピペしておくから、続きはそっち
でね。
0828827NGNG
>>826
>>819 読め。で、続きはこっちでな。

日下部陽一のことなら、俺に聞け!<1>
http://pc.2ch.net/test/read.cgi/prog/1007305978/
0829Kusakabe YouichiNGNG
In article >>827, デフォルトの名無しさん/827 wrote:

> >>825
> ま >>819 みれば、そう書いてあるからね(あれが本人かどうかは知ら
> ん)。プログラマー板の隔離スレにコピペしておくから、続きはそっち
> でね。

じゃあついでに宿題を出しておきます。

&a[-1] + 1

はOKでしょうか? (1点)
0830推測で物を言う人NGNG
>>829
ダメだろ。
0831デフォルトの名無しさんNGNG
>>829
なにをもって「OK」なのかわかりませんね:P
0832デフォルトの名無しさんNGNG
>>819
すり替えうまいですね。
int a[2];において、&a[-1]は保証されませんが、&a[2]は保証されてますよ。
ISO/IEC 9899:1999の6.5.6 Additive operatorsの8を見てください。
0833Kusakabe YouichiNGNG
In article >>830, 推測で物を言う人/830 wrote:

> >>829
> ダメだろ。

で、理由は? :)
0834Kusakabe YouichiNGNG
In article >>831, デフォルトの名無しさん/831 wrote:

> >>829
> なにをもって「OK」なのかわかりませんね

ああ、参照できるかどうか、
アドレスとれるかどうかです (規格で保証されているかどうかっていう点について)
0835Kusakabe YouichiNGNG
In article >>832, デフォルトの名無しさん/832 wrote:

> >>819
> すり替えうまいですね。

すり替えなどしてませんが?

> int a[2];において、&a[-1]は保証されませんが、&a[2]は保証されてますよ。

アドレスを取るはなしですよね?

で、「参照」のほうはどうなったの?
0836デフォルトの名無しさんNGNG
>え? 参照しなくても範囲外の「アドレスをとる」のさえ規格では保証されていないですよ。

で、「アドレスをとる」ほうはどうなったの?(w
0837832NGNG
>>835
819を見ると
> In article >>816, デフォルトの名無しさん/816 wrote:
>
> > 参照できねぇって。
> > 保証されてるのは&a[2]というポインタは有効だということまで。
>
> え? 参照しなくても範囲外の「アドレスをとる」のさえ規格では保証されていないですよ。

&a[2]の話なのに

> たとえばa[-1]は、代入や参照しなくても、
> それのアドレスとして何かにつかう(たとえば引数で渡す)ってのも
> 保証されないはず。

なぜか&a[-1]に変わってます。
832でも書いた通り、&a[2]は有効なポインタです。

| If both the pointer operand and the result point to elements of the
| same array object, or one past the last element of the array object,
| the evaluation shall not produce an overflow; otherwise, the behavior
| is undefined.

> で、「参照」のほうはどうなったの?
| If the result points one past the last element of the array object, it
| shall not be used as the operand of a unary * operator that is
| evaluated.
0838デフォルトの名無しさんNGNG
>>836
約一名が言い逃れしてる以外、もう結論は出てるんだから、続きは void 隔離
スレでやってくれ。コピペも用意しといたから。これで void が延々と言い逃
れして良スレが腐る、ってパターンが繰り返されてるんだから、ほんとに頼む
ぜ(T_T)

日下部陽一のことなら、俺に聞け!<1>
http://pc.2ch.net/test/read.cgi/prog/1007305978/
0839Kusakabe YouichiNGNG
In article >>836, デフォルトの名無しさん/836 wrote:

> >え? 参照しなくても範囲外の「アドレスをとる」のさえ規格では保証されていないですよ。
>
> で、「アドレスをとる」ほうはどうなったの?

そっちは問題ないでしょ?
0840Kusakabe YouichiNGNG
In article >>837, 832/837 wrote:
> > え? 参照しなくても範囲外の「アドレスをとる」のさえ規格では保証されていないですよ。
>
> &a[2]の話なのに

いえわたしは「範囲外」の話をしてますが
>
> なぜか&a[-1]に変わってます。

範囲外の例ででてきたのでは?

> 832でも書いた通り、&a[2]は有効なポインタです。

アドレスをとれる範囲には入ってますよね?
で、「参照」のほうはどうなったの?
0841デフォルトの名無しさんNGNG
Kusakabe ウイルス(w
0842Kusakabe YouichiNGNG
In article >>838, デフォルトの名無しさん/838 wrote:
> >>836
> 約一名が言い逃れしてる以外、もう結論は出てるんだから、

ということにしたいのですね? :)
0843832NGNG
>>840
> で、「参照」のほうはどうなったの?
| If the result points one past the last element of the array object, it
| shall not be used as the operand of a unary * operator that is
| evaluated.
これじゃ不満ですか?
| A postfix expression followed by an expression in square brackets []
| is a subscripted designation of an element of an array object. The
| definition of the subscript operator [] is that E1[E2] is identical to
| (*((E1)+(E2))).
こっちも引用すればOKかな。
0844デフォルトの名無しさんNGNG
>> >え? 参照しなくても範囲外の「アドレスをとる」のさえ規格では保証されていないですよ。
>> で、「アドレスをとる」ほうはどうなったの?(w
>そっちは問題ないでしょ?

なにが?
問題なんてはじめからありませんが?
0845デフォルトの名無しさんNGNG
>>843-844
かくて Kusakabe Youichi の煽りを無視できない人間によって、スレは荒れる
のであった。合掌。

(しばらくダメだな、このスレ)
0846デフォルトの名無しさんNGNG
>「アドレスをとる」のさえ規格では保証されていないですよ。
>アドレスをとれる範囲には入ってますよね?

で、「アドレスをとる」話はどうなったの?
0847Kusakabe YouichiNGNG
In article >>843, 832/843 wrote:

> >>840
> > で、「参照」のほうはどうなったの?
> | If the result points one past the last element of the array object, it
> | shall not be used as the operand of a unary * operator that is
> | evaluated.
> これじゃ不満ですか?

いや、それじゃあなくて、参照についてコメントしていた件です。
0848デフォルトの名無しさんNGNG
>>842
>>約一名が言い逃れしてる以外、もう結論は出てるんだから、
(中略)
ということになりました。
0849デフォルトの名無しさんNGNG
>>832
もう相手にすんなよ。

> > 保証されてるのは&a[2]というポインタは有効だということまで。
>
> え? 参照しなくても範囲外の「アドレスをとる」のさえ規格では保証されていないですよ。
これを
> いえわたしは「範囲外」の話をしてますが
こう言い逃れしてるだけなんだから。
0850デフォルトの名無しさんNGNG
「ということにしたいのですね?」
ってキモすぎます。ヲタ用語?
0851デフォルトの名無しさんNGNG
>> いえわたしは「範囲外」の話をしてますが
>こう言い逃れしてるだけなんだから。

もちろんわかってます(w
0852デフォルトの名無しさんNGNG
放置しないと延々つづくよ。
フランケンはしつこいから・・・
0853832NGNG
>>849
うぃす。不用意だったね、スマソ。

それだけじゃナニなのでまとめ。
Q: int a[N]; とした場合、a[-1]やa[N]は参照できますか。&a[-1]や&a[N]ならどう?
A: 参照するべきではありません。また、&a[-1]は有効なポインタとは定義されて
いませんが、&a[N]は有効なポインタです。

解説:
ISO/IEC 9899:1999では、配列オブジェクトにおいて有効な範囲はa[0]..a[1]
のみであり、それ以外の要素については未定義(undefined)とされています。
しかしながら、&a[i]のように配列要素へのポインタを得る場合については、特例と
して最後の要素の次の要素、つまり&a[N]は有効なポインタであるとされています。
(see ISO/IEC 9899:1999 Section 6.5.2.1, 6.5.3.2, 6.5.6)
ただし、規格では未定義(undefined)であり、するべきではない(shall not)
とされているだけなので、有効と定義されていない要素にアクセスしたりポインタを
得たりするこのできる処理系でも規格に準拠(conform)していると言えます。
(see ISO/IEC 9899:1999 Section 4)
0854名無しくんNGNG
CSV形式のファイル読み込み関数がなかなかうまくできません。
行末がカンマで終われば簡単なんですが、
正しくは行末は開業コードみたいで、
そうすると難しくなります。
0855デフォルトの名無しさんNGNG
>>584
改行コードならカンマと同じに処理できるが、
開業コードだと難しいな。
0856名無しくんNGNG
>>855
まちがえました改行です。
0857デフォルトの名無しさんNGNG
if (c == ',')
みたいにしてるところを
if (c == ',' || c == '\n')
でどうよ?
0858デフォルトの名無しさんNGNG
っこれが宿題になってよいのか。
ってゆーか改行をスペースに置き換えれば良いだけだろ。
0859デフォルトの名無しさんNGNG
"こう,ゆうの",とか
こん"なの,とか
"これ
なんか",ひどい

マ板のCSVスレで出て来てたけど、ヤなフォーマットだねえ。
0860デフォルトの名無しさんNGNG
あ、わすれてた
これ"と,"これ""と",は同じ意味
0861デフォルトの名無しさんNGNG
>>860
状態遷移機械を作った方が早いだろ、きっと。
0862デフォルトの名無しさんNGNG
>860
意味不明です(w
0863デフォルトの名無しさんNGNG
おながいします。
javaですが、

「A〜Eの5つのカードがあります。
 それをシャッフルし、任意のX枚を取り出します。
 で、そのX枚のカードの中身を表示させます」
という宿題が出たのですが、全然わかりません。
シャッフルってどう表現すればいいんだろう…。
0864デフォルトの名無しさんNGNG
>>863
A〜Eのカードが入った配列を用意して
ぐちゃぐちゃにかき回せばいいじゃん。

つーか、じゃばもくそもねーっつーかんじ? みたいな〜
0865デフォルトの名無しさんNGNG
シャッフルのアニメーションでもさせんの?
0866デフォルトの名無しさんNGNG
しゃっほー。
0867Kusakabe YouichiNGNG
In article >>851, デフォルトの名無しさん/851 wrote:
> > > いえわたしは「範囲外」の話をしてますが
> > こう言い逃れしてるだけなんだから。
>
> もちろんわかってます

ほほう。何か狙ってたけどうまくいかなかったので、「言い逃れ」だという
ことにしてしまうことにしたのですね:)
0868デフォルトの名無しさんNGNG
宿題スレなんだからまったりいこうよ。
規格うんぬんより、使ってる処理系でどう動くかが問題。動かしてみて試せばいいやん。
範囲外参照するとエラー出してくれると、デバッグするの楽なんだけどねー。

>>863
とりあえず、どこまでわかって、どこがわからないか、書きなされ。
0869Kusakabe YouichiNGNG
In article >>868, デフォルトの名無しさん/868 wrote:
> 規格うんぬんより、使ってる処理系でどう動くかが問題。

そういう宿題のやり方はもんだいですね。
0870869NGNG
>>869
じゃあ、どうあがいても動く書き方で書くのが一番いいということで、ここは一つ。
良いか悪いか規格書みないとわからないような書き方で、宿題を解くのはどうかと
思いますし。
0871Kusakabe YouichiNGNG
In article >>870, 869/870 wrote:
> >>869
> じゃあ、どうあがいても動く書き方で書くのが一番いいということで、ここは一つ

ではよろしく。
0872デフォルトの名無しさんNGNG
>>863
カードのなかみってなによ。
カードAのなかに何が入ってるのさ。
0873デフォルトの名無しさんNGNG
どなたかいらっしゃいますか?
0874デフォルトの名無しさんNGNG
>>873
ん? 呼んだ?
0875デフォルトの名無しさんNGNG
よかった、人がいらっしゃるんですね。
手伝ってもらえる所があると聞いてきてみたんですが…
0876デフォルトの名無しさんNGNG
ルーチンはなんとかわかっても
それをプログラムにすることができないヘタレな学生です。
javaなんですが。
0877デフォルトの名無しさんNGNG
>>875
マジで宿題か? ちょっとワラタよ。
0878デフォルトの名無しさんNGNG
>>876
どのボタンを押すと、コンパイルされるかって事か?
0879デフォルトの名無しさんNGNG
いや、マジ宿題です…
途中まで自力でやって頭ポワポワ状態なんで…
こっからどうすんだ?という感じです。
いろいろ見てもらいたいかなーと…。
0880874NGNG
この調子だと本題に入る頃には次スレか?
0881デフォルトの名無しさんNGNG
それと講義をサボっていたことを
今ひどく後悔している所です…
基本的なことが抜けてたりするので
人づてに手ほどき受けた方がいいかなと。
0882デフォルトの名無しさんNGNG
ハンターゲームのプログラム実装が宿題で、
それの獲物のクラス(を作って来いというヤツ)が自分の担当です。

簡単なルール
n*n の正方格子の中で、3人のハンターと獲物が追いかけっこをする
獲物もハンターも上下左右1歩ずつorとどまるのみ動作可能
獲物からターンが始まってハンターが獲物を捕まえたら終了

獲物の特徴
縦横に特定の範囲の視野を持っていて(斜めは見えない)
その視野の中にハンターをみつけた時には
自動的に逃げる(遠ざかる)ようプログラムすること
0883デフォルトの名無しさんNGNG
で、途中までしか組めなくてこっちに来てみたんです。
0884デフォルトの名無しさんNGNG
できたところまででイイから張りつけろ。
日が昇る前になんとかしたいんだろ?
0885デフォルトの名無しさんNGNG
じゃあ、文法がまるっきりなってないのを承知で貼ります。
自分も勉強しますんでお願いしますです。


import java.util.*;

public class Game{

private int N; /* nxn の正方格子の定義 */
private int x,y; /* 正方格子のX座標 Y座標 */
private int see; /* 見える範囲のマス数 */
Random r = new Random();

/** Game クラスのコンストラクター
@param i 獲物のx座標
@param j 獲物のy座標
*/
public Game(int i,int j){
x = i;
y = j;
}

/** nxn の正方格子数を設定します
@param n nxn の正方格子数
*/
public void setN(int n){
N = n;
}

/** 正方格子を設定します。
@param x 正方格子のX方向
@param y 正方格子のY方向
*/
public void setXY(int i,int j){
x = i;
y = j;
}

/** 見える範囲のマス数を設定します
@param see 見える範囲のマス数
*/
public void setSee(int s){
see = s;
}

/** X座標を取得します
@return X座標
*/
public int getX(){
return x;
}

/** Y座標を取得します
@return Y座標
*/
public int getY(){
return y;
}

(続く)
0886デフォルトの名無しさんNGNG
(続き)

/** 獲物の行動を決定します
@param h1,h2,h3 ハンターの位置情報
*/

/* 1.初期条件設定 */
/* 1.1 5方向の箱を作ります */
int mode_dir[];
mode_dir = new int[5];
for(int e = 0;e <= 4;e++;){
mode_dir[e] = e ;
}
/* 1.2 ハンターを監視します */
/* 1.2−1 ハンターを監視するための箱を作ります */
int Hunt[][][];
Hunt = new int[n][n][3];
for(int a = 1;a <= n;a++;){
for(int b = 1;b <= n;b++;){
for(int c = 1;c <= 3;c++;){
Hunt[a][b][c];
/* (x,y)、h1〜3の配列作成 */
}
}
}
/* 1.2−2 ハンターの位置情報を箱に確保します */
/* 1.2−3 視界にハンターがいればフラグを立てます */

(続く)
0887デフォルトの名無しさんNGNG
(続き)


public void escapeGame(Hunter h1,Hunter h2,Hunter h3){

for(int a = 1;a <= n;a++;){
for(int b = 1;b <= n;b++;){
for(int c = 1;c <= 3;c++;){
Hunt[a][b][c] = 0

/* 〜フラグの初期化 */
if(0 << x - hc.getX() <= (s-1) / 2 && y == hc.getY())
Hunt[a][b][c] == hc.getX() - x;
frag += 1;
if(0 << y - hc.getY() <= (s-1) / 2 && x == hc.getX())
Hunt[a][b][c] == hc.getY() - y;
frag += 1;
if(0 << hc.getX() - x <= (s-1) / 2 && y == hc.getY())
Hunt[a][b][c] == hc.getX() - x;
frag += 1;
if(0 << hc.getY() - y <= (s-1) / 2 && x == hc.getX())
Hunt[a][b][c] == hc.getY() - y;
frag += 1;
/* ハンターが獲物の視界内にいればフラグを立てる */
}
}
}

/* 1.3 壁があります */
/* 壁がない方向の箱を拾って壁がある方向の箱は控除します */
if(x = 1)
mode_dir[0] = 5;
/* これ以上上に行けません(上への進路無効化)*/
if(y = 1)
mode_dir[1] = 5;
/* これ以上左に行けません(左への進路無効化)*/
if(x = n)
mode_dir[2] = 5;
/* これ以上下に行けません(下への進路無効化)*/
if(y = n)
mode_dir[3] = 5;
/* これ以上右に行けません(右への進路無効化)*/
0888デフォルトの名無しさんNGNG
/* 2.ハンターの位置が視界内・視界外の判定をします */
/* 2−1 ハンターが視界内にいる場合 */
/* 2−1.1 そのハンターから遠ざかるように動きます */
if(frag >= 1){
for(f=1;f<=3;f++;){
if(0 != Hunt[hf.getX()][y][f] <= 1)
mode_dir[0]= 5 ;
if(0 != Hunt[x][hf.getY()][f] <= 1)
mode_dir[1]= 5 ;
if(0 != Hunt[hf.getX()][y][f] >= 1)
mode_dir[2]= 5 ;
if(0 != Hunt[x][hf.getY()][f] >= 1)
mode_dir[3]= 5 ;
}
/* 〜ハンターがいない方向をランダムに選びそちらへ進みます
*/
0889デフォルトの名無しさんNGNG
/* 2−1.2 視界にハンターがいますが
近いハンターから遠ざかる方に動きます */
/* 〜�@ハンターが近いほうを避けてハンターが遠い方に動きます */
}else if(frag >= 2 && mode_dir[0] = 5
&& mode_dir[1] = 5
&& mode_dir[2] = 5
&& mode_dir[3] = 5){
for(f=1;f<=3;f++;){
if(0 != Hunt[hf.getX()][y][f] <= 2)
mode_dir[0]= 0 ;
if(0 != Hunt[x][hf.getY()][f] <= 2)
mode_dir[1]= 1 ;
if(0 != Hunt[hf.getX()][y][f] >= 2)
mode_dir[2]= 2 ;
if(0 != Hunt[x][hf.getY()][f] >= 2)
mode_dir[3]= 3 ;
}
/* 〜�Aハンターが等距離ならば移動可能な方向に限定して
ランダムに動きます */
0890デフォルトの名無しさんNGNG
/* 〜�B塞がれて動けなければその場にとどまります */
mode_dir[4] = 4;
for(h = 0;h <= 100;h++;){
modeA = Math.floor(Math.random() * 5 );
modeB = Math.floor(Math.random() * 5 );
modeC = mode_dir[modeA];
mode_dir[modeA] = mode_dir[modeB];
mode_dir[modeB] = modeC;
}
/* 2−2 視界にハンターがいない場合 */
/* 〜視界にハンターがいなければランダムに動くもしくは停止します */
}else if(frag = 0){
for(h = 0;h <= 100;h++;){
modeA = Math.floor(Math.random() * 5 );
modeB = Math.floor(Math.random() * 5 );
modeC = mode_dir[modeA];
mode_dir[modeA] = mode_dir[modeB];
mode_dir[modeB] = modeC;
/* mode_dirの内容をシャッフルすることで入れ替えます */
}
}
0891デフォルトの名無しさんNGNG

/* 3. 獲物の行動を決定します */
switch(mode_dir[0]){
case 0:/* 上に動く */
y -= 1;
break;
case 1:/* 左に動く */
x -= 1;
break;
case 2:/* 下に動く */
y += 1;
break;
case 3:/* 右に動く */
x += 1;
break;
case 4:/* その場にとどまる */
break;
case 5:/* 抽選しなおす */

}


}
}

(以上っす)
長くてホントすいません…見にくいし…
0892デフォルトの名無しさんNGNG
獲物想定ルーチン
・Hunt配列にハンターの情報を予め記しておく
 ↓
・その配列と獲物の視野を重ね合わせ、視野の中にハンターがいれば
 フラグを立てる
 ↓
・壁あるいはハンターが見えた方向へは行かない(削る)
 ↓
・残った経路の中からシャッフルして1通り選ぶ
0893デフォルトの名無しさんNGNG
行動決定思考回路
・mode_dir配列に0〜4を予め決めておく
([0]=0〜[4]〜4、
 0:上 1:左 2:下 3:右 4:その場にて動かない)
 ↓
・壁の条件においては
 その配列に5を便宜上入れておく
 ↓
・視野にハンターがいてもそちらに行かない、という意味で
 5を入れておく
 ↓                                ↓
・四方塞がりになり全部が5で埋まってしまった場合      ↓
 (壁で遮られハンターにも囲まれた)             ↓
 まだハンターとの距離の猶予がある場所を選びなおす     ↓
 ↓                                ↓
・視野の中にハンターがいなかった場合は
 そのまま何も変わってない0〜4から選ぶ
 ↓
・選んだ数字に従い行動決定
0894デフォルトの名無しさんNGNG
上記補足:やってないもの

1:
2.1−2の�@以下は本来�Aとしたい時の趣旨の場合であり
ハンターとの距離が違えている時により遠い方を選ぶという
選択法を取ってない(上手い書き方がわからず)

2:
mode_dir[5]は本来もう一度抽選しなおそうという意味合いで使ったが
どうやれば回帰的な風に作れるのかわからない

3:その他に授業まともに出てないので文法メチャクチャ


なにとぞ…
恥を忍んで晒しましたゆえ。
0895デフォルトの名無しさんNGNG
あとね、逃げるときに角を曲がると、ハンター見えなくなったり
するよね。でも、戻ったりしちゃダメだよ。
0896デフォルトの名無しさんNGNG
>>895
言われて気づきました…どうしよう。
一旦角に追いこまれてそこから抜けたとしても
絶対に戻るなと言うことですよね?
0897デフォルトの名無しさんNGNG
根本的なデカイ間違いはあるでしょうか?
正直全く自信ないので…
0898デフォルトの名無しさんNGNG
放置?
0899デフォルトの名無しさんNGNG
このスレは、パックマンでも作ってるのかい?
0900デフォルトの名無しさんNGNG
>>898
今夜時間あるときにゆっくりみるからちょい待ってくれ、
0901900NGNG
>>885-891
えっとだ・・・、ソースかなりひどかったが、それでも自分で書いているとこと
コメントをしっかりつけている点は評価できるので、チェックいれました。

/** 獲物の行動を決定します
@param h1,h2,h3 ハンターの位置情報
*/
  /* 1.初期条件設定 */
  /* 1.1 5方向の箱を作ります */

  /* 1.2 ハンターを監視します */
  /* 1.2−1 ハンターを監視するための箱を作ります */
これは、メソッドの中にいれるべきものではないの?
で、

  /* 1.2 ハンターを監視します */
  /* 1.2−1 ハンターを監視するための箱を作ります */
  for(int e = 0;e <= 4;e++;){
    mode_dir[e] = e ;
  }

  int Hunt[][][];
  Hunt = new int[n][n][3];
  for(int a = 1;a <= n;a++;){
    for(int b = 1;b <= n;b++;){
      for(int c = 1;c <= 3;c++;){
        Hunt[a][b][c];
        /* (x,y)、h1〜3の配列作成 */
      }
    }
  }
これは、何をしたい? Huntに0をつけるとか?
いらないからforの部分は全部削除。
0902900NGNG
/* 〜フラグの初期化 */
if(0 << x - hc.getX() <= (s-1) / 2 && y == hc.getY())
  Hunt[a][b][c] == hc.getX() - x;
frag += 1;

これだと、ifは次の一行しかかからなくて、常にfragが+1される気がするけど
意図的にはそれでいいの? そもそも、fragどこでも宣言されてない気が。
int frag = 0;をメソッドの先頭にいれにゃ。それ以前にflagと書くべきでは。
あと、代入するときは== じゃなくて、=ね。

んで、hcって、cが変わるとh1,h2,h3となってくれるものと思って書いてる?
それは無理です。このような場合は配列使いましょう。
Hunter h[3];
h[0] = h1;
h[1] = h2;
h[2] = h3;

として、使うときは、 h[c].getX() みたいに。


if(x = 1)
x == 1ね。

for(f=1;f<=3;f++;){
↓
for(int f = 1; f <= 3; f++){
と書くべきでしょう。

/* 2.ハンターの位置が視界内・視界外の判定をします */
  /* 2−1
  ハンターが視界内にいる場合 */
  /* 2−1.1 そのハンターから遠ざかるように動きます */
0903900NGNG
  if(frag >= 1){
    for(f=1;f<=3;f++;){
      if(0 != Hunt[hf.getX()][y][f] <= 1)

if(0 != Hunt[hf.getX()][y][f] <= 1)
こういう書き方できないと思う。んで
if(Hunt[hf.getX()][y][f] <= -1)?
と書くべきじゃ?

  if(frag >= 1){
  (中略)
  }else if(frag >= 2 && mode_dir[0] = 5
    && mode_dir[1] = 5
    && mode_dir[2] = 5
    && mode_dir[3] = 5){

else ifっていうのは、ifが成立しなかったときに、次の条件が成り立つ場合
だから、frag >= 1が成り立たないときに、frag >= 2が成り立つわけはなし。
何かおかしい。
 んで、これは上下左右どちらの方向にもハンターがいる、もしくは壁がある
って認識でよい?
0904900NGNG
    for(f=1;f<=3;f++;){
      if(0 != Hunt[hf.getX()][y][f] <= 2)
        mode_dir[0]= 0 ;
      if(0 != Hunt[x][hf.getY()][f] <= 2)
        mode_dir[1]= 1 ;
      if(0 != Hunt[hf.getX()][y][f] >= 2)
        mode_dir[2]= 2 ;
      if(0 != Hunt[x][hf.getY()][f] >= 2)
        mode_dir[3]= 3 ;
    }
これは、何をしたい?
ちょっと意図がつかめない。(hfはh[f-1]にね)

    case 5:/* 抽選しなおす */
  }
  これじゃ、抽選しなおしてない。
  i = 0;
  boolean breakflag = true;
  while(breakflag){
    switch(mode_dir[i]){
      case 0:/* 上に動く */
      y -= 1;
      breakflag = false;
      break;
   (略)
    case 5:/* 抽選しなおす */
      i++;
      break;
    }
  }

みたいに書きましょう。
0905900NGNG
見落としたところも多そうだが。
とりあえず、コンパイルエラーはなくすべくがんばってくれ。
アルゴリズム云々に関してはそれからだ。

 んで、900超えたが、途中でスレかえると参照がめんどいので、
新スレ立てるの、これが解決するか950超えるまでまってくださ
い。
0906デフォルトの名無しさんNGNG
これが宿題とは思えん!
0907900NGNG
>>906
宿題なんじゃない?
仕様にあわせてハンターと獲物を各人に作らせて、
授業の最後に対決させて遊ぶとか。

オブジェクト指向のいい勉強になるかもしれないしね。
0908デフォルトの名無しさんNGNG
ありがとうございます!
こんなひどいソースを…
大学でも似たようなことを指摘されたので
手直ししてるとこっす。
書き直したやつを夜中にあぷしますです。
ちとお待ちください。

900さん本当感謝します。
0909デフォルトの名無しさんNGNG
命令されてゲーム作るなんて、
命令されてセクースするくらいつまらんな。
sage。
0910デフォルトの名無しさんNGNG
>>909
命令されてセクースするのは、普通にするよりもある意味興奮するかもしれん、
経験ないから知らんが
0911デフォルトの名無しさんNGNG
やばいっす、いくら直してもコンパイルにしかられまくってるんですけど…
0912デフォルトの名無しさんNGNG
>911
> やばいっす、いくら直してもコンパイルにしかられまくってるんですけど…
いずれなくなるよ。根気よくやれ。
0913デフォルトの名無しさんNGNG
どうでもいいがフラグはflag
0914デフォルトの名無しさんNGNG
>>911
叱るのは「コンパイラ」だろ。

まぁなんにせよ、コンパイラがエラーを出してくれるうちが華。実行時エラーより、よほど
扱いやすい。
0915デフォルトの名無しさんNGNG
まだ手直し中ですが質問です。
>>902

if(0 << x - hc.getX() <= (s-1) / 2 && y == hc.getY())
  Hunt[a][b][c] == hc.getX() - x;
frag += 1;
↓
if(0 << {x - h[c].getX()} <= {(see-1)/2} && y == h[c].getY()){
Hunt[a][b][c] = {h[c].getX() - x};
flag += 1;
}
という風に直してあります。
h[c]は初期化してあってh[0,1,2]=h1,2,3となるようになってます。
ところが int,int 型では && が使えないよと叱られます。
「ハンターのy軸が獲物のy軸と同じの時に
 獲物の視界の中にハンターがいる
 →ハンターとの相対距離(数字)、方向(上・左ならマイナス、下・右ならプラス)を
  Hunt 配列に入れてフラグを立てる」
と表現したいのですが、&& の替わりに何を使えばいいのでしょうか。
0916900NGNG
if(0 << {x - h[c].getX()} <= {(see-1)/2} && y == h[c].getY(
あ、これだね。
0 << {x - h[c].getX()} <= {(see-1)/2}
絶対値が、(see - 1) / 2より小さければいいんだよね?
(ところで、普通視界3だったら、左右3マスずつにならない? 定義はこれであってる?)

if(Math.abs( x - h[c].getX() ) <= {(see- 1 ) / 2} && y == h[c].getY() ){
ってすればいくと思う。
0917900NGNG
って
if( Math.abs( x - h[c].getX() ) <= (see - 1 ) / 2 && y == h[c].getY() ){
に修正
0918デフォルトの名無しさんNGNG
こんな夜中遅くにしかもレス遅れてホントすいません。
一度全部見てもらえますか?

どうも絶対値表示とかしてもエラーが減りません。
&&は本当に使っていいんですか?

※ちなみに獲物の視界は端から端まで、という取り決めになりました。なぜか。
see = 5 なら上下左右に2マスずつ(2+2+獲物の立ち位置)ってことになります。
0919デフォルトの名無しさんNGNG
あと
int[] h = new int[3];
で初期化させたんですが
〜 }else if(Hunt[x][h[d].getY()][d] >= 1){
などのように h[d] を使った場合、「int は間接参照できません」と出ます。
※[]の2重括弧が原因?
0920デフォルトの名無しさんNGNG
(手直し版)
import java.util.*;

public class Game{
 private int N; /* nxn の正方格子の定義 */
 public void setN(int n){
 N = n;
 }
 private int x,y; /* 正方格子のX座標 Y座標 */
 private int see; /* 見える範囲のマス数 */
 Random r = new Random();

 /* 1.1 5方向の箱を作ります */
 int[] mode_dir = new int[5];

 /* 1.2 ハンターを監視するための箱を作ります */
 int[][][] Hunt = new int[N+2][N+2][3];
 int[] h = new int[3];

 /** Game クラスのコンストラクター
  @param i 獲物のx座標
  @param j 獲物のy座標
 */
 public Game(int i,int j){
  x = i;
  y = j;
 }
0921デフォルトの名無しさんNGNG
 /** nxn の正方格子数を設定します
  @param n nxn の正方格子数
 */

 /** 正方格子を設定します。
  @param x 正方格子のX方向
  @param y 正方格子のY方向
 */
 public void setXY(int i,int j){
  x = i;
  y = j;
 }

 /** 見える範囲のマス数を設定します
  @param see 見える範囲のマス数
 */
 public void setSee(int s){
  see = s;
 }

 /** X座標を取得します
  @return X座標
 */
 public int getX(){
  return x;
 }

 /** Y座標を取得します
  @return Y座標
 */
 public int getY(){
  return y;
 }
0922デフォルトの名無しさんNGNG
 /* 方向を格納するオブジェクトを初期化 */
 public void setMode(int e){
  for(e = 0;e <= 4;e++){
   mode_dir[e]=e;
  }
 }
 /* ハンターの場所をそれぞれ格納するオブジェクトを初期化 */
 public void Hunt(){
  for(int a = 0;a <= N+1;a++){
   for(int b = 0;b <= N+1;b++){
    for(int c = 0;c <= 2;c++){
     Hunt[a][b][c]=0;
    }
   }
  }
 }

 /** 獲物の行動を決定します
  @param h1,h2,h3 ハンターの位置情報
 */

 /* 1.2−2 ハンターの位置情報を箱に確保します */
 /* 1.2−3 視界の中にハンターがいればフラグを立てます */
0923デフォルトの名無しさんNGNG
 public void escapeGame(Hunter h1,Hunter h2,Hunter h3){
  h[0] = h1 ;
  h[1] = h2 ;
  h[2] = h3 ;
  int A = 0; /* フラグの有無 */

  for(int a = 0;a <= N+1;a++){
   for(int b = 0 ; b <= N + 1 ;b++){
    for(int c = 0 ; c <= 2 ;c++){
     if( Math.abs( x - h[c].getX() ) <= (see - 1 ) / 2 && y == h[c].getY() ){
     Hunt[a][b][c] = { h[c].getX() - x };
     flag += 1;
     }
     else if( Math.abs( y - h[c].getY() ) <= (see - 1 ) / 2 && x == h[c].getX() ){
     Hunt[a][b][c] = { h[c].getY() - y};
     flag += 1;
     }else if( Math.abs( h[c].getX() - x ) <= (see - 1 ) / 2 && y == h[c].getY() ){
     Hunt[a][b][c] = { h[c].getX() - x};
     flag += 1;
     }else if( Math.abs( h[c].getY() - y ) <= (see - 1 ) / 2 && x == h[c].getX()){
     Hunt[a][b][c] = {h1.getY() - y};
     flag += 1;
     }else{}
     }
    }
   }
  /* ハンターが獲物の視界内にいればフラグを立てる */
  /* 1.3 壁があります */
  /* 壁がない方向の箱を拾って壁がある方向の箱は控除します */
   if(x == 1){
    mode_dir[0] = 5;
   /* これ以上上に行けません(上への進路無効化)*/
   }else if(y == 1){
    mode_dir[1] = 5;
   /* これ以上左に行けません(左への進路無効化)*/
   }else if(x == n){
    mode_dir[2] = 5;
   /* これ以上下に行けません(下への進路無効化)*/
   }else if(y == n){
    mode_dir[3] = 5;
   /* これ以上右に行けません(右への進路無効化)*/
   }else{}
0924デフォルトの名無しさんNGNG
 /* 2.ハンターの位置が視界内・視界外の判定をします */
 /* 2−1 ハンターが視界内にいる場合 */
 /* 2−1.1 そのハンターから遠ざかるように動きます */
 /* 2−2 視界にハンターがいない場合 */
 /* 〜視界にハンターがいなければランダムに動くもしくは停止します */
  if(A == 0){
   for(int g = 0;g <= 100;g++){
    int modeA;
    int modeB;
    int modeC;
    modeA = (int)(Math.random() * 5 );
    modeB = (int)(Math.random() * 5 );
    modeC = mode_dir[modeA];
    mode_dir[modeA] = mode_dir[modeB];
    mode_dir[modeB] = modeC;
  /* mode_dirの内容をシャッフルすることで入れ替えます */
    }
   }
    else if(A == 1){
     for (int d = 0;d <= 2;d++){
      if(Hunt[h[d].getX()][y][d] <= 1){
      mode_dir[0]= 5;
      }else if(Hunt[x][h[d].getY()][d] <= 1){
      mode_dir[1]= 5;
      }else if(Hunt[h[d].getX()][y][d] >= 1){
      mode_dir[2]= 5;
      }else if(Hunt[x][h[d].getY()][d] >= 1){
      mode_dir[3]= 5;
      }else{}
      }
0925デフォルトの名無しさんNGNG
 /* 〜ハンターがいない方向をランダムに選びそちらへ進みます*/
 /* 2−1.2 視界にハンターがいますが近いハンターから遠ざかる方に動きます */
 /* 〜�@ハンターが近いほうを避けてハンターが遠い方に動きます */
 /* (現在保留) */
 /* 〜�Aハンターが等距離ならば移動可能な方向に限定してランダムに動きます */
   }else if(A >= 2 ){
    for (int e = 0;e <= 2;e++){
     if(Hunt[h[e].getX()][y][e] <= 2){
     mode_dir[0] = 0;
     }else if(Hunt[x][h[e].getY()][e] <= 2){
     mode_dir[1] = 1;
     }else if(Hunt[h[e].getX()][y][e] >= 2){
     mode_dir[2] = 2;
     }else if(Hunt[x][h[e].getY()][e] >= 2){
     mode_dir[3] = 3;
     }else {
     mode_dir[4] = 4;
     }
    }
   }
 /* 〜�B塞がれて動けなければその場にとどまります */
   if(mode_dir[0] = 5
    && mode_dir[1] = 5
     && mode_dir[2] = 5
      && mode_dir[3] = 5){
       mode_dir[4] = 4;
   }
0926デフォルトの名無しさんNGNG
 /* 3. 獲物の行動を決定します */
  int p = 0;
   boolean breakflag = true;
    while(breakflag){
     switch(mode_dir[p]){
      case 0:/* 上に動く */
      y -= 1;
     breakflag = false;
     break;
     case 1:/* 左に動く */
      x -= 1;
      breakflag = false;
      break;
     case 2:/* 下に動く */
     y += 1;
     breakflag = false;
     break;
     case 3:/* 右に動く */
     x += 1;
    breakflag = false;
     break;
     case 4:/* その場にとどまる */
    breakflag = false;
     break;
     case 5:/* 抽選しなおす */
    p++;
    break;
  }
 }
}
0927デフォルトの名無しさんNGNG
厳しいなぁこれは。
書いてるほうも大変だろうけど、
読むのもなかなか、厳しい。
0928デフォルトの名無しさんNGNG
escapeGame()にコードを詰め込みすぎだなぁ。
処理内容で分割して、関数化したほうが見通しがよくなるだろ。
0929デフォルトの名無しさんNGNG
ハンター情報をクラス化して欲しい・・・
0930デフォルトの名無しさんNGNG
int[] h = new int[5]ってこれはH
>int[] h = new int[3];
>で初期化させたんですが

>「int は間接参照できません」と出ます。
>※[]の2重括弧が原因?
hはint型の配列じゃなくてHunter型の配列にしないと。
Hunter[] h = new Hunter[5]
ね。
0931900NGNG
>>920-926
昨日はさすがにねてました。で
Hunt[a][b][c] = {h1.getY() - y};
みたいなときは、{}いらない。
Hunt[a][b][c] = h[c].getY() - y;
あと、今後の事考えるとここで、絶対値をとった方がいいと思う。
つまり、
Hunt[a][b][c] = Math.abs(h[c].getY() - y);
ね。

  int A = 0; /* フラグの有無 */
このフラグはどこで書き換えることがあるの?
if(A == 0)
でかならずA = 0な気がするけど。

flag += 1;を
A += 1;
としたいってことでいいかな、そう思って読み進めます。
で、
else if(A == 1){
の中でやりたい事の意図がつかめない。
上下左右について、動いたときにハンターからみえなくなればいいと考えれば
if(Hunt[h[d].getX()][y][d] <= 1){
じゃなくて、
if(mode_dir[0] != 5 && Hunt[x][y - 1][d] != 0){
みたいに、つまり、「そちらの方向に動けて、その動いた先からハンターが見えるなら」
という条件に直すわけね。

 /* 2−1.2 視界にハンターがいますが近いハンターから遠ざかる方に動きます */
は、だから、各方向に動いたとき、動いた先から見えるハンターのうち、一番近いやつ
との距離がもっともみじかくなるように動けばいいということで。書き直した方が
あと、このときにランダム要素をいれることも考えないと。

ということで、先は長いががんばってくれ(汗)
0932デフォルトの名無しさんNGNG
先は長いです…

考え方として、このクラスは
「獲物が1回逃げる時のためだけのプログラム」のつもりです。
これはハンターが1回動くためのプログラム、
そしてその2つを組み合わせてゲームとして動かすプログラムを合わせて動きます。
なので、ここでは1回の処理しか考えていません。

そしてそれらのデータは次の動作に対し生かすこととかはなく、
それを1回の動作(ターン)ごとに初期化させなければ行けないと思ってたんですよ。
そういう意味のフラグ初期化などでありハンターの位置情報クリアの意味の
1回ごとの A = 0 , Hunt[a][b][c]= 0 です。
で、1回ごとにハンターとの位置の相対関係を示した上で
自分の行動を決める、そういう指針です。

ですが、自分が全く講義に出なかったので…バカ学生してたツケが…
0933デフォルトの名無しさんNGNG
>>931
正方形の格子ブロックの中でフラグが1しかない、という時は
壁が2方向囲まれて(獲物が角に追い詰められてて)
ハンターが視界内において1人迫ってきたとしても
確実に「壁がない+ハンターがいない方向」が一つ存在して
そっち方向に逃げるのが一番合理的な逃げ方だと思うんですよ。
で、生き残ってる箱を選ぶというやり方にすりかえようとしたのが
自分が考えたやり方です。

そんで壁も方向も全て囲まれてる!という場合がA(フラグ)=2以上になる場合
だと思って作ったんですが…
少し煮詰める必要ありそうです。それよりもまずデバッグを取らないと…

※
Hunter[] h = new Hunter[3];
がシンボルを解釈処理できない、と怒られてしまいます。なぜでしょうか?
友達の Hunter h1 = (云々)というプログラムと組み合わせると
解決する問題なんでしょうか?
0934デフォルトの名無しさんNGNG
>>933
class Hunterが無いんじゃないの?
定義してないクラスを使うことはできないよ。
0935デフォルトの名無しさんNGNG
おれなら、まずこう考える

メソッド
1.獲物のコンストラクション
2.フェーズ処理のための初期化
3.ハンターの位置チェック(相対位置)
4.獲物移動方向決定
5.移動可能or不可判定(不可ならば4からやり直し、移動方向がなくなったらアボーン)
6.獲物移動


盤面情報は別クラスにしたいところだけど、この課題程度なら獲物クラスに持たせ
てもいいかなとおもう。
0936900NGNG
ちょっと飲んできたので、頭がほとんど回っていないけど、レスだけ。

>そんで壁も方向も全て囲まれてる!という場合がA(フラグ)=2以上になる場合
>だと思って作ったんですが…

壁がなくても、ハンターが二方向から来たら、A=2になるますよね?

>Hunter[] h = new Hunter[3];
>がシンボルを解釈処理できない、と怒られてしまいます。なぜでしょうか?
>友達の Hunter h1 = (云々)というプログラムと組み合わせると
>解決する問題なんでしょうか?

>>934で書いてくれていますが、その通りです。
ダミーのHUNTERクラスを作ってデバッグするのがよいのかな。

>>935
おそらく、仕様を決められて獲物のクラスを作っていると思うから、
メソッドも指定されているんじゃないかな、と邪推してみる。
0937デフォルトの名無しさんNGNG
宿題の途中ですが業務連絡です。

このスレ住人は次のスレのためのイメージキャラクタのAAを吟味して
ください。野郎は却下です。
あまり大きいとうざいので10行前後に収まるものをよろしくお願いします。
言ってることが解らない人は前スレの麻衣を参照してください。

以上、業務連絡でした。
0938933(生徒)NGNG
>>935
はい、そのとおりです。
以下渡された仕様です
 ↓
import java.util.*;

public class Game{
 private int N; /* nxn の正方格子の定義 */
 private int x,y; /* 正方格子のX座標 Y座標 */
 private int see; /* 見える範囲のマス数 */
 Random r = new Random();

 /** Game クラスのコンストラクター
  @param i 獲物のx座標
  @param j 獲物のy座標
 */
 public Game(int i,int j){
  x = i;
  y = j;
 }

 /** nxn の正方格子数を設定します
  @param n nxn の正方格子数
 */
 public void setN(int n){
  N = n;
 }

 /** 正方格子を設定します。
 @param x 正方格子のX方向
 @param y 正方格子のY方向
 */
 public void setXY(int i,int j){
  x = i;
  y = j;
 }
(続く)
0939933(生徒)NGNG
(続き)

 /** 見える範囲のマス数を設定します
  @param see 見える範囲のマス数
 */
 public void setSee(int s){
  see = s;
 }

 /** X座標を取得します
  @return X座標
 */
 public int getX(){
  return x;
 }
 /** Y座標を取得します
 @return Y座標
 */
 public int getY(){
  return y;
 }
 /** 獲物の行動を決定します
 @param h1,h2,h3 ハンターの位置情報
 */
 public void escapeGame(Hunter h1,Hunter h2,Hunter h3){
 }
}
0940933(生徒)NGNG
>>934
>>936
ダミーのハンタークラスを作れ、ということで
いろいろやってみたんですが
書き方がまずいのかエラーがダラダラ出てきます…。
多分自分がクラスの考え方が間違っている所に原因があると
思われますです…。
0941デフォルトの名無しさんNGNG
そろそろ950を超えるくらいまでには新スレを用意せねば。
おれは立たないので(勃起障害ではないが)誰か。
0942デフォルトの名無しさんNGNG
>>941
ハゲシクワラエナイ
0943弟NGNG
お兄ちゃんの宿題ぼくが答えるよ♪
0944デフォルトの名無しさんNGNG
麻衣の復活きぼんぬ
AAはシスプリ辺りからもらってこよう
http://piza2.2ch.net/test/read.cgi/kao/1001171038/
0945デフォルトの名無しさんNGNG
麻衣は嫁に行きました。
0946デフォルトの名無しさんNGNG
この辺からいこかー
http://piza2.2ch.net/test/read.cgi/kao/1001171038/308-309n
0947デフォルトの名無しさんNGNG
>>940
バグが取れなくて困ったときは、一度クラスをスケルトン状態(メソッド内からっぽ)
にしてビルド。
それでうまくいったら、少しづつコードを入れていって、どこでエラーが出るか調べ
てみる、というのも一つの手だ。
まず空っぽの、Hunter,Gameでビルドしてみたら?
0948デフォルトの名無しさんNGNG
>>935 じゃないがその課題、メソッド自分で追加しちゃダメなの?
それって激しくアホな課題だとおもうな。
つーかそんなわけ無いと思うがなぁ。
「解りやすいように構造化しました」
っていわれて怒る教官はいないだろ。
0949デフォルトの名無しさんNGNG
「お姉ちゃんの宿題、ペークが答えるよ」キボン。
0950デフォルトの名無しさんNGNG
新スレ
http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
0951デフォルトの名無しさんNGNG
>ほほう。何か狙ってたけどうまくいかなかったので、「言い逃れ」だという
>ことにしてしまうことにしたのですね:)

はぁ?(w
誰かに狙われてるのかね?
それともただの被害妄想かね?
0952933(生徒)NGNG
デバッグは一応終わりました…
ダミークラスつくるのはちょっと方針上あきらめました。
コンパイルが通ったやつです。
 ↓
import java.util.*;

public class Game{

 private int N; /* nxn の正方格子の定義 */
 private int x,y; /* 正方格子のX座標 Y座標 */
 private int see; /* 見える範囲のマス数 */

 /* 5方向の箱を作ります */
 int[] mode_dir=new int[5];

 /* ハンターを監視するための箱を作ります */
 int[][][] Hunt=new int[N+2][N+2][3];
 Hunter[] h=new Hunter[3];
0953生徒KNGNG
もうかれこれ2時間くらい迷ってます・・・

問1.
0から100万までの自然数をrand関数を使って50万個作りファイルに保存せよ。
(これはできた)

問2.
問1で作ったファイルを、選択ソート、挿入ソート、バブルソートをそれぞれ使って
ソートしてソート結果をファイルに出力せよ。
timeコマンドで実行時間を計測すること。

問2なんですが、ソートのやつは全部できたんですが、timeコマンドで実行時間を
計測する方法がわかりません。

使い方
time a.exe
としか説明がありません。
0954生徒KNGNG
↑
ちなみにC++を使ってます
0955デフォルトの名無しさんNGNG
>>953
言語名を書けよ。
Cなら、

/* CLOCK.C: プログラムの実行時間を入力するように要求してから、
* その時間の間、経過時間の表示を継続します。
*/

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

void sleep( clock_t wait );

void main( void )
{
long i = 600000L;
clock_t start, finish;
double duration;

/* 指定された時間の遅延を設ける */
printf( "3 秒の遅延\n" );
sleep( (clock_t)3 * CLOCKS_PER_SEC );
printf( "終了!\n" );

/* イベントの持続時間の計測 */
printf( "%ld 回のループの時間は ", i );
start = clock();
while( i-- )
;
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "%2.1f 秒です。\n", duration );
}

/* 指定されたミリ秒間だけ待機する */
void sleep( clock_t wait )
{
clock_t goal;
goal = wait + clock();
while( goal > clock() )
;
}

・・・・だそうだ。MSDNライブラリより抜粋。
0956デフォルトの名無しさんNGNG
>>953
timeで時間計測で悩むなよ・・・
やってみりゃわかるべ。
timeはa.exeの実行時間を測ってくれるだけだよ。
0957生徒KNGNG
>>956

例えば僕のファイル名はkadai1.exeです。
time kadai1.exeと入力するんですよね?
それをどこに入力するのかわからないんですが・・・
0958デフォルトの名無しさんNGNG
>>957
kadai1.exe を実行してたところ
0959デフォルトの名無しさんNGNG
学校だと標準でtimeコマンドが用意されてたりして。
0960デフォルトの名無しさんNGNG
>>953
ストップウオッチで測れば。
0961生徒KNGNG
>>958

プログラムが終了してしまってPress any key to continueと出るので
ボタン押したら消えてしまいます。
scanfを使うのですか?
0962デフォルトの名無しさんNGNG
>>962
再帰関数。
0963デフォルトの名無しさんNGNG
>>961
DOS窓
0964デフォルトの名無しさんNGNG
>>961は新スレには絶対来るな
0965デフォルトの名無しさんNGNG
1000get
0966名無しNGNG
#include <stdio.h>
#include <math.h>
main()
{
int i,j,k,m,n,na;
float a[10][10],b[10],x[10],e,eps,dd,gb,gg,gx,es;
scanf("%d",&n);
for(m=1;m<=n;m++){
for(k=1;k<=n;k++){
scanf("%f",&a[m][k]);
}
scanf("%f",&b[m]);
}
gb=1;gx=1;es=1;
na=400;eps=1.0e-7;
for(m=1;m<=n;m++){
if(a[m][m]!=0){
x[m]=b[m]/a[m][m];
}
else{
gb=0;
}
}
for(i=1;i<=n;i++){
dd=0;
for(j=1;j<=n;j++){
if(j!=i){
dd=dd+fabs(a[i][j]);
}
else{
}
}
if(fabs(a[i][i])>dd){
}
else{
gx=0;
}
}
if((gb==0)||(gx==0)){
printf("条件を満たさない");
}
else{
printf("収束状態\n");
k=0;
printf("回数:%d\n",k);
for(m=1;m<=n;m++){
printf("x[%d]=%f\n",m,x[m]);
}
0967名無しNGNG

while(es>eps){
k=k+1;
e=0;
for(i=1;i<=n;i++){
gg=b[i];
for(j=1;j<=i-1;j++){
gg=gg-a[i][j]*x[j];
}
for(j=j+1;j<=n;j++){
gg=gg-a[i][j]*x[j];
}
gg=gg/a[i][i];
e=e+fabs(x[i]-gg);
x[i]=gg;
}
printf("回数:%d\n",k);
for(i=1;i<=n;i++){
printf("x[%d]=%f\n",i,x[i]);
}
printf("E=%g\n",e);
if(k>=na){
es=0;
}
else{
es=e;
}
}
if(e<eps){
printf("根\n");
for(m=1;m<=n;m++){
printf("x[%d]=%f\n",m,x[m]);
}
printf("回数:%d\n",k);
printf("E=%g",e);
}
else{
printf("収束しない\n");
}
}
}
0968名無しNGNG
次の連立方程式の解をガウス・ザイデル法で解けという問題で>>966-967の
プログラムを作ったのですが��条件を満たさない�≠ナ終了してしまいます。
何がおかしいのでしょうか?

式
5*(x1)+7*(x2)+6*(x3)+5*(x4)=23
7*(x1)+10*(x2)+8*(x3)+7*(x4)=32
6*(x1)+8*(x2)+10*(x3)+9*(x4)=33
5*(x1)+7*(x2)+9*(x3)+10*(x4)=31
0969_NGNG
>>966-967
0970デフォルトの名無しさんNGNG
main関数の二つめのscanfでBusエラーがでます。
よろしくお願いします。
#include<stdio.h>

int *key;
int *array[10];
int linear_search(int key)

{
int i,n;
n=sizeof(array)/sizeof(int);
for(i=0;i<n;i++){
if(*array[i]==key){
return i;
}
}
return -1;
}

main()
{
int i,n;

for(i=0;i<10;i++){
printf("input data>");
scanf("%d",&array[i]);
}
printf("input key>");
scanf("%d",&key);
printf("%d",*array[1]);
n=linear_search(*key);
printf("index=%d\n",n);
}
0971怜NGNG
>>970
int *key;
int *array[10];
を
int key;
int array[10];
に
で、
printf("%d",*array[1]);
n=linear_search(*key);
を
printf("%d",array[1]);
n=linear_search(key);
に
0972Kusakabe YouichiNGNG
In article >>970, デフォルトの名無しさん/970 wrote:
> main関数の二つめのscanfでBusエラーがでます。

そんなもん使うからだ。
0973怜NGNG
新規質問はこっちにね。
http://pc.2ch.net/test/read.cgi/tech/1007902384/l50
0974怜NGNG
>>968
入力を間違えてるんじゃない?
if((gb==0)||(gx==0)){
の前で、printfでa[][]の内容を全て表示させてみたら?
0975970NGNG
>>971,>>972

いや、ポインタ配列を使わないとだめなんです。
0976デフォルトの名無しさんNGNG
じゃあ、mainのすぐあとに、
key = malloc( sizeof( int ) );
for(i=0; i<(sizeof( array)/sizeof(int*)); i++)
array[i] = malloc( sizeof( int ) );
とか入れて、
scanf("%d",&array[i]); とかを
scanf("%d",array[i]); とかにすれば〜?
#劣化したJAVAみたいな感じやな。
0977怜NGNG
>>975
えーっとね、じゃあポインタとかの意味はわかってる?
だったら、まずポインタっていうのは場所を表しているのはわかる?
その指してる場所をintならint型のスペースとして保存しないと駄目。
これだと、ポインタ定義してるだけだから、そのポインタ自身はどこも
指してない。
 だから、このプログラムは、scanfをする前に各ポインタ変数型ごとに
int型のスペースを作成して、その場所を指すようにする。で、その後、
scanf("%d",&array[i]);とかはscanf("%d",array[i]);みたいな形で読み
にいくわけ。
 あえて正解書かないので、がんばってください。
0978竹村さんNGNG
ちょっと
0979竹村さんNGNG
こまってるんですけど・・
#include<stdio.h>
main()
{
int a[100],i=0,x,s=0 ;
while(scanf("%d",a)!=EOF){

i++;

}
for(x=0;x<i;x++){
scanf("%d",&a[x]);
}
for(x=0;x<i;x++){
printf("%d\n",a[x]);
s+=a[x];
}
printf("%d\n",s);
}
配列要素の合計もとめたいんですけど
自分で作った上の奴では合計がでなくて困っています。
どなたか助けてもらえませんか。
0980怜NGNG
>>979
うーん・・・、
どういう感じで入力を与えたいのかな?
何か入力で失敗している気するね、そのコード見てる限り。
でも、合計が出ないっていうことは、各要素についてはちゃんと出力
できてるのかな?
0981デフォルトの名無しさんNGNG
while(scanf("%d",a)!=EOF){
i++;
}

がおかしいんでない?

while(scanf("%d",&a[i])!=EOF){
i++;
}

でいけるんかなあ。確認とれる状況じゃないのでごめん。
0982竹村さんNGNG
ああぁあできましたぁ!!
そのとおりやれば合計でました。
レイサン、ななしさんありがとうございます。(^0_0^)
ばかなんでi に気づきませんでした・・・。
0983デフォルトの名無しさんNGNG
>>982
解決したようなので、蛇足かもしれないけど

while (scanf("%d",&a[i])!=EOF){
i++;
}

と

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

は、どちらか一方書いときゃいいんじゃない?
while ... の方は配列のマックスを越える可能性が
ある一方、for の方は scanf の返り値をチェックし
てないので、どっちを残すかは迷うとこだけど(w
0984983NGNG
ああ、なんでループ二回も回してるのか分かった。
ひょっとして最初のループは要素数を数えてるの?
0985竹村さんNGNG
あぁ。そこなんですけど実は・・
そのあとにも課題があってその配列をソートする関数をつくらないと
だめなんですよ。だから一応i で 要素数はわかるかなとおもって。
またそのへんが不安なんですが・・
どもありがとうございます。
0986デフォルトの名無しさんNGNG
つか、2個目のループの中のscanfは常に失敗するから意味なしだろ。
境界チェックを怠っていることと合わせて減点30
0987 NGNG
乗算のチューリングマシン教えてください。
0988デフォルトの名無しさんNGNG
>>987
なんか、ちょっと前にもマルチポストしてたね君。
0989 NGNG
わかんなくてさ。。。
0990デフォルトの名無しさんNGNG
>>987
足し算を繰り返せばよい。
0991Kusakabe YouichiNGNG
In article >>988, デフォルトの名無しさん/sage/988 wrote:

> >>987
> なんか、ちょっと前にもマルチポストしてたね君。

はつみみです。
0992デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=cache:Nljhgee1AuQ:www.ic.kanagawa-it.ac.jp/yamamoto/applet.htm+%E4%B9%97%E7%AE%97%E3%80%80%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%9E%E3%82%B7%E3%83%B3&hl=ja&ie=utf8
0993 NGNG
ありがとうございます

やっぱり2とか#使わないと無理ですかね?
0994 NGNG
>>990
加算はわかるので
それを繰り返すにはどうすればいいですか?
0995デフォルトの名無しさんNGNG
>>994

for or while
0996デフォルトの名無しさんNGNG
>やっぱり2とか#使わないと無理ですかね?
そんなことか。区切り文字以外に
0-9もつかって十進掛け算にせよ。
0997デフォルトの名無しさん NGNG
なぜ、>>988 の書きこみにクサカベがレスしてるんだ。
ちょっと考えればわかりますね:)
0998デフォルトの名無しさんNGNG
もう燃料切れです。こちらへどうぞ
http://pc.2ch.net/test/read.cgi/tech/1007902384/
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
--------終了---------  
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。