Informacje o stosowaniu tablic w aplikacjach pisanych w C można znaleźć tutaj, nie będę więc powielać informacji z Wikibooks na tej stronie.
Proszę napisać program, który wygeneruje i zapisuje do tablicy 10000 liczb losowych za pomocą funkcji rand() z biblioteki stdlib.h.
Podczas generowania ciągu liczb na bieżąco obliczaj ich średnią, maksymalną oraz minimalną wartość.
Program powinien zakończyć działanie wypisując na konsoli komunikat:
minimalna wartość: ***
maksymalna wartość: ***
średnia wartość: ***
W miejsce * wstawiając odpowiednie wartości
Proszę napisać program, który wyznacza iloczyn skalarny dwóch wektorów N-wymiarowych.
Proszę napisać program, który wyznacza iloczyn dwóch macierzy prostokątnych.
Filtrowanie sygnałów cyfrowych (np. obrazów) jest dyskretnym odpowiednikiem konwolucji. Załóżmy, że filtrowany sygnał S jest tablicą N- wymiarową o rozmiarze M1xM2x...MN a filtr F jest dany tablicą N-wymiarową o rozmiarze MxMx...M, przy czym zakładamy, że M jest nieparzyste. Wartość przefiltrowanego sygnału U w elemencie tablicy o indeksie (i1,i2,...,iN) jest dana wzorem:
Proszę napisać program wykonujący filtrowanie zadanej tablicy dwuwymiarowej zadanym filtrem.
Napisz program szukający rozkładu liczb na czynniki pierwsze, tzn. taki który dla danej liczby wypisuje jej dzielniki w porządku rosnącym. Dzielniki występujące wielokrotnie powinny być wypisane w postaci:
dzielnik (ilość_wystąpień)
Przykład:
Podaj liczbe: 120
2 (3)
3
5
Wskazówki:
Program szukający rozkładu liczby na czynniki pierwsze jest modyfikacją programu szukającego dzielniki liczby
Aby rozwiązać zadania należy zadeklarować (oprócz innych zmiennych) tablicę w której przechowywane będą znalezione dzielniki (póki co zadeklarujemy tą tablicę statycznie np. int dzielniki[1000]) oraz zmienną iloscDzielnikow przechowującą ilość znalezionych dzielników (zmienną tą inicjujemy wartością zero przy starcie programu int iloscDzielnikow=0)
Pseudokod być może wart przetestowania:
iloscDzielnikow=0
Wczytaj liczbę N
Jeżeli N<=1 to opuść program //rozwiązanie trywialne
Dopóki N>1
for potencjalnyDzielnik = 2 to N
Jeżeli potencjalnyDzielnik jest dzielnikiem to
dzielniki[iloscDzielnikow]=potencjalnyDzielnik
iloscDzielnikow++
N=N/potencjalnyDzielnik
przerwij pętlę for
next potencjalnyDzielnik
//teraz wystarczy tylko policzyć ila razy każdy dzielnik występuje w rozkładzie - dzielniki są umieszczane w tablicy dzielniki po kolei od najmniejszego do największego
Proste sortowanie: weźmy tablicę N liczb całkowitych w losowym porządku (wylosowane np. funkcją rand()).Proszęnapisać program sortujący tablicę od wartości najmniejszej do największej. Prosty algorytm może wyglądać tak:
1) znajdź najmniejszy element spośród elementów tablicy o indeksach od 0 do N-1 i zamień ten element z elementem o indeksie 0.
2) znajdź najmniejszy element spośród elementów tablicy o indeksach od 1 do N-1 i zamień ten element z elementem o indeksie 1.
3) …
4) powtarzaj aż do posortowania.
Symulacja dyfuzji - schemat Eulera. W symulacji zadany jest krok czasowy dt, stała siatki dx, współczynnik dyfuzji D. Niech 1-wymiarowa tablica liczb rzeczywistych reprezentuje stężenie substancji w analizowanym obszarze. Załóżmy, że w chwili t=0 stężenie jest równe zeru w całym analizowanym obszarze oprócz brzegów, gdzie jest ustalone i różne od zera. Znając stężenia w chwili t w całym obszarze, stężenie C(i,t+dt) w chwili t+dt w punkcie o współrzędnej i wyliczamy wg wzoru:
C(i,t+dt) = C(i,t) + dt*D*(C(i+1,t)+C(i-1,t)-2*C(i,t))/dx/dx
Proszę napisać program rozwiązujący problem dyfuzji ze stałymi warunkami brzegowymi. Jak masa substancji (suma wszystkich C(i)) w analizowanym obszarze zależy od czasu?
Perkolacja to proces przepływu płynu przez porowaty ośrodek. Przy małej porowatości ośrodka płyn wpływający w pewnym miejscu ośrodka nie będzie się przesączał przez ośrodek. Przy dużej porowatości ośrodka istnieć będą ciągi połączonych porów umożliwiające przesączanie płynu przez całą objętość ośrodka. Ze względu na swoją naturę proces perkolacji bardzo dobrze nadaje się do symulacji komputerowej. W symulacjach komputerowych zakłada się, że ośrodek może być modelowany siecią np.kwadratową, jak na Rys. 1 (to jedna z wielu możliwości, istnieje również teoria perkolacji w ośrodku ciągłym). Zakłada się, że każde oczko sieci może być pustą przestrzenią (porem) z prawdopodobieństwem p.
Rys. 1 Sieć kwadratowa - pory to kwadratowe oczka sieci w kolorze szarym. W przykładowej sieci perkolacja w kierunku pionowym nie jest możliwa, ponieważ nie istnieje ścieżka złożona z szarych oczek sieci, łącząca górną i dolną krawędź sieci. Perkolacja w poziomie również nie jest możliwa.
Dla bardzo dużych (a w zasadzie to nieskończonych) ośrodków istnieje pewna krytyczna wartość pc prawdopodobieństwa p, taka, że dla p>pc perkolacja jest możliwa a dla p<pc perkolacja nie zachodzi. Model perkolacji ma duże znaczenie praktyczne. Stosowany jest m.in. do opisu przewodnictwa elektrycznego w materiałach kompozytowych, żelowanie polimerów, rozprzestrzenianie choroby w populacji, przepływ cieczy w porowatym ośrodku (eksploatacja pól naftowych i gazowych - jak gęsto stawiać szyby wiertnicze?), pożarów lasów itp. Problem perkolacji jest istotny również z tego powodu, że zachowanie układu przy przejście przez prawdopodobieństwo krytyczne pc ma cechy przejścia fazowego identycznego jak np. przemiana woda-lód.
Proszę napisać program, który dla zadanego prawdopodobieństwa p generuje losowy układ porów i zapisuje go do tablicy a następnie sprawdza, czy w wygenerowanym układzie zachodzi perkolacja. Algorytm poszukujący perkolacji może wykorzystywać dwuwymiarową tablicę oczek w której będziemy zapisywali współrzędne oczek oraz dwóch indeksów początku i końca kolejki, ustawionych początkowo na zero. Jeśli poszukujemy perkolacji w kierunku góra-dół,w pierwszym kroku iteracji dodajemy do tablicy wszystkie oczka - pory (szare kwadraty na rysunku) z pierwszego (górnego) wiersza sieci, ustawiamy indeks początku kolejki na zero a indeks końca kolejki na ostatnie wstawione oczko. W kolejnym kroku iteracji pobieramy oczko na które wskazuje indeks początku i dodajemy do tablicy oczek wszystkich szarych sąsiadów oczka na które wskazuje indeks początku kolejki, odpowiednio zwiększając indeks końca. Po sprawdzeniu wszystkich sąsiadów zwiększamy indeks początku o 1. Iterujemy tak długo, jak długo indeksy początku i końca są różne. Po zakończeniu iteracji sprawdzamy, czy w tablicy znalazły się oczka należące do ostatniego (dolnego) wiersza siatki. Jeśli tak,to mamy perkolację.