• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program, który wyświetla kolejne wartości potęg dwójki 2^n, n>=0 i spełniające warunki 2^n < m.

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
3,569 wizyt
pytanie zadane 18 marca 2017 w C i C++ przez zozoxzozox977 Nowicjusz (190 p.)
Cześć, po wpisaniu granicy m, od której potęga do n-tej liczby 2 (np. m=8) ma być mniejsza, to wyświetla mi liczby aż do 16. Sami zweryfikujcie.

A konkretna tresc zadania to : Napisz program, który wyświetla kolejne wartości 2^n , gdzie n >= 0, spełniające warunek 2^n < m. Użyj operatorów bitowych.

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main()
{
    int liczba,i,potega;
    printf("Liczba, od ktorej kolejne potegi dwojki maja byc mniejsze: ");
    scanf("%d",&liczba);
    do
    {
        potega=pow(2,i);
        printf("%d\n",potega);
        i++;
    }
    while(potega<liczba);
    return 0;
}

3 odpowiedzi

0 głosów
odpowiedź 18 marca 2017 przez JKluseczka Obywatel (1,430 p.)
wybrane 18 marca 2017 przez zozoxzozox977
 
Najlepsza

"Użyj operatorów bitowych". A przyczyną Twojego problemu jest to, że sprawdzasz w pętli, czy liczba, którą przed chwilą wypisałeś jest mniejsza od granicy, a nie czy liczba, którą za chwilę wypiszesz jest mniejsza od granicy. Nie chcę Ci dawać gotowca, ale jak sam przeczytałem to co przed chwilą napisałem to tego nie ogarniam, także taka "mała" podpowiedź:

while((potega<<=1)<liczba)

 

komentarz 18 marca 2017 przez zozoxzozox977 Nowicjusz (190 p.)
Nie rozumiem. Jeśli użyje while zamiast do_while to powinno zadziałać ? I co do operatorów, to nie do końca wiem gdzie mam ich użyć w tym przykładzie
komentarz 18 marca 2017 przez zozoxzozox977 Nowicjusz (190 p.)
już wiem czemu mi wypisuje w tym do_while wieksza potege od granicy, ale nie wiem jak to naprawic :O
komentarz 18 marca 2017 przez JKluseczka Obywatel (1,430 p.)
ten kod co Ci wkleiłem jest prawie rozwiązaniem... pomyśl trochę
0 głosów
odpowiedź 18 marca 2017 przez mokrowski Mędrzec (158,660 p.)
edycja 18 marca 2017 przez mokrowski

#include <stdio.h>

long czytajLiczbe(void) {
    long liczba;
    printf("Podaj liczbę, od której kolejne potęgi liczby 2 mają być mniejsze: ");
    scanf(" %ld", &liczba);
    return liczba;
}

long potega2ki(long n) {
    /* Formuła z przesunięciem bitowym która dla: 2^0 == 1 */
    return (n == 0 ? 1 : 1 << n);
}

int main(void) {
    long potega;
    long licznik = 0;
    long liczba = czytajLiczbe(); 

    while((potega = potega2ki(licznik)) < liczba ) {
        printf("2^%ld = %ld\n", licznik++, potega);
    }
}
0 głosów
odpowiedź 18 marca 2017 przez zozoxzozox977 Nowicjusz (190 p.)
Wielkie dzięki, Panowie. Na pewno te podpowiedzi się przydadzą i zaraz coś z tego wyczarujemy ;>

Podobne pytania

0 głosów
1 odpowiedź 955 wizyt
0 głosów
1 odpowiedź 2,076 wizyt
pytanie zadane 22 marca 2017 w C i C++ przez Undisputed Gaduła (3,040 p.)
0 głosów
1 odpowiedź 476 wizyt

93,439 zapytań

142,431 odpowiedzi

322,677 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...