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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1028閲覧

switch文で入力された値が平方数かそうでないか、判別したい

hillclub

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/10/14 10:06

編集2018/10/14 10:45

switch文について、ある問題があるのですが解答例だと定数なので、
全ての平方数に対応したコードを作ってみたいのですが、その場合どのようになるでしょうか?
調べたらC#7のパターンマッチングやMath.Sqrtを使うような感じかと思うのですが、
今日一日やってもうまくビルドできなかったので、
何か教えてほしいです。できればコード例でよろしくお願いします。

#問題文

switch 文を使って150以下の平方数(4=2×2、9=3×3、16=4×4というように、ある整数の二乗になっている数)

を判別するプログラムを作成せよ。
ユーザに整数値を1つ入力してもらい、 判別結果を出力するものとする。
ヒント: 要するに、ユーザからの入力が 1, 4, 9, 16, ・・・になっているかどうかを switch 文で判別します。

#####解答例

c#

1using System; 2 3class Exercise 4{ 5 static void Main() 6 { 7 Console.Write("整数を入力してください: "); 8 int n = int.Parse(Console.ReadLine()); 9 10 switch (n) 11 { 12 case 1: 13 Console.Write("{0} は平方数です。\n", n); 14 break; 15 case 2 * 2: goto case 1; 16 case 3 * 3: goto case 1; 17 case 4 * 4: goto case 1; 18 case 5 * 5: goto case 1; 19 case 6 * 6: goto case 1; 20 case 7 * 7: goto case 1; 21 case 8 * 8: goto case 1; 22 case 9 * 9: goto case 1; 23 case 10 * 10: goto case 1; 24 case 11 * 11: goto case 1; 25 case 12 * 12: goto case 1; 26 default: 27 Console.Write("{0} は平方数ではないか、150以上です\n", n); 28 break; 29 } 30 } 31}

自分の解答

c#

1 class Switch3 2 { 3 public static void Main() 4 { 5 int x = int.Parse(Console.ReadLine()); 6 7 8 9 10 const int BLOCK1 = 1; 11 int i = BLOCK1; 12 //int y = (int)Math.Sqrt(x); 13 //case int n when n< 1: return 0; 14 15 16 switch (i) 17 { 18 case BLOCK1 : 19 Console.WriteLine("平方数ではありません"); 20 break; 21 22 default: 23 Console.WriteLine("平方数です"); 24 break; 25 } 26 27 28 } 29 }

(ufcpp 問題3:平方根)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/10/14 10:14

うまくビルドできなかったってどういう意味でしょう?
退会済みユーザー

退会済みユーザー

2018/10/14 10:15

後、最終的に何を聞きたいのかが分かりません。何をやってどううまく行かなかったのか書かないと、これでは分からないからソースくれとしか見られません。
hillclub

2018/10/14 10:47

中途半端なコードですいません。色々試しすぎて自分でも整理できていません。コード例が知りたいです。
guest

回答2

0

自己解決

たぶんできました。中途半端に質問してしまいすいません。

平方数かそうでないか(TrueかFalse)なので型比較(intかdouble)しました。
調べてC#7のcase式のwhenにてcastと併用できました。
case 型 変数 when (cast)条件式:

c#

1 2 class Switch3 3 { 4 public static void Main() 5 { 6 Console.WriteLine("数値を入力してください\n"); 7 double x = Double.Parse(Console.ReadLine()); 8 9 x = (double)Math.Sqrt(x); 10 //Console.WriteLine("{0:#.#}", x); 11 12 13 switch (x) 14 { 15 case double n when (int)n != x: 16 17 Console.WriteLine("平方数ではありません"); 18 break; 19 20 default: 21 Console.WriteLine("平方数です"); 22 break; 23 } 24 25 } 26 }

投稿2018/10/14 16:52

hillclub

総合スコア33

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

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

0

勘で適当に書かずリファレンスで文法を確認してください。
switch (C# リファレンス)
それとエラーメッセージは読んでください。

投稿2018/10/14 10:15

Zuishin

総合スコア28660

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

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

hillclub

2018/10/14 10:52

回答有り難うございます。 仰る通りです。ただの文法漏れだったりします。 自分でもあれこれ試しているうちに質問してしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問