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ą:
    1. kod źródłowy programu
    2. arkusz excela (jeden plik) z wynikami – jeżeli jest za duży, należy zzipować.
    3. 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).

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:

Ustawienia VS2013
Project|Properties -> Configuration Properties -> C/C++ -> General

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).

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.