生半可な ど素人の パソコン資格 :)

趣味で、資格学修を しています。 自分に 出来ることを 増やしていきたいです ^^

よろしくお願いします。(^^)

2015年 秋 FE 問9、
 設問2
f, g。


Level  %d  --> %d

この、%d に、何が 入るかという とい。


印字結果を 見ると、

○Level  1  --> 2

Level  3  --> 2

と ありました。


○レベル 1 の 部屋から、

レベル2の 部屋に 入る データが

ありませんよ、という 表示。


普通なら、

before  -->  after

ですが、ちょっと 込み入って まして、

level  -->  beforeLevel

が、正解でした。


さすがに、

after  -->  before

では、おかしい。

なので、

最初の after ではなく、

他のもの。

doorLevel 

は、固有名詞なので、

変数の

level  …  現在の部屋レベル  (注記より)

が、妥当かなと。


アバウトですが、

そういう 解答群の 読み方も

あるのかな、と思いました。;)

 追伸 1

level  -->  beforeLevel

後ろが before に なるのは、

論理で。ここは 丁寧に 見ていきます。


サンプル プログラム

#include <stdio.h>
#include <string.h>

FILE *logFile;
int logEOF = 0;
char cardID[5] = "----", date1[9] = "--------", time1[7] = "------",door[3] = "--",
dir[2] = "-", act[2] = "-", name[11] = "----------";
char lastID[5] = "----";
int level = 0;

void getRecord();
void putRecord();
void checkLevel();
void clearLevel();


int main()
{

logFile = fopen("Access.Log", "r");
getRecord();
while (logEOF != EOF){
     putRecord();
     getRecord();
     clearLevel();

}
fclose(logFile);

}

void getRecord(){
 if (fscanf(logFile, "%4c %8c %6c %2c %1c %1c %10c\n",cardID, date1, time1, door,
dir, act, name) == EOF)
{logEOF = EOF;}
}

void putRecord(){
     int putSpace;

     if (strcmp(cardID, lastID) == 0)
         {printf("%18s", " ");}
     else {
         printf("%4s   %10s   ", cardID, name);
         strcpy(lastID, cardID);}
         checkLevel();

putSpace = door[0] - '0' - 1;
while (0< putSpace--){
     printf("%20s", " ");
}
printf("%.2s-%.2s  %.2s:%.2s %2s ",date1+4, date1+6, time1, time1+2, door);
if (strcmp(act, "R") == 0){ printf("%s",    "(R)");}
if (strcmp(dir, "I") == 0){ printf("%s\n",   "IN");}
else { printf("%s\n",    "OUT");}

}

void checkLevel(){
 int afterLevel, beforeLevel, doorLevel;

 doorLevel = door[0] - '0';
 beforeLevel = doorLevel;
 afterLevel = doorLevel;
if ( strcmp( dir, "I" ) == 0)
{ beforeLevel = doorLevel - 1; }
else
{ afterLevel = doorLevel - 1;}
if ( strcmp( act, "R" ) == 0 )
{ afterLevel = beforeLevel; }
if ( level != beforeLevel )
{ printf("***** Level %d-->%d\n%18s", level, beforeLevel, " "); }
level = afterLevel;
}


void clearLevel(){
 if ( logEOF == EOF || ( strcmp( cardID, lastID ) != 0 ))
{ if ( level > 0 ) { printf("%18s***** Level %d-->0\n", " ", level);
level = 0;}
}
}


データ ファイル ( C言語 )
 Access.Log

T001 20151018 100024 11 I A Test Use 1
T001 20151018 102028 31 I A Test Use 1
T001 20151018 104032 21 O A Test Use 1
 





こんにちわ、

fuku です。

みなさん いかが お過ごしでしょうか。

 雪、大丈夫でしたか。

こちらは、いつも通りの

冬日でした。;)


ところで、本題です。

「 FE, 解答、文脈 」

です。


さっき 気づいたのですが、

FE 午後問、例えば

C言語では、

 int  putSpace;

という 変数が 出ていました。

( 27年度 秋試験、午後 問9 )


これ、最初分からなかったのですが、

直訳すると、

「空白を 置く」

です。

要は、20字空白を いくつ 置いていくか、

という 事でした。


 その計算に、細かい部分が 有るのですが。

ここは、論理ですね。;)


以外と、国語力

( 文脈、意味を知る )

ことも 大事では、と思いました。 ^^


サンプル プログラム

#include <stdio.h>
#include <string.h>

FILE *logFile;
int logEOF = 0;
char cardID[5] = "----", date1[9] = "--------", time1[7] = "------",
door[3] = "--",dir[2] = "-", act[2] = "-", name[11] = "----------";
char lastID[5] = "----";

void getRecord();
void putRecord();


int main()
{

logFile = fopen("Access.txt", "r");
getRecord();
while (logEOF != EOF){
     putRecord();
     getRecord();

}
fclose(logFile);

}

void getRecord(){
 if (fscanf(logFile, "%4c %8c %6c %2c %1c %1c %10c\n",
cardID, date1, time1, door,dir, act, name) == EOF)
{logEOF = EOF;}
}

void putRecord(){
     int putSpace;

     if (strcmp(cardID, lastID) == 0)
         {printf("%18s", " ");}
     else {
         printf("%4s   %10s   ", cardID, name);
         strcpy(lastID, cardID);}

putSpace = door[0] - '0' - 1;
while (0< putSpace--){
     printf("%20s", " ");
}
printf("%.2s-%.2s  %.2s:%.2s %2s ",
date1+4, date1+6, time1, time1+2, door);
if (strcmp(act, "R") == 0){ printf("%s",    "(R)");}
if (strcmp(dir, "I") == 0){ printf("%s\n",   "IN");}
else { printf("%s\n",    "OUT");}

}

サンプル C言語 データファイル
 ( Access.txt )

 s001 20151018 090000 11 I A systemoper
s001 20151018 091004 21 I A systemoper
s001 20151018 092008 31 I A systemoper
s001 20151018 093012 31 O A systemoper
s001 20151018 094016 21 O A systemoper
s001 20151018 095020 11 O A systemoper
v001 20151018 110048 12 I A visitor001
v001 20151018 111052 22 I R visitor001
v001 20151018 112056 12 O A visitor001




↑このページのトップヘ