2577 - Get Bit: Diferență între versiuni
De la Universitas MediaWiki
Fără descriere a modificării |
|||
Linia 31: | Linia 31: | ||
# Funcție de validare a datelor de intrare | # Funcție de validare a datelor de intrare | ||
# Verificăm dacă T este între 0 și 1000, iar n și b conțin numere între 0 și 2^63 - 1 și respectiv 0 și 63 | # Verificăm dacă T este între 0 și 1000, iar n și b conțin numere între 0 și 2^63 - 1 și respectiv 0 și 63 | ||
return 0 <= int(T) <= 1000 and all(0 <= int(num) <= 2**63 - 1 for num in n) and all(0 <= int(bit) <= 63 for bit in b) | return 0 <= int(T) <= 1000 and all(0 <= int(num) <= 2 ** 63 - 1 for num in n) and all( | ||
0 <= int(bit) <= 63 for bit in b) | |||
def getbit(T, n, b): | def getbit(T, n, b): | ||
Linia 37: | Linia 39: | ||
for i in range(T): | for i in range(T): | ||
bit_val = (n[i] & (1 << b[i])) >> b[i] | bit_val = (n[i] & (1 << b[i])) >> b[i] | ||
print(bit_val) | print(bit_val, end=" ") | ||
if __name__ == "__main__": | |||
# Funcția principală a programului | # Funcția principală a programului | ||
T = input("Introduceți numărul de perechi de număr, bit: ") | T = input("Introduceți numărul de perechi de număr, bit: ") | ||
Linia 56: | Linia 59: | ||
else: | else: | ||
print("Datele introduse nu corespund restricțiilor impuse.") | print("Datele introduse nu corespund restricțiilor impuse.") | ||
</syntaxhighlight> | </syntaxhighlight> |
Versiunea curentă din 30 aprilie 2023 11:43
Cerință
Se dau mai multe perechi de forma număr, bit. Afișați pentru fiecare pereche valoarea bitului corespunzător din reprezentarea internă pe 64 de biți a numărului dat.
Date de intrare
Programul citește de la tastatură numărul T, iar apoi T linii care conțin, fiecare, câte două numere separate prin spațiu n și b cu semnificația că se cere valoarea bitului de pe poziția b din reprezentarea internă a numărului n.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." Programul va afișa pe ecran, neseparate prin spațiu, cele T valori, determinate, în ordinea dată. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."
Restricții de precizări
- numerele n sunt memorate cu tipul de date pe 64 de biți, cu semn
- numărul b este natural, cuprins între 0 și 63, inclusiv
Exemplul 1
- Intrare
- 2
- 6 0
- 5 2
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 0 1
Exemplul 2
- Intrare
- 3
- 7 1
- 15 2
- 21 0
- Ieșire
- Datele introduse corespund restricțiilor impuse.
- 1 1 1
Rezolvare ver. 1
def validare(T, n, b):
# Funcție de validare a datelor de intrare
# Verificăm dacă T este între 0 și 1000, iar n și b conțin numere între 0 și 2^63 - 1 și respectiv 0 și 63
return 0 <= int(T) <= 1000 and all(0 <= int(num) <= 2 ** 63 - 1 for num in n) and all(
0 <= int(bit) <= 63 for bit in b)
def getbit(T, n, b):
# Funcție pentru a obține valoarea bitului corespunzător din reprezentarea internă a numărului
for i in range(T):
bit_val = (n[i] & (1 << b[i])) >> b[i]
print(bit_val, end=" ")
if __name__ == "__main__":
# Funcția principală a programului
T = input("Introduceți numărul de perechi de număr, bit: ")
n = []
b = []
for i in range(int(T)):
# Citirea datelor de intrare și adăugarea lor în liste separate pentru n și b
pair = input("Introduceți valorile n și b separate prin spațiu pentru perechea {}: ".format(i + 1)).split()
n.append(int(pair[0]))
b.append(int(pair[1]))
if validare(T, n, b):
# Verificăm dacă datele de intrare corespund restricțiilor impuse
print("Datele introduse corespund restricțiilor impuse.")
getbit(int(T), n, b)
else:
print("Datele introduse nu corespund restricțiilor impuse.")