Przykładowe zadania z języka C (do wykonania w postaci funkcji).

Najprostszym sposobem przetestowania każdej funkcji jest wywołanie jej z przykładowymi parametrami w postaci stałych (lub zmiennych, jeśli to konieczne). W zadaniach z tablicami najlepiej użyć tablic zainicjowanych w deklaracji przykładowymi wartościami. Skraca się wówczas czas testowania (nie jest potrzebne wczytywanie danych z klawiatury).

Uwaga: W opisie niektórych zadań w nawiasach podane są niekiedy różne warianty i modyfikacje. Na przykład funkcję szukającą maksimum można napisać również w wariancie poszukującym minimum.

Zadania różne

  1. int odpowiedz(void); Funkcja czeka na klawisz T, N (mała lub wielka litera) lub ESC. Powinna zwrócić wartość 0 dla N, 1 dla T oraz -1 dla klawisza ESC (klawisz ten ma kod 0x1B)
  2. int max(int a, int b, int c); Wartość maksymalna z trzech liczb a, b i c
  3. int coordinate(float x, float y); Dla punktu o współrzędnych (x, y) zwrócić wartość 1 .. 4, identyfikującą jedną z ćwiartek układu współrzędnych wewnątrz której leży ten punkt. Zwrócić 0 jeśli punkt leży na którejkolwiek osi współrzędnych
  4. void swap(int * a, int * b); Zamiana wartości dwóch liczb wskazanych przez a i b:
  1. long int sum(int min, int max); Suma liczb z przedziału <min, max>:

Sumy i szeregi

Uwaga: nie używać funkcji pow()

  1. long int sum(int n, int r); Suma n elementów ciągu arytmetycznego o wyrazie początkowym równym 1 i zadanej różnicy r. Nie używać gotowego wzoru, sumować kolejne elementy
  2. long int sum(int n, int i); Suma n elementów ciągu geometrycznego o wyrazie początkowym równym 1 i zadanym ilorazie i. Nie używać gotowego wzoru, sumować kolejne elementy
  3. int value(int limit); Najmniejsza liczba całkowita n taka, że n! > limit
  4. int value(int limit); Największa liczba całkowita n taka, że 1+2+ ... + n < limit
  5. int value(int limit); Najmniejsza liczba całkowita n taka, że 1+2+ ... + n > limit
  6. long int sum(int n); Suma szeregu: 1 - 2 + 3 - ... ± n
  7. long int sum(int n); Suma szeregu: 1! - 2! + 3! - ... ± n!
  8. float sum(int n); Suma szeregu: 1 - 3 + 5 - ... ± (2n+1)
  9. float sum(int n); Suma szeregu: 1 - 1/4 + 1/7 - ... ± 1/(3n+1)
  10. float sum(int n, float x); Suma szeregu: x - x2 + x3 - ... ± xn
  11. float sum(int n, float x); Suma szeregu: x + 2x2 + 3x3 + ... + nxn
  12. float sum(int n, float x); Suma szeregu: 1/x + 2/x2 + 3/x3 + ... + n/xn
  13. float sum(int n, float x); Suma szeregu: x/1! + x2/2! + x3/3! + ... + xn/n!
  14. float sum(int n, float x); Suma szeregu: (x+1) + (x2 + 2) + (x3 + 3) + ... + (xn + n)
  15. float sum(int n, float x); Suma szeregu: (x+1) - (x2 - 2) + (x3+ 3) - ... ± (xn ± n)
  16. float sum(float x, float epsilon); Sumy szeregu: 1 + x/1 + x2/2 + ... + xi/i. Sumowanie przerwać jeśli kolejny składnik będzie mniejszy od epsilon (założenie: 0<x<1)

Tablice jednowymiarowe

Oznaczenia: size - rozmiar tablicy tab

  1. void enter(int tab[], int size); Wprowadzanie danych z klawiatury do tablicy
  2. void display(int tab[], int size); Wyświetlanie tablicy
  3. int count(int tab[], int size); Liczba elementów tablicy spełniających zadany warunek
  4. long int sum(int tab[], int size); Suma elementów tablicy spełniających zadany warunek
  5. float average(int tab[], int size); Średnia z elementów tablicy spełniających zadany warunek
  6. int position(int tab[], int size); Pozycja pierwszego elementu tablicy spełniającego zadany warunek. Zwrócić -1 jeśli brak takiego elementu
  7. int max(int tab[], int size); Maksimum (minimum) z wszystkich elementów tablicy
  8. int max(int tab[], int size); Maksimum (minimum) z elementów tablicy spełniających zadany warunek. Zwrócić wartość 0 jeśli w tablicy brak takich elementów
  9. int min_max(int tab[], int size); Suma minimum i maksimum z wszystkich elementów tablicy
  10. int min_max(int tab[], int size); Suma minimum i maksimum z elementów tablicy spełniających zadany warunek. Zwrócić wartość 0 jeśli w tablicy brak takich elementów
  11. int delete(int tab[], int size); Usunięcie z tablicy elementów tablicy spełniających zadany warunek. Zwrócić nowy rozmiar tablicy
  12. void modify(int tab[], int size); Zastąpienie każdego elementu tablicy jego sumą z następnym. Dla ostatniego elementu jako następny przyjąć pierwszy
  13. int nearest(int tab[], int size, int val); Znalezienie liczby najbliższej wartości zadanej val (tzn. o najmniejszej wartości bezwzględnej różnicy). Nie używać funkcji abs()
  14. void reverse(int tab[], int size); Odwrócenie tablicy (zamiana pierwszego z ostatnim, drugiego z przedostatnim itd.)
  15. void sort(int tab[], int size); Sortowanie tablicy rosnąco (malejąco)
  16. int check(int tab[], int size); Sprawdzenie, czy tablica jest posortowana rosnąco (malejąco). Zwrócić wartość 1 jeśli tak, w przeciwnym wypadku 0
  17. int max(int tab[], int size, int * pos); Maksimum (minimum) z wszystkich elementów tablicy oraz jego pozycja pos
  18. void sum(int tab1[], int tab2[], int size); Sumowanie dwóch tablic o jednakowym rozmiarze, wynik w pierwszej tablicy
  19. void max(int tab1[], int tab2[], int size); Zamiana wartości w tablicach tab1 i tab2 tak, aby wartość na dowolnej pozycji w tab1 były nie mniejsze niż wartości na tej samej pozycji w tab2

Przykładowe warunki:

Tablice dwuwymiarowe

COLS - liczba kolumn

  1. int count(int tab[][COLS], int rows); Liczba elementów spełniających zadany warunek
  2. long int sum(int tab[][COLS], int rows); Suma elementów spełniających zadany warunek
  3. float average(int tab[][COLS], int rows); Średnia z elementów spełniających zadany warunek
  4. int max(int tab[][COLS], int rows); Maksimum (minimum) z wszystkich elementów tablicy
  5. int max(int tab[][COLS], int rows); Maksimum (minimum) z elementów tablicy spełniających zadany warunek. Zwrócić wartość 0 jeśli w tablicy brak takich elementów
  6. int max(int tab[][COLS], int rows, int * row, int * col); Maksimum (minimum) z wszystkich elementów tablicy oraz jego pozycja w wierszu row i kolumnie col
  7. void modify(int tab[][COLS], int rows); Zastępowanie wszystkich elementów w każdym wierszu wartością maksymalną dla tego wiersza (dla elementów większych od średniej dla wiersza) lub minimalną (dla elementów mniejszych od średniej). Można również zrealizować wariant wykonujący podobne operacje dla kolumn
  8. void reverse(int tab[][COLS], int rows); Odwrócenie wartości w każdym wierszu (zamiana pierwszego elementu z ostatnim, drugiego z przedostatnim itd.) Można również zrealizować wariant wykonujący podobne operacje dla kolumn

Tablice dwuwymiarowe kwadratowe

SIZE - liczba wierszy, liczba kolumn

W poniższych funkcjach chodzi o elementy w wybranej części tablicy kwadratowej:

tylko elementy na przekątnej (ewentualnie nad lub pod przekątną)

  1. int count(int tab[][SIZE]); Liczba elementów spełniających zadany warunek
  2. long int sum(int tab[][SIZE]); Suma elementów spełniających zadany warunek
  3. float average(int tab[][SIZE]); Średnia z elementów spełniających zadany warunek
  4. int max(int tab[][SIZE]); Maksimum z wszystkich elementów tablicy
  5. int min(int tab[][SIZE]); Minimum z elementów tablicy spełniających zadany warunek. Zwrócić wartość 0 jeśli w tablicy brak takich elementów
  6. void reverse(int tab[][SIZE]); Odwracanie tablicy wokół przekątnej, tzn. zamiana elementów tab[i][j] z elementami tab[j][i] (dla i różnego od j)

Przykładowe warunki:

Łańcuchy znakowe (stringi)

  1. int str_len(char * s); Określanie długości stringu s
  2. int find(char * s, char c); Określanie w stringu s pozycji pierwszego wystąpienia znaku c. Funkcja powinna zwrócić -1 jeśli znak nie wystąpił ani razu
  3. int count(char * s, char c); Zliczanie wystąpień znaku c w stringu s
  4. int count(char * s, char c); Zliczanie wystąpień znaku c w stringu s przed pierwszą ewentualną spacją
  5. int count(char * s, char c1, char c2); Zliczanie łączne wystąpień dwóch znaków c1 i c2w stringu s
  6. int count(char * s); Zliczanie w stringu s spacji (cyfr, małych liter, dużych liter)
  7. int change(char * s, char c); Zamiana w stringu s znaku c na spacje (spacji na znak c), zwrócić liczbę zamian
  8. int append(char * s, char c); Dopisanie znaku c na końcu stringu s. Zwrócić nową długość stringu. Przy wywołaniu zadbać o niezbędne miejsce
  9. int shorten(char * s, char c); Skrócenie stringu s tak, aby kończył się przed (ewentualnie po) pierwszym wystąpieniu znaku c Zwrócić nową długość stringu
  10. void reverse(char * s); Odwrócenie stringu s (zamiana pierwszego znaku z ostatnim, drugiego z przedostatnim itd.)

Operacje bitowe

  1. int position(unsigned int val); Pozycja pierwszego bitu niezerowego z prawej w val, -1 jeśli wszystkie bity zerowe
  2. int position(unsigned int val); Pozycja pierwszego bitu zerowego z lewej w val, -1 jeśli wszystkie niezerowe
  3. int count(unsigned int val); Liczba bitów niezerowych w val
  4. unsigned reverse(unsigned int liczba); Zamiana kolejności bitów w val (zamiana najmłodszego z najstarszym itd.)