Powtórka z C

Writing /home/grochu/public_html/wiki/data/meta/zajecia/po_2012_1/zajecia1.meta failed
Unable to save metadata file. Hint: disk full; file permissions; safe_mode setting.

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 ''[[http://www.cplusplus.com/reference/iostream/

  * [[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]])