ページ 1 / 1
数値の利用とΣの計算
Posted: 2010年1月10日(日) 01:33
by cinema
はじめまして。いきなりですが質問です。
今、1つのファイルにデータが入力してあり、それを計算プログラムを利用して答えを求めるという課題に取り組んでいます。
自分で理解しているのは計算プログラムの中に、与えられたデータ(初期値のようなもの)を入力するところまでです。下のコードは計算部分を省略しています。
#include <stdio.h>
int main(void)
{
int i;
FILE *file;
file = fopen("test.txt","r");
fscanf(file,"%d",&i);
fclose(file);
printf("%d\n",i);
return 0;
}
そこで今分からないのが計算式で出てきた答えを受け継ぐというところです。具体的に言うと
たとえば『○』に『×』を加えたら『△』という答えが出てきた。そしてその『△』を次の式の『□』に加えると『☆』という答えが出てきた、というものだとします。
△=○+×…①
☆=△+□…②
この時、プログラムでは上から下に進んでいくので普通に計算できていくと思うんですが、今自分がやっている課題は①、②という風に式の数が決まっておらず、式が2つのときもあれば5つになる場合もあります。それぞれの式は同じものです。ただ入力していく数値が違います。つまり前の式の答えを次の式に入力していかないと計算ができないということです。
教科書をみると式はΣでまとめられていました。しかしそのΣをプログラムで表わす方法が分かりません。
分からないことをまとめます。
・前の式の答えを次の式に受け継ぐにはどうすればいいのか?
・式の数(式自体は同じ内容で入力する数値が違う)が定まっていない場合はどういう風に次の式に受け継ぐのか?
・その式の数だけいちいちプログラムに書き込んでいかないといけないのか?
・Σのような役割を持つコードみたいなものがあるのか?
といった感じです。かなり分かりづらい文章になって申し訳ありません。文の内容で理解できない部分があると思いますので遠慮なく言ってください。
Re:数値の利用とΣの計算
Posted: 2010年1月10日(日) 01:51
by sizuma
具体的にどういう形式のデータが与えられているのか教えていただけますか?
計算式は
a = b + c
という計算式、ということでしょうかね。
と考えると
1 12
3
3
6
みたいな形式のデータが入ってる、と僕は読み取ったんですが、どうでしょうか?
あと、プログラミングの能力はどれくらいでしょうか?

Re:数値の利用とΣの計算
Posted: 2010年1月10日(日) 02:27
by cinema
データの形式は自分で決めていいみたいでした。なので
y=3
z=3
x=5
w=5
といった形で改行して与えてくようにしました。計算式がいくつかあって、そのうちの一つが前の式の答えを利用するパターンです。そしてその部分ができないと最終的な答えは出せません。
プログラミングはまだそんなにやったことがなく、簡単な四則演算のプログラミングは作れました。下のようなやつです。
#include "stdafx.h"
#include "math.h"
int _tmain(int argc, _TCHAR* argv[/url])
{
FILE *pf=fopen("test4.txt","w");
for(int n=1;n<=365;n++)
{
double w,a,T,b,t,L,c,S,I,d,P,h,cosech;
T=12.0;
L=131.62;
c=33.23;
d=1353;
P=0.7;
/*
T:日本標準時
L:東経
c:北緯
d:太陽定数
P:大気透過率
*/
w=(360.0*n)/366.0;
//printf("%f\n",w);
a=0.362-23.3*cos((3.141592/180.0)*(w+8.8))-0.337*cos((3.141592/180.0)*(2.0*w-11.9))-0.185*cos((3.141592/180.0)*(3.0*w+35.5));
//printf("%f\n",a);
/*aは日赤緯*/
b=-0.0167+7.37*cos((3.141592/180.0)*(w+85.8))-9.93*cos((3.141592/180.0)*(2.0*w-72.3))-0.321*cos((3.141592/180.0)*(3.0*w-66.3));
//printf("%f\n",b);
/*bは均時差*/
t=15.0*(T-12.0)+L-135.0+b/4;
//printf("%f\n",t);
/*tは時角*/
S=sin((3.141592/180.0)*c)*sin((3.141592/180.0)*a)+cos((3.141592/180.0)*c)*cos((3.141592/180.0)*a)*cos((3.141592/180.0)*t);
//printf("%f\n",S);
/*Sはsin(h)*/
h=asin(S)/(3.141592/180.0);
if(h<0)
{
h=0.0;
}
/*hは太陽高度で、hがマイナスならh=0として考える*/
cosech=1.0/sin(h*(3.141592/180.0));
I=d*pow(P,cosech);
/*Iは日射量*/
I=d*(pow(P,(1/S)));
fprintf(pf,"%f\n",I);
}
fclose(pf);
return 0;
}
Re:数値の利用とΣの計算
Posted: 2010年1月10日(日) 09:20
by non
過去に「9mm」さんが質問されていたプログラムと同じですね。
>Σをプログラムで表わす方法が分かりません。
for文で繰り返せば良いのではないかと思います。
Re:数値の利用とΣの計算
Posted: 2010年1月10日(日) 20:30
by cinema
>for文で繰り返せば良いのではないかと思います。
繰り返す数とかもテキストファイルで与えるようにしたほうがいいんでしょうか?
課題は壁の中の温度を求めていくようなもので断熱材が複数あり、それぞれに厚さなど条件が違います。
Re:数値の利用とΣの計算
Posted: 2010年1月10日(日) 21:52
by non
>繰り返す数とかもテキストファイルで与えるようにしたほうがいいんでしょうか?
与えるデータが多く、固定値ではなければそうした方がいいでしょうが、
具体的に示していただかないと、わかりません。
課題であるのなら、課題の全文を載せて下さい。
Re:数値の利用とΣの計算
Posted: 2010年1月11日(月) 01:58
by cinema
課題を書いておきます。
<壁体内の熱移動>
熱流
q=K(θi-θo)
熱貫流率
K=1/R
熱貫流抵抗
R=(1/αo)+(1/αi)+Σl/x
<璧体内の湿気の移動>
湿流
w=K'(fi-fo)
湿貫流率
K'=1/R'
湿貫流抵抗
R'=(1/αo')+(1/αi')+Σl/x'
θi:室内の温度
θo:外の温度
αo,αi:熱伝達率
fi,fo:水蒸気圧
αo',αi':湿気伝達率
l:璧体の厚さ
x:熱伝導率
x':湿気伝導率
①θi、θo、αo、αi、l、xをデータで与えて璧体内の温度分布を求める。
②①から飽和水蒸気圧を求める。
③θi、θo、室内外の湿度からfi、foを求める。
④fi、fo、αo'、αi'、l、x'をデータで与えて水蒸気圧分布を求める。
⑤②と④の比較
出力するのは①②④⑤
という風に与えられています。
Re:数値の利用とΣの計算
Posted: 2010年1月11日(月) 02:14
by cinema
すいません、追加で式がありました。
①の温度分布を求めるときその材料の表面温度を求めていきます。それが前の結果を利用していくという形何ですが、その時に使う式が
θn-1=θso+(Q/Cn)
Q=Cn(θn-1-θso)
Cn=l/x
θso:室外表面温度
理解できないことがあれば教えてください。
Re:数値の利用とΣの計算
Posted: 2010年1月11日(月) 09:51
by non
システム化とは人間が行っていることを、コンピュータの作業に置き換えることであり、
人間がたとえ時間がかかっても手作業でやれなければ、プログラムすることができませんよ。
専門的な内容は私にはさっぱりわかりません。したがって、何のデータを入力して、どの式を
使って、何を求めるかが、はっきりしないとわかりません。
①θi、θo、αo、αi、l、xをデータで与えて璧体内の温度分布を求める。
とあります。おそらく最初に
熱貫流抵抗
R=(1/αo)+(1/αi)+Σl/x
で、Rを求めるのでしょうけど、Σl/xの部分は、どのような形でデータが与えられるのか?
データの個数は?
ここで、Rが求まれば、
熱貫流率 K=1/R
q=K(θi-θo) を求めるのでしょうけどθi、θoがθn-1やθsoとどれがからんでいるか
わからない。
自分で、具体的なデータで、電卓またはEXCELを使って計算したことはあるのですか?