blog/c/bonuses/03.md

124 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

---
id: seminar-03
title: 3rd seminar
description: |
Select sort implementation on arrays.
last_update:
date: 2023-03-07
---
:::warning[caution]
Deadline for the submission of the bonus is **March 16th 24:00**.
:::
:::tip
In case you have any questions, feel free to reach out either by email, Discord
or just by submitting an issue [here](https://gitlab.fi.muni.cz/xfocko/kb/-/issues/new).
:::
This assignment has two versions. For the light version you can get 1.5 K₡. For
the _full fat_ 3 K₡. **You can choose only one of them**.
To both of them you are given some basic tests. You can also have a look at the
code used by the tests and use it to your advantage.
Details can be found in the doxygen comments included in the source files.
## Light version (`main_light.c`)
[Source](pathname:///files/c/bonuses/03/main_light.c)
For the light version you have 3 functions to finish:
1. `swap` - that swaps two ints passed by pointers.
2. `maximum` - that returns index of the biggest `int` in the array.
3. `select_sort` - that sorts passed array using Select Sort.
## Full fat version (`main.c`)
[Source](pathname:///files/c/bonuses/03/main.c)
For the full fat version you have 4 functions to implement:
1. `swap` - that swaps two variables passed by pointers.
2. `maximum` - that returns index of the biggest element in the array using the
comparator.
3. `select_sort` - that sorts passed array using Select Sort.
4. `int_comparator` - that is used for generic sort and maximum
To 2nd and 3rd function you are given a pseudocode that you can use to implement
it.
:::tip Function pointers
In the skeleton of the “full fat” version you might have noticed a weird type
signature of both the `maximum` and `select_sort` functions. Those functions get
passed a _function pointer_ to the comparator that you use for comparing the
respective elements in the passed in array.
If we take the parameter from one of the functions from the skeleton:
```c
int (*comp)(const void *, const void *)
```
`comp` is a function pointer to a function that takes two pointers of unspecified
type, i.e. pure address to the memory (you don't know what stored in there), and
returns an `int`.
You can pass the function by simply using its name. (There is no need to use `&`
to get its address.) And you can also call the function by “calling” the function
pointer, e.g. `comp(left, right)`.
:::
## Submitting
For submitting the bonus assignment you can follow the same procedure as for
submitting the homeworks, that is:
1. On branch `main` add the provided skeleton.
2. Checkout new branch `seminar-bonus-03`.
3. Add your solution to the newly created branch.
4. Create a MR to the `main` branch with me (`@xfocko`) as the reviewer.
:::tip Directory structure for bonuses
Ideally create a directory `seminar-bonuses` in the root of your repository with
bonuses in their own subdirectories.
Structure of your repository can look like this:
```
.
├── bonuses
│ └── seminar-03
├── hello
├── hw01
├── hw02
├── seminar-01
├── seminar-02
└── seminar-03
```
or
```
.
├── bonus-seminar-03
├── hello
├── hw01
├── hw02
├── seminar-01
├── seminar-02
└── seminar-03
```
Structure of the bonuses is entirely up to you, just keep it consistent.
:::