2735 - Insert Biti: Diferență între versiuni

De la Universitas MediaWiki
Fără descriere a modificării
Fără descriere a modificării
Linia 1: Linia 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.
* 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
Linia 22: Linia 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>

Versiunea de la data 9 aprilie 2023 12:52

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

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.")