• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Optymalizacja programu (C++)

Object Storage Arubacloud
0 głosów
233 wizyt
pytanie zadane 26 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
edycja 26 marca 2018 przez Eryk Andrzejewski

Witam napisałem program jest on poprawny, jednak czy jest możliwość jego optymalizacji za pomocą funkcji lub metod?

#include <iostream>

template <typename T, typename T2>
void ShowArray(T2 suma, T arr[], int n); // szablon A

template <typename T, typename T2>
void ShowArray(T2 suma, T * arr[], int n); // szablon B

struct debts
{
        char name[50];
        double amount;
};

int main()
{
        int things[6] = {13, 31, 103, 301, 310, 130};
        int suma_a;
        struct debts mr_E[3] =
        {
                {"Ima Wolfe", 2400.0},
                {"Ura Foxe", 1300.0},
                {"Iby Stout", 1800.0}
        };
        double * pd[3];
        double suma_b;
        //ustawienie wskaznika na pola amount struktur z tablicy Mr_E
        for(int i=0; i<3; i++)
                pd[i] = &mr_E[i].amount;
        std::cout << "Wyliczanie rzeczy Pana E.:\n";

        ShowArray(suma_a, things, 6); // szablon A
        std::cout << "wyliczanie dlugow Pana E.:\n";

        //pd to tablica wskaznikow na double
        ShowArray(suma_b, pd, 3); // szablon B
        return 0;
}

template <typename T, typename T2>
void ShowArray(T2 suma, T arr[], int n)
{
        std::cout << "szablon A\n";
        for(int i=0; i<n; i++)
                suma += arr[i];
        std::cout << "Suma zadluzenia: "<< suma << "\nIlosc przedmiotow: " << n << std::endl;
}

template <typename T, typename T2>
void ShowArray(T2 suma, T * arr[], int n)
{
        std::cout << "szablon B\n";
        for(int i=0; i<n; i++)
                suma += (*arr[i]);
        std::cout << "Suma zadluzenia: " << suma << "\nIlosc przedmiotow: " << n << std::endl;
}

Program podaje sumę zadłużenia oraz ilość przedmiotów.

komentarz 26 marca 2018 przez mokrowski Mędrzec (155,460 p.)
To zależy co chcesz uzyskać. Możliwości:

1. Wydajność / czas wykonania

2. Czytelność / łatwość utrzymania

3. ... (podstaw inne wymagania)

Rozumiem że podział na 2 szablony to wymaganie ćwiczenia? Bo funkcjonalnie raczej różnic nie ma?
komentarz 26 marca 2018 przez Mariusz08 Maniak (62,300 p.)

@Sic,

Kod wstawiamy w bloczki z kodem, po czym zaznaczamy język w jakim jest kod napisany (koloryzuje składnie)

komentarz 26 marca 2018 przez j23 Mędrzec (194,920 p.)

@Sic,

Jaki jest sens zmiennych suma_a i suma_b? Po co je przekazujesz do ShowArray?

 

A tak w ogóle, nie zerujesz tych zmiennych, więc wyniki wyświetlone przez ShowArray mogą być przypadkowe.

 

PS. linia 19: w C++ przy definiowaniu zmiennych nie musisz pisać słówka struct przed nazwą struktury. Takie rzeczy to w C (i to nie zawsze).

komentarz 27 marca 2018 przez Sic Dyskutant (8,510 p.)

@mokrowski, 

To prawda takie były wymagania ćwiczenia. Zależy mi na wydajności programu poprzez używanie funkcji wbudowanych w język (dopiero się ich uczę ich wykorzystywać).

 

komentarz 27 marca 2018 przez Sic Dyskutant (8,510 p.)

@j23,

Tak, ponieważ musiałem wyliczyć sumę. Stąd zmienna typu T, aby można było wyliczyć ją dla wszystkich typów danych a nie tylko pojedynczych. To był wymóg ćwiczenia, jednak dziękuję za podpowiedź zmiennie to.

komentarz 27 marca 2018 przez j23 Mędrzec (194,920 p.)

Chyba nie zrozumiałeś mojego pytania. Wiem, po co jest T itd. Ale nie wiem, po co dajesz w parametrze wspomniane zmienne - w kodzie wywołującym ShowArray poza ich definiowaniem nic z nimi nie robisz.

 

Drugi parametr szablonu, T2, w zasadzie nie jest potrzebny, bo suma może być typu T (tak w każdym razie wynika z Twojego kodu).

komentarz 27 marca 2018 przez mokrowski Mędrzec (155,460 p.)
Masz stosunkowo mało kodu, kulą u nogi są wymagania ćwiczenia (tablice), struktury są niewielkie. Oprócz błędów na które zwrócili uwagę poprzednicy, specjalnie nie ma tu się nad czym pastwić. Jak struktury lub kod będzie większy, będzie w tym jakiś sens.

W międzyczasie poczytaj o algorytmach z nagłówka <algorithm> i <numeric>. Szczególnie o std::accumulate, std::copy, std::transform. Tych najczęściej na wstępie będziesz używał.

Ot, jest na przykład możliwość by szablon sam dedukował jakiej wielkości masz tablicę. Tu jednak wymagania ćwiczenia uniemożliwiają stosowanie tego sposobu...
komentarz 28 marca 2018 przez Sic Dyskutant (8,510 p.)

@j23,

Pokazało mi błąd, uznałem to za dobre rozwiązanie.

komentarz 28 marca 2018 przez Sic Dyskutant (8,510 p.)
Dziękuję skorzystam z tego i zajmę się opracowywaniem tych nagłówków.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 254 wizyt
0 głosów
2 odpowiedzi 323 wizyt
pytanie zadane 30 kwietnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
0 odpowiedzi 140 wizyt
pytanie zadane 28 kwietnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...