ZADANIA Z PODSTAW PROGRAMOWANIA ZALICZENIE WARUNKOWE, SEMESTR ZIMOWY 16/17

Podobne dokumenty
utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Zaprojektować i zaimplementować algorytm realizujący następujące zadanie.

Podstawy Programowania C++

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

1 Powtórzenie wiadomości

Struktury, unie, formatowanie, wskaźniki

Podstawy programowania skrót z wykładów:

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Laboratorium 10: Maszyna stanów

po ostatnim dopisaniu na standardowe wyjście (cout) powinien zostać wyprowadzony komunikat "Skonczylem";

1 Podstawy c++ w pigułce.

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Tablice (jedno i wielowymiarowe), łańcuchy znaków

INFORMATYKA Studia Niestacjonarne Elektrotechnika

1 Podstawy c++ w pigułce.

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Podstawy Programowania

Podstawy i języki programowania

Podstawy i języki programowania

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Część 4 życie programu

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Pliki wykład 2. Dorota Pylak

1. Wprowadzanie danych z klawiatury funkcja scanf

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Egzamin z Podstaw informatyki i programowania 2007/2008

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

2 Przygotował: mgr inż. Maciej Lasota

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Lekcja 6: Pascal. Procedura i funkcja

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Microsoft IT Academy kurs programowania

1. Kalkulator czterech działań. 2. Konwersja ciągu znaków do tablicy.

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

lekcja 8a Gry komputerowe MasterMind

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Inicjacja tablicy jednowymiarowej

Wstęp do programowania. Wykład 1

Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie Olimpiada O Diamentowy Indeks AGH 2017/18. Informatyka Etap III

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Wykład 3 Składnia języka C# (cz. 2)

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Szablony funkcji i szablony klas

Aplikacje w środowisku Java

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Zasady programowania Dokumentacja

JĘZYK SHELL JEST PEŁNYM JĘZYKIEM PROGRAMOWANIA

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Pole wielokąta. Wejście. Wyjście. Przykład

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Metody numeryczne Laboratorium 2

Lab 9 Podstawy Programowania

Zajęcia 6 wskaźniki i tablice dynamiczne

MATERIAŁY DO ZAJĘĆ II

Laboratorium nr 1. i 2.

Programowanie komputerowe. Zajęcia 4

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Zajęcia 6 pliki tekstowe

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

Podstawowe typy zmiennych

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Projekty zaliczeniowe Podstawy Programowania 2012/2013

Kier. MTR Programowanie w MATLABie Laboratorium

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Programowanie komputerowe. Zajęcia 1

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Podstawy Programowania

Podstawy Programowania Obiektowego

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Rozpoczynamy import Kreator uruchamiamy przyciskiem Z tekstu, znajdującym się na karcie Dane, w grupie Dane zewnętrzne.

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Tablice. Jones Stygar na tropie zmiennych

Napisz program wypisujący na standardowym wyjściu następujący napis: Napis zawierający różne dziwne znaczki // \ \$ &%.

Programowanie w Logice

Transkrypt:

ZADANIA Z PODSTAW PROGRAMOWANIA ZALICZENIE WARUNKOWE, SEMESTR ZIMOWY 16/17 Warunkiem podejścia do kolokwium poprawkowego w styczniu 2017 r. (termin zostanie podany później) jest samodzielne rozwiązanie zadania 1, 2 i zaprezentowanie ich na konsultacjach, najpóźniej do 15 grudnia 2016 r. Co najmniej 24 h przed prezentacją należy przesłać zadania na e- maila. Zastrzegam sobie prawo do rozmowy na temat rozwiązań w celu zweryfikowania samodzielności rozwiązanych zadań. Rozwiązanie zadań nie gwarantuje zaliczenia należy potem zdać kolokwium poprawkowe, o którym wspomniano na początku. Tylko rozwiązanie zadań 1 i 2 dopuszcza do kolokwium. Samodzielne rozwiązania zadań: 1, 2 i 3 (ze wszystkimi podpunktami, zweryfikowane podczas rozmowy z prowadzącym) skutkuje zaliczeniem ćwiczeń laboratoryjnych bez potrzeby pisania kolokwium poprawkowego, po wcześniejszej prezentacji na konsultacjach i rozmowie na temat rozwiązań. Co najmniej 24 h przed prezentacją należy przesłać zadania na e-maila. Jakiekolwiek braki w rozumieniu własnych kodów źródłowych mogą skutkować natychmiastowym niezaliczeniem przedmiotu. Tyczy się to zwłaszcza przedstawienia rozwiązania punktu 3. Prowadzący zastrzega sobie prawo do korekty treści zadań (data aktualizacji znajduje się na końcu pliku). Egzamin dla osób, które zaliczą ćwiczenia laboratoryjne prawdopodobnie 13 stycznia, zostanie to doprecyzowane później. 1. Zaprojektować i zaimplementować funkcję el_powyzej_sredniej, która przyjmuje trzy argumenty: wskaźnik na tablicę liczb rzeczywistych zr; liczbę całkowitą nieujemną n; wskaźnik na wskaźnik na tablicę liczb rzeczywistych doc. Zmiana wskaźnika, wskazującego na utworzoną dynamicznie wewnątrz funkcji tablicę doc musi być widoczna po wywołaniu tej funkcji (dlatego użyto wskaźnika na wskaźnik zamiast referencji nie wolno zmieniać typu tego argumentu). wskaźnik na liczbę całkowitą nieujemną roz. Funkcja nic nie zwraca. Zadaniem funkcji jest utworzyć tablicę doc, w której zostaną zawarte te elementy z tablicy zr, których wartość jest większa do średniej arytmetycznej wartości z tablicy doc. Wskaźnik roz ma wskazywać na rozmiar tablicy doc. Porządek elementów w tablicy doc nie musi być taki sam, jak w tablicy zr. Przykładowo, jeżeli tablica zr ma następujące elementy: {1,3,4,5,7}, to utworzona wewnątrz funkcji tablica doc będzie zawierać elementy: {5,7}. Średnia elementów tablicy zr jest równa 4, więc w tablicy doc znajdą się tylko wartości 5 i 7. 2. Zaprojektować i zaimplementować funkcję podziel_napis, która przyjmuje trzy argumenty: napis jako wskaźnik na tablicę znakową (char*) zrodlowy; znak typu char (lub int, long itp.) znak; referencję na podwójny wskaźnik na zmienną typu char (logicznie będzie to tablica napisów typu char*) napisy

i zwraca wartość całkowitą nieujemną. Funkcja ma podzielić napis zrodlowy na spójne podciągi znaków, gdzie separatorem jest znak znak. Wynik ma być zachowany w dynamicznej tablicy napisów napisy (która musi zostać utworzona wewnątrz funkcji). Wynikowe napisy muszą być typu char* - stąd potrzeba obsługi podwójnego wskaźnika na char. Przykładowo, jeżeli zrodlowy = "Ala ma kota", znak = ' ' (spacja), to po wywołaniu funkcji tablica napisy przechowuje następujące ciągi znaków: napisy[0] = "Ala" napisy[1] = "ma" napisy[2] = "kota" a funkcja zwraca wartość 3 (bo źródłowy napis został podzielony na 3 podciągi znaków). Jeżeli zrodlowy nie zawiera danego znaku, to tablica napisy powinna pozostać pusta, a funkcja zwraca wartość 0. Jeżeli znak znajduje się na początku/końcu napisu źródłowego (zrodlowy = "Ala " ), to zachowanie funkcji jest dowolne (można pominąć, można podzielić na podciągi, w których jeden będzie pusty itp.). Dozwolone jest korzystanie z typu string podczas operacji na ciągach znaków, ale funkcja musi zwracać wskaźnik na wskaźnik na ciągi znaków (typ char**).

3. a) Zaimplementować dwie struktury: struct SOdjazd { char godzina; char minuta; bool czy_roboczy; bool czy_soboty; bool czy_swieta; char oznaczenie; }; struct SRozklad { unsigned ile_odjazdow; SOdjazd* odjazdy; unsigned ile_oznaczen; string** legenda; }; legenda jest dwuwymiarową tablicą napisów (z dwiema kolumnami). b) W pliku wejściowym mamy następujące dane: ile_odjazdow GG:MM [F][6][7][A-E G-Z] GG:MM [F][6][7][A-E G-Z]... itd. ile_odjazdow razy ile_oznaczen... itd. ile_oznaczen razy Wyjaśnienie: plik zawiera N razy podaną godzinę, po której musi znajdować się co najmniej jeden znak: F oraz/lub 6 oraz/lub 7 oraz/lub dowolna liczba dużych liter prócz F. Znak F oznacza, że dany odjazd odbywa się w dni robocze, 6 - w soboty, 7 - w niedziele i święta. Po oznaczeniu dni odjazdów może znajdować się opcjonalny znak z zakresu od A do Z (prócz F), oznaczający jakiś wariant kursu (przez jakąś miejscowość, pojazd niskopodłogowy, autobus jedzie tyłem itp.), podobnie jak jest to oznaczane np. na tabliczkach odjazdowych w komunikacji obsługiwanej przez PKSy. Godzina jest podawana w formacie GG:MM (jeżeli godzina lub minuta składa się z jednej cyfry, to musi być poprzedzona zerem). Następnie podawana jest liczba oznaczeń/wariantów (możliwa liczba dodatkowych literek po oznaczeniu dni odjazdów) M. Każda z kolejnych linijek zawiera dwa napisy - pojedynczą literkę i opis (dla ułatwienia - bez białych znaków), które tworzą legendę, czyli opis wariantów. Przykładowo, plik wejściowy może wyglądać następująco: 12 07:00 F67A 08:00 F6 10:00 FA 17:00 FA 19:00 F67A 21:00 F

06:00 F67A 06:30 F6A 12:00 F 14:00 F67A 14:30 FA 15:00 F 1 A jedzie_przez_abecadlowo Należy zaimplementować wczytywanie takiego rozkładu do obiektu struktury SRozklad, z jednoczesnym utworzeniem dynamicznej tablicy SOdjazd (każdy obiekt reprezentuje pojedynczy odjazd) i posortowaniem odjazdów według godzin odjazdów (tak, aby na początku tablicy znajdowały się najwcześniejsze godziny odjazdów). Aby ułatwić implementację i porównywanie dni odjazdów (potrzebne w następnym podpunkcie), każdy obiekt typu SOdjazd zawiera trzy pola logiczne - czy_roboczy, czy_soboty i czy_swieta, które należy odpowiednio uzupełniać przy wczytywaniu. Pole oznaczenie oznacza pozostałą literkę, z ewentualnym wariantem kursu. Pole legenda w obiekcie SRozklad jest dwuwymiarową tablicą, z dwiema kolumnami. W każdym wierszu pierwsze pole to pojedyncza literka (w przykładzie: A), a drugie jest opisem (w przykładzie: jedzie_przez_abecadlowo). Konstrukcja wczytywania jest dowolna, ale musi działać dla dowolnego strumienia wejściowego (tj. pliku lub standardowego wejścia). c) Należy zaimplementować funkcję, która dla danego obiektu SRozklad wyświetli godziny odjazdów, podane w sposób tabelaryczny (jak np. jest to podawane w komunikacji miejskiej we Wrocławiu, Krakowie czy na stronie Miejskiego Zarządu Dróg i Transportu w Częstochowie). Tj. należy wypisać tabelę, która będzie zawierać: godziny (bez minut, od najwcześniejszej do najpóźniejszej w danym SRozkladzie) i poszczególne odjazdy minutowe dla rozkładów w dni robocze, soboty i święta, z ewentualną literką oznaczającą wariant. Pod tabelą należy wypisać legendę, tj. możliwe literki (oznaczające warianty) i ich opis. Przykładowo, dla rozkładu z punktu (b) należy wyświetlić/wygenerować następujący plik: GODZ ROBOCZE SOBOTA NIED -----++---------- ---------- ------ 6 00A 30A 00A 30A 00A 7 00A 00A 00A 8 00 00 9 10 00A 11 12 00 13 14 00 30A 00 00 15 00 16 17 00A 18 19 00A 00A 00A 20 21 00

LEGENDA: A jedzie_przez_abecadlowo Należy zapewnić czytelność rozkładu: - proste kolumny (ich szerokość jest dowolna - nie musi być zależna od tego ile maksymalnie może być odjazdów w danym typie, ale muszą się zmieścić wszystkie wyszczególnione odjazdy); - odstępy pomiędzy minutami (ale nie jest wymagane by odjazdy były ułożone w kolumnach); - minusy, kreski pionowe i plusy powinny tworzyć krawędzie tabeli; - nagłówki tabeli (mogą być skracane, jeżeli w danym dniu odjazdów jest mało - tak jak powyżej na przykładzie niedziel i świąt); - można (ale nie trzeba) założyć, że istnieje co najmniej jeden odjazd w dniu roboczym, sobotnim i świątecznym. Konstrukcja wyświetlania jest dowolna, ale musi działać dla dowolnego strumienia wyjściowego (tj. pliku lub standardowego wyjścia). d) należy przetestować program, używając w funkcji main zaimplementowanych przez siebie funkcji. Należy także zapewnić dealokację dynamicznie przydzielonej pamięci i podstawową diagnostykę strumieni. Nie jest wymagane sprawdzanie poprawności wprowadzonych danych (czy godziny podawane są w odpowiednim formacie itp.) Aby zadanie zostało zaliczone, należy zrealizować wszystkie podpunkty. Dopuszczalna jest zmiana formatu pliku wejściowego czy zmiana układu tabeli (np. na poziomy - jak na przystankach w Częstochowie), ale wszystkie informacje muszą być zachowane. Obowiązuje dowolność w konstrukcji programu poza wymogiem użycia struktur. Można zmieniać pola danych struktur (np. użycie tablicy wartości logicznych zamiast pól czy_roboczy itp.), ale dane obiekty powinny przechowywać te same informacje, co przedstawione struktury. Dopuszczam użycie zewnętrznych modułów, bibliotek itp. pod warunkiem podstawowej znajomości ich użytkowania. Dopuszczam również użycie elementów biblioteki STL i programowania obiektowego, pod warunkiem podstawowej znajomości tych technologii. pj Aktualizacja: 13.10.2016