Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Powtórka z C ====== ===== Najważniejsze sprawy ===== * typy * wskaźniki, wskaźniki do funkcji * dynamiczny przydział pamięci * struktury * pliki nagłówkowe i źródłowe * różnice między C a C%%++%% ===== Przykładowe zadania ===== ==== Wektor ==== Plik nagłówkowy **wektor.h** <code C> struct wektor { int rozmiar; double *wartosc; }; struct wektor *alokuj(struct wektor * w, int n); void zwolnij(struct wektor *w) struct wektor *kopiuj(struct wektor *w1, struct wektor *w2); double dlugosc(struct wektor *w); double iloczyn(struct wektor *w1, struct wektor *w2); struct wektor *unormuj(struct wektor *w1); </code> Zdefiniuj odpowiednie funkcje w pliku źródłowym ''wektor.c'' i napisz program demonstrujący ich działanie. ==== Słownik ==== Napisz program generujący słownik w oparciu o drzewo binarne. Dla podanego pliku (lub po wczytaniu tekstu ze strumienia wejściowego) program wyświetla posortowaną alfabetycznie listę występujących w tekście wyrazów oraz liczbę wytapiań danego wyrazu w tekście. Plik nagłówkowy **slownik.h**: <code C> struct drzewo { char *slowo; int ilosc; struct drzewo *left, *right; }; struct drzewo* dodaj(struct drzewo *d,char *slowo); void wyswietl(struct drzewo *d); </code> Funkcja **dodaj(struct drzewo *d,char *slowo)** dodaje nowe słowo do słownika (drzewa). Wartością zwracaną jest wskaźnik do bieżącego węzła w drzewie. Słowo umieszczane jest w drzewie zależnie od kolejności słownikowej (alfabetycznej). \\ Funkcja **wyswietl(struct drzewo *d)** wypisuje zawartość słownika, czyli posortowaną listę słów wraz z liczbą wystąpień danego słowa w pliku. \\ * Dopisz definicje funkcji **dodaj** i **wyswietl** w pliku źródłowym **slownik.c** * Program niech pobiera plik wejściowy jako argument wywołania aplikacji, jeżeli argumentu brakuje wówczas czytany jest tekst ze standardowego wejścia slownik.exe plik_tekstowy * Duże i małe znaki są nierozróżnialne - słownik wypisuje wyłącznie słowa pisane małymi literami * Pojedyncze słowo to dowolny ciąg znaków alfabetycznych (wyłącznie litery ''[a-zA-Z]''). Wszystkie pozostałe znaki są separatorami wyrazów. Dla ułatwienia można zaimplementować funkcję **getword**, która pobiera kolejne słowo se strumienia (wejściowego, z pliku). Funkcja wczytuje do tablicy pierwsze napotkane w strumieniu słowo (po pominięciu wszystkich początkowych znaków które nie są literami) i zwraca wartość sygnalizującą czy słowo zostało wczytane (np. może zwracać długość słowa gdzie wartość 0 zwracana jest w przypadku dotarcia do końca strumienia w którym nie wystąpiło już żadne słowo). <WRAP center round tip 60%> Jakiej ważnej funkcji brakuje w pliku **slownik.h** ? \\ Zaimplementuj ją. </WRAP> Przydatne funkcje: * **string.h** : **[[http://pl.wikibooks.org/wiki/C/strcpy|strcpy]]**, **[[http://pl.wikibooks.org/wiki/C/strcmp|strcmp]]**, **[[http://pl.wikibooks.org/wiki/C/strlen|strlen]]** * **ctype.h** : **[[http://pl.wikibooks.org/wiki/C/isalpha|isalpha]]**, **[[http://pl.wikibooks.org/wiki/C/tolower|tolower]]** ===== Różnice miedzy C i C++ ===== * Zamień rozszerzenia nazw plików *.c -> *cpp * Zamień wywołania funkcji ''malloc()'' i ''free()'' na wywołania operatora ''new'' i ''delete'' * Spróbuj użyć strumieni ''[[http://www.cplusplus.com/reference/iostream/|<iostream>]]'' do wczytywania i wyświetlania słów z terminala lub pliku * Spróbuj wykorzystać obiekty typu ''[[http://www.cplusplus.com/reference/string/string/|<string>]]'' zamiast tablic ''char*'' do zapamiętywania słów słownika * Użyj referencji zamiast wskaźników tam gdzie uznasz to za stosowane * Jeżeli wykorzystujesz nadal którąkolwiek funkcję z biblioteki standardowej C zastąp ją odpowiednikiem ze [[http://www.cplusplus.com/reference/|standardowej biblioteki C++]] * [[wp>C_standard_library|C standard library]] * [[wp>C%2B%2B_Standard_Library|C++ Standard_Library]] * Struktura w C++ jest klasą, usuń zbędne słowo kluczowe ''struct'' przy deklaracjach zmiennych typu ''drzewo'' * Utwórz klasę "slownik", korzeń drzewa uczyń polem prywatnym zaś funkcje ''dodaj()'' i ''wyswietl()'' przepisz jako metody publiczne tej klasy (Zobacz zadanie [[csharp_dziedziczenie#Słownik|Słownik obiektowo]])