Zadanie domowe 1

Zadanie domowe

Tresc zadania

Prosze napisac funkcje:
  char* translate( const char* txt, char* original, char** subst );
ktora przeglada tekst zrodlowy (txt) i dla kazdego znaku z tekstu zrodlowego, ktory wystepuje na pozycji i w napisie original (mozna zalozyc, ze original nigdy nie zawiera powtorzen znakow) wpisuje do napisu wynikowego napis subst[i]. Jesli dany znak z txt nie wystepuje w original to nalezy go skopiowac bez zmian to napisu wynikowego. (Prosze zwrocic uwage, ze subst powinno byc interpretowane jako tablica napisow.) Scisle, argumenty naszej procedury sa nastepujace: Funkcja nie powinna modifikowac napisu txt ale raczej powinna zaalokowac pamiec na napis wynikowy i zwrocic do niego wskaznik.

Przyklad wywolania:

  char* wynik = 0;
  char* podmiana[10];
  podmiana[0] = "zero ";
  podmiana[1] = "jeden ";
  podmiana[2] = "dwa ";
  podmiana[3] = "trzy ";
  podmiana[4] = "cztery ";
  podmiana[5] = "piec ";
  podmiana[6] = "szesc ";
  podmiana[7] = "siedem ";
  podmiana[8] = "osiem ";
  podmiana[9] = "dziewiec ";

  wynik = translate("Numer: 123", "0123456789", podmiana);
  printf("%s\n", wynik);
Po wykonaniu tego fragmentu kodu, na ekreanie program powinien wypisac:
  Numer: jeden dwa trzy 
Panstwa program powinien poprawnie dzialac przynajmniej dla podanego przykladu (minimum na ocene pozytywna).

Oprocz funkcji translate, panstwa program powinien takze zawierac funkcje main demonstrujaca dzialanie programu (w wybrany przez Panstwa sposob).

Laboratorium 1

Informacje podstawowe:

Cel laboratorium 1

Celem dzisiejszego laboratorium jest odswiezenie znajomosci C/C++ oraz operacji na napisach (petle, wskazniki, wejscie/wyjscie). Jako minimum, powinni panstwo rozwiazac przynajmniej pierwsze zadanie.

Zadania

W kolejnych zadaniach maja Panstwo zaimplementowac pewne funkcje operujace na napisach w C/C++. Poza implementacja funkcji z zadania, prosze oczywiscie napisac takze funkcje main, ktora pokaze, ze panstwa implementacja jest poprawna.

Zadanie 1: Podstawy lancuchow

Prosze zaimlpementowac nastepujace dwie funkcje
  int   stringlen( const char* str )
  void  printrev( const char* str )
Funkcja stringlen(str) powinna zwrocic dlugosc napisy str, a funkcja printrev(str) powinna wypisac napis str w kolejnosci od ostatniego znaku do pierwszego. W szczegolnosci, wykonanie:
  int k;
  k = stringlen("wielblad");
  printf("%d\n", k );
  printrev("wielblad");
powinno wypisac na ekran:
  8
  dalbleiw
Prosze nie korzystac ze standardowych funkcji dostepnych w bibliotekach jezyka C.

Przydatne informacje.

Zadanie 2: Modyfikowanie lancuchow

Prosze napisac funkcje
  int swap( char* text, char* before, char* after );
ktora dziala w nastepujacy sposob: przeglada napis text znak po znaku i wykonuje nastepujaca operacje: jesli znak text[i] wystepuje w napisie before na pozycji j to nalezy go zamienic na znak after[j]. W szczegolnosci, wywolanie
  swap( text, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
powinno spowodowac zamiane wszystkich malych liter w text na odpowiadajace im duze litery.

Funkcja powinna zwrocic 0 jesli proces zamiany sie udal i wartosc rozna od 0 (np -1) jesli wystapily bledy. Za blad nalezy uznac, na przyklad, jesil napisy before i after sa roznej dlugosci.

Przydatne informacje.

Zadanie 3: Dodatkowe

Zadanie dodatkowe: Prosze zaproponowac funkcje podobna do swap z poprzedniego zadania, ale dzialajaca tak, ze pojedyncze znaki moze podmieniac na zadane lancuchy. W szczegolnosci, powinno sie dac te funkcje wywolac w taki sposob, zeby
  1. Usunela z napisu wszystkie spacje, lub
  2. Zamienila kazdy przecinek na ", " (tj. przecinek, po ktorym nastepuje odstep), lub
  3. Dokonala tlumaczenia napisu na alfabet Morse'a (nalezy wtedy na wejsciu podac zapis kazdej litery alfebetu w alfabecie Morse'a).
Do Panstwa zadan nalezy ustalenie jaki powinien byc interface implementowanej funkcji. (Podpowiedz: konieczne bedzie przekazanie tablicy napisow.)