Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Olka.doc
Скачиваний:
2
Добавлен:
16.08.2019
Размер:
139.78 Кб
Скачать

5. Тестовые наборы данных и реакции

Таблица 5.1. Тест реакции для чисел.

№ теста

Входные данные

Результат работы программы

Результат проверки

1

0101

1010101

100101

B Vsevo vvedeno 3 strok i 17 simvolov.

Minimalnaia dlinna stroki 4, maksimalnaia - 7.

Kod pervoi stroki - 5.

Kod stroki 2 - 85. 2 vhogdenii obraza.

Kod stroki 3 - 37. 1 vhogdenii obraza.

Maksimalnoe vhogdenie obraza 2 ras v stroke 2.

верно

2

10101

1010101

1001010

1111000011110000

1010101010101010

111010101

101111101

Vsevo vvedeno 7 strok i 69 simvolov.

Minimalnaia dlinna stroki 5, maksimalnaia - 16.

Kod pervoi stroki - 21.

Kod stroki 2 - 85. 2 vhogdenii obraza.

Kod stroki 3 - 74. Net vhogdenii obraza.

Kod stroki 4 - 61680. Net vhogdenii obraza.

Kod stroki 5 - 43690. 6 vhogdenii obraza.

Kod stroki 6 - 469. 2 vhogdenii obraza.

Kod stroki 7 - 381. Net vhogdenii obraza.

Maksimalnoe vhogdenie obraza 6 ras v stroke 5.Maksimalnoe vhogdenie obraza 6 ras v stroke 5.

верно

3

10101

1010101

001001010

1111111111111111

Vsevo vvedeno 4 strok i 37 simvolov.

Minimalnaia dlinna stroki 5, maksimalnaia - 16.

Kod pervoi stroki - 21.

Kod stroki 2 - 85. 2 vhogdenii obraza.

Kod stroki 3 - 74. Net vhogdenii obraza.

Kod stroki 4 - 65535. Net vhogdenii obraza.

Maksimalnoe vhogdenie obraza 2 ras v stroke 2.

верно

6. Исходный текст программы

Исходный текст программы находится в файле obras.c

#include <stdio.h>

#pragma hdrstop

#include <string.h>

#include <tchar.h>

//---------------------------------------------------------------------------

#pragma argsused

#define dlina 20

void readwritefile(int* b, int* l, int* m)

/*****

Вход:

Значение ‘f’ переменной k.

Действие:

Считывает из файла строки в массив char d[dlina]. Длину строки записывает в массив int l[8]. Преобразует строки d в соответствующую ей ячейку массива int b[8]. Считает количество строк m.

Выход:

Массивы b, l и переменная m.

*****/

{

int i = 0, r;

int j;

char d[dlina];

FILE *f;

f = fopen("file.txt", "rb");

while (!feof(f))

{

fgets( d, dlina, f);

if (feof(f))

{

l[i] = strlen(d);

} else

{

l[i] = strlen(d)-2;

}

r = 1;

b[i] = 0;

for ( j = l[i]; j > 0; --j)

{

b[i] += r * (d[j-1]-48);

r *= 2;

}

printf( "Stroka: %s ", d);

printf( "kod stroki: %d.\n", b[i]);

++i;

}

fclose(f);

m[0] = i;

}

void readwritecons(int* b, int* l, int* m)

/*****

Вход:

Значение ‘c’ переменной k.

Действие:

Считывает с клавиатуры строки в массив char d[dlina]. Длину строки записывает в массив int l[8]. Преобразует строки d в соответствующую ей ячейку массива int b[8]. Считает количество строк m.

Выход:

Массивы b, l и переменная m.

*****/

{

int i, r, j, h;

char d[dlina];

printf("Vvedite chislo strok.");

scanf("%d", &h);

gets(d);

for (i = 0; i < h; i++)

{

gets(d);

l[i] = strlen(d);

r = 1;

b[i] = 0;

for ( j = l[i]; j > 0; --j)

{

b[i] += r * (d[j-1]-48);

r *= 2;

}

}

m[0] = i;

}

void mask(int* l, int* maska)

/*****

Вход:

Длинна первой строки(битовый образ).

Действие:

Создает число из всех единиц единиц, количество которых равно количеству цифр в двоичной записи первого числа (маску).

Выход:

Переменная maska.

*****/

{

int i, j;

j = 1;

maska[0] = 1;

for (i = 1; i < l[0]; i++) {

j *= 2;

maska[0] += j;

}

}

void raschet(int* b, int* l, int* c, int* m , int* maska)

/*****

Вход:

Массивы b, l, maska и переменная m.

Действие:

Подсчитывает количество вхождений образа в строки и записывает в массив с.

Выход:

Массив с.

*****/

{

int i, j, r, e, obr;

obr = b[0];

for (i = 1; i < (m[0]); i++)

{

e = b[i];

j = l[i];

c[i] = 0;

while ((e >= obr) && (j >= l[0]))

{

r = e & maska[0];

printf("%d ", r);

if (r == obr){ ++c[i];}

e = e >> 1;

--j;

}

}

}

void vivod(int* b, int* l, int* c, int* m, char* k)

Void vivod( b, l, c, m, k);

/*****

Вход:

Массивы b, l, c и переменнst m и k.

Действие:

Выводит все полученные в ходе вычислений данные на экран или в файл.

Выход:

Нет.

*****/

;

{

int m1, m2, n, i, c1, c2;

n = l[0];

m1 = l[0];

m2 = l[0];

c1 = c[1];

c2 = 1;

for (i = 1; i < m[0]; i++) {

if (l[i] < m1 ) {m1 = l[i];}

if (l[i] > m2 ) {m2 = l[i];}

if (c[i] > c1 ) {c1 = c[i]; c2 = i;}

n += l[i];

}

printf("\nVsevo vvedeno %d strok i %d simvolov.\n", m[0], n);

printf("Minimalnaia dlinna stroki %d, maksimalnaia - %d.\n", m1, m2);

printf("Kod pervoi stroki - %d.\n", b[0]);

for (i = 1; i < m[0]; i++) {

printf("Kod stroki %d - %d. ", i + 1, b[i]);

if (c[i] == 0) {

printf("Net vhogdenii obraza.\n");

}else

{

printf("%d vhogdenii obraza.\n", c[i]);

}

}

printf("Maksimalnoe vhogdenie obraza %d ras v stroke %d.\n", c1, c2+1);

if (k = 'f') {

FILE *f;

f = fopen("file2.txt", "wt");

fprintf(f, "\nVsevo vvedeno %d strok i %d simvolov.\n", m[0], n);

fprintf(f, "Minimalnaia dlinna stroki %d, maksimalnaia - %d.\n", m1, m2);

fprintf(f, "Kod pervoi stroki - %d.\n", b[0]);

for (i = 1; i < m[0]; i++) {

fprintf(f, "Kod stroki %d - %d. ", i + 1, b[i]);

if (c[i] == 0) {

fprintf(f, "Net vhogdenii obraza.\n");

}else

{

fprintf(f, "%d vhogdenii obraza.\n", c[i]);

}

}

fprintf(f, "Maksimalnoe vhogdenie obraza %d ras v stroke %d.\n", c1, c2+1);

fclose(f);

}

}

int _tmain(int argc, _TCHAR* argv[])

{

unsigned int b[8], l[8], c[7], maska[1], m[1];

char k[1];

int k1;

printf("Vvedite \"f\" dla vvoda informacii is faila, \"c\" - dla vvoda s klaviatyri.\n");

scanf("%c", &k[0]);

if(k[0] == 'f')

{

readwritefile( b, l, m);

} else

{

readwritecons( b, l, m);

};

mask(l, maska);

raschet( b, l, c, m , maska);

vivod( b, l, c, m, k);

printf("Vvedite liboi simvol dlia zakritiia programi.\n");

scanf("%d", &k1);

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]