Перейти к содержанию
Обновление форума
Опубликовано
comment_3058256

Написал на компьютере программу для решения биквадратного уравнения. Прошу придумать тесты для проверки работы этой программы.

 

Биквадратное уравнение – это частный случай уравнения четвёртой степени вида:

ax4 + bx2 + c = 0.

Условия такие. Коэффициенты a, b, c должны быть целыми числами. Решения xi могут быть как целыми, так и иррациональными числами.

 

В программе возможны следующие варианты решений:

решение – любое число

решений нет

один корень

два корня

три корня

четыре корня

 

Короче, я перебрал все варианты. Нужны тройки чисел a, b, c для тестирования программы. Решения xi можно не приводить (хотя можно и с ними).

А я, пока вы пишете, поиграю в Disgaea.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;

Рекомендуемые сообщения

Опубликовано
comment_3058268
а тебе что мешает написать другую программу, которая возьмет случайные корни и вычислит коэффициенты исходного уравнения?
Опубликовано
comment_3058276

господи, открой эксель.

две колонки под корни, через RAND(), остальные колонки -- вбить формулу для коэффициентов.

Опубликовано
  • Автор
comment_3058286
Так просто не получится. Корней может быть от 0 до 4. Тут фантазия нужна. Тестирование – творческий процесс, нужно человеческое воображение.
for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3058294

Цитирую Юркин задачник:

"Набор тестов называется полным, если он позволяет активизировать все ветви алгоритма. Набор тестов назовём не избыточным, если удаление из него любого теста лишает его полноты.

Таким образом, искусство тестирования сводится к разработке полного и не избыточного набора тестов, а технология – к испытанию программы на всём наборе после внесения в неё каждого исправления. Удачно подобранные тесты позволяют не только констатировать факт наличия ошибок, но и локализовать их, то есть найти место в программе, виновное в получении неверных результатов."

 

Ну и там ещё куча текста.

Это, конечно, формальный подход, и придерживаться его необязательно. Любое тестирование, основанное на "методе тыка", наверняка будет избыточным.

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3059433

2. Решить квадратное уравнение.

6. Решить биквадратное уравнение.

 

 

/*	p11
Язык Turbo C
Основы программирования
Теория. Задачи   */

/*	p11 (15k), p13 (22k), p16, p18, p19 (23k)
p21 (24k), p53 (25k), p54, p55   */

#include <conio.h>
#include <math.h>
#include <stdio.h>

j ();		/*   Решение - любое число.   */
k ();		/*   Решений нет.   */
l (float);		/*   Один корень.   */
m (float, float);	/*   Два корня.   */
n (int, int);	/*   n = a ^ b.   */
o (float, float, float);	/*   Три корня.   */
p (float, float, float, float);	/*   Четыре корня.   */


main ()
{
  int a, b, c, d;
  int g, h;
  float s, t;

  printf ("Введите четыре целых числа: ");
  scanf ("%i%i%i%i", &a, &b, &c, &d);

  printf ("p13 - 2. ");
  if (a == 0)
     if (b == 0)
 if (c == 0) j (); else k ();
     else
 l ((float) -c / B);
  else
  {
     g = b * b - 4 * a * c;
     if (g < 0)  k ();  else
 if (g == 0)
    l (-b / 2. / a);
 else
    m ((-b + sqrt (g)) / 2 / a, (-b - sqrt (g)) / 2 / a);
  }

  printf ("p21 - 6. ");
  if (a == 0)
     if (b == 0)
 if (c == 0) j (); else k ();
     else
     {
 s = (float) -c / b;
 if (s < 0)  k ();  else if (s == 0)  l (0);  else m (sqrt (s), -sqrt (s));
     }
  else
  {
     g = b * b - 4 * a * c;
     if (g < 0)  k ();  else
 if (g == 0)
 {
    s = -b / 2. / a;
    if (s < 0)  k ();  else if (s == 0)  l (0);  else m (sqrt (s), -sqrt (s));
 }
 else
 {
    s = (-b + sqrt (g)) / 2 / a;
    t = (-b - sqrt (g)) / 2 / a;
    if (s < 0)
       if (t < 0)  k ();  else if (t == 0)  l (0);  else m (-sqrt (t), sqrt (t));
    else
       if (s == 0)
	  if (t < 0)  l (0);  else o (-sqrt (t), 0, sqrt (t));
       else
	  if (t < 0)
	     m (-sqrt (s), sqrt (s));
	  else
	     if (t == 0)
		o (-sqrt (s), 0, sqrt (s));
	     else
		p (-sqrt (s), -sqrt (t), sqrt (t), sqrt (s));
 }
  }

  getch ();
  printf ("\n");
}


j () {printf ("Решение - любое число.\n");}
k () {printf ("Решений нет.\n");}
l (float a) {printf ("x = %.4g.\n", a);}
m (float a, float B) {printf ("x1 = %.4g, x2 = %.4g.\n", a, B);}
o (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
p (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);}

 

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.