Madzina 47 Napisano 9 Lipca 2011 Udostępnij Napisano 9 Lipca 2011 (edytowane) 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 9 Lipca 2011 przez Madzina Cytuj Link to post Share on other sites
Gość JackHammer Napisano 9 Lipca 2011 Udostępnij Napisano 9 Lipca 2011 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. Cytuj Link to post Share on other sites
slawkow68 7 Napisano 10 Lipca 2011 Udostępnij Napisano 10 Lipca 2011 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. Cytuj Link to post Share on other sites
Malwin 16 Napisano 10 Lipca 2011 Udostępnij Napisano 10 Lipca 2011 Symfonia to dopiero lanie wody. Nieśmiertelna pozycja numer jeden to "The C++ Programming Language" od samego autora języka C++. Cytuj Link to post Share on other sites
JoHnY_Rico 1 Napisano 15 Lipca 2011 Udostępnij Napisano 15 Lipca 2011 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. Cytuj Link to post Share on other sites
Piotr_C 1 Napisano 18 Lipca 2011 Udostępnij Napisano 18 Lipca 2011 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ć . Cytuj Link to post Share on other sites
Madzina 47 Napisano 18 Lipca 2011 Autor Udostępnij Napisano 18 Lipca 2011 teraz odpoczywam sobie i się totalnie obijam (trochę grafikę 3D pogłębiam), jak wrócę z wakacji to sie za coś zabiorę Cytuj Link to post Share on other sites
ProgShield 77 Napisano 19 Sierpnia 2011 Udostępnij Napisano 19 Sierpnia 2011 Dla amatorów chcących się nauczyć c++ "symfonia c++" to najlepszy wybór bo a opisane w niej podstawy i to co każdy powinien umieć na późniejszą lekturę polecam "pasję c++" tego samego autora Cytuj Link to post Share on other sites
wstrzasmen 0 Napisano 29 Sierpnia 2011 Udostępnij Napisano 29 Sierpnia 2011 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 Cytuj Link to post Share on other sites
mosiek 4 Napisano 30 Sierpnia 2011 Udostępnij Napisano 30 Sierpnia 2011 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. Cytuj Link to post Share on other sites
strateg 0 Napisano 4 Listopada 2011 Udostępnij Napisano 4 Listopada 2011 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!!! Cytuj Link to post Share on other sites
ProgShield 77 Napisano 6 Listopada 2011 Udostępnij Napisano 6 Listopada 2011 Kup symfonie standard iso sam mam i powiem ci że bardzo dobra jest :0 Cytuj Link to post Share on other sites
Gość JackHammer Napisano 12 Listopada 2011 Udostępnij Napisano 12 Listopada 2011 Ja korzystam z Język Ansi C Cytuj Link to post Share on other sites
ProgShield 77 Napisano 13 Listopada 2011 Udostępnij Napisano 13 Listopada 2011 każdy korzysta z tego co chce i zabiera się za język jaki chce ;0 Cytuj Link to post Share on other sites
rafal12322 5830 Napisano 13 Grudnia 2011 Udostępnij Napisano 13 Grudnia 2011 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. Cytuj Link to post Share on other sites
orbik 1407 Napisano 14 Grudnia 2011 Udostępnij Napisano 14 Grudnia 2011 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 Cytuj Link to post Share on other sites
rafal12322 5830 Napisano 20 Grudnia 2011 Udostępnij Napisano 20 Grudnia 2011 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 Cytuj Link to post Share on other sites
maden 25 Napisano 21 Grudnia 2011 Udostępnij Napisano 21 Grudnia 2011 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. Cytuj Link to post Share on other sites
Malwin 16 Napisano 21 Grudnia 2011 Udostępnij Napisano 21 Grudnia 2011 (edytowane) 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 21 Grudnia 2011 przez Malwin Cytuj Link to post Share on other sites
rafal12322 5830 Napisano 21 Grudnia 2011 Udostępnij Napisano 21 Grudnia 2011 A mógłbyś wrzucić ten plik z poprawionym przez ciebie programem, będę bardzo wdzięczny? Cytuj Link to post Share on other sites
Malwin 16 Napisano 21 Grudnia 2011 Udostępnij Napisano 21 Grudnia 2011 (edytowane) 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 21 Grudnia 2011 przez Malwin Cytuj Link to post Share on other sites
rafal12322 5830 Napisano 21 Grudnia 2011 Udostępnij Napisano 21 Grudnia 2011 (edytowane) Wielkie dzięki Narazie niestety siedzimy w c++, niedługo mamy przejść do c#. Edytowane 21 Grudnia 2011 przez rafal12322 Cytuj Link to post Share on other sites
waszak 4 Napisano 22 Grudnia 2011 Udostępnij Napisano 22 Grudnia 2011 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; } } } Cytuj Link to post Share on other sites
PhobosX 0 Napisano 2 Stycznia 2012 Udostępnij Napisano 2 Stycznia 2012 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... Cytuj Link to post Share on other sites
Recommended Posts
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ą.