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
- a maximális összeg, mely a számokból
képezhető nem nagyobb, mint 4 000 000,
- maximum 200, int típusú számom lehet.
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;
}