ページ 1 / 1
プログラム代行
Posted: 2015年3月10日(火) 16:47
by 炎王龍
プログラムについて
ポインタ、構造体、ファイル処理、2次元配列、switch文のなかから二種類以上
関数main含めて二種類以上
50行から100行まで
この条件でプログラム組める方いますか?
自分は四則計算できるプログラム作ろうと思ったのですがきつかったです。
Re: プログラム代行
Posted: 2015年3月10日(火) 17:15
by みけCAT
いるとは思いますが、課題の丸投げは禁止です。
フォーラムルールをお読みください。
Re: プログラム代行
Posted: 2015年3月10日(火) 17:23
by みけCAT
炎王龍 さんが書きました:ポインタ、構造体、ファイル処理、2次元配列、switch文のなかから二種類以上
関数main含めて二種類以上
50行から100行まで
この条件でプログラム組める方いますか?
とりあえずいることを示すため、条件を満たすプログラムを書いてみました。
コード:
void
sub
(
int
*
a
)
{
*
a
=
10
;
}
int
main
(
void
)
{
int
n
;
sub
(
&
n
)
;
switch
(
n
)
{
case
0
:
return
1
;
break
;
case
10
:
n
=
0
;
break
;
case
100
:
return
2
;
break
;
default
:
return
3
;
break
;
}
return
n
;
}
Re: プログラム代行
Posted: 2015年3月10日(火) 17:37
by 検索しましょう
Re: プログラム代行
Posted: 2015年3月11日(水) 02:23
by かずま
炎王龍 さんが書きました:
ポインタ、構造体、ファイル処理、2次元配列、switch文のなかから二種類以上
関数main含めて二種類以上
50行から100行まで
コード:
#include <stdio.h> // fopen, fgets, printf, puts, FILE
#include <stdlib.h> // strtod
#include <ctype.h> // isspace
typedef struct {
unsigned char c;
const char *p;
} Expr;
const char o[] = "+-*/";
int get(Expr *e)
{
do e->c = *e->p++; while (isspace(e->c));
return e->c;
}
double expr(Expr *e, const char *b)
{
double v;
if (*b)
for (v = expr(e, b+2); e->c == b[0] || e->c == b[1]; )
switch (e->c) {
case '+': v += expr(e, b+2); break;
case '-': v -= expr(e, b+2); break;
case '*': v *= expr(e, b+2); break;
case '/': v /= expr(e, b+2); break;
}
else
switch (get(e)) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9': case '.':
v = strtod(e->p-1, (char**)&e->p); get(e); break;
case '(': v = expr(e, o); e->c == ')' ? get(e) : (e->c = 1); break;
case '+': v = expr(e, b); break;
case '-': v = -expr(e, b); break;
default: v = e->c = 1;
}
return v;
}
int calc(const char *s, double *v)
{
Expr e;
e.p = s;
*v = expr(&e, o);
return e.c;
}
int main(int argc, char *argv[])
{
char buf[4][256]; double v; FILE *fp = stdin;
if (argc == 2) {
fp = fopen(argv[1], "r");
if (!fp) return 1;
}
while (fgets(buf[0], sizeof buf, fp) && buf[0][0] != '.')
calc(buf[0], &v) ? puts(" error") : printf(" %.15g <== %s", v, buf);
return 0;
}
どういう入力を与えたら、どういう実行結果になるのかを考えてください。
理解できない場合は、プログラムのどの部分が分からないのかを質問してください。
Re: プログラム代行
Posted: 2015年3月11日(水) 02:45
by 炎王龍
かずまさん
このプログラムは、このまま実行すると四則計算ができるプログラムですか?
Re: プログラム代行
Posted: 2015年3月11日(水) 10:57
by softya(ソフト屋)
かずまさんは、フォーラムルールをご熟読ください。
もし賛同できないことがあれば、Dixqさんと相談してください。
行動的にはフォーラムルールを無視されている様にしか見えません。
炎王龍さん。この掲示板では宿題代行は行っておりません。
ここで作り方について相談していただくことは出来ますが、他人任せで宿題をしてくれるのは知恵袋ぐらいだと思ってください。
よろしくお願いします。
Re: プログラム代行
Posted: 2015年3月11日(水) 11:10
by usao
オフトピック
>この条件でプログラム組める方いますか?
これが質問内容
>自分は…きつかったです。
ここは単なる自身の経験談
…ということで実は雑談なのかもしれない.
(タイトルが全然そうなってないけど)
Re: プログラム代行
Posted: 2015年3月11日(水) 11:51
by softya(ソフト屋)
オフトピック
まぁ、このまま出したところで本人が考えたんじゃないってレベルなのでモロバレなんですけどね。
会社の課題だったりしたら、自分で自分を追い込むことになりかねません。
Re: プログラム代行
Posted: 2015年3月11日(水) 22:05
by Dixq (管理人)
softyaさん
確かにかずまさんの投稿はフォーラムの方針とは違いますが、
回答者に回答の仕方を指図する権利は無いとフォーラムルールに記述しているので、
回答のやり方は自由にして頂いていいと思っています。
このようなやり取りが増えると丸投げも増えるでしょうけど・・。
炎王龍さん
名前を統一して投稿してください。
似た様なトピックを連立させないでください。
またフォーラムルールを守った投稿をお願いします。
もう一つのトピックの方に回答を書きますね。