2858 - pv

De la Universitas MediaWiki

Sursa: - 2858 - pv


Cerinţe

Se dă un șir cu n elemente, numere naturale.

  • Să se afișeze elementele șirului de la dreapta la stânga.
  • Să se calculeze suma valorilor pare din șir.
  • Să se determine suma valorilor aflate pe poziții pare în șir.
  • Să se determine numărul numerelor din șir care sunt divizibile cu 10.
  • Să se determine suma numerelor divizibile cu 3 și aflate pe poziții impare.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi șirul de n numere naturale, separate prin spații.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt introduse corect.", apoi:
* pe un rând nou va afișa elementele șirului de la dreapta la stânga;
* pe un rând nou se va afișa un singur număr reprezentând suma valorilor pare;
* pe un rând nou se va afișa un singur număr reprezentând suma valorilor aflate pe poziții pare în șir;
* pe un rând nou se va afișa un singur număr reprezentând numărul numerelor din șir care sunt divizibile cu 10;
* pe ultimul rând se va afișa un singur număr reprezentând suma numerelor divizibile cu 3 și aflate pe poziții impare.
În cazul în care datele nu respectă restricțiile, se va afișa pe ecran: "Datele nu corespund restricțiilor impuse.".

Restricţii şi precizări

  • 1 ⩽ n ⩽ 100
  • elementele vectorului vor fi cuprinse între 0 și 100

Exemple

Exemplul 1

Intrare
10
1 2 3 4 5 6 7 8 9 10
Ieșire
Datele sunt introduse corect.
10 9 8 7 6 5 4 3 2 1
30
30
1
12

Exemplul 2

Intrare
5
10 2 -3 4 5
Ieșire
Datele nu corespund restricțiilor impuse.


Rezolvare

# 2858

def afisare_vector_invers(vector, n):
    for i in range(n-1, -1, -1):
        print(vector[i], end=" ")
    print()


def afisare_suma_val_pare(vector, n):
    suma_val_pare = 0
    for i in range(n):
        if vector[i] % 2 == 0:
            suma_val_pare += vector[i]
    print(suma_val_pare)


def afisare_suma_poz_pare(vector, n):
    suma_poz_pare = 0
    # vectorul începe de la 0, așadar pozițiile pare vor fi cele impare în cazul acesta
    for i in range(n):
        if i % 2 != 0:
            suma_poz_pare += vector[i]
    print(suma_poz_pare)


def afisare_nr_el_div_10(vector, n):
    nr_el_div_10 = 0
    for i in range(n):
        if vector[i] % 10 == 0:
            nr_el_div_10 += 1
    print(nr_el_div_10)


def afisare_suma_poz_imp_div_3(vector, n):
    suma_poz_imp_div_3 = 0
    for i in range(n):
        if vector[i] % 3 == 0 and i % 2 != 1:
            suma_poz_imp_div_3 += vector[i]
    print(suma_poz_imp_div_3)


def citire_conform_restrictiilor(vector, n):
    if n < 1 or n > 100:
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    for x in vector:
        if x < 0 or x > 100:
            print("Datele nu corespund restricțiilor impuse.")
            exit()
    if n != len(vector):
        print("Datele nu corespund restricțiilor impuse.")
        exit()
    print("Datele sunt introduse corect.")


if __name__ == '__main__':
    n = int(input())
    vector = list(map(int, input().split()))
    citire_conform_restrictiilor(vector, n)
    afisare_vector_invers(vector, n)
    afisare_suma_val_pare(vector, n)
    afisare_suma_poz_pare(vector, n)
    afisare_nr_el_div_10(vector, n)
    afisare_suma_poz_imp_div_3(vector, n)

Explicație rezolvare

   Programul de mai sus este împărțit în mai multe funcții care efectuează operațiile date în problemă asupra vectorului de numere.
-> Funcția afisare_vector_invers(vector, n) primește ca parametri vectorul „vector” și numărul de elemente din vector (n) și afișează elementele vectorului în ordine inversă, de la ultimul element la primul, cu ajutorul unui for loop (linia 4);
-> Funcția afisare_suma_val_pare(vector, n) primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează suma tuturor valorilor pare din vector (parcurgem vectorul cu ajutorul unui for loop, linia 11, și verificăm dacă elementele sunt pare, iar dacă da, le adăugăm în variabila suma_val_pare, care a fost inițializată cu 0 înainte de for loop, linia 10) și la final afișăm suma_val_pare;
-> Funcția afisare_suma_poz_pare(vector, n) primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează suma valorilor din pozițiile pare (indexuri impare vor fi pare deoarece la noi vectorul începe de la 0, nu de la 1) din vector. Acest lucru se realizează prin parcurgerea vectorului și adunarea valorilor aflate pe poziții impare (care sunt pare dacă se începe de pe poziția 1), pe care le adunăm în variabila suma_poz_pare și o afișăm la final;
-> Funcția afisare_nr_el_div_10(vector, n) primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează numărul de elemente din vector care sunt divizibile cu 10 în variabila nr_el_div_10, inițializată cu 0 la început. Calcularea acestei valori se face prin a parcurge vectorul cu un for loop și se verifică dacă numărul este divizibil cu 10 cu ajutorul operatorului % (de exemplu, dacă element % 10 este diferit de 0, înseamnă cu numărul nu este divizibil cu 10) și adunăm 1 în variabila nr_el_div_10 de fiecare dată când descoperim un element divizibil cu 10, apoi după finalizarea parcurgerii, afișăm aceasta valoare;
-> Funcția afisare_suma_poz_imp_div_3(vector, n) primește ca parametri un vector „vector” și numărul de elemente din vector (n) și calculează și afișează suma valorilor din pozițiile impare (la noi cele pare deoarece începem vectorul de la 0, nu 1) din vector care sunt divizibile cu 3. Acest număr va fi calculat în variabila suma_poz_imp_div_3 pe care o inițializăm cu 0 la început, apoi parcurgem vectorul și verificăm pentru fiecare element dacă este divizibil cu 3 cu ajutorul operatorului % și dacă poziția sa este pară (pentru a obține pozițiile impare, noi începem vectorul de la 0, așadar cele două vor fi inversate), iar dacă ambele condiții sunt îndeplinite se adaugă elementul respectiv în variabila suma_poz_imp_div_3, care după parcurgerea întregului vector va avea valoarea cerută;
-> Funcția citire_conform_restrictiilor(vector, n) primește ca parametri un vector „vector” și numărul de elemente din vector (n) și verifică dacă vectorul și numărul de elemente din vector respectă restricțiile impuse. Aceste restricții includ ca numărul de elemente din vector să fie între 1 și 100, valorile din vector să fie între 0 și 100 și numărul de elemente din vector să fie egal cu n. Dacă restricțiile nu sunt respectate, programul afișează „Datele nu corespund restricțiilor impuse.” și se încheie prin apelul funcției exit(). Dacă restricțiile sunt respectate, se afișează un mesajul „Datele sunt introduse corect.” (linia 55);
-> În secțiunea if __name__ == '__main__':, programul începe prin citirea numărului de elemente din vector (n) de la tastatură folosind funcția input() și convertirea acestuia la un număr întreg utilizând funcția int() (linia 57). Apoi, vectorul este citit de la tastatură ca o listă de numere întregi utilizând funcția input() și funcția split() care separă valorile citite în funcție de spații și le transformă într-o listă de șiruri de caractere. Apoi, utilizând funcția map() împreună cu funcția int(), lista de șiruri de caractere este convertită într-o listă de numere întregi. Apoi, tot în main, se apelează toate funcțiile de mai sus și se va obține rezultatul conform problemei.