newton
Reputacja
1,642
Głosów ogółem

- 17

- 5
- Prawdziwe imię
- Tomasz Rękawek
- Członek od
- 2 lata, 4 miesiące
- Ostatnio widziany
- 1 rok, 3 miesiące temu
- Witryna
- http://newton.n...
- Miejscowość
- Toruń
- Wiek
- 25
O mnie
programista, student
Pytania: 3
-
2011-02-27 23:28:07
Zastosowania matematyki w programowaniu
W programie studiów informatycznych jest bardzo dużo matematyki: algebra, analiza, teoria prawdopodobieństwa, matematyka
-
2010-02-09 22:54:19
kariera programisty
Piszemy świetne programy, używamy przyjemnych języków i ogólnie programowanie jest fajne - inaczej byśmy tego nie robili
-
2010-02-06 14:28:52
Czemu grupy nie cieszą się popularnością?
Widać, że 9fingers się rozwija - coraz więcej pytanie, odpowiedzi pojawiają się natychmiast i często są wysokiej jakości
Odpowiedzi: 55
-
2010-02-17 16:07:36 \r, \n w PHP5
Są to znaki sterujące. Akurat te dwa wymienione przez Ciebie służą do zapisania w wypisywanym tekście przejścia do nowej linii. Jednak to, czym dokładnie jest owa "nowa linia" różne system operacyjne definiują różnie. W Windows nowa linia to \r\n, w Linuksie i MacOS-ach wystarcza \n, a w starszych, egzotycznych systemach zdarza się samo \r.
Znak \r zwany jest Carriage Return. Kod pochodzi jeszcze z czasów mechanicznych maszyn do pisania - przesłanie tego kodu powodowało przesunięcie kartki w lewo. Natomiast \n, czyli Line Feed powodował wysunięcie papieru o jedną linię do góry.
Istnieje jeszcze jedno takie polecenie w PHP: \t wstawia tabulację. W języku C można wykorzystywać też \b - kod ten wywołuje systemowy dzwonek.
Warto zwrócić uwagę, że wszystkich tych kodów można używać tylko w wyrażeniach zawartych w cudzysłowie - apostrofy drukują wszystko tak "jak jest" i nie przekształcają wyrażeń z backslashem na kody sterujące.
Jeśli chodzi o praktyczne zastosowanie w PHP, to warto na przykład używać \n do ładnego formatowania wynikowego HTML-a:
echo "<select>\n"; foreach($options as $id => $value) echo "<option value=\"$id\">$value</option>\n"; echo "</select>\n";daje
<select> <option value="1">opcja1</option> <option value="2">opcja2</option> ... </select>tymczasem bez \n mielibyśmy wszystko w jednej linijce. Ładny wynikowy kod HTML ułatwia życie projektantom (mimo, że użytkownik końcowy nie widzi różnicy). Często używa się też tych znaków, gdy zapisujemy coś do pliku (na przykład generujemy CSV) albo wysyłamy maila.
-
2010-03-27 16:01:23 Wyłuskanie tagów HTML za pomocą wyrażeń regularnych
Funkcja strip_tags jest tym, czego szukasz.
-
2010-01-16 09:57:15 Windows czy Linux [zamknięte]
Jeśli chodzi o codzienną pracę z komputerem (sprawdzenie poczty, wydrukowanie dokumentu, poszukanie czegoś w necie, komunikacja przez GG, itd.) to jak dla mnie nie ma żadnej różnicy między Linuksem (w moim przypadku Debian) a Windowsem. Oczywiście chodzi o różnice funkcjonalne (dot. tego, co da się zrobić). Oczywiście wcześniej trzeba było tego Linuksa poznać.
W przypadku programowania trzeba tu rozdzielić: Visual Studio to świetne narzędzie i umożliwia bardzo przyjemne programowanie aplikacji pod Windows, Windows Mobile, itd. Dlatego moim zdaniem: okienka najlepiej programuje się pod Windows. Natomiast jeśli chodzi o inne języki: od interpretowanych (Ruby, Python) poprzez Javę aż po C(++), to zdecydowanie preferuję Linuksa. Przede wszystkim dlatego, że wszystkie dystrybucje mają te języki w swoich repozytoriach. Poza tym taka piękna sprawa jak manuale systemowe dotyczące funkcji bibliotecznych, np.:
man scanfW językach tych czuć też swoistego "ducha Uniksa" (no, może poza Javą). Wiele rzeczy - od sygnałów po operacje na plikach - można w pełni wykorzystać dopiero na systemie uniksowym.
Ostatnia kategoria to gry: tu ciągle wygrywa Windows i chyba nie jest konieczny komentarz.
-
2010-02-14 15:47:48 Jak policzyć ostatnie znaki n!?
Metoda na policzenie dokładnej ilości końcowych zer w n! jest prosta - wystarczy policzyć wszystkie wielokrotności piątki we wszystkich liczbach 1..n. Na przykład tak:
int ktora_potega(int n) // daje 1 dla 5, 2 dla 25, 3 dla 125, itd. { if(n % 5 != 0) return 0; else return 1 + ktora_potega(n / 5); } int ile_zer(int n) // liczy ilość końcowych zer dla n! { int i, z = 0; for(i = 1; i <= n; i++) z += ktora_potega(i); return z; } int main() { printf("%d\n", ile_zer(26)); }Wyjaśnienie tego faktu również jest też dość proste. Jeśli jakaś liczba > 0 kończy się na 0, to znaczy, że po rozbiciu (faktoryzacji) tej liczby na iloczyn liczb pierwszych, w iloczynie tym występują 2 i 5. Przykładowo 200 = 2 * 2 * 2 * 5 * 5. Mamy tutaj dwie pary 2 i 5, a więc liczba kończy się dwoma zerami. Silnia to iloczyn kolejnych n liczb, a więc wystarczy policzyć wszystkie występujące tu pary 2 i 5. Jednak wielokrotności 2 jest tu bardzo dużo (co druga liczba zawiera jakąś wielokrotność dwójki), a więc wystarczy policzyć wielokrotności 5. Przykład dla 10:
10! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 = po rozbiciu = 1 * 2 * 3 * (2 * 2) * 5 * (2 * 3) * 7 * (2 * 2 * 2) * (3 * 3) * (2 * 5) = grupujemy = 2^8 * 3^4 * 5^2 * 7^1 = z 2 i 5 robimy dziesiątki = 10 * 10 * 2^6 * 3^4 * 7^1 = 100 * ...
Można też uprościć obliczenie potęgi 5 w n! korzystając z wzoru:
czyli dla każdego k liczymy część całkowitą n / 5^k. Od pewnego k ta część całkowita = 0, tak więc wystarczy policzyć tę sumę do pierwszego 0. Funkcja będzie wtedy wyglądać tak:
int ile_zer(int n) { int k = 1, p = 5, s = 0, i; do { i = n / pow(p, k++); s += i; } while(i != 0); return s; }Więcej o tym wzorze tutaj, strona 6.
-
2010-02-19 12:29:40 Jakie są dobre nawyki programowania w php?
Kilka luźnych myśli:
- Niech klasy odzwierciedlają rzeczywistość.
- Pisz małe klasy, spełniające jedno zadanie.
- Kiedy masz dodać jakąś poprawkę, nie pozwól, żeby wyglądała jak poprawka.
- Nie bój się przepisać od zera kawałka aplikacji, jeśli widzisz, że przez ciągłe poprawianie stała się zbyt zagmatwana - czas poświęcony na refactoring na pewno się zwróci.
- Wybierz sobie jedną konwencję kodu (nazwy zmiennych, gdzie umieszczać { }, itd.) i się jej trzymaj.
- Wykorzystuj MVC (nie jest głupim pomysłem użyć gotowego frameworka).
- HTML w warstwie modelu i kontrolera jest niedopuszczalny.
- Naucz się tego, co oferuje PHP (w szczególności funkcje na stringach i tablicach) żeby nie wyważać otwartych drzwi.
- Używaj wyrażeń regularnych, żeby uniknąć miliona strpos-ów i substr-ów.
- SQL - tylko w warstwie modelu.
- Dbaj o strukturę bazy danych. Poczytaj o postaciach normalnych i używaj przynajmniej 2 postaci normalnej.
-
2010-03-11 13:24:06 Przeniesienie części stringa z końca na początek
<? $prefixes = array('gm.', 'ok.', 'okol.'); $names = array('Koluszki gm.', 'Warszawa ok.', 'Kraków okol.', 'gm. Poznań', 'Olsztyn'); $prefixes_string = implode('|', $prefixes); $prefixes_string = strtr($prefixes_string, array('.'=>'\.')); //kropkę trzeba poprzedzić backslashem $pattern = "/^(.+) ($prefixes_string)$/"; $replacement = "$2 $1"; $names = preg_replace($pattern, $replacement, $names); var_dump($names); -
2010-01-24 23:25:10 wyważanie otwartych drzwi, czyli pisanie czegoś, co już jest napi
Myślę, że umiejętność stosowania gotowych rozwiązań (na przykład wzorców projektowych) jest jedną z bardziej przydatnych umiejętności programisty. Korzystając z cudzego (ale dobrego!) kodu można zaoszczędzić czas i spożytkować go na aspektach związanych już bezpośrednio z naszą aplikacją. Przydaje się też wyczucie i dobra ocena własnych możliwości (umiejętności i zasobów) - są rzeczy, których nikt z nas nie zrobi lepiej niż jest zrobione (a przynajmniej nie w rozsądnym czasie).
A kiedy pisać od nowa?
- gdy istniejący kod jest słaby i brzydki,
- gdy istniejące rozwiązanie jest dobre w ogólności, ale nasze wymagania są bardzo specyficzne (jeśli mamy do czynienia z opensource to w tym przypadku można pohackować),
- gdy filozofia lub środowisko istniejącego rozwiązania różni się znacząco od środowiska naszej aplikacji (na przykład widget dla jQuery, podczas gdy my korzystamy z Prototype), co wprowadziłoby niepotrzebną heterogeniczność.
Myślę natomiast, że należy się wystrzegać działania pod wpływem NIH (Not Invented Here).
Wyjątkiem jest sytuacja, w której naszym celem jest samo programowanie, a nie utworzenie gotowego produktu (na przykład dla poszerzenia wiedzy i umiejętności) - takie wprawki mogą być wówczas rzeczywiście pouczające. Zwłaszcza przy końcowym porównaniu jak nasze rozwiązanie wypada na tle innych.
-
2010-02-26 17:17:35 [PHP] Parsowanie tabeli
Wyrażenia regularne razem z funkcją preg_match_all. Co prawda wyrażenie w tym przypadku będzie dość skomplikowane, ale to chyba i tak najszybszy sposób. Po podstawieniu pod $subject całej strony powinieneś dostać wyniki z całej tabeli.
$subject = '<tbody> <tr><td class="first-child">1</td><td class="b"> <a href="link">Nazwa zespołu</a> </td><td>mecze</td><td class="d">punkty</td><td>sety_w:sety_p</td> <td>punkty_w:punkty_p</td></tr>'; $pattern = '/href="link"\>([^\<]+)\<\/a\>\s*\<\/td\>\s*\<td\>([^\<]+)\<\/td\>\s*\<td class="d"\>([^\<]+)\<\/td\>\s*\<td\>([^:]+):([^\<]+)\<\/td\>\s*\<td\>([^:]+):([^\<]+)\<\/td\>/'; preg_match_all($pattern, $subject, $matches, PREG_SET_ORDER); var_dump($matches); -
2010-01-14 19:04:54 Jak w C utworzyć tablicę napisów? [zamknięte]
Można tak:
int i; char napisy[4][10] = {"raz", "dwa", "trzy", "cztery"}; for(i=0;i<4;i++) printf("%s\n", napisy[i]);Można też tak:
char napisy[4][10]; strcpy(napisy[0], "raz");lub (określając dla bezpieczeństwa maksymalną długość napisu):
strncpy(napisy[0], "raz", 10);Jeśli robisz to tak:
char *napisy[4]; napisy[0] = "raz";to jest to chyba proszenie się o kłopoty (w przypadku próby modyfikacji napisu). Lepiej zrobić już
char *napisy[4]; napisy[0] = strdup("raz dwa trzy");choć i tak należy wówczas uważać, żeby nie wpisać tam zbyt wiele bajtów (nie więcej niż ciąg "raz dwa trzy").
-
2010-01-27 22:21:20 Języki programowania bez przyszłości?
Jeśli chodzi o WWW: język PHP ma przyszłość, ale wynika ona raczej z rozpowszechnienia na rynku niż z zalet owego języka - stąd moją tezą jest, że nie warto inwestować w niego czasu / opierać na nim nowych projektów. Lepiej poznać Rubiego z Railsami, Pythona z Django lub (dla twardzieli) Javę np. ze Spring MVC.
Jeśli chodzi o okienka to z Visual Basicem jest podobna sytuacja jak z PHP - jest bardzo rozpowszechniony, ale niestety ma raczej mało do zaoferowania (nawet w swojej .Netowej odmianie). Lepiej nauczyć się C#. Z rynku znika (o ile już nie zniknął) Delphi, na rzecz wspomnianej platformy .Net i Javy.
A poza tym - myślę, że warto nauczyć się wielu języków. Stosunkowo rzadko spotyka się już oferty dla programistów C, ale jego znajomość to chyba fundament wiedzy programistycznej. W Prologu raczej nie pisze się komercyjnych aplikacji, ale programowanie w nim to świetne ćwiczenie z logiki (niezbędnej w tej branży). W ofertach pracy Haskell nie jest bardzo popularny, ale już programowanie funkcyjne to ciekawy paradygmat, który warto poznać, itd.










8
2
651