トップページ⇒tech
982コメント315KB

宿題手伝いますYO!!

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
宿題とか手伝いますけど、以下の事項は守ってほしいです。
・マルチポストは厳禁です。
・キーワードが分かっているなら、http://www.google.co.jp を活用すること。
・質問内容がちゃんと日本語になっていること。
・言語名を入れること。
・自分の力で頑張ってみたことを伝えられる人。
・どこまでわかったのかを書くこと。
以上です。

前スレ http://pc3.2ch.net/test/read.cgi/tech/1029422194/

新
↑
│ http://pc3.2ch.net/test/read.cgi/tech/1027756023/
│ http://pc3.2ch.net/test/read.cgi/tech/1026138039/
│ http://pc.2ch.net/test/read.cgi/tech/1024592344/
│ http://pc.2ch.net/test/read.cgi/tech/1007902384/
│ http://pc.2ch.net/tech/kako/1003/10038/1003838158.html
│ http://pc.2ch.net/tech/kako/982/982853418.html
│ http://piza.2ch.net/tech/kako/972/972032579.html
↓
古

長いソースを張れるBBS
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433
0071デフォルトの名無しさんNGNG
>>70
うーむ、ベーマガあたりに載っていそうなコードだ…。

>>68
こういうのはどう? 「第2問 配列に拡張せよ」とか言われたときに改造しやすいぞ。

min=x;
name="x";

if(min > y){
 min=y;
 name="y";
}
if(min > z){
 min=z;
 name="z";
}

printf("最小値は%sの%dです。\n",name,min);
0072デフォルトの名無しさんNGNG
<<69,70,71 ありがとうございます。参考になりました!
0073デフォルトの名無しさんNGNG
すみません。どこかに隠れマルコフモデルについてサンプルコードや、わかりやすく解説してるサイトはないでしょうか?
0074デフォルトの名無しさんNGNG
Cなんですが、何回やってもfor君が繰り返しをしてくれません。

問題は、2つの西暦を入力して、AとBの西暦の間のうるう年の年を出力して
さらに回数を求める問題なんですが、どうすればいいでしょうか?
僕が書いたなんちゃってソースは↓

main()
{
int year_a,year_b,kaisu,big,small,i,count;
printf("西暦AとBを入力"); scanf("%d%d",&year_a,&year_b);

 if(year_a > year_b) big=year_a,small=year_b;   
elase if(year_b > year_a) big=year_b,small=year_a;
 
 kaisu=(big-small)/4

for(i == small;i <= big;i++){     ←こいつです。
count=small;
count++;
if(count%4==0) printf("%d",count);
}

printf("うるう年の回数=%d",kaisu);
}

よろしく願いします
0075デフォルトの名無しさんNGNG
forのところはfor(i == small;i >= big;i++)   でした

0076名無しさん@XEmacsNGNG
またネタか.........トホホ
0077デフォルトの名無しさんNGNG
ネタのつもりはないんですが・・・

もう1度練り直してみます。
0078デフォルトの名無しさんNGNG
>>75
for(i == small;i >= big;i++)   
i==small
'=='は変だろ。

>>64
double func(double x,int n){
  return (1/(1.0+func(x,--n)));
}
こんなやつか?
0079まいった(;;)NGNG
あらゆる正の偶数は2つの素数で表記するというプログラムをC++言語で作って
います。N=prime1+prime2 N:正の偶数 prime1&2:素数
       例100 = 3 + 97
= 11 + 89
= 17 + 83
= 29 + 71
= 41 + 59
= 47 + 53 といった感じです。素数だけを求める関数(2,3,5,7,9,11...)
はできたのですが、その後どのように求めた素数をprime1,prime2に代入すればいいのか分から
ないので、誰か教えてください。
0080デフォルトの名無しさんNGNG
素数の小さい方から取りだし、
それに対して和を取った時に、
Nになるような物が素数に在るか探す?

prime1を小さい方から取りだし、
prime2を大きい方から、(←無理?)
和がNにならないか確認しつづける。
値Nの半分まで繰り返す。
0081まいった(;;)NGNG
>>80 例えばfor(int i=2;i<=n;i++){
   if((i==2||i==3)||(i%3!=0&&i%2!=0))
          cout<<i<<" ";←あくまで素数に振り分けられているか確認のため
}
結果:2 3 5 7 9 11 13...て表れるんですけど、ここからprime1, prime2に代入できないんです。
できればソースコードを書いて教えていただきたいんですがm(--)m お願いします。
0082デフォルトの名無しさんNGNG
C++知らんの。配列に入れて確保しておくとか出来ないの?
0083デフォルトの名無しさんNGNG
>>81
まてや・・・9は素数ちゃうやろw ってか、それ動かしても9は出ない
だろうけど。
でも、それ全然正しくないと思うよ。例えば35とか素数と判定しそうな
予感。
0084はあ…NGNG
以下のプログラムはデータベースにある情報をC言語で操作する、というプログラムなんです
データベースのアドレス、ユーザー名などの入力を構造体を使ってユーザーがデータベース名などを打ちこむ形で作りなおしたいのですが、
どうすればよろしいのでしょう
卓越した技術を持つ皆様、初心者のためにご教授ください…

/* PostgreSQL のフロントエンドライブラリである libpq のCプログラム */
#include <stdio.h>
#include <pgsql/libpq-fe.h>

void exit_nicely(PGconn *conn){
PQfinish(conn);
exit(1);
}
0085はあ… つづきNGNG
main(){
/* 構造体を使わずに書いた方法 */
charpghost[]="abcd",
pgport[]="0000",
usr[] ="abcd",
passwd[]="abcd",
pgoptions[]= "",
pgtty[]= "",
dbName[]= "abcd";
PGconn *conn;
/* データベースへ接続 */
conn = PQsetdb(pghost, pgport,pgoptions, pgtty, dbName);
/* バックエンドとの接続が成功したことを確認 */
if(PQstatus(conn) == CONNECTION_BAD){
fprintf(stderr, "Connection to database '%s' failed.\n\n", dbName);
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
else if(PQstatus(conn) == CONNECTION_OK)
printf("Connection to database '%s' successed.\n\n", dbName);
PQfinish(conn);
}
0086デフォルトの名無しさんNGNG
>>79

#include <iostream>
#include <set>
typedef std::set<int> Cont ;
const max=10000 ;
int get_prime_number(int n, Cont &pl){
if(pl.empty()) pl.insert(2) ;
for(int c=*pl.rbegin()+1;c<=n;c++){
Cont::iterator vi ;
for(vi=pl.begin();*vi**vi<=c;vi++) if(!(c%*vi)) break ;
if(c%*vi) pl.insert(c) ;
}
return pl.size() ;
}
int is_sum_of_prime(int n, Cont &pl){
for(Cont::iterator vi=pl.begin();vi!=pl.end()&&(n-*vi)>=*vi;vi++)
if(pl.find(n-*vi)!=pl.end()) return *vi ;
return 0 ;
}
main(){
Cont v ;get_prime_number(max,v) ;
for(int n=4;n<=max;n+=2)
if(int p=is_sum_of_prime(n,v)) std::cout<<n<<"="<<p<<"+"<<n-p<<"\n" ;
else {std::cout<<n<<"=すごい発見!"<<std::endl ;break ;}
}
0087お茶NGNG
マルコフ連鎖…。
やっぱり大学でみんなに言われますた。
ちょっと調べたんですけど、相手の手を学習して、
手を読んで出すようにするってことですか?
0088デフォルトの名無しさんNGNG
>>79
1)2〜N/2までの素数を用意する。このときの最大素数をmとする。
 mはN/2以下。   
2)(2,N-2)、(3,N-3)・・・・・(m-1,N-m+1)、(m,N-m)
  の組み合わせで2つの数が素数であるか1)の結果を使って
  判定する。
0089デフォルトの名無しさんNGNG
>>87
マルコフ連鎖とかNグラムモデルとか。
相手の癖を見抜くんだろうね。
先生がどこまで要求してるかは授業のレベルによると思う。
プログラム初心者向けの授業だったら、後出しでいいと思うよ。
0090デフォルトの名無しさんNGNG
素数の列を作るなら、「エラトステネスのふるい」っていう手法が有名です。
googleで検索してみましょ。
0091デフォルトの名無しさんNGNG
>>79
「ゴールドバッハ予想 printf」でググッて見たら、ちらほらとサンプルあったぞ。
0092デフォルトの名無しさんNGNG
ロジスティック写像
yn+1=ayn(1−yn) (0<yn<1)
を考える。
a=3.95,y1=0.1に対して、y200をコンピューターを用いて小数点以下6桁まで正しく求めるためには、十進数で何桁程度の数値が扱えるプログラムが必要か?

お願いします
0093デフォルトの名無しさんNGNG
perlで
二次式を与え、それを因数分解するプログラムをお願いします。
二次式の与え方は、たとえば、

X^2の係数は?
Xの係数は?
定数項は?
などのように
出力は、
( X - 2 )( X + 3 )
整数の範囲で因数分解できない場合は、
その旨のメッセージを出すように。
x^2の係数は1でも結構です

お願いします
0094デフォルトの名無しさんNGNG
D
0095デフォルトの名無しさんNGNG
>>92 以下の感じでいいんじゃないかな。ちなみに当方素人っす。

漸化式y'=a*y*(1-y)に対して、Y'=y'+P',Y=y+Pと誤差を付与した式を考える。
Y'±P'=a*(Y±P)*(1-(Y±P))
これを展開してP'をPで表す。このとき、
・Pの二乗は小さい値とみなして無視。
・Pの係数にy[n]がある場合はy[n]=1と置き換える。
・±P-(±P)は0ではなく±2Pなので注意。
そうすると、aが定数であることからP'=α*P(α=定数値)という式が得られるはず。
X回の繰返しで累積誤差はα^Xになるので、0.000001/(α^X)を表せる精度が必要、となる。

定数値との演算で誤差が発生するか、とか、計算方法にもよるけど。
0096デフォルトの名無しさんNGNG
画像表示に関してですが、   
     int i, j;
int base1 = 64; //
 int base2 = 128; //
  int base3 = 192;

2値画像に変換するプログラムのbaseの部分を上のように変えて、
画像を4値化するときの色を分ける基準となる値を決めて、条件部分を
if (pixcell[i][j] < base1) modified[i][j] = 0;
else if (pixcell[i][j] < base2) modified[i][j] = 86;
else if (pixcell[i][j] < base3) modified[i][j] = 172;
else modified[i][j] = 255;

にして、原画像を4値化して、画像を4階調で表示するときの基準の値を自分で計算したので、
結果が正しいと判断したのですが、実際のプログラム実行時に,
元の値に対し正しい値が割り当たえられている確証がないので正しいとは言えないそうです。
どうしたら結果が正しいと判断できるのでしょうか。教えてください、お願いします。



0097デフォルトの名無しさんNGNG
>>96
二値画像をbase1~3を境界に四段階に区切れる理由がよくわからない
0098デフォルトの名無しさんNGNG
>>96
ループで生成した0から255の値を、そのルーチンで処理して、
ちゃんと4値になっているかどうか確かめれば?
この程度なら画像で確認しなくても大丈夫でしょ。

>>97
もとの2値化プログラムを4値化に改造したいのだと思ふた。
0099デフォルトの名無しさんNGNG
ホントに困ってます。もう6時間くらい進んでません。

前にjavaでとサーバーを作る課題がでました。
内容は、クライアント側からnameと入力するとサーバーから決まった名前が帰ってきて、numberと入力すると決まった番号が帰ってきます。byeを入力すると終了になります。
で、そのサーバーのプログラムはサンプルを変えるだけでできました。
そのときはクライアントについてはサンプルを使うだけでできました。

今回は、それをGUIベースのクライアントにするのが課題です。(アプレットではない)
簡単なものでよく、nameボタンとnumberボタンがあって、どちらかを押したら対応した文字が出る、くらいのものでいいと思います。
もちろん、このときにサーバーからデータを受け取り、それを表示する形です。

0100デフォルトの名無しさんNGNG
とりあえず完成しているサーバーのプログラムを書きます。
import java.util.*;
import java.io.*;
import java.net.*;

class MyServer {
public static void main(String args[]) {
if(args.length != 1) {
throw new IllegalArgumentException("Usage: java MyServer portnumber");
}
int port = Integer.parseInt(args[0]);
try {
ServerSocket ss = new ServerSocket(port);
while(true) {
Socket client = ss.accept();
new ServerThread(client).start();
}
}
catch(Exception e) {
System.err.println(e);
}
}
}
0101デフォルトの名無しさんNGNG
class ServerThread extends Thread {
private Socket client;
private BufferedReader file_in;
private BufferedReader from_client;
private PrintWriter to_client;
static int live_count=0;

public ServerThread(Socket c) {
super();
client = c;
}

synchronized void count_up() {
live_count++;
}

synchronized void count_down() {
live_count--;
}

public void run() {
count_up();
System.out.println(ServerThread.live_count);
try {
from_client =
new BufferedReader(new InputStreamReader(client.getInputStream()));
to_client =
new PrintWriter(client.getOutputStream());

0102デフォルトの名無しさんNGNG
System.out.println("connecting from " +
client.getInetAddress());
String line;
while(!(line = from_client.readLine()).equals("bye")) {
if(line.equals("name")){
to_client.println("名前");
}

else if(line.equals("number")){
to_client.println("番号");
}
else{
to_client.println("\n");
}
to_client.flush();

}
to_client.println("ok");
to_client.flush();

from_client.close();
to_client.close();
client.close();
count_down();
}
catch(Exception e) {
count_down();
System.err.println(e);
}
}
}
0103デフォルトの名無しさんNGNG
そして これがCUI版のクライアントです。
import java.io.*;
import java.net.*;

public class MyClient {
public static void main(String[] args) {
if(args.length != 2) {
throw new IllegalArgumentException("Usage: java MyClient IPaddress portnumber");
}
String host = args[0];
int port = Integer.parseInt(args[1]);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
try {
Socket server = new Socket(host, port);
BufferedReader from_server =
new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintWriter to_server =
new PrintWriter(server.getOutputStream());

System.out.println("Client: Connected to " +
server.getInetAddress() +
":" + server.getPort());

0104デフォルトの名無しさんNGNG
while(true) {
System.out.print("> ");
String send_str = input.readLine();
to_server.println(send_str);
to_server.flush();
String line = from_server.readLine();
System.out.println(line);
if(send_str.equals("bye")) {
break;
}
}

from_server.close();
to_server.close();
server.close();
}
catch (Exception e) {
System.err.println(e);
}
}
}

これで一通りは終わりです。
010599NGNG
自分ではこういうのを作ってみたのですが、GUIで作るのは初めてなので本とか参考にしてもうまくいきません・・・

class lis extends JPanel implements ActionListener{
JButton button1,button2;

lis(){
JButton button1 = new JButton("名前");
JButton button2 = new JButton("番号");
add(button1);
add(button2);
button1.addActionListener(this);
button2.addActionListener(this);
mainrepaint;
}

public void actionPerformed(ActionEvent e){
if(e.getSource() == button1){

}
else if(e.getSource() == button2){
}
}
010699NGNG
まずはif文を使い、どちらのボタンを押したのか見分け、それに対応したプログラムが書ける状態にしたいのです。
010799NGNG
とりあえず全然進まないので、今日は寝ることにします。
1をよく見ず書いたので、「長いソースを張れるBBS」というとこに目がいきませんでした。
ごめんなさい。
0108デフォルトの名無しさんNGNG
荒らすだけ荒らしておねんねか。
0109ぱぱNGNG
碁石モデルのプログラムをC言語で作ろうと思っています
どういったものかというと
1・二次元の正方格子(碁盤のようなもの)を考える
2・まず最初に1つだけ白いしを格子点に置く
3・その周りの四つの格子点に確率Pで白石を置く。そうでない場合は黒石をおく
4・次に白石に隣接する何も置いていない格子点に、3と同じ思考をする。
5・以上の操作をすべての白石が黒石に囲まれるまで繰り返す

このアルゴリズムを考えています。考え方のきっかえでももらえないでしょうか?
よろしくお願いします
0110デフォルトの名無しさんNGNG
>>109
http://pc3.2ch.net/test/read.cgi/tech/1024024666/l50
このスレ参考になるかも。

>1・二次元の正方格子(碁盤のようなもの)を考える
2次元配列で。

>2・まず最初に1つだけ白いしを格子点に置く
配列へ値を代入。(例:白=1、黒=2、なし=0)

>3・その周りの四つの格子点に確率Pで白石を置く。そうでない場合は黒石をおく
確率Pはrand()で。

>4・次に白石に隣接する何も置いていない格子点に、3と同じ思考をする。
それを関数化しておくと楽だね。
int think(int color);みたいに。

>5・以上の操作をすべての白石が黒石に囲まれるまで繰り返す
whileループで実現。
0111デフォルトの名無しさんNGNG
>>108
反省してるしいいんじゃない。

>>105
ほとんど問題ないように思うけど、気になる点が一点。

class lis extends JPanel implements ActionListener{
JButton button1,button2;

 lis(){
 /*JButton*/ button1 = new JButton("名前");
 /*JButton*/ button2 = new JButton("番号");
 ...

クラス変数と同名のローカル変数を宣言すると、別の変数として扱われてしまう。
ていうかどう上手くいかないのか書こうYO!!
0112デフォルトの名無しさんNGNG
>98
ルーチンで処理するのではなく、数例を具体的数値とともに調べることが必要なよう
なのですが、いまいち意味がわかりません。どうしたらいいのでしょうか?
0113一年生NGNG
C言語です。誰か教えてください。
あられ数というものがあります。次のルールに従って次の数が決まっていく
数列のことです。
1. はじめに勝手に数を与えます。
2. その数が偶数なら2で割り、奇数なら3倍して1を足すことによって次の
 数を決めます。
3. 新たに決まった数に対して、2を繰り返します。
たとえば、はじめに、7を選んだとしましょう。これは奇数ですから次の
数は7×3+1=22。22は偶数だから2で割って11。11は奇数だから3倍して1を足して34。これを順々に続けていくと
7,22,11,34,17,52,26,13,40,
20,10,5,16,8,4,2,1,4,2,1、・・・
と、最後に4,2,1を繰り返すようになります。途中の数は大きく
なったり小さくなったりと、雲の中で成長する霰(あられ)のように
振舞うので、霰数という名前がついています。
課題1:整数を入力すれば、あられ数を順々に計算して表示するプログラム
  を作りなさい。このとき、あられ数に1が出てきたら、プログラムは終了するようにしなさい。
課題2:あられ数が1に落ち着くまでに何ステップかかるのかを表示するプロ
  グラムを作成しなさい。(7の例だと16ステップで1になっています。)
課題3:3〜30に対するあられ数のステップ数を表示するプログラムを作
  成しなさい。

ifとかdo〜whileとか色々使ってみましたが、うまくいきませんでした、誰か教えてください。
0114デフォルトの名無しさんNGNG
>>113
> ifとかdo〜whileとか色々使ってみましたが、うまくいきませんでした、誰か教えてください。
どこまでやってみたんだ。できたとこまで貼ってみろ。
0115デフォルトの名無しさんNGNG
for (i=1; n!=0; i++) {
printf("%d %d\n", i, n);
if (n%2) n/=2;
else n = 3*n + 1;
}
01164NGNG
voidarare()
{
unsigned int value;
unsigned char count_1;
unsigned char count_2;

//valueにどうにかして数字を入れておく

count_1 = 0;
count_2 = 0;
while(value != 1){
count_1++;
if((value >= 3) && (value <= 30)){
count_2++;
}
if(!(value % 2)){
value /= 2;
}
else{
value = value * 3 + 1;
}
//ここでvalueを表示
}
//ここでcount_1を表示(ステップ数)
//ここでcount_2を表示(3〜30までのステップ数)
}
01174NGNG
voidarare()
{
unsigned int value;
unsigned char count_1;
unsigned char count_2;

//valueにどうにかして数字を入れておく

count_1 = 0;
count_2 = 0;
while(value != 1){
count_1++;
if((value >= 3) && (value <= 30)){
count_2++;
}
if(!(value % 2)){
value /= 2;
}
else{
value = value * 3 + 1;
}
//ここでvalueを表示
}
//ここでcount_1を表示(ステップ数)
//ここでcount_2を表示(3〜30までのステップ数)
}
01184NGNG
タブもうまくいってないし、2重カキコしてしまってスマソ。
0119デフォルトの名無しさんNGNG
for (i=3; i<30; i++) {
for (j=0, k=i; k != 1; j++)
k = arare(k);
printf("%d %d", i, j);
}
0120デフォルトの名無しさんNGNG
>>116-118
なんで課題3からやってんだ。
0121文系一年生(113)NGNG
課題1
#include <stdio.h>

main()
{
int i,j;
do
{
scanf("%d",&i);
if(i%2)
{
j=i*2;
}else
{
j=i*3+1;
}while(1!)

}

この辺までしか分かりませんでした。
0122文系一年生(113)NGNG
課題1
#include <stdio.h>

main()
{
int i,j;
do
{
scanf("%d",&i);
if(i%2)
{
j=i*2;
}else
{
j=i*3+1;
}while(i!=1);

}

この辺までしか分かりませんでした。
0123デフォルトの名無しさんNGNG
>>122
ループの中で毎回iを書き換えちゃ意味ないじゃん。
あとインデントしてくれ。
0124デフォルトの名無しさんNGNG
もひとつ、「その数が偶数なら2で割」るんだろ?
0125文系一年生(113)NGNG
>>122-123
はい、*と/を間違えました。

インデントって何ですか?
0126デフォルトの名無しさんNGNG
字下げ。ブロックの中の行頭を下げること。

#include <stdio.h>

main()
{
    int i, j;
    do {
        scanf("%d", &i);
        if (i % 2) {
            j = i * 2;
        }
        else {
            j = i * 3 + 1;
        }
        while (i != 1);
    }
}
0127文系一年生(113)NGNG
課題1
#include <stdio.h>

main()
{
int i,j;
do
{
scanf("%d",&i);
if(i%2)
{
j=i/2;
}else
{
j=i*3+1;
}while(i!=1);

}

0128デフォルトの名無しさんNGNG
コンパイル通らないだろ。いや漏れも>126で間違えちゃったけどさ。
それと>123ちゃんと読んだ? あ、あと計算結果毎回捨ててるし。
0129デフォルトの名無しさんNGNG
http://petit.zive.net/rag.txt
0130デフォルトの名無しさんNGNG
課題1
#include<stdio.h>
main()
{
int arare;
scanf("%d",&arare);
while(arare != 1){
if(!(arare%2)) arare/=2;
else arare=arare*3+1;
printf("%d\n",arare);
}
return 0;
}
0131デフォルトの名無しさんNGNG
>>130
scanf()の戻り値をチェックしてないのはともかく、0を与えると無限ループする。
0132デフォルトの名無しさんNGNG
int arare(int n) { return (n%2) ? n/2 : n*3+1; }
//課題1
void main() {
 int n;
 scanf("%d", &n);
 for (; n != 1; n = arare(n))
  printf("%d\n", n);
}
//課題2
void main() {
 int n, i;
 scanf("%d", &n);
 for (i=0; n != 1; i++, n = arare(n))
  printf("%d %d\n", i, n);
}
//課題3
void main() {
 int i, j, n;
 for (i=3; i<=30; i++) {
  for (j=0, n=i; n != 1; j++, n = arare(n))
   ;
  printf("%d %d\n", i, j);
 }
}
0133デフォルトの名無しさんNGNG
課題2って回数だけ表示するんじゃないの?
0134デフォルトの名無しさんNGNG
>>131
そういえば、0以下考慮してなかった。
0135デフォルトの名無しさんNGNG
8クィーン問題で、穴を埋める課題がでました。

まず、col[]は1なら縦列にはクィーンを置けない。
queen[]は行を示している。
up[]が一なら斜めには置けない。
downが1なら斜めには置けない。
0136デフォルトの名無しさんNGNG
まずはクィーンの位置を表示するプログラムです。
#include <stdio.h>

#define N 8

int col[N+1],queen[N+1],up[2*N+1],down[2*N+1];
int num=1;

void queen_n(int i){
int j,k;
if(i>8){
printf("%d\n",num++);
for(j=1;j<=N;j++){
for(k=1;k<=N;k++){
if(queen[j]==k){
printf("Ω");
}
else{
printf("+");
}
}
printf("\n");
}
getchar();
}
0137デフォルトの名無しさんNGNG
136で書いた、位置表示のプログラムはどうでもよく、ポイントは次です。
else{
for(j=1;j<=N;j++){
if(col[j]==0 && up[i+j]==0 && down[i-j+N]==0){
printf("%d",j);
queen[i]=j;
col[j]=1;
up[i+j]=1;
down[i-j+N]=1;
queen_n(i+1);

}
}
}
}
0138135NGNG
queen_n(i+1);の下を埋めよ、という課題です。
3行くらいで大丈夫なようです。

おそらくその行に置けなかったら一個戻る、ようなプログラムだと思うのですが、どうもうまくいきません。
助けてください。
0139135NGNG
ちなみに、これはmain関数です。(一応のせておきます。)
あ・・・言い忘れましたが、C言語です。

int main(void){
int i;

for(i=1;i<=N;i++)
col[i]=0;
for(i=1;i<=2*N;i++){
up[i]=0;
}
queen_n(1);

return 0;
}
0140デフォルトの名無しさんNGNG
>>137
col[j]=0;
up[i+j]=0;
down[i-j+N]=0;
0141デフォルトの名無しさんNGNG
クライアントとサーバのプログラムで、質問です。

クライアント側だけについてです。
2つのクラスを作りました。
1つのクラスにサーバへつなぐために、以下のプログラムを書きました。
public static void main(String args[]) throws IOException{
String host = args[0];
int port = Integer.parseInt(args[1]);
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

Socket server = new Socket(host, port);
BufferedReader from_server =
new BufferedReader(new InputStreamReader(server.getInputStream()));
PrintWriter to_server =
new PrintWriter(server.getOutputStream());

ここで、「他のクラス」からto_serverやfrom_sever、などを呼び出したいのですが、やり方を教えてください。
ようするに、その「他のクラス」からサーバに命令を送ったりしたいのです。
0142デフォルトの名無しさんNGNG
C言語のバブルソートです、そして初心者なんですけど、

#include <stdio.h>

#define NUMBER 6

void main(void)
{
int i,k,a,kai=0;
int data[NUMBER];

/* NUMBER個の値を受け取る */
for (i=0;i<NUMBER;i++)
{
printf("%d番目の値は? :", i+1);
scanf("%d",&data[i]);
}
0143142ですNGNG
/* バブルソート */
for (i=0;i<NUMBER;i++)
{
for (k=0;k<NUMBER;k++)
{
if (data[k]>data[k+1]) {
/* 値を入れ替える */
a=data[k];
data[k]=data[k+1];
data[k+1]=a;
kai=kai+1;  } 
}
}
/*結果の表示 */
printf("並べ替えた結果: ");
for (i=0;i<5;i++){
printf("%d ",data[i]);
}
printf("入れ替えた回数は=%d",kai);
printf("\n");
}


これだと全部を昇順に並べた結果しかでてこないんです。
これをどうにかして擬似乱数(rand関数)を使って、
一回ごとに値を交換した結果を表示したいんですが、
どうしたらいいでしょうか。
1 2 5 4 3
1 2 4 5 3
1 2 4 3 5
1 2 3 4 5 と言った感じでうまくできないでしょうか。お願いいたします。
0144594NGNG
>142
そもそもそのprogramがうまく動かないぞ.
0145142・143NGNG
上の二つコピーしてやったらホントにできませんでしたね。すんませぬっす。
ということで、こっちにちゃんと動作するのを置かせていただいたので、
こちらでお願いいたします。すいませんでした。
http://ime.nu/do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433
の37です。
0146デフォルトの名無しさんNGNG
if (data[k]>data[k+1])
{
/* 値を入れ替える */
a=data[k];
data[k]=data[k+1];
data[k+1]=a;
kai=kai+1;
/*ここでデータ出力*/
}
0147名無しさん@XEmacsNGNG
>これをどうにかして擬似乱数(rand関数)を使って、
>一回ごとに値を交換した結果を表示したいんですが、
意味不明
0148142・143NGNG
146さんどうもです、今からやってみます。

>147さん
さっきのプログラムを実行すると
「1番目の数は…
2番目の数は…」と出てきて、それから自分で値を代入してから
 やっと実行結果が出てくると思うんですが、それを擬似乱数を使って
ランダムにデータを作って勝手に適当な結果が出てくるようにしたいんです。
わかりにくくて申し訳ありませんでしたっす。
 
0149デフォルトの名無しさんNGNG
time_t t;

srand(&time);
だっけ?使うのは。
時間ごとに初期化されるランダム関数。
0150名無しさん@XEmacsNGNG
>>149
いっぺん氏んでこい。
0151デフォルトの名無しさんNGNG
4 階調と16 階調で量子化する際には,X0<X1<X2<X3<X4,
Y0,Y1,Y2,Y3 をどうしたらいいのですか?教えてください。お願いします。
0152デフォルトの名無しさんNGNG
>>148
バブルソートの中に結果の表示を入れる。
015360cm浮き上がるストレートNGNG
>>148
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TIMES 10
int main(void)
{
 int data[TIMES];
 int a,b,keep;
 srand(time(NULL));
 for(a=0;a<TIMES;a++)
  data[a]=rand();
 for(b=0;b<TIMES-1;b++)
  for(a=0;a<TIMES-1;a++)
   if(data[a]>data[a+1])
   {
    keep=data[a];
    data[a]=data[a+1];
    data[a+1]=keep;
   }
 for(a=0;a<TIMES;a++)
  printf("data[%d]==%d\n",a,data[a]);
 return 0;
}
0154142・143NGNG
147・148さん、非常にありがとうございました。
おかげでなんとか結果と回数を表示することができまた。
148さんのをほとんど使った気もしますけど、感謝してます。

0155デフォルトの名無しさんNGNG
>>151 >>96の「画像を4階調で表示するときの基準の値を自分で計算したので」と
同じように16階調の基準の値を計算すればよいと思うが。

>>96の式を眺める限りでは、こんな感じか?
if (pixcel < base[i]=256/n*i) modified = 256/(n-1)*(i-1)

ていうか、出された課題をもっと正確に書き込め。何を聞きたいのかさっぱりなので、
みんなも宿題手伝いようがない。
0156デフォルトの名無しさんNGNG
説明不十分でゴメンナサイ。初めに2値化のプログラムがあってそれを変更して4値化にして、
その結果が何故正しいか数例を具体的数値とともに調べるという課題で、下のプログラムのように変更したのですが、
数例を具体的数値とともに調べるというのがわかりません。

画像表示に関してですが、   
     int i, j;
int base1 = 64; //
 int base2 = 128; //
  int base3 = 192;

2値画像に変換するプログラムのbaseの部分を上のように変えて、
画像を4値化するときの色を分ける基準となる値を決めて、条件部分を
if (pixcell[i][j] < base1) modified[i][j] = 0;
else if (pixcell[i][j] < base2) modified[i][j] = 86;
else if (pixcell[i][j] < base3) modified[i][j] = 172;
else modified[i][j] = 255;
0157蘇えった149NGNG
time_t t;

srand(&t);
0158デフォルトの名無しさんNGNG
>>157
もういっぺん氏んでこい。
0159デフォルトの名無しさんNGNG
二つのディレクトリの中に同じ名前のファイルがあるか
どうかを調べなければいけないのですが、うまくいかないです・・。
たとえばディレクトリ1に file1, file2, file3 が入っていて、
ディレクトリ2に file2, file3, file4 が入っていたら、
file2 file3 のように出力したいのですが・・。
0160159NGNG
あっ。すいません。。普通に書き忘れました。言語はCです。
0161159NGNG
たびたびすいません。
ディレクトリの中はファイルだけと仮定してOKみたいです。
0162デフォルトの名無しさんNGNG
一つのディレクトリに入っているファイル名を取得するところまでは
できた?
0163デフォルトの名無しさんNGNG
あ。レスありがとうございます。
はい。ひとつの時はできたんですよ。
たとえば、このディレクトリにこのファイルはあるか?
というのはできたんです。しかしディレクトリごとの
比較になると頭が錯乱してきてしまって・・
0164デフォルトの名無しさんNGNG
>>159 に質問。
char *d1[]={"file1","file2","file3",};
char *d2[]={"file2","file3","file4",};
このd1とd2から同じ文字列を見つけ出すプログラムは作れるか?
0165159NGNG
>>164

ループの中にもういっこループをいれて
9通り比較すればいいんですよね??
0166名無しさん@XEmacsNGNG
1つ目のディレクトリに入っているファイル名をハッシュテーブルに入れる。
2つ目のディレクトリに入っているファイル名についてmemberを実行して重複があれば表示。
0167デフォルトの名無しさんNGNG
>>159に質問。
取得したファイル名をテーブルに保存する事は出来るか?
0168デフォルトの名無しさんNGNG
テーブル?ハッシュテーブル?ですか?
いや、ちょっとわかんないっす。
検索逝ってきます。レスありがとうございました。
0169デフォルトの名無しさんNGNG
>>168
名前を辞書順にソートしておけば、
ハッシュを使わなくても、O(n)でできるぞ。
ソートに時間がかかるとだめだけどな。
0170デフォルトの名無しさんNGNG
>>156
その課題が出された経緯を知らないから、
「結果が何故正しいか数例を具体的数値とともに調べる」
ていうのはわからんよ。
たぶん、2値化のときに、それをやっていると思うんだけど。

あてずっぽうでいいなら、
グラデーション画像を突っ込んでみるとか、
pixcell[i][j]に適当な値を入れてみて、それが期待した値になるか試すとか。
■ このスレッドは過去ログ倉庫に格納されています