Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- TP 2018/2019: Tutorijal 6, Zadatak 1
- Autotestovi by Kerim Hodzic. Prijave gresaka, pitanja
- i sugestije saljite na mail: khodzic2@etf.unsa.ba
- Napomene: testovi su konacni tek pred tutorijal
- za krsenje zabrana dobiva se 0 bodova za zadatak
- */
- #include <iostream>
- #include <limits>
- #include <cmath>
- using std::cin;
- using std::cout;
- using std::endl;
- template <typename Tip1, typename Tip2>
- Tip1 *GenerirajStepeneDvojke(Tip2 n) {
- if(n<=0) throw std::domain_error("Broj elemenata mora biti pozitivan");
- Tip1 *p=nullptr;
- try {
- p = new Tip1[n];
- p[0]=1;
- for(int i=1; i<n; i++) {
- p[i]=p[i-1]*2;
- //overflow
- if(p[i]>std::numeric_limits<Tip1>::max()/2 && i!=n-1) throw std::overflow_error("Prekoracen dozvoljeni opseg");
- }
- }
- catch(std::bad_alloc e) {
- throw std::runtime_error("Neuspjesna alokacija");
- }catch(std::overflow_error e) {
- delete[] p; throw;
- }
- return p;
- }
- int main ()
- {
- try {
- cout<<"Koliko zelite elemenata: ";
- long long int n;
- cin>>n;
- unsigned long long int *p=GenerirajStepeneDvojke<unsigned long long int>(n);
- for(int i=0; i<n; i++) {
- cout<<p[i]<<" ";
- }
- delete[] p;
- }
- catch (std::overflow_error e) {
- cout<<"Izuzetak: "<<e.what();
- }
- catch (std::runtime_error e) {
- cout<<"Izuzetak: "<<e.what();
- } catch (std::domain_error e) {
- cout<<"Izuzetak: "<<e.what();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement