Informatică, întrebare adresată de andreeadima934, 8 ani în urmă

sa se realizeze suma tuturor numerelor pana la un numar introdus de noi de la tastatura !!!nu stiu exact cei cu acel numar introdus de noi de la tastatura .......va rog !! Multumesc !

Răspunsuri la întrebare

Răspuns de Franz
0

Răspuns:

Cerinta specifica faptul ca se asteapta un numar dat ca input (intrare) - acela fiind de fapt numarul citit de la tastatura. In continuare, in sectiunea "Explicatie" se va arata sintaxa in C++ si cum functioneaza 'citirea' unui numar.

Explicație:

Sintaxa in C++ pentru a citi un numar de la tastatura este relativ simpla. Folosindu-se biblioteca "<iostream>" ( scriem "#include <iostream>" la inceput - fara ghilimele) astfel putem citi numere apeland instructiunea "cin >> variabila", unde "variabila" este definita anterior si poate fi de orice tip de primitiva (exemplu: int variabila, char variabila, etc...). In fisierul atasat "sumanr.cpp" este programul complet, iar in fisierul sumanr.png este o captura de ecran a functionalitatii acestuia.

Pentru o explicatie mai avansata, prin instructiunea din C++ cin>>x; alocam in spatiul de adresare al memoriei un loc in care putem sa stocam orice variabila, fiind echivalentul rutinei "malloc" pentru alocarea de spatiu in memorie din C urmata de "scanf". In C++ alocarea si citirea de variabile au fost simplificate.

In exercitiul nostru, se cere construirea sumei tuturor numerelor pana la numarul citit de la tastatura. Presupunand ca sirul incepe de la 0 (deoarece este impropriu spus 'toate numerele' pana la x, avand si limite inferioara de -inf), exista doua abordari prin care se poate rezolva problema.

1) Abordarea 'simpla', cu o complexitate in timp de O(n) - facem un for care sa inceapa de la 0 si sa se termine pana la numarul citit, apoi in interiorul forului construim o suma initializata cu 0 astfel: s+=i. Aceasta abordare este simpla deoarece nu se bazeaza pe nicio 'observatie matematica', totusi este cea mai lenta optiune pe care am putea-o implementa.

2) Abordarea 'matematica', cu o complexitate in timp de O(1) si spatiu In-Place -> se bazeaza pe observatia ca suma tuturor numerelor de la 0 la N este de fapt suma numerelor consecutive cu formula lui Gauss. Formula lui Gauss ne spune ca suma numerelor consecutive este N(N+1)/2 -> in cazul nostru (nr_citit * (nr_citit+1) ) / 2

Pentru verificare am apelat rutina cout<<suma; ce ne-a permis sa afisam pe ecran rezultatul obtinut in urma rularii programului.

Anexe:
Alte întrebări interesante