|
|
| ||||||||||||||||||||||||||||||||||||||||||||||
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 | 2,395 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,141 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#####Powinno być: [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]⏎ ⏎ Tablica po wywołaniu funkcji create_histogram: 3 0 0 0 0 0 0 0 0 0 0 ⏎ Wynik: PORAŻKA: Funkcja create_histogram() niepoprawnie wypełniła tablicę⏎ Sprawdź funkcję testującą TEST1(void) z pliku unit_test_v2.c, w linii 76⏎ 8 10 3 -3 -6 9 -8 7 0 ⏎ -2 0 -6 6 -1 -7 0 -3 -9 ⏎ 0⏎ -5 3 6 -3 7 10 8 -6 -5 6 9 -3 8 4 -10 -1 0 9 10 -1 -2 ⏎
Program przerwany; kod błędu=139 (Sygnał SIGSEGV)
Widok kodu źródłowego:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include \"vector_utils.h\"
#include \"tested_declarations.h\"
#include \"rdebug.h\"
int main()
{
Kolejność wywoływania funkcji (stack trace):
Błąd zarejestrowano w funkcji ?? w linii None:-1 , którą wywołano |
w funkcji ?? wywołanej przez system operacyjny. |
Test został przerwany; Program PRZERWANY; miał zwrócić wartość 0 a zakończył się sygnałem SIGSEGV
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 |