Vissza

Labor 4, haladóknak


Bitműveletek, összegek

I.
1. Írjuk ki 2 hatványait, bitműveletek segítségével.
2. Egy szövegállományban számpárok vannak: (x n). Minden egyes számpár esetében határozzuk meg xn értékét gyorshatványozással, az eredményt a számpárokkal együtt kiírva egy másik állományba.
3. Egy szövegállományban levő számok mindegyikére határozzuk meg a számok kettes számrendszerbeli alakját, bitműveleteket alkalmazva.


II.
1. Adott N db szám. Írjunk programot, mely meghatározza, a különböző összegeket, mely kigenerálható, ezeket a számokat egyszer felhasználva. Feltételezzük, hogy

Például:
N = 4, a számok: 8, 5, 3, 1
a lehetséges összegek: 1, 3, 4, 5, 6, 8, 9.

A feladat megoldásához alkalmazzunk bitműveleteket, megoldott feladatokat itt kaphatunk.

Példa:

összeg: 8                     1  2  3  4  5  6  7  8
8                             0  0  0  0  0  0  0  1

összeg: 13                   
1  2  3  4  5  6  7  8  9 10  11  12  13
5                             0  0  0  0  1  0  0  1  0  0   0   0   1
8, 5, 8+5


összeg:  16                   1  2  3  4  5  6  7  8  9 10  11  12  13  14  15  16
3                             0  0  1  0  1  0  0  1  0  0   1   0   1   0   0   1
8, 5, 13, 3, 8+3, 5+3, 13+3

összeg:  17                   1  2  3  4  5  6  7  8  9 10  11  12  13  14  15  16  17
1                             1  0  1  1  1  1  0  1  1  0   1   1   1   1   0   1   1
8, 5, 13, 3, 11, 16, 1, 8+1, 5+1, 13+1, 3+1, 11+1, 16+1


Megoldott feladat:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    unsigned char tomb[2] = {0};
    int i;
    //a tomb[0] bitjei: 0000 0000
    //a tomb[1] bitjei: 0000 0000

    i = 5;
    tomb[i/8] = tomb[i/8] | (1<<(i%8));
    printf("%d\n", tomb[0]);
    //a tomb[0] bitjei: 0010 0000, a szamerteke: 32
   
    i = 12;
    tomb[i/8] = tomb[i/8] | (1<<(i%8));
    printf("%d\n", tomb[1]);
    //a tomb[1] bitjei: 0001 0000, szamerteke: 16

    i = 7;
    tomb[i/8] = tomb[i/8] | (1<<(i%8));
    printf("%d\n", tomb[0]);
    //a tomb[0] bitjei: 1010 0000, szamerteke: 32+128 = 160
   
    system("pause");

    return 0;
}