太陽光発電量の計算をするプログラムを作成中ですが,行き詰まりました
Posted: 2011年12月09日(金) 16:49
気象庁のデータベースからテキストコピペしたテキストファイルを自分で作成し,そこから必要な数字だけ抜き出したいのですが,コンパイルすると
1b.c:46: 警告: 互換性のないポインタ型からの引数 1 個の `strtok' を渡しますです
1b.c:49: 警告: 引数 1 個の `atof' を渡しますにより、キャストなしで整数からポインタを作りました
1b.c:50: 警告: 引数 1 個の `atof' を渡しますにより、キャストなしで整数からポインタを作りました
と出て,うまくいきません
http://www.data.jma.go.jp/obd/stats/etr ... urly&view=
1 997.6 1007.1 0.0 24.3 21.0 24.9 82 1.5 南
2 997.2 1006.7 1.5 23.6 21.1 25.1 86 3.1 南西
3 996.4 1005.9 1.0 23.1 21.0 24.9 88 0.2 静穏 10 10.0
4 996.3 1005.8 0.5 23.5 21.2 25.2 87 1.1 北西
5 996.8 1006.3 0.0 22.6 20.5 24.1 88 2.2 西 0.0 0.00
6 997.1 1006.6 0.5 22.5 20.8 24.5 90 3.7 西 0.0 0.01 10 4.00
7 997.2 1006.7 3.5 22.5 20.6 24.3 89 3.8 西 0.0 0.12
8 997.8 1007.3 3.5 22.7 20.8 24.6 89 2.6 西南西 0.0 0.15
9 997.0 1006.5 2.5 22.7 20.6 24.3 88 1.6 南西 0.0 0.19 -- -- 10 8.00
10 997.1 1006.6 0.5 23.3 20.5 24.0 84 1.7 西北西 0.0 0.50
11 997.4 1006.9 1.0 23.0 20.0 23.3 83 1.8 西北西 0.0 0.68
12 997.3 1006.8 0.0 24.0 19.3 22.4 75 0.6 北東 0.0 1.02 10 - 10.0
13 997.6 1007.0 -- 24.9 19.1 22.0 70 0.5 北北東 0.0 1.22
14 997.4 1006.8 -- 25.1 19.0 22.0 69 0.3 東 0.0 0.60
15 997.6 1007.0 0.0 25.4 19.5 22.7 70 2.1 西南西 0.0 0.56 -- -- 10 10.0
16 997.5 1007.0 1.0 24.1 20.4 24.0 80 1.8 西 0.0 0.26
17 997.3 1006.8 0.0 24.2 20.5 24.2 80 1.1 西 0.0 0.30
18 997.7 1007.2 -- 24.5 20.2 23.7 77 2.5 西 0.0 0.22 10 8.00
19 998.1 1007.6 -- 24.0 20.5 24.2 81 1.6 北 0.0 0.07
20 998.7 1008.2 -- 23.8 18.2 20.9 71 1.9 北 0.0 0.00
21 999.3 1008.8 -- 23.4 17.6 20.2 70 2.2 北北東 -- -- 10 - 8.00
22 1000.1 1009.6 -- 22.9 17.4 19.8 71 2.1 北北東
23 1000.0 1009.5 -- 22.7 17.2 19.6 71 1.3 北北東
24 1000.1 1009.7 -- 22.2 16.9 19.3 72 2.1 北東
これの左から5個目の数列と8個目の数列(1番上なら”24.3”と”82”)だけを抜き出して式に使いたいのです.
作ったプログラムは以下のとおりです
c言語初心者で雑なところがありますがご容赦ください
/* 1b.c */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define pi 3.14159265358979
void main()
{
int i,j,k,kk,ii,l=1;
double a[366],b[366],c[366],d[366],e1,e2,f,g,h,v,w,x,y,z,Q,S=1366.;
char str,s1[15],s2[60],o[61],u[10],r[15],q[15],s[16][60];
FILE *fp;
char *tp;
fp = fopen("text1.txt","r"); /このテキストファイルは,先ほどのテキストファイルとは無関係です/
if (fp == NULL)
return;
i=0;
j=0;
k=0;
while(1)
{
fgets(s1,15,fp);
strncpy(r,s1+0,4);
strncpy(q,s1+5,15);
e1 =atof(r);
e2 =(double *)e1*pi/180;
printf("%s %f %f\n\n",q,e1,e2);
if(feof(fp))
break;
j++;
}
fclose(fp);
fp = fopen("text2.txt","r");
if (fp == NULL)
return;
for(k=172;k<=172;k++){
f=23.44*cos((172.-k)*pi/180.);
while(2) /*問題の箇所がここの部分です*/
{
fgets(o,60,fp);
for(kk=0;kk<=16;kk++){
while(fp != NULL){
tp=strtok(fp," \n"); /*46行目*/
}}
a =atof(*s[5]); /*49行目*/
b =atof(*s[8]); /*50行目*/
printf("%f %f\n",a,b);
h=(12.-l)*15.;
g=6.11*pow(10.,((7.5*a)/(237.3+a)))*b/100.;
v=sin(e2)*sin(f*pi/180.)+cos(e2)*cos(f*pi/180.)*cos(h*pi/180.);
w=v*180./pi;
Q=S*pow(sin(v),2.)/((sin(v)+2.7)*pow(10.,-3.)*g+1.085*sin(v)+0.1);
if(Q<0){
Q=0;
}
printf("%f\n",Q);
if(feof(fp))
break;
i++;
l++;
}
}
}
ネットや教科書を参照してずっと考えたり試行錯誤しておりますが,うまくいきませんでした.
数年分のデータを計算したいのでプログラムを作る事となり,どうしても必要です
力を貸してもらえないでしょうか.
よろしくお願いいたします.
1b.c:46: 警告: 互換性のないポインタ型からの引数 1 個の `strtok' を渡しますです
1b.c:49: 警告: 引数 1 個の `atof' を渡しますにより、キャストなしで整数からポインタを作りました
1b.c:50: 警告: 引数 1 個の `atof' を渡しますにより、キャストなしで整数からポインタを作りました
と出て,うまくいきません
http://www.data.jma.go.jp/obd/stats/etr ... urly&view=
1 997.6 1007.1 0.0 24.3 21.0 24.9 82 1.5 南
2 997.2 1006.7 1.5 23.6 21.1 25.1 86 3.1 南西
3 996.4 1005.9 1.0 23.1 21.0 24.9 88 0.2 静穏 10 10.0
4 996.3 1005.8 0.5 23.5 21.2 25.2 87 1.1 北西
5 996.8 1006.3 0.0 22.6 20.5 24.1 88 2.2 西 0.0 0.00
6 997.1 1006.6 0.5 22.5 20.8 24.5 90 3.7 西 0.0 0.01 10 4.00
7 997.2 1006.7 3.5 22.5 20.6 24.3 89 3.8 西 0.0 0.12
8 997.8 1007.3 3.5 22.7 20.8 24.6 89 2.6 西南西 0.0 0.15
9 997.0 1006.5 2.5 22.7 20.6 24.3 88 1.6 南西 0.0 0.19 -- -- 10 8.00
10 997.1 1006.6 0.5 23.3 20.5 24.0 84 1.7 西北西 0.0 0.50
11 997.4 1006.9 1.0 23.0 20.0 23.3 83 1.8 西北西 0.0 0.68
12 997.3 1006.8 0.0 24.0 19.3 22.4 75 0.6 北東 0.0 1.02 10 - 10.0
13 997.6 1007.0 -- 24.9 19.1 22.0 70 0.5 北北東 0.0 1.22
14 997.4 1006.8 -- 25.1 19.0 22.0 69 0.3 東 0.0 0.60
15 997.6 1007.0 0.0 25.4 19.5 22.7 70 2.1 西南西 0.0 0.56 -- -- 10 10.0
16 997.5 1007.0 1.0 24.1 20.4 24.0 80 1.8 西 0.0 0.26
17 997.3 1006.8 0.0 24.2 20.5 24.2 80 1.1 西 0.0 0.30
18 997.7 1007.2 -- 24.5 20.2 23.7 77 2.5 西 0.0 0.22 10 8.00
19 998.1 1007.6 -- 24.0 20.5 24.2 81 1.6 北 0.0 0.07
20 998.7 1008.2 -- 23.8 18.2 20.9 71 1.9 北 0.0 0.00
21 999.3 1008.8 -- 23.4 17.6 20.2 70 2.2 北北東 -- -- 10 - 8.00
22 1000.1 1009.6 -- 22.9 17.4 19.8 71 2.1 北北東
23 1000.0 1009.5 -- 22.7 17.2 19.6 71 1.3 北北東
24 1000.1 1009.7 -- 22.2 16.9 19.3 72 2.1 北東
これの左から5個目の数列と8個目の数列(1番上なら”24.3”と”82”)だけを抜き出して式に使いたいのです.
作ったプログラムは以下のとおりです
c言語初心者で雑なところがありますがご容赦ください
/* 1b.c */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define pi 3.14159265358979
void main()
{
int i,j,k,kk,ii,l=1;
double a[366],b[366],c[366],d[366],e1,e2,f,g,h,v,w,x,y,z,Q,S=1366.;
char str,s1[15],s2[60],o[61],u[10],r[15],q[15],s[16][60];
FILE *fp;
char *tp;
fp = fopen("text1.txt","r"); /このテキストファイルは,先ほどのテキストファイルとは無関係です/
if (fp == NULL)
return;
i=0;
j=0;
k=0;
while(1)
{
fgets(s1,15,fp);
strncpy(r,s1+0,4);
strncpy(q,s1+5,15);
e1 =atof(r);
e2 =(double *)e1*pi/180;
printf("%s %f %f\n\n",q,e1,e2);
if(feof(fp))
break;
j++;
}
fclose(fp);
fp = fopen("text2.txt","r");
if (fp == NULL)
return;
for(k=172;k<=172;k++){
f=23.44*cos((172.-k)*pi/180.);
while(2) /*問題の箇所がここの部分です*/
{
fgets(o,60,fp);
for(kk=0;kk<=16;kk++){
while(fp != NULL){
tp=strtok(fp," \n"); /*46行目*/
}}
a =atof(*s[5]); /*49行目*/
b =atof(*s[8]); /*50行目*/
printf("%f %f\n",a,b);
h=(12.-l)*15.;
g=6.11*pow(10.,((7.5*a)/(237.3+a)))*b/100.;
v=sin(e2)*sin(f*pi/180.)+cos(e2)*cos(f*pi/180.)*cos(h*pi/180.);
w=v*180./pi;
Q=S*pow(sin(v),2.)/((sin(v)+2.7)*pow(10.,-3.)*g+1.085*sin(v)+0.1);
if(Q<0){
Q=0;
}
printf("%f\n",Q);
if(feof(fp))
break;
i++;
l++;
}
}
}
ネットや教科書を参照してずっと考えたり試行錯誤しておりますが,うまくいきませんでした.
数年分のデータを計算したいのでプログラムを作る事となり,どうしても必要です
力を貸してもらえないでしょうか.
よろしくお願いいたします.