Chotkos's Blog

Programowanie i informatyka

PCsampler – twój MPC na komputerze!

Jesteś producentem muzycznym, a może dopiero zaczynasz swoją zabawę z komponowaniem bitów – tak czy inaczej sprzęt wysokiej klasy jak MPC60 jest drogi! Całe szczęście jest nowy produkt spod ręki Chotkosa!

PCSampler to nic innego jak symulator popularnej  eMPeCetki, wg. planów będzie posiadał wszystkie funkcje oryginalnego sprzętu. Na chwilę obecną trwa proces programowania i testów, a wersję której kilka screenów prezentuję można śmiało nazywać alfą.

Można również przesłuchać mój pierwszy bit nagrany w tym programie (wciąż się uczę 😉 )

Reklamy

Grudzień 5, 2010 Posted by | Informatyka ogólniej, PCSampler, Programowanie, Uncategorized | , , , , , , , , , , , , , , , , , , , , | 2 Komentarze

Zlecenia

Coraz częściej widzę że poszukujecie na moim blogu informacji dotyczących różnych dziedzin programowania lub odpowiedzi do zadań z informatyki. Jeżeli masz jakąś pracę domową z zakresu programowania C++/Pascal/html/php to napisz do mnie na chotkos[małpa]gmail.com ustalimy cenę za jaką je wykonam 😉 Nie bójcie Się nie gryzę.

Pozdrawiam Chotkos

Październik 2, 2010 Posted by | Algorytmy, Dla zielonych, Doświadczenia, Informatyka ogólniej, Konkursy, Perełki, Programowanie, Uncategorized | , , , , , , , , | Dodaj komentarz

Rekordy

Tym razem powiemy sobie o rekordach – bardzo przydatnej rzeczy jeżeli potrzebna nam jest np. baza danych. Zacznijmy od implementacji ( pascal)

type
uczen=record
imie,nazwisko,adres:string;
wiek,ileocen:longint;
srednia:real;
oceny:array[1..50] of longint;
end;

W ten oto sposób otrzymaliśmy nowy typ zmiennej „uczen” którego możemy dowolnie używać, przechodzimy teraz do var:

var
a:array[1..40] of uczen;

jak widać możemy sobie spokojnie stworzyć tablicę uczniów – taki nasz komputerowy dziennik, ale też na nich operować, co robimy już w głównej części programu, jeszcze tylko do var dodam sobie  zmienną oper – dzięki której obsłużymy naszą bazę danych:

oper,i,suma:longint;
begin
Tutaj to już w sumie możemy robić co chcemy, ale oczywiście podam kilka przykładów ;)
readln(oper);
writeln(a[oper].imie,' ',a[oper].nazwisko);
writeln(a[oper].adres);
for i:=1 to a[oper].ileocen do
begin
writeln(a[oper].oceny[i],' ');
suma:=suma+a[oper].oceny[i];
end;
a[oper].srednia=suma /a[oper].ileocen;
writeln(lśrednia=l,a[oper].srednia);
writeln('uczeń ma ',a[oper].wiek,' lat');
end.

Jak widzimy program ma dostęp do wszystkich pól rekordu, również tych które są tablicami 😉

Dobrym ćwiczeniem będzie jeżeli napiszesz program podobny do tego, pozwalający na wprowadzanie i wczytywanie informacji do rekordu i z rekodu. Powodzenia ;)!

Luty 5, 2010 Posted by | Doświadczenia, Programowanie | | Dodaj komentarz

Programowanie Dynamiczne

Być może nie powinno się to znaleźć w kategorii algorytmy, ale jest to jedna z podstawowych strategii w programowaniu, o której bardzo źle byłoby zapomnieć.

Programowanie dynamiczne da się streścić krótkim zdaniem – rozwiązywanie dużego problemu za pomocą wyników dla problemów mniejszych. Najlogiczniej będzie przedstawić to na jakimś przykładzie: wyobraź sobie, że musisz zaplanować trasę dla samochodu od twojego domu do stolicy Maroka – Rabatu. Oczywiście wziąć ogromną mapę i zacząć na niej zaznaczać ścieżkę jest prostym rozwiązaniem, ale niekoniecznie ścieżka którą w ten sposób wybierzesz będzie najszybsza, a poza tym cała ta ogromna mapa byłaby potrzebna w trakcie podróży – i powiedzmy szczerze – dosyć niewygodna. Rozwiązaniem tego programu jest właśnie programowanie dynamiczne. Zacznijmy od wyjechania z naszego miasta – określmy najkrótszą ścieżkę do opuszczenia miasta i ominięcia korków 😉 trasę zaznaczmy na planie miasta, następnie wyznaczmy sobie inny cel, który nie będzie zbyt daleko – powiedzmy naszą zachodnią granicę, wyznaczamy ścieżkę, zapisujemy na małej mapce Polski i przechodzimy do mapy Niemiec, gdzie będziemy udawali się do Francji…

W ten oto sposób mamy w podręcznym bagażu kilka niewielkich, poręcznych mapek z których każda prezentuje najkrótszą ścieżkę – rozwiązanie jest szybkie, wygodne i co najważniejsze – optymalne.

Jak to przełożyć na programowanie? Miałem ostatnio na kółku Mazowieckich Talentów takie zadanie:

http://chomikuj.pl/chotkos/Programowanie/materia*c5*82y/sci.pdf

z tym że robiliśmy je tak aby bezwzględnie zawsze zaczynać od pola [1,1]

Jak to zrobić? Ano właśnie tutaj również mamy programowanie dynamiczne. Nasz program powinien sprawdzać który ruch bardziej mu się opłaca – w prawo, w lewo, czy w dół.

Zaczynamy od pola 1,1 i stajemy w następnym polu które się bardziej opłaca. Trzeba tylko pamiętać, żeby na krawędziach ustawić naprawdę małe liczby typu -1000001; abyśmy nigdy nie wyszli poza naszą pamięć przeznaczoną na tablicę 😉

W tym rozwiązaniu cały czas korzystamy z poprzednich obliczeń i to właśnie jest dynamika.

oczywiście mam rozwiązanie tego zadania, ale prosiłbym go nie czytać bo będzie ono zadaniem do tego tematu 😉

Tak więc zapraszam do sprawdzarki.

Luty 4, 2010 Posted by | Algorytmy, Programowanie | | Dodaj komentarz

Sito Erastotenesa

Dzisiaj omówię bardzo cwany algorytm dot. liczb pierwszych – Sito Erastotenesa. Pozwala on szybko wygenerować tablicę liczb pierwszych w przejrzysty i zrozumiały sposób:

Nasz program polegać będzie na tym iż jeżeli spotka liczbę „nieoznaczoną” to uzna ją za liczbę pierwszą i oznaczy wszystkie jej wielokrotności., jeżeli spotka oznaczoną, to po prostu przejdzie dalej. Może zaprezentuję to na n=10.

kolor czerwony – oznaczona , kolor niebieski – nieoznaczona, kolor zielony uznana za pierwszą.

PS – zawsze zaczynamy od dwójki, bo jedynka zaznaczyłaby nam wszystkie liczby do n 😉

1.

2 3 4 5 6 7 8 9 10 //pusta tablica

2

2 3 4 5 6 7 8 9 10 // wybranie dwójki jako nieoznaczonej

3

2 3 4 5 6 7 8 9 10 //oznaczanie wielokrotności

4

2 3 4 5 6 7 8 9 10 // wybranie trójki jako nieoznaczonej

5

2 3 4 5 6 7 8 9 10  //wykreślamy wielokrotności trójki

(…)

10

2 3 4 5 6 7 8 9 10 //LP z tego ciągu to 2,3,5,7


Wydaje mi się że już wiecie o co chodzi, więc teraz opublikuję kod:

Dla C++ Dla Pascala

Zadanie do wykonania


Luty 3, 2010 Posted by | Algorytmy, Programowanie | , | Dodaj komentarz

Rekurencja

„Aby zrozumieć rekurencję, trzeba najpierw zrozumieć rekurencję”

Słowa, które napisałem wyżej, mogą się wydać bezsensowne, ale na tym właśnie polega rekurencja. Zazwyczaj występuje w funkcjach, w których musimy robić coś wgłąb np. jakiegoś grafu, jest to eleganckie i nowoczesne rozwiązanie, chociaż dla niektórych trudne do zrozumienia.

Najprościej rzecz ujmując rekurencja jest wtedy, kiedy funkcja f(x) uruchamia funkcję f(x). Najlepiej zobrazuje to przykład.

funkcja(X)

{

  • powiększ a o 1
  • wypisz a
  • czy a>5 ?
  1. jeśli nie to uruchom funkcja(X)
  2. jeśli tak, to wypisz „nareszcie a=”  a.
  • napisz „costam”

}

kiedy już to przetłumaczycie na jakiś język programowania otrzymacie w konsoli:

1
2
3
4
5
nareszcie a=5
costam
costam
costam
costam
costam

Mogło was zastanowić dlaczego mamy tutaj 5x napisane „costam” i jest to na końcu a nie na początku. Pamiętaj że funkcja po zakończeniu serii rekurencji zacznie zamykać te funkcje które zaczęła wcześniej – myślę, że lepiej zobrazuje to rysunek:

wykres

kolory z wykresu odpowiadają kolorom w kodzie, czerwona kreska pionowa oznacza rekurencyjne uruchomienie funkcji. Kolorem niebieskim zaznaczyłem, gdzie kończy się dana funkcja. Wykres należy śledzić od dolnej czarnej kreski na której ustawiłem tą „piramidę”.

Warto poćwiczyć rekurencję na jakichś zadaniach np. na mainie, u mnie powinno się coś takiego niedługo pojawić w sprawdzarce – jak tylko wpadnę na dobry pomysł 😉

Styczeń 24, 2010 Posted by | Algorytmy, Programowanie | | Dodaj komentarz

Zadanie do bisekcji

Artykuł o bisekcji był nieco wcześniej ale dzisiaj wrzuciłem zadanie – Kolejka. Ogólnie to nie mam niestety dostępu do ograniczeń czasowych ( bo wilibyście się z bólu próbując się w nich wyrobić (-:[ ) dlatego też rozwiązania „na pałę” przechodzą, natomiast dla własnej uczciwości proszę o napisanie ich za pomocą bisekcji – w końcu robimy to żeby się czegoś nauczyć a nie szpanować miejscem w rankingu 😉

Styczeń 22, 2010 Posted by | Algorytmy, Programowanie | | Dodaj komentarz

Ideone.com

Muszę napisać tu o czymś ciekawym. Zapewne wiecie o projekcie Google Chrome OS, który zakłada, że już niedługo prawie w ogóle nie będziemy wykorzystywali dysków w naszych komputerach – wszystkie pliki i inne rzeczy znajdą swe miejsce w internecie, a w dodatku będziemy mieli również dostęp do aplikacji online. Piękna wizja nie?

No właśnie, tylko czy to jest dobre dla wszystkich? Wiecie… Panie z sekretariatu które nacodzień używają worda i exela raczej nie poczują problemu, ale powiecie że w sprawach takich jak programowanie liczą się różne parametry komputera, dostępność bibliotek, wersja kompilatora , blablablabla…

Możemy tak ględzić, tymczasem ktoś wpada na genialny pomysł i pewnie już od dziś zarabia niezłą kasę za niego – http://www.ideone.com

Środowisko programowania online! W lewym pasku wybieramy nasz ulubiony język programowania i odhaczamy „syntax highlite” – mamy środowisko programowania wygodniejsze pewnie od niektórych środowisk w tradycyjnej wersji, które jeszcze czasem da się spotkać.

  1. Strona pozwala zakodzić program,
  2. wgrać do niego input („click here to paste input (stdin) „) ,
  3. Skompilować! (submit)
  4. Testować do woli!

Polecam wszystkim którzy z jakichś względów nie mogą używać kompilatora na swoim komputerze ( a może i komórce-ile to możliwości daje!) Poza tym raczej można być pewnym że wszystko będzie sprawnie działać. Strona pozwala również na szybkie podzielenie się kodem w serwisach społecznościowych i ściągnięcie pliku źródła.

Jedyną wadą jest brak możliwości ściągnięcia pliku w formie skompilowanej .exe jednak da się bez tego żyć 😉

Styczeń 22, 2010 Posted by | Doświadczenia, Programowanie | | Dodaj komentarz

Reklama?

Szczerze mówiąc nie spodziewałem się, ale moja strona została zareklamowana na http://www.contest.pl dokładniej tutaj.

Ponieważ głupio mi zostawić sprawdzarkę właściwie pustą postanowiłem dorzucić nowe zadanko, do którego macie dostęp tutaj, jeżeli nie dajecie sobie rady to warto przeczytać jeden z wcześniejszych wpisów.

Dziękuję za promowanie bloga, umieszczam Was w blogrollu.

Styczeń 22, 2010 Posted by | Algorytmy, Doświadczenia, Programowanie | | Dodaj komentarz

Sprawdzarka Uruchomiona!

Mam dobrą wiadomość, w prawym górnym rogu strony zauważyliście zapewne nową podstronę „Sprawdzarka zadań”. Dzisiaj w kilka minut udało mi się rozkręcić to do działającej postaci ;] co prawda jedyne zadanie jakie tam mam to zadanie testowe mające na celu sprawdzenie czy kompilator działa, ale już niedługo pojawią się nowe zadania do nowych zagadnień. Jestem z tego bardzo zadowolony bo teraz mogę widzieć wymierne wyniki pracy ;]

Styczeń 18, 2010 Posted by | Doświadczenia, Programowanie | | 1 komentarz