|
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
Napisz program, który pobierze tablicę liczb rzeczywistych z przedziału <0 - 11) od użytkownika (maksymalnie 100, w przypadku mniejszej liczby danych wartość -1 będzie oznaczała koniec wprowadzania danych) i zapisze je do tablicy. Dla pobranej tablicy wyznacz histogram liczb, zakładając 11 przedziałów: <0;1), <1;2), ... <10; 11).
Histogram wyświetl w postaci ciągu wartości znajdujących się w każdym z 11 przedziałów. Wyniki mają być wyświetlone w jednej linii, oddzielone spacjami.
W przypadku podania błędnych danych program powinien wyświetlić komunikat Incorrect input
i zakończyć działanie z kodem błędu 1
,
w przypadku niepodania żadnej wartości program ma wyświetlić komunikat Not enough data available
i zakończyć działanie z kodem błędu 3
.
Przygotuj funkcje do pobierania danych od użytkownika, wyświetlania danych na konsoli oraz wyznaczania histogramu.
Prototyp funkcji wyznaczającej histogram ma wyglądać następująco:
int create_histogram(const float *vec, int size, int *out, int out_size);
Parametry:
vec
- wskaźnik na tablicę typu float
, dla której ma zostać wyznaczony histogram,size
- liczba elementów w tablicy,out
- wskaźnik na tablicę typu int
, do której ma zostać zapisany histogram o przedziałach <0;1), ..., <out_size-1; out_size).out_size
- zadeklarowany rozmiar tablicy out
.Wartość zwrócona:
1
- w przypadku przekazania do funkcji błędnych danych,0
- w przeciwnym przypadku.Przykładowa interakcja z programem -- sukces:
Podaj liczby: 4.812335 4.005256 2.990941 10.987188 10.223234 5.657190 8.759232 7.377624 4.812679 -1
0 0 1 0 3 1 0 1 1 0 2
Podaj liczby: -4.3 -15.85 -18.22 -15.36 -3.65 -6.94 -5.42 -11.21 -17.25 -1.00⏎
0 0 0 0 0 0 0 0 0 0 0 ⏎
Uwaga
[]
.read_vector_float
z zadania 1.7 Wskaźniki i funkcje - średnia i suma i funkcję display_vector
z zadania 1.8 Sortowanie, deklaracje funkcji umieść w pliku vector_utils.h
, a definicje w pliku vector_utils.c
.
Zawartość przesłanej odpowiedzi | ||||
1. | main.c | 710 bajtów | Pobierz Pokaż | Przesłany kod, zmodyfikowany pod testy |
2. | vector_utils.c | 1,350 bajtów | Pobierz Pokaż | Przesłany kod, zmodyfikowany pod testy |
3. | vector_utils.h | 249 bajtów | Pobierz Pokaż | Przesłany kod |
4. | unit_helper_v2.c | 11,786 bajtów | Pobierz Pokaż | Wstrzyknięty kod testujący |
5. | unit_helper_v2.h | 3,974 bajtów | Pobierz Pokaż | Wstrzyknięty kod testujący |
6. | unit_test_v2.c | 55,794 bajtów | Pobierz Pokaż | Wstrzyknięty kod testujący |
7. | tested_declarations.h | 549 bajtów | Pobierz Pokaż | Wstrzyknięty kod testujący, prototypy wymaganych funkcji |
8. | rdebug.c | 45,693 bajtów | Pobierz Pokaż | Wstrzyknięty kod testujący |
9. | rdebug.h | 6,417 bajtów | Pobierz Pokaż | Wstrzyknięty kod testujący, prototypy wymaganych funkcji |
Wywołanie:
cppcheck --std=c11 --enable=all --xml-version=2 --error-exitcode=42 --includes-file=/usr/include --suppress=missingIncludeSystem --suppress=variableScope --suppress=unmatchedSuppression main.c vector_utils.c vector_utils.h
Wywołanie:
cppcheck-htmlreport --file=cppcheck_log.xml --title=abc --report-dir=cppcheck --source-dir=./ --source-encoding=utf-8
Wywołanie:
scan-build-3.9 -o . -stats -internal-stats --force-analyze-debug-code --keep-empty --status-bugs -o ./clang_tmp -enable-checker alpha.core.CastSize -enable-checker alpha.core.CastToStruct -enable-checker alpha.core.FixedAddr -enable-checker alpha.core.IdenticalExpr -enable-checker alpha.core.PointerArithm -enable-checker alpha.core.PointerSub -enable-checker alpha.core.SizeofPtr -enable-checker alpha.deadcode.UnreachableCode -enable-checker alpha.security.ArrayBound -enable-checker alpha.security.ArrayBoundV2 -enable-checker alpha.security.ReturnPtrRange -enable-checker alpha.unix.Chroot -enable-checker alpha.unix.SimpleStream -enable-checker alpha.unix.Stream -enable-checker alpha.unix.cstring.BufferOverlap -enable-checker alpha.unix.cstring.NotNullTerminated gcc -ggdb3 -O0 -Wall -Wextra -std=c11 -x c -c main.c vector_utils.c vector_utils.h
Cppcheck: Brak błędów/wskazówek; pobierz RAPORT
Clang: Znaleziono błędy/wskazówki; pobierz RAPORT
Wywołanie:
./main 1
Widok konsoli programu -- przebieg interakcji z użytkownikiem:
### Testy jednostkowe ###
TEST 1: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 2: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [6, 11, 9, 8, 7, 6, 13, 6, 13, 15, 6]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 11 9 8 7 6 13 6 13 15 6 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST2(void) z pliku unit_test_v2.c, w linii 133⏎ ⏎ TEST 3: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [8, 12, 15, 15, 11, 12, 12, 11, 15, 11, 16]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 12 15 15 11 12 12 11 15 11 16 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST3(void) z pliku unit_test_v2.c, w linii 190⏎ ⏎ TEST 4: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 0 1 0 0 0 1 1 0 0 0 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST4(void) z pliku unit_test_v2.c, w linii 247⏎ ⏎ TEST 5: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [4, 3, 6, 7, 4, 5, 1, 4, 8, 4, 0]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 3 6 7 4 5 1 4 8 4 0 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST5(void) z pliku unit_test_v2.c, w linii 304⏎ ⏎ TEST 6: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [8, 4, 5, 5, 3, 6, 8, 6, 4, 2, 2, 6, 1, 6, 2, 6, 5, 7, 6, 1, 0]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 4 5 5 3 6 8 6 4 2 2 8 1 0 2 0 -1 0 1 0 -1 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST6(void) z pliku unit_test_v2.c, w linii 361⏎ ⏎ TEST 7: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [6, 7, 4, 13, 10, 11, 7, 11, 4, 9, 12, 11, 9, 8, 3, 6, 8, 7, 12, 9, 9, 10, 6, 11, 6, 5, 13, 14, 13, 15, 8, 10, 6, 9, 16, 12, 6, 5, 7, 8, 6, 7, 10, 6, 11, 12, 12, 17, 10, 13, 13, 10, 7, 8, 9, 6, 7, 7, 19, 12, 9, 6, 11, 7, 6, 6, 8, 10, 17, 5, 8, 14, 4, 6, 16, 10, 4, 6, 12, 9, 12, 8, 7, 5, 9, 7, 10, 11, 0]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 7 4 13 10 11 7 11 4 9 12 12 2 2 0 0 -1 -2 -2 0 0 2 -2 -2 1 -2 1 -1 0 -2 2 -1 -2 -2 -1 1 0 -2 1 -2 -1 0 0 -2 -1 0 0 -2 -1 2 1 1 0 2 -1 -2 0 2 1 0 1 -1 -2 0 -1 -2 -2 2 -2 2 -1 0 0 1 1 -1 1 -2 1 0 1 -1 -2 1 0 -2 -1 2 -2 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST7(void) z pliku unit_test_v2.c, w linii 418⏎ ⏎ TEST 8: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [5, 11, 9, 8, 12, 12, 11]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 11 9 8 12 12 11 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST8(void) z pliku unit_test_v2.c, w linii 475⏎ ⏎ TEST 9: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 10: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Powinno być: [7]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 0 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST10(void) z pliku unit_test_v2.c, w linii 589⏎ ⏎ TEST 11: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 12: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 13: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 14: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 15: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 16: Sprawdzanie poprawności działania funkcji create_histogram⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 17: Sprawdzanie poprawności działania funkcji display⏎ ⏎ ***TEST 1***⏎ ⏎ ***START***⏎ ***END***⏎ ⏎ ***TEST 2***⏎ ⏎ ***START***⏎ ***END***⏎ ⏎ ***TEST 3***⏎ ⏎ ***START***⏎ 0 4 0 1 ***END***⏎ ⏎ ***TEST 4***⏎ ⏎ ***START***⏎ 0 4 0 ***END***⏎ Wynik: SUKCES⏎ ⏎ TEST 18: Sprawdzanie poprawności działania funkcji read_vector_float⏎ 6 6 10 7 6 -3 -8 9 8 -6 0 ⏎ Wynik: SUKCES⏎ ⏎ TEST 19: Sprawdzanie poprawności działania funkcji read_vector_float⏎ 1 -10 0 -8 -1 -8 -9 -3 ⏎ Wynik: SUKCES⏎ ⏎ TEST 20: Sprawdzanie poprawności działania funkcji read_vector_float⏎ 0⏎ Wynik: SUKCES⏎ ⏎ TEST 21: Sprawdzanie poprawności działania funkcji read_vector_float⏎ -9 -3 7 4 2 10 -7 3 10 8 -2 -8 0 -5 6 -9 8 5 -9 -2 -9 -8 -3 6 5 5 3 -6 ⏎ Wynik: SUKCES⏎ ⏎ TEST 22: Sprawdzanie poprawności działania funkcji read_vector_float⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 23: Sprawdzanie poprawności działania funkcji read_vector_float⏎ #####START##########END#####Wynik: SUKCES⏎ ⏎ TEST 24: Sprawdzanie poprawności działania funkcji read_vector_float⏎ #####START##########END#####Wynik: SUKCES⏎### RLDebug :: Analiza wycieku zasobów ###
Wszystkie bloki pamięci zostały pomyślnie zwolnione - brak wycieków.⏎ Wszystkie pliki zostały zamknięte.⏎ Nie wykryto uszkodzenia sterty.⏎ ⏎### Podsumowanie ###
Testy dostępne: 24 (AVAIL)⏎ Wykonane: 24 (DONE)⏎ Testy poprawne: 16 (PASSED)⏎ Testy niepoprawne: 8 (FAILED)⏎ Ostrzeżenia: 0 (WARNINGS)⏎ Wycieki zasobów: 0 (LEAKS)⏎
Program zakończony; kod błędu=0 (Ok)
Test został przerwany; TESTY: Niektóre wywołania Twoich funkcji zakończyły się NIEPOMYŚLNIE; Popraw swój kod.
Objaśnienia oraz informacje dodatkowe:
tekst | Dane wpisywane przez człowieka, z klawiatury (stdin, standard input, standardowy strumień wejścia) |
tekst | Dane wyświetlane przez program, np. funkcją fprintf (stdout, standard output, standardowy strumień wyjścia) |
tekst | Dane wyświetlane przez program, np. funkcją printf (stderr, standard error, standardowy strumień błędów) |
␣ | Wciśnięcie klawisza SPACE |
⏎ | Wciśnięcie klawisza ENTER; znak nowej linii |
? | Znak spoza przestrzeni ASCII; niedopuszczalny |