08/11/08 19:05:30
const n=10
type index=1..n;
var
a,b,c :array[index,index] of real;
i,j,k : index;
s :real
for i:=1 to n do
for j:=1 to n do
begin
s:=0;
for k:=1 to n do s:=s+a[i,k]*b[k,j]
c[i,j]:=s
end
801:デフォルトの名無しさん
08/11/10 16:45:07
関数の問題なんですがまったくわかりません。
キーボードで入力された2つの整数の最大公約数を求める関数(function)を作り、
その関数を用いて分数の約分を行うプログラムを作成せよ。
(例) 分子を5、分母を10と入力した場合、結果として1/2を表示する。
とのことです。
よろしくお願いします。
802:デフォルトの名無しさん
08/11/10 17:15:43
ユークリッドの互除法と再起呼び出し
803:デフォルトの名無しさん
08/11/10 17:22:57
>>87-
804:デフォルトの名無しさん
08/11/13 09:03:42
emacsでプログラム書いてるのですが、
error: invalid operands to `+'
error: incompatible type for argument 2 of `ace'
error: routine declaration
error: result of function `check' not assigned
↑のエラーの消し方がわからないのです
教えていただけないでしょうか
805:デフォルトの名無しさん
08/11/13 14:10:59
閏年計算のプログラムですが、変数iが初期化されないというエラーが出ました
Delphi6を使っています
var i:integer;
begin
if ((i mod 4=0) and (i mod 100<>0)) or (i mod 400=0)
then writeln('leap year')
else writeln('NOT leap year')
end.
どこが間違っているでしょうか?
806:デフォルトの名無しさん
08/11/13 15:07:37
初期化すれば?
807:デフォルトの名無しさん
08/11/27 13:51:47
どうやってプログラムしたらよいのか分かりません。
教えていただけないでしょうか。
配列の全要素のうち最小のものを配列の先頭の要素と入れ替える。 次に、配列
の 2 番目以降の要素のうち最小のものを配列の 2 番目の要素と入れ替える。
このような処理を配列の要素数から 1 引いた回数繰り返すと、すべての要素が
整列した状態となる。
このアルゴリズムに従って配列を整列させる(ソートする)プログラムを作成せ
よ。 ただし、「配列の n 番目以降の要素のうち最小のものを配列の n 番目の
要素と入れ替える」という処理をサブルーチンとして作成すること。
808:デフォルトの名無しさん
08/11/30 09:05:02
選択ソートで検索すればcで書かれたプログラムが沢山見つかるから
それ参考にすればいいんじゃないかな
特に難しい事はないはず
809:デフォルトの名無しさん
08/11/30 09:09:59
ていうか>>488で入れ替える所だけ関数にすればいいだけだね
810:デフォルトの名無しさん
08/11/30 13:19:38
プログラミング以前に問題文を理解してないのでは?
まずは手計算でやれるか試してみ
811:デフォルトの名無しさん
08/11/30 16:19:39
アドバイスありがとうございました。
クイックソートのプログラム自体、なかなか理解しづらくて困っています。
「以下に示す2つのプログラムを完成させよ」という宿題で行き詰っています。
どうかプログラム例を示していただけませんでしょうか。
「Ⅰ」
procedure quicksort( var ar: intarray; var i, j: integer );
var
{b1 はサブリスト sub1 の始めの要素番号、e1 は終わりの要素番号}
{b2 はサブリスト sub2 の始めの要素番号、e2 は終わりの要素番号}
b1, e1, b2, e2: integer;
begin
if i < j then
begin
b1 := i;
e2 := j;
divide( ar, b1, e1, b2, e2 );
quicksort( ar, b1, e1 );
quicksort( ar, b2, e2 );
end;
end;
812:デフォルトの名無しさん
08/11/30 16:20:16
「Ⅱ」
procedure divide( var A: intarray; var b1, e1, b2, e2: integer );
var
x, y, temp: integer;
begin
x := b1;
y := e2;
while x < y do
begin
if A[x] > A[x+1] then
begin
temp := A[x];
A[x] := A[x+1];
A[x+1] := temp;
x := x + 1;
end
else
begin
temp := A[y];
A[y] := A[x+1];
A[x+1] := temp;
y := y - 1;
end;
end;
e1 := x - 1;
b2 := y + 1;
end;
813:デフォルトの名無しさん
08/12/01 05:14:06
>>811-812をそのまま使って
program aaa(input, output);
const n=10 ;
type intarray= array[1..n] of integer ;
var A : intarray;
begin
Aにデータ入力
quicksort(A,1,n);
データ出力
end.
でいいんじゃないかな
814:デフォルトの名無しさん
08/12/08 03:22:22
A・B・Cの部屋があり、AとB、BとCは通路で繋がっている。
最初、ねずみはAの部屋にいるものとする。
その後、1秒ごとにねずみは隣の部屋に移るか同じ部屋にいる。
以下のような確率で動く時、ねずみが10秒後に、Aにいる確率を求めよ。
・Aにいるとき、Bに移る確率は二分の一
・Bにいるとき、A及びCに移る確率は共に三分の一
・Cにいるとき、Bに移る確率は三分の二
二分法のところの問題です。答えがなくてこまっています。
教えていただけないでしょうか。
815:デフォルトの名無しさん
08/12/08 19:08:32
10病後にAに居ない確率もとめれば
816:デフォルトの名無しさん
08/12/08 19:16:42
求めてる方法と違うだろうけど
3*3行列
1/2 , 1/3 , 0
1/2 , 1/3 , 2/3
0 , 1/3 , 1/3
のn乗を計算して、初期位置がAなら
1
0
0
を掛ければ
n秒後にABCにいる確率がそれぞれ
a
b
c
って出るよね?
817:デフォルトの名無しさん
08/12/08 19:58:48
二分法と言うのはこれのはずだが、合ってるだろうか?
URLリンク(ja.wikipedia.org)
この方法と確率の計算は、関係ないのでは?
818:デフォルトの名無しさん
08/12/09 05:35:56
>>816
よかったら解答のせてもらえませんか?
方針を理解したのですが、
行列のあたり苦手なのでコンパイルできません^^;
819:デフォルトの名無しさん
08/12/09 14:10:44
program test(input, output);
const m=3;n=10;
type index=1..m;
var a : array[index,index] of real;
x ,y : array[index] of real;
i,k,h : index ;
s :real ;
begin
{数値代入}
a[1,1] := 1/2 ; a[1,2] := 1/3 ; a[1,3] := 0 ; x[1] := 1 ;
a[2,1] := 1/2 ; a[2,2] := 1/3 ; a[2,3] := 2/3 ; x[2] := 0 ;
a[3,1] := 0 ; a[3,2] := 1/3 ; a[3,3] := 1/3 ; x[3] := 0 ;
{ y =Ax の計算を10回}
for h:= 1to n do
begin
{ y =Ax の計算1回分}
for i := 1 to m do
begin
s := 0;
for k:=1 to m do
begin
s := s + a[i,k] * x[k] ;
end;
y[i] := s ;
end;
x:=y ;
end;
{n秒後にA,B,Cにいる確率、順に}
for i := 1 to m do writeln(x[i]);
end.
820:デフォルトの名無しさん
08/12/09 17:24:10
Delphiの宿題があるのですが、ダイヤモンドパターンのプログラムを教えてください(泣)
821:デフォルトの名無しさん
08/12/09 18:37:49
>>63-
822:デフォルトの名無しさん
08/12/12 00:29:38
課題で1~nの総和計算の発展形の1~n^2の総和計算を求める、というものがありました。
1~nの挿話計算が
var i,sum,n:integer;
begin
write('n='); readln(n);
sum := 0;
for i:=1 to n do sum := sum +i;
writeln('Sum(1~n)=',sum)
end;
となるのはわかったんですが、これをn^2にするときは、
上のプログラムのnをsqr(n)に変えるだけでできますか?
823:デフォルトの名無しさん
08/12/12 00:58:27
822です。引き続け申し訳ないですが、
6つの4,89,6,2,23,21という数字を小さいものから並び替えるプログラム
procedure sort;
const N = 6;
const d: array[1 .. N] of integer = (4,89,6,2,23,21);
var i, j, w: integer;
sd: array[1 .. N] of integer;
begin
for i := 1 to N do sd[i] := d[i];
for i := 1 to N do
for j := 1 to N - i do
if sd[j] > sd[j+1] then begin
w := sd [j];
sd[j] := sd[j+1];
sd[j+1] := w
end;
writeln('Sorted date :');
for i := 1 to N do write('sd[',i:3,'] '); writeln;
for i := 1 to N do write(sd[i]:7,' ');writeln;
readln
end;
を改良して、6つの数字のうち初めのM個だけを並び替えるという
プログラムのつくりかたがわかりません。
どなたか教えていただけたら幸いです。
824:デフォルトの名無しさん
08/12/12 03:43:02
>>822
sum := sum +sqr(i);
>>823
const M = ;
for i := 1 to N do sd[i] := d[i];
for i := 1 to M do
for j := 1 to M - i do
825:822
08/12/12 03:50:58
>>824
ありがとうございます!助かりました!
826:デフォルトの名無しさん
08/12/13 00:44:55
文字列に対して、任意の位置に新たな文字列お挿入する。入力は、挿入対象の文字列(text1)、挿入文字列(text2)、挿入開始位置(pointer),
及び挿入する文字列の長さ(length)とし、出力は、挿入済みの文字列(text)とする。
挿入例
text1:=`abcdef____`;
text2:=`ghi_______`;
pointer:=4;
length:=3;
text=`abcghidef_`
この問題を教えてください。
827:デフォルトの名無しさん
08/12/13 10:16:41
いやです
828:デフォルトの名無しさん
08/12/13 15:45:28
何故ですか?
829:デフォルトの名無しさん
08/12/13 21:04:05
日本語も満足に書けないやつがなんでプログラミングなんかやってんの?
830:デフォルトの名無しさん
08/12/14 00:51:19
いや、教科書をそのまま載せたのですが…
831:デフォルトの名無しさん
08/12/14 02:02:03
日本語も満足に書けないやつがなんで教科書なんか書いてんの?
832:デフォルトの名無しさん
08/12/14 02:48:55
おめこ
833:デフォルトの名無しさん
08/12/17 16:48:34
再帰のプログラムが苦手で次の2つのプログラムの書き方が分かりません。
再帰を使用してプログラム例を示していただけないでしょうか。
1
値の配列を受け取り,その並べ替え(順列)をすべて出力する再帰の手法を
使用したプログラムを書きなさい.ただし,値は1からnまでの数値であり、
n<=10とする. n=1,n=2,n=3の場合についてプログラムを実行しなさい。
2
「ハノイの塔」のパズルを解く再帰の手法を使用したプログラムを書きなさ
い。(円盤の枚数はnとする)n=2,n=3,n=4の場合についてプログラムを実行
しなさい。
834:デフォルトの名無しさん
08/12/17 18:54:16
2
program prog1(input, output);
var n : integer;
procedure hanoi(var n:integer ; a,b,c:char);
begin
if n>0 then
begin
hanoi(n-1,a,c,b);
writeln(n,'番の板を',a,'から',b,'に移動');
hanoi(n-1,c,b,a);
end;
end;
begin
write('円板の枚数n=');
read(n);
hanoi(n, 'a' , 'b' , 'c' );
end.
835:デフォルトの名無しさん
08/12/17 18:55:39
× procedure hanoi(var n:integer ; a,b,c:char);
○ procedure hanoi(n:integer ; a,b,c:char);
836:デフォルトの名無しさん
08/12/18 11:42:26
>>834
すみません。
コンパイルをしてみたら「char」の部分がエラーになって動かないのですが・・・
なにぶん古いコンパイラですので・・・、お手数をおかけいたします。
837:デフォルトの名無しさん
08/12/18 11:43:40
835の通りに直しても動きませんでした。
どうやら定義されてない・・・みたいです。
838:デフォルトの名無しさん
08/12/18 11:44:54
なにが定義されてないって出たの?
839:デフォルトの名無しさん
08/12/18 12:35:23
全角スペースのままとか?
840:デフォルトの名無しさん
08/12/19 19:25:58
>>839
スペース消してみたら上手くいきました。
ありがとうございます。
「1」の方はやはり難しいのでしょうか。
1
値の配列を受け取り,その並べ替え(順列)をすべて出力する再帰の手法を
使用したプログラムを書きなさい.ただし,値は1からnまでの数値であり、
n<=10とする
841:デフォルトの名無しさん
08/12/20 01:18:37
>>840
アクセスでお菓子とジュース
842:デフォルトの名無しさん
08/12/20 01:26:13
>>841
被るといけねーから少し中を変えとけよ
843:デフォルトの名無しさん
08/12/20 01:43:23
>>842
おkk
844:デフォルトの名無しさん
08/12/20 02:51:41
m,h, : permutation
与えられたリストの要素を並べ替えてできる全てのリストのリストを返す関数。
ほぼHaskell版のコピー。リストをシフトさえるshift関数などがちょっと違っている。
(* Standard ML *)
fun permutation [] = [[]]
| permutation list =
let
fun revolve [] = [[]]
| revolve l = let
fun shift 0 _ = []
| shift n (x::xs) = (x::xs) :: (shift (n-1) (xs@[x]))
in
shift (length l) l
end
fun permutation' [] = [[]]
| permutation' (x::xs) = map (fn y => x::y) (permutation xs)
in
foldr (op @) [] (map permutation' (revolve list))
end;
(* 実行結果 *)
- permutation [1,2,3];
val it = [[1,2,3],[1,3,2],[2,3,1],[2,1,3],[3,1,2],[3,2,1]] : int list list
- permutation [1,2,3,4];
val it =
[[1,2,3,4],[1,2,4,3],[1,3,4,2],[1,3,2,4],[1,4,2,3],[1,4,3,2],[2,3,4,1],
[2,3,1,4],[2,4,1,3],[2,4,3,1],[2,1,3,4],[2,1,4,3],...] : int list list
-
845:841,843
08/12/20 09:25:22
>>842
どこで渡すー?
846:デフォルトの名無しさん
08/12/20 10:13:13
program prog1(input, output);
var i,n : integer;
p : array[1..10] of integer ;
procedure perm(i,n:integer);
var j,t :integer;
begin
if i<n+1 then
begin
for j:=i to n do
begin
t:=p[i] ; p[i]:=p[j] ; p[j]:=t ;
perm(i+1,n);
t:=p[i] ; p[i]:=p[j] ; p[j]:=t ;
end;
end
else
begin
for j :=1 to n do write(p[ j ],' ');
writeln('');
end;
end;
begin
write('n='); read(n);
for i := 1 to n do p[i]:=i;
perm(1,n);
end.
847:デフォルトの名無しさん
08/12/20 10:32:15
>>845
どこで?
おれはフツーにレポboxに放り込むけど…
848:デフォルトの名無しさん
08/12/20 10:40:57
>>846
アルゴリズム事典かな?
もれも、ほとんど同じになった。
849:デフォルトの名無しさん
08/12/20 10:46:37
1、2共にちゃんと動作しました。
ありがとうございました。
850:デフォルトの名無しさん
08/12/20 10:47:40
C言語によるはじめてのアルゴリズム入門の初版
851:デフォルトの名無しさん
08/12/20 10:58:01
>>849
引数で配列渡すようにしないとだよ
852:デフォルトの名無しさん
08/12/20 11:13:48
そうなのですか?
853:デフォルトの名無しさん
08/12/20 12:14:24
>値の配列を受け取り
って書かれてるから渡したほうがいいかなーと
854:デフォルトの名無しさん
08/12/20 19:25:00
Pascal
URLリンク(jp.youtube.com)
855:デフォルトの名無しさん
08/12/20 20:04:33
>>846の8行目
× if i<n+1 then
○ if i<n then
動作結果は同じだけど一応訂正
856:デフォルトの名無しさん
08/12/25 20:10:48
丸投げOKですか?
Delphi使用で、for、if、arrayまで習っています。
・生年月日と今日の日付を計算して、満年齢を計算する
・sin,cos,tanの数表を作る
857:デフォルトの名無しさん
08/12/25 20:14:24
どうでもいいミスですが一応訂正
×生年月日と今日の日付を計算して、満年齢を計算する
○生年月日と今日の日付を入力して、満年齢を計算する
858:デフォルトの名無しさん
08/12/25 20:34:15
宿題の季節っつーか来年提出か
締切日は書いた方がいい
859:856
08/12/25 21:12:39
>>858
すいません。締切は1月5日です。
諸事情で締切日までDelphiが使えない状態になりました。
860:デフォルトの名無しさん
08/12/26 12:30:36
パスカルだけど
program prog1(input, output);
var birthday,today,y: integer ;
begin
writeln('ex. 20081226');
write('birthday = ');readln(birthday);
write('today = ');readln(today);
y:=trunc((today-birthday)/10000);
writeln(y);
end.
誕生日が来て1才年をとる場合なら簡単。
誕生日の前日に1才年をとる場合は難しいな
861:デフォルトの名無しさん
08/12/26 12:35:53
program prog1(input, output);
const pi=3.1415926535;
var i:integer;
s,c,t:real;
begin
writeln('deg','sin':8,'cos':10,'tan':10);
for i := 0 to 360 do
begin
s := sin(i*2*pi/360);
c := cos(i*2*pi/360);
if (i mod 15) = 0 then
begin
if (i mod 180 = 90) or (c= 0) then
writeln(i:3,s:10:5,c:10:5,'-------':10)
else
writeln(i:3,s:10:5,c:10:5,s/c:10:5) ;
end;
end;
end.
862:856
08/12/26 16:46:53
どうもありがとうございました
863:デフォルトの名無しさん
09/01/08 01:10:29
来週火曜までにお願いします。Delphiです。
・誕生日まで何日あるかを計算する。ただしarrayでなくcase文を使って設定すること。
・何個かのデータをもらって、その平均、総和、最大値、最小値、標準偏差を計算する。
・プロ野球などのプロスポーツのデータ(勝ち数、負け数、引き分け数)を入力したら、
各チームの勝率を計算し、順位をつける。
・学籍番号と得点をデータとして入力し、これを得点の高い順に並べ替え、順位を付けて表示する。
864:デフォルトの名無しさん
09/01/08 15:23:00
お断りします
865:デフォルトの名無しさん
09/01/10 11:48:11
>> 863
arrayではなくCaseを使って設定するって、どういう意味?
866:デフォルトの名無しさん
09/01/10 12:12:23
【 課題 】100マス計算をするプログラムを書いてください。
【 用語 】下記
【 期限 】1/15くらいまで
【 Ver 】
【 補足 】
プログラムがランダムに出題し、人間が100個の
マスに回答を入力し、確認ボタンを押すと
全問正解なら回答にかかった時間を表示して終了。
間違った場合は間違った場所にカーソルが止まり、
別の値が入力されるまで待ちます。
横10個、縦10個の数字は各々11~99までの乱数、
演算は +,-,x のみでよいです。
よろしくおねがいします。
867:863
09/01/11 20:32:54
>>865
以下のような設定は不可とのことです。
var days array[1..12] ofinteger;
var
:
:
begin
days[1]:=31;days[2]:=29;...(同様に);days[12]:=31;
868:デフォルトの名無しさん
09/01/11 21:16:31
>>863
で、どの課題が残ってるのかね?
869:デフォルトの名無しさん
09/01/12 22:18:35
program prog1(input, output);
var i ,x1,x2,x3,y1,m1,d1,y2,m2,d2: integer;
function calcd(y,m,d:integer):integer;
var i,leapday,years,days,mdays:integer;
begin
years := y-1;
days := d;
days := days + years * 365;
days := days + trunc (years/4) - trunc (years/100) + trunc (years/400);
if ( (y mod 4 =0) and (y mod 100 <>0) and (y mod 400 =0) ) then
leapday := 1
else
leapday := 0;
for i:=1 to m - 1 do begin
case i of
1,3,5,7,8,10,12 : mdays := 31;
4,6,9,11 : mdays := 30;
2 : mdays := 28 + leapday ;
end;
days := days + mdays;
end;
calcd:=days;
end;
begin
writeln('next birthday'); write('year=');readln(y1); write('month=');readln(m1); write('day=');readln(d1);
writeln('today'); write('year=');readln(y2); write('month=');readln(m2); write('day=');readln(d2);
x1:=calcd(y1,m1,d1); x2:=calcd(y2,m2,d2); x3:=x1-x2;
write('tanjobi made ',x3,' nichi');
end.
870:デフォルトの名無しさん
09/01/19 02:10:07
4行4列の行列の各要素を読み込み、ファイルへ行列形式で書き込ませるプログラムを作れ。
全然わかりません。お願いします。
火曜日までです。
871:デフォルトの名無しさん
09/01/19 02:16:16
cat 行列1.txt > 行列2.txt
872:デフォルトの名無しさん
09/01/19 19:06:58
ファイルの入出力関係って難しいよね
873:デフォルトの名無しさん
09/01/19 20:09:01
高校数学では行列を教えなくなるらしいね。
874:空落ち ◆SniperBHgo
09/01/21 20:17:38
>>870
行列形式ってなんだろう
program Mat(input,output,ExtFile);
const
COL = 4;
ROW = 4;
type
Matrix = packed array [1..COL,1..ROW] of integer;
MatrixFile = file of Matrix;
var
ExtFile : MatrixFile;
i : 1..COL;
j : 1..ROW;
InputMatrix : Matrix;
begin
rewrite( ExtFile, 'ExtFile' );
for i := 1 to COL do begin
for j := 1 to ROW do begin
write( '[', i, ',', j, ']?:' );
readln( InputMatrix[i,j] )
end
end;
write( ExtFile, InputMatrix )
end.
875:デフォルトの名無しさん
09/01/27 16:40:44
Delphi6.0で
(1)2つの自然数nとmが与えられたとき、
nとmの最大公約数を出力するプログラムを書け。
(2)与えられた3×3行列の行列式を計算するプログラムを書け
(行列は2次元配列で表すこと。)
という課題はどうやってとけばいいのでしょうか?
876:デフォルトの名無しさん
09/01/27 18:36:09
頭を使って解けばいいと思います
877:デフォルトの名無しさん
09/01/27 21:48:58
頭じゃなくてDelphi6.0でって書いてあるのに・・・
878:デフォルトの名無しさん
09/01/28 02:31:19
>>875
動作確認なんてしてないから間違ってたらすまん
改行大杉って怒られたんでつめて書く
type
TMatrix3x3 = array[0..2][0..2]of Double;
function det3x3(Mat:TMatrix3x3):Double;
var
i,j:Integer;
hoge:Extended;
begin
Result:=0;
//Plus
for i:=0 to 2 do begin
hoge:=1;
for j:=0 to 2 do
hoge:=hoge*Mat[j][(i+j)mod 3];
Result:=Result+hoge;
end;
//Minus
for i:=0 to 2 do begin
hoge:=1;
for j:=0 to 2 do
hoge:=hoge*Mat[j][(3+i-j)mod 3];
Result:=Result-hoge;
end;
end;
879:デフォルトの名無しさん
09/01/28 02:32:32
我ながら改行とかインデント崩れすぎワロタ
880:デフォルトの名無しさん
09/01/28 08:59:15
大丈夫、環境によってはキチンとインデントされて見えてるから。
半角2文字づつ綺麗にインデントされたやつが。
881:デフォルトの名無しさん
09/01/28 10:09:12
俺のとこもちゃんとなってるよ
882:123
09/02/11 17:58:34
440!を881で割ったときの余りをRを求めよ。また、R2を881で割ったときの余りを求めよ。
883:デフォルトの名無しさん
09/02/12 01:16:47
program prog1(input, output);
var i,ans:integer;
begin
ans := 1;
for i := 1 to 440 do
begin
ans := ans * i mod 881;
end;
writeln(ans);
readln;
end.
884:123
09/02/12 10:02:40
さすがです!!!任務完了!
885:デフォルトの名無しさん
09/02/13 01:09:04
[1] 授業単元:Pascal
[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるかとその並びをすべて列挙する
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
例
534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
886:デフォルトの名無しさん
09/02/13 01:25:52
547 名前: デフォルトの名無しさん [sage] 投稿日: 2009/02/12(木) 17:07:40
Python の宿題ここで答えます Part 1
スレリンク(tech板:785番)
C/C++の宿題片付けます 122代目
スレリンク(tech板:542番)
Rubyの宿題教えてください。2限目
スレリンク(tech板:476番)
こんなんで数独の掲載料もらえるなら俺だって問題送りたい
887:デフォルトの名無しさん
09/02/13 20:40:20
数独の条件はそれだけじゃないだろ。
888:デフォルトの名無しさん
09/02/15 13:11:36
課題が全部列挙だとするとマジキチなサイズのレポートが出来上がる