マンガでよめる痔のこと・薬のこと

プログラミングについて

C#の難易度についてです。

プログラミングを学ぼうと思っている者ですが、いずれまたは最初にC#を学ぼうと思っています。

目的はC#とゲームエンジンのUnityを使ったゲーム開発です。

C#を経験された方
C#の難易度を教えていただけませんか?

また、C#を学ぶにあたって、学んでいてよかった言語はなんでしょうか?

A 回答 (5件)

他の言語をいろいろと使ってからUnityでC#を扱いましたが、これほどバランスの良い言語はないと思います。


習得難易度は低いので、さっさと何かを書き始めてしまえば良いと思います。同時にオブジェクト指向や.NETの勉強にもなると思います。

学んでいてよかった言語、は特にないですが強いてあげるならC(もしくはC++)です。
C#ではメモリアクセスや管理が抽象化・機能化されているので、CやC++でその辺りをきちんと理解すると良いです。
でも、プログラムは楽しんだもの勝ちですので、C#などの簡単な言語で楽しさを知ってからでも遅くないと思います。

プログラミングライフ、楽しんでください!
    • good
    • 0

相対的な難易度は


python << C#=Java << c++、Javascript
Javaやってれば、C#は楽ちんですね。


あなたにとってどの程度難しいかは不明。
プログラミング初心者だと、何故クラスありきなのか悩むでしょうね。
    • good
    • 0

難易度なんて、個人差あるから答えようもない。

    • good
    • 0
この回答へのお礼

その通りですが、C#を学んだ方の個人の意見を聞く前提で質問しております。
そこは質問に不備があり申し訳ない限りですが、経験された方であれば回答をいただけると嬉しいです。

お礼日時:2018/11/28 17:31

個人的には、


「C#を学ぶ」はC#で使えるライブラリを学ぶという感じでしょうか
一方「Cを学ぶ」は、自分でアルゴリズムを考え記述することを学ぶという感じでしょうか

C#を学ぶにあたって、学んでいてよかった言語、ですか。
独断と偏見で回答すると、
アルゴリズムを理解するという意味でstdio.h以外のライブラリを使わないで書かれたCのプログラムを読むこと/写経することでしょうかね。
    • good
    • 1

プログラムなんてどれも同じさ


VB だろうが JAVAだろうが
みんな書き方が少し違うだけ
    • good
    • 1
この回答へのお礼

そこまで突き詰められると、始める身としては参考のしようがありません(^_^;)

お礼日時:2018/11/27 22:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QC言語、関数を用いたプログラムがうまくいきません。

C言語で、以下の漸化式について
T(0)=1
T(1)=X             のとき

T(k+1)=2XT(k)-T(k-1)    (k = 0,1,2...,20)
を、kを20以下の自分の好きな値を入力して、計算を回して出力するプログラムを以前作りました。


以下にプログラムの内容と結果を書きます。
#include <stdio.h>
#include <math.h>

int main()
{
double x ;
int k ;
int K ;
double T[20] ;

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

T[0] = 1 ;
T[1] = x ;

for (k = 1; k < K; k++) {
T[k+1] = 2 * x * T[k] - T[k - 1];
}

for (k = 0; k <= K; k++) {
printf("T[%2d] = %f\n",k,T[k]);
}
return 0 ;
}

//結果//
k = 5
x = 2
T[ 0] = 1.000000
T[ 1] = 2.000000
T[ 2] = 7.000000
T[ 3] = 26.000000
T[ 4] = 97.000000
T[ 5] = 362.000000

k = 4
x = 3
T[ 0] = 1.000000
T[ 1] = 3.000000
T[ 2] = 17.000000
T[ 3] = 99.000000
T[ 4] = 577.000000


今回は上記のプログラムを、関数を使って作りました。
以下にプログラムの内容と結果を書きます。


#include <stdio.h>
#include <math.h>

double t[20];

double T(double x, int k)
{
if (k = 0)
{
return 1 ;
}

if (k = 1)
{
return x ;
}

else
{
return 2 * x * t[k] - t[k - 1];
}

}

int main()
{
double x ;
int k, K ;
double t[20];

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

for (k = 0; k <= K; k++)
{
printf("T[%2d] = %lf\n",k,T(x,k));
}
return 0;
}


//結果//
k = 5
x = 2
T[ 0] = 2.000000
T[ 1] = 2.000000
T[ 2] = 2.000000
T[ 3] = 2.000000
T[ 4] = 2.000000
T[ 5] = 2.000000

k = 4
x = 3
T[ 0] = 3.000000
T[ 1] = 3.000000
T[ 2] = 3.000000
T[ 3] = 3.000000
T[ 4] = 3.000000


このように、計算がうまくいきません。
何を直せばうまくいくかなど教えていただけると嬉しいです。
また、C言語、プログラミング初心者なので、わかりやすく丁寧に教えていただけると助かります。
よろしくお願いします。

C言語で、以下の漸化式について
T(0)=1
T(1)=X             のとき

T(k+1)=2XT(k)-T(k-1)    (k = 0,1,2...,20)
を、kを20以下の自分の好きな値を入力して、計算を回して出力するプログラムを以前作りました。


以下にプログラムの内容と結果を書きます。
#include <stdio.h>
#include <math.h>

int main()
{
double x ;
int k ;
int K ;
double T[20] ;

printf("k = ") ;
scanf("%d", &K) ;

printf("x = ") ;
scanf("%lf", &x) ;

T[0] = 1 ;
...続きを読む

Aベストアンサー

C言語における比較演算子は"=="
"="は代入演算子。
if文の()の中が全て"="になっていますね。これを全て"=="に変えましょう。

if(k=0)
はkに0を代入。そしてその代入した値がその式の値として評価されます。
つまり、k=0は偽として処理される。(C言語において式の値が"0"=偽)
kの値はこの時点で"0"になっている。

if(k=1)
kに1が代入される。そしてその式の値は"1"であり真(C言語において式の値が"0"以外=真)
真であるため、ifの後の{}中の式が実行される。return文なのでここでこの関数は終了される。
要するにxの値がそのまま出力される。
当然それ以下の式は実行されない。

QCのif文の書き方の質問です

『x=a & j=1 』の様に、『&』の前後に式を書くことがありますか?
使ったことがないので、ここに質問させて頂いております。
コメント、説明頂けますと大変有り難いです。

if stype=='L' then
x=a & j=1 //===
elseif stype=='M' then
x=a+(h/2) & j=2//============
else x=a+h & j=3//=================
end

以上、宜しくお願いします。

Aベストアンサー

見た目から、命令の区切りに使っているように見えますが、
公式マニュアルを確認しても ; や , はありましたが & は見つけられなかったので断言はできません。

https://help.scilab.org/docs/6.0.1/ja_JP/comma.html
https://help.scilab.org/docs/6.0.1/ja_JP/semicolon.html

Q構造体の勉強をしているのですが1と2は同じなのでしょうか?違うのでしょうか? もし違うならなぜ違うの

構造体の勉強をしているのですが1と2は同じなのでしょうか?違うのでしょうか?
もし違うならなぜ違うのか説明してください‼︎
よろしくお願いします。

1.typedef struct roll{メンバー};

2.typedef struct {メンバー}roll;

Aベストアンサー

「struct の直後に来るのが型でメンバーの後に来るのが新しい構造体の名前」の「型」と「構造体の名前」の違いってなんだろ.

さておき, これは typedef の仕様との関係がありますねぇ.

まず構造体の定義を完全に書くと
struct 構造体タグ メンバー定義 宣言子;
という形になります. ここで構造体タグは識別子, メンバー定義は
{ メンバーの宣言 }
という形で宣言子は変数やら配列やらポインタやらを表します. struct 以外は省略可能なのですが, 実際に意味を持つのは
・宣言子を省略する: 「struct 構造体タグ」で表される新しい構造体を定義する
・メンバー定義を省略する: 「struct 構造体タグ」で表される構造体型の変数などを宣言する
・構造体タグを省略する: 構造体タグがなんらかの理由で不要なときにはこの形式もあります
・メンバー定義と宣言子を省略する: 「struct 構造体タグ」で表される構造体型があることを宣言する
の 4つに限られます (全部省略しちゃダメなのは明らかだと思うけど). 再度確認しておくと, 「struct 構造体タグ」で 1つの型を表します.

質問文にある 2つの文を (typedef を除いて) 解釈するとそれぞれ
1. 宣言子を省略している. roll が構造体タグで, 「struct roll」という型を定義する
2. 構造体タグを省略している. roll は宣言子で, この場合は roll という変数を宣言する
となります. そして, *typedef がなければ*どちらも合法です (ただし, 当然ですが意味は違います).

で typedef の影響が出ます. typedef は
宣言子に含まれる識別子に対し, 「typedef がなければ与えられるはずの型」の別名として定義する
という働きをもちます. 例えば
int FOO, *Bar;
だと
・FOO は int型の変数
・Bar は int へのポインタ型の変数
なので, ここに typedef を付けた
typedef int FOO, *Bar;
では
・FOO は int型の別名
・Bar は int へのポインタ型の別名
となります. このように typedef では「別名を定義する」都合上, 宣言子はどうしても必須となります. 従って, 宣言子が省略された 1 はダメということになります.

「struct の直後に来るのが型でメンバーの後に来るのが新しい構造体の名前」の「型」と「構造体の名前」の違いってなんだろ.

さておき, これは typedef の仕様との関係がありますねぇ.

まず構造体の定義を完全に書くと
struct 構造体タグ メンバー定義 宣言子;
という形になります. ここで構造体タグは識別子, メンバー定義は
{ メンバーの宣言 }
という形で宣言子は変数やら配列やらポインタやらを表します. struct 以外は省略可能なのですが, 実際に意味を持つのは
・宣言子を省略する: 「struct 構造体タグ」...続きを読む

QC言語でエラーの直し方が分かりません。

x_i = cos ((PI*(2*i-1))/( 2*N )) i =1,2,...,N   (見づらくてすみません)

という式を計算して、結果を出力したいのですが、コンパイルできません。
自分で書いてみたプログラムとエラーを書いておくので、どこを直せばいいか教えてください。

#include <stdio.h>
#include <math.h>

#define PI 3.1415926535

double x_i(int i, int N)
{
for (i = 1 ; i <= N ; i++) {
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));

}
}

int main()
{
int i, N ;
printf("N= ");
scanf("%d", &N);
for (i = 1 ; i <= N ; i++) {

printf("x[%2d] = %f\n",i, x_i(i,N));

}

return 0 ;
}


C:\Users>gcc nnn.c
nnn.c: In function 'x_i':
nnn.c:9:16: error: lvalue required as left operand of assignment
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));
^


初心者なのでできれば丁寧に教えていただけると助かります。
よろしくお願いします。
結果は、
C:\Users>a
N = 5
x[ 1] = 0.951057
x[ 2] = 0.587785
x[ 3] = 0.000000
x[ 4] = -0.587785
x[ 5] = -0.951057

という風にしたいです。

x_i = cos ((PI*(2*i-1))/( 2*N )) i =1,2,...,N   (見づらくてすみません)

という式を計算して、結果を出力したいのですが、コンパイルできません。
自分で書いてみたプログラムとエラーを書いておくので、どこを直せばいいか教えてください。

#include <stdio.h>
#include <math.h>

#define PI 3.1415926535

double x_i(int i, int N)
{
for (i = 1 ; i <= N ; i++) {
x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));

}
}

int main()
{
int i,...続きを読む

Aベストアンサー

>以下のプログラムで正常に動いたので、これを関数に変えればいいと思っていたのですが、うまくいかず質問させていただいてるという流れです。

・ループはコール側でやっているので関数内でやる必要はない。
・ループで結果を表示しているので配列は関係ない。
ということで…

>double x_i(int i, int N)
>{
> for (i = 1 ; i <= N ; i++) {
>  x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));
> }
>}

は、
double x_i(int i, int N)
{
 return cos ((PI*(2*i-1))/( 2*N ));
}
になるだけなんじゃないですかね?


>int i[20];   //配列の指定の大きさ
>int N[20];
で、関数の方は
>double x_i(int i, int N)
で、コールは
>printf("x[%2d] = %f\n",i, x_i(i,N));

コールする時の第1引数と第2引数は配列を渡していますが、関数の仮引数の方と一致しません。
ということで、コンパイルエラーでしょう。

>x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));

既に指摘していますし、他の方からも回答ありますが、関数コールに対して値の代入はできません。
ので、こちらもコンパイルエラーでしょう。


>Nは5と決まっているわけではなくて、20までで自分で、自由に決めれるようにしたいです。

>printf("i = ");
>scanf("%d", &N);

iなのかNなのか不明ですが…
規定の範囲の値が入力されるまでループするようにすればよいかと。

do {
 printf("i = ");
 scanf("%d", &N);
} while((N < 0) || (N > 20));
とか?
# scanf()でのエラー処理していませんが。(数字以外を入力すると無限ループに堕ちるとか)

>以下のプログラムで正常に動いたので、これを関数に変えればいいと思っていたのですが、うまくいかず質問させていただいてるという流れです。

・ループはコール側でやっているので関数内でやる必要はない。
・ループで結果を表示しているので配列は関係ない。
ということで…

>double x_i(int i, int N)
>{
> for (i = 1 ; i <= N ; i++) {
>  x_i(i, N) = cos ((PI*(2*i-1))/( 2*N ));
> }
>}

は、
double x_i(int i, int N)
{
 return cos ((PI*(2*i-1))/( 2*N ));
}
になるだけなんじゃないですかね?
...続きを読む

QC言語のものなのですが、具体的にこの文がなにをしているかについてわからないので説明をお願いいたします

C言語のものなのですが、具体的にこの文がなにをしているかについてわからないので説明をお願いいたします。

Aベストアンサー

画像じゃなく、テキストで貼ってほしいところですが…。
で、掲示されている範囲ではs_copy()とs_reverse()の仕様が不明です。
# まぁ、名前からだいたい想像は付きますけども。

ということで、下記のページをどうぞ。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13182921508

Qc言語の課題がわかりません

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください。プログラムの途中経過と実行例を記しておきます。
#include<stdio.h>
int main(){
int x;
char a[256],b[256];

printf("Select Mode 1.Encryption, 2.Decryption :");
scanf("%d",&x);
if(a==1){
printf("Input passphrase :");
scanf("%s",a);
printf("Input key:");
scanf("%d",b);
}else{
printf("Input key:");
scanf("%d",b);

}

if(a==3){
printf("Invalid value\n");
}
return 0;
}
<実行例 1>
Select Mode 1.Encryption, 2.Decryption : 1
Input passphrase : password
Input key : $
TEWWSKV@
<実行例 2>
Select Mode 1.Encryption, 2.Decryption : 2
Input key : $
Code : TEWWSKV@
Decode : password
<実行例 3>
Select Mode 1.Encryption, 2.Decryption : 3
Invalid value

XOR を用いて文字列の暗号化及び暗号化された文字列の復号化をするプログラムを作成し,暗号化した文字列の結果は code.txt に出力し、復号化する際には code.txt からファイルを読み込んで復号化することとし、入力する文字列は最大で 9 文字までとする。暗号化および復号化には鍵として1つの文字用いる。鍵は暗号化の際に入力させ、復号化の際にも同じ鍵を用いる。暗号化は文字列の各文字ごとに鍵との間の XOR を取るものとする。と課題で出たのですが、自分には難しすぎて出来ません。どなたかおしえてください...続きを読む

Aベストアンサー

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

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

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf("Input passphrase : ");
scanf("%s", a);

printf("Input key: ");
scanf("%s", b);

} else if (x == 2) {
printf("Input key: ");
scanf("%s", b);

printf("Code : ");
scanf("%s", a);

printf("Decode : ");

} else {
printf("Invalid value\n");
return 0;
}

for (unsigned int i = 0; i < strlen(a); i++) {
r[i] = a[i] ^ b[0];
}

printf("%s\n", r);

return 0;
}

以下、ファイルの入出力を絡めると理解が遠のくので、
シンプルに、画面を通しての入出力動作をするものにしました。
forループの中で行っている1行が最も重要な箇所なので、じっくり理解して下さい。

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

int main() {
int x;
char a[9+1];
char b[1+1];
char r[9+1];

memset(a, 0x00, sizeof(a));
memset(b, 0x00, sizeof(b));
memset(r, 0x00, sizeof(r));

printf("Select Mode 1.Encryption, 2.Decryption : ");
scanf_s("%d", &x);
if (x == 1) {

printf(...続きを読む

QC言語でWEbアプリが作れますか?

C言語はあらゆるアプリの基礎と成っているのに、WEbアプリを作ろうとしても、どうすればよいか?わかりません。また、WEbアプリをC言語で開発する本も売ってない。なぜだろう

Aベストアンサー

C/C++言語によるCGIプログラミングの設計入門
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/

C言語はネットワーク向きとは思いません。
 ネットワーク関連なら今の時代、なにかしらのフレームワークを使うのではないだろうか。

Qこの写真のようになってしまうのは何故でしょうか?

この写真のようになってしまうのは何故でしょうか?

Aベストアンサー

該当のブツを試したことはありませんけども……。

https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code
内容的に細分化して、1つのGitリポジトリから分裂(?)している為、Adafruit-Raspberry-Pi-Python-Code.gitでは何も取得できないからじゃないですかね?

ADS1x15を使いたいなら…
https://github.com/adafruit/Adafruit_Python_ADS1X15
からではないでしょうか?
「Installation」のところに手順は書かれているので試してみてはどうでしょう?

Q再帰処理をループ処理に変換

趣味プログラマです。

このカテゴリ一個前の質問
https://oshiete.goo.ne.jp/qa/10782948.html
のご回答の中で
> 関数の再帰呼び出しは必ずループで置き換えられる
というものがありました。
このこと自体は、以前にも目にしたことがあるのですが、変換例はいずれも単純な再帰関数のものでした。

そこで質問なのですが2分木を辿るような再帰プログラムの場合は、どの様なループ処理に変換されるのか、教えてください。
具体的なソースをご提示いただければ嬉しいです(C言語でなくても有名どころの言語ならOKです)

また、その処理はメモリ使用の観点において、再帰よりも効率が良くなりますか?
個人的には、プログラム中にスタックの様なものを用意しなければならないので、あまり効率よくならない様な気がします。

ご回答よろしくお願い致します。

※以下は2分木の合計を再帰で求める例です。
----
#include <stdio.h>
#include <stdlib.h>

typedef struct Node_t Node;

struct Node_t {
int value;
Node* left;
Node* right;
};

Node* NewNode(int val){
Node* p = malloc(sizeof(Node));
p->value = val;
p->left = NULL;
p->right = NULL;
return p;
}

int Sum(Node* p){
int lsum = 0;
int rsum = 0;

if(p->left != NULL) lsum = Sum(p->left);
if(p->right != NULL) rsum = Sum(p->right);
return lsum + rsum + p->value;
}

int main() {
int sum = 0;
Node* header;
header = NewNode(10);
header->left = NewNode(20);
header->right = NewNode(30);
header->left->left = NewNode(40);
header->right->right = NewNode(50);

/*もっと深く2分木を作成 */

sum = Sum(header);
printf("%d\n", sum);

return EXIT_SUCCESS;
}
----

趣味プログラマです。

このカテゴリ一個前の質問
https://oshiete.goo.ne.jp/qa/10782948.html
のご回答の中で
> 関数の再帰呼び出しは必ずループで置き換えられる
というものがありました。
このこと自体は、以前にも目にしたことがあるのですが、変換例はいずれも単純な再帰関数のものでした。

そこで質問なのですが2分木を辿るような再帰プログラムの場合は、どの様なループ処理に変換されるのか、教えてください。
具体的なソースをご提示いただければ嬉しいです(C言語でなくても有名どころの言...続きを読む

Aベストアンサー

N分木の総舐めだとすると、こんな感じじゃないですか?
最初に言っておきますが、メモリ効率は平均的によろしくないです。
劣悪な(深い)木よりはましというレベルです。
平衡二分木のように随時木をメンテナンスしていれば別の方法の方が効率は良いと思います。
ただ、スタック領域のメモリ不足は少なくとも私の手元の環境ではエラー検出できませんが、
ヒープ領域のメモリ不足はエラー処理はできます。
DoS攻撃などで勝手に落ちられると困るので、
少なくとも蓄積データのフルダンプや全解放ごときで落ちる心配は取り去りたいという、
ささやかな、見る人によってはくだらないこだわりのような、しかし切実な問題です。

#define N 2
struct tree
{
struct tree *tr_parent; // 追加要素
struct tree *tr_next[N]; // データ構造の小修整
int tr_val;
int tr_ref; // 追加要素
};

int
sum_tree(struct tree *top)
{
struct tree *n, *prev;
int sum = 0;
int updown = 2;

for (n = top, n->tr_ref = 0, n->tr_parent = NULL, prev = n;
n != NULL;) {
if (updown == 0) {
// case down
n->tr_ref = 0;
n->tr_parent = prev;
}
if (n->tr_ref == N) {
sum += n->tr_val;
n = n->tr_parent;
updown = 1;
} else if (n->tr_next[n->tr_ref] == NULL) {
updown = 2;
n->tr_ref ++;
} else {
updown = 0;
prev = n;
n = n->tr_next[n->tr_ref];
prev->tr_ref ++;
}
}
return sum;
}

実際、再帰を使わないようにする変換方法の定式なんてないと思います。
しかし、再起でなければできない処理もなく、等価な別の処理方法はあると思います。

N分木の総舐めだとすると、こんな感じじゃないですか?
最初に言っておきますが、メモリ効率は平均的によろしくないです。
劣悪な(深い)木よりはましというレベルです。
平衡二分木のように随時木をメンテナンスしていれば別の方法の方が効率は良いと思います。
ただ、スタック領域のメモリ不足は少なくとも私の手元の環境ではエラー検出できませんが、
ヒープ領域のメモリ不足はエラー処理はできます。
DoS攻撃などで勝手に落ちられると困るので、
少なくとも蓄積データのフルダンプや全解放ごときで落ちる心配...続きを読む

Qsleep関数の原理について

sleep関数がPC内でどういった原理で一定時間おきに動作などを行っているのか教えてください。
「Linuxカーネルがどういう働きしている」「ハードがどういう動作している」とかです。

Aベストアンサー

>一定時間おきに動作などを行っているのか
確実にsleep関数で指定した時間はお休みしているだけであり、
厳密には「一定時間おき」に動作はしません。

・LinuxはマルチタスクOSである
・一定時間(確か100Hzだったと思います)ごとにタスク切り換えを行っている

この2点がわかっていれば、
>「Linuxカーネルがどういう働きしている」
は簡単ですよね。

「sleep関数で指定した時間は、タスク切り換えで自分にCPU時間を割り当てることはしない」というだけです。

>「ハードがどういう動作している」
特段ハードでは、sleep関数実現のために何もしていません。

<おまけ>
sleep関数を呼ばなくてもマルチタスクOS上のタスクは、
 ユーザの知らないタイミングで休み休み動いている
ということです。


人気Q&Aランキング