3266 - Sir147: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerință== Fișierul '''sir147.in''' memorează cel mult 10000 de numere naturale cu cel mult nouă cifre. Numerele sunt ordonate strict crescător și separate prin câte un spațiu. Se consideră șirul 1, 4, 7, …. definit astfel: f1=1, f2=4 si fn=fn−1∗2−fn−2, pentru '''n > 2'''. Se cere să se scrie în fișierul '''sir147.out''' numerele din fișier care sunt termeni ai șirului. Numerele sunt afișate în ordine strict crescătoare, separate prin câte un s...
 
No edit summary
 
Line 1: Line 1:
==Cerință==
==Cerință==


Fișierul '''sir147.in''' memorează cel mult 10000 de numere naturale cu cel mult nouă cifre. Numerele sunt ordonate strict crescător și separate prin câte un spațiu. Se consideră șirul 1, 4, 7, …. definit astfel: f1=1, f2=4 si fn=fn−1∗2−fn−2, pentru '''n > 2'''. Se cere să se scrie în fișierul '''sir147.out''' numerele din fișier care sunt termeni ai șirului. Numerele sunt afișate în ordine strict crescătoare, separate prin câte un spațiu.
Fișierul '''sir147in.txt''' memorează cel mult '''10000''' de numere naturale cu cel mult nouă cifre. Numerele sunt ordonate strict crescător și separate prin câte un spațiu. Se consideră șirul '''1, 4, 7, ….''' definit astfel: '''f1=1, f2=4 si fn=fn−1∗2−fn−2''', pentru '''n > 2'''. Se cere să se scrie în fișierul '''sir147out.txt''' numerele din fișier care sunt termeni ai șirului. Numerele sunt afișate în ordine strict crescătoare, separate prin câte un spațiu.


==Date de intrare==
==Date de intrare==


Fișierul de intrare sir147.in conține pe prima linie mai multe numere naturale formate din cel mult nouă cifre separate prin câte un spațiu.
Fișierul de intrare '''sir147in.txt''' conține pe prima linie mai multe numere naturale formate din cel mult nouă cifre separate prin câte un spațiu.


==Date de ieșire==
==Date de ieșire==


Fișierul de ieșire sir147.out va conține pe prima linie numerele din fișier care sunt termeni ai șirului menționat în enunț.
Fișierul de ieșire '''sir147out.txt''' va conține pe prima linie numerele din fișier care sunt termeni ai șirului menționat în enunț.


==Restricții și precizări==
==Restricții și precizări==


*numerele din fișier vor fi mai mici decât 1.000.000.000
*numerele din fișier vor fi mai mici decât '''1.000.000.000'''
*în fișierul de intrare există cel puțin un termen al șirului menționat mai sus
*în fișierul de intrare există cel puțin un termen al șirului menționat mai sus
*se recomandă realizarea unei soluții în care să se evite memorarea valorilor din fișier într-un tablou sau în alte structuri de date similare
*se recomandă realizarea unei soluții în care să se evite memorarea valorilor din fișier într-un tablou sau în alte structuri de date similare


==Exemplul 1==


'''sir147in.txt'''


1 2 5 7 13 17 19 30


==Exemplu==
'''sir147out.txt'''


'''sir147.in'''
Datele de intrare corespund restrictiilor impuse
:1 2 5 7 13 17 19 30
1 7 13 19
'''sir147.out'''
 
:1 7 13 19
==Exemplul 2==
 
'''sir147in.txt'''
 
sir147
 
'''sir147out.txt'''
 
Datele de intrare nu corespund restrictiilor impuse




Line 31: Line 42:


<syntaxhighlight lang="python" line="1" start="1">
<syntaxhighlight lang="python" line="1" start="1">
def sir147():
 
def validare(numere):          # functia de validare a datelor de intrare
 
    for number in numere:
        if not isinstance(number, int) or number >= 1000000000:    # fiecare număr trebuie să fie întreg și mai mic decât 1.000.000.000
            raise ValueError
 
    file_out.write("Datele de intrare corespund restrictiilor impuse\n")
 
 
def sir147(numere):                     # functia de rezolvare
     f1, f2 = 1, 4
     f1, f2 = 1, 4
     while True:
     current = f1
        yield f1
 
        f1, f2 = f2, f2 * 2 - f1
    for number in numere:
        while number > current:
            current = f2
            f1, f2 = f2, f2 * 2 - f1
        if number == current:
            file_out.write(str(number) + ' ')
 
 
if __name__ == '__main__':
    file_in = open("sir147in.txt", "r")        # declararea fisierelor
    file_out = open("sir147out.txt", "w")      # fisierul out trebuie declarat cu optiunea "w" (write)


def main():
     try:
     with open('sir147.in', 'r') as fin:
         numbers = list(map(int, file_in.readline().split()))      # citirea numerelor se face ca listă de întregi
         numbers = map(int, fin.readline().split())


    sir = sir147()
        validare(numbers)                 # apelul functiei de validare
    current = next(sir)
        sir147(numbers)                   # apelul functiei de rezolvare


     with open('sir147.out', 'w') as fout:
     except ValueError:
         for number in numbers:
         file_out.write("Datele de intrare nu corespund restrictiilor impuse")
            while number > current:
    except IndexError:
                current = next(sir)
        file_out.write("Datele de intrare nu corespund restrictiilor impuse")
            if number == current:
                fout.write(str(number) + ' ')


if __name__ == "__main__":
    main()
</syntaxhighlight>
</syntaxhighlight>



Latest revision as of 20:33, 27 November 2023

Cerință[edit | edit source]

Fișierul sir147in.txt memorează cel mult 10000 de numere naturale cu cel mult nouă cifre. Numerele sunt ordonate strict crescător și separate prin câte un spațiu. Se consideră șirul 1, 4, 7, …. definit astfel: f1=1, f2=4 si fn=fn−1∗2−fn−2, pentru n > 2. Se cere să se scrie în fișierul sir147out.txt numerele din fișier care sunt termeni ai șirului. Numerele sunt afișate în ordine strict crescătoare, separate prin câte un spațiu.

Date de intrare[edit | edit source]

Fișierul de intrare sir147in.txt conține pe prima linie mai multe numere naturale formate din cel mult nouă cifre separate prin câte un spațiu.

Date de ieșire[edit | edit source]

Fișierul de ieșire sir147out.txt va conține pe prima linie numerele din fișier care sunt termeni ai șirului menționat în enunț.

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

  • numerele din fișier vor fi mai mici decât 1.000.000.000
  • în fișierul de intrare există cel puțin un termen al șirului menționat mai sus
  • se recomandă realizarea unei soluții în care să se evite memorarea valorilor din fișier într-un tablou sau în alte structuri de date similare

Exemplul 1[edit | edit source]

sir147in.txt

1 2 5 7 13 17 19 30

sir147out.txt

Datele de intrare corespund restrictiilor impuse
1 7 13 19

Exemplul 2[edit | edit source]

sir147in.txt

sir147

sir147out.txt

Datele de intrare nu corespund restrictiilor impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line="1" start="1">

def validare(numere): # functia de validare a datelor de intrare

   for number in numere:
       if not isinstance(number, int) or number >= 1000000000:    # fiecare număr trebuie să fie întreg și mai mic decât 1.000.000.000
           raise ValueError
   file_out.write("Datele de intrare corespund restrictiilor impuse\n")


def sir147(numere): # functia de rezolvare

   f1, f2 = 1, 4
   current = f1
   for number in numere:
       while number > current:
           current = f2
           f1, f2 = f2, f2 * 2 - f1
       if number == current:
           file_out.write(str(number) + ' ')


if __name__ == '__main__':

   file_in = open("sir147in.txt", "r")         # declararea fisierelor
   file_out = open("sir147out.txt", "w")       # fisierul out trebuie declarat cu optiunea "w" (write)
   try:
       numbers = list(map(int, file_in.readline().split()))      # citirea numerelor se face ca listă de întregi
       validare(numbers)                 # apelul functiei de validare
       sir147(numbers)                   # apelul functiei de rezolvare
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse")

</syntaxhighlight>

Explicație[edit | edit source]

Numerele din fișierul de intrare care sunt termeni ai șirului menționat sunt 1 7 13 19.