iptablesでは、20番21番のftp接続だけでは、passive mode対応にはならぬ為、設定をしておいた。
#>modprove ip_nat_ftp
#>modprove ip_contrack_ftp
さらに、起動し直して大丈夫なように
#/etc/modulesに次の設定を入れる。
ip_conntrack_ftp
ip_nat_ftp
loop
これで、接続OK。
2008年12月25日木曜日
iptablesの追加
昨日、職場のサーバも、iptablesで外部からの接続を制限した。
今日、メールできないという苦情がきた。
そういえば、pop,smtp,imapなどを塞いだ予感が・・・・。
という訳で、速攻で以下を追加。
# pop,smtp,imap
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
で、接続完了。
今日、メールできないという苦情がきた。
そういえば、pop,smtp,imapなどを塞いだ予感が・・・・。
という訳で、速攻で以下を追加。
# pop,smtp,imap
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
で、接続完了。
2008年12月24日水曜日
aptitude で エラー
debian etch で、aptitude update すると、[waiting for headers]で、実行が止まってしまう。
/var/lib/apt/lists のファイルを消しても駄目だった。
この機械は、プロクシを通っていて、httpポートの一つしか外部には通じていない。で/etc/apt/sources.listに問題があると考えて、いろいろ変更して調べてみた。
※インターネットに直でつないでいる自宅のdebian etchは同じsources.listでも異常が無いのだが。
で、試行錯誤しながら、次のように変更して、ようやく通じるようになった。
deb http://dennou-h.gfd-dennou.org/debian etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib non-free
#deb-src http://dennou-h.gfd-dennou.org/debian etch main contrib non-free
どうやら、プロクシで他のサーバーがひっかかっているようだ(^^;)。
でも、このプロクシは、制限がころころ変わって大変だ(T_T)。
/var/lib/apt/lists のファイルを消しても駄目だった。
この機械は、プロクシを通っていて、httpポートの一つしか外部には通じていない。で/etc/apt/sources.listに問題があると考えて、いろいろ変更して調べてみた。
※インターネットに直でつないでいる自宅のdebian etchは同じsources.listでも異常が無いのだが。
で、試行錯誤しながら、次のように変更して、ようやく通じるようになった。
deb http://dennou-h.gfd-dennou.org/debian etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib non-free
#deb-src http://dennou-h.gfd-dennou.org/debian etch main contrib non-free
どうやら、プロクシで他のサーバーがひっかかっているようだ(^^;)。
でも、このプロクシは、制限がころころ変わって大変だ(T_T)。
2008年12月19日金曜日
家サバファイアーウォール
debianにファイアーウォールをiptableで設定します。
スクリプトは、いちいち作成するのは面倒なので、インターネットから引っ張ってきました。
ただ、
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
でのポリシーから始めるのが筋かもしれませんが、
それはおいおいということで(^_^;)
#! /bin/sh
# iptables reset
/sbin/iptables -F
/sbin/iptables -X
# default rule
#サバから出るパケット以外はドロップする
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
# loopback
/sbin/iptables -A INPUT -i lo -j ACCEPT
sbin/iptables -A OUTPUT -o lo -j ACCEPT
# established
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP
/sbin/iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
# http, https
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ftp
/sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# ssh
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# samba
#クライアントのipが、0.1と0.2以外は受け付けない!!
/sbin/iptables -A INPUT -p udp -s 192.168.0.1 --dport 137 -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 192.168.0.1 --dport 138 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.1 --dport 139 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.1 --dport 445 -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 192.168.0.2 --dport 137 -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 192.168.0.2 --dport 138 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.2--dport 139 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.2 --dport 445 -j ACCEPT
# webmin
/sbin/iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
# swat
#/sbin/iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 901 -j ACCEPT
# CUPS
/sbin/iptables -A INPUT -p tcp --dport 631 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 631 -j ACCEPT
# mDNS
#/sbin/iptables -A INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
# ICMP reject
/sbin/iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
スクリプトは、いちいち作成するのは面倒なので、インターネットから引っ張ってきました。
ただ、
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
でのポリシーから始めるのが筋かもしれませんが、
それはおいおいということで(^_^;)
#! /bin/sh
# iptables reset
/sbin/iptables -F
/sbin/iptables -X
# default rule
#サバから出るパケット以外はドロップする
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
# loopback
/sbin/iptables -A INPUT -i lo -j ACCEPT
sbin/iptables -A OUTPUT -o lo -j ACCEPT
# established
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# ICMP
/sbin/iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
# http, https
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ftp
/sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# ssh
/sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# samba
#クライアントのipが、0.1と0.2以外は受け付けない!!
/sbin/iptables -A INPUT -p udp -s 192.168.0.1 --dport 137 -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 192.168.0.1 --dport 138 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.1 --dport 139 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.1 --dport 445 -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 192.168.0.2 --dport 137 -j ACCEPT
/sbin/iptables -A INPUT -p udp -s 192.168.0.2 --dport 138 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.2--dport 139 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -s 192.168.0.2 --dport 445 -j ACCEPT
# webmin
/sbin/iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
# swat
#/sbin/iptables -A INPUT -p tcp -s 192.168.0.0/24 --dport 901 -j ACCEPT
# CUPS
/sbin/iptables -A INPUT -p tcp --dport 631 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 631 -j ACCEPT
# mDNS
#/sbin/iptables -A INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
# ICMP reject
/sbin/iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
2008年12月18日木曜日
仮想CDマウントソフト
家のノートパソコンは
Lavie L LL700 、CDドライブ壊れ という古い上に壊れパソコンです。
(俺の下肢もけっこうガタがきてますが・・・・自業自得か・・・・orz)
仕事で使えればいいやっという感じですが、数学の問題入力用にTexとStudyAidDBというものを使ってます。このStudyAidDBは、CDドライブが必須で、インストールもできない。
で、IDEやUSBのCDROMでも買ってドライブレターの交換をすればいいのですが、それももったいない。
で、CDROMのISOイメージをimage-burnで作って、これを仮想CDドライブとしてマウントして使うことにした。この仮想CDマウントソフトですが、従来はDaemon-toolを使うのが一般的でしたが、Alcohol 52%というフリーソフトが楽チンです。これなら、説明書を見なくても感覚ですぐに操作できます。
ということで、無事に使っています。
Lavie L LL700 、CDドライブ壊れ という古い上に壊れパソコンです。
(俺の下肢もけっこうガタがきてますが・・・・自業自得か・・・・orz)
仕事で使えればいいやっという感じですが、数学の問題入力用にTexとStudyAidDBというものを使ってます。このStudyAidDBは、CDドライブが必須で、インストールもできない。
で、IDEやUSBのCDROMでも買ってドライブレターの交換をすればいいのですが、それももったいない。
で、CDROMのISOイメージをimage-burnで作って、これを仮想CDドライブとしてマウントして使うことにした。この仮想CDマウントソフトですが、従来はDaemon-toolを使うのが一般的でしたが、Alcohol 52%というフリーソフトが楽チンです。これなら、説明書を見なくても感覚ですぐに操作できます。
ということで、無事に使っています。
webdavその4
debian etchのサーバー内に、職場のwindowsパソコンでwebdavで接続して、フォルダ名・ファイル名がshift-jisになっている件だけども、「shift-jisコードでのwebページ扱い」ということで思い切って運用することにした。
ただ、まだ不具合がある。職場からnetdriveでプロクシ経由で接続してますが、フォルダを作ると
「新しいフォルダ」の中に同名の「新しいフォルダ」ができてしまう。
また、フォルダは削除できない
家の中で、netdriveを使うとそういうことはないので、何が原因だろう???
ちょっと粘って調べたが分からなかった。
ただ、まだ不具合がある。職場からnetdriveでプロクシ経由で接続してますが、フォルダを作ると
「新しいフォルダ」の中に同名の「新しいフォルダ」ができてしまう。
また、フォルダは削除できない
家の中で、netdriveを使うとそういうことはないので、何が原因だろう???
ちょっと粘って調べたが分からなかった。
2008年12月17日水曜日
webdavからsambaの設定
webdavではapache2からなのでパフォーマンスが非常に悪い。
で、自宅ファイルサーバとして自宅で使う場合は、sambaを使ってみる。すると・・・・文字化けが酷い。使い物にならん orz.
で、気を取り直して考えると、webdavは、windowsで使っているshift_jisをそのままdebian内にshift_jisでコピーしている。sambaは、文字コードを例えばUTF-8に変換して使っていることに気づいた。
そう、sambaの文字コードをshift_jisにすれば良いのだ。
もしかしたら一部の文字で悪いことが起きるかも知れないが。
で、smb.confの設定。
dos charset = CP932
unix charset = shift-jis
display charset = shift-jis
これで一応どちらも同じようになった。
欠点は、debian etchは、utf-8で使っているので、何かあった場合、shift_jisのものはdebian上で操作しがたいことか。
で、自宅ファイルサーバとして自宅で使う場合は、sambaを使ってみる。すると・・・・文字化けが酷い。使い物にならん orz.
で、気を取り直して考えると、webdavは、windowsで使っているshift_jisをそのままdebian内にshift_jisでコピーしている。sambaは、文字コードを例えばUTF-8に変換して使っていることに気づいた。
そう、sambaの文字コードをshift_jisにすれば良いのだ。
もしかしたら一部の文字で悪いことが起きるかも知れないが。
で、smb.confの設定。
dos charset = CP932
unix charset = shift-jis
display charset = shift-jis
これで一応どちらも同じようになった。
欠点は、debian etchは、utf-8で使っているので、何かあった場合、shift_jisのものはdebian上で操作しがたいことか。
2008年12月16日火曜日
webdavの続きNo3
webdavの管理プログラムにnetdriveがあり、それで通信してますが、プロクシの設定もできるようになっている。
ファイル→setteing→http_proxy
です。これで、職場から自宅にローカルフォルダ化することが出来た(^_^)v。
また、advance設定で、プロクシを外す設定も個別にできるようになっている。
それから、netdriveには2種類あって、もう一つの方が使ってみると良い感じです。
でも、uft-8に対応しているはずなのに、文字化けが・・・・・(T_T)。
ファイル→setteing→http_proxy
です。これで、職場から自宅にローカルフォルダ化することが出来た(^_^)v。
また、advance設定で、プロクシを外す設定も個別にできるようになっている。
それから、netdriveには2種類あって、もう一つの方が使ってみると良い感じです。
でも、uft-8に対応しているはずなのに、文字化けが・・・・・(T_T)。
webdavの続きNo2
webdavフォルダにファイルを書き込もうとすると、404エラーが出た。
そこで、apache2のエラーログを見るとこんなログが・・・・
[Tue Dec 16 09:53:19 2008] [error] [client 10.3.***.***] Negotiation: discovered file(s) matching request: /home/massa/dav/trialfolder/15.xls (None could be negotiated).
ちょっとググってみると、Options Multiviewsあたりの事か・・・。
で、 Options -MultiViews
と対処。
今度は大丈夫だった。(^^;)
そこで、apache2のエラーログを見るとこんなログが・・・・
[Tue Dec 16 09:53:19 2008] [error] [client 10.3.***.***] Negotiation: discovered file(s) matching request: /home/massa/dav/trialfolder/15.xls (None could be negotiated).
ちょっとググってみると、Options Multiviewsあたりの事か・・・。
で、 Options -MultiViews
と対処。
今度は大丈夫だった。(^^;)
2008年12月15日月曜日
webdavの続きNo1
職場のwebdavサーバーのdfです.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 65938116 2339460 60249104 4% /
tmpfs 1037900 0 1037900 0% /lib/init/rw
udev 10240 64 10176 1% /dev
tmpfs 1037900 0 1037900 0% /dev/shm
/dev/sda1 980308 24232 906280 3% /boot
ほとんどガラガラです(^^;)。
職場(設定の禁止事項が多くて、プロクシ経由のみ)から自宅のwebdavサーバに接続してみた。ちょっと使いづらいぞ。接続は何回かやってみてようやく接続だし、ローカルのドライブとしての設定ができないし、netdriveが使えない。
う~~~ん、まあ不便だけど使えるだけましかな。
でも、niftyのリモートwebdavドライブは、きちんと繋がるなあ?
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 65938116 2339460 60249104 4% /
tmpfs 1037900 0 1037900 0% /lib/init/rw
udev 10240 64 10176 1% /dev
tmpfs 1037900 0 1037900 0% /dev/shm
/dev/sda1 980308 24232 906280 3% /boot
ほとんどガラガラです(^^;)。
職場(設定の禁止事項が多くて、プロクシ経由のみ)から自宅のwebdavサーバに接続してみた。ちょっと使いづらいぞ。接続は何回かやってみてようやく接続だし、ローカルのドライブとしての設定ができないし、netdriveが使えない。
う~~~ん、まあ不便だけど使えるだけましかな。
でも、niftyのリモートwebdavドライブは、きちんと繋がるなあ?
2008年12月14日日曜日
自宅のサーバー
家は、光でNTTから貸与されたルーター付きモデムでインターネットに接続してます。
PR-200NEというやつです。
で、これでインターネットに自宅サーバを公開して(といっても誰にも言わない)、職場で使うファイルサーバ化計画を考えて、この土日に設定しました。
ちょっと電気代がもったいないですが、古いセレロンの消費電力の少ないパソコンがあったのでこれを使うことにしました。
設定をメモしておきます。
この3枚の画像はPR-200NEの公開設定です。
で、持っているケータイで、ウェブサーバにアクセスしてログを確かめます。
/var/log/apache2/access/logの内容です。
123.108.237.** - - [14/Dec/2008:15:23:24 +0900] "GET / HTTP/1.1" 200 164 "-" "SoftBank/1.0/810T/TJ001 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1"
で、まあ、ケータイはdhcpになってますが、こんなログですね。
で、webdavは職場と同じです。
便利なものです(^_^)v
Webdavとネットワークドライブ
apache2+webdav で、認証なしで運用すると、ネットワークドライブに割り当てて運用すると、ローカルドライブそっくりに読み書きできるので便利です。
しかし、basic認証にして、ネットワークドライブに割り当てて運用すると、ms系のアプリは良いんですが、その他のアプリは、ローカルドライブ並の運用はできません。
で、ちょっとネットで調べたんですが、
http://web.nicc.edu/howto/Computer/RemoteAccess/NetDrive.html
http://www.filecloud.com/files/file.php?user_file_id=67393
http://www.rsync.net/resources/howto/windows_map.html
のnetdrive.exe で、接続して割り当てると本当に便利ですね。
MSのネットワークドライブ割り当てよりも、cacheを使っているので、動作が速いです。
しかし、basic認証にして、ネットワークドライブに割り当てて運用すると、ms系のアプリは良いんですが、その他のアプリは、ローカルドライブ並の運用はできません。
で、ちょっとネットで調べたんですが、
http://web.nicc.edu/howto/Computer/RemoteAccess/NetDrive.html
http://www.filecloud.com/files/file.php?user_file_id=67393
http://www.rsync.net/resources/howto/windows_map.html
のnetdrive.exe で、接続して割り当てると本当に便利ですね。
MSのネットワークドライブ割り当てよりも、cacheを使っているので、動作が速いです。
2008年12月13日土曜日
apache2 webdav +debian etch
職場のウェブサーバを個人業務用ファイルサーバにも一役買わせてますが、使い勝手が悪いので、web davでアクセスできるように変えました。こうしておけば、80番ポートだけで、仮想ドライブみたいに使えてもっと便利です。自宅のコンピュータよりも職場のサーバのほうが信頼性が高いし(レイド5)、無停電電源装置はついているのです。
ところで設定でドツボにはまった箇所があります。
Alias /webdav/ /home/webdav/
<Directory "/home/webdav/">
Allow from all
AuthType Basic
AuthName "WebDav Auth"
AuthUserFile "/etc/webdav/.webdavpasswd"
Require valid-user
DAV on
Require valid-user
<Directory >
と、/etc/apache2/site-avairable/default
を変えましたが、認証を受け付けません。(^_^;)
いろいろ調べた結果、
Alias /webdav/ /home/webdav/
<Directory "/home/webdav/">
の部分を
Alias /webdav /home/webdav
<Directory "/home/webdav">
と、「フォルダ終了の/を書かない」ことで、認証できるようになりました。もちろんディレクトリは架空のものです
ところで設定でドツボにはまった箇所があります。
Alias /webdav/ /home/webdav/
Allow from all
AuthType Basic
AuthName "WebDav Auth"
AuthUserFile "/etc/webdav/.webdavpasswd"
Require valid-user
DAV on
と、/etc/apache2/site-avairable/default
を変えましたが、認証を受け付けません。(^_^;)
いろいろ調べた結果、
Alias /webdav/ /home/webdav/
<Directory "/home/webdav/">
Alias /webdav /home/webdav
2008年12月6日土曜日
2008年11月10日月曜日
第4問 解答例
第4問(6点)の解答例です
#include<stdio.h>
#include<math.h>
int getr(char*);
int getg(char*);
int getb(char*);int main(void){
char a[8];
char cl[][8]={"black","blue","lime","aquq","red","fuchsia","yellow","white"};int r,g,b,clr[8],clg[8],clb[8],i,clnum;
float dk2, min;
clr[0]=0;clr[1]=0;clr[2]=0;clr[3]=0;clr[4]=255;clr[5]=255;clr[6]=255;clr[7]=255;
clg[0]=0;clg[1]=0;clg[2]=255;clg[3]=255;clg[4]=0;clg[5]=0;clg[6]=255;clg[7]=255;
clb[0]=0;clb[1]=255;clb[2]=0;clb[3]=255;clb[4]=0;clb[5]=255;clb[6]=0;clb[7]=255;while(scanf("%s",&a),a[0]!='0'){r=getr(a);g=getg(a);b=getb(a);min=sqrt(pow(r-clr[7],2)+pow(g-clg[7],2)+pow(b-clb[7],2));
clnum=7;
for(i=6;i>=0;i--){
dk2=sqrt(pow(r-clr[i],2)+pow(g-clg[i],2)+pow(b-clb[i],2));
if(dk2<=min){min=dk2;clnum=i;};}
printf("カラーは %s\n",cl[clnum]);}
return 0;
}
int getr(char a[]){
int i,j;
if(a[1]>='0' && a[1]<='9')
i=a[1]-'0';
else
i=a[1]-'a'+10;
if(a[2]>='0' && a[2]<='9')
j=a[2]-'0'; else j=a[2]-'a'+10;
return (i*16+j);
}
int getg(char a[]){
int i,j;
if(a[3]>='0' && a[3]<='9')
i=a[3]-'0';
else
i=a[3]-'a'+10;
if(a[4]>='0' && a[4]<='9')
j=a[4]-'0';
else j=a[4]-'a'+10;
return (i*16+j);
}
int getb(char a[]){
int i,j;
if(a[5]>='0' && a[5]<='9')
i=a[5]-'0';
else
i=a[5]-'a'+10;
if(a[6]>='0' && a[6]<='9')
j=a[6]-'0';
else j=a[6]-'a'+10;
return (i*16+j);
#include<stdio.h>
#include<math.h>
int getr(char*);
int getg(char*);
int getb(char*);int main(void){
char a[8];
char cl[][8]={"black","blue","lime","aquq","red","fuchsia","yellow","white"};int r,g,b,clr[8],clg[8],clb[8],i,clnum;
float dk2, min;
clr[0]=0;clr[1]=0;clr[2]=0;clr[3]=0;clr[4]=255;clr[5]=255;clr[6]=255;clr[7]=255;
clg[0]=0;clg[1]=0;clg[2]=255;clg[3]=255;clg[4]=0;clg[5]=0;clg[6]=255;clg[7]=255;
clb[0]=0;clb[1]=255;clb[2]=0;clb[3]=255;clb[4]=0;clb[5]=255;clb[6]=0;clb[7]=255;while(scanf("%s",&a),a[0]!='0'){r=getr(a);g=getg(a);b=getb(a);min=sqrt(pow(r-clr[7],2)+pow(g-clg[7],2)+pow(b-clb[7],2));
clnum=7;
for(i=6;i>=0;i--){
dk2=sqrt(pow(r-clr[i],2)+pow(g-clg[i],2)+pow(b-clb[i],2));
if(dk2<=min){min=dk2;clnum=i;};}
printf("カラーは %s\n",cl[clnum]);}
return 0;
}
int getr(char a[]){
int i,j;
if(a[1]>='0' && a[1]<='9')
i=a[1]-'0';
else
i=a[1]-'a'+10;
if(a[2]>='0' && a[2]<='9')
j=a[2]-'0'; else j=a[2]-'a'+10;
return (i*16+j);
}
int getg(char a[]){
int i,j;
if(a[3]>='0' && a[3]<='9')
i=a[3]-'0';
else
i=a[3]-'a'+10;
if(a[4]>='0' && a[4]<='9')
j=a[4]-'0';
else j=a[4]-'a'+10;
return (i*16+j);
}
int getb(char a[]){
int i,j;
if(a[5]>='0' && a[5]<='9')
i=a[5]-'0';
else
i=a[5]-'a'+10;
if(a[6]>='0' && a[6]<='9')
j=a[6]-'0';
else j=a[6]-'a'+10;
return (i*16+j);
2008年11月8日土曜日
第5問 解答例
第5問(8点)です。
第4問は論理バグが取れないので、ちょっと止めました。
#include<stdio.h>
#include<math.h>
#define pi 3.141592
#define R 6378.1
int main(void){
float a,b,c,d,e;
float A,B,C,D;
while(scanf("%f %f %f %f",&a,&b,&c,&d),!(a==-1 && b==-1 && c==-1 && d==-1)){
A=a*pi/180;B=b*pi/180;C=c*pi/180;D=d*pi/180;
e=pow(cos(C)*cos(D)-cos(A)*cos(B),2) + pow(cos(C)*sin(D)-cos(A)*sin(B),2)+pow(sin(C)-sin(A),2);
printf("%0.0lf\n",R*acos(1-0.5*e));
}
return 0;
}
これは8点ですが、球面座標がわかってれば非常に易しい。
第4問は論理バグが取れないので、ちょっと止めました。
#include<stdio.h>
#include<math.h>
#define pi 3.141592
#define R 6378.1
int main(void){
float a,b,c,d,e;
float A,B,C,D;
while(scanf("%f %f %f %f",&a,&b,&c,&d),!(a==-1 && b==-1 && c==-1 && d==-1)){
A=a*pi/180;B=b*pi/180;C=c*pi/180;D=d*pi/180;
e=pow(cos(C)*cos(D)-cos(A)*cos(B),2) + pow(cos(C)*sin(D)-cos(A)*sin(B),2)+pow(sin(C)-sin(A),2);
printf("%0.0lf\n",R*acos(1-0.5*e));
}
return 0;
}
これは8点ですが、球面座標がわかってれば非常に易しい。
2008年11月7日金曜日
第3問 解答例
ans3.c(6点) の内容です。
入力値には、1000000まで入れてエラーが起きないようにプログラム構造を作る必要がある。
#include <stdio.h>
void main(void){
long n;int m,i,count=0;
int p[20];
for(i=0;i<20;i++)p[i]=0; m=n-(n/4)*4; n=n/4;
for( i=count-1;i>=0;i--) printf("%d",p[i]);
for(i=0;i<20;i++)p[i]=0;
putchar('\n');
count=0;
}
}
入力値には、1000000まで入れてエラーが起きないようにプログラム構造を作る必要がある。
#include
void main(void){
long n;int m,i,count=0;
int p[20];
for(i=0;i<20;i++)p[i]=0; m=n-(n/4)*4; n=n/4;
for( i=count-1;i>=0;i--) printf("%d",p[i]);
for(i=0;i<20;i++)p[i]=0;
putchar('\n');
count=0;
}
}
2008年11月6日木曜日
第2問 解答例
回答例
第1問と同じ点数なのに、随分難しくなっている(^_^;)
2.c(6点) の内容
#include <stdio.h>
#include <string.h>
void main(void){
char game[101],nextgame[101] ;
int i , At= 0 , Bt=0 ;
scanf("%s",&game);
do{
scanf("%s",&nextgame);
for(i=0;game[i]!='\0';i++){
if(i>0) if(game[i]=='A') At++; else Bt++; }
if(nextgame[0]=='A') At++;
if(nextgame[0]=='B') Bt++;
if(nextgame[0]=='0' && game[i-1]=='A')At++;
if(nextgame[0]=='0' && game[i-1]=='B')Bt++;
printf("%d %d\n",At,Bt);
At = 0; Bt=0;
strcpy(game , nextgame);
}while(nextgame[0]!='0');
}
第1問と同じ点数なのに、随分難しくなっている(^_^;)
2.c(6点) の内容
#include
#include
void main(void){
char game[101],nextgame[101] ;
int i , At= 0 , Bt=0 ;
scanf("%s",&game);
do{
scanf("%s",&nextgame);
for(i=0;game[i]!='\0';i++){
if(i>0) if(game[i]=='A') At++; else Bt++; }
if(nextgame[0]=='A') At++;
if(nextgame[0]=='B') Bt++;
if(nextgame[0]=='0' && game[i-1]=='A')At++;
if(nextgame[0]=='0' && game[i-1]=='B')Bt++;
printf("%d %d\n",At,Bt);
At = 0; Bt=0;
strcpy(game , nextgame);
}while(nextgame[0]!='0');
}
登録:
投稿 (Atom)