2735 - Insert Biti: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(5 intermediate revisions by 2 users not shown)
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.
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul citește de la tastatură numerele '''n, m și i''', separate prin spații. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
 
== 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
: 5 6 2
: 5  
: 6  
: 2
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 25
: 13
 
== Exemplul 2 ==
== Exemplul 2 ==
; Intrare
; Intrare
: 10101 111 3
: 10101  
: 111  
: 3
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele introduse corespund restricțiilor impuse.
: 23
: 53
 
== Rezolvare ver. 1 ==
== Rezolvare ver. 1 ==
<syntaxhighlight lang="python" line="1" start="1">
def validare(n, m, i):
    return n.isdigit() and m.isdigit() and i.isdigit() and 1 <= int(n), int(m), int(i) <= pow(2, 63)
def lg_bit(n):
    return n.bit_length()
def insertbiti(n, m, i):
    # Gasim poziția celui mai semnificativ bit de 1 din m
    poziția = lg_bit(m) - 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
    # Returnăm n-ul rezultat
    return n
if __name__ == "__main__":
    n = input("Introduceti n: ")
    m = input("Introduceti m: ")
    i = input("Introduceti i: ")
    if validare(n, m, i):
        n = int(n)
        m = int(m)
        i = int(i)
        print("Datele introduse corespund restricțiilor impuse.")
        rezultat = insertbiti(n, m, i)
        print("Rezultatul este:", rezultat)
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>

Latest revision as of 08:17, 25 April 2023

Cerință[edit | edit source]

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[edit | edit source]

Programul citește de la tastatură numerele n, m și i, separate prin spații.

Date de ieșire[edit | edit source]

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul citește de la tastatură numerele n, m și i, separate prin spații. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții de precizări[edit | edit source]

  • 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[edit | edit source]

Intrare
5
6
2
Ieșire
Datele introduse corespund restricțiilor impuse.
13

Exemplul 2[edit | edit source]

Intrare
10101
111
3
Ieșire
Datele introduse corespund restricțiilor impuse.
53

Rezolvare ver. 1[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1"> def validare(n, m, i):

   return n.isdigit() and m.isdigit() and i.isdigit() and 1 <= int(n), int(m), int(i) <= pow(2, 63)


def lg_bit(n):

   return n.bit_length()


def insertbiti(n, m, i):

   # Gasim poziția celui mai semnificativ bit de 1 din m
   poziția = lg_bit(m) - 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
   # Returnăm n-ul rezultat
   return n


if __name__ == "__main__":

   n = input("Introduceti n: ")
   m = input("Introduceti m: ")
   i = input("Introduceti i: ")
   if validare(n, m, i):
       n = int(n)
       m = int(m)
       i = int(i)
       print("Datele introduse corespund restricțiilor impuse.")
       rezultat = insertbiti(n, m, i)
       print("Rezultatul este:", rezultat)
   else:
       print("Datele introduse nu corespund restricțiilor impuse.")

</syntaxhighlight>