Termin: środy 16:15, sala 3120 lub lab 3044
Najbliższe zajęcia: 16.01 w sali 3120.
Wykłady, zadania, stare kolokwia: w skrypcie dra hab. Kiciaka.
Krótki tekst o rozwiązywaniu równań różnicowych.
Zasady zdobywania punktów za ćwiczenia (40% punktów za pracę w trakcie semestru):
prawie co tydzień będzie praca domowa do oddania na początku ćwiczeń. Za każdym razem będą 1-2 zadania, oceniane na 0, 1/4, 1/2, 3/4 lub 1 punkt (końcowy wynik zostanie odpowiednio przeskalowany). To jest jedyna możliwość zdobycia punktów za ćwiczenia.
Rozwiązania można oddawać do 15 minut po rozpoczęciu zajęć, na kartce (zadania teoretyczne) lub mailem (kod programów).
Poza tym za kolokwium można zdobyć do 30% punktów i za projekt programistyczny także do 30% punktów za pracę w trakcie semestru. Suma tych wartości oraz liczby punktów za egzamin przekłada się wprost na ocenę końcową. (Dodatkowo, żeby uzyskać pozytywną ocenę, trzeba zdobyć przynajmniej połowę punktów z egzaminu. Zdobycie poniżej 1/3 punktów z egzaminu pisemnego wyklucza przystąpienie do egzaminu ustnego.)
Projekty programistyczne: oprócz działania zgodnego ze specyfikacją będą oceniane: samodzielność rozwiązania (programy w całości skopiowane z dowolnego źródła będą oceniane nisko), komentarze w kodzie (powinny być wystarczające do zrozumienia działania programu), interakcja z użytownikiem (program powinien zawierać intrukcję obsługi, np. w formie poleceń wypisywanych na ekran lub pliku README; program nie może wymagać wpisywania z wiersza poleceń długich danych wejściowych do testów). Termin oddawania programów: środa 23.01 (do północy).
Zadania uzupełniające (nieobowiązkowe), które można oddawać do 23.01: zadanie 2 z egzaminu z WDI z 2.02.2018, str. 27 w skrypcie, zadanie 3 z egzaminu poprawkowego z WDI z 23.02.2018, str. 28 w skrypcie. Punkty z zadań uzupełniających zostaną dodane do punktów z zadań domowych (przy czym nie można zdobyć więcej niż 10 punktów), zadania są punktowane tak samo jak domowe.
Zadanie domowe na 16.01: zadanie 1 z egzaminu poprawkowego z WDI z 3.03.2011, str. 22 w skrypcie.
Zadanie domowe na 19.12: napisać program pozwalający zbierać dane o pracach dyplomowych i wykonywać na nich kilka operacji (kontynuacja zadania z zajęć).
Typ danych, który trzeba wykorzystać do przechowywania informacji o pracach, to odpowiednia struktura.
Dane, które mają być zapisywane, to tytuł pracy (string, czyli char*), rok obrony (int), ocena (int).
Program ma umożliwiać wykonywanie następujących operacji w nieskończonej pętli:
(1) dodanie nowej pracy do listy,
(2) wypisanie wszystkich prac z podanego roku (posortowane po tytule lub po ocenie, zgodnie z poleceniem użytkownika),
(3) wypisanie wszystkich prac, których tytuł zawiera podany fragment tekstu.
Do operacji na tekstach warto wykorzystać możliwości biblioteki string.h.
Zadanie domowe na 5.12: zadanie 4 z kolokwium poprawkowego z WdI z 11.01.2016, str. 9 w skrypcie (o rozkładzie QR macierzy)i.
Zadanie domowe na 28.11: rozwiąż równanie różnicowe a_k = 4*a_(k-2) + k*2^k z warunkami początkowymi a_0 = 0 i a_1 = 1.
Zadanie domowe na 21.11: napisać procedurę, której parametrami są int n i float tab[n] (n-elementowa tablica liczb typu float), znajdującą wszystkie maksymalne podciągi a_k,...,a_m złożone z kolejnych wyrazów tablicy tab takie, że ciąg a_k, a_k*a_(k+1), a_k*a_(k+1)*a_(k+2),..., a_k*a_(k+1)*...*a_m jest ściśle rosnący. Każdy taki ciąg należy wypisać na ekran. Uwaga: maksymalny oznacza, że nie da się go przedłużyć, a nie, że ma największą możliwą długość. To jest (nieznacznie zmodyfikowane) zadanie ze starego kolokwium - tym razem zachęcam do napisania kodu na kartce (ale można też na komputerze).
Zadanie domowe na 14.11: napisać program, który oblicza współczynnik dwumianowy Newtona (n nad k) dwiema różnymi metodami: (1) korzystając z wzoru (n nad k) = n!/(k!*(n-k)!), (2) rekurencyjnie, czyli korzystając z wzoru (n nad k) = (n-1 nad k) + (n-1 nad k-1).
Program ma wczytywać dwa parametry n i k bedące liczbami całkowitymi i trzeci opcjonalny parametr, napis '-s' i '-r', określający metodę wykonania obliczenia (odpowiednio silnie i rekurencja). Jeśli trzeci parametr nie został podany lub nie jest żadnym z wymienionych, program powinien użyć metody rekurencyjnej.
Parametry mają być podawane podczas uruchomienia programu (czyli należy użyć zmiennych argc i argv).
Obie metody powinny być zaimplementowane w osobnych procedurach, które będą wywołane w procedurze main.
Podobne rozwiązania można obejrzeć w załączonym kodzie do zadania z ćwiczeń z 7.11.
Zadanie domowe na 7.11: scalanie posortowanych ciągów. Napisz program, który dwa ciagi posortowane malejąco łączy w jeden ciąg posortowany malejąco. Początkowe ciągi można wczytać od użytkownika (np. zapytać najpierw o długość ciągu, a potem o kolejne elementy, zakładając, że użytkownik zadba o właściwy porządek elementów) lub wygenerować losowo i posortować. Wynikowy ciąg należy wypisać na ekran. (Rozwiązania, które po prostu sortują zbiór elementów obu ciągów, nie wykorzystując tego, że ciągi były posortowane, będą oceniane na nie więcej niż 0,5p.)
Zadanie domowe na 31.10: sortowanie bąbelkowe. Napisz program, który: (a) wczytuje od użytkownika liczbę n (wielkość sortowanej tablicy), (b) wypełnia tablicę o n polach wartościami (pseudo)losowymi, (c) sortuje tablicę używając algorytmu sortowania bąbelkowego, (d) wypisuje na ekran początkową oraz posortowaną tablicę.
Zadanie domowe na 24.10: napisz program, który pobiera od użytkownika liczbę naturalną n (funkcja scanf), tworzy dwie tablice o n polach, pierwszą wypełnia kwadratami kolejnych liczb naturalnych (od 1 do n), a do drugiej w pole o indeksie i powinna zostać wpisana suma wartości pól pierwszej tablicy o numerach od 0 do i. Program powinien wypisywać na ekran drugą tablicę. Przykład: dla n = 4 pierwsza tablica będzie zawierała 1, 4, 9, 16, a druga 1, 5, 14, 30.
Zadanie domowe na 17.10: napisz program wczytujący ze standardowego wejścia liczbę naturalną n i wypisującą wartość n! (n silnia). Program powinien się kompilować (ale proszę wysłać tylko plik źródłowy), wypisywać polecenie dla użytkownika (np. "podaj liczbę naturalną"), opisywać wynik (np. "wartość n!:...") i zawierać (krótkie) komentarze w kodzie, opisujące jego działanie - obecność tych elementów też będzie oceniana. Nie trzeba się przejmować błędami wynikającymi z niewłaściwego użycia programu (np. jeśli użytkownik wpisze tekst zamiast liczby) ani nieprawidłowymi wynikami spowodowanymi tym, że wartość n! już dla niewielkich n przekracza ograniczenie na wielkość liczb całkowitych w C.
© 2020 Marysia Donten-Bury; the website is hosted on the MIM UW Faculty server