Reklama
Strona 3 z 8 PierwszaPierwsza 12345 ... OstatniaOstatnia
Pokazuje wyniki od 31 do 45 z 107

Temat: Torgowi Programiści - Nauka programowania od podstaw

  1. #31
    Avatar camile
    Data rejestracji
    2012
    Posty
    243
    Siła reputacji
    12

    Domyślny

    [ spoiler ] [ / spoiler ]

    @killavius
    no faktycznie brakło mi warunku dla 0, całkiem zapomniałem o tym.


    W ogóle nie ma czegoś w rodzaju tradycyjnej pętli for dla pythona? Byłoby to lepsze zamiast posługiwanie się whilem.
    Ostatnio zmieniony przez camile : 15-04-2013, 08:51

  2. #32
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Cytuj camile napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    [ spoiler ] [ / spoiler ]

    @killavius
    no faktycznie brakło mi warunku dla 0, całkiem zapomniałem o tym.


    W ogóle nie ma czegoś w rodzaju tradycyjnej pętli for dla pythona? Byłoby to lepsze zamiast posługiwanie się whilem.
    Odpowiednik zwykłej pętli for to:
    Kod:
    for i in range(<x>):
    Pozdrawiam
    Killavus

  3. Reklama
  4. #33
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    33
    Posty
    11,075
    Siła reputacji
    24

    Domyślny

    w c for(;;) może robić za while true


    visual studio w c# pozwala na pewne ogarnięcie formatowania kodu, w c++ kompletnie nic (chociaż netbeans i eclipse dają 100% kontrolę)


    istotne białe z naki w pythonie? co za idiotyzm... białe znaki mogą być istotne najwyżej w whitespace, w pozostałych językach to tylko upierdliwe zasady...
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  5. #34
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Rozwiązanie zagadki:

    Oznaczmy sobie przez zmienne s, h, t oznaczające:
    s - świadek był zastraszony
    h - Henry popełnił samobójstwo
    t - testament odnaleziono.

    Mamy następujące zdania i wiemy, że są prawdziwe:
    Kod:
    !s || (h => t)
    s => !h
    t => h
    !h => t
    Jeżeli zastraszano świadka, to:
    Henry na pewno nie popełnił samobójstwa - s jest prawdziwe, a skoro tak, to s => !h jest prawdziwe tylko wtedy, gdy h = 0.
    Testament odnaleziono - patrz na ostatnią formułę logiczną.

    Mamy zatem h = False, t = True, s = True.
    Ale nie może tak być. Z tego względu, że wtedy t => h jest fałszywe. (t = True, a h = False!).

    W takim razie, nie zastraszano świadka.

    Spróbujmy teraz podobnie, załóżmy, że Henry popełnił samobójstwo. Nie zapominajmy, że na pewno wiemy, że s = False!
    Z pierwszego zdania nic ciekawego się nie dowiemy, ponieważ jest prawdziwe z tego tylko względu, że !s jest prawdziwe.
    Pozostałe zdania nic ciekawego nie wnoszą: Czwarte jest zawsze prawdziwe, bo !h = False. Trzecie zaś - h = True, zatem to zdanie też jest prawdziwe i nie dowiemy się nic o t.

    Trzeba sprawdzić, czy nie możemy się dowiedzieć, że Henry na pewno popełnił samobójstwo. Możemy to sprawdzić prosto. Załóżmy, że h = False. Wtedy:
    Z pierwszego zdania nic (!s prawdziwe).
    Z drugiego zdania nic.
    Z trzeciego zdania, wiemy na pewno że testamentu nie odnaleziono. h = False, więc gdyby testament odnaleziono, to trzecie zdanie byłoby fałszywe.

    ALE skoro testamentu nie odnaleziono, to czwarte zdanie jest fałszywe - zauważmy, !h = True, więc żeby implikacja była prawdziwa to musieliśmy mieć prawą stronę = True. A t = False (wynika z trzeciego zdania). W takim razie Henry na pewno popełnił samobójstwo.

    Zatem rozwiązanie jest takie: Świadek nie był zastraszany, Henry popełnił samobójstwo, a o testamencie nic nie możemy powiedzieć ;). Rzeczywiście tego policjanta przydałoby się zwolnić!

    Zapraszam do robienia reszty zadań. Mogą się wydawać głupie, ale często można w takich zadankach zrobić głupie błędy na początku. Jutro postaram się wrzucić następną część naszego mini-kursu ;)

    Pozdrawiam
    Killavus
    Ostatnio zmieniony przez Killavus : 16-04-2013, 01:22

  6. #35
    Avatar Cybuch
    Data rejestracji
    2004
    Położenie
    Poznań
    Wiek
    32
    Posty
    2,161
    Siła reputacji
    21

    Domyślny

    Cytuj Noru$ napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Czekałem sporo na taki temat, jutro po pracy przeczytam go dokładnie. Ogółem to mam nadzieje ze będziesz go sukcesywnie rozwijał i zdołam się czegoś nauczyć.
    Jeśli chcesz się czegoś nauczyć to najpierw przeczytaj jakąś książkę - choćby z tego względu, że książkę masz w ręku i uczysz się kiedy chcesz - korzystając z kursu takiego jak ten będziesz musiał czekać do kolejnej części, a może się zdarzyć też tak, że ona nigdy nie nadejdzie

  7. #36
    Avatar Exploodeex
    Data rejestracji
    2006
    Położenie
    Suwałki
    Wiek
    29
    Posty
    688
    Siła reputacji
    18

    Domyślny

    Co nie pisałeś, że założyłeś temat do swojego najlepszego ucznia? :D

    Fajny pomysl anyway, jak ogarne PCta na tyle, zeby mi sie firefox nie cial, to ogarne te zadanka
    Ostatnio zmieniony przez Exploodeex : 17-04-2013, 15:54

  8. #37
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    No, z jednodniowym poślizgiem ale jedziemy dalej ;).

    Dzisiaj opowiemy o tym, jak nasz program może pracować z wieloma, wieloma zmiennymi. Jak to zrobić dobrze?

    Tablice, listy i inne tatałajstwo:

    Nasze programy potrafią już robić całkiem sporo rzeczy. Niemniej jednak, są bardzo ograniczone przez liczbę szuflad (zmiennych), do których możemy wsadzać nasze ciekawe wyniki wyrażeń. Jak np. zrobić program, który ma 1000 zmiennych od z1 do z1000 i wypisuje je w odwrotnej kolejności? Ktoś sprytny potrafi to zrobić bez tych rzeczy, które poznamy teraz (jak? To całkiem ciekawe pytanie!). Załóżmy, że chcielibyśmy zrobićwypisywanie 10 liczb. Zapewne kod musiałby wyglądać tak:
    Kod:
    z1 = 10
    z2 = 11
    z3 = 12
    ...
    z10 = 92
    
    print z10
    ...
    print z1
    Ale widzimy, że to jest kiepskie. Nikomu nie chciałoby się wstawiać 100 zmiennych, albo 1000. Można by napisać program, który... napisałby nam taki program. Nie możemy też skorzystać z pętli, a nawet jeśli, to musielibyśmy wstawić tam 10 ifów - co wcale nam nie pomaga.

    Chcielibyśmy mieć jakieś sensowne rozwiązanie. W C i w Pythonie rozwiązujemy taki problem za pomocą tablic (C), oraz list (Python). Tak naprawdę to bardzo podobne rzeczy, tylko tablice są o wiele bliżej naszego modelu pamięci. Kolejną część oprę o listy, aczkolwiek końcówkę dla wymiataczy C poświęcę tablicom.

    Lista? Cóż to takiego?

    Na pewno widzieliście już listy w życiu. Lista długów Plutona mogłaby wyglądać tak:
    Kod:
    LISTA PLUTONA:
    
    1. Czwartek, 5000 zł
    2. Piątek, 1823 zł
    3. Haracz dla Torg Usera, 500 zł
    Taka lista ma swoją nazwę i pozycje. Zamieniając taką listę na taką:
    Kod:
    LISTA PLUTONA:
    
    0. Czwartek, 5000 zł
    1. Piątek, 1823 zł
    2. Haracz dla Torg Usera, 500 zł
    Jesteśmy już bardzo blisko tego, czym są listy w językach programowania. Mianowicie, w dużym uproszczeniu są to zmienne, które przechowują wiele wartości jednocześnie.

    Lista Plutona w pythonie wyglądałaby następująco:
    Kod:
    listaPlutona = ["Czwartek, 5000 zł", "Piątek, 1823 zł", "Haracz dla Torg Usera, 500 zł"]
    Ważne są tutaj nawiasy [, oraz ]. Wartości w liście są podawane po przecinku.

    Aby dostać się do pierwszej wartości, musimy podać programowi do której wartości chcemy się odwołać. Tutaj przydadzą się znów nasze kwadratowe nawiasy:
    Kod:
    listaPlutona[0] # pierwszy element
    listaPlutona[1] # drugi element
    
    i tak dalej...
    Wartości w liście idą od 0 do x-1, gdzie x to liczba elementów w liście. Mając listę 8-elementową, możliwe indeksy to 0, 1, 2, 3, 4, 5, 6, 7. Indeksami nazywamy te 'pozycje', które wartości zajmują w liście.

    No ok, mamy zmienną, która przechowuje wiele wartości. Taka lista nie pomogłaby nam jednak zbytnio, gdybyśmy nie mogli dodawać do niej elementów, usuwać elementy, oraz wiedzieć, ile ich mamy.

    Aby dowiedzieć się, ile trzymamy elementów w liście, możemy skorzystać z magicznego zaklęcia len:
    Kod:
    len([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # 10
    len([[1,2], [3,4]]) # 2 (tak, możemy zagnieżdżać listy)
    len([[1,2,3], 4, 6, "Cześć", [7]][0]) # 3. Pierwszy element w liście też jest listą, a za pomocą [0] się do niego dostaliśmy. Stąd też liczymy długość tej listy.
    Aby dodawać elementy do listy (na koniec), należy skorzystać z magicznego zaklęcia append lub insert. Tutaj uwaga, w przeciwieństwie do len, append jest pisane po kropce przy liście. Dlaczego i czym są te zaklęcia? Opowiemy w następnej części.

    Kod:
    l = [1,2,3,4]
    l.append(5) # l = [1,2,3,4,5]
    l.append(8) # l = [1,2,3,4,5,8]
    l.insert(2, -1) # l = [1,2,-1,3,4,5,8] Wstawiamy element -1 na przed drugą pozycją (czyli będzie 0, 1, <nowy element>, 2...)
    l.insert(0, -100) # l = [-100, 1, 2, -1, 3, 4, 5, 8]. Tak wsadza się element na początek listy.
    l.insert(len(l), 101) # l = [-100, 1, 2, -1, 3, 4, 5, 8, 101] Jak widać, jest to odpowiednik zaklęcia append.
    Możemy również usuwać elementy z list.
    Kod:
    l = [1,2,3,4]
    l.pop() # l = [1,2,3]
    l.pop(0) # l = [2,3] możemy podać który konkretnie element usunąć. Jeżeli go nie podamy, zostanie usunięty ostatni element na liście.
    l.pop(1) # l = [2]
    l.pop() # l = []
    W Pythonie też mamy kilka bardzo fajnych rzeczy dotyczących list, dosyć unikalnych dla tego języka.

    Zauważmy, że lista jest odpowiednikiem matematycznego ciągu. Podciągiem spójnym nazywamy kawałek takiego ciągu. Np. niech będzie ciąg:
    Kod:
    (a_n) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    Lista która by była identyczna z tym ciągiem, to:
    Kod:
    a_n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    Możemy wziąć kawałek tej listy. Przykład:
    Kod:
    a_n[0:3] # Weźmy elementy 0, 1, 2. Wynik: [1, 2, 3]
    a_n[3:0] # Jeżeli element końcowy jest mniejszy niż początkowy, Python zwróci pustą listę - [].
    a_n[-1] # W pythonie jeżeli podamy -1 jako indeks, dostaniemy ostatni element w liście.
    a_n[0:-3] # Bierzemy od indeksu 0 do indeksu trzeciego od końca. Czyli indeksy 0, 1, 2, 3, 4, 5, 6. Wynik: [1, 2, 3, 4, 5, 6, 7]
    Jest to czasami przydatne. Przydatną rzeczą jest to, że indeksy działają także dla napisów. Zatem możemy np. zrobić coś takiego:
    Kod:
    "Pluton"[2:6] # "uton"
    Jednym z rozpoznawalnych i bardzo ciekawych uprzyjemniaczy w Pythonie są tzw. wyrażenia listowe. Pozwalają one na tworzenie list na podstawie innych list, korzystając z warunku:
    Kod:
    losoweLiczby = [-8, 1, -23, -82, 22, 11, 7, -5, 3, 0, 2, -8, 19, -29, 10]
    losoweLiczbyUjemne = [ ujemnaLiczba for ujemnaLiczba in losoweLiczby if ujemnaLiczba < 0 ] # Definiujemy sobie listę losoweLiczbyUjemne, korzystając z listy losoweLiczby. Do tej listy zostaną dodane te wartości z listy losoweLiczby, które spełniają warunek ujemnaLiczba < 0
    Wyrażenie listowe ma taki schemat:
    Kod:
    [<wyrażenie tworzące element> for <zmienna> in <lista> if <warunek>]
    [<wyrażenie tworzące element> for <zmienna> in <lista>]
    Pod <zmienna> zostanie podstawiony każdy element z listy <lista>. Możemy tej zmiennej używać w <wyrażenie tworzące element>. Zostanie on dodany tylko wtedy, gdy <warunek> jest prawdziwy. Jeżeli warunku nie ma (druga wersja), stworzymy listę, która po prostu przekształca elementy listy <lista> za pomocą jakiegoś wyrażenia. Na przykład:
    Kod:
    lista = [1,2,3,4]
    y = 4
    [(x + 1 + y) for x in lista if x >= 2]
    Wynik:
    Kod:
    [7, 8, 9]
    Polecam poeksperymentować z tym w interaktywnym shellu.

    W językach programowania listy są tak rozpowszechnione, że powstały specjalne konstrukcje ułatwiające prace z nimi. Jedną z nich jest specjalna pętla, która przechodzi przez wszystkie elementy w liście:
    Kod:
    for <zmienna> in <lista>:
      # kod
    W bloku # kod możemy korzystać ze zmiennej, do której zostanie przypisany element listy. Pętla for najpierw wykona kod ze zmienną przypisaną do pierwszego elementu, potem do drugiego i tak dalej.

    Przykładowo wypisanie listy możemy zrobić w ten sposób:
    Kod:
    l = [1,2,3,4]
    for element in l:
      print element
    To bardzo dużo materiału, może być nowy. Zachęcam, naprawdę zachęcam do zabawy w shellu i ZADAWANIA PYTAŃ. Nie jest żadnym wstydem nie ogarnąć tego po tylko przeczytaniu. Najlepiej pobawcie się z tym, to najlepszy sposób na naukę. Zobaczcie na przykład, co się stanie, gdy w trzyelementowej liście spróbujemy dostać się do 10 elementu.

    O C słów kilka:

    Wspominałem w pierwszej części, że C jest językiem zdecydowanie bliżej maszyny. Listy (tablice) są tutaj kanonicznym przykładem na to, że poruszamy się jednak w niższej warstwie niż Python.

    Tablice w C to bardzo biedny kuzyn Pythonowych list. Nie możemy do nich dodawać, ani usuwać elementów (mają stały rozmiar). Nie możemy się spytać "hej, ile masz elementów?". Niemniej jednak, takie różnice sprawiają m.in., że C jest zdecydowanie szybsze od Pythona. Postaram się wytłumaczyć czym są tablice i jak sobie radzić z problemami.

    Pamiętacie nasze szufladki? Zmienne były etykietkami, które pozwalały nam na szybkie dostanie się w naszej szafie do danej szufladki. Oczywiście, to są tylko nasze nazwy. Tak naprawdę, nasze szufladki mają swoje 'wbudowane' nazwy. Są to tzw. adresy. Mówią nam one, gdzie w całej komodzie znajduje się nasza szuflada. Jest to numer szuflady. Później dowiemy się o tym, że tak naprawdę to ma bardzo potężne konsekwencje - na razie opowiem o tym, do czego może się to nam przydać w kontekście tablic.

    Wyobraźmy sobie, co się dzieje w naszej szafie (pamięci), gdy w C napiszemy coś takiego:
    Kod:
    int x = 12;
    Wtedy, Szafarz (nasz system operacyjny) robi kilka rzeczy. Przede wszystkim, szuka nowej szuflady. Musi być ona nieużywana, czyli nie mieć naklejonej etykietki. Jeżeli znajdzie on taką szufladę, sprawdza, czy ma ona odpowiedni rozmiar. Pisząc int, dostarczamy szafarzowi informacji - ta zmienna jest takiego typu, więc potrzebujemy do niej szuflady o określonej wielkości. Jeżeli ma odpowiedni rozmiar, szafarz nakleja etykietę na szufladę, którą znalazł.
    Potem następuje przypisanie - twoje 12 wpada do szafy, a to co było wcześniej w środku wyparowuje. Zauważmy, że szafarz nie opróżnia szafy - jeżeli zadeklarujemy zmienną, a jej nie zdefiniujemy, wśrodku znajdująsię śmieci. To częsty błąd początkujących programistów.

    Ok. Mamy zatem zmienną. A co, jeżeli chcielibyśmy mieć zmienną przechowującą 5 wartości?
    Kod:
    int x[5] = { 1, 2, 4, 8, 9 };
    Teraz Szafarz działa trochę inaczej. Daje on nam gwarancje, że dane w tablicy będą umieszczone razem w pamięci. W takim wypadku bierze on liczbę elementów tablicy i szuka pięciu szuflad o określonej wielkości. Jeżeli je znajdzie, nakleja etykietkę x na pierwszą szufladę w rzędzie. Później będziemy mogli mówić, że x jest wskaźnikiem na pierwszy element tablicy (cokolwiek to znaczy). Z racji tego, że szafarz nie jest głupi i wie jaką wielkość ma int, odpytując go o:
    Kod:
    x[2]
    Szafarz bierze x, patrzy na adres - numer szuflady i przechodzi o 2 szuflady do przodu, wyciąga co jest w środku i daje Ci.

    W szczególności, nikt nie wie, ile elementów ma ta tablica. To wie tylko i wyłącznie programista. Jeżeli spróbujesz dostać się do 6. elementu, Szafarz zabije Twój program. Nie wolno tykać szuflad, których szafarz Ci nie przydzielił. Szafarz czuwa niczym Torg User.

    Nie ma pętli przechodzącej przez wszystkie elementy. Niemniej jednak, istnieje specjalna pętla, która pomaga bardzo przy przechodzeniu elementów w tablicy. Przykładowo:
    Kod:
    int n = 100;
    int t[n];
    // wypełniamy wartości tablicy tutaj, jakiś kod...
    // ...
    // wypisujemy wartości:
    int i;
    for(i = 0; i < n; ++i) {
      printf("%d ", t[i]);
    }
    To taki wariant pętli while, który ma postać:
    Kod:
    for(<co ma się zdarzyć, nim pętla ruszy>; <warunek pętli>; <co ma się stać po każdym obrocie pętli>) {
      <kod>
    }
    Przykładowo, ta pętla ustawi na początek wartość 0. Potem sprawdzi warunek. 0 < 100, więc uruchomi ciało pętli. Wypisze t[0], czyli pierwszy element tablicy t. Po tym stanie się to, co staje się w <co ma się stać po każdym obrocie pętli>. W tym wypadku - wartość i powiększy się o 1 (i++ to ładny zapis na i = i + 1, jeszcze ładniejszy niż i += 1. ++i podobnie, jest niewielka różnica pomiędzy tymi zapisami). Potem znowu zostanie sprawdzony warunek, 1 < 100... i tak dalej.

    I to tyle. Jesteśmy ograniczeni przez rozmiar tablicy - nie musimy oczywiście używać wszystkich elementów (i tak zazwyczaj się robi usuwanie/dodawanie elementów w tablicach - tworzy się zmienną rozmiar i powiększając / pomniejszając ją udajemy, że dodajemy/usuwamy elementy w tablicy). Nie ma tutaj tak ładnych konstrukcji jak w Pythonie.

    Nie robię listy zadań dopóki nie pobawicie się przykładami. Chciałbym, żebyście zadawali pytania ;)

    Powodzenia, koderzy!

    Pozdrawiam
    Killavus

  9. #38
    Avatar Exploodeex
    Data rejestracji
    2006
    Położenie
    Suwałki
    Wiek
    29
    Posty
    688
    Siła reputacji
    18

    Domyślny

    Okej, ja mam pytanie, chociaż w sumie nie wiem, czy nie pytałem już przez gg.

    Jest jakiś w miarę ogarnięty sposób w C++, żeby zrobić coś na wzór dwuwymiarowej tablicy z dwoma różnymi typami zmiennych?

  10. #39
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    31
    Posty
    1,909
    Siła reputacji
    18

    Domyślny

    Cytuj Exploodeex napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Okej, ja mam pytanie, chociaż w sumie nie wiem, czy nie pytałem już przez gg.

    Jest jakiś w miarę ogarnięty sposób w C++, żeby zrobić coś na wzór dwuwymiarowej tablicy z dwoma różnymi typami zmiennych?
    W delphi nazywa się to record, z tego co zlookałem na google, w C++ to sie nazywa struktura czyli struct . Nie robilem tego w C, ale prawdopodobnie nalezy stworzyc najpierw jakąś strukturę i dać jej nazwę, przez co stanie sie ona jakby nowym typem zmiennej. I wtedy tworzysz zmienna tablicowa tak samo jak int tylko ze zamiast zmiennej typu int podajesz typ - nazwe stworzonej struktury.

    Ale moge sie tez w tym bardzo mylic. Tak jest w delphi, i z tego co zdazylem tylko przelotnie przeczytac to c++ jest pod tym wzgledem bardzo podobne :)

    Wiecej na google pod haslem c++ struct.
    Dreaming by drumming. ˆˆ™

  11. #40
    Avatar Element
    Data rejestracji
    2005
    Wiek
    32
    Posty
    189
    Siła reputacji
    19

    Domyślny

    W czystym C można użyć structa, w C++ structa lub klasy.


    Tutaj przykład z użyciem struct w C++
    Kod:
    #include<iostream>
    
    struct dane
    {
    int liczba;
    float liczba2;
    };
    
    int main()
    {
    	dane* tab;
    
    	tab = new dane[4];
    
    	for(int i=0; i<4; i++)
    	{
    		tab[i].liczba=i*3;
    		tab[i].liczba2=i*1.1 + 0.5;
    	}
    		
    	for(int i=0; i<4; i++)
    		std::cout << tab[i].liczba << "   " << tab[i].liczba2 << std::endl;
    	
    	delete [] tab;
    
    	return 0;
    }
    http://ideone.com/yRiL5u



    jeśli chcielibyśmy to samo osiągnąć w C musielibyśmy użyć malloc zamiast new i printf zamiast std::cout. Także trzeba zwrócić uwagę na to, że w C++ w samym programie mogliśmy traktować "dane" jako typ, w C musimy napisać "struct dane"

    Kod:
    #include<stdio.h>
    #include <stdlib.h>
    
    struct dane
    {
    	int liczba;
    	float liczba2;
    };
    
    int main()
    {
    
    	struct dane* tab;
    
    	tab = malloc(4*sizeof(struct dane));
    
    	int i;
    	for(i=0; i<4; i++)
    	{
    		tab[i].liczba=i*3;
    		tab[i].liczba2=i*1.1 + 0.5;
    	}
    		
    	for(i=0; i<4; i++)
    		printf("%d   %f\n",tab[i].liczba, tab[i].liczba2);
    		
    	free (tab);
    
    	return 0;
    }
    http://ideone.com/x0Alrm
    Last.fm
    Element aka Pawulon

  12. #41
    Avatar Bazan
    Data rejestracji
    2008
    Wiek
    31
    Posty
    1,909
    Siła reputacji
    18

    Domyślny

    To jak chcesz pytania to się spytam :P

    Ogólnie chciałbym być takim pro evul dobrym programista z zawodu. Niestety ciezko mi idzie ta nauka, nawet nie to ze wolno lapie, tylko ze sie nie moge za to zabrac. Najlepszy program jaki napisalem to gierka w pamiec w javie, ale to dosyc dawno. Czesto sie bralem za rozne kursy programowania ale i tak jestem jakos dziwnie zamkniety na cos wiecej niz petle. Poruszanie sie po kodzie mam obcykane, tworze strony na wordpress wiec czesto zachodzi potrzeba napisania jakiejs funkcji w php, lub modyfikacji wtyczek, nie mam z tym wiekszego problemu, zeby znalezc to co mnie interesuje. Ale jednak jak chce zrobic cos od 0 to sie jakos blokuje.

    Fajnie jakbys zrobil taka liste rzeczy ktore trzeba po sobie opanowac zeby byc coraz lepszym. Nie chodzi mi o jezyki, bo jak sam napisales sama skladnia jezyka to pikus bo programowanie wszedzie jest podobne, roznica tylko ile literek sie napisze :P

    Studiuje zaocznie pierwszy rok na informatyce na polibudzie poznanskiej, ale wolno lecimy z materialem i wszystko jakos takie niepelne, jak cos ma sie zaczac ciekawego to sie konczy przedmiot, ewentualnie "o tym wiecej w nastepnych semestrach".

    Co jest do opanowania?
    1. Hello world
    2. Wyswietlanie i wczytywanie danych
    3. IF
    4. Petle
    5. Tablice i Wskazniki
    6. Poprawne tworzenie funkcji - bardzo czesty problem na poczatku nauki, zrozumiec jak dobrze pisac funkcje
    7. Co dalej?
    ... nawet nie wiem
    10. Obiektowosc
    ... go go go tutaj to nie mam pojecia nic co moze byc dalej xD
    Jakies opengl, SQLe itp :P
    Ostatnio zmieniony przez Bazan : 18-04-2013, 04:46
    Dreaming by drumming. ˆˆ™

  13. #42
    Avatar Exploodeex
    Data rejestracji
    2006
    Położenie
    Suwałki
    Wiek
    29
    Posty
    688
    Siła reputacji
    18

    Domyślny

    struct znam, nie do końca to chyba miałem na myśli, ale w sumie okej ;d

  14. #43
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Zadania dla ambitnych:

    1. <C/Python>, całkiem trudne Bardzo ważnym zagadnieniem w informatyce są tzw. liczby pierwsze - czyli takie, które dzielą się tylko przez 1, oraz przez samą siebie. Ich bardzo ciekawe własności są podstawą bezpieczeństwa Twoich pieniędzy w banku, czuwają nad Twoją korespondencją mailową itd. Przy okazji, przyjmujemy różne założenia. M.in. 1 nie jest liczbą pierwszą (chociaż moglibyśmy powiedzieć, że jest, bo dzieli się przez 1 i przez siebie samą, czyli 1).

      Ciekawym zagadnieniem jest to, jak te liczby znajdować. Pewne rozwiązanie podsunął niejaki Erastotenes. Jego algorytm (sposób, przepis) znajdowania wszystkich liczb pierwszych od 2 do n polega na:

      Kod:
      stwórzmy tablicę od 1 do n. Nazwijmy ją sito. 
      Niech 1 w tablicy odpowiada temu, że liczba jest pierwsza, a 2 - że nie jest pierwsza. Na początku wszystkie wartości w tablicy to 0. Ustalmy sito[1] = 2.
      
      Dla x = 1 do n:
        jeżeli sito[x] == 0, to:
          sito[x] = 1
          dla każdej wielokrotności k (wielokrotności 2 to np. 4, 6, 8, 10...), sito[k] = 2
      
      Liczby, które oznaczyliśmy jako 1 są pierwsze.
      Niech górny zakres liczb pierwszych (n) będzie w zmiennej "zakres". Napisz program, który realizuje tzw. Sito Erastotenesa (algorytm, który opisałem powyżej).
    2. <C/Python>, trudne Planszę do jakiejś gry możemy realizować jako tablicę tablic (listę list). Przykładowo w C, planszę 10x10 możemy zrealizować jako tablicę (listę):
      Kod:
      int plansza[10][10];
      Gdzie na każdym polu planszy są jakieś liczby.

      Spróbujmy ogarnąć prostą grę. Mamy sobie krowę, która chodzi po planszy od lewej do prawej. Może ona zacząć od dowolnego z pól na planszy po lewej stronie. Na każdym polu planszy jest jakaś liczba stokrotek, które krowa bardzo lubi. Niemniej jednak, Torg User strzela do niej z kałasza, więc musi uciekać, w prawą stronę (do zagrody). Stąd też może poruszać się tylko w jednym kierunku (w prawo). Niemniej jednak, krowa jest pazerna i chciałaby się jak najbardziej nawpieprzać - jej trasa powinna być trasą, na której rośnie najwięcej stokrotek.

      Krowa może wykonywać takie ruchy:
      Kod:
      XO
      KO
      XO
      Pola oznaczone jako O to możliwe ruchy krowy.

      Napisz program, który weźmie planszę i obliczy ile najwięcej stokrotek może zjeść krowa, nim dojdzie do zagrody.

      Przykładowo dla takiej planszy:
      Kod:
      1 8 4 2 6
      9 8 8 1 2
      6 7 8 9 8
      1 9 8 6 5
      Rozwiązanie to:
      Kod:
      1 8 4 2 6
      9 8 8 1 2
      6 7 8 9 8
      1 9 8 6 5
      Czyli 42.

      To są dosyć trudne zadanka. Polecam usiąść z kartką i spróbować je zrobić i zrozumieć na kartce ;). W razie czego, służę wskazówkami. Nie zrażaj się, jeżeli ich nie potrafisz - jedno z nich to zadanko z moich studiów.


    Zadania proste:
    1. <Python> Napisz wyrażenie listowe, które z listy liczb o nazwie lista stworzy listę takich elementów z liczby lista, które dzielą się przez 6 i przez 2.
    2. <C/Python> Napisz program, który weźmie listę/tablicę ze zmiennej t i stworzy listę/tablicę r, która jest tablicą/listą t od tyłu. Na przykład dla:
      Kod:
      int t[3] = {3, 2, 1};
      Lista r powinna mieć postać:
      Kod:
      int r[3] = {1, 2, 3};
    3. <C/Python> Napisz program, który w liście/tablicy t ma jakieś elementy, a do tablicy w wstawia przesunięcie cykliczne w prawo tej listy. Czyli, na przykład dla listy:
      Kod:
      [1, 2, 3, 4, 5, 6]
      Da listę:
      Kod:
      [6, 1, 2, 3, 4, 5]


    Powodzenia! W następnej części opowiem trochę o funkcjach (które troszeczkę znacie z matmy, ale to nie do końca to samo) i procedurach, oraz odpowiem na pytanie "czym są te magiczne zaklęcia printf i print?". Ponadto porozmawiamy o tym, czym są tak naprawdę napisy (stringi, ciągi znaków) w komputerze. I dlaczego "Pluton" jest liczbą. Zainteresowani? :)

    Po tej części też uważam, że będziecie wystarczająco sprawni, żeby pokazać Wam stronkę, na której jest tona różnych fajnych zagadek do rozwiązania. Następna część po tej będzie specjalna, opowiem o czymś związanym całkowicie z C - o wskaźnikach. Pythonowców upraszam o cierpliwość, ew. o przeczytanie tego w ramach ciekawostki. Python jest tak naprawdę napisany w C. A wskaźniki to jedna z rzeczy, która pozwoliła na stworzenie tego fajnego języka.

    @Bazan:

    Nie pomogę Ci wprost, ale opowiem Ci może o pewnym gościu, którego znam i teraz jest programistą w Google California. Ten osobnik nie był specjalnie zainteresowany "internalsami" kompów - nie wiedział za bardzo czym jest OpenGL (może słyszał kiedyś), nie miał jakiejś dobrej, praktycznej wiedzy na temat programowania. Krótko mówiąc - nie był specjalistą IT w żadnym stopniu. Na rozmowie kwalifikacyjnej sprawdzali go, dając problemy totalnie oderwane od rzeczywistości - głównie związane z problematyką Algorytmów i Struktur Danych. Kazali mu szacować złożoność, rozwiązywać matematyczne zagadki i wydumane problemy (kto mądry gra w gry, gdzie plansza jest miliard na miliard?). Niemniej jednak, przyjęli go po tym. Zapytał sięrekrutera, dlaczego pytali się go o to - nie o programowanie sieciowe (dział, do którego aplikował wymagał wiedzy w tej zakresie), bibliotekę standardową C czy też inne technologie. Odpowiedzieli mu prosto: "Jeżeli umiesz myśleć analitycznie i rozwalać takie problemy, nauczysz się wszystkiego, czego wymaga od Ciebie nasza firma". I wg mnie względem kariery warto iść tą drogą - technologie się starzeją, biblioteki są zastępowane nowymi i lepszymi, pojawiają się nowe rozwiązania starych problemów i nowe problemy (np. współbieżność w dzisiejszych czasach). Matematyka i ogólnie myślenie nie zmienia się tak szybko. A dobrze przygotowany kombinator nauczy siębiblioteki w kilka dni, jakakolwiek by ona nie była...

    Oczywiście, nie namawiam Cię do tego, żebyś jebał technologie i cisnął tylko algorytmy. Spróbuj uczyć się tego, co Cię interesuje. Ja wyszedłem od strony web developmentu i dalej w tym siedzę. Próbuję pisać proste gry i bawięsię syntezą dźwięku. Zgłębiam protokoły sieciowe i bawię się tworząc aplikacje, które wymagają podłączenia do sieci. Ale to są moje zainteresowania i tak naprawdę informatyka jest tak rozległa i ciekawa, że każdy znajdzie coś dla siebie. Od kryptografii, zagadnień teoretycznych, obliczeń numerycznych, pracy dla fizyki/biologii, bazach danych, systemów rozproszonych po web development, grafikę 3d, syntezatory, programowanie niskopoziomowe, systemy wbudowane i operacyjne... it's up to you.

    Pozdrawiam
    Killavus
    Ostatnio zmieniony przez Killavus : 20-04-2013, 22:17

  15. #44

    Ekspert: Sprzęt i oprogramowanie
    Mistrzu dragon jest teraz offline
    Avatar Mistrzu dragon
    Data rejestracji
    2006
    Położenie
    20 cm od klawiatury
    Posty
    1,857
    Siła reputacji
    20

    Domyślny

    Cytuj Killavus napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Krowa może wykonywać takie ruchy:
    Kod:
    XO
    KO
    XO
    Rozwiązanie to:
    Kod:
    1 8 4 2 6
    9 8 8 1 2
    6 7 8 9 8
    1 9 8 6 5
    Czyli 50.
    Skoro krowa goni tylko w prawo , a X oznacza miejsce na które nie może stanąć , to może stanąć tylko na 1 pole w każdej kolumnie a wtedy wychodzi 42 :
    Kod:
    1 8 4 2 6
    9 8 8 1 2
    6 7 8 9 8
    1 9 8 6 5
    Czy ja coś mylę?
    Powyższy post może być sarkastyczny oraz zawierać śladowe ilości orzechów arachidowych.

  16. #45
    Avatar Zeimer
    Data rejestracji
    2008
    Położenie
    Kraina Konserwatywnych Liberałów
    Posty
    398
    Siła reputacji
    17

    Domyślny

    Dobrze, że ktoś próbuje zainteresować gimbów i humanistów programowaniem : D. Sam zaczynałem jak miałem 11 lat, ale język C++ i koncepcje takie jak wskaźniki czy unie mnie pokonały. Drugie podejście zacząłem w liceum i poszło nadspodziewanie gładko. Około roku poświęciłem na naukę C++, potem poznałem HTM, CSS, JavaScript i PHP, a w międzyczasie także Python i Haskell, natomiast na mojej krótkiej liście są Ruby, C# i Prolog.

    Cytuj Bazan napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Co jest do opanowania?
    Najpierw powinieneś wybrać język, którego chcesz się nauczyć. Polecam zacząć od jakiegoś języka średniego poziomu - C++, Javy, C#. Nie szukaj materiałów w internecie - kup książkę, a najlepiej kilka (początkowo po polsku, po lepszym poznaniu zagadnień związanych z programowaniem może być po angielsku). Kiedy już książka wpadnie ci w ręce, przeczytaj rozdział, zrób zadania, przeczytaj rozdział, zrób zadania i tak póki książka ci się nie skończy. Powinieneś też eksperymentować z kodem, a kiedy osiągniesz już jakiś poziom zaawansowania, spróbuj zrobić coś twórczego (projekt). Na przykład znając jako tako C++ możesz spróbować napisać konsolową grę w kółko i krzyżyk - myślenie twórcze (a nie matematyczne), projektowanie systemu i przezwyciężanie różnych trudności z pewnością nauczą cię więcej niż każde, nawet najtrudniejsze zadanie.

    Kiedy już poznasz jakiś język z rodziny C bardzo dobrze, wrota do większości innych języków stoją dla ciebie otworem. Później zabierz się za inne paradygmaty - funkcyjny (wbrew opinii wielu bardzo elegancki i zrozumiały) i logiczny (raczej bezużyteczny, ale poszerza horyzonty).

    W tej dziedzinie bardzo ważna jest pasja oraz samokształcenie, bo żadna szkoła, uniwersytet czy politechnika dobrze cię tego nie nauczy. Do wszystkiego musisz dojść sam - wbrew pozorom jest to proste, wymaga tylko odrobiny inteligencji i dużo chęci oraz wytrwałości.

    Cytuj Exploodeex napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Okej, ja mam pytanie, chociaż w sumie nie wiem, czy nie pytałem już przez gg.

    Jest jakiś w miarę ogarnięty sposób w C++, żeby zrobić coś na wzór dwuwymiarowej tablicy z dwoma różnymi typami zmiennych?
    Nie wiem dokładnie o co ci chodzi, ale jeżeli chcesz zrobić tak, aby obok siebie były przechowywane np. typy int i string - nie można. Oczywiście możesz to obejść, używając czegoś w stylu typu Variant (jest chyba implementacja w boost). Jeżeli chcesz 'tablic' indeksowanych czymś innych niż liczbami spróbuj std::map.
    Ostatnio zmieniony przez Zeimer : 20-04-2013, 22:10

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Nauka jezyka programowania z ksiazek.
    Przez darss5 w dziale Programowanie
    Odpowiedzi: 18
    Ostatni post: 13-11-2015, 06:46
  2. nauka programowania - maszyny
    Przez bellatrix w dziale Programowanie
    Odpowiedzi: 11
    Ostatni post: 29-01-2015, 23:03
  3. Odpowiedzi: 5
    Ostatni post: 05-03-2013, 02:33
  4. Programiści torga, wzywam was! Chodzenie po katalogach w systemie, C#
    Przez piorunek098 w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 13-01-2013, 23:41
  5. Nauka programowania poprzez książki
    Przez Abovner w dziale Programowanie
    Odpowiedzi: 3
    Ostatni post: 03-04-2012, 22:08

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •