
Вопрос задан 17.05.2020 в 01:46.
Предмет Информатика.
Спрашивает Громов Георгий.
Разработать схему алгоритма для подсчёта количества отрицательных чисел среди целых чисел
а,в,с.Протестировать алгоритм для всех возможных случаев (когда количество отрицательных чисел равно 0,1,2,3,)Помогите кто понимает))

Ответы на вопрос

Отвечает Ардашов Антон.
// PascalABC.Net 3.0, сборка 1052
function kn(a,b,c:integer):byte;
{ функция возвращает количество отрицательных среди a,b,c}
var
n:byte;
begin
if a<0 then n:=1 else n:=0;
if b<0 then Inc(n);
if c<0 then Inc(n);
kn:=n
end;
function cond(c:char;v:integer):string;
{ функция формирует строку вида с>0 или c<0 в зависимости от знака v}
begin
if v<0 then cond:=c+'<0 ' else cond:=c+'>=0'
end;
procedure pv(a,b,c:integer; n:byte);
{ печать строки теста }
var
m:byte;
begin
m:=kn(a,b,c);
Write(cond('a',a),' ',cond('b',b),' ',cond('c',c),' ');
Write('отрицательных ',m);
if n=m then Write(' - тест прошел') else Write(' - тестовое: ',n);
Writeln
end;
{ тестовое решение }
const
T:array[1..8,1..3] of integer=((1,1,1),(1,1,-1),(1,-1,1),
(1,-1,-1),(-1,1,1),(-1,1,-1),(-1,-1,1),(-1,-1,-1));
R:array[1..8] of byte=(0,1,1,2,1,2,2,3);
var
i:byte;
begin
for i:=1 to 8 do pv(T[i,1],T[i,2],T[i,3],R[i])
end.
Тестирование:
a>=0 b>=0 c>=0 отрицательных 0 - тест прошел
a>=0 b>=0 c<0 отрицательных 1 - тест прошел
a>=0 b<0 c>=0 отрицательных 1 - тест прошел
a>=0 b<0 c<0 отрицательных 2 - тест прошел
a<0 b>=0 c>=0 отрицательных 1 - тест прошел
a<0 b>=0 c<0 отрицательных 2 - тест прошел
a<0 b<0 c>=0 отрицательных 2 - тест прошел
a<0 b<0 c<0 отрицательных 3 - тест прошел
function kn(a,b,c:integer):byte;
{ функция возвращает количество отрицательных среди a,b,c}
var
n:byte;
begin
if a<0 then n:=1 else n:=0;
if b<0 then Inc(n);
if c<0 then Inc(n);
kn:=n
end;
function cond(c:char;v:integer):string;
{ функция формирует строку вида с>0 или c<0 в зависимости от знака v}
begin
if v<0 then cond:=c+'<0 ' else cond:=c+'>=0'
end;
procedure pv(a,b,c:integer; n:byte);
{ печать строки теста }
var
m:byte;
begin
m:=kn(a,b,c);
Write(cond('a',a),' ',cond('b',b),' ',cond('c',c),' ');
Write('отрицательных ',m);
if n=m then Write(' - тест прошел') else Write(' - тестовое: ',n);
Writeln
end;
{ тестовое решение }
const
T:array[1..8,1..3] of integer=((1,1,1),(1,1,-1),(1,-1,1),
(1,-1,-1),(-1,1,1),(-1,1,-1),(-1,-1,1),(-1,-1,-1));
R:array[1..8] of byte=(0,1,1,2,1,2,2,3);
var
i:byte;
begin
for i:=1 to 8 do pv(T[i,1],T[i,2],T[i,3],R[i])
end.
Тестирование:
a>=0 b>=0 c>=0 отрицательных 0 - тест прошел
a>=0 b>=0 c<0 отрицательных 1 - тест прошел
a>=0 b<0 c>=0 отрицательных 1 - тест прошел
a>=0 b<0 c<0 отрицательных 2 - тест прошел
a<0 b>=0 c>=0 отрицательных 1 - тест прошел
a<0 b>=0 c<0 отрицательных 2 - тест прошел
a<0 b<0 c>=0 отрицательных 2 - тест прошел
a<0 b<0 c<0 отрицательных 3 - тест прошел



Отвечает Добычин Арсений.
/* Язык C++11. Здесь решение вместе с юнит-тестами */
#include <iostream>
#include <sstream>
#include <string>
int count_negatives(int a, int b, int c)
{
return (a<0 ? 1:0) + (b<0 ? 1:0) + (c<0 ? 1:0)
}
void solution(std::istream &input = std::cin, std::ostream &output)
{
int a, b, c;
input >> a >> b >> c;
output << count_negatives(a, b, c) << std::endl;
}
void checkTest(std::string input_data, std::string correct_answer)
{
std::istringstream input(input_data);
std::istringstream correct_answer_stream(correct_answer);
std::stringstream algorithm_answer_stream;
int correct_value, algorithm_value;
correct_answer_stream >> correct_value;
solution(input, algorithm_answer_stream);
algorithm_answer_stream >> algorithm_value;
if (correct_value != algorithm_value) {
std::cerr << "Input: " << input_data << std::endl;
std::cerr << "Correct: " << correct_value << std::endl;
std::cerr << "Algorithm: " << algorithm_value << std::endl;
throw std::runtime_error("Test failed");
}
}
void runTests()
{
checkTest("1 2 3", "0");
checkTest("-1 2 3", "1");
checkTest("1 -2 3", "1");
checkTest("1 2 -3", "1");
checkTest("-1 -2 3", "2");
checkTest("-1 2 -3", "2");
checkTest("1 -2 -3", "2");
checkTest("-1 -2 -3", "3");
}
#ifdef __DEBUG
int main(int argc, const char *argv[])
{
runTests();
return 0;
}
#else
int main(int argc, const char *argv[])
{
solution();
return 0;
}
#endif
#include <iostream>
#include <sstream>
#include <string>
int count_negatives(int a, int b, int c)
{
return (a<0 ? 1:0) + (b<0 ? 1:0) + (c<0 ? 1:0)
}
void solution(std::istream &input = std::cin, std::ostream &output)
{
int a, b, c;
input >> a >> b >> c;
output << count_negatives(a, b, c) << std::endl;
}
void checkTest(std::string input_data, std::string correct_answer)
{
std::istringstream input(input_data);
std::istringstream correct_answer_stream(correct_answer);
std::stringstream algorithm_answer_stream;
int correct_value, algorithm_value;
correct_answer_stream >> correct_value;
solution(input, algorithm_answer_stream);
algorithm_answer_stream >> algorithm_value;
if (correct_value != algorithm_value) {
std::cerr << "Input: " << input_data << std::endl;
std::cerr << "Correct: " << correct_value << std::endl;
std::cerr << "Algorithm: " << algorithm_value << std::endl;
throw std::runtime_error("Test failed");
}
}
void runTests()
{
checkTest("1 2 3", "0");
checkTest("-1 2 3", "1");
checkTest("1 -2 3", "1");
checkTest("1 2 -3", "1");
checkTest("-1 -2 3", "2");
checkTest("-1 2 -3", "2");
checkTest("1 -2 -3", "2");
checkTest("-1 -2 -3", "3");
}
#ifdef __DEBUG
int main(int argc, const char *argv[])
{
runTests();
return 0;
}
#else
int main(int argc, const char *argv[])
{
solution();
return 0;
}
#endif


Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili