2001 - Huge Control: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 713 este 2. (7 + 1 + 3 = 11, 1 + 1 = 2). Un număr de tip Huge este un număr natural de maxim 1.000.000 de cifre. ==Cerința== În fișierul hugecontrol.in se găsește memorat un număr N, de tip Huge. Calculati și afișati cifra de control a numărului. ==Date...
 
Cata (talk | contribs)
No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Cerința==
Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 713 este 2. (7 + 1 + 3 = 11, 1 + 1 = 2).
Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 713 este 2. (7 + 1 + 3 = 11, 1 + 1 = 2).


Un număr de tip Huge este un număr natural de maxim 1.000.000 de cifre.
Un număr de tip Huge este un număr natural de maxim 1.000.000 de cifre.


==Cerința==
În fișierul hugecontrol.in se găsește memorat un număr N, de tip Huge. Calculati și afișati cifra de control a numărului.
În fișierul hugecontrol.in se găsește memorat un număr N, de tip Huge. Calculati și afișati cifra de control a numărului.


Line 10: Line 10:


==Date de ieșire==
==Date de ieșire==
Programul va afișa în fișierul de ieșire hugecontrol.out numărul digit, reprezentând cifra de control a lui N.
Programul va afișa în fișierul de ieșire hugecontrol.out numărul digit, reprezentând cifra de control a lui N, alături de un mesaj de validare a datelor introduse ("Input valid" sau "Input invalid" după caz).


==Restricții și precizări==
==Restricții și precizări==
N este un număr cu proprietăți caracteristice tipului Huge.
N este un număr cu proprietăți caracteristice tipului Huge.
==Exemplu==
==Exemplu==
Intrare
; Intrare
 
: 713
713
; Ieșire
Ieșire
: Input valid
 
: 2
2
==Explicație==
==Explicație==
7 + 1 + 3 = 11, 1 + 1 = 2  
7 + 1 + 3 = 11, 1 + 1 = 2  
Line 40: Line 39:




def main():
if __name__ == "__main__":
     with open("hugecontrol.in", "r") as fin, open("hugecontrol.out", "w") as fout:
     with open("hugecontrol.in", "r") as fin, open("hugecontrol.out", "w") as fout:
         n = fin.readline().strip()
         n = fin.readline().strip()


         if not is_valid_number(n):
         if not is_valid_number(n):
             print("Invalid input")
             print("Input invalid")
             return
             return
        else:
            print("Input valid")


         control_digit = compute_control_digit(n)
         control_digit = compute_control_digit(n)
         fout.write(str(control_digit))
         fout.write(str(control_digit))


</syntaxhighlight>
==Explicație cod==


if __name__ == "__main__":
    main()


</syntaxhighlight>
Aceste funcții aparțin unui program care primește un număr mare și verifică dacă este valid, apoi calculează și scrie într-un fișier cifra de control a numărului dat.
 
`is_valid_number(n)` este o funcție care primește un șir de caractere `n` și returnează `True` dacă șirul este format din cifre și are lungimea mai mică sau egală cu un milion, altfel returnează `False`. Această funcție este utilizată pentru a verifica dacă numărul de intrare este valid.
 
`compute_control_digit(n)` este o funcție care primește un șir de caractere `n` și calculează cifra de control a numărului dat. Algoritmul pentru a calcula cifra de control este următorul:
 
# Se pornește cu valoarea 0 pentru variabila `nr`.
# Se parcurge fiecare caracter din șirul de intrare `n`.
# Pentru fiecare caracter, se multiplică `nr` cu 10 și se adaugă valoarea numerică a caracterului.
# Se face modulo 9 pentru a reduce `nr` la un număr între 0 și 8.
# Când toți caracterele sunt procesate, se returnează 9 dacă `nr` este egal cu 0, altfel se returnează valoarea din `nr`.
 
În codul principal, `__name__ == "__main__"` asigură faptul că blocul de cod din interiorul lui este executat numai atunci când fișierul este rulat ca un script și nu ca modul importat.


==Explicație cod==
În interiorul blocului principal, fișierul "hugecontrol.in" este deschis și citit, iar primul rând este citit ca șirul de intrare `n`. Apoi, se verifică dacă numărul este valid folosind `is_valid_number(n)`. Dacă numărul nu este valid, se afișează mesajul "Input invalid" și programul se termină. Altfel, se afișează mesajul "Input valid" și se calculează cifra de control folosind `compute_control_digit(n)`. Această cifră de control este scrisă în fișierul "hugecontrol.out" folosind `fout.write(str(control_digit))`.
Acest cod verifica daca un numar primit ca input este valid si apoi calculeaza cifra de control a numarului respectiv. Mai exact, functia "is_valid_number" returneaza True daca numarul este format doar din cifre si are lungimea mai mica sau egala cu un milion, iar functia "compute_control_digit" calculeaza cifra de control a numarului folosind o formula matematica specifica. Functia "main" citeste input-ul din fisierul "hugecontrol.in", verifica daca numarul este valid folosind functia "is_valid_number", calculeaza cifra de control folosind functia "compute_control_digit" si scrie rezultatul in fisierul "hugecontrol.out".

Latest revision as of 14:34, 14 May 2023

Cerința[edit | edit source]

Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 713 este 2. (7 + 1 + 3 = 11, 1 + 1 = 2).

Un număr de tip Huge este un număr natural de maxim 1.000.000 de cifre.

În fișierul hugecontrol.in se găsește memorat un număr N, de tip Huge. Calculati și afișati cifra de control a numărului.

Date de intrare[edit | edit source]

Programul citește din fișierul de intrare hugecontrol.in numărul N, de tip Huge.

Date de ieșire[edit | edit source]

Programul va afișa în fișierul de ieșire hugecontrol.out numărul digit, reprezentând cifra de control a lui N, alături de un mesaj de validare a datelor introduse ("Input valid" sau "Input invalid" după caz).

Restricții și precizări[edit | edit source]

N este un număr cu proprietăți caracteristice tipului Huge.

Exemplu[edit | edit source]

Intrare
713
Ieșire
Input valid
2

Explicație[edit | edit source]

7 + 1 + 3 = 11, 1 + 1 = 2

Rezolvare[edit | edit source]

<syntaxhighlight lang="python"> def is_valid_number(n):

   return n.isdigit() and len(n) <= 1000000


def compute_control_digit(n):

   nr = 0
   for c in n:
       nr = nr * 10 + int(c)
       nr %= 9
   return 9 if nr == 0 else nr


if __name__ == "__main__":

   with open("hugecontrol.in", "r") as fin, open("hugecontrol.out", "w") as fout:
       n = fin.readline().strip()
       if not is_valid_number(n):
           print("Input invalid")
           return
       else:
           print("Input valid")
       control_digit = compute_control_digit(n)
       fout.write(str(control_digit))

</syntaxhighlight>

Explicație cod[edit | edit source]

Aceste funcții aparțin unui program care primește un număr mare și verifică dacă este valid, apoi calculează și scrie într-un fișier cifra de control a numărului dat.

`is_valid_number(n)` este o funcție care primește un șir de caractere `n` și returnează `True` dacă șirul este format din cifre și are lungimea mai mică sau egală cu un milion, altfel returnează `False`. Această funcție este utilizată pentru a verifica dacă numărul de intrare este valid.

`compute_control_digit(n)` este o funcție care primește un șir de caractere `n` și calculează cifra de control a numărului dat. Algoritmul pentru a calcula cifra de control este următorul:

  1. Se pornește cu valoarea 0 pentru variabila `nr`.
  2. Se parcurge fiecare caracter din șirul de intrare `n`.
  3. Pentru fiecare caracter, se multiplică `nr` cu 10 și se adaugă valoarea numerică a caracterului.
  4. Se face modulo 9 pentru a reduce `nr` la un număr între 0 și 8.
  5. Când toți caracterele sunt procesate, se returnează 9 dacă `nr` este egal cu 0, altfel se returnează valoarea din `nr`.

În codul principal, `__name__ == "__main__"` asigură faptul că blocul de cod din interiorul lui este executat numai atunci când fișierul este rulat ca un script și nu ca modul importat.

În interiorul blocului principal, fișierul "hugecontrol.in" este deschis și citit, iar primul rând este citit ca șirul de intrare `n`. Apoi, se verifică dacă numărul este valid folosind `is_valid_number(n)`. Dacă numărul nu este valid, se afișează mesajul "Input invalid" și programul se termină. Altfel, se afișează mesajul "Input valid" și se calculează cifra de control folosind `compute_control_digit(n)`. Această cifră de control este scrisă în fișierul "hugecontrol.out" folosind `fout.write(str(control_digit))`.