2735 - Insert Biti: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: <nowiki>== Cerință ==</nowiki> 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. <nowiki>== Date de intrare ==</nowiki> Programul citește de la tastatură numerele <code>n</code>, <code>m</code> și <code>i</code>, separate prin sp...
 
No edit summary
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<nowiki>== Cerință ==</nowiki>
== 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 ==
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."


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.
== Restricții de precizări ==


Numerotare biților se face de la dreapta spre stânga începând de la 0.
* numerele '''n, m''' sunt se reprezintă pe 64 de biți, fără semn.


<nowiki>== Date de intrare ==</nowiki>
* pozițiile biților sunt indexate de la 0.


Programul citește de la tastatură numerele <code>n</code>, <code>m</code> și <code>i</code>, separate prin spații.
== Exemplul 1==
; Intrare
: 5
: 6
: 2
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 13


<nowiki>== Date de ieșire ==</nowiki>
== Exemplul 2 ==
; Intrare
: 10101
: 111
: 3
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: 53


Programul citește de la tastatură numerele <code>n</code>, <code>m</code> și <code>i</code>, separate prin spații.
== 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)


<nowiki>== Restricții de precizări ==</nowiki>


* numerele n, m sunt se reprezintă    pe 64 de biți, fără semn.
def lg_bit(n):
* pozițiile biților sunt indexate     de la 0.
     return n.bit_length()


<nowiki>== Exemplul 1==</nowiki>


<nowiki>;</nowiki> Intrare
def insertbiti(n, m, i):
    # Gasim poziția celui mai semnificativ bit de 1 din m
    poziția = lg_bit(m) - 1


<nowiki>:</nowiki> 5 6 2
    # Creăm o mască pentru a șterge biții lui n
    mask = (1 << i) - 1


<nowiki>;</nowiki> Ieșire
    # Ștergem biții lui n de la poziția i în stânga
    n &= mask


<nowiki>:</nowiki> Datele introduse corespund restricțiilor impuse.
    # Copiem biții lui m în n
    n |= (m >> (poziția + 1 - i)) << i


<nowiki>:</nowiki> 25
    # Returnăm n-ul rezultat
    return n


<nowiki>== Exemplul 2 ==</nowiki>


<nowiki>;</nowiki> Intrare
if __name__ == "__main__":
    n = input("Introduceti n: ")
    m = input("Introduceti m: ")
    i = input("Introduceti i: ")


<nowiki>:</nowiki> 10101 111 3
    if validare(n, m, i):
        n = int(n)
        m = int(m)
        i = int(i)


<nowiki>;</nowiki> Ieșire
        print("Datele introduse corespund restricțiilor impuse.")
        rezultat = insertbiti(n, m, i)
        print("Rezultatul este:", rezultat)


<nowiki>:</nowiki> Datele introduse corespund restricțiilor impuse.
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")


<nowiki>:</nowiki> 23
</syntaxhighlight>
 
<nowiki>== Rezolvare ver. 1 ==</nowiki>

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>