2735 - Insert Biti: Difference between revisions

From Bitnami MediaWiki
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.
* 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):

  1. Gasim poziția celui mai semnificativ bit de 1 din m
   poziția = m.lg_bit() - 1
  1. Creăm o mască pentru a șterge biții lui n
   mask = (1 << i) - 1
  1. Ștergem biții lui n de la poziția i în stânga
   n &= mask
  1. Copiem biții lui m în n
   n |= (m >> (poziția + 1 - i)) << i
  1. 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>