Ocena umiejętności + może jakieś porady (c++/c#)

0

Siema.
Jestem na pierwszym roku informatyki i teraz już wiem że jak mam czekać aż oni mnie tam czegoś naprawdę przydanego nauczą to się chyba nie doczekam ;P Sami wykładowcy podkreślają że żeby zostać programistą trzeba się bardzo dużo uczyć samemu. No i tu się pojawia problem, jako że programowanie miałem już w szkole średniej to tak naprawdę nie wiem na jakim poziomie jestem, ćwiczenia z kursów są dla mnie za łatwe, a te poważniejsze rzeczy są za trudne.
I tutaj moja prośba, pomoglibyście ocenić mi moje umiejętności i opracować właściwą drogę rozwoju?
Może dalibyście mi kilka rzeczy do zrobienia na różnym poziomie trudności i to co bym zrobił to byłby mój poziom, chociaż nie wiem czy to dobry sposób oceny "skilla", tutaj zdaje się na was.

0

znajomość języka to jedna sprawa
Algorytmy to druga sprawa
Doświadczenie to trzecia sprawa

jeżeli chodzi o c++ to czy potrafisz wszystko co opisał w książkach J. Grębosz Symfonia c++ oraz Pasja c++?
Jeżeli odpowiedź będzie twierdząca to Ty napisz nam co potrafisz z c++

Jeżeli chodzi o algorytmy to masz SPOJ, main.edu.pl etc.

0

Symfonie mam i przeczytałem, więc można powiedzieć że umiem, a jak czegoś zapomniałem to zawsze mogę zajrzeć i sobie przypomnieć. Pasji nie mam i nie czytałem.
To co umiem:

  1. Zmienne - umiem i mam doświadczenie
  2. Pętle - umiem i mam doświadczenie
  3. Tablice - umiem i mam doświadczenie
  4. Funkcje - umiem i mam doświadczenie
  5. Wskaźniki - umiem, ale rzadko używam
  6. Klasy - wydaje mi się że umiem, ale nie mam doświadczenia
    O czymś zapomniałem?
0

ad.6. znaczy ze nie umiesz bo OOP to jest tak szeroka dziedzina że na studiach czasem są po 2-3 semestry na ten temat ;)

0

Programowanie obiektowe zaczynam od następnego semestru

0

czyli nie umiesz podstaw c++ (tak, OOP to podstawa)
Także musisz jeszcze dużo się uczyć i dużo pisać. (to samo tyczy się c#, skoro w c++ nie znasz OOP to w c# tym bardziej)

0

A jak się szybko tego nauczyć, bo w Symfonii są opisane klasy, ale nie wiem gdzie znaleźć przykładowe zadanka w których trzeba to zastosować. Zobaczyłem też te stronki które podałeś, powiedz mi mam się najpierw nauczyć programowanie obiektowego czy bawić się tym SPOJem

0

to mam takie zadanie dla Ciebie. Cokolwiek będziesz chciał napisać w c++ rób to obiektowo (za pomocą klas, dziedziczenia, polimorfizmu). To co już napisałeś, przerób.

tak jak mówiłem, algorytmy a nauka języka to dwie różne rzeczy. Można się ich uczyć równolegle.

0

Będę próbował i wezmę się za algorytmy, przecież bez nich nie da się zostać programistą

0

Z samego czytania książek się programowania nie nauczysz. To ,że przeczytałeś jakąś książkę nie znaczy ,że zrozumiałeś dano zagadnienie. Tzn jak będziesz używał danych konstrukcji języka to je zrozumiesz dokładniej. OOP się nie nauczysz z książki tylko z praktyki. Bo co z tego jęśli będziesz wiedział co to dziedzicznie,polimorfizm jak nie będziesz tego potrafił stosować w praktyce.

0

Jeśli chodzi o OOP, to mogą się przydać takie (lub podobne) książki:
http://helion.pl/ksiazki/analiza-i-projektowanie-obiektowe-rusz-glowa-brett-d-mclaughlin-gary-pollice-david-west,anprob.htm
http://helion.pl/ksiazki/wzorce-projektowe-rusz-glowa-elisabeth-freeman-eric-freeman-bert-bates-kathy-sierra,wzorrg.htm
http://helion.pl/ksiazki/wzorce-projektowe-elementy-oprogramowania-obiektowego-wielokrotnego-uzytku-erich-gamma-richard-helm-ralph-johnson-john-m-vlissides,wzoele.htm

A najlepszą nauką jest praktyka, jak to napisał @fasadin. Tylko dobrze dać swój kod do oceny komuś bardziej doświadczonemu, bo sam prawdopodobnie nie będziesz wiedział, że coś zrobiłeś źle.

0

A miałby ktoś jakieś propozycję skąd mógłbym wziąć zadania z OOP, ale nie za trudne. Chciałem robić tak jak poradził fasadin czyli przerabiać programy, tylko że niedawno byłem zmuszony zrobić format, a nie mogę znaleźć pendriva ze starymi programami.

0

Zrób jakieś proste zadania ze SPOJa.

0

Próbowałem zrobić najprostsze zadanie ze SPOJA czyli to http://pl.spoj.com/problems/PRIME_T/ i wyniki wychodzą poprawne, ale mimo to wywala błąd w wyniku(na SPOJU)

#include<iostream>
using namespace std;
bool czy_pierwsza(int liczba)
{
     bool a = true;
     for(int i = 2; i<=liczba/2; i++)
     {
             if (liczba%i==0)
             {
                             a = false;
                             break;
             }
     }
     return a;
}
int main()
{
    int n, *liczba;
    cin>>n;
    liczba = new int[n];
    for(int i = 0; i<n; i++)
    {
            cin>>liczba[i];
    }
    for(int i = 0; i<n; i++)
    {
              if (czy_pierwsza(liczba[i])) cout<<"TAK\n";
              else cout<<"NIE\n";
    }
    
    system("pause");
    return 0;
}
 
0
Inquis1t0r napisał(a):

Zrób jakieś proste zadania ze SPOJa.

Co ma SPOJ do OOP?

0

A miałbyś jakąś stronkę z zadaniami do nauki OOP?

0
Takisobienick napisał(a):

A miałbyś jakąś stronkę z zadaniami do nauki OOP?

Napisz coś, jakiś prosty program, opierając się na zasadach OOP

0

Pierwsze z dziurawej głowy, oparte o tradycyjne zadanka: prosty dziennik (zbiór uczniów, z działaniami typu dodaj ocenę), prosta biblioteka (wstawianie książek, wyszukiwanie) itp.
Z dziedziczeniem przychodzi mi do głowy tylko jakiś prosty zwierzyniec - zbiór zwierząt, po którym przechodzisz, a one wywołują metodę np. wydajDzwiek() (w efekcie - dla kota wypisze się "miau", dla dresa "dawaj komórkę") itp.

0

Pisz cokolwiek Ci wpadnie do glowy ;)

0

Dzisiaj napisałem swój pierwszy programik z użyciem klasy :D

#include<iostream>
using namespace std;
class uczen
{
      private:     
             string imie;
             string nazwisko;
             int wiek;
             int ocena[3];
      public:
             uczen(string a, string b, int c)
             {
                          imie = a;
                          nazwisko = b;
                          wiek = c;
                          cout<<"Uczen "<<imie<<" "<<nazwisko<<" zostal utworzony"<<endl;
             }
             ~uczen()
             {
                     cout<<"Uczen "<<imie<<" "<<nazwisko<<" zostal usuniety"<<endl;
             }
             void dodaj_ocene(int d, int n)
             {
                            ocena[n] = d;
             }
             void wyswietl_dane()
             {
                             cout<<"Imie: "<<imie<<endl;
                             cout<<"Nazwisko: "<<nazwisko<<endl;
                             cout<<"Wiek: "<<wiek<<endl;
                             cout<<"Oceny: ";
                             for(int i = 0; i<3; i++)
                             {
                                     cout<<ocena[i]<<", ";
                             }
                             cout<<endl;
             }
};
int main()
{
    string imie, nazwisko;
    int wiek, ocena;
    uczen *a;
    cout<<"Podaj imie: ";
    cin>>imie;
    cout<<"Podaj nazwisko: ";
    cin>>nazwisko;
    cout<<"Podaj wiek: ";
    cin>>wiek;
    a = new uczen(imie, nazwisko, wiek);
    for(int i = 0; i<3; i++)
    {
            do
            {
            cout<<"Podaj "<<i+1<<" ocene: ";
            cin>>ocena;
            }
            while(ocena<1||ocena>6);
            a->dodaj_ocene(ocena, i);
    }
    a->wyswietl_dane();
    delete a;
    
    
    system("pause");
    return 0;
}
 

Co o tym sądzicie?

0

Imho nie najgorzej.

  1. nigdy nie nazywaj tak argumentów funkcji, nazwa ma coś mówić, a a czy b nic nie mówi.
  2. metoda dodaj_ocene powinna sprawdzać czy n nie jest spoza zakresu tablicy. Są dwie możliwości powiadomienia o błędzie. Metoda może zwrócić bool mówiący czy się udało, albo lepiej rzucić wyjątkiem(ale o nich pewnie jeszcze nic nie wiesz).
  3. nie polecam robienia wypisywania w ten sposób. Ostatecznie metoda wyswietl_dane powinna przyjmować jako argument referencję do strumienia ostream i do niego wrzucać dane. Lepiej by było zwrócić odpowiednio sformatowany string.
0

Dziękuje za rady, wiem że źle nazwałem te zmienne, ale w takim prościutkim programiku łatwo się połapać, lecz masz rację lepiej nie wprowadzać złych nawyków.

 bool dodaj_ocene(int ocenka, int ktora)
             {
                  if(ocenka<1||ocenka>6)
                  {
                                      cout<<"Ocena musi byc z przedzialu 1-6"<<endl;
                                      return false;
                  }
                  else
                  {
                            ocena[ktora] = ocenka;
                            return true;
                  }
             }
for(int i = 0; i<3; i++)
    {
            do
            {
            cout<<"Podaj "<<i+1<<" ocene: ";
            cin>>ocena;
            }
            while(!tUczen->dodaj_ocene(ocena, i));
    } 

O coś takiego ci chodziło w punkcie drugim? Tego rzucania wyjątkami nie umiem i nie wiem o co chodzi, a punkt 3 nie za bardzo zrozumiałem.

0

Wlasnie na tym polega biadolenie typu "umiem to tamto i jeszcze jedno", a tak na serio sie nie umie prawie nic ;>
2. sprawdzanie zakresu: //wg. mnie bezuzyteczne

bool f(int indeks, int dane)
{
    if(indeks >= 0 && indeks < rozmiar_tablicy)
    {
        tablica[indeks] = dane;
        return true;
    }
    return false;
}
void print(ostream& os)
{
    os << blabla_jakas_zmienna;
}
  1. sposob normalniejszy
friend ostream& operator<<(ostream& os, const Klasa& klasa)
{
    os << klasa.blabla_jakas_zmienna;
}
0
n0name_l napisał(a):
void print(ostream& os)
{
    os << blabla_jakas_zmienna;
}
  1. sposob normalniejszy
friend ostream& operator<<(ostream& os, const Klasa& klasa)
{
    os << klasa.blabla_jakas_zmienna;
}

Szczerze? Nie rozumiem o co tu chodzi. No dobra wiem że ostream to strumień wyjścia, to drugie to chyba definicja operatora strumienia wyjścia i tyle z tego rozumiem, ale zawsze używałem do tego cout.

0

To jeszcze sporo Ci zostało do opanowania. Nie umiesz klas.

0

No to właśnie piszę tutaj żeby się nauczyć

0

My tu nie uczymy, ew. pomagamy znalezc rozwiazanie. Zazwyczaj tylko w przypadku gdy klient nie mogl sobie poradzic z problemem mimo wlozonego trudu.
Polece klasyke -> http://www.symfonia-cpp.pl/ ew. moja ulubienica: http://www.cplusplus.com/

1 użytkowników online, w tym zalogowanych: 0, gości: 1