Skocz do zawartości

Recommended Posts

Witam,

 

chciałem założyć temat do luźnych rozmówek na temat C++, na forum nie widziałem takowego tematu więc już jest :)

 

Ja C++ poznałem jakieś 3-4 miesiące temu w Liceum i po wakacjach czeka mnie kolejnych parę miesięcy zabawy z tymże językiem.

 

Zrobiłem w międzyczasie wiele ciekawych programików konsolowych(sortujący liczby, bankomat, przetwarzający plik tekstowy i inne proste programy)

 

Moja baza pomysłów na temat prostych programów, do nauki, się wyczerpała. Macie jakieś pomysły na programy, którymi mógłbym się czegoś nauczyć lub podszkolić obecną wiedzę ? Mój poziom z tego co myślę to bardzo podstawowy.

 

pamiętam, że zrobiłem kiedyś program w C++ który algorytmem bombelkowym sortował liczby. Niestety sortowanie np. 500.000 liczb z zakresu od 1 do 20.000 zajmowało mu dużo czasu bardzo dużo bo jakieś paręnaście minut. Jak przyśpieszyć ten tym sortowania lub jaki inny algorytm jest dość prosty ale szybszy ?

Edytowane przez Madzina
Link to post
Share on other sites
Gość JackHammer

Bardzo ciekawy temat kolega obrał, akurat będę to wkrótce miał na studiach więc może trochę schodzę z tematu ale czy zna ktoś jakieś "konkretne" książki do nauki C++ bo mam thinking ale wg. mnie jest zbyt mozolna. Chciałbym książkę która by była konkretna bez żadnych ceregieli.

Link to post
Share on other sites

Polecana szeroko książka to "Symfonia C++" Jerzy Grębosz. U mnie w syllabusie z programowania obiektowego (c++ wylacznie) znajduje się na pierwszym miejscu. Fajnie się ja czyta, ale czasami trochę za dużo ględzenia w niej jest (może takie wrażenia jak się zna już w miarę język Ansi C). W każdym razie od siebie polecam.

 

Madzina, jeśli chodzi o to sortowanie, to sortowanie bąbelkowe jest jednym z gorszych (kiepska złożoność - n2). Inne sortowania, takie dość podstawowe to:

-sortowanie przez wybieranie (najprostszy algorytm sortujący imho, też n2 zlożoność)

-sortowanie przez wstawianie (ta sama złożoność obliczeniowa co w bąbelkowym - ale algorytm i tak jest szybszy (lub równy) babelkowemu)

Teraz szybsze (i trochę trudniejsze algorytmy):

-sortowanie przez scalanie (mój ulubiony;p złożoność: n*logn, czyli najlepsza dla algortmów porównujących ze sobą elementy tablicy)

-sortowanie przez kopcowanie (też fajny, ale musisz się dowiedzieć co to jest kopiec itd., złożoność jak wyżej)

-quicksort (przeważnie najlepszt algorytm sortujący - standardowo zaimplementowany w C/C++, najczęściej używany chyba, ciekawa sprawa jest ze złożonością, albowiem pesymistyczna wynosi n2, ale średnia wynosi n*logn, przy czym jest on z pewnych powodów szybszy od kopcowania, czy scalania)

-sortowanie przez zliczanie(złożoność liniowa, bardzo ciekawy algorytm, ale może okazać się bardzo "pamięciożerny" - potrzebna tablica o wielkości największego elementu z tablicy sortowanej)

 

A co do innych programów, to dowiedz się co to jest "lista" i spróbuj ją zaimplementować, dość proste, ale ciekawe zagadnienie.

Link to post
Share on other sites

Z prostych programów proponowałbym:

  • wyszukanie pierwszych x liczb doskonałych
  • prosty kalkulator
  • implementacja listy jedno,dwu-kierunkowej ( bardzo pomocne w zrozumieniu i nabraniu wprawy we wskaźnikach)
  • find & replace dla pliku tekstowego ( użytkownik wprowadza string i ścieżkę do pliku, a program zamienia szukany string na wskazany
Wszystko zależy od tego co już umiesz. Napisz co potrafisz, a znajdziemy jakieś ciekawe przykłady.
Link to post
Share on other sites

Jeśli chcesz nauczyć się porządnie algorytmów, w dość łatwy, dobrze wytłumaczony i przystępny sposób, to polecam książkę

 

http://www.podreczniki-gandalf.pl/b/wprowadzenie-do-algorytmow/

 

Znajduja się tam dobrze wytłumaczone wszystkie wyzej wymienione algorytmy.

 

Jesli bedziesz chciał, mogę sporzadzic listę, co warto poznać :).

Link to post
Share on other sites
  • 1 miesiąc temu...
  • 2 tygodnie później...

po pierwsze to nie wiem co wy tak z tym C++ - jest to trudny jezyk, skomplikowany skladniowo, dla poczatkujacego fakt ze jest implementacja obiektowosci ma zerowe znaczenie, szczegolnie ze jest trudna - jak sie jest poczatkujacym to sie zaczyna (pomijam jakies pierdolowate skrypciki html, jscript, delphi itd) od C ew. jakiegos jezyka na platforme .NET jesli pod windows piszecie

 

c++ dla laika to najprostsza droga do zniechecenia programowaniem - co do sportowania masz tu heapsorty (ktos tam wyzej nazywa kopcowaniem) - kiedys tego nauczali, mnie na studiach na podstawach programowania, teraz nie wiem czego ucza (??)

 

int main()

{

//def zmiennych

long i, j, k, n, m, x, *tab;

//set zmiennych

cin >> n >> m; tab = new long [n+1]; srand(time(NULL));

//exec

for(i=1; i<=n; i++)

tablica=rand() % (m+1);

for(i=2; i<=n; i++) { j=i; k=j/2; x=tab; while(k>0 && tab[k]<x) { tab[j]=tab[k]; j=k; k=j/2; } tab[j]=x; } for(i=n; i>1; i--) { swap(tab[1], tab); j=1; k=2; while(k<i) { if(k+1<i && tab[k+1]>tablica[k]) m=k+1; else m=k; if(tab[m]<=tab[j]) break; swap(tab[j], tab[m]); j=m; k=2*j; } }

//clean

for(i=1; i<=n; i++)

cout << tab << " ";

cout << "\n";

delete tab;tab=0;

return 0;

}

 

kod na pewno ma jakies syntaxy nie byl kompilowany

Link to post
Share on other sites

A ja polecam dodać sobie do zakładek tę stronę: http://www.parashift.com/c++-faq-lite/ Albo jeśli ktoś nie boi się angielskiego, to proponuję zakupić wersję książkową, np. z http://www.betterworldbooks.com/

 

Oprócz tego polecam http://helion.pl/ksiazki/c-50-efektywnych-sposobow-na-udoskonalenie-twoich-programow-scott-meyers,cp50sp.htm i inne pozycje Scotta Meyersa.

Link to post
Share on other sites
  • 2 miesiące temu...

Skoro już mowa o C++ to zapytam czy opłaca się kupić tą najnowszą wersje Symfoni Standard 2 Tomy ISO C++?

Żeby się trochę podszkolić w tym języku programowania. Mam co prawda jakieś ebooki Symfoni 3 i 4 tomowej, ale to już starocie. Czy może polecacie jakąś inną książke do nauki C++ ,ale koniecznie musi być w najnowszym standardzie 0x.

Pozdro!!!

Link to post
Share on other sites
  • 1 miesiąc temu...

Zna się tu ktoś na Visualu C++? Mam zrobić w MS Visual Studio 2 z 3 tych zadań i nie wiem jak się za to zabrać :/

 

1. Napisać program, który będzie konwertował temperaturę podaną w jednej skali na inną. Należy uwzględnić skale temperatur: Celsjusza, Kelvina i Fahrenheita. Propozycje kontrolek: TextBox, Label, Button.

 

2. Napisać program, który umożliwiałby otwarcie i odczyt pliku tekstowego, a następnie dopisanie tekstu i zapisanie zmian. Polecenia „Otwórz”, „Zapisz”, „Zamknij” powinny znajdować się w menu głównym (komponent MenuStrip), zaś sam tekst powinien być wyświetlany w polu tekstowym (komponent TextBox).

 

3. Zadeklarować dynamicznie tablicę, wypełnić ją danymi liczbowymi, wyświetlić w polu tekstowym, a następnie używając jeden ze znanych algorytmów sortowania, posortować elementy tablicy rosnąco i wyświetlić w polu tekstowym.

Link to post
Share on other sites

po wieku widze ze jestes na studiach ... perwnie jeszcze inforamtycznych ? chcesz gotowca czy pomoc ?

1) 1 zadanie jest banalne przeciez ...

2 i 3 pewnie w google znajdziesz troszke modyfikacji i gotowe

Link to post
Share on other sites

Wiem że dla niektórych zadanie wydaje się banalne ale programowanie najwidoczniej nie jest dla mnie. W ogóle mnie do tego nie ciągnie, wszystko robie na przymus a w taki sposób to nic mi nie wychodzi :/

 

Próbowałem to 3 zrobić ale coś mi nie wychodzi, nie wiem co jest źle. :/

http://www.sendspace.com/file/fpwg2f

Link to post
Share on other sites

Jak dla mnie symfonia jest beznadziejna, po przeczytaniu 1 rozdzialu odrazu ja sprzedalem. Wg najlepszą pozycja jest książka "Język C++. Szkoła programowania." Prathy. Wszystko ładnie opisane, bez niepotrzebnego cwaniakowania i ględzenia, i do tego wszystko w jednej książce niż w kilku tomach syfoni + pasja.

 

A gdzie w tych plikach znajduje się funkcja która sortuje. Straszny bałagan tam masz.

Link to post
Share on other sites

Po pierwsze to ten projekt sie nie kompiluje dużo błędów. Jak już je poprawiłem to efekty działania są następujące :

 

Z lewej strony screen po wypełnieniu tablicy 1 i 2 kolejno od 0 do 9 . Z prawej odwrócenie tablicy numer 2 i wyniki zapisane do tablicy 1.

 

Uwagi według treści tablica ma być wypełniona losowo funkcja random i te sprawy i wypełnij tylko jedną. Dla nieuporządkowanych danych odwrócenie tablicy nie posortuje jej. W nagłówku algorithm są funkcje do sortowania bodajże qsort wykorzystaj to. Jeszcze lepiej skorzytać z metody Sort w końcu korzystasz z System Array klasy.

 

Na drugim screenie widac pozostalosci po drugim wyswietleniu bo w funkcji wyswietl używasz AppendText .

 

http://thumbnails64.imagebam.com/16571/ae63a4165704881.jpg

Edytowane przez Malwin
Link to post
Share on other sites

Na szybko to przerobiłem tak, żeby pasowało do treści zadania. Nie zmieniałem struktury kodu itp bo na dobrą sprawę trzeba by całość przepisać, żeby to jakoś wyglądało.

 

http://dl.dropbox.com/u/31984185/Tablica.7z

 

W ogóle zamiast bawić się w c++/cli napisałbym to w c# :) Tam się dosyć ciekawie robi gui i przede wszystkim szybko korzystając z WPF 4.0 oraz XML. Tym bardziej, że nie korzystasz z czystego C++ tylko c++/cli co wymaga obecności platformy .NET .

Edytowane przez Malwin
Link to post
Share on other sites

To jest przerobione(comb sort) bąbelkowe sortowanie. Ma dużą stała ale to n log n i jest prosty do napisania. Ogólne polecam nauczyć się merge-sorta, quick-sorta i sortowania przez zliczanie. Zawsze się przydadzą modyfikacje tych algorytmów.

void comb_sort(int *input, size_t size) {
    size_t gap = size;
    bool swapped = false;

    while ((gap > 1) || swapped) {
	    if (gap > 1) {
		    gap = (size_t)((double)gap / 1.247330950103979);
	    }

	    swapped = false;

	    for (size_t i = 0; gap + i < size; i++) {
		    if (input[i] - input[i + gap] > 0) {
			    int swap = input[i];
			    input[i] = input[i + gap];
			    input[i + gap] = swap;
			    swapped = true;
		    }
	    }
    }
Link to post
Share on other sites
  • 2 tygodnie później...

Jezyk programowania rzecz wzgledna, znajac skladnie jednego i majac pojecie o programowaniu innego jest sie w stanie nauczyc 2-3 dni. Algorytmy? Sa ich setki na necie, jeden lepszy od drugiego tylko brac i przerabiac...

 

Chcecie projekt? :

 

LOTTO - totalizator przechowuje wszystkie losowania i wyniki duzego lotka w pliku txt - plik dostepny an stronie totalizatora.

Plik ten wczytac i sparsować. Na podstawie danych obliczyc najabrdziej prawdopodobne numery (uwzgledniajac dzisiejszy dzien tygodnia, dzien miesiaca, miesiac i ogolna czestotliwosc wypadajacych numerkow)

 

Aplikacja dość do nauki ciekawa, a przy tym moze sie przydac...

Link to post
Share on other sites

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz w tym wątku...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...