Podstawy Programowania
Materiały - PS:
wyniki kolokwium z Podstaw Programowania (wraz z
poprawą) > > >
ostatni termin poprawy z Podstaw
Programowania: poniedziałek (15.02), godzina 14, Aula C wyniki > > >
Projekt (za projekt
możcna uzyskać 10 punktów)
Wszystkie programy powinny wykorzystywać listy jedno lub dwu
kierunkowe. W przypadku, gdy program korzysta z informacji zapisanych w
plikach (tekstowych lub binarnych) nazwę pliku należy podac na początku
działania programu lub przekazac w parametrach uruchomienia.
Dokumentacja
Do projektu powinna być dołączona dokumentacja, na którą
składają się
1. Dane autora (imie, nazwisko, grupa, rok,data )
2. Opis problemu/zadania
3. Opis podstawowych algorytmów.
4. Opis implementacji zaprojektowanego systemu
(moduły,
pliki, typy, funkcje itd.)
5. Instrukcja uzytkownika (wymagania (szczegolnie
jezeli uzywane byl niestandardowe biblioteki), opcje, przykladowe
uruchomienie i skorzystanie z programu).
Format dokumentacji
* Format A4.
* Marginesy: 1.0 - 2.0 cm.
* Czcionka 11 p, pojedyncze
odstepy.
Materiały - Wykład:
Materiały - Ćwiczenia:
Zajęcia 2. Instrukcje
iteracyjne. Tworzenie schematów blokowych z wykorzystaniem pętli.
Do każdego z poniższych zadań należy sporządzić schemat blokowy.
- Zadanie 2.1
Wprowadzić n liczb typu rzeczywistego, obliczyć dla każdej z nich
kwadrat i sześcian oraz wyprowadzić numer liczby, samą liczbę, oraz jej
kwadrat i sześcian. Program ma zapraszać użytkownika komentarzem do
podania kolejnej liczby i wyprowadzać dane oraz wyniki związane z jedna
liczbą w jednym wierszu.
- Zadanie 2.2
Wprowadzić ciąg znaków zakończony znakiem '*', policzyć i wyprowadzić
liczbę znaków w ciągu.
- Zadanie 2.3
Podczas wprowadzania ciągu n liczb wyszukać liczbę o maksymalnej
wartości i podać jej numer w ciągu.
- Zadanie 2.4
Dla podanego n oblicz następują wartość:
1/2+2/3+3/4+...+n/(n+1)
- Zadanie 2.5
Napisz program, który pyta się o pewną stałą liczbę tak długo, aż
zostanie odgadnięta. Po każdej nieudanej próbie informuje, czy szukana
liczba jest większa, czy mniejsza od podanej.
- Zadanie 2.6
Napisz program wyznaczający iteracyjnie (numerycznie) sumę szeregu:
1/x + 1/x2 + 1/x3 + 1/x4
+ ... + 1/xn
- Zadanie 2.7
Napisać program obliczający silnię.
- Zadanie 2.8
Napisać program wyznaczający sumę liczb podawanych z klawiatury tak
długo, aż użytkownik nie wprowadzi liczby zero.
Zajęcia 3. Dynamiczna alokacja pamięci. Tablice
jednowymiarowe.
Do każdego z poniższych zadań należy sporządzić schemat blokowy.
- Zadanie 3.1
Napisz program, który wczyta dane z klawiatury do 10-cio elementowej
tablicy liczb double, a następnie sprawdzi:
- czy te liczby są uporządkowane rosnąco lub malejąco,
- czy elementy tablicy mają symetryczną zawartość (tzn.
pierwszy
element równy ostatniemu, drugi równy przedostatniemu, itd.)
- czy w tablicy występuje chociaż jedno powtórzenie
wartości.
- Zadanie 3.2
Napisz program, który przesunie zawartość N-elementowej tablicy
(rozmiar tablicy podawany jest przez użytkownika) cyklicznie o jedną
pozycję „w górę”. (tzn. pierwszy element na miejsce drugiego, drugi na
trzeci, ..., ostatni na pierwszy).
- Zadanie 3.3
Napisać program wyznaczający iloczyn skalarny dwóch wektorów
N-elementowych o wartościach rzeczywistych. Rozmiar wektorów
podawany jest przez użytkownika.
- Zadanie 3.4
Napisać program, który na podstawie tablicy liczb całkowitych tabA
(rozmiar i wartości podawane są przez użytkowika) stworzy tablicę tabB
wg następującego wzoru: tabB[i] = tabA[0]-tabA[1]+tabA[2]-...tabA[i].
- Zadanie 3.5
Napisać program, który wczytuje ze standardowego wejścia napis do
tablicy i sprawdza, czy jest on palindromem. Wczytany napis ma mieć
maksymalnie 40 znaków.
- Zadanie 3.6
Napisać program, który wczytuje od użytkownika łańcuch znaków a
następnie pojedynczy znak i podaje indeks ostatniego wystąpienia tego
znaku w zadanym łańcuchu. Indeksy mają być liczone od jedynki. Wczytany
napis ma mieć maksymalnie 20 znaków.
Przykład:
znak: 'o',
łańcuch: ”Ola ma kota”
wynik: 9
- Zadanie 3.7
Napisać program, który wylosuje do tablicy N liczb z przedziału 1...M
(N i M podawane są przez użytkownika) i wypisze na ekran wylosowane
elementy oraz policzy liczność każdego z nich.
Przykład:
N=10, M=5,
tablica: 1 4 2 4 5 3 1 2 2 1
wynik: 1–3 razy; 2-3 razy; 3-1 raz; 4-2 razy; 5-1 raz
Zajęcia 4. Funkcje. Przekazywanie parametrów. Tablice
dwuwymiarowe
- Zadanie 4.1
Napisz funkcję polacz(), która przyjmuje dwa argumenty i przekazuje na
zewnątrz napis będący ich połączeniem.
- Zadanie 4.2
Napisz funkcję odwroc(), która będzie odwracała kolejność znaków w
przekazanym jej napisie. Po wykonaniu odwroc(p), ostatni znak p będzie
pierwszym, przedostatni – drugim, itd.
- Zadanie 4.3
Napisać funkcję znajdującą i wypisującą na ekran wszystkie pary liczb
bliźniaczych z danego przedziału liczb naturalnych, podanego jako
parametr funkcji. Parą liczb bliźniaczych nazywamy parę kolejnych liczb
nieparzystych pierwszych, np. 3 i 5.
- Zadanie 4.4
Napisać funkcję, która w tablicy dwuwymiarowej NxM o wartościach typu
float wyznaczy dla ilu pierwszych elementów ich suma jest większa od
100.
- Zadanie 4.5
Napisać funkcję zwracającą sumę tych elementów leżących na przekątnej
tablicy liczb całkowitych o rozmiarze NxN, które są liczbami
nieparzystymi.
- Zadanie 4.6
Napisać funkcję obracającą tablicę kwadratową o wymiarze N wokół
przekątnej, tzn. zamiana elementów tab[i][j] z elementami tab[j][i]
(dla i różnego od j).
- Zadanie 4.7
Napisać funkcję, która dla dwuwymiarowej tablicy przekazanej jako
parametr zwróci numer wiersza o maksymalnej sumie elementów. Jeśli jest
kilka wierszy o takiej samej sume elementów, to funkcja ma zwrócić
numer ostatniego z nich.
Przykład: dla
tablicy o 4 wierszach i 3 kolumnach:
1 5 1
2 3 3
2 2 2
4 3 3
będzie to indeks
3.
Zajęcia 5. Funkcje rekurencyjne.
- Zadanie 5.1
Napisać funkcję rekurencyjną wypisującą dwójkowe rozwinięcie dodatniej
liczby całkowitej danej jako parametr.
- Zadanie 5.2
Napisać funkcję rekurencyjną odwracającą napis.
- Zadanie 5.3
Korzystając z algorytmu Euklidesa napisać funkcję rekurencyjną
obliczającą największy wspólny dzielnik dwóch liczb całkowitych n i m.
- Zadanie 5.4
Napisać funkcje rekurencyjną, która sumuje liczby od 1 do n, gdzie n
jest dodatnia liczba calkowita przekazywana do funkcji.
- Zadanie 5.5
Zaimplementować funkcję rekurencyjną obliczającą n−ty element ciągu
zadanego wzorem rekurencyjnym:
p(0) = 0
p(1) = 1
p (k) = p (k − 1) + p (k − 2) + k; dla k >= 2.
Zajęcia 6. Typ strukturalny. Operacje na plikach
elementowych.
- Zadanie 6.1
Napisać funkcję czytającą plik elementowy zawierający koła opisane za
pomocą struktury:
struct kolo
{
double promien, x, y;
};
i zliczającą ile jest kół leżących w całości w drugiej ćwiartce układu
współrzędnych.
- Zadanie 6.2
Korzystając z pliku z zadania 6.1 napisać funkcję tworzącą plik
elementowy zawierający te koła, których pole jest niemniejsze niż
zadany parametr.
- Zadanie 6.3
Dany jest plik elementowy zawierający dane o studentach w postaci:
struct student
{
char nazwisko[20], imie[10];
double srednia;
};
Napisać funkcję, która dla każdego studenta wyliczy wartość stypendium
wg algorytmu:
- średnia>4.0–stypendium w wysokości 200zł,
- średnia od 4.2 do 4.4-stypednium w wysokości 250 zł,
- średnia od 4.4 do
4.6-stypednium w wysokości 300 zł, itd.
Do pliku wyjściowego zapisze tych studentów, którzy otrzymają
stypendium.
Zajęcia 7. Pliki tekstowe
- Zadanie 7.1
Napisz fukcję zliczającą ilości wystąpień każdego ze znaków w
dokumencie tekstowym o kodach 32-126. Nazwa pliku powinna być
przekazana jako parametr funkcji.
- Zadanie 7.2
Na podstawie pliku tekstowego liczb całkowitych stworzyć dwa pliki:
jeden z elementami parzystymi i drugi z elementami nieparzystymi. Nazwy
wszystkich plików powinny być przekazane w parametrach funkcji.
- Zadanie 7.3
Dane są dwa pliki tekstowe zawierające macierze liczb rzeczywistych. W
pierwszym wierszu każdego pliku znajduje się informacja o ilości
wierszy i kolumn macierzy, a następnie w wierszach umieszczone są
kolejne wartości. Napisać funkcję mnożącą te dwie macierze i zapisującą
wynik do pliku wyjściowego w takiej samej postaci jak czynniki
iloczynu. W przypadku, gdy operacji nie da się wykonać w pliku
wyjściowym powinna znaleźć się tylko wartość 0. Nazwy wszystkich plików
powinny być przekazane w parametrach funkcji.
- Zadanie 7.4
Napisać fukcję zamieniającą wszystkie małe litery na wielkie w pliku
tekstowym (nazwa pliku przekazana jako paramter funkcji) wybranym przez
użytkownika. Funkcja ma zwrócić liczbę dokonanych zamian.
- Zadanie 7.5
W pliku tekstowym znajdują się informacje o rachunku z restauracji.
Treść składa się zawsze z 3 wierszy. Każdy wiersz zawiera nazwę towaru,
dwukropek, cenę w złotych. Nazwa towaru może się składać z dowolnej
liczby słów oddzielonych odstępami, a słowa wyłącznie z liter. Napisz
funkcję void
suma(char *rachunek)
obliczający całkowitą należność do zapłaty. Przykładowy plik może
wyglądać następująco:
kanapka: 2.50
szarlotka: 1.50
woda mineralna: 1.50
- Zadanie 7.6
Plik tekstowy zawiera pewną ilość linii. Napisać funkcję, która do
drugiego pliku tekstowego zapisze długości poszczególnych linii, w
takiej kolejności w jakiej wystepuja one w pliku wejściowym. Nazwa
plików przekazać jako parametr funkcji.
Zajęcia 9-11. Typ wskaźnikowy. Wskaźniki do funkcji.
Dynamiczne
struktury danych. Listy jednokierunkowe.
- We wszystkich poniższych zadaniach Wskaźnik na pierwszy
element
listy przekazujemy jako parametr funkcji.
Zdefiniowane są struktury i typy:
struct lista
{
int liczba;
struct
lista *nast;
};
typedef struct
lista ELEMENT;
typedef ELEMENT
*LISTA;
- Zadanie 9.1
Napisać funkcję zwracającą wartość elementu minimalnego na liście.
- Zadanie 9.2
Napisać funkcję, która zwraca ilość liczb parzystych na liście
- Zadanie 9.3
Napisać funkcję dodającą liczbę na koniec listy (liczbę przekazujemy
jako parametr).
- Zadanie 9.4
Napisać funkcję usuwająca pierwszy element listy.
- Zadanie 9.5
Napisać funkcję usuwającą ostatni element listy.
- Zadanie 9.6
Napisać funkcję dodającą element do listy tak aby lista była
uporządkowana malejąco. (Zakładamy, że przed dodaniem elementu lista
jest uporządkowana)
- Zadanie 9.7
Napisać funkcję sortującą listę algorytmem sortowania przez wybór lub
przez wstawianie.
- Zadanie 9.8
Zdefiniowane są struktury i typy
struct student
{
char
imie[15];
char
nazwisko[20];
float ps,
cw, ep, e;
};
struct lista
{
struct
student s;
struct
lista *nast;
};
typedef struct
lista ELEMENT;
typedef ELEMENT
*LISTA;
Pola ps, cw, ep, e w strukturze student oznaczają liczbę punktów
uzyskanych przez studenta odpowiednio na pracowni specjalistycznej
ćwiczeniach, egzaminie połówkowym i egzaminie końcowym.
Napisać funkcję która do pliku tekstowego "e.txt" zapisze imiona i
nazwiska studentów którzy zaliczyli egzamin, do pliku "ps.txt" zapisze
studentów którzy zaliczyli pracownie specjalistyczna, a do pliku
"cw.txt", tych którzy zaliczyli ćwiczenia. (Każdy student w oddzielnej
linii)
Student zaliczył pracownie jeśli uzyskał co najmniej 16 punktów,
ćwiczenia jeśli z ćwiczeń uzyskał co najmniej 8 punktów, a egzamin
jeśli w sumie ze wszystkich form uzyskał co najmniej 50 punktów.
- Zadanie 9.9
Korzystając z danych z zadania 8 napisać funkcję która utworzy 2 listy.
Na pierwszej liście maja znaleźć sie studenci, którzy zaliczyli
wszystkie formy (ps, cw i egzamin końcowy), na drugiej pozostali
studenci.
Zajęcia 13. Dynamiczne struktury danych. Listy dwukierunkowe.
Plik tekstowy zawiera dane opisujące kolekcję książek i ma następujący
format: w pierwszej linii znajduje się imię i nazwisko autora, w
kolejnej tytuł książki, następnie imię i nazwisko kolejnego autora,
potem kolejny tytuł itd. Napisz następujące funkcje:
- Funkcja wczytująca dane z pliku o podanej nazwie na listę
dwukierunkową.
- Funkcja licząca ile unikalnych tytułów znajduje się w naszym
księgozbiorze (kilku autorów mogło wykorzystać ten sam tytuł).
- Funkcja znajdująca imię i nazwisko osoby będącej autorem
największej liczby książek.
- Funkcja usuwająca wszystkie książki o tytule zawierającym podany
ciąg znaków.
- Funkcja zwalniająca pamieć (usuwająca całą listę).
Powrót