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

Ocena zadania z szkoła programowania

Object Storage Arubacloud
0 głosów
418 wizyt
pytanie zadane 16 lutego 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

Cześć Miałem za zadanie z ksiazki szkoła programowania o to one:

Zmodyfikuj listing 8.14 tak aby stosował dwa szablony o nazwie SumArray(), zwracajacej sumę elementów tablicy, a nie wypisujacej  zawartosci tej tablicy. Program powinnien podawać tez łączną ilość przedmiotów i sume zadłużenia

 

Listing 8.14:

// tempover.cpp -- przeciążanie szablonów
#include <iostream>

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

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

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

int main()
{
    using namespace std;
    int things[6] = {13, 31, 103, 301, 310, 130};
    struct debts mr_E[3] =
    {
        {"Ima Wolfe", 2400.0},
        {"Ura Foxe", 1300.0},
        {"Iby Stout", 1800.0}
    };
    double * pd[3]; 

// ustawienie wskaźników na pola amount struktur z tablicy Mr_E
    for (int i = 0; i < 3; i++)
        pd[i] = &mr_E[i].amount;
    
    cout << "Wyliczanie rzeczy pana E.:\n";
// things to tablica int
ShowArray(things, 6);  // używamy szablonu A
    cout << "Wyliczanie długów pana E:\n";
// pd to tablica wskaźników na double
    ShowArray(pd, 3);      // używa szablonu B (bardziej wyspecjalizowanego)
    return 0;
}

template <typename T>
void ShowArray(T arr[], int n)
{
    using namespace std;
    cout << "szablon A\n";
    for (int i = 0; i < n; i++)
        cout << arr[i] << ' ';
    cout << endl;
}

template <typename T>
void ShowArray(T * arr[], int n)
{
    using namespace std;
    cout << "szablon B\n";
    for (int i = 0; i < n; i++)
        cout << *arr[i] << ' ';
    cout << endl; 
}

Moje rozwiazanie:

// tempover.cpp -- przeciążanie szablonów
#include <iostream>

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

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

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

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

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

int main()
{
    using namespace std;
    int things[6] = {13, 31, 103, 301, 310, 130};
    struct debts mr_E[3] =
    {
        {"Ima Wolfe", 2400.0},
        {"Ura Foxe", 1300.0},
        {"Iby Stout", 1800.0}
    };
    double * pd[3];

// ustawienie wskaźników na pola amount struktur z tablicy Mr_E
    for (int i = 0; i < 3; i++)
        pd[i] = &mr_E[i].amount;

    cout << "Wyliczanie rzeczy pana E.:\n";
// things to tablica int
ShowArray(things, 6);  // używamy szablonu A
SumArray(things, 6);  // używamy szablonu A
    cout << "Wyliczanie długów pana E:\n";
// pd to tablica wskaźników na double
    ShowArray(pd, 3);      // używa szablonu B (bardziej wyspecjalizowanego)
    SumArray(pd,3);
    return 0;
}

template <typename T>
void ShowArray(T arr[], int n)
{
    using namespace std;
    cout << "szablon A\n";
    for (int i = 0; i < n; i++)
        cout << arr[i] << ' ';
    cout << endl;
}

template <typename T>
void ShowArray(T * arr[], int n)
{
    using namespace std;
    cout << "szablon B\n";
    for (int i = 0; i < n; i++)
        cout << *arr[i] << ' ';
    cout << endl;
}

template <typename T>
void SumArray(T arr[], int n)
{
    using namespace std;
    T suma = 0;
    cout << "szablon A\n";
    for (int i = 0; i < n; i++)
        suma+=arr[i];
    cout << "Suma = "<<suma<<endl;
}

template <typename T>
void SumArray(T * arr[], int n)
{
    using namespace std;
    T suma = 0;
    cout << "szablon B\n";
    for (int i = 0; i < n; i++)
        suma+=*arr[i];
    cout << "Suma = "<<suma<<endl;
}

 

1 odpowiedź

+2 głosów
odpowiedź 16 lutego 2019 przez criss Mędrzec (172,590 p.)
wybrane 16 lutego 2019 przez Michał_Warmuz
 
Najlepsza

zwracajacej sumę elementów tablicy, a nie wypisujacej  zawartosci tej tablicy. 

Suma miała być zwracana, a nie wypisywana. Poza tym ok.

 No i nie robisz tego:

Program powinnien podawać tez łączną ilość przedmiotów i sume zadłużenia 

komentarz 16 lutego 2019 przez Michał_Warmuz Mądrala (5,830 p.)

Gdy zwracam wartosc pokazuje mi błąd kurcze

// tempover.cpp -- przeciążanie szablonów
#include <iostream>

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

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

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

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

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

int main()
{
    using namespace std;
    int things[6] = {13, 31, 103, 301, 310, 130};
    struct debts mr_E[3] =
    {
        {"Ima Wolfe", 2400.0},
        {"Ura Foxe", 1300.0},
        {"Iby Stout", 1800.0}
    };
    double * pd[3];

// ustawienie wskaźników na pola amount struktur z tablicy Mr_E
    for (int i = 0; i < 3; i++)
        pd[i] = &mr_E[i].amount;

    cout << "Wyliczanie rzeczy pana E.:\n";
// things to tablica int
ShowArray(things, 6);  // używamy szablonu A
cout << SumArray(things,6) << endl;
// używamy szablonu A
    cout << "Wyliczanie długów pana E:\n";
// pd to tablica wskaźników na double
    ShowArray(pd, 3);      // używa szablonu B (bardziej wyspecjalizowanego)
    cout << SumArray(pd,3) << endl;
    return 0;
}

template <typename T>
void ShowArray(T arr[], int n)
{
    using namespace std;
    cout << "szablon A\n";
    for (int i = 0; i < n; i++)
        cout << arr[i] << ' ';
    cout <<endl;
}

template <typename T>
void ShowArray(T * arr[], int n)
{
    using namespace std;
    cout << "szablon B\n";
    for (int i = 0; i < n; i++)
        cout << *arr[i] << ' ';
    cout << endl;
}

template <typename T>
T SumArray(T arr[], int n)
{
    using namespace std;
    T suma = 0;
    cout << "szablon A\n";
    for (int i = 0; i < n; i++)
        suma+=arr[i];
    return suma;
}

template <typename T>
T SumArray(T * arr[], int n)
{
    using namespace std;
    T suma = 0;
    cout << "szablon B\n";
    for (int i = 0; i < n; i++)
        suma+=*arr[i];
    return suma;
}

 

komentarz 16 lutego 2019 przez Jakub 0 Pasjonat (23,120 p.)
edycja 16 lutego 2019 przez Jakub 0

jaka treść błędu? Zawsze ją podawaj, to dobry zwyczaj ;)

Problem jest taki że zmieniłeś zwracany typ funkcji na "T", a w deklaracji nadal zostawiłeś void'a :

 
template <typename T>            // szablon A
void SumArray(T arr[], int n);
 
template <typename T>            // szablon B
void SumArray(T * arr[], int n);


// (...)

template <typename T>
T SumArray(T arr[], int n)
{
    using namespace std;
    T suma = 0;
    cout << "szablon A\n";
    for (int i = 0; i < n; i++)
        suma+=arr[i];
    return suma;
}
 
template <typename T>
T SumArray(T * arr[], int n)
{
    using namespace std;
    T suma = 0;
    cout << "szablon B\n";
    for (int i = 0; i < n; i++)
        suma+=*arr[i];
    return suma;
}

 

Podobne pytania

0 głosów
4 odpowiedzi 845 wizyt
0 głosów
1 odpowiedź 467 wizyt
0 głosów
1 odpowiedź 535 wizyt

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 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!

...