
- •Федеральное государственное автономное образовательное учреждение высшего профессионального образования "Национальный исследовательский университет "Высшая школа экономики"
- •Курсовая работа
- •Содержание
- •Цель курсовой работы.
- •Назначение программы
- •Требования к программе
- •1.1 Требования к функциональным характеристикам.
- •Постановка задачи
- •Метод решения задачи:
- •Трассировка метода:
- •Внешняя спецификация программы Сценарий
- •Размещение текстов диалога на экране
- •Алгоритм решения задачи
- •Инструкция по работе с программой
- •Требования к запрашиваемым исходным данным
- •Контрольный пример
Размещение текстов диалога на экране
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 равен
То Возвести символ в степень и сложить с значением sum Кесли Кцикл Если sum равен 0 или
превышает допустимое значение, То Вывод сообщения об ошибке и перевести к запросу строки Иначе Вывод ответа Кесли Запрос для продолжения работы. |
l2: Вывод(“Vvedite dvoichnoe chislo: ”); Ввод(b); n=strlen(b); Sum=0; k=0; Цикл от i=n-1 до -1(шаг -1) Если b[k]==’1’
Кесли k++; Кцикл Если ((sum=0) || (n<1) || (n>100))
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)
Иначе Вывод("Vi vveli ne korektnoe chislo, poprobuete snova "); goto l3; Кесли Кцикл i=0; k=0; Цикл mod = dec % 2;
a[i]=mod; i++; k++; До (dec!=0) Кцикл lol=0; Цикл от i=0 до k/2(шаг +1)
a[i]=a[k-i-1]; a[k-i-1]=lol; Кцикл Вывод("Dvoichnoe chislo: "); Цикл от i=0 до k(шаг +1)
Кцикл Вывод("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();
}