5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

いろんな言語で宿題スレ 第三編

1 :デフォルトの名無しさん:2009/12/22(火) 09:57:19
第二編も512Kbyte越えで終了しました。
前スレで未解決な課題は順次このスレにコピーします。

759 :デフォルトの名無しさん:2010/02/25(木) 21:27:28
>>755
% Prolog 5/7 はうっかりミスということにして。bignumの必要あり。

'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(_分子,_分母) :-
  '1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(97,_分
子,_分母).


'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(97,97,99) :- !.
'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(N,_分子,_分母) :-
  M is N + 2,
  '1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(M,_分子2,_分母2),
  _分子1 is ( N * _分母2 + M * _分子2),
  _分母1 is M * _分母2,
  約分(_分子1,_分母1,_分子,_分母),!.

760 :デフォルトの名無しさん:2010/02/25(木) 21:31:11
>>759 (>>755) 訂正
% Prolog 初期値が違っていた(97->1)のと改行位置を直してなかった。

'1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(_分子,_分母) :-
  '1/3 + 3/5 + 7/9 + 9/11 + 11/13+..........+95/97 + 97/99を合計する'(1,_分子,_分母).

761 :デフォルトの名無しさん:2010/02/25(木) 22:00:56
>>758
% Prolog その他社員情報は別述語を定義するべきなので割愛。

社員異動情報(_社員異動情報) :-
  findall(ID,社員(ID,_,_),L),
  findall([ID,_名前,_現在の課ID,_異動情報],(member(ID,L),社員異動情報(ID,_名前,_現在の課ID,_異動情報)),_社員異動情報).

社員異動情報(ID,_名前,_現在の課ID,_異動情報) :-
  社員(ID,_名前,_現在の課ID),
  findall([_異動番号,_課ID],異動歴(ID,_異動番号,_課ID),L),
  sort(L,_異動情報),!.


762 :デフォルトの名無しさん:2010/02/27(土) 00:34:17
>>755
使用言語:J
5/7はあるものとして。

+/(}:%}.)>:+:i.50
45.1245


有理数を使った場合。JではA/BをArBと表記する。
また、数値の末尾にxをつけると有理数リテラルになる。

+/(}:%}.)>:+:i.50x
49157712611924558897925120243494707766897r1089380862964257455695840764614254743075

763 :デフォルトの名無しさん:2010/02/27(土) 02:01:03
>>755
使用言語:maxima
5/7はあるものとして。

(%i18) sum((i*2+1)/(i*2+3),i,0,48);
49157712611924558897925120243494707766897
-----------------------------------------
1089380862964257455695840764614254743075

764 :デフォルトの名無しさん:2010/02/27(土) 02:33:34
>>755
使用言語:Clojure
5/7はあるものとして。

user=> (reduce + (map #(/ % (+ % 2)) (range 1 98 2)))
49157712611924558897925120243494707766897/1089380862964257455695840764614254743075

最初、他の言語での結果と違う結果になった。range の範囲を間違えていた。
下のようになる。
user=> (range 1 5)
(1 2 3 4)

765 :デフォルトの名無しさん:2010/02/27(土) 07:34:30
>>755
使用言語:R
5/7はあるものとして。

> a<-seq(1,97,2)
> cat(sum(a/(a+2)))
45.12445

766 :デフォルトの名無しさん:2010/02/27(土) 19:31:50
http://pc12.2ch.net/test/read.cgi/tech/1248012902/923
# キーボードから5人分の点数を入力して、合計、平均、最高点、最低点を
# 表示するプログラムを作成してくださいというものです。
# 今は途中で終わっています
# http://ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/935.java
#
# お願いしますm(_ _)m


767 :デフォルトの名無しさん:2010/02/28(日) 12:33:05
% Prologの苦手とする問題でしたので採用しました。
http://pc11.2ch.net/test/read.cgi/db/1252492296/577
# アップデータ文を使う練習問題を解いていて、どうしてもわからなくなりました。
# 一つのテーブルないで、ある行(A)を参照して、他の行(B)にその値をいれたいです。
# 簡単にかくと
# A B
# 1 1
# 2 1
# 3 1
# 4 1
# というところを
#
# A B
# 1 1
# 2 2
# 3 3
# 4 4
#
# としたいのです。
# アップデート文を一つ使って、一行分変える事はできるのですが、
# 全部で100行変えたい場合は、今のままだとSQL文を100回使わないと
# 変えられません。

768 :デフォルトの名無しさん:2010/02/28(日) 15:38:27
>>767
% Prolog では節の出現位置に意味があるため定義された順序は変えられない。
% 行位置を指定してretract/assertをすることもできない。

update767 :- retract(テーブル(A,B)),update767_2(A,B),fail.
update767.

update767_2(A,B) :- A>=1,A=<100,assertz(A,A).
update767_2(A,B) :- \+((A>=1,A=<100)),assertz(A,B).

769 :デフォルトの名無しさん:2010/02/28(日) 18:15:37
>>766
% Prolog

キーボードから5人分の点数を入力して、合計、平均、最高点、最低点を表示する :-
  キーボードから5人分の点数を入力して(_点数ならび),
  合計、平均、最高点、最低点を表示する(_点数ならび).

キーボードから5人分の点数を入力して(_点数ならび) :-
  write('5人分の点数をカンマで区切って一行で入力してください : '),
  get_line(_入力行),
  split(_入力行,[','],_点数ならび).

合計、平均、最高点、最低点を表示する(_点数ならび) :-
  findavg(_点数ならび,_平均),
  findmax(_点数ならび,_最高点),
  findmin(_点数ならび,_最低点),
  write_formatted('平均=%t点,最高点=%t点,最低点=%t点\n',[_平均,_最高点,_最低点]).


770 :デフォルトの名無しさん:2010/03/02(火) 21:48:06
http://pc12.2ch.net/test/read.cgi/tech/1263824755/806
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 成績を表示するプログラムを作成せよ。処理する人数は40人であるとする。以下の様な仕様である
# 1番の成績を入力せよ
# 85
# 1番は85点です
# 2番の成績を入力せよ
# 100
# 2番は100点です

771 :デフォルトの名無しさん:2010/03/02(火) 21:48:50
http://pc12.2ch.net/test/read.cgi/tech/1263824755/807
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 角度0から90°,10°刻みのsin,cos,tanの表を作成せよ

772 :デフォルトの名無しさん:2010/03/03(水) 05:49:36
>>742
% Prolog

現在、都市に住む人びとは、真の暗闇、真の静寂を知らない(_現在,_人びと,_都市,_真の闇,_真の静寂) :-
  現在(_人びと,_現在),
  都市に住む(_人びと,_都市),
  人びと(_人びと),
  知らない(_人びと,_真の暗闇),
  知らない(_人びと,_真の静寂),
  真の静寂(_真の静寂),
  真の暗闇(_真の暗闇).

真の暗闇(_真の暗闇) :- 暗闇(_真の暗闇),真の(_真の暗闇).

真の静寂(_真の静寂) :- 静寂(_真の静寂),真の(_真の静寂).

現在(_人びと,_現在) :- 現在(_現在),生きる(_人びと,_現在).

都市に住む(_人びと,_都市) :- 都市(_都市).

773 :デフォルトの名無しさん:2010/03/03(水) 06:05:06
>>772 訂正
% Prolog 引数に現れる _真の闇 は _真の暗闇 の間違いです。

774 :デフォルトの名無しさん:2010/03/03(水) 06:18:38
>>772
% Prolog 書き直しました。一部目標の順序も変更。

現在、都市に住む人びとは、真の暗闇、真の静寂を知らない(_現在,_人びと,_都市,_真の暗闇,_真の静寂) :-
  現在(_人びと,_現在),
  都市に住む(_人びと,_都市),
  人びと(_人びと),
  真の暗闇(_真の暗闇),
  知らない(_人びと,_真の暗闇),
  真の静寂(_真の静寂),
  知らない(_人びと,_真の静寂).

真の暗闇(_真の暗闇) :- 暗闇(_真の暗闇),真の(_真の暗闇).

真の静寂(_真の静寂) :- 静寂(_真の静寂),真の(_真の静寂).

現在(_人びと,_現在) :- 現在(_現在),生きる(_人びと,_現在).

都市に住む(_人びと,_都市) :- 都市(_都市).

775 :デフォルトの名無しさん:2010/03/03(水) 09:02:36
>>774

> ... 真の(_真の暗闇),

のところだけど、
... 真の(暗闇,_真の暗闇), ...

であるべきでは?


776 :デフォルトの名無しさん:2010/03/03(水) 11:17:13
>>771
% Prolog

'角度0から90°,10°刻みのsin,cos,tanの表を作成する' :-
    member(F,[sin,cos,tan]),
    functor(_式,F,1),
    arg(1,_式,R),
    for(0,N,9),
    N2 is N * 10,
    R is pi * N2 / 180,
    X is _式,
    assertz('角度0から90°,10°刻みのsin,cos,tanの表'(F,N2,X)),
    N = 9,
    fail.
'角度0から90°,10°刻みのsin,cos,tanの表を作成する'.

777 :デフォルトの名無しさん:2010/03/03(水) 11:28:53
>>770
% Prolog

成績を表示する :-
    成績を登録する,
    登録された成績を表示する.

成績を登録する :-
    処理する人数は40人であるとする.

処理する人数は40人であるとする :-
    for(1,N,40),
    write_formatted('%t番の成績を入力せよ\n',[N]),
    get_integer(_点数),
    assertz(成績(N,_点数)),
    write_formatted('%t番の成績として%点を登録しました\n',[N,_点数]),
    N = 40,!.

登録された成績を表示する :-
    成績(N,_点数),
    write_formatted('%t番目の成績は%t点です\n',[N,_点数]),
    fail.
登録された成績を表示する.


778 :デフォルトの名無しさん:2010/03/03(水) 11:41:33
http://pc12.2ch.net/test/read.cgi/tech/1266565626/8
# 1,1,4
# 1,2,7
# 1,3,2
#
# という(X,Y,値)というメッシュ(グリッド)データがあって
# 例えば座標が1ごとに値があるのを、5毎にして今までの値を平均して入れるというのを組みたいのですが
# どうすればよいでしょうか?

779 :デフォルトの名無しさん:2010/03/03(水) 13:30:16
>>778
% Prolog

要素変換([],_,[]) :- !.
グリッド要素変換([[X,Y,V],[X2,Y2,V2]|R1],Sum,[[X,Y1,Avg]R2]) :-
   \+(X=X2),
   Y1 is Y // 5,
   M is Y mod 5,
   Avg is (Sum + V) / M,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,[[X,Y1,Avg]|R2]) :-
   0 is Y mod 5,
   Y1 is Y // 5,
   Avg is (Sum + V) / 5,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,L) :-
   Sum2 is Sum + V,
   グリッド要素変換([[X,Y2,V2]|R1],Sum2,L),!.

780 :デフォルトの名無しさん:2010/03/03(水) 13:32:02
>>779 (>>778)
% Prolog 第一節に文字置換を書け損ねた。

グリッド要素変換([],_,[]) :- !.
グリッド要素変換([[X,Y,V],[X2,Y2,V2]|R1],Sum,[[X,Y1,Avg]R2]) :-
   \+(X=X2),
   Y1 is Y // 5,
   M is Y mod 5,
   Avg is (Sum + V) / M,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,[[X,Y1,Avg]|R2]) :-
   0 is Y mod 5,
   Y1 is Y // 5,
   Avg is (Sum + V) / 5,
   グリッド要素変換([[X2,Y2,V2]|R1],0,R2),!.
グリッド要素変換([[X,Y,V],[X,Y2,V2]|R1],Sum,L) :-
   Sum2 is Sum + V,
   グリッド要素変換([[X,Y2,V2]|R1],Sum2,L),!.


781 :デフォルトの名無しさん:2010/03/03(水) 13:35:44
書け損ねた -> 掛け損ねた w

782 :デフォルトの名無しさん:2010/03/03(水) 15:48:42
http://pc11.2ch.net/test/read.cgi/db/1252492296/594
#(問)
# ID | DATE     | DATA
# --+----------+-----
# 1 | 2007-11-11 | aaa
# 2 | 2007-11-11 | bbb
# 1 | 2007-11-10 | ccc
# 3 | 2007-11-12 | ddd
# 3 | 2007-11-11 | eee
# 4 | 2007-11-10 | fff
# 1 | 2007-11-12 | ggg
#
# このようなテーブルから、各idに対して最新の5件だけ抽出しなさい

783 :デフォルトの名無しさん:2010/03/03(水) 15:49:41
>>782
% Prolog

各idに対して最新の5件だけ抽出する(_テーブル名,L) :-
   functor(Q,_テーブル名,3),
   setof(ID,Q,L1),
   整列(L1,L2),
   findall(L3,(member(ID,L1),idに対して最新の5件だけ抽出する(ID,Q,L3)),L).

idに対して最新の5件だけ抽出する(ID,Q,L) :-
   arg(1,Q,ID),
   findall(L1,(call(Q),Q=..[_|L1]),L2),
   整列(L2,L3),
   length(L,5),
   最新の5件だけ抽出する(L3,L).

最新の5件だけ抽出する(L3,L) :-
   append(_,L,L3),!.
最新の5件だけ抽出する(L,L) :- !.

784 :デフォルトの名無しさん:2010/03/03(水) 18:41:58
>>782
% Prolog

各idに対して最新の5件だけ抽出する(_テーブル名,L) :-
   functor(Q,_テーブル名,3),
   重複を排除したidならびの抽出(ID,Q,L1),
   整列(L1,L2),
   findall(L3,(member(ID,L1),idに対して最新の5件だけ抽出する(ID,Q,L3)),L).

idに対して最新の5件だけ抽出する(ID,Q,L) :-
   目標Qの第一引数はID(ID,Q),
   idに対して組ならびを抽出する(Q,L3),
   最新の5件だけ抽出する(L3,L).

idに対して組ならびを抽出する(Q,L3) :-
   findall(L1,(call(Q),引数部分だけ抽出する(Q,L1)),L2),
   整列(L2,L3),!.

重複を排除したidならびの抽出(ID,Q,L1) :- setof(ID,Q,L1).

目標Qの第一引数はID(ID,Q) :- arg(1,Q,ID),!.

引数部分だけ抽出する(Q,L1) :- Q =.. [_|L1].

最新の5件だけ抽出する(L3,L) :-
   length(L,5),
   append(_,L,L3),!.
最新の5件だけ抽出する(L,L) :- !.

785 :デフォルトの名無しさん:2010/03/03(水) 20:38:02
http://pc12.2ch.net/test/read.cgi/tech/1263824755/826
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 任意の整数から整数までの合計を計算するプログラムを作成せよ。ただし、必ず、(始めに入れた数字)<(最後に入れた数字)となるように数値を入力するものとする。
# 始めの数を入力せよ
# 156
# 終わりの数を入力せよ
# 328
# 156から328までの合計は41866です。
#
# 上の問題では(始めに入れた数字)<(最後に入れた数字)としたが、
# これを、(始めに入れた数字)≧(最後に入れた数字)と入力しても合計を計算できるようなプログラムも作成せよ


786 :デフォルトの名無しさん:2010/03/03(水) 20:40:12
>>785
% Prolog

任意の整数から整数までの合計を計算する(_開始整数,_終了整数,_合計) :-
   findsum(N,for(_開始整数,N,_終了整数),_合計).

787 :デフォルトの名無しさん:2010/03/03(水) 20:42:51
http://pc12.2ch.net/test/read.cgi/tech/1248012902/967
# 【 課題 】
# ○県、市別に男女の人数を集計するプログラムを作成せよ。
#
# 千葉県 柏市 男
# 千葉県 松戸市 男
# 埼玉県 さいたま市 女
# 千葉県 柏市 男
# 埼玉県 越谷市 男
# 千葉県 松戸市 男
# 埼玉県 岩槻市 女
# 千葉県 柏市 女
# 埼玉県 さいたま市 女
#
# [実行例]
# 千葉県 柏市:男2人女1人
# 千葉県 松戸市:男1人0人
# 埼玉県 さいたま市:男0人女2人
# (以下略)…
#


788 :デフォルトの名無しさん:2010/03/03(水) 21:08:09
>>787
% Prolog

県、市別に男女の人数を集計する(_ファイル,_集計ならび) :-
   get_split_lines(_ファイル,[' '],L1),
   整列(L1,L2),
   県、市別に男女の人数を集計する(0,L2,_集計ならび).

県、市別に男女の人数を集計する(N,[[_県,_市,_性別]],[[_県,_市,_性別,N2]]) :-
   N2 is N + 1,!.
県、市別に男女の人数を集計する(N,[[_県,_市,_性別],[_県,_市,_性別]|R1],R2) :-
   N2 is N + 1,
   県、市別に男女の人数を集計する(N2,[[_県,_市,_性別]|R1],R2),!.
県、市別に男女の人数を集計する(N,[[_県,_市,_性別]|R1],[[_県,_市,_性別,N2]|R2) :-
   N2 is N + 1,
   県、市別に男女の人数を集計する(0,R1,R2),!.


789 :デフォルトの名無しさん:2010/03/04(木) 04:59:50
http://pc12.2ch.net/test/read.cgi/tech/1263824755/847
# [1] 授業単元:C++
# [2] 問題文(含コード&リンク):
# 入力した整数の桁を数えるプログラムを作成せよ
# 整数値を入力せよ
# 5659693
# 7桁である。


790 :デフォルトの名無しさん:2010/03/04(木) 05:01:37
http://pc12.2ch.net/test/read.cgi/tech/1263824755/851
# [1] 授業単元:知識情報基礎実験
# [2] 問題文(含コード&リンク):
# 乱数を希望数取得し、それをバブルソート、挿入ソート、クイックソート、ヒーブソートの各種を用いてソートせよ(4個のプログラムを作成する)。
# また、それぞれ比較回数、実行時間を計測せよ。

791 :デフォルトの名無しさん:2010/03/04(木) 05:31:04
>>789
% Prolog

入力した整数の桁を数える :-
   催促付き整数入力('整数値を入力せよ\n',N),
   入力した整数の桁を数える(N,_桁),
   write_formatted('%t桁である。\n',[_桁]).

入力した整数の桁を数える(N,1) :- 0 is N // 10,!.
入力した整数の桁を数える(N,X) :-
   M is N // 10,
   入力した整数の桁を数える(M,Y),
   X is Y + 1.


792 :デフォルトの名無しさん:2010/03/04(木) 07:27:27
>>790
% Prolog クイックソートのみ。

クイックソート(_対象ならび,_整列された値ならび) :-
   第一要素を分割値とする(_対象ならび,_分割値,_残り対象ならび),
   分割値に対しての大小でならびを二分割する(_分割値,_残り対象ならび,_分割値より小さいかまたは等しい値ならび,_分割値より大きい値ならび),
   分割されたならびを部分的に整列する(_分割値より小さいかまたは等しい値ならび,_整列された分割値より小さいかまたは等しい値ならび),
   分割されたならびを部分的に整列する(_分割値より大きい値ならび,_整列された分割値より大きい値ならび),
   整列された二つのならびと分割値を結合する(_分割値,_整列された分割値より小さいかまたは等しい値ならび,_整列された分割値より大きい値ならび,_整列された値ならび).
クイックソート([],[]).

第一要素を分割値とする([_分割値|_残り対象ならび],_分割値,_残り対象ならび).

分割値に対しての大小でならびを二分割する(_,[],[],[]) :- !.
分割値に対しての大小でならびを二分割する(_分割値,[A|R1],[A|R2],R3) :-
   A @=< _分割値,
   分割値に対しての大小でならびを二分割する(_分割値,R1,R2,R3),!.
分割値に対しての大小でならびを二分割する(_分割値,[A|R1],R2,[A|R3]) :-
   A @> _分割値,
   分割値に対しての大小でならびを二分割する(_分割値,R1,R2,R3),!.

分割されたならびを部分的に整列する(_分割された値ならび,_整列された分割された値ならび) :-
   クイックソート(_分割された値ならび,_整列された分割された値ならび),!.

整列された二つのならびと分割値を結合する(_分割値,_整列された分割値より小さいかまたは等しい値ならび,_整列された分割値より大きい値ならび,_整列された値ならび) :-
   append(_整列された分割値より小さいかまたは等しい値ならび,[_分割値|_整列された分割値より大きい値ならび],_整列された値ならび),!.

793 :デフォルトの名無しさん:2010/03/04(木) 17:55:35
>>776 (>>771) 訂正
% Prolog tan(pi/2) は除外が適切か。

'角度0から90°,10°刻みのsin,cos,tanの表を作成する' :-
    member(F,[sin,cos,tan]),
    functor(_式,F,1),
    arg(1,_式,R),
    for(0,N,9),
    \((N=9,F=tan)),
    N2 is N * 10,
    R is pi * N2 / 180,
    X is _式,
    assertz('角度0から90°,10°刻みのsin,cos,tanの表'(F,N2,X)),
    N = 9,
    fail.
'角度0から90°,10°刻みのsin,cos,tanの表を作成する'.

794 :デフォルトの名無しさん:2010/03/04(木) 17:58:44
>>793 さらに訂正

   \((N=9,F=tan)), -> \+((N=9,F=tan)),

795 :デフォルトの名無しさん:2010/03/05(金) 11:44:54
http://pc11.2ch.net/test/read.cgi/db/1252492296/599
# 以下のSQLで最新日の2000円以上の売上があった商品を抽出しているんですが、
# SELECT * FROM SALES WHERE uriage >= 2000 AND date = (select max(date) from SALES)
# 「その商品の前回売上があった日の売上額」と「前回の売上と比べてどれだけ増えたのかの増加率」
# を出したい場合どうしたらいいでしょう?
#
# 商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率
# 3 | 1267714800 | 2500 | ????? | ?????
# 4 | 1267714800 | 2800 | ????? | ?????
#
# [日付の形式はunixtimeで、データ登録の際は日付だけ変更させ、時間と秒は常に統一させています]


796 :デフォルトの名無しさん:2010/03/05(金) 18:34:03
>>795
% Prolog

前回売上との比較売上表(_年/_月/_日) :-
    setof(_商品ID,(売上(_商品ID,_日付,_),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上のあった商品IDならび),
    write('商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率\n'),
    member(_商品ID2,_売上のあった商品IDならび),
    当日の売上金額計(_商品ID2,_年/_月/_日,_売上金額計),
    前回売上があった日(_商品ID2,_日付,_前回売上があった日),
    前回売上があった日の売上金額計(_商品ID2,_前回売上があった日,_前回売上があった日の売上金額計),
    売上行表示(_商品ID2,_年/_月/_日,_売上金額計,_前回売上があった日の売上金額計),
    fail.
前回売上との比較売上表(_,_,_).

前回売上があった日(_商品ID,_日付,_前回売上があった日) :-
    localtime(_日付,_年1,_月1,_日1,_,_,_,_),
    findmax(_年2/_月2/_日2,(売上(_商品ID,_日付2,_),localtime(_日付2,_年2,_月2,_日2,_,_,_,_),_年1/_月1,_日1 @> _年2/_月2/_日2),_前回売上があった日).

前回売上があった日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付2,_売上金額),localtime(_日付2,_年,_月,_日,_,_,_,_)),_売上金額計).

当日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付,_売上金額),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上金額計).

売上行表示(_商品ID,_年/_月/_日,_売上金額計,0.0) :-
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  | -------------- | ----\n',[_商品ID2,_年/_月/_日,_売上金額計]),!.
売上行表示(_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計) :-
    _売上増加率 is _売上金額計 / _前回売上のあった日の売上金額計,
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  |  %4.1f\n',[_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計,_売上増加率]),!.

797 :デフォルトの名無しさん:2010/03/05(金) 18:44:05
>>796 (>>795) 訂正
% Prolog 最初の5行が微妙に変わっています。

前回売上との比較売上表(_年/_月/_日) :-
    findall(_商品ID,(売上(_商品ID,_日付,_),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上のあった商品IDならび),
    sort(_売上のあった商品IDならび,_売上のあった商品IDならび2),
    write('商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率\n'),
    member(_商品ID2,_売上のあった商品IDならび2),
    当日の売上金額計(_商品ID2,_年/_月/_日,_売上金額計),
    前回売上があった日(_商品ID2,_日付,_前回売上があった日),
    前回売上があった日の売上金額計(_商品ID2,_前回売上があった日,_前回売上があった日の売上金額計),
    売上行表示(_商品ID2,_年/_月/_日,_売上金額計,_前回売上があった日の売上金額計),
    fail.
前回売上との比較売上表(_,_,_).

前回売上があった日(_商品ID,_日付,_前回売上があった日) :-
    localtime(_日付,_年1,_月1,_日1,_,_,_,_),
    findmax(_年2/_月2/_日2,(売上(_商品ID,_日付2,_),localtime(_日付2,_年2,_月2,_日2,_,_,_,_),_年1/_月1,_日1 @> _年2/_月2/_日2),_前回売上があった日).

前回売上があった日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付2,_売上金額),localtime(_日付2,_年,_月,_日,_,_,_,_)),_売上金額計).

当日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-
    findsum(_売上金額,(売上(_商品ID,_日付,_売上金額),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上金額計).

売上行表示(_商品ID,_年/_月/_日,_売上金額計,0.0) :-
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  | -------------- | ----\n',[_商品ID2,_年/_月/_日,_売上金額計]),!.
売上行表示(_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計) :-
    _売上増加率 is _売上金額計 / _前回売上のあった日の売上金額計,
    write_formatted('%14d |  %2d/%2d/%2d  |  %12.0f  |  %12.0f  |  %4.1f\n',[_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計,_売上増加率]),!.

798 :デフォルトの名無しさん:2010/03/05(金) 20:39:35
http://pc11.2ch.net/test/read.cgi/db/1252492296/602
# MYSQLを使っています。
# SELECT * FROM aaa WHERE id = ●
# この●の部分が複数ある場合、例えば 3,9,14,43,413,545のような場合に
# 一度に結果を取り出したいのですが、どういう風にかけばいいでしょうか?
# 他のテーブルにid_list = "3 9 14 43 413 545"
# のように入っていているのですが
# これをsplitしてid=3 id=9のようにして
# SELECT * FROM aaa WHERE id = ●を繰り返すコードにしてるですが
# 数増えたらとんでもないことになるじゃん・・・って気づきました。
#


799 :デフォルトの名無しさん:2010/03/05(金) 20:44:22
>>798
% Prolog

'SELECT * FROM aaa WHERE id = ●'(IdList,Id,Data) :-
    split(IdList,[' '],L),
    aaa(Id,Data),
    member(Id,L).



800 :デフォルトの名無しさん:2010/03/06(土) 02:42:00
// F#
// >>766

open System

let statistics() =
    let rec input n =
        printf "%d人目の点数を入力せよ:" n
        match Console.ReadLine() |> Int32.TryParse with
        | true, x -> x | _ -> input n
    let scores = [for i in 1 .. 5 -> input i]
    (List.sum scores, List.averageBy float scores, List.max scores, List.min scores)


// >>767

type Table = { A : int; B : int }

let update = List.map (fun t -> { t with B = t.A })

801 :デフォルトの名無しさん:2010/03/06(土) 02:45:54
// F#
// >>771

open System

let trigonometric() =
    printfn "deg    sin        cos        tan"
    [0 .. 10 .. 90] |> List.map (function
        | 90 -> (90, 1., 0., Double.NaN)
        | d -> let r = float d * Math.PI / 180. in (d, sin r, cos r, tan r))
    |> List.iter (fun (x, s, c, t) -> printfn "%3d %10.8g %10.8g %10.8g" x s c t)


// >>782

type Table = { ID : int; DATE : System.DateTime; DATA : string }

let latest5 tables =
    tables |> Seq.groupBy (fun t -> t.ID)
    |> Seq.map (snd >> Seq.toList >> List.sortBy (fun t -> t.DATE) >> List.rev >> Seq.truncate 5)
    |> Seq.concat

802 :デフォルトの名無しさん:2010/03/06(土) 02:46:34
なんだかPrologばっかりだな

転載してる人=Prologの人
なのかな?


803 :デフォルトの名無しさん:2010/03/06(土) 02:48:04
// F#
// >>785

open System

let sum() =
    let rec input msg =
        printfn "%sの数を入力せよ" msg
        match Console.ReadLine() |> Int32.TryParse with
        | true, x -> x | _ -> input msg
    let (a, b) = (input "初め", input "終わり")
    [min a b .. max a b] |> List.sum |> printfn "%dから%dまでの合計は%dです。" a b


// >>787

type Table = { Pref : string; City : string; Sex : string }

let count tables =
    tables |> Seq.groupBy (fun t -> (t.Pref, t.City))
    |> Seq.map (fun (address, ts) ->
        let cs = ts |> Seq.countBy (fun t -> t.Sex) |> Map.ofSeq
        let cs' = List.map (fun s -> (s, defaultArg (Map.tryFind s cs) 0)) ["男"; "女"]
        (address, cs'))

804 :デフォルトの名無しさん:2010/03/06(土) 05:20:24
>>785
使用言語:J

f=:dyad def '+/(x<.y)+i.>:|y-x'

156 f 328
41866
328 f 156
41866

805 :デフォルトの名無しさん:2010/03/06(土) 06:11:24
>>771
使用言語:J

a=:,.10 * i.10
b=:1r180p1 * a
c=:'deg';'sin';'cos';'tan'
c,:a;;/8j6":1 2 3 o./b
+---+--------+--------+--------+
|deg|sin |cos |tan |
+---+--------+--------+--------+
| 0 |0.000000|1.000000|0.000000|
|10 |0.173648|0.984808|0.176327|
|20 |0.342020|0.939693|0.363970|
|30 |0.500000|0.866025|0.577350|
|40 |0.642788|0.766044|0.839100|
|50 |0.766044|0.642788|1.191754|
|60 |0.866025|0.500000|1.732051|
|70 |0.939693|0.342020|2.747477|
|80 |0.984808|0.173648|5.671282|
|90 |1.000000|0.000000|********|
+---+--------+--------+--------+

806 :デフォルトの名無しさん:2010/03/06(土) 10:38:40
>>785
使用言語:R

> f<-function(a,b)sum(a:b)

> f(1,10)
[1] 55
> f(10,1)
[1] 55

807 :デフォルトの名無しさん:2010/03/06(土) 20:03:01
>>790
// F#

/// バブルソート
let bsort xs =
    let rec bsort' = function
        | [] -> [] | a::[] -> a::[]
        | a::b::rs when a > b -> b::bsort' (a::rs)
        | a::b::rs -> a::bsort' (b::rs)
    [for _ in 1 .. List.length xs - 1 -> bsort'] |> List.fold (fun x f -> f x) xs

/// 挿入ソート
let isort xs =
    let a = ResizeArray()
    xs |> List.iter (fun x ->
        match ResizeArray.tryFindIndex ((<) x) a with
        | Some(i) -> a.Insert(i, x)
        | None -> a.Add x)
    ResizeArray.toList a

/// クイックソート
let rec qsort = function
    | [] -> []
    | x::xs ->
        let (a, b) = List.partition ((>=) x) xs
        qsort a @ [x] @ qsort b

808 :デフォルトの名無しさん:2010/03/06(土) 20:04:18
>>790 続き
// F#

/// ヒープソート
let hsort xs =
    let a = List.toArray xs
    let swap i j = let t = a.[j] in a.[j] <- a.[i]; a.[i] <- t
    let rec toHeap i len =
        let (c1, c2) = (i * 2 + 1, i * 2 + 2)
        if c2 < len then
            toHeap c1 len; toHeap c2 len
            match List.maxBy (Array.get a) [i; c1; c2] with
            | m when m <> i -> swap i m; toHeap m len
            | _ -> ()
        elif c2 = len && a.[i] < a.[c1] then swap i c1
    for len = a.Length downto 2 do
        toHeap 0 len; swap 0 (len - 1)
    Array.toList a   

// 処理時間計測
let random = System.Random()
let xs = [for _ in 1 .. 1000 -> random.Next(1000)]
[bsort; isort; qsort; hsort] |> List.iter (fun f ->
    let watch = System.Diagnostics.Stopwatch.StartNew()
    f xs |> ignore
    watch.Stop()
    printfn "%O" watch.Elapsed)

501 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)