質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

6回答

678閲覧

条件分岐をしようせずに分岐を処理する方法

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

0クリップ

投稿2020/05/14 03:20

M棟あるいはN棟の部屋番号を2つ入力として読み込み,何階層エレベータで移動する必要があるかを出力するプログラムを変数宣言と四則演算,printf, scanfのみを用いて作成する方法を考えています。

例えば、入力はM407 N402

同じ棟ならば差を取ればエレベーターの移動階数が分かるため、difという変数で最後の数字部分を代入し求めることができると分かりました。

条件分岐と類似した処理を数値計算だけで表現する方法が分りません。

棟番号が同じかどうかを判別し、棟が同じならば階数の差を、棟が異なるならば階数の和をとれば良い事までは理解しています。

C

1// 値の設定 2 char num; 3 int num1, num2; 4 scanf("%c%1d%2d", &num, &num1, &num2); 5 6 char numb; 7 int numb1, numb2; 8 scanf(" %c%1d%2d", &numb, &numb1, &numb2); 9 10 // 計算 11 12 int dif = (num2 - numb2); 13 14 // 出力 15 printf("%d\n",dif); 16 return 0;
etsuhisa👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2020/05/14 03:36

なんでそんな"ひねくれた"ことしたいんですか?
etsuhisa

2020/05/14 03:54

階数はnum1、numb1のほうではないでしょうか? Num2、numb2はその階の部屋番号が一般的と思います。
guest

回答6

0

dif の符号は気にされていないようなので

c

1 int a = num - numb; 2 a = a * a * 2 - 1; //同棟なら-1, 異棟なら+1 3 int dif = (numb1 + num1 * a);

投稿2020/05/14 06:23

jimbe

総合スコア12632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

すでに終わってしまっていた...
フラグとか絶対値は四則演算で可能です。キャストを使えばですが。

C

1 //棟が同じ:-1、違う:+1 2 x = ((int)((num - numb) / (num - numb - 0.1)) + (int)((numb - num) / (numb - num - 0.1))) * 2 -1; 3 //棟が同じなら加算、違うなら減算 4 dif = num1 + numb1 * x; 5 //絶対値にする 6 dif *= (int)(dif / (dif - 0.1)) * 2 - 1; 7

投稿2020/05/14 10:45

etsuhisa

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

三項演算子使ってよいのか・・・

fanaさんの回答と同じですが。
いくつか入力に条件つきであれば。

入力はMx Nyとする(もしくはMx My、Nx Ny)別棟の場合どちらが先に入力されるか決める必要あり
※要は、char('M'か'N')の差が0か1になるような入力とする(0 or -1でもいいが0、1、-1は混在させない)

同棟の場合、x >= y とする。最初の入力が高階層。
char('M'か'N')の差をZとすると

x - y + 2yZ

で、zが0(同棟)の場合、x - y、
zが1(異棟)の場合、x + y

になります。

って、せっかく考えたのに・・・悔しいから回答する。

投稿2020/05/14 05:37

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2020/05/14 05:39

どうでもいいが、グランドフロアがあるわけじゃないなら N001からM001の移動は、2じゃなくて0だと思うのだが・・・
momon-ga

2020/05/14 05:42

fanaさんが回答してた・・・
fana

2020/05/14 05:48

とりあえず棟の差は絶対値が1なので2乗しちゃえばOKですが,階の差の方がどうにも面倒ですね.
momon-ga

2020/05/14 05:52

おお、2乗するのか!スルドイ。
退会済みユーザー

退会済みユーザー

2020/05/14 08:48

非常に分かりやすかったです。 ありがとうございます。
episteme

2020/05/14 11:39

↑なんだよソレ。 分かりやすいのを善しとするなら 素直に条件分岐使うのがいっちばん分かりやすいじゃねぇの。
fana

2020/05/15 00:19

謎の縛りプレイ課題が流行っているんですかね?
guest

0

棟を示すchar('M'か'N')の差あたりを用いて計算式を作れば良いのではないですかね.

absを使えれば簡単に思うけども,absって

四則演算

で作れるのかな?


絶対値を求める関数ABS()を作れるとすれば,以下のような感じでやれる.

IsOtherBuilding = ABS( num - numb ); //棟が違えば1, 同じなら0 IsSameBuilding = 1 - IsOtherBuilding; Ans1 = ABS( num1 - numb1 ); //棟が同じ場合の答え Ans2 = ABS( num1 + numb1 ); //棟が異なる場合の答え Ans = IsSameBuilding*Ans1 + IsOtherBuilding*Ans2; //最終的な答え

投稿2020/05/14 03:57

編集2020/05/14 05:27
fana

総合スコア11652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/05/14 05:29

おっと,Ans2にはABSは要らねぇな.
guest

0

条件分岐なしでは無理だと思います。
int dif = num2 +(num-numb ? numb2 :-numb2);
くらいの条件分岐が必要です。
(負値が出るのは構いませんよね)

投稿2020/05/14 03:47

編集2020/05/14 03:50
PingHermit

総合スコア478

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/05/14 05:38

さすがに dif の値が負になるのはどうなのか,と.
PingHermit

2020/05/14 06:36

まあ、条件分岐わずにという問題なので。 棟の名前も1差とは限らないし、基本無理でしょ。 そのあたりは、どっちでもいい事です。
PingHermit

2020/05/14 06:37

>わずに 使わずに (^^;
fana

2020/05/14 06:53

んー,まぁ,三項演算子でBA付いて終了な時点でもうね,という話ではある.
PingHermit

2020/05/14 07:00

まあ、そんなもんでしょ、 このくらいで質問しなきゃいけない人は(^^;
退会済みユーザー

退会済みユーザー

2020/05/14 08:50 編集

日本語が適当ではありませんでした。 ご指摘ありがとうございます。 以後気を付けます。
guest

0

「三項演算子は条件分岐ではない(使っていい)」なら

階数 = (棟が同じ) ? 階数の差 : 階数の和

投稿2020/05/14 03:43

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問