2735 - Insert Biti: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
== Cerință == | == Cerință == | ||
Se citesc trei numere naturale n m i. Să se schimbe valorile biților lui n de la poziția i spre stânga, cu valorile biților lui m de la 0 până la cel mai semnificativ bit de 1 din m și apoi să se afișeze n. | Se citesc trei numere naturale '''n m i'''. Să se schimbe valorile biților lui '''n''' de la poziția '''i''' spre stânga, cu valorile biților lui '''m''' de la 0 până la cel mai semnificativ bit de 1 din '''m''' și apoi să se afișeze '''n'''.Numerotare biților se face de la dreapta spre stânga începând de la 0. | ||
Numerotare biților se face de la dreapta spre stânga începând de la 0. | |||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numerele n, m și i, separate prin spații. | Programul citește de la tastatură numerele '''n, m și i''', separate prin spații. | ||
== Date de ieșire == | == Date de ieșire == | ||
Programul citește de la tastatură numerele n, m și i, separate prin spații. | Programul citește de la tastatură numerele '''n, m și i''', separate prin spații. | ||
== Restricții de precizări == | == Restricții de precizări == | ||
* numerele '''n, m''' sunt se reprezintă pe 64 de biți, fără semn. | |||
* pozițiile biților sunt indexate de la 0. | |||
== Exemplul 1== | == Exemplul 1== | ||
; Intrare | ; Intrare | ||
Line 22: | Line 24: | ||
: 23 | : 23 | ||
== Rezolvare ver. 1 == | == Rezolvare ver. 1 == | ||
<syntaxhighlight lang="python" line="1" start="1"> | |||
def validare(n, m, i): | |||
return all.isdigit() and 1 <= int(n), int(m), int(i) <= 64 | |||
def insertbiti(n, m , i): | |||
# Gasim poziția celui mai semnificativ bit de 1 din m | |||
poziția = m.lg_bit() - 1 | |||
# Creăm o mască pentru a șterge biții lui n | |||
mask = (1 << i) - 1 | |||
# Ștergem biții lui n de la poziția i în stânga | |||
n &= mask | |||
# Copiem biții lui m în n | |||
n |= (m >> (poziția + 1 - i)) << i | |||
# Afișăm n-ul rezultat | |||
print("Rezultatul este:", n) | |||
if __name__ == "__main__": | |||
n = int(input("Introduceti n: ")) | |||
m = int(input("Introduceti m: ")) | |||
i = int(input("Introduceti i: ")) | |||
if validare(n, m, i): | |||
n = int(n) | |||
m = int(m) | |||
i = int(i) | |||
print("Datele introduse corespund restricțiilor impuse.") | |||
insertbiti(n, m, i) | |||
else: | |||
print("Datele introduse nu corespund restricțiilor impuse.") | |||
</syntaxhighlight> |
Revision as of 12:52, 9 April 2023
Cerință
Se citesc trei numere naturale n m i. Să se schimbe valorile biților lui n de la poziția i spre stânga, cu valorile biților lui m de la 0 până la cel mai semnificativ bit de 1 din m și apoi să se afișeze n.Numerotare biților se face de la dreapta spre stânga începând de la 0.
Date de intrare
Programul citește de la tastatură numerele n, m și i, separate prin spații.
Date de ieșire
Programul citește de la tastatură numerele n, m și i, separate prin spații.
Restricții de precizări
- numerele n, m sunt se reprezintă pe 64 de biți, fără semn.
- pozițiile biților sunt indexate de la 0.
Exemplul 1
- Intrare
- 5 6 2
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 25
Exemplul 2
- Intrare
- 10101 111 3
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 23
Rezolvare ver. 1
<syntaxhighlight lang="python" line="1" start="1"> def validare(n, m, i):
return all.isdigit() and 1 <= int(n), int(m), int(i) <= 64
def insertbiti(n, m , i):
- Gasim poziția celui mai semnificativ bit de 1 din m
poziția = m.lg_bit() - 1
- Creăm o mască pentru a șterge biții lui n
mask = (1 << i) - 1
- Ștergem biții lui n de la poziția i în stânga
n &= mask
- Copiem biții lui m în n
n |= (m >> (poziția + 1 - i)) << i
- Afișăm n-ul rezultat
print("Rezultatul este:", n)
if __name__ == "__main__":
n = int(input("Introduceti n: ")) m = int(input("Introduceti m: ")) i = int(input("Introduceti i: "))
if validare(n, m, i):
n = int(n) m = int(m) i = int(i)
print("Datele introduse corespund restricțiilor impuse.") insertbiti(n, m, i)
else:
print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>