Autor: Krzysztof
Sprawy bieżące
- Po sprawdzeniu w moodle (https://e.uksw.edu.pl) okazało się, że nikt jeszcze nie zgłosił żadnych plików jako rozwiązanie tematu 3: Variable Neighborhood Search. Dlatego przypominam że do 19 marca do 23:55 można uploadować rozwiązania tego zadania. W skład kompletu plików wchodzą:
- kod źródłowy programu
- arkusz excela (jeden plik) z wynikami – jeżeli jest za duży, należy zzipować.
- Dokument opisujący kluczowe parametry algorytmu: wartości k_max i l_max, wszystkie rodzaje operatorów sąsiedztwa i ich parametry, jakie były kryteria wyjścia z procedur: RVNS, SHAKE, VND, jaka zasada przyjęcia bądź odrzucenia x” została przyjęta w NBHCHANGE.
- Osoby zainteresowane udziałem we wtorek, 28.03, w wydarzeniu „Warszawskie Dni Informatyki” przysyłają mi mailem swoją deklarację udziału w terminie do 27.03 (poniedziałek) do południa. Potwierdzeniem udziału jest zdjęcie w pomieszczeniach, gdzie wydarzenie się odbywa.
PO 2017: Wejściówka na Lab.4
Zadeklaruj strukturalny typ danych struct para
zdefiniowany tak, że zmienna takiego typu może przechowywać dwie wartości: napis oraz liczbę. W funkcji main
zadeklaruj lokalną tablicę o długości 5, zawierającą elementy typu struct para
. Następnie napisz funkcję wiersz
, która będzie odczytywała dane z wiersza w otwartym pliku. W wierszu zapisane są kolejno: nr indeksu studenta, nazwisko i ocena. Funkcja odczytuje dane z jednego wiersza, następnie ignoruje odczytany nr indeksu a do komórki tablicy wpisuje w odpowiednich polach tylko nazwisko i ocenę. Przyjmij, że w pliku może być dowolna liczba wierszy (jest możliwe również, że plik jest pusty), ale nie większa niż rozmiar tablicy. Przyjmij też, że dane w pliku są zawsze poprawne, tj. wiersz zawsze zawiera trójkę prawidłowych napisów w tej samej kolejności: numer, nazwisko i ocena.
Nagłówek funkcji ma wyglądać tak:
int wiersz(FILE* f, struct para *p)
gdzie f
to wskaźnik do otwartego pliku, natomiast p
to wskaźnik do komórki tablicy, do której mają zostać zapisane dane z jednego odczytanego wiersza pliku. Funkcja zwraca wartość zero, jeżeli odczyt zakończył się pomyślnie, a wartość 1, jeżeli nie udało się odczytać kolejnej porcji danych ze względu na koniec pliku.
Przygotuj sobie odpowiedni plik tekstowy z prawidłowymi danymi w kilku wierszach i umieść go we właściwym folderze.
W funkcji main
pobierz od użytkownika nazwę pliku z danymi oraz nazwę pliku wyjściowego. Otwórz plik z danymi w trybie do odczytu, a plik wynikowy w trybie do zapisu. Następnie w pętli za pomocą funkcji wiersz
odczytaj kolejne wiersze pliku zapisując dane w kolejnych komórkach tablicy. Każdą odczytaną komórkę tablicy zapisz od razu do pliku wynikowego tak, aby w kolejnych wierszach pliku znalazły się pary: nazwisko i ocena. Jeżeli nie cała tablica została zapełniona danymi, zapisz tylko tyle, ile zostało odczytanych z pliku wejściowego. Po zakończeniu pętli zamknij pliki, wyświetl w oknie konsoli zawartość tablicy i zakończ działanie programu.
Do obsługi plików wykorzystaj funkcje: fopen
, fclose
, fprintf
, fscanf
i feof
. Wszystkie z biblioteki: stdio.h
.
Przetestowany, działający program uploaduj do systemu moodle jako rozwiązanie zadania „wejściówka” tematu nr 4.
Różne przykłady zadań i problemów dotyczących tego rodzaju zastosowań można znaleźć w podręcznikach lub na forach, których tematem jest programowanie w ANSI C. Dobre słowa kluczowe dla wyszukiwarki na najbliższy tydzień to: fopen
, fclose
, fprintf
, fscanf
i feof
w połączeniu z ansi c
. Oczywiście niczego nie należy brać bezkrytycznie, każdy kawałek kodu warto zweryfikować wklejając do okna VC++ i sprawdzając, jak naprawdę działa.
Hint:
Przygotowując się na lab. nr 4 warto przypomnieć sobie jak skonstruowany jest C-napis, sprawdzić jak działa szyfr Cezara, oraz zapoznać się z funkcjami:
int isalpha(int c)
int islower(int c)
int isupper(int c)
int tolower(int c)
int toupper(int c)
Funkcje znajdują się w bibliotece ctype.h
i służą do sprawdzania, czy dany znak jest literą i jakiego rodzaju (dużą czy małą) oraz do zamiany dużych liter na małe i małych na duże. Zadania pierwszego poziomu na lab. 4 mogą mieć wspólne fragmenty z zadaniami poziomu 2 lab. nr 3, tj. będą dotyczyły konwertowania napisów do postaci zaszyfrowanych wg różnych reguł, oraz oczywiście będą dotyczyły pracy na plikach tekstowych (materiał ostatnio omawiany na wykładzie).
Wyniki z egzaminu w terminie drugim
Lista ocen uzyskanych na egzaminie w terminie drugim. Wiersze zawierają: nr indeksu, liczbę zdobytych punktów i ocenę.
- 91058 5.5 2
- 95146 7.5 2
- 95265 7.5 2
- 96599 12 3
- 99057 23 5
- 99330 13.5 3
- 99381 14.5 3.5
W razie niejasności, proszę o kontakt.
PO 2017: Wykład 3 – slajdy
NMO 2017: slajdy – Część 2
VS2013: Błąd kompilacji C4996
Aby uniknąć błędu kompilacji C4996 występującego, kiedy używamy starszych wersji niektórych funkcji bibliotecznych (np. strcpy
), należy w opcji „Properties” naszego projektu ustawić „No” w dwóch miejscach: „Treat warning as errors” oraz „SDL checks”, tak jak to zostało pokazane poniżej:
PO 2017: Wejściówka na Lab.3
Zadeklaruj strukturalny typ danych, który będzie zawierał dwa pola: napis oraz liczba całkowita. W funkcji main
zadeklaruj lokalną tablicę o niewielkiej długości (np. 5), zawierającą elementy typu takiego, jak zdefiniowana wcześniej struktura.
Następnie napisz funkcję, która jako argument wywołania przyjmuje tę tablicę. Kod funkcji sprawdza, czy w każdej z komórek tablicy pole liczbowe nie zawiera wartości mniejszej (ale dodatniej) od długości napisu przechowywanego w drugim polu. Jeżeli tak, skraca napis do długości takiej, jak wartość w polu liczbowym. W przeciwnym przypadku pozostawia napis niezmieniony. Takie sprawdzenie i skracanie wykonuje się dla wszystkich komórek tablicy. Po przejrzeniu całej tablicy funkcja zwraca liczbę skróceń, jakie rzeczywiście zostały wykonane.
Napisz w funkcji main
kod, który pozwala użytkownikowi wprowadzić wartości do obydwu pól w każdej z komórek tej tablicy. W main
, poniżej kodu wprowadzającego dane umieść wywołanie funkcji skracającej napisy w tablicy, przy czym argumentem wywołania jest tablica, do której dane zostały właśnie przez użytkownika wprowadzone. Na koniec dopisz kod wyświetlający nową zawartość tablicy (w kolejnych wierszach pary: liczba i napis) oraz zwróconą przez funkcję liczbę faktycznie wykonanych skróceń.
Przetestowany, działający program uploaduj do systemu moodle jako rozwiązanie zadania „wejściówka” lab. nr 3 (uploadować należy wyłącznie plik cpp z kodem źródłowym, nic więcej).
PO 2017: Wykład 2 – slajdy
ZPO 2016: poprawa i egzamin, termin II
Niestety, na podstawie wyników głosowania nie udało się ustalić terminów poprawy i II terminu egzaminu, które pasują wszystkim. Ale na szczęście jest kilka terminów, które pasują większości.
Ostatecznie więc, podjąłem decyzję, że:
1. poprawa zajęć lab. z ZPO: 8.03, środa, od godz. 16:30 do 20:00, pracownia komputerowa A033.
2. II termin egzaminu z ZPO: 9.03, czwartek, od godz. 11:30 do 13:00, sala 109 bud. 23.