ページ 11

プログラムの内容

Posted: 2009年8月02日(日) 18:49
by アパッチ
「以下のようなプログラムの内容を詳しく説明せよ」という宿題が出たのですが、明日提出なのを忘れていて全く手をつけていない状況です。
そこで、失礼なのは承知なのですが以下のプログラムを詳しく説明して頂けないでしょうか?
月曜日の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;
}

Re:プログラムの内容

Posted: 2009年8月02日(日) 19:09
by non
このプログラムの何を説明すればいいのでしょうか?
何をするプログラムかということでしょうか?
それは、実行すればわかるでしょうし。

私には、このプログラムを作成した人の目的がわかりません。
したがって、この問題を出した人の意図がわかりません。
授業を習っているのですから、何か目的がわかるのではないですか?

Re:プログラムの内容

Posted: 2009年8月02日(日) 19:30
by アパッチ
説明足りなくてすみません。
プリントを見る限り、プログラムを1行ずつ説明するらしいです。
例えば9行目に関しては、int i,j,k,l,m,n;はint関数を使ってi,j,k,l,m,nの六つの変数を定義する。
といった感じで説明していくらしいです。
一応、○行目~○行目までは・・・といった感じにまとめて説明することも可能らしいのですが、なるべく詳しく説明しろとのことです。

Re:プログラムの内容

Posted: 2009年8月02日(日) 19:37
by non
試験をやって出来なかった人へのペナルティみたいな課題ですね。
まさか、アパッチさんが全てがわからないということはないですよね。
9行目はちゃんと回答しているのだから。
このままでは、きっと誰も回答を示してはくれません。(たぶん)
まだ、16時間はあるのですから、やれるところまでやって、どうしても
わからない行だけ質問すべきでしょう。

無題

Posted: 2009年8月02日(日) 20:00
by アパッチ
そうですね。
自分でがんばってみます。
ただ、所々に出てくる[/url]がよくわかりません。
これは何なんですか?

Re:無題

Posted: 2009年8月02日(日) 20:07
by non
配列です。・・・って?そのレベルから・・・こりゃ、大変だ。

Re:無題

Posted: 2009年8月03日(月) 00:11
by アパッチ
だから今回だけは全部教えてほしいんです。
本当にお願いします

Re:無題

Posted: 2009年8月03日(月) 17:28
by sizuma
>所々に出てくる[/url]
>配列です
入門者相手だからでしょうけど、一応。

[/url]は添字演算子。
宣言中では[/url]は配列だけど、それ以外式の中ではポインタ演算のシンタックスシュガーですね。
宣言外では[/url]は配列とは無関係です。