Zweierpotenzen (1, 2, 4, 8, 16, 32, ...) (Datentypen, Variablen und Ausdrücke)
Schreiben Sie ein Programm, das von einer gegebenen Zahl prüft, ob es sich um eine sog. Zweierpotenz handelt.
Zweierpotenzen sind die Zahlen, die durch mehrmaliges Verdoppeln der Zahl 1 zustande kommen (1, 2, 4, 8, und so weiter).
Eingabe: ganze, positive Zahl
Ausgabe: TRUE (wahr oder 1) bei Zweierpotenzen bzw. FALSE (fasch oder 0) bei allen anderen Zahlen.
1 Kommentare
22 Lösung(en)
- c
- c
- c
- lisp
- java
- cpp
- delphi
- pascal
- java
- perl
- c
- python
- javascript
- perl
- vb
- php
- abap
- csharp
- python
- c
- python
- csharp
int isGerade(long zahl) {
return ! (zahl & 1);
}
int is2PowRecursive(long zahl) {
if(0 == zahl || 1 == zahl) return 1; // true
return isGerade(zahl) && is2PowRecursive(zahl / 2);
}
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
// folgende spannende Lösung funktioniert, da
// C (und andere Sprachen) das sog. Zweierkomplement
// verwenden:
int is2PowBitwise(long zahl) {
return (zahl & -zahl) == zahl;
}
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
int isGerade(long zahl) {
return ! (zahl & 1);
}
int is2PowIterative(long zahl) {
if(0 == zahl) return 1; // true
while(isGerade(zahl)) {
zahl = zahl / 2;
}
return 1 == zahl;
}
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
(defun zweier-potenz-p (n)
"True, wenn n eine Zweierpotenz ist, sonst nil (false)."
(if (= n 0)
t
(multiple-value-bind (quotient reminder)
(floor (log n 2))
(equalp reminder 0.0))))
Lösung von: Stefan Meichtry (Erwachsenenbildung)
boolean istZweierpotenz(long x) {
double zweierLogarithmus = Math.log(x) / Math.log(2.0);
int gerundeterZweierLogarithmus = (int) (zweierLogarithmus + 0.5); // runden
return potenz(2, gerundeterZweierLogarithmus) == x;
}
long potenz(int basis, int exponent) {
if(0 >= exponent) {
return 1;
}
if(istGerade(exponent)) {
return potenz(basis * basis, exponent / 2);
} else {
return basis * potenz(basis * basis, (exponent - 1) / 2);
}
}
boolean istGerade(int x) {
return 0 == x % 2;
}
Lösung von: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)
// Autor: Andy Großhennig
// Solution for task: Zweierpotenzen (1, 2, 4, 8, 16, 32, ...) (Datentypen, Variablen und Ausdrücke)
#include <iostream>
using namespace std;
// Function: Go through the potency of two and check whether the numbers become the same
bool checkNumber(unsigned int &iNumber, bool &bIsSquare)
{
for(unsigned int iPower = 1;iPower <= iNumber;iPower *= 2)
{
if(iPower == iNumber) bIsSquare = true;
else bIsSquare = false;
}
return bIsSquare;
}
int main()
{
unsigned int iNumber;
bool bIsSquare = false;
string sResult;
cout << "Ganze, Positive Zahl eingeben: ";
cin >> iNumber;
cout << "\n\n";
bIsSquare = checkNumber(iNumber, bIsSquare);
if(bIsSquare) sResult = "eine";
else sResult = "keine";
cout << iNumber << " ist " << sResult << " Zweierpotenz\n";
cout << "\n\n";
system("Pause");
return 0;
}
Lösung von: Andy Großhennig (Bundeswehr)
// checks even and proof of last one
// http://www.softwareschule.ch
//
function isPowerof2(num: int64): boolean;
begin
result:= false;
while isEven(num) do
num:= num div 2;
if num= 1 then
result:= true;
end;
//add on:
function powerOf2(exponent: integer): int64;
var shifter: int64;
counter: integer;
begin
shifter:= 1;
for counter:= 1 to exponent do
shifter:= shifter + shifter;
result:= shifter;
end;
Lösung von: Max Kleiner (BFH)
program Zweierpotenz (input, output);
{ Programm fuer Zweierpotenz-Funtion }
var
pruefZahl: integer;
function testZweierPotenz (inTestZahl: integer): boolean;
{ testet ob sich bei der Zahl um eine sog. Zweierpotenz handelt. }
const
DURCHLAEUFE = 14;
type
tIndex = 1..DURCHLAEUFE;
var
i: tIndex;
Zaehler: integer;
gefunden: boolean;
begin
gefunden := false;
if (inTestZahl = 0) or (inTestZahl = 1) then
{ Sonderfall: Zahl = 0 oder 1 }
gefunden := true
else
begin
Zaehler := 1;
i := 1;
repeat
Zaehler := Zaehler * 2;
i := i + 1;
if inTestZahl = Zaehler then
gefunden := true
until (i = DURCHLAEUFE) or (Zaehler >= inTestZahl);
end; { inTestZahl = 0 }
testZweierPotenz := gefunden;
end; { testZweierPotenz }
begin
write('zu testende Zahl eingeben (max: 16.384): ');
read(pruefZahl);
writeln;
writeln('Das Ergebnis ist: ', testZweierPotenz(pruefZahl));
end. { Zweierpotenz }
Lösung von: Patrick Reif ()
import java.util.Scanner;
public class zweiterpotenzen {
// überprüft ob die Zahl eine Zweierpotenz ist
private boolean ueberpruefen(int zahl) {
// Wert der am Ende angibt ob Zweierpotenz oder nicht
boolean zweierpotenz = true;
// teilt so lange durch 2 bis das ergebniss 1 ist oder ein Rest entsteht
while (zahl > 1 || zahl == 0) {
if (zahl % 2 != 0 || zahl == 0) {
zweierpotenz = false;
break;
}
zahl = zahl / 2;
}
return zweierpotenz;
}
// Hauptmethode
public static void main(String[] args) {
// Klassenobjekt um auf die Methode zugreifen zu können
zweiterpotenzen tue = new zweiterpotenzen();
// Scanner um die Zahl einzulesen
Scanner scan = new Scanner(System.in);
System.out.println("Geben Sie die zu ueberpruefende Zahl an:");
// wertet das Ergebniss der Methode aus
if (tue.ueberpruefen(scan.nextInt())) {
System.out.println("Ihre Zahl ist eine Zweierpotenz");
} else {
System.out.println("Ihre Zahl ist keine Zweierpotenz");
}
}
}
Lösung von: Sebastian Littel ()
#!/usr/bin/env perl
#use Modern::Perl;
print "Bitte Zahl eingeben, bei der geprüft werden soll, ob es sich um eine Zweierpotenz handelt: ";
my $input = <STDIN>;
my $pow2 = 1;
my $bool = 1;
while ($input >= $pow2) {
if ($input == $pow2) {
print "TRUE\n";
$bool = 0;
last;
}
else {
$pow2 = $pow2 * 2;
}
}
if ($bool == 1) {
print "FALSE\n";
}
Lösung von: Patricia Beier ()
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
bool is_2pow( int64_t n );
bool is_int( double n );
int main(){
const int64_t i = 1024;
printf( "%d ist ", i );
if( ! is_2pow( i ) ) printf( "k" );
printf( "eine 2er Potenz\n", i );
}
bool is_2pow( int64_t n ){
if( n <= 0 ){
return false;
}
double l = log( n ) / log( 2 );
//wenn n eine Potenz von zwei ist,
//muss der 2er - Logarithmus eine Ganzzahl sein
return is_int( l );
}
bool is_int( double n ){
int64_t i = (int64_t) n;
return (n - i) == 0.0;
}
Lösung von: reeman :3 (TU Ilmenau)
#Zweierpotenzen
keine = 'eine'
eingabe=int(input("Geben Sie eine Zahl ein: "))
if eingabe == 1:
eingabe = 0
while eingabe > 1:
eingabe = eingabe / 2
modulo = eingabe % 2
if eingabe ==1:
keine = 'eine'
elif modulo > 0:
keine ='keine'
print ("Die eingegebene Zahl ist",keine,"Potenz von 2")
Lösung von: Name nicht veröffentlicht
function isPowerOfTwo(num) {
while (num > 1) num /= 2;
return (num == 1);
}
console.log(isPowerOfTwo(prompt("Geben Sie eine Zweierpotenz ein: ")));
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
use strict;
my $number = 0;
for(1..32){
++$number;
print "$number - ".isPow2($number)."\n";
}
sub isPow2 {
return(0) if($_[0] <= 0);
return(1) if($_[0] == 1);
for(1..6){
return(1) if($_[0] == 2**$_)
}
return(0);
}
Lösung von: Paul Scheinast (http://scheinast.eu)
Module Module1
Sub Main()
Console.WriteLine("Geben sie eine Zahl ein: ")
Dim x As Double = Convert.ToDouble(Console.ReadLine())
If istGerade(x) Then
If checkPotenz(x) Then
Console.WriteLine("True")
Else
Console.WriteLine("False")
End If
End If
Console.ReadLine()
End Sub
Public Function checkPotenz(x As Double) As Boolean
While x > 1
x /= 2
End While
If x = 1 Then
Return True
Else
Return False
End If
End Function
Public Function istGerade(number As Double) As Boolean
If number Mod 2 = 0 Then : Return True : Else : Return False : End If
End Function
End Module
Lösung von: Elias Zech (Optics Balzers)
HTML Code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="zweierpotenz.php" method="post">
<input type="number" min="0" name="num">Tragen Sie hier die Nummer ein<br></input>
<input type="submit" value="Abschicken" /><input type="reset" />
</form>
</body>
</html>
PHP-Code:
<?php
$xx = $_POST["num"];
$x = log($xx, 2);
$pos = strpos($x, ".");
if ($pos === false)
{
echo $xx . " ist eine Zweierpotenz";
}
else
{
echo $xx . " ist keine Zweierpotenz";
}
?>
Lösung von: Maik Scheiermann (Powercloud GmbH)
REPORT ZWEIERPOTENZ.
PARAMETERS lv_eing TYPE i.
DATA: lv_ausg TYPE string,
lv_ausg1 TYPE string,
lv_pruef TYPE i,
lv_erg TYPE c.
lv_ausg = 'Der Wert '.
lv_pruef = 2.
lv_erg = 0.
IF lv_eing <= 0.
lv_ausg1 = ' ist ungültig.'.
ELSEIF lv_eing = 1.
lv_erg = 1.
ELSE.
WHILE lv_pruef <= lv_eing.
IF lv_pruef = lv_eing.
lv_erg = 1.
lv_pruef = lv_pruef + 1.
ELSE.
lv_pruef = lv_pruef * 2.
ENDIF.
ENDWHILE.
IF lv_erg = 1.
lv_ausg1 = ' ist eine Zweierpotenz.'.
ELSE.
lv_ausg1 = ' ist keine Zweierpotenz.'.
ENDIF.
ENDIF.
WRITE:/ lv_ausg, lv_eing, lv_ausg1.
Lösung von: Name nicht veröffentlicht
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Zweierpotenzen
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Put in your number:");
int eingabe = Convert.ToInt32(Console.ReadLine());
int testnumber=1;
string wert = "FALSE";
for (int i = 0; i <= 9999; i++)
{
if (testnumber == eingabe)
{
wert = "TRUE";
break;
}
testnumber = testnumber * 2;
}
Console.WriteLine(wert);
Console.ReadLine();
}
}
}
Lösung von: lenergy lenergy (HTL)
from math import log
zweier = lambda x : True if log(x,2) % 1 == 0 else False
Lösung von: rob ert (tub)
#include <stdio.h>
int main()
{
int Wert;
int Start;
int erg;
erg=1;
printf("Eingabe bis zu welchen Wert addiert werden soll ");
scanf("%i",&Wert);
do{
Start=1;
Start=Start*erg;
printf("%i\n",Start);
erg=erg*2;
}while(erg<=Wert);
if(Start!=Wert)
{
printf("Die Zahl %i ist keine Zweiterpotenz",Wert);
}
else if(Start==Wert)
{
printf("Die Zahl %i ist eine Zweierpotenz",Wert);
}
return 0 ;
}
Lösung von: Name nicht veröffentlicht
eingabe = int(input("Geben Sie eine ganze, positive Zahl ein: "))
zahl = eingabe
isZweierpotenz = False
while zahl % 2 == 0:
zahl /= 2
if zahl == 1:
isZweierpotenz = True
if isZweierpotenz or eingabe == 1:
print(eingabe, "ist eine Zweierpotenz!")
else:
print(eingabe, "ist keine Zweierpotenz!")
Lösung von: Peter Pan (Home Office)
// NET 6.x | C# 10.x | VS-2022
// Variante 1
var isPowerOfTwo = (int n) => { while (n % 2 == 0) n >>= 1; return n == 1; };
Console.WriteLine(isPowerOfTwo(64));
// Variante 2
var isPowerOfTwo2 = (int n) => Math.Log(n, 2) % 1 == 0;
Console.WriteLine(isPowerOfTwo2(64));
Lösung von: Jens Kelm (@JKooP)
Verifikation/Checksumme:
Zweierpotenzen sind
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, ...
Bei allen anderen Zahlen soll Ihr Programm ausgeben, dass es sich nicht um eine Zweierpotenz handelt.
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Meta
Zeit: | 0.25 |
Schwierigkeit: | Leicht |
Webcode: | g378-zfif |
Autor: | Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch) |
Kommentare (1)