PO2023: Wejściówka na Lab.4

Napisz program, który będzie wczytywał dane z jednego pliku tekstowego i zmienione zapisywał do drugiego. W tym celu:

  1. 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.
  2. 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.
  3. 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. Uwaga: nazwisko należy zapisać do pliku w postaci zaszyfrowanej, tj. należy zastąpić wszystkie samogłoski znakiem '*’. Jeżeli nie wszystkie komórki tablicy zostały zapełnione danymi, zapisz do pliku 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 funkcji main.
  4. Przygotuj sobie odpowiedni plik tekstowy z prawidłowymi danymi w kilku wierszach i umieść go we właściwym folderze. Następnie przetestuj program.

Do obsługi plików wykorzystaj funkcje: fopen, fclose, fprintf, fscanf i feof. Wszystkie z biblioteki: stdio.h.

Przetestowany, działający program (tylko plik z kodem źródłowym) uploaduj do https://e.uksw.edu.pl jako rozwiązanie zadania „Wejściówka” w sekcji „Temat 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).

PO2023: 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ń.

Kod przetestowanego, działającego programu załaduj do https://e.uksw.edu.pl jako rozwiązanie zadania „Wejściówka” w sekcji „Temat 3”, tak aby na początku zajęć można go było szybko pobrać, skompilować i zademonstrować działanie.

PO2023: Wejściówka na Lab.2

Napisz program szyfrujący tekst wprowadzany przez użytkownika. W tym celu przygotuj tablicę dwuwymiarową A o wymiarze 5 na 5 przechowującą wartości typu char, oraz tablicę jednowymiarową B, przechowującą wskaźniki do zmiennych typu char. Do tablicy B wpisz wartości NULL, a do tablicy A wpisz litery alfabetu (z pominięciem liter zawierających znaki diakrytyczne: ą, ć, ę, ł, ń, ó, ś, ź, ż), np. tak:

a f k p v
b g l r w
c h m s x
d i n t y
e j o u z

Następnie wczytaj od użytkownika ciąg znaków bez spacji, reprezentujący dowolny napis składający się tylko ze znaków z tablicy A, którego długość nie jest większa niż długość tablicy jednowymiarowej B. Zakładamy przy tym, że dane wprowadzane przez użytkownika są zawsze poprawne co do ich wartości i rozmiaru. Napis wczytaj poleceniem scanf do pomocniczej tablicy. Następnie dla każdej kolejnej litery wczytanego napisu znajdź w tablicy A komórkę, przechowującą tę literę, po czym adres znalezionej komórki w A zapisz w kolejnej komórce tablicy B. Po zakończeniu tablica B powinna zawierać wskaźniki do odpowiednich komórek tablicy A z kolejnymi literami wprowadzonego napisu. Jeżeli długość tablicy B jest większa niż długość wczytanego słowa, pozostałe komórki tablicy B przechowują wartość NULL.

Wypisz w oknie konsoli napis podany przez użytkownika korzystając tylko z tablicy B, tj. za pomocą wskaźników z B sięgaj do odpowiednich komórek w A i wypisz ich zawartość kolejno na ekranie.

Następnie zaszyfruj napis poprzez przestawienie wartości w wierszach tablicy A. Przykładowe przestawienie to przesunięcia wartości: z wiersza 1 do 2, z 2 do 3, z 3 do 4, z 4 do 5, a z 5 do 1, np. tak:

e j o u z
a f k p v
b g l r w
c h m s x
d i n t y

Po przestawieniu wierszy ponownie wypisz w oknie konsoli napis korzystając ze wskaźników z tabeli B.

Na koniec przywróć w tablicy właściwy porządek wierszy i jeszcze raz korzystając z tablicy B wypisz napis, tym razem w postaci odszyfrowanej.

Przetestowany, działający program (tylko plik z kodem źródłowym) uploaduj do https://e.uksw.edu.pl jako rozwiązanie zadania „Wejściówka” w sekcji „Temat 2”, tak aby na początku zajęć można go było szybko pobrać, skompilować i zademonstrować działanie.

PO2023: zasady prowadzenia zajęć laboratoryjnych

Zasady obowiązujące na zajęciach:

Każdy uczestnik zajęć lab. wykonuje na komputerze w pracowni dwa zadania: podstawowe (pierwszego poziomu) za 6 pkt. i dodatkowe (drugiego poziomu) za 4 pkt. Zadań nie wolno realizować na własnym laptopie. Dopiero kiedy prowadzący odbierze i pozytywnie oceni zadanie podstawowe, można zacząć rozwiązywać zadanie dodatkowe (dodatkowe bywa łatwiejsze). Studenci mogą realizować swoje zadania tylko na zajęciach – nie ma możliwości kończenia programu w domu i przesyłania go do oceny w godzinach wieczornych czy następnego dnia. Studenci obowiązkowo uploadują do moodle rozwiązane zadania I i II poziomu w trakcie zajęć (moodle stanowi archiwum prac studentów). Po uploadowaniu koniecznie należy kliknąć „oddaj do oceny”.

W trakcie zajęć lab. obowiązuje całkowity zakaz korzystania z zasobów internetu. Używanie komunikatorów, korzystanie z wyszukiwarki sieciowej, sprawdzanie informacji na forach społecznościowych lub innych stronach poświęconych programowaniu w c/c++ skutkuje natychmiastowym opuszczeniem pracowni i oceną 0 pkt za realizowane zadanie.
Wyjątki:
http://www.cplusplus.com/
materiały z wykładu dostępne na platformie e-learningowej Moodle UKSW: https://e.uksw.edu.pl

Student może za to korzystać swobodnie z papierowych książek i notatek oraz wydruków. Jeżeli ktoś ma tablet z książkami w pdf’ie to ma obowiązek pokazać prowadzącemu, że na czas zajęć ma w nim wyłączony kontakt ze światem (WiFi).

Na zajęciach lab. prowadzący nie prezentuje żadnego mini-wykładu, a jedynie rozdaje i objaśnia zadania oraz odpowiada na konkretne pytania poszczególnych studentów dotyczące tworzonego kodu programu. Po wykonaniu zadania należy natychmiast zasygnalizować to prowadzącemu, który podejdzie i oceni wykonany program. Oceniony program należy uploadować do moodle. Osoby, które rozliczą pozytywnie obydwa zadania wcześniej, nie czekają w pracowni do zakończenia zajęć, ale opuszczają ją niezwłocznie po otrzymaniu oceny i wysłaniu programu do moodle. Zgłoszenie rozwiązania gotowego do oceny przez wiele osób na kilka minut przed końcem zajęć może skutkować brakiem możliwości oceny tych osób, które zrobiły to najpóźniej, a w rezultacie – końcowym wynikiem 0 pkt dla tych osób.

W okolicach 4. zajęć w semestrze rozdawane są studentom zadania semestralne. Nie ma jednak podziału zaliczenia semestru na dwie oceny – z zajęć lab. i z zadania semestralnego. W ostatnim dniu semestru wystawiana jest jedna łączna ocena. Strategie postępowania w rodzaju „w semestrze zaliczę laboratoria a przez wakacje zrobię zadanie semestralne” są nieakceptowane. Student musi wykonać zadanie semestralne w semestrze i albo zaliczy wszystko przed rozpoczęciem sesji letniej, albo otrzymuje ocenę negatywną z zajęć lab.

Strony www z zasadami zaliczenia zajęć lab. z PO:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/
w tym:
Zasady dla zadań lab.:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/zasady-dla-zadan-lab/
Zasady dla zadania sem.:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/zasady-dla-zadania-sem/

Ostatnia deska ratunku dla tych, którzy nie zaliczyli zajęć lab. w semestrze:
https://ktrojanowski.blog.uksw.edu.pl/programowanie-obiektowe/zasady-zaliczenia-lab/wyjatek/

ZTP2022: terminy w sesji poprawkowej

  1. Poprawa oceny z zajęć lab.: 27 lutego (poniedziałek) w godz. 17:00-20:00, sala 119 w bud. 21. Do wykonania będzie jeden program obejmujący swym zakresem materiał z całego semestru.
  2. Egzamin z ZTP, drugi termin: 28 lutego (wtorek) w godz. 13:00-15:00, sala 424 w bud. 23. Formuła egzaminu taka sama jak w pierwszym terminie:
    • Egzamin jest pisemny. Proszę zabrać ze sobą kartki papieru i długopisy oraz legitymacje studenckie. Osoby spóźnione nie zostaną wpuszczone na salę.
    • Szczegółowe zasady udziału są opisane na stronie www: Zasady zaliczenia wykładu, ale nie ma części praktycznej, to znaczy, nie będzie kartki z kodem programu, dla którego należy podać komunikaty wypisywane w oknie konsoli.

ZTP2022: Wyniki z egzaminu w terminie pierwszym

Lista ocen osób, które uczestniczyły w egzaminie w pierwszym terminie. Wiersze zawierają: trzy ostatnie cyfry nr indeksu, liczbę zdobytych punktów i proponowaną ocenę.

  1. ***050   4   2
  2. ***140   12 + ε   3
  3. ***172   7.5   2
  4. ***246   18   4
  5. ***261   6.5   2
  6. ***271   13   3
  7. ***274   10.5   2
  8. ***293   19   4
  9. ***560   10.5   2
  10. ***563   12 + ε   3
  11. ***621   12 + ε   3
  12. ***867   0   2

W razie niejasności, proszę o kontakt mailowy.

ZTP2022: Wyniki z egzaminu zerowego

Lista osób, które otrzymały ocenę pozytywną z zajęć lab. ale nie zostały zwolnione z egzaminu i osiągnęły co najmniej 50% pkt. na egzaminie zerowym. Wiersze zawierają: trzy ostatnie cyfry nr indeksu, liczbę zdobytych punktów i proponowaną ocenę.

  1. ***160   15   3.5
  2. ***170   12.5   3
  3. ***230   17   4
  4. ***232   17   4
  5. ***241   18.5   4
  6. ***263   20   4.5
  7. ***269   18   4
  8. ***273   16.5   3.5
  9. ***295   21   4.5
  10. ***306   23.5   5
  11. ***384   20   4.5
  12. ***490   21.5   5
  13. ***817   18.5   4
  14. ***896   23.5   5

Lista osób, które otrzymały ocenę pozytywną z zajęć lab. i uczestniczyły w egzaminie zerowym, ale liczba zdobytych na egzaminie punktów nie przekroczyła progowej wartości 50% możliwych do zdobycia. Wiersze zawierają trzy ostatnie cyfry nr indeksu.

  1. ***050
  2. ***140
  3. ***271
  4. ***274
  5. ***293
  6. ***621

W razie niejasności, proszę o kontakt mailowy.