Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курс (Восстановлен).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
129.94 Кб
Скачать

Размещение текстов диалога на экране

Programma perevodyashya dvoicnie chisla v desyatichnie i naoborot s rejimom obucheniya. Vipolnil student gruppi k-31 Sedov Egor Programma perevoda chisel.

При с=’1’.

При с=’2’.

До ((

При с=’3’.

До ((1 ) & (s [‘0’..’9’]))

При с=’4’.

Do svidaniya

Схема диалога

2

5

13

2

1

4

8

7

5

6

3

4

3

1

10

12

11

6

9

Алгоритм решения задачи

Дата: 25.06.12 Разработчик: Седов Егор Андреевич Алгоритм: Dvoich Листов: 1 Лист: 1

Внешняя

спецификация

Внутренняя спецификация

Вх:

B=( )

Двоичное число;

Вых:

<sum>

Запрос строки;

Подсчет количества символов в строке;

Задать sum начальное значение;

Задать k начальное значение;

Цикл Проверки символов

строки и подсчета суммы

Если символ строки b равен

‘1’,

То Возвести символ в

степень и сложить с

значением sum

Кесли

Кцикл

Если sum равен 0 или

количество символов

превышает

допустимое значение,

То Вывод сообщения об

ошибке и перевести к

запросу строки Иначе Вывод ответа

Кесли

Запрос для продолжения работы.

l2:

Вывод(“Vvedite dvoichnoe chislo: ”);

Ввод(b);

n=strlen(b);

Sum=0; k=0;

Цикл от i=n-1 до -1(шаг -1)

Если b[k]==’1’

То sum+=pow(2,i);

Кесли

k++;

Кцикл

Если ((sum=0) || (n<1) || (n>100))

То Вывод("Vi vveli ne korektnoe

chislo, poprobuete snova ");

Goto l2;

Иначе

Вывод("Desyatichnoe chislo:”);

Вывод(sum);

Кесли

Вывод("Dlya prodoljeniya najmite lubuy klavishu...");

Ввод(с);

Вн:

n-длина строки(цел)

i-счетчик(цел)

k-счетчик(цел)

с-знак продолжения работы(симв)

b – строка

1 n=strlen(b)

l2 - метка

Дата: 25.06.12 Разработчик: Седов Егор Андреевич Алгоритм: Desyat Листов: 1 Лист: 1

Внешняя

спецификация

Внутренняя спецификация

Вх:

Десятичное число;

Вых:

<a[i]>

Запрос строки;

Подсчет количества символов в строке;

Цикл Проверки символов строки

и перевод строки в число

Если строка s содержит только

цифры

То Перевести строку s в

число dec

Иначе Вывод сообщения об

ошибке и перевести к

запросу строки

Кесли

Кцикл

Присвоение счетчикам i,k начальное значение;

Цикл получения

последовательности

двоичных чисел;

Присваиваем в mod

остаток от деления числа

dec;

Делим dec на 2;

Присваиваем i-му

элементу массива s

значение mod;

Наращиваем счетчики

i и k;

До (dec не равно 0)

Кцикл

Задать lol начальное значение

Цикл сортировки

Последовательности

двоичных чисел для

получения результата

Присваиваем в lol i-ый

элемент массива s;

Присваиваем в i-ый

элемент массива s ( k-i-1 )

элемент массива s;

Присваиваем ( k-i-1 )

элементу массива s

значение lol;

Кцикл

Цикл вывода результирующей

последовательности

двоичных чисел

Кцикл

Запрос для продолжения работы.

l3:

Вывод(“Vvedite desyatich chislo:”);

Ввод(s);

l=strlen(s);

Цикл от i=0 до l(шаг +1)

Если isdigit(s[i])

То dec=atoi(s[i])

Иначе Вывод("Vi vveli ne

korektnoe chislo,

poprobuete

snova "); goto l3;

Кесли

Кцикл

i=0; k=0;

Цикл mod = dec % 2;

dec /= 2;

a[i]=mod;

i++; k++;

До (dec!=0)

Кцикл

lol=0;

Цикл от i=0 до k/2(шаг +1)

lol=a[i];

a[i]=a[k-i-1];

a[k-i-1]=lol;

Кцикл

Вывод("Dvoichnoe chislo: "); Цикл от i=0 до k(шаг +1)

Вывод(a[i]);

Кцикл

Вывод("Dlya prodoljeniya najmite lubuy klavishu...");

Ввод(с);

Вн:

dec – десятичное число(цел)

mod – остаток от деления(цел)

l-длина строки(цел)

i-счетчик(цел)

k-счетчик(цел)

lol – вспомогательная переменная(цел)

с-знак продолжения работы(симв)

s – строка

1 n=strlen(s)

a – строка

1 k

l3 - метка

Тестирование программы

Черный ящик

Тест перевода из двоичной в десятичную

Вход

Выход

1

101

5

2

347ыв

Vi vveli ne korektnoe chislo, poprobuete snova

3

1000011

67

Тест перевода из десятичной в двоичную

Вход

Выход

1

ывафы

Vi vveli ne korektnoe chislo, poprobuete snova

2

15

00001111

3

5

101

Белый ящик

Тест перевода из двоичной в десятичную

Вход b=101;

n=3;

sum=0;

i=2;

sum= =4;

i=1;

sum= =4;

i=0;

sum=4+1* =5;

Выход: sum=5;

Тест перевода из десятичной в двоичную

Вход s = 5;

dec=s=5;

i=0;

mod=1;

dec=2;

a[0]=1;

k=1;

dec=2;

i=1;

mod=0;

dec=1;

a[1]=0;

k=2;

dec=1;

i=2;

mod=1;

dec=0;

a[2]=1;

k=3;

lol=0;

i=0;

lol=a[0]=1;

a[0]=a[2]=1;

a[2]=1;

Выход: a=101

Программный код.

#include<conio.h>

#include<stdio.h>

#include<math.h>

#include<ctype.h>

main()

{

char c;

printf("Programma perevodyashya dvoicnie chisla v desyatichnie i naoborot s rejimom obucheniya \n");

printf("Vipolnil student gruppi k-31 Sedov Egor \n");

l1:

clrscr();

printf("Programma perevoda chisel. \n");

printf("Menu. \n");

printf("1.Obuchenie. \n");

printf("2.Perevod iz dvoichnoi v desyatichnyu. \n");

printf("3.Perevod iz desyatichnoi v dvoichnyu. \n");

printf("4.Vihod. \n");

c=getch();

switch(c)

{

case '1': {

printf("Obuchenie. \n");

printf("Chtobi perevesti dvoichnoe chislo v desyatirichnoe nujno kajdyu cifru, nachinaya sleva , po ocheredi umnojit' na 2 v stepeni n-1(Gde n -

nomer cifri. Schitat' sprava) i slojit' ih. \n");

printf("Chtobi perevesti desyatirichnoe chislo v dvoichnoe nujno delit' chislo na 2 do teh por poka delimim ne stanet 1. I zapisat'

posledovatel'nost' d obratnom poryadke \n");

printf("Dlya prodoljeniya najmite lubuy klavishu... \n");

c=getch();

goto l1;

}

case '2': {

int n,k,sum,i;

char b[100];

sum=0;

l2:

printf("Vvedite dvoichnoe chislo: ");

scanf("%s",&b);

n=strlen(b);

k=0;

for (i=n-1;i>-1;i--)

{

if (b[k]=='1')

sum+=pow(2,i) ;

k++;}

if ((sum==0)||(n<1)||(n>100))

{

printf("Vi vveli ne korektnoe chislo, poprobuete snova \n");

goto l2;

} else

printf("Desyatichnoe chislo: %d \n",sum);

printf("Dlya prodoljeniya najmite lubuy klavishu...");c=getch();

goto l1;

}

case '3': {

int b[10],a[10],i,k,l,lol;

int dec, mod;

char s[100];

l3:

printf("Vvedite desyatichnoe chislo: ");

scanf("%s",&s);

l=strlen(s);

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

if(isdigit(s[i]))

dec=atoi(s);

else

{

printf("Vi vveli ne korektnoe chislo, poprobuete snova \n");

goto l3;

}

i=0;

k=0;

do

{

mod = dec % 2;

dec /= 2;

a[i]=mod;

i++;

k++;

}while(dec!=0);

lol=0;

for(i=0;i<k/2;i++)

{

lol=a[i];

a[i]=a[k-i-1];

a[k-i-1]=lol;

}

printf("Dvoichnoe chislo: ");

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

printf("%d",a[i]);

printf("\n Dlya prodoljeniya najmite lubuy klavishu... \n");

c=getch(); goto l1; break;

}

case '4': {

printf("Do svidaniya"); break;

}

}

getch();

}