プログラムの内容
Posted: 2009年8月02日(日) 18:49
「以下のようなプログラムの内容を詳しく説明せよ」という宿題が出たのですが、明日提出なのを忘れていて全く手をつけていない状況です。
そこで、失礼なのは承知なのですが以下のプログラムを詳しく説明して頂けないでしょうか?
月曜日の12時が締め切りなのでよろしくお願いします。
なお、プログラム中のfortran.txtは添付しておきます。
本当によろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
FILE *fp;
char fortran[10][29];
int i,j,k,l,m,n;
char comment[30];
char L[6][5];
char s[6][5];
char enzanshi[5];
char a,b;
int p,q;
fp = fopen( "fortran.txt", "r" );
if( fp == NULL )
{
puts( "ファイルが開けません" );
return 1;
}
printf("\n\nFORTRANプログラム\n\n");
for(i=0;i<=10;i++)
{
if( fgets( fortran, sizeof (fortran), fp ) == NULL )
{
break;
}
printf("%s",fortran);
}
printf("\n\nCプログラム\n\n\n");
if(fortran[0][0] == 'C'){
for(k=0;k<30;k++){
if((fortran[0][k]=='S')&&(fortran[0][k+1]=='H')&&(fortran[0][k+2]=='I')&&(fortran[0][k+3]=='S')&&(fortran[0][k+4]=='O')&&(fortran[0][k+5]=='K')&&(fortran[0][k+6]=='U')&&(fortran[0][k+8]=='E')&&(fortran[0][k+9]=='N')&&(fortran[0][k+10]=='Z')&&(fortran[0][k+11]=='A')&&(fortran[0][k+12]=='N'))
printf("/* 四則演算 */\n\n#include<stdio.h>\n\n int main(void)\n{\n");
}
}
sscanf(fortran[1]+6,"READ(5,10)%2s,%2s",L[0],L[1]);
for(i=0;i<=3;i++)
{
sscanf(fortran[i+3]+6,"%2s=IA%cIB",L[i+2],&enzanshi);
}
for(l=0; l<=5; l++)
{
for(k=0; k<5; k++)
{
s[[/url][k] = tolower(L[[/url][k]);
}
}
sscanf(fortran[2]+6,"FORMAT(2%c%d)",&a,&p);
sscanf(fortran[8]+6,"FORMAT(1H,4%c%d)",&b,&q);
if(a == 'I')
{
printf(" int %s,%s;\n",s[0],s[1]);
}
if(b == 'I')
{
printf(" int %s,%s,%s,%s;\n",s[2],s[3],s[4],s[5]);
}
if(fortran[1][6] == 'R' && fortran[1][7] == 'E' && fortran[1][8] == 'A' && fortran[1][9] == 'D' )
{
printf(" scanf(\"%%%dd %%%dd\",&%s,&%s);\n",p,p,s[0],s[1]);
}
if(fortran[7][6] == 'W' && fortran[7][7] == 'R' && fortran[7][8] == 'I' && fortran[7][9] == 'T' && fortran[7][10] == 'E' )
{
for(m=0; m<=3; m++)
{
printf (" %s=%s%c%s;\n",s[m+2],s[0],enzanshi[m],s[1]);
}
for(n=0; n<=3;n++)
{
printf(" printf(\"%%%dd\\n\",%s);\n",q,s[n+2]);
}
}
if(fortran[9][6] == 'E' && fortran[9][7] == 'N' && fortran[9][8] == 'D' )
{
puts(" return 0;\n}");
}
return 0;
}
そこで、失礼なのは承知なのですが以下のプログラムを詳しく説明して頂けないでしょうか?
月曜日の12時が締め切りなのでよろしくお願いします。
なお、プログラム中のfortran.txtは添付しておきます。
本当によろしくお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(void)
{
FILE *fp;
char fortran[10][29];
int i,j,k,l,m,n;
char comment[30];
char L[6][5];
char s[6][5];
char enzanshi[5];
char a,b;
int p,q;
fp = fopen( "fortran.txt", "r" );
if( fp == NULL )
{
puts( "ファイルが開けません" );
return 1;
}
printf("\n\nFORTRANプログラム\n\n");
for(i=0;i<=10;i++)
{
if( fgets( fortran, sizeof (fortran), fp ) == NULL )
{
break;
}
printf("%s",fortran);
}
printf("\n\nCプログラム\n\n\n");
if(fortran[0][0] == 'C'){
for(k=0;k<30;k++){
if((fortran[0][k]=='S')&&(fortran[0][k+1]=='H')&&(fortran[0][k+2]=='I')&&(fortran[0][k+3]=='S')&&(fortran[0][k+4]=='O')&&(fortran[0][k+5]=='K')&&(fortran[0][k+6]=='U')&&(fortran[0][k+8]=='E')&&(fortran[0][k+9]=='N')&&(fortran[0][k+10]=='Z')&&(fortran[0][k+11]=='A')&&(fortran[0][k+12]=='N'))
printf("/* 四則演算 */\n\n#include<stdio.h>\n\n int main(void)\n{\n");
}
}
sscanf(fortran[1]+6,"READ(5,10)%2s,%2s",L[0],L[1]);
for(i=0;i<=3;i++)
{
sscanf(fortran[i+3]+6,"%2s=IA%cIB",L[i+2],&enzanshi);
}
for(l=0; l<=5; l++)
{
for(k=0; k<5; k++)
{
s[[/url][k] = tolower(L[[/url][k]);
}
}
sscanf(fortran[2]+6,"FORMAT(2%c%d)",&a,&p);
sscanf(fortran[8]+6,"FORMAT(1H,4%c%d)",&b,&q);
if(a == 'I')
{
printf(" int %s,%s;\n",s[0],s[1]);
}
if(b == 'I')
{
printf(" int %s,%s,%s,%s;\n",s[2],s[3],s[4],s[5]);
}
if(fortran[1][6] == 'R' && fortran[1][7] == 'E' && fortran[1][8] == 'A' && fortran[1][9] == 'D' )
{
printf(" scanf(\"%%%dd %%%dd\",&%s,&%s);\n",p,p,s[0],s[1]);
}
if(fortran[7][6] == 'W' && fortran[7][7] == 'R' && fortran[7][8] == 'I' && fortran[7][9] == 'T' && fortran[7][10] == 'E' )
{
for(m=0; m<=3; m++)
{
printf (" %s=%s%c%s;\n",s[m+2],s[0],enzanshi[m],s[1]);
}
for(n=0; n<=3;n++)
{
printf(" printf(\"%%%dd\\n\",%s);\n",q,s[n+2]);
}
}
if(fortran[9][6] == 'E' && fortran[9][7] == 'N' && fortran[9][8] == 'D' )
{
puts(" return 0;\n}");
}
return 0;
}