C# :: Aufgabe #366

6 Lösungen Lösungen öffentlich

Zweierpotenz (Power Of Two)

Anfänger - C# von JKooP - 06.03.2021 um 11:51 Uhr
Erstelle eine Methode/Funktion, mit der man bestimmen kann,
ob die übergebene Zahl als Ganzzahl- Potenz (Integer) zur Basis 2 geschrieben werden kann.

Beispiele:

Zahl: 1 => true
Lösung: 0, denn 2 hoch 0 = 1

Zahl: 16 => true
Lösung: 4, denn 2 hoch 4 = 16

Zahl: 3 => false
Lösung: keine, da keine Ganzzahl zur Basis 2 die Zahl 3 ergibt

Für Fortgeschrittene:
Die Aufgabe ohne Zuhilfenahme der eingebauten Logarithmusfunktionen lösen.

Viel Spaß

Lösungen:

vote_ok
von JakS (230 Punkte) - 08.03.2021 um 12:45 Uhr
Quellcode ausblenden C#-Code
    class Program
    {
        static void Main(string[] args)
        {
            int basis = 2;
            int z = 256;
            int r = IsBasis(z, basis);
            if (r > -1)
                Console.WriteLine("Zahl {0} => true, Lösung {1}", z, r);
            else
                Console.WriteLine("Zahl {0} => false, keine Lösung", z);
        }

        static int IsBasis(int z, int bas)
        {
            int ret = -1;
            int a = 0;
            int i = 0;

            if (a < z)
            {
                while (a < z)
                {
                    a = (int)Math.Pow(bas, i);
                    if (a == z)
                        ret = i;
                    else
                        i++;
                }
            }
            
            return ret;
        }
    }
vote_ok
von Waldgeist (2270 Punkte) - 08.03.2021 um 20:41 Uhr
Hallo,

beigefügt meine Lösung:

Quellcode ausblenden C#-Code
using System;

namespace _366_Zweierpotenz
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            double eingabe = 0;
            double ergebnis = 0;
            int vergleich = 0;

            Console.WriteLine("Gib eine Zahl ein: ");
            eingabe = double.Parse(Console.ReadLine());
            ergebnis = Math.Log2(eingabe);

            vergleich = (int)ergebnis;

            if (vergleich == ergebnis)
            {
                Console.WriteLine($"Es ist möglich die eingegebene Zahl " + eingabe + " als Ganzzahl Potenz zur Basis 2 zu schreiben");
                Console.WriteLine($"Das Ergebnis lautet " + ergebnis);
                Console.WriteLine($"Denn 2 hoch " + ergebnis + " = " + eingabe);
            }
            else
            {
                Console.WriteLine($"Es ist leider nicht möglich die eingebe Zahl " + eingabe + " als Ganzzahl Potenz zur Basis 2 zu schreiben");
            }
        }
    }
}
vote_ok
von Nerv28 (80 Punkte) - 09.03.2021 um 10:24 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Zweierpotenz
{
    class Program
    {
        static void Main(string[] args)
        {
            double dEingabe = 0, dTemp = 0;
            bool bTemp = false;
            while (bTemp == false)
            {
                Console.WriteLine("Bitte geben Sie eine Zahl ein.");
                if (!double.TryParse(Console.ReadLine(), out dEingabe)) { Console.Clear(); Console.WriteLine("Bitte geben Sie nur Zahlen ein!"); } else { bTemp = true; }
            }
            dTemp = Math.Round(Math.Pow(dEingabe, 0.5), 1);
            Console.Write("Lösung: ");
            if (dTemp * dTemp != dEingabe) { Console.WriteLine($"keine, da keine Ganzzahl zur Basis 2 die Zahl {dEingabe} ergibt."); } 
            else { Console.WriteLine($"{dTemp}, denn 2 hoch {dTemp} = {dEingabe}"); }
            Console.ReadLine();
        }
    }
}

vote_ok
von dany_mue (240 Punkte) - 18.03.2021 um 22:17 Uhr
Quellcode ausblenden C#-Code
using System;

namespace TJP_PowerOfTwo
{
	class Program
	{
		static void Main(string[] args)
		{
			for (int i = 0; i <= 10000000; i++)
			{
				if (CheckValue(i))
					Console.WriteLine(i);
			}
		}

		private static bool CheckValue(int _value)
		{
			if (Math.Log2((double)_value) % 1 == 0)
				return true;

			return false;			
		}
	}
}
vote_ok
von l.viktor02 (60 Punkte) - 28.03.2021 um 15:33 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace Test_ordner
{
    class Program
    {
        static void Main()
        {
			Console.WriteLine("Geben Sie eine Zahl ein:");
			int Eingabe = Convert.ToInt32(Console.ReadLine());
			Potenz(Eingabe);   

        }

        public static void Potenz(int Zahl)
        {

			if (Zahl % 2 > 0 || Zahl % 2 == 0)
			{
				if (Zahl % 2 > 0 && Zahl !=1)
				{
					Console.WriteLine("Zahl: " + Zahl + " =>false. " + "Lösung: keine, da keine Ganzzahl zur Basis 2 die Zahl " + Zahl + " ergibt.");
				}


				if (Zahl % 2 == 0 && Zahl != 0)
				{

					if (Zahl == 2 || Zahl == 4 || Zahl == 8 || Zahl == 16 || Zahl == 32 || Zahl == 64 || Zahl == 128 || Zahl == 256 || Zahl == 512 || Zahl == 1024 || Zahl == 2048)
					{
						int runde = 0;

						for (int i = 1; i < Zahl; i = i * 2)
						{
							runde = runde + 1;
						}
						Console.WriteLine("Zahl: " + Zahl + " =>true. " + "Lösung: " + runde + " , denn 2 hoch " + runde + " = " + Zahl);
					}
					else
					{

						Console.WriteLine("Zahl: " + Zahl + " =>false. " + "Obwohl mit 2 teilbar ist." + "Lösung: keine, da keine Ganzzahl zur Basis 2 die Zahl " + Zahl + " ergibt.");
					}
				}
			}
					if (Zahl == 1 || Zahl == 0)
					{
						if (Zahl == 1)
						{
					Console.WriteLine("Zahl: " + Zahl + " =>true. " + "Lösung: " + 2 + " , denn 2 hoch " + 1 + " = " + Zahl);
						}
						if (Zahl == 0)
						{
					Console.WriteLine("Zahl: " + Zahl + " =>true. " + "Lösung: " + 1 + " , denn 2 hoch " + 0 + " = " + 1);
						}
					}
		}
    }
}


Fehlermeldung:

Hallo, das ist meine erste eingereichte Lösung überhaupt im Programmieren. Bitte sei mit mir nachsichtig. Ich versuche mich verbessern, und eine bessere Lösung finden. Ich freue mich auf eine Rückmeldung, es würde mich weiter motivieren. Lg

vote_ok
von JKooP (11680 Punkte) - 31.03.2021 um 18:37 Uhr
NET 5.x; C# 9.x; VS-2019

Quellcode ausblenden C#-Code
using System;
Console.WriteLine(IsPowerOfTwo(17));


Lösung 1 (Log):
Quellcode ausblenden C#-Code
static bool IsPowerOfTwo(int n) => Math.Round(Math.Log(n, 2), 10) % 1 == 0;


Lösung 2:
Quellcode ausblenden C#-Code
static bool IsPowerOfTwo(int n)
{
    if (n == 0) return false;
    while (n % 2 == 0) n /= 2;
    return n == 1;
}