Narzędzia użytkownika

Narzędzia witryny


jimp2014

====== Języki i metody programowania 2018/19 - Informatyka Rok I ====== ====== Laboratorium nr 1 (rok 18/19). Prosty program ====== * **Informacje organizacyjne** - Regulamin w skrócie: * Żadnego sprzętu NIE WOLNO SAMODZIELNIE WŁĄCZAĆ ANI WYŁĄCZAĆ. * Do laboratorium nie wolno przynosić **ŻADNYCH NAPOJÓW**. - Przygotowanie do laboratorium: * na każdych zajęciach obowiązuje znajomość materiału podanego na dotychczasowych wykładach; * opis każdego ćwiczenia zawiera zakres materiału wymaganego na następnych zajęciach - należy przeczytać odpowiednie rozdziały, a w przypadku niejasności, wątpliwości itp. - przygotować pytania i zgłosić je na początku zajęć; * zadania, które są przewidziane do wykonania w czasie zajęć, a nie zostały dokończone - należy zrobić w domu - w przypadku trudności, wątpliwości itp. - zgłosić je w czasie zajęć lub przyjść na konsultacje; * należy przeglądać listę zadań dodatkowych - trzeba umieć je zrobić (najlepszą formą sprawdzenia, czy potrafię napisać program, jest napisanie tego programu). - Praca w domu, Windows, DevC++, MicrosftVisualStudio, Eclipse, własne komputery, laboratoria UCI. - Organizacja zajęć: * Zgłaszanie pytań dotyczących poprzednich zajęć i nowego materiału. * Krótki (3-5 minut) sprawdzian (prawie co tydzień). * Omówienie zadań aktualnego ćwiczenia. * Samodzielne pisanie programów z możliwością bieżącej konsultacji. - Zaliczenie. warunek - obecność. Ocena - ok. 50% to średnia ze sprawdzianów oraz ok. 50% to ocena ze sprawdzianu końcowego (jedno ćwiczenie na początku stycznia będzie poświęcone pisaniu programu "testowego"). Na ocenę końcową może mieć wpływ zrobienie w trakcie semestru zadań dodatkowych. - Nieobecności - wg Regulaminu studiów, możliwość odrabiania z inną grupą. - Konsultacje. * Organizacja pracy w systemie Linux (konto, zmiana hasła, organizacja folderów). * Dostępne edytory tekstowe, np. vi, vim, gedit, emacs. * Standardy języka ANSI C (C90, C99, C11, C18). * Edycja programu w języku C. * Kompilacja, linkowanie, wykonanie prostego programu. (gcc nazwa.c -ansi -pedantic -Wall) * Zadania {{dydaktyka:jimp:zadania_lab1.pdf}} * ===== Co należy przygotować na ćwiczenia laboratoryjne nr 2: ===== * Przeczytać wstępne rozdziały podręcznika do programowania w języku C. * Znaleźć w podręczniku najprostsze przykłady programów, w których są: * definiowane zmienne typu ''int, double'', * wykonywane podstawowe operacje arytmetyczne, * wyprowadzane na ekran wyniki obliczeń. Proszę przeczytać, nie uczyć się na pamięć, zorientować się co jest oczywiste, a co wymaga objaśnienia, przygotować pytania. * Na stronie http://upload.wikimedia.org/wikibooks/pl/6/6a/C.pdf jest godna polecenia książka "Programowanie w C". * W internecie jest wiele innych (może lepszych?) źródeł informacji o języku C. * W Bibliotece Głównej AGH jest kilkadziesiąt egzemplarzy książki Kernighan, Ritchie: Język ANSI C (ale studentów jest kilka razy więcej - "kto pierwszy ten lepszy"). * Dobra książka: Kenneth A. Reek: Język C Wskaźniki - Vademecum profesjonalisty. * Przystępna w czytaniu (gorzej - w kupowaniu - ok. 100zł): Stephen Prata: Szkoła programowania Język C. Uwaga - nie pomylić z Język C++ (tego samego autora). Kilka egzemplarzy jest w bibliotece, powinna być dostępna wśród studentów starszych lat. ====== Laboratorium nr 2 (rok 18/19). Działania na liczbach ====== ==== Tematyka ==== * Typy danych ''int'',''float'' i ''double''. * Stałe i zmienne typu ''int'',''float'' i ''double''. Deklaracje i inicjowanie. * Podstawowe operacje arytmetyczne na zmiennych różnych typów. Priorytety operatorów. * Inkrementacja i dekrementacja ''++'', ''-----''. * Proste i rozszerzone formy podstawienia ''='', ''+='', ''-='' itp. * Wczytywanie liczby z klawiatury (funkcja ''scanf'') i wyprowadzenie liczby na ekran (funkcja ''printf''). ==== Zadania ==== * Program przeliczający godziny na sekundy i odwrotnie, np. 13425 sekund -- to ile, godzin, minut, sekund (ew. dni i tygodni). * Program przeliczający temperaturę podaną w stopniach Fahrenheita na stopnie Celsjusza. * Program obliczający współczynnik BMI. **Obowiązkowo**: program wczytuje masę w kilogramach, a wzrost w centymetrach. * Dalsze zadania {{dydaktyka:jimp:zadania_lab2.pdf}} ==== Co należy przygotować na ćwiczenia laboratoryjne nr 3: ==== Znaleźć w podręczniku (i przeczytać, starać się zrozumieć, ew. przygotować pytania) na temat: * pozostałych typów danych, * zmiennych typu ''char'', * instrukcji sterujących: warunkowej - ''if'' i pętli ''for''. ====== Laboratorium nr 3 (rok 18/19). Instrukcje sterujące ====== * Typ ''char'' a ''int''. * Instrukcje sterujące ''if'' i ''for''. * Program obliczający przybliżenie pochodnej ilorazem różnicowym. * Program tworzący "kartkę z kalendarza". * [[cw-3-2014|Zadania lab.3]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 4: ===== * Wszystko o instrukcjach sterujących. * Typ znakowy ''char''. * Czytanie pojedynczego znaku (funkcją ''scanf'' lub ''getchar''). * Definiowanie tablicy. * Przykład definiowania i wywołania funkcji. ====== Laboratorium nr 4 (rok 18/19). Funkcje ====== * Wczytanie, porównywanie znaków. * Definiowanie, wywoływanie funkcji. * Przekazywanie informacji do / z funkcji. * Program - gra w kółko i krzyżyk. * [[cw-4-kik-2014|Zadania lab.4]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 5: ===== * Funkcje - typ funkcji, argumenty formalne (parametry funkcji) i argumenty faktyczne funkcji. * Wszystko o tablicach (jedno i wielowymiarowych, przekazywanie do funkcji, VLA). * Łańcuchy znakowe. Proszę pobieżnie przeglądnąć jakie funkcje zawiera standardowa biblioteka ''string.h''. Nie trzeba pamiętać ich nazw!!! ====== Laboratorium nr 5 (rok 18/19). Tablice ====== * Tablice znakowe ''char t1[10];'' i zmienne wskaźnikowe ''char *t2;'' * Sortowanie tablic. * Przekazywanie do funkcji tablic 1 i 2 wymiarowych. * [[Zadania|Zadania lab.5]] * [[cw-5-stringi-2014|Zadania domowe]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 6: ===== * Wskaźniki. ====== Laboratorium nr 6 (rok 18/19). Wskaźniki ====== * Definiowanie zmiennych wskaźnikowych. * Rekurencyjne wywoływanie funkcji. * [[cw-6-rekurencja|Zadania lab.6]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 7: ===== * Obsługa plików w trybie tekstowym. ====== Laboratorium nr 7 (rok 18/19). Pliki ====== * Otwieranie plików tekstowych do czytania. * Czytanie łańcuchów - funkcje ''fgets'', ''fscanf'' z kodem konwersji ''%s'' - różnice w wywołaniu funkcji, interpretacji końca łańcucha. * Używanie funkcji ''fgets'' do wczytywania łańcucha z klawiatury - stała ''stdin''. * Różne sposoby zapisywania w pliku przejścia do nowej linii - różnice między systemami: Unix, Windows, DOS, Mac. * Program znajdujący najdłuższy wyraz w pliku. * Program, który najpierw czyta z pliku 10 łańcuchów znakowych, a po wczytaniu wszystkich dziesięciu - pisze je na ekranie (należy zastosować tablicę dwuwymiarową). * Programy układające krzyżówki 1, 2, 3, 4 lub n wymiarowe. * {{:dydaktyka:jimp:polski.txt|Słownik}} ===== Co należy przygotować na ćwiczenia laboratoryjne nr 8: ===== * Przepraszam za zmianę: Proszę przypomnieć sobie materiał podany na dotychczasowych wykładach - z ostatnim (z 16 listopada) włącznie. ====== Laboratorium nr 8 (rok 18/19). Tablice - uzupełnienia ====== * Definiowanie - tablic tablic (tablic "wielowymiarowych"), - tablic wskaźników, - wskaźników do tablic. * Notacja wskaźnikowa i tablicowa zastosowana do tablic tablic i tablic wskaźników. * Przekazanie do funkcji tablicy tablic o dowolnych wymiarach. * [[zadania_8_2018]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 9: ===== * Przypomnienie o łańcuchach, tablicach znakowych, tablicach łańcuchów, tablicach wskaźników. * Podstawowe wiadomości o strukturach. * Dynamiczny przydział pamięci - funkcje ''malloc'' i ''free''. ====== Laboratorium nr 9 (rok 18/19). Dynamiczny przydział pamięci ====== Przypomnienie: - tablica znaków, - wskaźnik do znaków, - tablica wskaźników do znaków i tablica tablic znaków. Program, który wczytuje łańcuchy znaków i oszczędza pamięć - dla każdego łańcucha zajmuje tylko tyle pamięci ile wymaga tego wczytany łańcuch. W programie tworzymy funkcję, która: - wczytuje łańcuch do roboczego bufora - tablicy znakowej (w wersji rozszerzonej należy przewidzieć bezpieczne wczytywanie łańcucha bardzo długiego), - oblicza długość łańcucha i ilość pamięci potrzebnej do jego zapisania (czy to jest to samo?), - przydziela pamięć dla łańcucha (ze sprawdzeniem, czy przydział zakończył się sukcesem), - przepisuje łańcuch z bufora do przydzielonego obszaru pamięci, - do funkcji wywołującej zwraca adres pamięci, w której jest zapisany łańcuch. W funkcji głównej pamiętane są adresy kolejnych łańcuchów. Po wczytaniu ostatniego, wypisywane są wszystkie łańcuchy i zwalniana jest cała przydzielona pamięć - należy zwrócić uwagę na kolejność zwracania pamięci! * Wersja podstawowa: pisząc program decydujemy ile łańcuchów będzie wczytanych. * Wersja rozszerzona: liczba łańcuchów jest wczytywana na początku programu, ale w programie nie korzystamy z tablic VLA. **Zadanie**: Proszę napisać program, w którym jest pamiętana tabliczka mnożenia liczb naturalnych, ale w sposób oszczędny. Ponieważ mnożenie jest przemienne, to nie trzeba pamiętać obu iloczynów ''x*y'' i ''y*x''. Zatem należy pominąć cały trójkąt liczb nad albo pod przekątną klasycznej tabliczki (warto napisać obie wersje programu). Program: * wczytuje zakres jednego czynnika np. ''xp'' i ''xk'' (zakres drugiego czynnika będzie taki sam), * przydziela dynamicznie pamięć dla każdego wiersza "trójkątnej tabliczki" i wpisuje tam wartości odpowiednich iloczynów, * wczytuje dowolne dwa czynniki (z zadanego zakresu) i wyprowadza na ekran odczytany z tablicy ich iloczyn. Oczywiście program nie ma żadnego zastosowania praktycznego - lepiej obliczać iloczyny, a nie pamiętać. To jest tylko ćwiczenie dynamicznego przydzielania pamięci - dlatego NIE STOSUJEMY TABLIC VLA. * [[Zadania 9 2018v1]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 10: ===== * Materiał podany na wykładach. * Struktury, unie, typ wyliczeniowy. * Wskaźniki do struktur. * Podstawowe informacje o listach jednokierunkowych - wartownik (header), budowa elementu listy. ====== Laboratorium nr 10 (rok 18/19). Struktury c.d.====== * Struktury, unie, typ wyliczeniowy - deklaracje i definicje, podobieństwa i różnice. * Przekazywanie struktur do funkcji - przez wartość lub przez adres. * Należy napisać część programu działającego na liczbach zespolonych. Załóżmy, że na różnych etapach obliczeń potrzebna jest raz postać algebraiczna, a raz wykładnicza tych liczb. Należy: - napisać deklaracje struktur: ''algebraiczna'' i ''wykladnicza'', - zdefiniować zmienne strukturalne odpowiedniego typu, - napisać funkcję, której parametrem (czy jedynym?) jest struktura (lub wskaźnik do struktury) ''algebraiczna'', a funkcja wyznacza moduł i argument i przekazuje wyniki zapisane w strukturze ''wykladnicza'', - w funkcji ''main'' wczytać jedną liczbę w postaci algebraicznej, wywołuje ww. funkcję i wyprowadza na ekran obie postaci. * Modyfikacja 1: - Dodajemy deklarację trzeciej struktury: ''liczba'', która zawiera dwa pola: przeznaczone dla pamiętania postaci algebraicznej oraz wykładniczej, - funkcja wyznaczająca postać wykładniczą operuje tylko na jednej strukturze ''liczba''. * Modyfikacja 2 (względem poprzedniej modyfikacji 1) - używamy unii: - W trzeciej strukturze (''liczba'') nie rezerwujemy osobnego miejsca dla jednej i drugiej postaci liczby - każda liczba jest pamiętana w każdym momencie albo w postaci algebraicznej albo wykładniczej - należy rozważyć użycie struktury z unią i selektorem unii oraz zastosowanie typu wyliczeniowego, - przy wczytywaniu użytkownik wybiera postać, w jakiej chce podać liczbę, - wywoływana funkcja zwraca postać wykładniczą zarówno wtedy gdy przekazujemy jej postać algebraiczną jak i wykładniczą, * Dalsza modyfikacja: funkcja (raz wywołana) przekształca ciąg liczb zespolonych zapisanych w tablicy. * Lista. * [[Zadania 10 2018]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 11: ===== * Materiał podany na wykładach, w szczególności "Struktura programów". * Operatory (bez bitowych). * Klasy zmiennych, łączność. * Cas trwania (życia) zmiennej. * Zakres widoczności identyfikatorów, ====== Laboratorium nr 11 (rok 18/19). Operatory, klasy zmiennej, łączność, czas trwania zmiennej ====== 1. Wykorzystanie struktur i wskaźników - operacje na listach jednokierunkowych [[Zadania 11 2018]] (program ''Lista'' w kilku wersjach). 2. Które z poniższych wyrażeń użytych jako //l-value// lub //r-value// po definicjach ''int a=100, b=200, tab[3]={10,20,30}, *p=tab;'' są legalne i jaka jest ich wartość (ew. wynik działania, efekt uboczny)? * &a * p * &p * *p * *p+1 * *(p+1) * ++p * p+1 * p++ * *++p * *p++ * ++*p * (*p)++ * ++*++p * ++*p++ * a+++b * a+++++b 3. Rodzaje stałych, znaczenie słowa kluczowego ''const''. 4. Zasłanianie identyfikatorów. 5. Znaczenie słów kluczowych ''static'' i ''extern''. ===== Co należy przygotować na ćwiczenia laboratoryjne nr 12: ===== * Działania na bitach. * Ogólnie o wskaźnikach do funkcji. * Argumenty polecenia wykonania programu. * Zwracanie wartości po wykonaniu programu. * Dyrektywy preprocesora. * Wszelkie pytania, jakie pojawiły się w czasie semestru, a nie doczekały się jeszcze odpowiedzi. ====== Laboratorium nr 12 (rok 18/19). Uzupełnienia ======= * Operatory bitowe. * Argumenty wiersza poleceń i odczytanie wartości zwracanej przez program. * Wskaźniki do funkcji. * Co oznaczają poniższe deklaracje: - ''int f(void), *fip(), (*pfi)();'' - ''int (*apfi[3])(int *x, int *y);'' - ''int (*fpfi(int (*)(long), int))(int,...);'' * Dyrektywy preprocesora, w tym - kompilacja warunkowa. * [[Zadania 12 2018]] ===== Co należy przygotować na ćwiczenia laboratoryjne nr 13: ===== * Materiał podany na wykładach. * Sprawdzian obejmuje wszystkie dotychczas poznane elementy, ale w szczególności: - Definiowanie zmiennych różnych typów, tablic, struktur. Zasięg zmiennych. - Operacje wejścia/wyjścia - czytanie z klawiatury lub z pliku znakowego liczb, znaków, łańcuchów. - Tablice, struktury, unie. - Zmienne wskaźnikowe. - Typ wyliczeniowy. - Funkcje - przekazywanie argumentów przez wartość i przez adres (zmiennych, tablic, struktur). Lista argumentów aktualnych (bieżących) i formalnych (parametrów). Deklaracja funkcji (prototyp). - Dynamiczny przydział pamięci. - Tablice wskaźników. * [[Przyklad zadania]] - na napisanie takiego programu potrzeba więcej czasu niż trwa sprawdzian, ale w domu, dla ćwiczenia, warto go napisać. ====== Laboratorium nr 13 (rok 17/18). Sprawdzian ======= * W pierwszej linii pliku źródłowego należy w komentarzu wpisać swoje nazwisko, wybraną wersję i numer zadania. * Proszę zadbać o przejrzystość programu (np. wcięcia i położenie nawiasów klamrowych). * Jeżeli nazwy funkcji i zmiennych nie opisują ich znaczenia - proszę dodać komentarz. * Należy zachować standard C90 - definicje zmiennych umieszczać na początku bloku, nie mieszać z kodem, - można dopuścić komentarz zaznaczany dwoma znakami /. * Nie używamy zmiennych globalnych. Wersję źródłową należy wysłać na adres miller@agh.edu.pl w załączniku listu o temacie: JiMP swoje nazwisko wersja nr [[Spr4]] [[Spr5]] [[Spr6]] {{nic:dydaktyka:jimp:sprawdzian2017budynek.pdf|Temat 1}} {{nic:dydaktyka:jimp:sprawdzian2016plik.pdf|Temat 4}} {{nic:dydaktyka:jimp:tekst.txt|Plik tekstowy}} (źródło: en.wikibooks.org/wiki/C_Programming/Why_learn_C%3F) ===== Co należy przygotować na ćwiczenia laboratoryjne nr 14: ===== * Poprawić swój program pisany w czasie sprawdzianu i nową wersję zapisać w nowym pliku. ====== Laboratorium nr 14 (rok 18/19). Poprawa ew. błędów popełnionych na sprawdzianie, zaliczenia ======= ====== Terminy zaliczeń (rok 18/19). ======= - Pierwszy termin: ostatnie (14.) zajęcia laboratoryjne. - Drugi termin: 29.01.2019 godz.14:00 lab.216 w C2. - Trzeci termin: 12.02.2019 godz. 12:00 lab.216 w C2.

jimp2014.txt · ostatnio zmienione: 2019/01/16 16:38 przez miller