Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Pomoc przy napisaniu programu

Ostatnio zmodyfikowano 2012-02-07 20:04
Autor Wiadomość
pentional
Temat założony przez niniejszego użytkownika
[C++] Pomoc przy napisaniu programu
» 2012-02-07 19:09:06
Witam, mam napisać tak program:
//1. Zaprojektuj i wykonaj klasę Statystyka służącą do przechowywania zbioru wartości liczbowych i wykonywania na nich statystyk (pliki statystyka.h i statystyka.cpp).
Właściwości:
Dane typu float mają być przechowywane w tablicy utworzonej dynamicznie.
Należy pamiętać liczbę wartości.
Zadbaj o to aby składniki kluczowe dla spójności danych czyli wskaźnik do tablicy oraz liczba wartości były niedostępne z zewnątrz (prywatne).

Jeżeli przewidujesz konstruktor domyślny, nie powinien on tworzyć tablicy, a liczba elementów powinna być ustawiona na 0.
Można przewidzieć konstruktor z parametrem, który utworzy tablicę o podanym rozmiarze.
Uwaga! Jeżeli operacja ta się nie powiedzie, liczba elementów powinna zostać wyzerowana.
Konieczne jest napisanie destruktora, który zwolni pamięć.
Metody:
Należy umożliwić wykorzystanie prywatnych danych za pomocą publicznych metod:
wartosc - zwraca wartość o numerze wskazanym poprzez parametr,
nowawartosc - wstawia podaną wartość do podanej pozycji tablicy,
W obu powyższych funkcjach należy sprawdzić czy podany numer mieści się w tablicy.
metoda ile – zwraca liczbę elementów.
Metoda utworz – utworzenie od nowa tablicy o rozmiarze podanym przez parametr,
jeżeli tablica już istniała, należy zwolnić pamięć a następnie utworzyć nową tablicę.
Metoda wypisz – wyświetlenie wszystkich wartości z tablicy oraz ich liczby.
Metody: srednia, max, min – obliczanie i zwracanie statystyk.
2. Napisz funkcję main (main.cpp), która powoła do życia obiekt klasy Statystyka oraz przetestuje poszczególne metody tej klasy: wprowadzi i wyświetli wartości, obliczy statystyki, pobierze wartość elementu, zmieni wartość elementu, utworzy tablicę od nowa.
Sprawdź czy rzeczywiście prywatne składniki są niedostępne.
3. Napisz w module Statystyka.cpp funkcję pobierz , która nie należy do żadnej klasy i ma pobierać od użytkownika wszystkie dane do już istniejącego obiektu typu Statystyka podanego jako parametr.
Aby funkcja miała dostęp do prywatnych składników klasy, uczyń ją funkcją zaprzyjaźnioną. 
4. Napisz klasę Dziennik (dziennik.h i dziennik.cpp), która będzie przechowywać i przetwarzać oceny ucznia z trzech różnych przedmiotów.
Właściwości:
Każdemu z przedmiotów odpowiadać ma jeden obiekt klasy Statystyka, można utworzyć trzy osobne obiekty lub tablicę 3-elementową (uwaga – Statystyka musi wtedy mieć konstruktor domyślny).
Metody:
PodajOceny: Użytkownik podaje wszystkie oceny ze wszystkich przedmiotów. Wykorzystaj funkcję pobierz.
WypiszOceny: Wyświetlenie wszystkich ocen ze wszystkich przedmiotów
WypiszStat: Wyświetlenie wszystkich statystyk dla wszystkich przedmiotów
WypiszWszystko: Wyświetlenie ocen i statystyk
Srednia: Zwraca średnią ze wszystkich ocen.
5. W funkcji main utworz dziennik ucznia i wywołaj kolejno wszystkie utworzone metody.
Ma powstać 5 plików
2 projekty – 1 statystyka, 2 dziennik//
Napisałem część kodu.
main.cpp
C/C++
#include <cstdlib>
#include <iostream>
#include "statystyka.h"

using namespace std;

int main()
{
    STATYSTYKA stst();
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
statystyka.h
C/C++
#ifndef STATYSTYKA_H_
#define STATYSTYKA_H_
class STATYSTYKA;
#endif
statystyka.cpp
C/C++
#include <cstdlib>
#include <iostream>
#include "statystyka.h"

class STATYSTYKA
{
public:
    STATYSTYKA();
    float liczbaEl = 0;
private:
    float * tab = new float[ liczbaEl ];
    if( tab == 0 )
         cout << "Brak pamięci\n";
   
    void wartosc()
    {
        cout << "Która wartość chcesz wyświetlić? ";
        cin >> liczbaEl;
        if( !liczbaEl )
        {
            cout << "Brak takiego elementu!\n";
        }
        else
        {
            cout << "\nTa liczba to: " << tab[ liczbaEl ];
        }
    }
    void nowawartosc()
    {
        cout << "Którą element chcesz zaminić? ";
        cin >> liczbaEl;
        if( !liczbaEl )
        {
            cout << "Brak takiego elementu!\n";
        }
        else
        {
            cout << "\nWprowadź nowy element: ";
            cin >> tab[ liczbaEl ];
        }
    }
    int ile()
    {
        int ile = 0;
        for( int i = 0; i < liczbaEl; i++ )
        {
            ile += tab[ liczbaEl ];
            cout << ile;
        }
        return ile;
    }
    void utworz()
    {
        if( liczbaEl <> NULL )
             delete[] tab;
       
        STATYSTYKA() // jak można się odwołać do stworzenia tab?
        {
            cout << "\nPodaj wielkość tablicy: ":
            cin >> liczbaEl;
        }
    }
    void wypisz()
    {
        for( i = 0; i < liczbaEl; i++ )
        {
            cout << "\nW elemencie tablicy pod numerem: " << liczbaEl;
            cout << " - znajduje sie liczba: " << tab[ liczbaEl ];
        }
    }
    float srednia()
    {
        float sred = 0;
        for( int i = 0; i < liczbaEl; i++ )
        {
            suma += tab[ liczbaEl ];
            sred = suma / ile;
        }
        return sred;
    }
    float max()
    {
        float max = tab[ 0 ];
        if( int i = 1; i < liczbaEl; i++ )
        {
            if( tab[ liczbaEl ] > max )
                 max = tab[ liczbaEl ];
           
        }
        return max;
    }
    float min()
    {
        float min = tab[ 0 ];
        if( int i = 1; i < liczbaEl; i++ )
        {
            if( tab[ liczbaEl ] < min )
                 min = tab[ liczbaEl ];
           
        }
        return min;
    }
}
Najwiecej błędów jak widać jest z liczbaEl.

Nie chodzi mi o to, aby ktoś napisał to za mnie. Proszę o wskazówkę.
P-50295
pekfos
» 2012-02-07 19:19:03
Poczytaj kurs. Cała definicja klasy musi być w pliku .h.
P-50299
szyx_yankez
» 2012-02-07 19:33:09
statystyka.h
statystyka.cpp
To wkońcu korzystasz z C czy C++?
Dla C są rozszerzenia plików nagłówkowych *.h, *.c dla C++ *.hpp, *.cpp.
P-50308
pekfos
» 2012-02-07 19:44:48
Rozszerzenie nagłówków nie ma żadnego znaczenia :)
P-50314
szyx_yankez
» 2012-02-07 19:58:23
W tym przypadku niekoniecznie, ale w innych owszem...


//taki off:
Stwórz na pulpicie plik:
main.c
C/C++
#include <iostream>
int main()
{
    std::cout << 1;
}
  Otwórz za pomocą C::B 10.05, spróbuj skompilować.
Te same kroki powtórz dla:
main.cpp
C/C++
#include <iostream>
int main()
{
    std::cout << 1;
}
  Wniosek: C::B (nie wiem jak inne edytory) dobiera odpowiedni kompilator(w tym przypadku gcc dla *.c lub g++ dla *.cpp) na podstawie rozszerzenia pliku wejściowego.

P-50324
pekfos
» 2012-02-07 20:04:40
Roz. .c i .h są do C a .cpp i .hpp do C++. Na ich podstawie jest wybierany kompilator do ich skompilowania. Nagłówków się nie kompiluje więc nie ma znaczenia jakie mają rozszerzenie. Mogą mieć nawet roz. .blablaheader lub w ogóle nie mieć rozszerzenia (patrz nagłówki biblioteki standardowej) i nic się nie stanie.
P-50325
« 1 »
  Strona 1 z 1