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

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

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:

struct drzewo { char *slowo; int ilosc; struct drzewo *left, *right; }; struct drzewo* dodaj(struct drzewo *d,char *slowo); void wyswietl(struct drzewo *d);

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

Jakiej ważnej funkcji brakuje w pliku slownik.h ? Zaimplementuj ją.
Przydatne funkcje:

string.h : strcpy, strcmp, strlen

ctype.h : isalpha, 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 <iostream> do wczytywania i wyświetlania słów z terminala lub pliku

Spróbuj wykorzystać obiekty typu <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 standardowej biblioteki C++

C 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 Słownik obiektowo)