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

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

2016年01月

こんにちわ、

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




皆さん こんにちは、

 fuku です。

本年も どうぞよろしくお願いします。


ところで、今回の

話題なのですが、

 みなさん ご存知かも 知れませんが。


極選分析
基本情報技術者
予想問題集
 アイテック


の、良問を ご紹介したいと 思います。

P451
第2章
ソフトウェア
トレーニング 1
 優先順位付き 待ち行列 処理

・(4)
優先順位、到着順位は 数値であり、
 優先順位は 小さい方が 優先される。

優先順位が 同じ場合は、
到着時刻の 小さい方が
 優先される。


・設問1
(1)
Que[i] の エントリの 方が Que[j] の エントリより
 処理の 取出し順位が 高いことを
表す 条件式は、次のようになる。

[  a  ]  又は  ( [  b  ] )  である。

 → a に関する 解答
 Que[i].Pri < Que[j].Pri

 → b に 関する 解答
Que[i].Pri = Que[j].Pri  かつ  Que[i].Time < Que[j].Time

でした。


ここで、

待ち行列は、キュー ( Que )

として、表されています。

 →  [    a    ]  →

 先入れ 先出し法 ですね。


Que[i] 

これは、配列です。

この場合は、C言語で 言う所の

構造体配列では、と思いました。

複要素の データを 保持している 配列だからです。

 (→ Pri(プライオリティー ; 優先順位), Time(到着時刻), JobNo(ジョブ番号))


データに アクセスする場合には、

 Que[i].Pri

の ように、

.  (ドット)

を 使って アクセスします。

 余談ですが、

データベースの sql や、

VB でも、

同様だったと 思いました。


ご参考になれば、幸いです。^^


追伸 : サンプル コード

 わかりやすく する為、
データを 2つに しています。

#include <stdio.h>

struct data{
int Pri;
char JobNo[3];
int Time_h;
int Time_m1;
int Time_m2;
}Que[2];

int main()
{
struct data Que[2] = {

{10, "J1", 10, 0, 0},

{5, "J2", 10, 0, 5}

};

printf("%d, %s, %d:%d%d\n", Que[0].Pri,Que[0].JobNo,Que[0].Time_h,Que[0].Time_m1,Que[0].Time_m2);

printf("%d, %s, %d:%d%d\n", Que[1].Pri,Que[1].JobNo,Que[1].Time_h,Que[1].Time_m1,Que[1].Time_m2);

}


追伸2 :
こちらの コードの方が、エレガントですね。:) 

 #include <stdio.h>

struct data{
int Pri;
char JobNo[3];
int Time_h;
int Time_m;
}Que[2];

int main()
{
struct data Que[2] = {

{10, "J1", 9, 10},

{5, "J2", 10, 5}

};

printf("%d, %s, %02d:%02d\n", Que[0].Pri,Que[0].JobNo,Que[0].Time_h,Que[0].Time_m);

printf("%d, %s, %02d:%02d\n", Que[1].Pri,Que[1].JobNo,Que[1].Time_h,Que[1].Time_m);

}


 

↑このページのトップヘ