Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
0555 - Overflow
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Cerința== Lui Gigel i s-a cerut să scrie un program care realizează înmulțirea dintre două numere naturale. Pentru a-i da o provocare lui Gigel, profesorul îi dă ca date de intrare un set de perechi de numere naturale pentru care produsul poate depăși <span style=“color: red”> 2 64</span>. Gigel trebuie acum să-și modifice programul pentru ca să poată detecta cazurile speciale. ==Date de intrare== Programul citește de la tastatură numărul <span style=“color: red”> n</span>, iar apoi n perechi de numere naturale, care trebuie înmulțite. ==Date de ieșire== Dacă datele sunt introduse corect, pe ecran se va afișa: '''"Date de intrare valide."''', apoi programul va afișa pe ecran rezultatele pentru cele <span style=“color: red”> n</span> operații, fiecare pe câte o linie. Rezultatul operației este produsul celor două numere, dacă acesta se poate reprezenta pe <span style=“color: red”> 8</span> octeți fără semn, sau mesajul <span style=“color: red”> Overflow!</span>, în caz contrar. În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: '''"Date de intrare invalide".''' ==Restricții și precizări== <span style=“color: red”> 1 ≤ n ≤ 100.000</span> pentru fiecare pereche, cele două numere se pot reprezenta pe <span style=“color: red”> 8</span> octeți, fără semn valorile care se pot reprezenta pe <span style=“color: red”> 8</span> octeți fără semn sunt cuprinse între <span style=“color: red”> 0</span> și <span style=“color: red”> 18.446.744.073.709.551.615</span> ==Exemplu:== Intrare : 3 : 2147483647 2147483647 : 18446744073709551615 2 : 666013 1 Ieșire : Date de intrare valide : 4611686014132420609 : Overflow! : 666013 ==Rezolvare== <syntaxhighlight lang="python" line> def validare(n): if not (1 <= n <= 100_000): return False return True def overflow(nr1, nr2): return nr2 and nr1 > 18446744073709551615 // nr2 def produs(nr1, nr2): return nr1 * nr2 def verificare(n): nr = [] for i in range(n): nr1, nr2 = map(int, input().split()) nr.append((nr1, nr2)) for i in range(n): if overflow(nr[i][0], nr[i][1]): print("Overflow!") else: print(produs(nr[i][0], nr[i][1])) if __name__ == '__main__': n = int(input()) if validare(n): print("Date de intrare valide") verificare(n) else: print("Date de intrare invalide") </syntaxhighlight> ==Explicatie cod:== Acest cod Python realizează următoarele acțiuni: Funcția validare(n) primește un parametru n de tip întreg și verifică dacă acesta se află în intervalul [1, 100_000]. Dacă condiția este îndeplinită, funcția returnează True, altfel returnează False. Funcția overflow(nr1, nr2) primește două parametri nr1 și nr2 de tip întreg și verifică dacă există un overflow în timpul efectuării operației de înmulțire nr1 * nr2. Dacă nr2 este diferit de zero și rezultatul înmulțirii depășește valoarea maximă acceptată de un număr întreg în Python (18446744073709551615), funcția returnează True, altfel returnează False. Funcția produs(nr1, nr2) primește două parametri nr1 și nr2 de tip întreg și returnează rezultatul înmulțirii lor. Funcția verificare(n) primește un parametru n de tip întreg și efectuează verificarea și afișarea produselor pentru perechile de numere citite de la intrare. În cadrul unei bucle, se citește fiecare pereche de numere și se apelează funcția overflow(nr1, nr2) pentru a verifica dacă există un overflow. Dacă există un overflow, se afișează mesajul "Overflow!", altfel se calculează produsul folosind funcția produs(nr1, nr2) și se afișează rezultatul. În blocul if __name__ == '__main__':, se citește n de la intrare folosind funcția input(). Se validează datele de intrare utilizând funcția validare(n). Dacă datele de intrare sunt valide, se afișează un mesaj de confirmare, se apelează funcția verificare(n) și se afișează rezultatele pe ecran. Altfel, se afișează un mesaj de eroare. Codul primește un număr de la intrare, validează datele și verifică dacă există un overflow în timpul înmulțirii perechilor de numere citite. Produsele sau mesajele de overflow sunt afișate pe ecran.
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width